TombEngine/TR5Main/Objects/Generic/generic_objects.cpp

283 lines
6.5 KiB
C++
Raw Normal View History

2020-09-27 20:48:01 -03:00
#include "framework.h"
#include "generic_objects.h"
2021-08-25 08:16:35 +02:00
// objects
#include "generic_trapdoor.h"
2020-09-27 20:48:01 -03:00
#include "generic_bridge.h"
2021-08-25 08:16:35 +02:00
// switches
#include "cog_switch.h"
#include "rail_switch.h"
#include "jump_switch.h"
#include "generic_switch.h"
#include "crowbar_switch.h"
#include "underwater_switch.h"
2021-08-28 06:37:22 +02:00
#include "pulley_switch.h"
#include "fullblock_switch.h"
2021-08-25 08:16:35 +02:00
2020-09-27 20:48:01 -03:00
/// necessary import
#include "setup.h"
2021-08-28 06:37:22 +02:00
using namespace TEN::Entities::Switches;
2021-08-25 08:16:35 +02:00
2020-09-27 20:48:01 -03:00
static void StartObject()
{
2020-12-21 13:16:29 -03:00
auto obj = &Objects[ID_TRAPDOOR1];
if (obj->loaded)
{
obj->initialise = InitialiseTrapDoor;
obj->collision = TrapDoorCollision;
obj->control = TrapDoorControl;
2021-06-12 16:39:13 -04:00
obj->floorBorder = TrapDoorFloorBorder;
obj->ceilingBorder = TrapDoorCeilingBorder;
obj->floor = TrapDoorFloor;
obj->ceiling = TrapDoorCeiling;
2020-12-21 13:16:29 -03:00
obj->saveAnim = true;
obj->saveFlags = true;
}
obj = &Objects[ID_TRAPDOOR2];
if (obj->loaded)
{
obj->initialise = InitialiseTrapDoor;
obj->collision = TrapDoorCollision;
obj->control = TrapDoorControl;
2021-06-12 16:39:13 -04:00
obj->floorBorder = TrapDoorFloorBorder;
obj->ceilingBorder = TrapDoorCeilingBorder;
obj->floor = TrapDoorFloor;
obj->ceiling = TrapDoorCeiling;
2020-12-21 13:16:29 -03:00
obj->saveAnim = true;
obj->saveFlags = true;
}
obj = &Objects[ID_TRAPDOOR3];
if (obj->loaded)
{
obj->initialise = InitialiseTrapDoor;
obj->collision = TrapDoorCollision;
obj->control = TrapDoorControl;
2021-06-12 16:39:13 -04:00
obj->floorBorder = TrapDoorFloorBorder;
obj->ceilingBorder = TrapDoorCeilingBorder;
obj->floor = TrapDoorFloor;
obj->ceiling = TrapDoorCeiling;
2020-12-21 13:16:29 -03:00
obj->saveAnim = true;
obj->saveFlags = true;
}
obj = &Objects[ID_FLOOR_TRAPDOOR1];
if (obj->loaded)
{
obj->initialise = InitialiseTrapDoor;
obj->collision = FloorTrapDoorCollision;
obj->control = TrapDoorControl;
obj->floorBorder = TrapDoorFloorBorder;
obj->ceilingBorder = TrapDoorCeilingBorder;
obj->floor = TrapDoorFloor;
obj->ceiling = TrapDoorCeiling;
2020-12-21 13:16:29 -03:00
obj->saveAnim = true;
obj->saveFlags = true;
}
obj = &Objects[ID_FLOOR_TRAPDOOR2];
if (obj->loaded)
{
obj->initialise = InitialiseTrapDoor;
obj->collision = FloorTrapDoorCollision;
obj->control = TrapDoorControl;
obj->floorBorder = TrapDoorFloorBorder;
obj->ceilingBorder = TrapDoorCeilingBorder;
obj->floor = TrapDoorFloor;
obj->ceiling = TrapDoorCeiling;
2020-12-21 13:16:29 -03:00
obj->saveAnim = true;
obj->saveFlags = true;
}
obj = &Objects[ID_CEILING_TRAPDOOR1];
if (obj->loaded)
{
obj->initialise = InitialiseTrapDoor;
obj->collision = CeilingTrapDoorCollision;
obj->control = TrapDoorControl;
2021-06-15 19:52:39 -04:00
obj->floorBorder = TrapDoorFloorBorder;
obj->ceilingBorder = TrapDoorCeilingBorder;
obj->floor = TrapDoorFloor;
obj->ceiling = TrapDoorCeiling;
2020-12-21 13:16:29 -03:00
obj->saveAnim = true;
obj->saveFlags = true;
}
obj = &Objects[ID_CEILING_TRAPDOOR2];
if (obj->loaded)
{
obj->initialise = InitialiseTrapDoor;
obj->collision = CeilingTrapDoorCollision;
obj->control = TrapDoorControl;
2021-06-15 19:52:39 -04:00
obj->floorBorder = TrapDoorFloorBorder;
obj->ceilingBorder = TrapDoorCeilingBorder;
obj->floor = TrapDoorFloor;
obj->ceiling = TrapDoorCeiling;
2020-12-21 13:16:29 -03:00
obj->saveAnim = true;
obj->saveFlags = true;
}
obj = &Objects[ID_BRIDGE_FLAT];
if (obj->loaded)
{
2021-01-06 17:53:13 -03:00
obj->initialise = InitialiseBridge;
2020-12-21 13:16:29 -03:00
obj->floor = BridgeFloor<0>;
obj->ceiling = BridgeCeiling<0>;
obj->floorBorder = BridgeFloorBorder<0>;
obj->ceilingBorder = BridgeCeilingBorder<0>;
2020-12-21 13:16:29 -03:00
}
obj = &Objects[ID_BRIDGE_TILT1];
if (obj->loaded)
{
2021-01-06 17:53:13 -03:00
obj->initialise = InitialiseBridge;
2020-12-21 13:16:29 -03:00
obj->floor = BridgeFloor<1>;
obj->ceiling = BridgeCeiling<1>;
obj->floorBorder = BridgeFloorBorder<1>;
obj->ceilingBorder = BridgeCeilingBorder<1>;
2020-12-21 13:16:29 -03:00
}
obj = &Objects[ID_BRIDGE_TILT2];
if (obj->loaded)
{
2021-01-06 17:53:13 -03:00
obj->initialise = InitialiseBridge;
2020-12-21 13:16:29 -03:00
obj->floor = BridgeFloor<2>;
obj->ceiling = BridgeCeiling<2>;
obj->floorBorder = BridgeFloorBorder<2>;
obj->ceilingBorder = BridgeCeilingBorder<2>;
2020-12-21 13:16:29 -03:00
}
obj = &Objects[ID_BRIDGE_TILT3];
if (obj->loaded)
{
2021-01-06 17:53:13 -03:00
obj->initialise = InitialiseBridge;
2020-12-21 13:16:29 -03:00
obj->floor = BridgeFloor<3>;
obj->ceiling = BridgeCeiling<3>;
obj->floorBorder = BridgeFloorBorder<3>;
obj->ceilingBorder = BridgeCeilingBorder<3>;
2020-12-21 13:16:29 -03:00
}
obj = &Objects[ID_BRIDGE_TILT4];
if (obj->loaded)
{
2021-01-06 17:53:13 -03:00
obj->initialise = InitialiseBridge;
2020-12-21 13:16:29 -03:00
obj->floor = BridgeFloor<4>;
obj->ceiling = BridgeCeiling<4>;
obj->floorBorder = BridgeFloorBorder<4>;
obj->ceilingBorder = BridgeCeilingBorder<4>;
2020-12-21 13:16:29 -03:00
}
2020-09-27 20:48:01 -03:00
}
2021-08-25 08:16:35 +02:00
void StartSwitches()
{
OBJECT_INFO* obj;
obj = &Objects[ID_COG_SWITCH];
if (obj->loaded)
{
obj->collision = CogSwitchCollision;
obj->control = CogSwitchControl;
obj->hitEffect = HIT_RICOCHET;
obj->saveFlags = true;
obj->saveAnim = true;
}
obj = &Objects[ID_LEVER_SWITCH];
if (obj->loaded)
{
obj->collision = RailSwitchCollision;
obj->control = SwitchControl;
obj->saveFlags = true;
obj->saveAnim = true;
}
obj = &Objects[ID_JUMP_SWITCH];
if (obj->loaded)
{
obj->collision = JumpSwitchCollision;
obj->control = SwitchControl;
obj->saveFlags = true;
obj->saveAnim = true;
}
for (int objNum = ID_SWITCH_TYPE1; objNum <= ID_SWITCH_TYPE16; objNum++)
{
obj = &Objects[objNum];
if (obj->loaded)
{
obj->collision = SwitchCollision;
obj->control = SwitchControl;
obj->saveFlags = true;
obj->saveAnim = true;
obj->saveMesh = true;
}
}
obj = &Objects[ID_CROWBAR_SWITCH];
if (obj->loaded)
{
obj->collision = CrowbarSwitchCollision;
obj->control = SwitchControl;
obj->saveFlags = true;
obj->saveAnim = true;
}
for (int objNum = ID_UNDERWATER_SWITCH1; objNum <= ID_UNDERWATER_SWITCH4; objNum++)
{
obj = &Objects[objNum];
if (obj->loaded)
{
obj->control = SwitchControl;
obj->collision = objNum < ID_UNDERWATER_SWITCH3 ? UnderwaterSwitchCollision : CeilingUnderwaterSwitchCollision;
obj->saveFlags = true;
obj->saveAnim = true;
}
}
2021-08-28 06:37:22 +02:00
obj = &Objects[ID_PULLEY];
if (obj->loaded)
{
obj->initialise = InitialisePulleySwitch;
obj->control = SwitchControl;
obj->collision = PulleySwitchCollision;
obj->saveFlags = true;
obj->saveAnim = true;
}
obj = &Objects[ID_SEQUENCE_SWITCH1];
if (obj->loaded)
{
obj->collision = FullBlockSwitchCollision;
obj->control = FullBlockSwitchControl;
obj->saveFlags = true;
obj->saveAnim = true;
}
obj = &Objects[ID_SEQUENCE_SWITCH2];
if (obj->loaded)
{
obj->collision = FullBlockSwitchCollision;
obj->control = FullBlockSwitchControl;
obj->saveFlags = true;
obj->saveAnim = true;
}
obj = &Objects[ID_SEQUENCE_SWITCH3];
if (obj->loaded)
{
obj->collision = FullBlockSwitchCollision;
obj->control = FullBlockSwitchControl;
obj->saveFlags = true;
obj->saveAnim = true;
}
2021-08-25 08:16:35 +02:00
}
2020-09-27 20:48:01 -03:00
void InitialiseGenericObjects()
{
StartObject();
2021-08-25 08:16:35 +02:00
StartSwitches();
2020-09-27 20:48:01 -03:00
}