Files
FC1/CryScriptSystem/ScriptObject.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

159 lines
5.7 KiB
C++

// ScriptObject.h: interface for the CScriptObject class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SCRIPTOBJECT_H__6EA3E6D6_4FF9_4709_BD62_D5A97C40DB68__INCLUDED_)
#define AFX_SCRIPTOBJECT_H__6EA3E6D6_4FF9_4709_BD62_D5A97C40DB68__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "IScriptSystem.h"
extern "C"{
#include <lua.h>
}
class CScriptSystem;
/*! IScriptObject implementation
@see IScriptObject
*/
class CScriptObject : public IScriptObject
{
public:
//! constructor
CScriptObject(int nCreationNumber);
//! destructor
virtual ~CScriptObject();
bool CreateEmpty(CScriptSystem *pScriptSystem);
bool Create(CScriptSystem *pScriptSystem);
bool CreateGlobal(CScriptSystem *pScriptSystem,const char *sName);
// interface IScriptObject ----------------------------------------------------------------
virtual int GetRef();
virtual void Attach();
virtual void Attach(IScriptObject *so);
virtual void Delegate(IScriptObject *pObj);
virtual void PushBack(int nVal);
virtual void PushBack(float fVal);
virtual void PushBack(const char *sVal);
virtual void PushBack(bool bVal);
virtual void PushBack(IScriptObject *pObj);
virtual void SetValue(const char *sKey,int nVal);
virtual void SetValue(const char *sKey,float fVal);
virtual void SetValue(const char *sKey,const char *sVal);
virtual void SetValue(const char *sKey,bool bVal);
virtual void SetValue(const char *sKey,IScriptObject *pObj);
virtual void SetValue(const char *sKey, USER_DATA ud);
virtual void SetToNull(const char *sKey);
virtual bool GetValue(const char *sKey,int &nVal);
virtual bool GetValue(const char *sKey,float &fVal);
virtual bool GetValue(const char *sKey,bool &bVal);
virtual bool GetValue(const char *sKey,const char* &sVal);
virtual bool GetValue(const char *sKey,IScriptObject *pObj);
virtual bool GetValue(const char *sKey,HSCRIPTFUNCTION &funcVal);
virtual bool GetUDValue(const char *sKey, USER_DATA &nValue, int &nCookie); //AMD Port
virtual bool GetFuncData(const char *sKey, unsigned int * &pCode, int &iSize);
virtual bool BeginSetGetChain();
virtual bool GetValueChain(const char *sKey, int &nVal);
virtual bool GetValueChain(const char *sKey, float &fVal);
virtual bool GetValueChain(const char *sKey, bool &bVal);
virtual bool GetValueChain(const char *sKey, const char* &sVal);
virtual bool GetValueChain(const char *sKey, IScriptObject *pObj);
virtual bool GetValueChain(const char *sKey, HSCRIPTFUNCTION &funcVal);
virtual bool GetUDValueChain(const char *sKey, USER_DATA &nValue, int &nCookie); //AMD Port
virtual void SetValueChain(const char *sKey, int nVal);
virtual void SetValueChain(const char *sKey, float fVal);
virtual void SetValueChain(const char *sKey, const char *sVal);
virtual void SetValueChain(const char *sKey, bool bVal);
virtual void SetValueChain(const char *sKey, IScriptObject *pObj);
virtual void SetValueChain(const char *sKey, USER_DATA ud);
virtual void SetToNullChain(const char *sKey);
virtual void EndSetGetChain();
virtual ScriptVarType GetValueType(const char *sKey);
virtual ScriptVarType GetAtType(int nIdx);
virtual void SetAt(int nIdx,int nVal);
virtual void SetAt(int nIdx,float fVal);
virtual void SetAt(int nIdx,bool bVal);
virtual void SetAt(int nIdx,const char* sVal);
virtual void SetAt(int nIdx,IScriptObject *pObj);
virtual void SetAtUD(int nIdx,USER_DATA nVal);
virtual void SetNullAt(int nIdx);
virtual bool GetAt(int nIdx,int &nVal);
virtual bool GetAt(int nIdx,float &fVal);
virtual bool GetAt(int nIdx,bool &bVal);
virtual bool GetAt(int nIdx,const char* &sVal);
virtual bool GetAt(int nIdx,IScriptObject *pObj);
virtual bool GetAtUD(int nIdx,USER_DATA &nVal, int &nCookie);
virtual bool BeginIteration();
virtual bool MoveNext();
virtual bool GetCurrent(int &nVal);
virtual bool GetCurrent(float &fVal);
virtual bool GetCurrent(bool &bVal);
virtual bool GetCurrent(const char* &sVal);
virtual bool GetCurrent(IScriptObject *pObj);
virtual bool GetCurrentPtr(const void * &pObj);
virtual bool GetCurrentFuncData(unsigned int * &pCode, int &iSize);
virtual bool GetCurrentKey(int &nKey);
virtual bool GetCurrentKey(const char* &sKey);
virtual ScriptVarType GetCurrentType();
virtual void EndIteration();
virtual void Clear();
virtual int Count();
virtual bool Clone(IScriptObject *pObj);
virtual void Dump(IScriptObjectDumpSink *p);
virtual void SetNativeData(void *);
virtual void *GetNativeData();
virtual bool AddFunction(const char *sName,SCRIPT_FUNCTION pThunk,int nFuncID);
virtual bool AddSetGetHandlers(SCRIPT_FUNCTION pSetThunk,SCRIPT_FUNCTION pGetThunk);
virtual void RegisterParent(IScriptObjectSink *pSink);
virtual void Detach();
virtual void Release();
virtual bool GetValueRecursive( const char *szPath, IScriptObject *pObj );
// --------------------------------------------------------------------------
// Create object from pool.
void Recreate();
private: // -------------------------------------------------------------------
//!
bool CloneTable(int nSource,int nDest);
//!
static int SetTableTagHandler(lua_State *L);
//!
static int GetTableTagHandler(lua_State *L);
//!
static int IndexTagHandler(lua_State *L);
//!
int GetThisRef();
struct SetGetParams
{
SCRIPT_FUNCTION m_pSetThunk;
SCRIPT_FUNCTION m_pGetThunk;
HTAG m_hSetGetTag;
} *m_pSetGetParams;
lua_State * m_pLS;
int m_nRef;
int m_nIterationCounter;
HTAG m_hDelegationTag;
IScriptObjectSink * m_pSink;
//////////////////////////////////////////////////////////////////////////
// Flags.
unsigned int m_bDeleted; //!<
unsigned int m_bAttached; //!<
#ifdef _DEBUG
public:
int m_nCreationNumber;
#endif
};
#endif // !defined(AFX_SCRIPTOBJECT_H__6EA3E6D6_4FF9_4709_BD62_D5A97C40DB68__INCLUDED_)