TombEngine/TombEngine/Game/control/control.h
2022-06-05 03:56:08 +03:00

93 lines
1.7 KiB
C++

#pragma once
#include "Game/animation.h"
#include "Game/control/trigger.h"
#include "Game/items.h"
#include "Game/room.h"
#include "Specific/phd_global.h"
struct BOUNDING_BOX;
struct ItemInfo;
struct CollisionInfo;
class FloorInfo;
struct ANIM_STRUCT;
struct MESH_INFO;
struct ROOM_INFO;
enum class GameStatus
{
None,
NewGame,
LoadGame,
SaveGame,
ExitToTitle,
ExitGame,
LaraDead,
LevelComplete
};
enum HEADINGS
{
NORTH,
EAST,
SOUTH,
WEST
};
enum FADE_STATUS
{
FADE_STATUS_NONE,
FADE_STATUS_FADEIN,
FADE_STATUS_FADEOUT
};
constexpr int MAX_ROOMS = 1024;
constexpr int WIBBLE_SPEED = 4;
constexpr int WIBBLE_MAX = UCHAR_MAX - WIBBLE_SPEED + 1;
constexpr auto FPS = 30;
extern int GameTimer;
extern int RumbleTimer;
extern int GlobalCounter;
extern int Wibble;
extern bool InitialiseGame;
extern bool DoTheGame;
extern bool JustLoaded;
extern bool ThreadEnded;
extern int RequiredStartPos;
extern int CurrentLevel;
extern int LevelComplete;
extern bool InItemControlLoop;
extern short ItemNewRoomNo;
extern short ItemNewRooms[MAX_ROOMS];
extern short NextItemActive;
extern short NextItemFree;
extern short NextFxActive;
extern short NextFxFree;
extern int WeaponDelay;
extern int WeaponEnemyTimer;
extern std::vector<short> OutsideRoomTable[OUTSIDE_SIZE][OUTSIDE_SIZE];
int DrawPhase();
GameStatus DoTitle(int index, std::string const & ambient);
GameStatus DoLevel(int index, std::string const & ambient, bool loadFromSavegame);
GameStatus ControlPhase(int numFrames, int demoMode);
int GetRandomControl();
int GetRandomDraw();
void KillMoveItems();
void KillMoveEffects();
void UpdateShatters();
bool ExplodeItemNode(ItemInfo* item, int node, int noXZVel, int bits);
void CleanUp();
unsigned CALLBACK GameMain(void*);