mirror of
https://gitlab.com/shinovon/re3-symbian.git
synced 2026-05-23 01:57:21 +03:00
Initial commit
This commit is contained in:
commit
77cdaaf97e
827 changed files with 418745 additions and 0 deletions
143
src/core/SurfaceTable.cpp
Normal file
143
src/core/SurfaceTable.cpp
Normal file
|
|
@ -0,0 +1,143 @@
|
|||
#include "common.h"
|
||||
|
||||
#include "main.h"
|
||||
#include "FileMgr.h"
|
||||
#include "Weather.h"
|
||||
#include "Collision.h"
|
||||
#include "SurfaceTable.h"
|
||||
|
||||
float CSurfaceTable::ms_aAdhesiveLimitTable[NUMADHESIVEGROUPS][NUMADHESIVEGROUPS];
|
||||
|
||||
void
|
||||
CSurfaceTable::Initialise(Const char *filename)
|
||||
{
|
||||
int lineno, fieldno;
|
||||
char *line;
|
||||
char surfname[256];
|
||||
float adhesiveLimit;
|
||||
|
||||
CFileMgr::SetDir("");
|
||||
CFileMgr::LoadFile(filename, work_buff, sizeof(work_buff), "r");
|
||||
|
||||
line = (char*)work_buff;
|
||||
for(lineno = 0; lineno < NUMADHESIVEGROUPS; lineno++){
|
||||
// skip white space and comments
|
||||
while(*line == ' ' || *line == '\t' || *line == '\n' || *line == '\r' || *line == ';'){
|
||||
if(*line == ';'){
|
||||
while(*line != '\n' && *line != '\r')
|
||||
line++;
|
||||
}else
|
||||
line++;
|
||||
}
|
||||
|
||||
sscanf(line, "%s", surfname);
|
||||
// skip what we just read
|
||||
while(!(*line == ' ' || *line == '\t' || *line == ','))
|
||||
line++;
|
||||
|
||||
for(fieldno = 0; fieldno <= lineno; fieldno++){
|
||||
// skip white space
|
||||
while(*line == ' ' || *line == '\t' || *line == ',')
|
||||
line++;
|
||||
adhesiveLimit = 0.0f;
|
||||
if(*line != '-')
|
||||
sscanf(line, "%f", &adhesiveLimit);
|
||||
// skip what we just read
|
||||
while(!(*line == ' ' || *line == '\t' || *line == ',' || *line == '\n'))
|
||||
line++;
|
||||
|
||||
ms_aAdhesiveLimitTable[lineno][fieldno] = adhesiveLimit;
|
||||
ms_aAdhesiveLimitTable[fieldno][lineno] = adhesiveLimit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
CSurfaceTable::GetAdhesionGroup(uint8 surfaceType)
|
||||
{
|
||||
switch(surfaceType){
|
||||
case SURFACE_DEFAULT: return ADHESIVE_ROAD;
|
||||
case SURFACE_TARMAC: return ADHESIVE_ROAD;
|
||||
case SURFACE_GRASS: return ADHESIVE_LOOSE;
|
||||
case SURFACE_GRAVEL: return ADHESIVE_LOOSE;
|
||||
case SURFACE_MUD_DRY: return ADHESIVE_HARD;
|
||||
case SURFACE_PAVEMENT: return ADHESIVE_ROAD;
|
||||
case SURFACE_CAR: return ADHESIVE_HARD;
|
||||
case SURFACE_GLASS: return ADHESIVE_HARD;
|
||||
case SURFACE_TRANSPARENT_CLOTH: return ADHESIVE_HARD;
|
||||
case SURFACE_GARAGE_DOOR: return ADHESIVE_HARD;
|
||||
case SURFACE_CAR_PANEL: return ADHESIVE_HARD;
|
||||
case SURFACE_THICK_METAL_PLATE: return ADHESIVE_HARD;
|
||||
case SURFACE_SCAFFOLD_POLE: return ADHESIVE_HARD;
|
||||
case SURFACE_LAMP_POST: return ADHESIVE_HARD;
|
||||
case SURFACE_FIRE_HYDRANT: return ADHESIVE_HARD;
|
||||
case SURFACE_GIRDER: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL_CHAIN_FENCE: return ADHESIVE_HARD;
|
||||
case SURFACE_PED: return ADHESIVE_RUBBER;
|
||||
case SURFACE_SAND: return ADHESIVE_LOOSE;
|
||||
case SURFACE_WATER: return ADHESIVE_WET;
|
||||
case SURFACE_WOOD_CRATES: return ADHESIVE_ROAD;
|
||||
case SURFACE_WOOD_BENCH: return ADHESIVE_ROAD;
|
||||
case SURFACE_WOOD_SOLID: return ADHESIVE_ROAD;
|
||||
case SURFACE_RUBBER: return ADHESIVE_RUBBER;
|
||||
case SURFACE_PLASTIC: return ADHESIVE_HARD;
|
||||
case SURFACE_HEDGE: return ADHESIVE_LOOSE;
|
||||
case SURFACE_STEEP_CLIFF: return ADHESIVE_LOOSE;
|
||||
case SURFACE_CONTAINER: return ADHESIVE_HARD;
|
||||
case SURFACE_NEWS_VENDOR: return ADHESIVE_HARD;
|
||||
case SURFACE_WHEELBASE: return ADHESIVE_RUBBER;
|
||||
case SURFACE_CARDBOARDBOX: return ADHESIVE_LOOSE;
|
||||
case SURFACE_TRANSPARENT_STONE: return ADHESIVE_HARD;
|
||||
case SURFACE_METAL_GATE: return ADHESIVE_HARD;
|
||||
default: return ADHESIVE_ROAD;
|
||||
}
|
||||
}
|
||||
|
||||
float
|
||||
CSurfaceTable::GetWetMultiplier(uint8 surfaceType)
|
||||
{
|
||||
switch(surfaceType){
|
||||
case SURFACE_DEFAULT:
|
||||
case SURFACE_TARMAC:
|
||||
case SURFACE_MUD_DRY:
|
||||
case SURFACE_PAVEMENT:
|
||||
case SURFACE_TRANSPARENT_CLOTH:
|
||||
case SURFACE_WOOD_CRATES:
|
||||
case SURFACE_WOOD_BENCH:
|
||||
case SURFACE_WOOD_SOLID:
|
||||
case SURFACE_HEDGE:
|
||||
case SURFACE_CARDBOARDBOX:
|
||||
case SURFACE_TRANSPARENT_STONE:
|
||||
return 1.0f - CWeather::WetRoads*0.25f;
|
||||
|
||||
case SURFACE_GRASS:
|
||||
case SURFACE_CAR:
|
||||
case SURFACE_GLASS:
|
||||
case SURFACE_GARAGE_DOOR:
|
||||
case SURFACE_CAR_PANEL:
|
||||
case SURFACE_THICK_METAL_PLATE:
|
||||
case SURFACE_SCAFFOLD_POLE:
|
||||
case SURFACE_LAMP_POST:
|
||||
case SURFACE_FIRE_HYDRANT:
|
||||
case SURFACE_GIRDER:
|
||||
case SURFACE_METAL_CHAIN_FENCE:
|
||||
case SURFACE_PED:
|
||||
case SURFACE_RUBBER:
|
||||
case SURFACE_PLASTIC:
|
||||
case SURFACE_STEEP_CLIFF:
|
||||
case SURFACE_CONTAINER:
|
||||
case SURFACE_NEWS_VENDOR:
|
||||
case SURFACE_WHEELBASE:
|
||||
case SURFACE_METAL_GATE:
|
||||
return 1.0f - CWeather::WetRoads*0.4f;
|
||||
|
||||
default:
|
||||
return 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
float
|
||||
CSurfaceTable::GetAdhesiveLimit(CColPoint &colpoint)
|
||||
{
|
||||
return ms_aAdhesiveLimitTable[GetAdhesionGroup(colpoint.surfaceB)][GetAdhesionGroup(colpoint.surfaceA)];
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue