Moved [fire_event] to Lua.

This commit is contained in:
Guillaume Melquiond 2010-04-05 06:00:07 +00:00
parent 38d1c25baa
commit b72831642a
2 changed files with 19 additions and 41 deletions

View file

@ -167,6 +167,24 @@ local function wml_store_unit_type(cfg)
end end
end end
local function wml_fire_event(cfg)
local u1 = helper.get_child(cfg, "primary_unit")
u1 = u1 and wesnoth.get_units(u1)[1]
local x1, y1 = 0, 0
if u1 then x1, y1 = u1.x, u1.y end
local u2 = helper.get_child(cfg, "secondary_unit")
u2 = u2 and wesnoth.get_units(u2)[1]
local x2, y2 = 0, 0
if u2 then x2, y2 = u2.x, u2.y end
local w1 = helper.get_child(cfg, "primary_attack")
local w2 = helper.get_child(cfg, "secondary_attack")
if w2 then w1 = w1 or {} end
wesnoth.fire_event(cfg.name, x1, y1, x2, y2, w1, w2)
end
local function wml_action_tag(cfg) local function wml_action_tag(cfg)
-- The new tag's name -- The new tag's name
local name = cfg.name or local name = cfg.name or
@ -191,4 +209,5 @@ wesnoth.register_wml_action("store_gold", wml_store_gold)
wesnoth.register_wml_action("clear_variable", wml_clear_variable) wesnoth.register_wml_action("clear_variable", wml_clear_variable)
wesnoth.register_wml_action("store_unit_type", wml_store_unit_type) wesnoth.register_wml_action("store_unit_type", wml_store_unit_type)
wesnoth.register_wml_action("store_unit_type_ids", wml_store_unit_type_ids) wesnoth.register_wml_action("store_unit_type_ids", wml_store_unit_type_ids)
wesnoth.register_wml_action("fire_event", wml_fire_event)
wesnoth.register_wml_action("wml_action", wml_action_tag) wesnoth.register_wml_action("wml_action", wml_action_tag)

View file

@ -2036,47 +2036,6 @@ WML_HANDLER_FUNCTION(kill, event_info, cfg)
} }
} }
// Fire any events
WML_HANDLER_FUNCTION(fire_event, /*event_info*/, cfg)
{
unit_map *units = resources::units;
gamemap *game_map = resources::game_map;
map_location loc1,loc2;
config data;
if (cfg.has_child("primary_unit")) {
vconfig primary_unit_filter = cfg.child("primary_unit");
foreach (const unit &u, *units) {
if (game_events::unit_matches_filter(u, primary_unit_filter)) {
loc1 = u.get_location();
break;
}
}
if(!game_map->on_board(loc1)) {
WRN_NG << "failed to match [primary_unit] in [fire_event] with a single on-board unit\n";
}
}
if (cfg.has_child("primary_attack")) {
data.add_child("first", cfg.child("primary_attack").get_parsed_config());
}
if (cfg.has_child("secondary_unit")) {
vconfig secondary_unit_filter = cfg.child("secondary_unit");
foreach (const unit &u, *units) {
if (game_events::unit_matches_filter(u, secondary_unit_filter)) {
loc2 = u.get_location();
break;
}
}
if(!game_map->on_board(loc2)) {
WRN_NG << "failed to match [secondary_unit] in [fire_event] with a single on-board unit\n";
}
}
if (cfg.has_child("secondary_attack")) {
data.add_child("second", cfg.child("secondary_attack").get_parsed_config());
}
game_events::fire(cfg["name"],loc1,loc2,data);
}
// Setting of menu items // Setting of menu items
WML_HANDLER_FUNCTION(set_menu_item, /*event_info*/, cfg) WML_HANDLER_FUNCTION(set_menu_item, /*event_info*/, cfg)
{ {