add somme controle for lua element
This commit is contained in:
parent
f434da041a
commit
37a562812f
@ -42,6 +42,7 @@ namespace ewol {
|
|||||||
uint16_t m_uniqueId;
|
uint16_t m_uniqueId;
|
||||||
uint16_t m_group;
|
uint16_t m_group;
|
||||||
int32_t m_type;
|
int32_t m_type;
|
||||||
|
int32_t m_power;
|
||||||
bool m_visible;
|
bool m_visible;
|
||||||
coord2D_ts m_position;
|
coord2D_ts m_position;
|
||||||
coord2D_ts m_speed;
|
coord2D_ts m_speed;
|
||||||
@ -79,6 +80,8 @@ namespace ewol {
|
|||||||
void AngleSet(etkFloat_t state) { m_angle = state; };
|
void AngleSet(etkFloat_t state) { m_angle = state; };
|
||||||
etkFloat_t GravityGet(void) { return m_gravity; };
|
etkFloat_t GravityGet(void) { return m_gravity; };
|
||||||
void GravitySet(etkFloat_t state) { m_gravity = state; };
|
void GravitySet(etkFloat_t state) { m_gravity = state; };
|
||||||
|
int32_t PowerGet(void) { return m_power; };
|
||||||
|
void PowerSet(int32_t state) { m_power = state; };
|
||||||
|
|
||||||
int32_t GetType(void) { return m_type; };
|
int32_t GetType(void) { return m_type; };
|
||||||
int32_t GroupGet(void) { return m_group; };
|
int32_t GroupGet(void) { return m_group; };
|
||||||
|
@ -39,22 +39,6 @@ static etk::VectorType<ewol::Sprite*> * tmpEffects = NULL;
|
|||||||
static ewol::SceneElement * tmpScene = NULL;
|
static ewol::SceneElement * tmpScene = NULL;
|
||||||
|
|
||||||
|
|
||||||
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_GetPos(lua_State *L)
|
LUAMOD_API int lua_GetPos(lua_State *L)
|
||||||
{
|
{
|
||||||
if (NULL==tmpObj) {
|
if (NULL==tmpObj) {
|
||||||
@ -76,8 +60,8 @@ LUAMOD_API int lua_SetPos(lua_State *L)
|
|||||||
EWOL_ERROR("NULL obj...");
|
EWOL_ERROR("NULL obj...");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
float x = luaL_checkint(L, 1);
|
float x = luaL_checknumber(L, 1);
|
||||||
float y = luaL_checkint(L, 2);
|
float y = luaL_checknumber(L, 2);
|
||||||
coord2D_ts tmpPos;
|
coord2D_ts tmpPos;
|
||||||
tmpPos.x = x;
|
tmpPos.x = x;
|
||||||
tmpPos.y = y;
|
tmpPos.y = y;
|
||||||
@ -107,8 +91,8 @@ LUAMOD_API int lua_SetSpeed(lua_State *L)
|
|||||||
EWOL_ERROR("NULL obj...");
|
EWOL_ERROR("NULL obj...");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
float x = luaL_checkint(L, 1);
|
float x = luaL_checknumber(L, 1);
|
||||||
float y = luaL_checkint(L, 2);
|
float y = luaL_checknumber(L, 2);
|
||||||
coord2D_ts tmpPos;
|
coord2D_ts tmpPos;
|
||||||
tmpPos.x = x;
|
tmpPos.x = x;
|
||||||
tmpPos.y = y;
|
tmpPos.y = y;
|
||||||
@ -117,6 +101,57 @@ LUAMOD_API int lua_SetSpeed(lua_State *L)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LUAMOD_API int lua_GetPower(lua_State *L)
|
||||||
|
{
|
||||||
|
if (NULL==tmpObj) {
|
||||||
|
EWOL_ERROR("NULL obj...");
|
||||||
|
lua_pushnumber(L, 0 );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int32_t value = tmpObj->PowerGet();
|
||||||
|
lua_pushinteger(L, value );
|
||||||
|
// return number of parameters
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LUAMOD_API int lua_SetPower(lua_State *L)
|
||||||
|
{
|
||||||
|
if (NULL==tmpObj) {
|
||||||
|
EWOL_ERROR("NULL obj...");
|
||||||
|
lua_pushnumber(L, 0 );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
int32_t value = luaL_checkint(L, 1);
|
||||||
|
tmpObj->PowerSet(value);
|
||||||
|
// return number of parameters
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LUAMOD_API int lua_GetAngle(lua_State *L)
|
||||||
|
{
|
||||||
|
if (NULL==tmpObj) {
|
||||||
|
EWOL_ERROR("NULL obj...");
|
||||||
|
lua_pushnumber(L, 0 );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
etkFloat_t value = tmpObj->AngleGet();
|
||||||
|
lua_pushnumber(L, value );
|
||||||
|
// return number of parameters
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
LUAMOD_API int lua_SetAngle(lua_State *L)
|
||||||
|
{
|
||||||
|
if (NULL==tmpObj) {
|
||||||
|
EWOL_ERROR("NULL obj...");
|
||||||
|
lua_pushnumber(L, 0 );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
etkFloat_t value = luaL_checknumber(L, 1);
|
||||||
|
tmpObj->AngleSet(value);
|
||||||
|
// return number of parameters
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
LUAMOD_API int lua_SpriteLoad(lua_State *L)
|
LUAMOD_API int lua_SpriteLoad(lua_State *L)
|
||||||
{
|
{
|
||||||
@ -134,8 +169,6 @@ LUAMOD_API int lua_SpriteLoad(lua_State *L)
|
|||||||
int32_t spriteID = tmpObj->LoadSprite( tmpScene->animated, filename, size);
|
int32_t spriteID = tmpObj->LoadSprite( tmpScene->animated, filename, size);
|
||||||
if (spriteID < 0) {
|
if (spriteID < 0) {
|
||||||
EWOL_ERROR("Error to load the sprite : " << filename);
|
EWOL_ERROR("Error to load the sprite : " << filename);
|
||||||
} else {
|
|
||||||
EWOL_INFO("Load the sprite : " << filename << " ==> " << spriteID);
|
|
||||||
}
|
}
|
||||||
lua_pushnumber(L, (lua_Number)spriteID );
|
lua_pushnumber(L, (lua_Number)spriteID );
|
||||||
// return number of parameters
|
// return number of parameters
|
||||||
@ -144,6 +177,7 @@ LUAMOD_API int lua_SpriteLoad(lua_State *L)
|
|||||||
|
|
||||||
LUAMOD_API int lua_SpriteUnLoad(lua_State *L)
|
LUAMOD_API int lua_SpriteUnLoad(lua_State *L)
|
||||||
{
|
{
|
||||||
|
// TODO : when supported ...
|
||||||
/*
|
/*
|
||||||
//LUA : SpriteUnLoad(int);
|
//LUA : SpriteUnLoad(int);
|
||||||
if (NULL==tmpScene) {
|
if (NULL==tmpScene) {
|
||||||
@ -182,36 +216,110 @@ LUAMOD_API int lua_SpriteDraw(lua_State *L)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
LUAMOD_API int lua_ElementAdd(lua_State *L)
|
||||||
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 : int ElementAdd("Bullet", group)
|
||||||
lua_pushnumber(L, (lua_Number)lib_a_f_4(t));
|
|
||||||
|
if (NULL==tmpScene) {
|
||||||
|
EWOL_ERROR("NULL obj...");
|
||||||
|
lua_pushinteger(L, 0 );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
etk::UString elementName = luaL_checkstring(L, 1);
|
||||||
|
int32_t group = luaL_checkint(L, 2);
|
||||||
|
// TODO : Remove this when find an other way do do it ...
|
||||||
|
ewol::GameElementLua * ttmpObj = tmpObj;
|
||||||
|
etk::VectorType<ewol::Sprite*> * ttmpSprite = tmpSprite;
|
||||||
|
etk::VectorType<ewol::Sprite*> * ttmpEffects = tmpEffects;
|
||||||
|
ewol::SceneElement * ttmpScene = tmpScene;
|
||||||
|
uint32_t elementId = tmpScene->AddElementNamed(group, elementName);
|
||||||
|
tmpObj = ttmpObj;
|
||||||
|
tmpSprite = ttmpSprite;
|
||||||
|
tmpEffects = ttmpEffects;
|
||||||
|
tmpScene = ttmpScene;
|
||||||
|
|
||||||
|
if (0==elementId) {
|
||||||
|
EWOL_ERROR("Error creating element : " << elementName);
|
||||||
|
}
|
||||||
|
lua_pushinteger(L, elementId );
|
||||||
// return number of parameters
|
// return number of parameters
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LUAMOD_API int lua_new_t(lua_State *L) { // get Lua to allocate an initialize a type_t*
|
LUAMOD_API int lua_ElementSetPos(lua_State *L)
|
||||||
int a = luaL_checkint(L, 1);
|
{
|
||||||
int b = luaL_checkint(L, 2);
|
//LUA : ElementSetPos(newElementId, posX, posY);
|
||||||
type_t *t = (type_t *)lua_newuserdata(L, sizeof(*t));
|
if (NULL==tmpScene) {
|
||||||
luaL_getmetatable(L, metaname);
|
EWOL_ERROR("ploppp ");
|
||||||
lua_setmetatable(L, -2);
|
return 0;
|
||||||
t->a = a;
|
}
|
||||||
t->b = b;
|
int32_t idElement = luaL_checkint(L, 1);
|
||||||
|
ewol::GameElement* tmpElem = tmpScene->GetElement(idElement);
|
||||||
|
if (NULL != tmpElem) {
|
||||||
|
coord2D_ts tmpPos;
|
||||||
|
tmpPos.x = luaL_checknumber(L, 2);
|
||||||
|
tmpPos.y = luaL_checknumber(L, 3);
|
||||||
|
tmpElem->PositionSet(tmpPos);
|
||||||
|
} else {
|
||||||
|
EWOL_ERROR("Get element unique ID : " << idElement);
|
||||||
|
}
|
||||||
|
// return number of parameters
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LUAMOD_API int lua_ElementSetPower(lua_State *L)
|
||||||
|
{
|
||||||
|
//LUA : ElementSetPower(newElementId, 1);
|
||||||
|
|
||||||
|
if (NULL==tmpScene) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int32_t idElement = luaL_checkint(L, 1);
|
||||||
|
ewol::GameElement* tmpElem = tmpScene->GetElement(idElement);
|
||||||
|
if (NULL != tmpElem) {
|
||||||
|
int32_t power = luaL_checkint(L, 2);
|
||||||
|
tmpElem->PowerSet(power);
|
||||||
|
}
|
||||||
|
// return number of parameters
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LUAMOD_API int lua_ElementSetAngle(lua_State *L)
|
||||||
|
{
|
||||||
|
//LUA : ElementSetAngle(newElementId, m_angle);
|
||||||
|
|
||||||
|
if (NULL==tmpScene) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
int32_t idElement = luaL_checkint(L, 1);
|
||||||
|
ewol::GameElement* tmpElem = tmpScene->GetElement(idElement);
|
||||||
|
if (NULL != tmpElem) {
|
||||||
|
float angle = luaL_checknumber(L, 2);
|
||||||
|
tmpElem->AngleSet(angle);
|
||||||
|
}
|
||||||
// return number of parameters
|
// return number of parameters
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const luaL_Reg functionsTable[] = {
|
static const luaL_Reg functionsTable[] = {
|
||||||
{ "lib_a_f_4", lua_lib_a_f_4 },
|
// local element section
|
||||||
{ "new_t", lua_new_t },
|
{ "GetPos", lua_GetPos },
|
||||||
{ "GetPos", lua_GetPos },
|
{ "SetPos", lua_SetPos },
|
||||||
{ "SetPos", lua_SetPos },
|
{ "GetSpeed", lua_GetSpeed },
|
||||||
{ "GetSpeed", lua_GetSpeed },
|
{ "SetSpeed", lua_SetSpeed },
|
||||||
{ "SetSpeed", lua_SetSpeed },
|
{ "GetAngle", lua_GetAngle },
|
||||||
{ "SpriteLoad", lua_SpriteLoad },
|
{ "SetAngle", lua_GetAngle },
|
||||||
{ "SpriteUnLoad", lua_SpriteUnLoad },
|
{ "GetPower", lua_GetPower },
|
||||||
{ "SpriteDraw", lua_SpriteDraw },
|
{ "SetPower", lua_GetPower },
|
||||||
|
// other element section
|
||||||
|
{ "ElementAdd", lua_ElementAdd },
|
||||||
|
{ "ElementSetPos", lua_ElementSetPos },
|
||||||
|
{ "ElementSetPower", lua_ElementSetPower },
|
||||||
|
{ "ElementSetAngle", lua_ElementSetAngle },
|
||||||
|
// Sprite section
|
||||||
|
{ "SpriteLoad", lua_SpriteLoad },
|
||||||
|
{ "SpriteUnLoad", lua_SpriteUnLoad },
|
||||||
|
{ "SpriteDraw", lua_SpriteDraw },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -220,10 +328,7 @@ static const luaL_Reg functionsTable[] = {
|
|||||||
//http://stackoverflow.com/questions/2521244/how-to-wrap-a-c-function-whose-parameters-are-pointer-to-structs-so-that-it-can
|
//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) {
|
LUAMOD_API int luaopen_myLib(lua_State *L) {
|
||||||
luaL_register(L, "GameElement", functionsTable);
|
luaL_register(L, "GameElement", functionsTable);
|
||||||
luaL_newmetatable(L, metaname);
|
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
//luaL_newlib(L, functionsTable);
|
|
||||||
//lua_pop(L, 1);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,6 +412,7 @@ ewol::GameElementLua::GameElementLua(ewol::SceneElement & sceneElement, etk::USt
|
|||||||
ewol::GameElementLua::~GameElementLua(void)
|
ewol::GameElementLua::~GameElementLua(void)
|
||||||
{
|
{
|
||||||
tmpObj = this;
|
tmpObj = this;
|
||||||
|
tmpScene = &m_sceneElement;
|
||||||
if (NULL != m_luaState) {
|
if (NULL != m_luaState) {
|
||||||
// call the init function
|
// call the init function
|
||||||
lua_getglobal(m_luaState, "UnInit");
|
lua_getglobal(m_luaState, "UnInit");
|
||||||
@ -319,11 +425,11 @@ ewol::GameElementLua::~GameElementLua(void)
|
|||||||
EWOL_ERROR("LUA: error running function 'UnInit':" << lua_tostring(m_luaState, -1));
|
EWOL_ERROR("LUA: error running function 'UnInit':" << lua_tostring(m_luaState, -1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EWOL_DEBUG("RemoveLua Element");
|
|
||||||
lua_close(m_luaState);
|
lua_close(m_luaState);
|
||||||
m_luaState = NULL;
|
m_luaState = NULL;
|
||||||
}
|
}
|
||||||
tmpObj = NULL;
|
tmpObj = NULL;
|
||||||
|
tmpScene = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -81,7 +81,7 @@ uint32_t ewol::SceneElement::AddElementNamed(int32_t group, etk::UString &elemen
|
|||||||
EWOL_ERROR("Can not find Game element : " << elementName << " ==> " << tmpName);
|
EWOL_ERROR("Can not find Game element : " << elementName << " ==> " << tmpName);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EWOL_INFO("We find Game element : " << elementName << " ==> " << tmpName);
|
EWOL_VERBOSE("We find Game element : " << elementName << " ==> " << tmpName);
|
||||||
ewol::GameElementLua * tmpElement = new ewol::GameElementLua(*this, tmpName, group);
|
ewol::GameElementLua * tmpElement = new ewol::GameElementLua(*this, tmpName, group);
|
||||||
if (NULL == tmpElement) {
|
if (NULL == tmpElement) {
|
||||||
EWOL_ERROR("Can not Allocat : " << elementName);
|
EWOL_ERROR("Can not Allocat : " << elementName);
|
||||||
@ -108,27 +108,6 @@ ewol::GameElement* ewol::SceneElement::GetElement(uint32_t idElement)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ewol::SceneElement::GetElementProperty(gameElementGenericProperty_ts &element, uint32_t idElement)
|
|
||||||
{
|
|
||||||
if (0 == idElement) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
uint16_t realUniqueId = (uint16_t)((idElement >> 16 ) & 0x0000FFFF);
|
|
||||||
uint16_t posInList = (uint16_t)(idElement & 0x0000FFFF);
|
|
||||||
for (int32_t iii=0; iii<numberOfGroup; iii++) {
|
|
||||||
if( posInList < listAnimatedElements[iii].Size()
|
|
||||||
&& NULL != listAnimatedElements[iii][posInList]
|
|
||||||
&& realUniqueId == listAnimatedElements[iii][posInList]->GetUniqueId()) {
|
|
||||||
element.id = idElement;
|
|
||||||
element.group = iii;
|
|
||||||
listAnimatedElements[iii][posInList]->GetElementProperty(element);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t ewol::SceneElement::GetNearestEnemy(coord2D_ts position, int32_t groupId)
|
uint32_t ewol::SceneElement::GetNearestEnemy(coord2D_ts position, int32_t groupId)
|
||||||
{
|
{
|
||||||
|
@ -61,7 +61,6 @@ namespace ewol {
|
|||||||
uint32_t AddElement(int32_t group, ewol::GameElement* newElement);
|
uint32_t AddElement(int32_t group, ewol::GameElement* newElement);
|
||||||
uint32_t AddElementNamed(int32_t group, etk::UString &elementName);
|
uint32_t AddElementNamed(int32_t group, etk::UString &elementName);
|
||||||
ewol::GameElement* GetElement(uint32_t idElement);
|
ewol::GameElement* GetElement(uint32_t idElement);
|
||||||
bool GetElementProperty(gameElementGenericProperty_ts& element, uint32_t idElement);
|
|
||||||
uint32_t GetNearestEnemy(coord2D_ts position, int32_t groupId);
|
uint32_t GetNearestEnemy(coord2D_ts position, int32_t groupId);
|
||||||
bool HaveImpact(int32_t group, int32_t type, coord2D_ts position, etkFloat_t size);
|
bool HaveImpact(int32_t group, int32_t type, coord2D_ts position, etkFloat_t size);
|
||||||
void Explosion(int32_t group, int32_t type, coord2D_ts position, etkFloat_t pxAtenuation, etkFloat_t power);
|
void Explosion(int32_t group, int32_t type, coord2D_ts position, etkFloat_t pxAtenuation, etkFloat_t power);
|
||||||
|
@ -34,13 +34,15 @@
|
|||||||
|
|
||||||
ewol::Sprite::Sprite(etk::UString spriteName)
|
ewol::Sprite::Sprite(etk::UString spriteName)
|
||||||
{
|
{
|
||||||
EWOL_VERBOSE("Create Sprite : \"" << spriteName << "\"");
|
m_name = spriteName;
|
||||||
m_textureId = ewol::texture::Load(spriteName);
|
EWOL_VERBOSE("Create Sprite : \"" << m_name << "\"");
|
||||||
|
m_textureId = ewol::texture::Load(m_name);
|
||||||
}
|
}
|
||||||
ewol::Sprite::Sprite(etk::UString spriteName, etkFloat_t sizeX, etkFloat_t sizeY)
|
ewol::Sprite::Sprite(etk::UString spriteName, etkFloat_t sizeX, etkFloat_t sizeY)
|
||||||
{
|
{
|
||||||
EWOL_VERBOSE("Create Sprite : \"" << spriteName << "\"");
|
m_name = spriteName;
|
||||||
m_textureId = ewol::texture::Load(spriteName, sizeX);
|
EWOL_VERBOSE("Create Sprite : \"" << m_name << "\"");
|
||||||
|
m_textureId = ewol::texture::Load(m_name, sizeX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user