Commit 74583608 authored by nanahira's avatar nanahira
parents 9b3616c8 dbd3816a
...@@ -333,6 +333,10 @@ static const struct luaL_Reg effectlib[] = { ...@@ -333,6 +333,10 @@ static const struct luaL_Reg effectlib[] = {
}; };
static const struct luaL_Reg grouplib[] = { static const struct luaL_Reg grouplib[] = {
//metatable
{ "__add", scriptlib::group_meta_add },
{ "__sub", scriptlib::group_meta_sub },
{ "CreateGroup", scriptlib::group_new }, { "CreateGroup", scriptlib::group_new },
{ "KeepAlive", scriptlib::group_keep_alive }, { "KeepAlive", scriptlib::group_keep_alive },
{ "DeleteGroup", scriptlib::group_delete }, { "DeleteGroup", scriptlib::group_delete },
...@@ -344,6 +348,7 @@ static const struct luaL_Reg grouplib[] = { ...@@ -344,6 +348,7 @@ static const struct luaL_Reg grouplib[] = {
{ "GetNext", scriptlib::group_get_next }, { "GetNext", scriptlib::group_get_next },
{ "GetFirst", scriptlib::group_get_first }, { "GetFirst", scriptlib::group_get_first },
{ "GetCount", scriptlib::group_get_count }, { "GetCount", scriptlib::group_get_count },
{ "__len", scriptlib::group_get_count },
{ "ForEach", scriptlib::group_for_each }, { "ForEach", scriptlib::group_for_each },
{ "Filter", scriptlib::group_filter }, { "Filter", scriptlib::group_filter },
{ "FilterCount", scriptlib::group_filter_count }, { "FilterCount", scriptlib::group_filter_count },
......
...@@ -11,6 +11,63 @@ ...@@ -11,6 +11,63 @@
#include "effect.h" #include "effect.h"
#include "duel.h" #include "duel.h"
//metatables
//metatable functions
int32 scriptlib::group_meta_add(lua_State* L) {
check_param_count(L, 2);
if(!check_param(L, PARAM_TYPE_CARD, 1, TRUE) && !check_param(L, PARAM_TYPE_GROUP, 1, TRUE))
luaL_error(L, "Parameter %d should be \"Card\" or \"Group\".", 1);
if(!check_param(L, PARAM_TYPE_CARD, 2, TRUE) && !check_param(L, PARAM_TYPE_GROUP, 2, TRUE))
luaL_error(L, "Parameter %d should be \"Card\" or \"Group\".", 2);
duel* pduel = interpreter::get_duel_info(L);
group* pgroup=pduel->new_group();
if(check_param(L, PARAM_TYPE_CARD, 1, TRUE)) {
card* ccard = *(card**) lua_touserdata(L, 1);
pgroup->container.insert(ccard);
} else if(check_param(L, PARAM_TYPE_GROUP, 1, TRUE)) {
group* cgroup = *(group**) lua_touserdata(L, 1);
for(auto cit = cgroup->container.begin(); cit != cgroup->container.end(); ++cit)
pgroup->container.insert(*cit);
}
if(check_param(L, PARAM_TYPE_CARD, 2, TRUE)) {
card* ccard = *(card**) lua_touserdata(L, 2);
pgroup->container.insert(ccard);
} else if(check_param(L, PARAM_TYPE_GROUP, 2, TRUE)) {
group* cgroup = *(group**) lua_touserdata(L, 2);
for(auto cit = cgroup->container.begin(); cit != cgroup->container.end(); ++cit)
pgroup->container.insert(*cit);
}
interpreter::group2value(L, pgroup);
return 1;
}
int32 scriptlib::group_meta_sub(lua_State* L) {
check_param_count(L, 2);
if(!check_param(L, PARAM_TYPE_CARD, 1, TRUE) && !check_param(L, PARAM_TYPE_GROUP, 1, TRUE))
luaL_error(L, "Parameter %d should be \"Card\" or \"Group\".", 1);
if(!check_param(L, PARAM_TYPE_CARD, 2, TRUE) && !check_param(L, PARAM_TYPE_GROUP, 2, TRUE))
luaL_error(L, "Parameter %d should be \"Card\" or \"Group\".", 2);
duel* pduel = interpreter::get_duel_info(L);
group* pgroup=pduel->new_group();
if(check_param(L, PARAM_TYPE_CARD, 1, TRUE)) {
card* ccard = *(card**) lua_touserdata(L, 1);
pgroup->container.insert(ccard);
} else if(check_param(L, PARAM_TYPE_GROUP, 1, TRUE)) {
group* cgroup = *(group**) lua_touserdata(L, 1);
for(auto cit = cgroup->container.begin(); cit != cgroup->container.end(); ++cit)
pgroup->container.insert(*cit);
}
if(check_param(L, PARAM_TYPE_CARD, 2, TRUE)) {
card* ccard = *(card**) lua_touserdata(L, 2);
pgroup->container.erase(ccard);
} else if(check_param(L, PARAM_TYPE_GROUP, 2, TRUE)) {
group* cgroup = *(group**) lua_touserdata(L, 2);
for(auto cit = cgroup->container.begin(); cit != cgroup->container.end(); ++cit)
pgroup->container.erase(*cit);
}
interpreter::group2value(L, pgroup);
return 1;
}
int32 scriptlib::group_new(lua_State *L) { int32 scriptlib::group_new(lua_State *L) {
duel* pduel = interpreter::get_duel_info(L); duel* pduel = interpreter::get_duel_info(L);
group* pgroup = pduel->new_group(); group* pgroup = pduel->new_group();
......
...@@ -38,6 +38,9 @@ public: ...@@ -38,6 +38,9 @@ public:
static int32 duel_disable_action_check(lua_State *L); static int32 duel_disable_action_check(lua_State *L);
static int32 duel_setmetatable(lua_State *L); static int32 duel_setmetatable(lua_State *L);
static int32 duel_move_turn_count(lua_State *L); static int32 duel_move_turn_count(lua_State *L);
//metatable
static int32 group_meta_add(lua_State *L);
static int32 group_meta_sub(lua_State *L);
//card lib //card lib
static int32 card_get_code(lua_State *L); static int32 card_get_code(lua_State *L);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment