First step for an element lua exemple
This commit is contained in:
parent
49e62a10d1
commit
81ad7792e0
@ -85,65 +85,3 @@ etkFloat_t quadDist(coord2D_ts pos1, coord2D_ts pos2)
|
|||||||
return tmpVal1*tmpVal1 + tmpVal2*tmpVal2;
|
return tmpVal1*tmpVal1 + tmpVal2*tmpVal2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#include <lua/lua.hpp>
|
|
||||||
extern "C" {
|
|
||||||
#include <lua/luaconf.h>
|
|
||||||
#include <lua/lauxlib.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
|
|
||||||
|
|
||||||
const char *metaname = "mine.type_t"; // associated with userdata of type type_t*
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int a ;
|
|
||||||
int b ;
|
|
||||||
}type_t;
|
|
||||||
|
|
||||||
|
|
||||||
int lib_a_f_4(type_t *t)
|
|
||||||
{
|
|
||||||
return t->a * t->b ;
|
|
||||||
}
|
|
||||||
|
|
||||||
LUAMOD_API int lua_lib_a_f_4(lua_State *L) {
|
|
||||||
type_t *t = (type_t *)luaL_checkudata(L, 1, metaname); // check argument type
|
|
||||||
lua_pushnumber(L, (lua_Number)lib_a_f_4(t));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
LUAMOD_API int lua_new_t(lua_State *L) { // get Lua to allocate an initialize a type_t*
|
|
||||||
int a = luaL_checkint(L, 1);
|
|
||||||
int b = luaL_checkint(L, 2);
|
|
||||||
type_t *t = (type_t *)lua_newuserdata(L, sizeof(*t));
|
|
||||||
luaL_getmetatable(L, metaname);
|
|
||||||
lua_setmetatable(L, -2);
|
|
||||||
t->a = a;
|
|
||||||
t->b = b;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const luaL_Reg functionsTable[] = {
|
|
||||||
{ "lib_a_f_4", lua_lib_a_f_4 },
|
|
||||||
{ "new_t", lua_new_t },
|
|
||||||
{ NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//http://www.swig.org/Doc1.3/Lua.html#Lua_nn13
|
|
||||||
//http://stackoverflow.com/questions/2521244/how-to-wrap-a-c-function-whose-parameters-are-pointer-to-structs-so-that-it-can
|
|
||||||
LUAMOD_API int luaopen_myLib(lua_State *L) {
|
|
||||||
luaL_register(L, "mylib", functionsTable);
|
|
||||||
luaL_newmetatable(L, metaname);
|
|
||||||
lua_pop(L, 1);
|
|
||||||
//luaL_newlib(L, functionsTable);
|
|
||||||
//lua_pop(L, 1);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -125,9 +125,4 @@ namespace ewol {
|
|||||||
|
|
||||||
etkFloat_t quadDist(coord2D_ts pos1, coord2D_ts pos2);
|
etkFloat_t quadDist(coord2D_ts pos1, coord2D_ts pos2);
|
||||||
|
|
||||||
#include <lua/lua.hpp>
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
LUAMOD_API int luaopen_myLib(lua_State *L);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
179
Sources/libewol/ewol/Game/GameElementLua.cpp
Normal file
179
Sources/libewol/ewol/Game/GameElementLua.cpp
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
/**
|
||||||
|
*******************************************************************************
|
||||||
|
* @file ewol/Game/GameElementLua.cpp
|
||||||
|
* @brief ewol game lua element system (Sources)
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @date 30/05/2012
|
||||||
|
* @par Project
|
||||||
|
* ewol
|
||||||
|
*
|
||||||
|
* @par Copyright
|
||||||
|
* Copyright 2011 Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY.
|
||||||
|
*
|
||||||
|
* Licence summary :
|
||||||
|
* You can modify and redistribute the sources code and binaries.
|
||||||
|
* You can send me the bug-fix
|
||||||
|
*
|
||||||
|
* Term of the licence in in the file licence.txt.
|
||||||
|
*
|
||||||
|
*******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <ewol/Game/GameElementLua.h>
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Lua abstraction (START)
|
||||||
|
******************************************************************************* */
|
||||||
|
|
||||||
|
#include <lua/lua.hpp>
|
||||||
|
|
||||||
|
const char *metaname = "mine.type_t"; // associated with userdata of type type_t*
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int a ;
|
||||||
|
int b ;
|
||||||
|
}type_t;
|
||||||
|
|
||||||
|
|
||||||
|
int lib_a_f_4(type_t *t)
|
||||||
|
{
|
||||||
|
return t->a * t->b ;
|
||||||
|
}
|
||||||
|
|
||||||
|
LUAMOD_API int lua_lib_a_f_4(lua_State *L) {
|
||||||
|
type_t *t = (type_t *)luaL_checkudata(L, 1, metaname); // check argument type
|
||||||
|
lua_pushnumber(L, (lua_Number)lib_a_f_4(t));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LUAMOD_API int lua_new_t(lua_State *L) { // get Lua to allocate an initialize a type_t*
|
||||||
|
int a = luaL_checkint(L, 1);
|
||||||
|
int b = luaL_checkint(L, 2);
|
||||||
|
type_t *t = (type_t *)lua_newuserdata(L, sizeof(*t));
|
||||||
|
luaL_getmetatable(L, metaname);
|
||||||
|
lua_setmetatable(L, -2);
|
||||||
|
t->a = a;
|
||||||
|
t->b = b;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const luaL_Reg functionsTable[] = {
|
||||||
|
{ "lib_a_f_4", lua_lib_a_f_4 },
|
||||||
|
{ "new_t", lua_new_t },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//http://www.swig.org/Doc1.3/Lua.html#Lua_nn13
|
||||||
|
//http://stackoverflow.com/questions/2521244/how-to-wrap-a-c-function-whose-parameters-are-pointer-to-structs-so-that-it-can
|
||||||
|
LUAMOD_API int luaopen_myLib(lua_State *L) {
|
||||||
|
luaL_register(L, "mylib", functionsTable);
|
||||||
|
luaL_newmetatable(L, metaname);
|
||||||
|
lua_pop(L, 1);
|
||||||
|
//luaL_newlib(L, functionsTable);
|
||||||
|
//lua_pop(L, 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
** Lua abstraction (END)
|
||||||
|
******************************************************************************* */
|
||||||
|
|
||||||
|
|
||||||
|
ewol::GameElementLua::GameElementLua(ewol::SceneElement & sceneElement, etk::UString& tmpName, int32_t group) :
|
||||||
|
ewol::GameElement(sceneElement, tmpName),
|
||||||
|
m_luaState(NULL)
|
||||||
|
{
|
||||||
|
// create state
|
||||||
|
m_luaState = luaL_newstate();
|
||||||
|
if (m_luaState == NULL) {
|
||||||
|
EWOL_ERROR("LUA: cannot create state: not enough memory");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
luaL_openlibs(m_luaState);
|
||||||
|
// open internal specific elements ...
|
||||||
|
luaopen_myLib(m_luaState);
|
||||||
|
|
||||||
|
if (luaL_loadfile(m_luaState, "/home/edupin/dev/perso/TethysDefender/last.lua") || lua_pcall(m_luaState, 0, 0, 0)) {
|
||||||
|
EWOL_ERROR("LUA: " << lua_tostring(m_luaState, -1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
lua_getglobal(m_luaState, "f");
|
||||||
|
if(!lua_isfunction(m_luaState,-1))
|
||||||
|
{
|
||||||
|
EWOL_ERROR("LUA: Not a function ... ");
|
||||||
|
lua_pop(m_luaState,1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lua_pushnumber(m_luaState, 21); // push 1st argument
|
||||||
|
lua_pushnumber(m_luaState, 31); // push 2nd argument
|
||||||
|
|
||||||
|
// do the call (2 arguments, 1 result)
|
||||||
|
if (lua_pcall(m_luaState, 2, 1, 0) != 0) {
|
||||||
|
EWOL_ERROR("LUA: error running function 'f':" << lua_tostring(m_luaState, -1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// retrieve result
|
||||||
|
if (!lua_isnumber(m_luaState, -1)) {
|
||||||
|
EWOL_ERROR("LUA: function `f' must return a number");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
double z = lua_tonumber(m_luaState, -1);
|
||||||
|
EWOL_ERROR("LUA: Result:" << z);
|
||||||
|
lua_pop(m_luaState, 1);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ewol::GameElementLua::~GameElementLua(void)
|
||||||
|
{
|
||||||
|
if (NULL != m_luaState) {
|
||||||
|
EWOL_DEBUG("RemoveLua Element");
|
||||||
|
lua_close(m_luaState);
|
||||||
|
m_luaState = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool ewol::GameElementLua::Process(int64_t time, int32_t deltaTime, ewol::SceneElement & sceneElement)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ewol::GameElementLua::Draw(etk::VectorType<ewol::Sprite*> & listOfSprite, etk::VectorType<ewol::Sprite*> & listOfEffects)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool ewol::GameElementLua::HaveImpact(int32_t group, int32_t type, coord2D_ts position, etkFloat_t size)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ewol::GameElementLua::Explosion(int32_t group, int32_t type, coord2D_ts position, etkFloat_t pxAtenuation, etkFloat_t power)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ewol::GameElementLua::Add(int32_t group, coord2D_ts position, coord2D_ts speed, int32_t groupEnemy, int32_t dificulty)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool ewol::GameElementLua::GetElementProperty(ewol::gameElementGenericProperty_ts &element, int32_t id)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
55
Sources/libewol/ewol/Game/GameElementLua.h
Normal file
55
Sources/libewol/ewol/Game/GameElementLua.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
*******************************************************************************
|
||||||
|
* @file ewol/Game/GameElementLua.h
|
||||||
|
* @brief ewol game lua element system (header)
|
||||||
|
* @author Edouard DUPIN
|
||||||
|
* @date 30/05/2012
|
||||||
|
* @par Project
|
||||||
|
* ewol
|
||||||
|
*
|
||||||
|
* @par Copyright
|
||||||
|
* Copyright 2011 Edouard DUPIN, all right reserved
|
||||||
|
*
|
||||||
|
* This software is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY.
|
||||||
|
*
|
||||||
|
* Licence summary :
|
||||||
|
* You can modify and redistribute the sources code and binaries.
|
||||||
|
* You can send me the bug-fix
|
||||||
|
*
|
||||||
|
* Term of the licence in in the file licence.txt.
|
||||||
|
*
|
||||||
|
*******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __EWOL_GAME_ELEMENT_LUA_H__
|
||||||
|
#define __EWOL_GAME_ELEMENT_LUA_H__
|
||||||
|
|
||||||
|
#include <etk/Types.h>
|
||||||
|
#include <ewol/Debug.h>
|
||||||
|
#include <ewol/OObject/Sprite.h>
|
||||||
|
#include <ewol/Widget.h>
|
||||||
|
#include <ewol/Game/SceneElement.h>
|
||||||
|
#include <ewol/Game/GameElement.h>
|
||||||
|
|
||||||
|
#include <lua/lua.hpp>
|
||||||
|
|
||||||
|
namespace ewol {
|
||||||
|
class GameElementLua : public ewol::GameElement
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
lua_State *m_luaState; // internal Lua state
|
||||||
|
public:
|
||||||
|
GameElementLua(ewol::SceneElement & sceneElement, etk::UString& tmpName, int32_t group);
|
||||||
|
~GameElementLua(void);
|
||||||
|
virtual bool Process(int64_t time, int32_t deltaTime, ewol::SceneElement & sceneElement);
|
||||||
|
virtual void Draw(etk::VectorType<ewol::Sprite*> & listOfSprite, etk::VectorType<ewol::Sprite*> & listOfEffects);
|
||||||
|
virtual bool HaveImpact(int32_t group, int32_t type, coord2D_ts position, etkFloat_t size);
|
||||||
|
virtual void Explosion(int32_t group, int32_t type, coord2D_ts position, etkFloat_t pxAtenuation, etkFloat_t power);
|
||||||
|
|
||||||
|
virtual void Add(int32_t group, coord2D_ts position, coord2D_ts speed, int32_t groupEnemy, int32_t dificulty);
|
||||||
|
virtual bool GetElementProperty(ewol::gameElementGenericProperty_ts &element, int32_t id);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -11,6 +11,7 @@ FILE_LIST = ewol/ewol.cpp \
|
|||||||
ewol/EObjectManager.cpp \
|
ewol/EObjectManager.cpp \
|
||||||
ewol/OObject.cpp \
|
ewol/OObject.cpp \
|
||||||
ewol/Game/GameElement.cpp \
|
ewol/Game/GameElement.cpp \
|
||||||
|
ewol/Game/GameElementLua.cpp \
|
||||||
ewol/Game/SceneElement.cpp \
|
ewol/Game/SceneElement.cpp \
|
||||||
ewol/OObject/2DText.cpp \
|
ewol/OObject/2DText.cpp \
|
||||||
ewol/OObject/2DTextColored.cpp \
|
ewol/OObject/2DTextColored.cpp \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user