Add more bridge slots; Allow optional floor and ceiling overriding

This commit is contained in:
asasas9500 2020-09-28 21:01:16 -03:00
parent 44a9ff2df2
commit c252205ca6
6 changed files with 28 additions and 20 deletions

View file

@ -252,8 +252,8 @@ std::optional<int> FLOOR_INFO::GetFloorHeight(int startRoomNumber, int x, int y,
{ {
auto item = &g_Level.Items[itemNumber]; auto item = &g_Level.Items[itemNumber];
auto itemHeight = Objects[item->objectNumber].floor(itemNumber, x, y, z); auto itemHeight = Objects[item->objectNumber].floor(itemNumber, x, y, z);
if (itemHeight >= y && itemHeight < height) if (itemHeight && *itemHeight >= y && *itemHeight < height)
height = itemHeight; height = *itemHeight;
} }
} }
@ -276,8 +276,8 @@ std::optional<int> FLOOR_INFO::GetCeilingHeight(int startRoomNumber, int x, int
{ {
auto item = &g_Level.Items[itemNumber]; auto item = &g_Level.Items[itemNumber];
auto itemHeight = Objects[item->objectNumber].ceiling(itemNumber, x, y, z); auto itemHeight = Objects[item->objectNumber].ceiling(itemNumber, x, y, z);
if (itemHeight <= y && itemHeight > height) if (itemHeight && *itemHeight <= y && *itemHeight > height)
height = itemHeight; height = *itemHeight;
} }
} }

View file

@ -9,16 +9,16 @@ void InitialiseBridge(short itemNumber)
FLOOR_INFO::AddCeiling(itemNumber); FLOOR_INFO::AddCeiling(itemNumber);
} }
int BridgeFloor(short itemNumber, int x, int y, int z) std::optional<int> BridgeFloor(short itemNumber, int x, int y, int z)
{ {
auto item = &g_Level.Items[itemNumber]; auto item = &g_Level.Items[itemNumber];
return item->pos.yPos + GetOffset(&item->pos, x, z); return std::optional{item->pos.yPos + GetOffset(&item->pos, x, z)};
} }
int BridgeCeiling(short itemNumber, int x, int y, int z) std::optional<int> BridgeCeiling(short itemNumber, int x, int y, int z)
{ {
auto item = &g_Level.Items[itemNumber]; auto item = &g_Level.Items[itemNumber];
return item->pos.yPos + GetOffset(&item->pos, x, z); return std::optional{item->pos.yPos + GetOffset(&item->pos, x, z)};
} }
int GetOffset(PHD_3DPOS* pos, int x, int z) int GetOffset(PHD_3DPOS* pos, int x, int z)

View file

@ -2,6 +2,6 @@
#include "phd_global.h" #include "phd_global.h"
void InitialiseBridge(short itemNumber); void InitialiseBridge(short itemNumber);
int BridgeFloor(short itemNumber, int x, int y, int z); std::optional<int> BridgeFloor(short itemNumber, int x, int y, int z);
int BridgeCeiling(short itemNumber, int x, int y, int z); std::optional<int> BridgeCeiling(short itemNumber, int x, int y, int z);
int GetOffset(PHD_3DPOS* pos, int x, int z); int GetOffset(PHD_3DPOS* pos, int x, int z);

View file

@ -9,14 +9,15 @@
static void StartObject() static void StartObject()
{ {
OBJECT_INFO* obj; for (int objNumber = ID_BRIDGE1; objNumber <= ID_BRIDGE8; ++objNumber)
obj = &Objects[ID_BRIDGE];
if (obj->loaded)
{ {
obj->initialise = InitialiseBridge; auto obj = &Objects[objNumber];
obj->floor = BridgeFloor; if (obj->loaded)
obj->ceiling = BridgeCeiling; {
obj->initialise = InitialiseBridge;
obj->floor = BridgeFloor;
obj->ceiling = BridgeCeiling;
}
} }
} }

View file

@ -955,7 +955,14 @@ typedef enum GAME_OBJECT_ID
ID_LASERHEAD_BASE, ID_LASERHEAD_BASE,
ID_LASERHEAD_TENTACLE, ID_LASERHEAD_TENTACLE,
ID_BRIDGE = 1340, ID_BRIDGE1 = 1340,
ID_BRIDGE2,
ID_BRIDGE3,
ID_BRIDGE4,
ID_BRIDGE5,
ID_BRIDGE6,
ID_BRIDGE7,
ID_BRIDGE8,
ID_HORIZON = 1350, ID_HORIZON = 1350,
ID_BINOCULAR_GRAPHICS, ID_BINOCULAR_GRAPHICS,

View file

@ -21,8 +21,8 @@ struct OBJECT_INFO
int frameBase; int frameBase;
std::function<void(short itemNumber)> initialise; std::function<void(short itemNumber)> initialise;
std::function<void(short itemNumber)> control; std::function<void(short itemNumber)> control;
std::function<int(short itemNumber, int x, int y, int z)> floor; std::function<std::optional<int>(short itemNumber, int x, int y, int z)> floor;
std::function<int(short itemNumber, int x, int y, int z)> ceiling; std::function<std::optional<int>(short itemNumber, int x, int y, int z)> ceiling;
std::function<void(ITEM_INFO* item)> drawRoutine; std::function<void(ITEM_INFO* item)> drawRoutine;
std::function<void(ITEM_INFO* item)> drawRoutineExtra; std::function<void(ITEM_INFO* item)> drawRoutineExtra;
std::function<void(short item_num, ITEM_INFO* laraitem, COLL_INFO* coll)> collision; std::function<void(short item_num, ITEM_INFO* laraitem, COLL_INFO* coll)> collision;