34
34
static const int TRIGGER_VERSION = 2;
39
Trigger_Building::Trigger_Building(void) {
40
set_name(_("Building Trigger").c_str());
47
m_building=_("<unset>");
50
Trigger_Building::~Trigger_Building(void) {
54
* File Read, File Write
36
Trigger_Building::Trigger_Building()
38
Trigger (_("Building Trigger")),
39
m_player_area(0, Area(Coords(0, 0), 0)),
40
m_building (_("<unset>")),
44
Trigger_Building::~Trigger_Building() {}
56
46
void Trigger_Building::Read(Section* s, Editor_Game_Base* egbase) {
57
const int version= s->get_safe_int("version");
59
if (1 <= version and version <= TRIGGER_VERSION) {
63
Coords(s->get_safe_int("point_x"), s->get_safe_int("point_y"))
65
s->get_safe_Coords("point");
66
set_area( s->get_safe_int( "area" ));
67
int player = s->get_safe_int( "player" );
69
egbase->get_iabase()->reference_player_tribe(player, this);
47
const int trigger_version= s->get_safe_int("version");
48
if (1 <= trigger_version and trigger_version <= TRIGGER_VERSION) {
49
m_player_area = Player_Area
50
(s->get_safe_int("player"),
54
Coords(s->get_safe_int("point_x"), s->get_safe_int("point_y"))
56
s->get_safe_Coords("point"),
57
s->get_safe_int("area")));
59
->reference_player_tribe(m_player_area.player_number, this);
70
60
set_building_count( s->get_int( "count" ));
71
61
set_building( s->get_safe_string( "building" ));
74
throw wexception("Building Trigger with unknown/unhandled version %i in map!\n", version);
62
} else throw wexception
63
("Building Trigger with unknown/unhandled version %i in map!\n",
77
67
void Trigger_Building::Write(Section & s) const {
78
68
s.set_int ("version", TRIGGER_VERSION);
79
s.set_Coords("point", m_pt);
80
s.set_int ("area", get_area());
81
s.set_int ("player", get_player());
69
s.set_Coords("point", m_player_area);
70
s.set_int ("area", m_player_area.radius);
71
s.set_int ("player", m_player_area.player_number);
82
72
s.set_int ("count", get_building_count());
83
73
s.set_string("building", m_building.c_str());
89
79
void Trigger_Building::check_set_conditions(Game* game) {
90
80
const Map & map = game->map();
92
(m_pt.x < 0 or m_pt.x >= map.get_width ()
94
m_pt.y < 0 or m_pt.y >= map.get_height()
96
m_player <= 0 or m_player > MAX_PLAYERS)
82
(m_player_area.x < 0 or map.get_width () <= m_player_area.x
84
m_player_area.y < 0 or map.get_height() <= m_player_area.y
86
m_player_area.player_number <= 0
88
map.get_nrplayers() < m_player_area.player_number)
101
MapRegion mr(game->map(), m_pt, m_area);
93
MapRegion mr(game->map(), m_player_area);
103
95
while (mr.next(fc)) if
104
(const Building * const b =
96
(const Building * const building =
105
97
dynamic_cast<const Building * const>(fc.field->get_immovable()))
108
if(b->get_owner()!=game->get_player(m_player)) continue;
109
std::string name=b->get_name();
110
if(name != m_building) continue;
100
(building->owner().get_player_number() == m_player_area.player_number
102
building->name() == m_building)
114
106
if(count>=m_count) set_trigger(true);
116
108
// Set MapVariable inttemp
117
MapVariableManager & mvm = game->get_map()->get_mvm();
109
MapVariableManager & mvm = game->map().get_mvm();
118
110
Int_MapVariable * inttemp = mvm.get_int_variable("inttemp");
120
112
inttemp = new Int_MapVariable( false );