mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-05-02 09:47:58 +03:00
Add CreateEmpty, so that new can be called on the Lua side with no args.
Change pos and rot from arrays to GameScript[Position/Rotation]. Add getters and setters for the members used so far. Add Init, which for now is needed to get an item working properly.
This commit is contained in:
parent
a507e9e1be
commit
d225041048
2 changed files with 247 additions and 37 deletions
|
@ -3,48 +3,80 @@
|
||||||
#include "items.h"
|
#include "items.h"
|
||||||
#include "objectslist.h"
|
#include "objectslist.h"
|
||||||
#include "level.h"
|
#include "level.h"
|
||||||
|
#include "GameScriptPosition.h"
|
||||||
|
#include "GameScriptRotation.h"
|
||||||
|
|
||||||
void GameScriptItemInfo::Register(sol::state * state)
|
void GameScriptItemInfo::Register(sol::state * state)
|
||||||
{
|
{
|
||||||
state->new_usertype<GameScriptItemInfo>("ItemInfo",
|
state->new_usertype<GameScriptItemInfo>("ItemInfo",
|
||||||
"new", sol::factories(&GameScriptItemInfo::Create));
|
"new", sol::overload(&GameScriptItemInfo::Create, &GameScriptItemInfo::CreateEmpty),
|
||||||
}
|
"Init", &GameScriptItemInfo::Init,
|
||||||
|
"GetPos", &GameScriptItemInfo::GetPos,
|
||||||
|
"GetRot", &GameScriptItemInfo::GetRot,
|
||||||
|
"GetCurrentAnim", &GameScriptItemInfo::GetCurrentAnim,
|
||||||
|
"GetRequiredAnim", &GameScriptItemInfo::GetRequiredAnim,
|
||||||
|
"GetHP", &GameScriptItemInfo::GetHP,
|
||||||
|
"GetOCB", &GameScriptItemInfo::GetOCB,
|
||||||
|
"GetItemFlags", &GameScriptItemInfo::GetItemFlags,
|
||||||
|
"GetAIBits", &GameScriptItemInfo::GetAIBits,
|
||||||
|
"GetStatus", &GameScriptItemInfo::GetStatus,
|
||||||
|
"GetHitStatus", &GameScriptItemInfo::GetHitStatus,
|
||||||
|
"GetActive", &GameScriptItemInfo::GetActive,
|
||||||
|
"SetPos", &GameScriptItemInfo::SetPos,
|
||||||
|
"SetRot", &GameScriptItemInfo::SetRot,
|
||||||
|
"SetCurrentAnim", &GameScriptItemInfo::SetCurrentAnim,
|
||||||
|
"SetRequiredAnim", &GameScriptItemInfo::SetRequiredAnim,
|
||||||
|
"SetHP", &GameScriptItemInfo::SetHP,
|
||||||
|
"SetOCB", &GameScriptItemInfo::SetOCB,
|
||||||
|
"SetItemFlags", &GameScriptItemInfo::SetItemFlags,
|
||||||
|
"SetAIBits", &GameScriptItemInfo::SetAIBits,
|
||||||
|
"SetStatus", &GameScriptItemInfo::SetStatus,
|
||||||
|
"SetHitStatus", &GameScriptItemInfo::SetHitStatus,
|
||||||
|
"SetActive", &GameScriptItemInfo::SetActive);
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<GameScriptItemInfo> GameScriptItemInfo::Create(
|
std::unique_ptr<GameScriptItemInfo> GameScriptItemInfo::CreateEmpty()
|
||||||
short hp,
|
|
||||||
short currentAnim,
|
|
||||||
short requiredAnimState,
|
|
||||||
sol::as_table_t<std::array<int, 3>> pos,
|
|
||||||
sol::as_table_t<std::array<short, 3>> rot,
|
|
||||||
sol::as_table_t<std::array<short, 8>> itemFlags,
|
|
||||||
short ocb,
|
|
||||||
byte aiBits,
|
|
||||||
short status,
|
|
||||||
bool active,
|
|
||||||
bool hitStatus)
|
|
||||||
{
|
{
|
||||||
short num = CreateItem();
|
short num = CreateItem();
|
||||||
ITEM_INFO * item = &g_Level.Items[num];
|
ITEM_INFO * item = &g_Level.Items[num];
|
||||||
|
item->objectNumber = ID_SMALLMEDI_ITEM;
|
||||||
auto p = pos.value();
|
return std::make_unique<GameScriptItemInfo>(num);
|
||||||
auto r = rot.value();
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<GameScriptItemInfo> GameScriptItemInfo::Create(
|
||||||
|
GameScriptPosition pos,
|
||||||
|
GameScriptRotation rot,
|
||||||
|
short currentAnim,
|
||||||
|
short requiredAnim,
|
||||||
|
short hp,
|
||||||
|
short ocb,
|
||||||
|
sol::as_table_t<std::array<short, 8>> itemFlags,
|
||||||
|
byte aiBits,
|
||||||
|
short status,
|
||||||
|
bool active,
|
||||||
|
bool hitStatus
|
||||||
|
)
|
||||||
|
{
|
||||||
|
short num = CreateItem();
|
||||||
|
ITEM_INFO * item = &g_Level.Items[num];
|
||||||
|
|
||||||
item->pos = PHD_3DPOS(
|
item->pos = PHD_3DPOS(
|
||||||
p[0],
|
pos.GetX(),
|
||||||
p[1],
|
pos.GetY(),
|
||||||
p[2],
|
pos.GetZ(),
|
||||||
r[0],
|
rot.GetX(),
|
||||||
r[1],
|
rot.GetY(),
|
||||||
r[2]
|
rot.GetZ()
|
||||||
);
|
);
|
||||||
|
|
||||||
//make it a big medipack by default for now
|
//make it a big medipack by default for now
|
||||||
item->objectNumber = ID_BIGMEDI_ITEM;
|
item->objectNumber = ID_BIGMEDI_ITEM;
|
||||||
InitialiseItem(num);
|
InitialiseItem(num);
|
||||||
|
|
||||||
item->hitPoints = hp;
|
|
||||||
item->currentAnimState = currentAnim;
|
item->currentAnimState = currentAnim;
|
||||||
item->requiredAnimState = requiredAnimState;
|
item->requiredAnimState = requiredAnim;
|
||||||
memcpy(item->itemFlags, itemFlags.value().data(), sizeof(item->itemFlags));
|
memcpy(item->itemFlags, itemFlags.value().data(), sizeof(item->itemFlags));
|
||||||
|
item->hitPoints = hp;
|
||||||
item->triggerFlags = ocb;
|
item->triggerFlags = ocb;
|
||||||
item->aiBits = aiBits;
|
item->aiBits = aiBits;
|
||||||
item->status = status;
|
item->status = status;
|
||||||
|
@ -54,8 +86,157 @@ std::unique_ptr<GameScriptItemInfo> GameScriptItemInfo::Create(
|
||||||
return std::make_unique<GameScriptItemInfo>(num);
|
return std::make_unique<GameScriptItemInfo>(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::Init()
|
||||||
|
{
|
||||||
|
InitialiseItem(m_num);
|
||||||
|
}
|
||||||
|
|
||||||
|
GameScriptPosition GameScriptItemInfo::GetPos() const
|
||||||
|
{
|
||||||
|
ITEM_INFO * item = &g_Level.Items[m_num];
|
||||||
|
return GameScriptPosition( item->pos.xPos,
|
||||||
|
item->pos.yPos,
|
||||||
|
item->pos.zPos);
|
||||||
|
}
|
||||||
|
|
||||||
|
GameScriptRotation GameScriptItemInfo::GetRot() const
|
||||||
|
{
|
||||||
|
ITEM_INFO * item = &g_Level.Items[m_num];
|
||||||
|
return GameScriptRotation( item->pos.xRot,
|
||||||
|
item->pos.yRot,
|
||||||
|
item->pos.zRot);
|
||||||
|
}
|
||||||
|
|
||||||
|
short GameScriptItemInfo::GetHP() const
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
return(item->hitPoints);
|
||||||
|
}
|
||||||
|
|
||||||
|
short GameScriptItemInfo::GetOCB() const
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
return item->triggerFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
byte GameScriptItemInfo::GetAIBits() const
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
return item->aiBits;
|
||||||
|
}
|
||||||
|
|
||||||
|
sol::as_table_t<std::array<short, 8>> GameScriptItemInfo::GetItemFlags() const
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
std::array<short, 8> ret;
|
||||||
|
memcpy(ret.data(), item->itemFlags, sizeof(item->itemFlags));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
short GameScriptItemInfo::GetCurrentAnim() const
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
return item->currentAnimState;
|
||||||
|
}
|
||||||
|
|
||||||
|
short GameScriptItemInfo::GetRequiredAnim() const
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
return item->requiredAnimState;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
short GameScriptItemInfo::GetStatus() const
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
return item->status;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GameScriptItemInfo::GetHitStatus() const
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
return item->hitStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool GameScriptItemInfo::GetActive() const
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
return item->active;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetPos(GameScriptPosition const& pos)
|
||||||
|
{
|
||||||
|
ITEM_INFO * item = &g_Level.Items[m_num];
|
||||||
|
item->pos.xPos = pos.x;
|
||||||
|
item->pos.yPos = pos.y;
|
||||||
|
item->pos.zPos = pos.z;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetRot(GameScriptRotation const& rot)
|
||||||
|
{
|
||||||
|
ITEM_INFO * item = &g_Level.Items[m_num];
|
||||||
|
item->pos.xRot = rot.GetX();
|
||||||
|
item->pos.yRot = rot.GetY();
|
||||||
|
item->pos.zRot = rot.GetZ();
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetHP(short hp)
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
item->hitPoints = hp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetOCB(short ocb)
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
item->triggerFlags = ocb;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetAIBits(byte bits)
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
item->aiBits = bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetItemFlags(sol::as_table_t<std::array<short, 8>> const& arr)
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
memcpy(item->itemFlags, arr.value().data(), sizeof(item->itemFlags));
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetCurrentAnim(short anim)
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
item->currentAnimState = anim;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetRequiredAnim(short anim)
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
item->requiredAnimState = anim;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetStatus(short status)
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
item->status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetHitStatus(bool hitStatus)
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
item->hitStatus = hitStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GameScriptItemInfo::SetActive(bool active)
|
||||||
|
{
|
||||||
|
ITEM_INFO* item = &g_Level.Items[m_num];
|
||||||
|
item->active = active;
|
||||||
|
}
|
||||||
|
|
||||||
GameScriptItemInfo::GameScriptItemInfo(short num) : m_num{ num } {};
|
GameScriptItemInfo::GameScriptItemInfo(short num) : m_num{ num } {};
|
||||||
|
|
||||||
|
// todo.. how to check if item is killed outside of script?
|
||||||
GameScriptItemInfo::~GameScriptItemInfo() {
|
GameScriptItemInfo::~GameScriptItemInfo() {
|
||||||
KillItem(m_num);
|
KillItem(m_num);
|
||||||
}
|
}
|
|
@ -2,8 +2,10 @@
|
||||||
|
|
||||||
namespace sol {
|
namespace sol {
|
||||||
class state;
|
class state;
|
||||||
template <typename T> class as_table_t;
|
template <typename T> struct as_table_t;
|
||||||
}
|
}
|
||||||
|
class GameScriptPosition;
|
||||||
|
class GameScriptRotation;
|
||||||
|
|
||||||
class GameScriptItemInfo
|
class GameScriptItemInfo
|
||||||
{
|
{
|
||||||
|
@ -15,16 +17,43 @@ public:
|
||||||
GameScriptItemInfo& operator=(GameScriptItemInfo const& other) = delete;
|
GameScriptItemInfo& operator=(GameScriptItemInfo const& other) = delete;
|
||||||
GameScriptItemInfo(GameScriptItemInfo const& other) = delete;
|
GameScriptItemInfo(GameScriptItemInfo const& other) = delete;
|
||||||
static void Register(sol::state *);
|
static void Register(sol::state *);
|
||||||
|
static std::unique_ptr<GameScriptItemInfo> CreateEmpty();
|
||||||
static std::unique_ptr<GameScriptItemInfo> Create(
|
static std::unique_ptr<GameScriptItemInfo> Create(
|
||||||
short hp,
|
GameScriptPosition pos,
|
||||||
short currentAnim,
|
GameScriptRotation aRot,
|
||||||
short requiredAnimState,
|
short aCurrentAnim,
|
||||||
sol::as_table_t<std::array<int, 3>> pos,
|
short aRequiredAnim,
|
||||||
sol::as_table_t<std::array<short, 3>> rot,
|
short aHp,
|
||||||
sol::as_table_t<std::array<short, 8>> itemFlags,
|
short aOcb,
|
||||||
short ocb,
|
sol::as_table_t<std::array<short, 8>> aFlags,
|
||||||
byte aiBits,
|
byte aAiBits,
|
||||||
short status,
|
short aStatus,
|
||||||
bool active,
|
bool aActive,
|
||||||
bool hitStatus);
|
bool aHitStatus
|
||||||
|
);
|
||||||
|
GameScriptPosition GetPos() const;
|
||||||
|
GameScriptRotation GetRot() const;
|
||||||
|
short GetCurrentAnim() const;
|
||||||
|
short GetRequiredAnim() const;
|
||||||
|
short GetHP() const;
|
||||||
|
short GetOCB() const;
|
||||||
|
sol::as_table_t<std::array<short, 8>> GetItemFlags() const;
|
||||||
|
byte GetAIBits() const;
|
||||||
|
short GetStatus() const;
|
||||||
|
bool GetHitStatus() const;
|
||||||
|
bool GetActive() const;
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
void SetPos(GameScriptPosition const& pos);
|
||||||
|
void SetRot(GameScriptRotation const& rot);
|
||||||
|
void SetCurrentAnim(short anim);
|
||||||
|
void SetRequiredAnim(short anim);
|
||||||
|
void SetHP(short hp);
|
||||||
|
void SetOCB(short ocb);
|
||||||
|
void SetItemFlags(sol::as_table_t<std::array<short, 8>> const & arr);
|
||||||
|
void SetAIBits(byte bits);
|
||||||
|
void SetStatus(short status);
|
||||||
|
void SetHitStatus(bool hitStatus);
|
||||||
|
void SetActive(bool active);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue