2020-05-27 19:07:34 +02:00
|
|
|
#include "framework.h"
|
2020-05-30 15:55:23 +02:00
|
|
|
#include "object_helper.h"
|
2020-05-27 19:07:34 +02:00
|
|
|
#include "collide.h"
|
|
|
|
#include "objects.h"
|
|
|
|
#include "pickup.h"
|
|
|
|
#include "level.h"
|
|
|
|
#include "tr5_smashobject.h"
|
|
|
|
#include "tr5_pushableblock.h"
|
2020-06-20 23:39:08 +02:00
|
|
|
using std::function;
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitSmashObject(OBJECT_INFO* obj, int objectNumber)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSmashObject;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->control = SmashObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitKeyHole(OBJECT_INFO* obj, int objectNumber)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = KeyHoleCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitPuzzleHole(OBJECT_INFO* obj, int objectNumber)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PuzzleHoleCollision;
|
|
|
|
obj->control = AnimatingControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->isPuzzleHole = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitPuzzleDone(OBJECT_INFO* obj, int objectNumber)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PuzzleDoneCollision;
|
|
|
|
obj->control = AnimatingControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitAnimating(OBJECT_INFO* obj, int objectNumber)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseAnimating;
|
|
|
|
obj->control = AnimatingControl;
|
|
|
|
obj->collision = ObjectCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
obj->saveMesh = true;
|
2020-07-03 07:05:33 +02:00
|
|
|
//Bones[obj->boneIndex + (0 * 4)] |= ROT_Y;
|
|
|
|
//Bones[obj->boneIndex + (1 * 4)] |= ROT_X;
|
2020-05-27 19:07:34 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitPickup(OBJECT_INFO* obj, int objectNumber)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialisePickup;
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->control = PickupControl;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->isPickup = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitPickupItem(OBJECT_INFO* obj, function<InitFunction> func, int objectNumber, bool useDrawAnimItem)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->collision = PickupCollision;
|
|
|
|
obj->control = func;
|
|
|
|
|
|
|
|
if (objectNumber == ID_FLARE_ITEM)
|
|
|
|
{
|
|
|
|
obj->pivotLength = 256;
|
|
|
|
obj->hitPoints = 256; // time
|
|
|
|
}
|
|
|
|
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
if (useDrawAnimItem)
|
|
|
|
obj->usingDrawAnimatingItem = true;
|
|
|
|
else
|
|
|
|
obj->usingDrawAnimatingItem = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitProjectile(OBJECT_INFO* obj, function<InitFunction> func, int objectNumber, bool noLoad)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded || noLoad)
|
|
|
|
{
|
|
|
|
obj->initialise = nullptr;
|
|
|
|
obj->collision = nullptr;
|
|
|
|
obj->control = func;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitSearchObject(OBJECT_INFO* obj, int objectNumber)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialiseSearchObject;
|
|
|
|
obj->collision = SearchObjectCollision;
|
|
|
|
obj->control = SearchObjectControl;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-07-07 07:32:33 +02:00
|
|
|
void InitPushableObject(OBJECT_INFO* obj, int objectNumber)
|
2020-05-27 19:07:34 +02:00
|
|
|
{
|
|
|
|
obj = &Objects[objectNumber];
|
|
|
|
if (obj->loaded)
|
|
|
|
{
|
|
|
|
obj->initialise = InitialisePushableBlock;
|
|
|
|
obj->control = PushableBlockControl;
|
|
|
|
obj->collision = PushableBlockCollision;
|
|
|
|
obj->saveFlags = true;
|
|
|
|
obj->savePosition = true;
|
|
|
|
obj->saveAnim = true;
|
|
|
|
}
|
|
|
|
}
|