#ifndef DMSDK_GAMESYS_SCRIPT_H
#define DMSDK_GAMESYS_SCRIPT_H
#include <dmsdk/dlib/buffer.h>
#include <dmsdk/dlib/log.h>
#include <dmsdk/script/script.h>
#include <dmsdk/gameobject/gameobject.h>
extern "C"
{
#include <dmsdk/lua/lua.h>
#include <dmsdk/lua/lauxlib.h>
}
namespace dmScript
{
dmGameObject::HInstance CheckGOInstance(lua_State* L);
dmGameObject::HInstance CheckGOInstance(lua_State* L, int index);
enum LuaBufferOwnership
{
OWNER_C = 0,
OWNER_LUA = 1,
OWNER_RES = 2,
};
struct LuaHBuffer
{
union {
dmBuffer::HBuffer m_Buffer;
void* m_BufferRes;
};
union
{
bool m_UseLuaGC; LuaBufferOwnership m_Owner;
};
LuaHBuffer() {}
LuaHBuffer(dmBuffer::HBuffer buffer, LuaBufferOwnership ownership)
: m_Buffer(buffer)
, m_Owner(ownership)
{
}
LuaHBuffer(void* buffer_resource)
: m_BufferRes(buffer_resource)
, m_Owner(OWNER_RES)
{
}
LuaHBuffer(dmBuffer::HBuffer buffer, bool use_lua_gc)
: m_Buffer(buffer)
, m_UseLuaGC(use_lua_gc)
{
static int first = 1;
if (first)
{
first = 0;
dmLogWarning("The constructor is deprecated: dmScript::LuaHBuffer wrapper = { HBuffer, bool };");
}
}
};
bool IsBuffer(lua_State* L, int index);
void PushBuffer(lua_State* L, const LuaHBuffer& buffer);
LuaHBuffer* CheckBuffer(lua_State* L, int index);
LuaHBuffer* CheckBufferNoError(lua_State* L, int index);
}
#endif