forked from metin2/client
1
0
Fork 0
client/EterPythonLib/PythonGraphicThingModule.cpp

165 lines
4.4 KiB
C++

#include "StdAfx.h"
bool PyTuple_GetThingInstance(PyObject* poArgs, int pos, CGraphicThingInstance** ppRetThingInstance)
{
int handle;
if (!PyTuple_GetInteger(poArgs, pos, &handle))
return false;
if (!handle)
return false;
*ppRetThingInstance = (CGraphicThingInstance*)handle;
return true;
}
PyObject* grpThingGenerate(PyObject* poSelf, PyObject* poArgs)
{
char * szFileName;
if (!PyTuple_GetString(poArgs, 0, &szFileName))
return Py_BuildException();
if (strlen(szFileName) <= 0)
return Py_BuildValue("i", 0);
CResource* pResource = CResourceManager::Instance().GetResourcePointer(szFileName);
if (!pResource->IsType(CGraphicThing::Type()))
return Py_BuildException();
CGraphicThingInstance * pThingInstance = CGraphicThingInstance::New();
pThingInstance->ReserveModelThing(1);
pThingInstance->ReserveModelInstance(1);
pThingInstance->RegisterModelThing(0, static_cast<CGraphicThing*>(pResource));
pThingInstance->SetModelInstance(0, 0, 0);
return Py_BuildValue("i", pThingInstance);
}
PyObject* grpThingDelete(PyObject* poSelf, PyObject* poArgs)
{
CGraphicThingInstance * pThingInstance;
if (!PyTuple_GetThingInstance(poArgs, 0, &pThingInstance))
return Py_BuildException();
CGraphicThingInstance::Delete(pThingInstance);
return Py_BuildNone();
}
PyObject* grpThingSetFileName(PyObject* poSelf, PyObject* poArgs)
{
CGraphicThingInstance * pThingInstance;
if (!PyTuple_GetThingInstance(poArgs, 0, &pThingInstance))
return Py_BuildException();
char* szFileName;
if (!PyTuple_GetString(poArgs, 1, &szFileName))
return Py_BuildException();
CResource* pResource = CResourceManager::Instance().GetResourcePointer(szFileName);
if (!pResource->IsType(CGraphicThing::Type()))
return Py_BuildException();
pThingInstance->Clear();
pThingInstance->ReserveModelThing(1);
pThingInstance->ReserveModelInstance(1);
pThingInstance->RegisterModelThing(0, static_cast<CGraphicThing*>(pResource));
pThingInstance->SetModelInstance(0, 0, 0);
return Py_BuildNone();
}
PyObject* grpThingRender(PyObject* poSelf, PyObject* poArgs)
{
CGraphicThingInstance* pThingInstance;
if (!PyTuple_GetThingInstance(poArgs, 0, &pThingInstance))
return Py_BuildException();
pThingInstance->Render();
return Py_BuildNone();
}
PyObject* grpThingUpdate(PyObject* poSelf, PyObject* poArgs)
{
CGraphicThingInstance* pThingInstance;
if (!PyTuple_GetThingInstance(poArgs, 0, &pThingInstance))
return Py_BuildException();
pThingInstance->Update();
pThingInstance->Deform();
return Py_BuildNone();
}
PyObject * grpSetThingPosition(PyObject * poSelf, PyObject * poArgs)
{
CGraphicThingInstance* pThingInstance;
if (!PyTuple_GetThingInstance(poArgs, 0, &pThingInstance))
return Py_BuildException();
float x;
if (!PyTuple_GetFloat(poArgs, 1, &x))
return Py_BuildException();
float y;
if (!PyTuple_GetFloat(poArgs, 2, &y))
return Py_BuildException();
float z;
if (!PyTuple_GetFloat(poArgs, 3, &z))
return Py_BuildException();
pThingInstance->SetPosition(x, y, z);
return Py_BuildNone();
}
PyObject * grpSetThingRotation(PyObject * poSelf, PyObject * poArgs)
{
CGraphicThingInstance* pThingInstance;
if (!PyTuple_GetThingInstance(poArgs, 0, &pThingInstance))
return Py_BuildException();
float fDegree;
if (!PyTuple_GetFloat(poArgs, 1, &fDegree))
return Py_BuildException();
pThingInstance->SetRotation(fDegree);
return Py_BuildNone();
}
PyObject * grpSetThingScale(PyObject * poSelf, PyObject * poArgs)
{
CGraphicThingInstance* pThingInstance;
if (!PyTuple_GetThingInstance(poArgs, 0, &pThingInstance))
return Py_BuildException();
float x;
if (!PyTuple_GetFloat(poArgs, 1, &x))
return Py_BuildException();
float y;
if (!PyTuple_GetFloat(poArgs, 2, &y))
return Py_BuildException();
float z;
if (!PyTuple_GetFloat(poArgs, 3, &z))
return Py_BuildException();
pThingInstance->SetScale(x, y, z);
return Py_BuildNone();
}
void initgrpThing()
{
static PyMethodDef s_methods[] =
{
{ "Update", grpThingUpdate, METH_VARARGS },
{ "Render", grpThingRender, METH_VARARGS },
{ "SetPosition", grpSetThingPosition, METH_VARARGS },
{ "Generate", grpThingGenerate, METH_VARARGS },
{ "Delete", grpThingDelete, METH_VARARGS },
{ "SetFileName", grpThingSetFileName, METH_VARARGS },
{ "SetRotation", grpSetThingRotation, METH_VARARGS },
{ "SetScale", grpSetThingScale, METH_VARARGS },
{ NULL, NULL, NULL },
};
Py_InitModule("grpThing", s_methods);
}