mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-04-30 16:57:57 +03:00
130 lines
No EOL
3.2 KiB
C++
130 lines
No EOL
3.2 KiB
C++
#pragma once
|
|
|
|
#include <sol.hpp>
|
|
#include <vector>
|
|
#include <string>
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <map>
|
|
#include "..\Global\global.h"
|
|
|
|
using namespace std;
|
|
|
|
#define ITEM_PARAM_CURRENT_ANIM_STATE 0
|
|
#define ITEM_PARAM_GOAL_ANIM_STATE 1
|
|
#define ITEM_PARAM_REQUIRED_ANIM_STATE 2
|
|
#define ITEM_PARAM_FRAME_NUMBER 3
|
|
#define ITEM_PARAM_ANIM_NUMBER 4
|
|
#define ITEM_PARAM_HIT_POINTS 5
|
|
#define ITEM_PARAM_HIT_STATUS 6
|
|
#define ITEM_PARAM_GRAVITY_STATUS 7
|
|
#define ITEM_PARAM_COLLIDABLE 8
|
|
#define ITEM_PARAM_POISONED 9
|
|
|
|
typedef struct LuaFunction {
|
|
string Name;
|
|
string Code;
|
|
bool Executed;
|
|
};
|
|
|
|
typedef struct GameScriptItem {
|
|
private:
|
|
ITEM_INFO* m_item;
|
|
|
|
public:
|
|
GameScriptItem(ITEM_INFO* item)
|
|
{
|
|
m_item = item;
|
|
}
|
|
|
|
__int16 Get(__int32 param)
|
|
{
|
|
switch (param)
|
|
{
|
|
case ITEM_PARAM_CURRENT_ANIM_STATE:
|
|
return m_item->currentAnimState;
|
|
case ITEM_PARAM_REQUIRED_ANIM_STATE:
|
|
return m_item->requiredAnimState;
|
|
case ITEM_PARAM_GOAL_ANIM_STATE:
|
|
return m_item->goalAnimState;
|
|
case ITEM_PARAM_ANIM_NUMBER:
|
|
return m_item->animNumber;
|
|
case ITEM_PARAM_FRAME_NUMBER:
|
|
return m_item->frameNumber;
|
|
case ITEM_PARAM_HIT_POINTS:
|
|
return m_item->hitPoints;
|
|
case ITEM_PARAM_HIT_STATUS:
|
|
return m_item->hitStatus;
|
|
case ITEM_PARAM_GRAVITY_STATUS:
|
|
return m_item->gravityStatus;
|
|
case ITEM_PARAM_COLLIDABLE:
|
|
return m_item->collidable;
|
|
case ITEM_PARAM_POISONED:
|
|
return m_item->poisoned;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
void Set(__int32 param, __int16 value)
|
|
{
|
|
switch (param)
|
|
{
|
|
case ITEM_PARAM_CURRENT_ANIM_STATE:
|
|
m_item->currentAnimState = value; break;
|
|
case ITEM_PARAM_REQUIRED_ANIM_STATE:
|
|
m_item->requiredAnimState = value; break;
|
|
case ITEM_PARAM_GOAL_ANIM_STATE:
|
|
m_item->goalAnimState = value; break;
|
|
case ITEM_PARAM_ANIM_NUMBER:
|
|
m_item->animNumber = value;
|
|
m_item->frameNumber = Anims[m_item->animNumber].frameBase;
|
|
break;
|
|
case ITEM_PARAM_FRAME_NUMBER:
|
|
m_item->frameNumber = value; break;
|
|
case ITEM_PARAM_HIT_POINTS:
|
|
m_item->hitPoints = value; break;
|
|
case ITEM_PARAM_HIT_STATUS:
|
|
m_item->hitStatus = value; break;
|
|
case ITEM_PARAM_GRAVITY_STATUS:
|
|
m_item->gravityStatus = value; break;
|
|
case ITEM_PARAM_COLLIDABLE:
|
|
m_item->collidable = value; break;
|
|
case ITEM_PARAM_POISONED:
|
|
m_item->poisoned = value; break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
class GameScript
|
|
{
|
|
private:
|
|
sol::state* m_lua;
|
|
|
|
string loadScriptFromFile(char* luaFilename);
|
|
map<__int16, __int16> m_itemsMap;
|
|
|
|
public:
|
|
vector<LuaFunction*> Triggers;
|
|
|
|
GameScript(sol::state* lua);
|
|
~GameScript();
|
|
|
|
bool ExecuteScript(char* luaFilename);
|
|
void FreeLevelScripts();
|
|
void AddTrigger(LuaFunction* function);
|
|
|
|
void EnableItem(__int16 id);
|
|
void DisableItem(__int16 id);
|
|
void PlayAudioTrack(__int16 track);
|
|
void ChangeAmbientSoundTrack(__int16 track);
|
|
bool ExecuteTrigger(__int16 index);
|
|
void JumpToLevel(__int32 levelNum);
|
|
__int32 GetSecretsCount();
|
|
void SetSecretsCount(__int32 secretsNum);
|
|
void AddOneSecret();
|
|
void MakeItemInvisible(__int16 id);
|
|
GameScriptItem GetItem(__int16 id);
|
|
}; |