Lights refactor

This commit is contained in:
MontyTRC89 2020-07-26 16:17:54 +02:00
parent e057d91de3
commit ecca35d05a
3 changed files with 24 additions and 21 deletions

View file

@ -23,15 +23,16 @@ struct ROOM_DOOR
typedef struct ROOM_LIGHT typedef struct ROOM_LIGHT
{ {
float x, y, z; // Position of light, in world coordinates int x, y, z; // Position of light, in world coordinates
float r, g, b; // Colour of the light float r, g, b; // Colour of the light
float intensity;
float in; // Cosine of the IN value for light / size of IN value float in; // Cosine of the IN value for light / size of IN value
float out; // Cosine of the OUT value for light / size of OUT value float out; // Cosine of the OUT value for light / size of OUT value
float radIn; // (IN radians) * 2 float length; // Range of light
float radOut; // (OUT radians) * 2 float cutoff; // Range of light
float range; // Range of light
float dx, dy, dz; // Direction - used only by sun and spot lights float dx, dy, dz; // Direction - used only by sun and spot lights
byte type; byte type;
bool castShadows;
}; };
typedef struct MESH_INFO typedef struct MESH_INFO

View file

@ -283,7 +283,7 @@ namespace T5M::Renderer
light.Intensity = 1.0f; light.Intensity = 1.0f;
light.In = oldLight->in; light.In = oldLight->in;
light.Out = oldLight->out; light.Out = oldLight->out;
light.Range = oldLight->range; light.Range = oldLight->length;
light.Type = LIGHT_TYPE_SPOT; light.Type = LIGHT_TYPE_SPOT;
r.Lights.push_back(light); r.Lights.push_back(light);

View file

@ -128,21 +128,22 @@ int LoadItems()
for (int m = 0; m < g_Level.Rooms[r].mesh.size(); m++) for (int m = 0; m < g_Level.Rooms[r].mesh.size(); m++)
{ {
FLOOR_INFO* floor = &g_Level.Rooms[r].floor[((mesh->z - g_Level.Rooms[r].z) >> 10) + g_Level.Rooms[r].xSize * ((mesh->x - g_Level.Rooms[r].x) >> 10)]; FLOOR_INFO* floor = &g_Level.Rooms[r].floor[((mesh->z - g_Level.Rooms[r].z) / 1024) +
g_Level.Rooms[r].xSize * ((mesh->x - g_Level.Rooms[r].x) / 1024)];
if (!(g_Level.Boxes[floor->box].flags & BLOCKED) if (!(g_Level.Boxes[floor->box].flags & BLOCKED)
&& !(CurrentLevel == 5 && (r == 19 || r == 23 || r == 16))) && !(CurrentLevel == 5 && (r == 19 || r == 23 || r == 16)))
{ {
int fl = floor->floor << 2; int fl = floor->floor * 4;
STATIC_INFO* st = &StaticObjects[mesh->staticNumber]; STATIC_INFO* st = &StaticObjects[mesh->staticNumber];
if (fl <= mesh->y - st->collisionBox.Y2 + 512 && fl < mesh->y - st->collisionBox.Y1) if (fl <= mesh->y - st->collisionBox.Y2 + 512 && fl < mesh->y - st->collisionBox.Y1)
{ {
if (st->collisionBox.X1 == 0 || st->collisionBox.X2 == 0 || if (st->collisionBox.X1 == 0 || st->collisionBox.X2 == 0 ||
st->collisionBox.Z1 == 0 || st->collisionBox.Z2 == 0 || st->collisionBox.Z1 == 0 || st->collisionBox.Z2 == 0 ||
(st->collisionBox.X1 < 0 ^ st->collisionBox.X2 < 0) && ((st->collisionBox.X1 < 0) ^ (st->collisionBox.X2 < 0)) &&
(st->collisionBox.Z1 < 0 ^ st->collisionBox.Z2 < 0)) ((st->collisionBox.Z1 < 0) ^ (st->collisionBox.Z2 < 0)))
{ {
floor->box |= 8; floor->stopper = true;
} }
} }
} }
@ -596,21 +597,22 @@ void ReadRooms()
{ {
ROOM_LIGHT light; ROOM_LIGHT light;
light.x = ReadFloat(); light.x = ReadInt32();
light.y = ReadFloat(); light.y = ReadInt32();
light.z = ReadFloat(); light.z = ReadInt32();
light.r = ReadFloat();
light.g = ReadFloat();
light.b = ReadFloat();
light.in = ReadFloat();
light.out = ReadFloat();
light.radIn = ReadFloat();
light.radOut = ReadFloat();
light.range = ReadFloat();
light.dx = ReadFloat(); light.dx = ReadFloat();
light.dy = ReadFloat(); light.dy = ReadFloat();
light.dz = ReadFloat(); light.dz = ReadFloat();
light.r = ReadFloat();
light.g = ReadFloat();
light.b = ReadFloat();
light.intensity = ReadFloat();
light.in = ReadFloat();
light.out = ReadFloat();
light.length = ReadFloat();
light.cutoff = ReadFloat();
light.type = ReadInt8(); light.type = ReadInt8();
light.castShadows = ReadInt8();
room.lights.push_back(light); room.lights.push_back(light);
} }