summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-11-06 19:12:55 +0100
committerRobert Vollmert <rvollmert@gmx.net>2009-11-06 19:16:20 +0100
commitf626e442c7a77191a145825507610d3b1ef40ab3 (patch)
treeebdcf660d3c1dd058c19419cb5983568733d4b04
parent4412160c9f7d6410f7974e6daf1027716547cceb (diff)
downloadcrawl-ref-f626e442c7a77191a145825507610d3b1ef40ab3.tar.gz
crawl-ref-f626e442c7a77191a145825507610d3b1ef40ab3.zip
Add actor::set_position.
This should be used instead of setting position directly. actor::position could be made "protected" except for the arena's unwind_var(you.position), which is too difficult for me to fix. The reason behind this change is that actors should get their own LOS, whose origin should be synchronized with the actor's position. This change also removes the non-const "coord_def& actor::pos()" (yuk).
-rw-r--r--crawl-ref/source/actor.cc5
-rw-r--r--crawl-ref/source/actor.h2
-rw-r--r--crawl-ref/source/arena.cc2
-rw-r--r--crawl-ref/source/debug.cc2
-rw-r--r--crawl-ref/source/mon-act.cc10
-rw-r--r--crawl-ref/source/monster.cc4
-rw-r--r--crawl-ref/source/monstuff.cc4
-rw-r--r--crawl-ref/source/player.cc8
-rw-r--r--crawl-ref/source/player.h4
-rw-r--r--crawl-ref/source/religion.cc2
-rw-r--r--crawl-ref/source/spl-cast.cc2
-rw-r--r--crawl-ref/source/tags.cc5
-rw-r--r--crawl-ref/source/terrain.cc8
13 files changed, 32 insertions, 26 deletions
diff --git a/crawl-ref/source/actor.cc b/crawl-ref/source/actor.cc
index 97aa4f928d..83dcc799aa 100644
--- a/crawl-ref/source/actor.cc
+++ b/crawl-ref/source/actor.cc
@@ -109,3 +109,8 @@ bool actor::check_res_magic(int power)
return (mrch2 < mrchance);
}
+
+void actor::set_position(const coord_def &c)
+{
+ position = c;
+}
diff --git a/crawl-ref/source/actor.h b/crawl-ref/source/actor.h
index 13bc372f4b..b48945847d 100644
--- a/crawl-ref/source/actor.h
+++ b/crawl-ref/source/actor.h
@@ -19,8 +19,8 @@ public:
int* summon_type = NULL) const = 0;
virtual void moveto(const coord_def &c) = 0;
+ virtual void set_position(const coord_def &c);
virtual const coord_def& pos() const { return position; }
- virtual coord_def& pos() { return position; }
virtual bool swimming() const = 0;
virtual bool submerged() const = 0;
diff --git a/crawl-ref/source/arena.cc b/crawl-ref/source/arena.cc
index 902407591f..36da169eef 100644
--- a/crawl-ref/source/arena.cc
+++ b/crawl-ref/source/arena.cc
@@ -866,7 +866,7 @@ namespace arena
viewwindow(true, false);
unwind_var<coord_def> pos(you.position);
// Move hero offscreen.
- you.position.y = -1;
+ you.set_position(coord_def(-1,-1));
you.time_taken = 10;
// Make sure we don't starve.
you.hunger = 10999;
diff --git a/crawl-ref/source/debug.cc b/crawl-ref/source/debug.cc
index 7b19cec67d..99de0ee816 100644
--- a/crawl-ref/source/debug.cc
+++ b/crawl-ref/source/debug.cc
@@ -734,7 +734,7 @@ bool _take_portal_vault_stairs( const bool down )
return (false);
clear_trapping_net();
- you.position = stair_pos;
+ you.set_position(stair_pos);
if (down)
down_stairs(you.your_level);
diff --git a/crawl-ref/source/mon-act.cc b/crawl-ref/source/mon-act.cc
index 0c6c0648f9..c901f06690 100644
--- a/crawl-ref/source/mon-act.cc
+++ b/crawl-ref/source/mon-act.cc
@@ -151,8 +151,8 @@ static bool _swap_monsters(monsters* mover, monsters* moved)
const coord_def mover_pos = mover->pos();
const coord_def moved_pos = moved->pos();
- mover->pos() = moved_pos;
- moved->pos() = mover_pos;
+ mover->set_position(moved_pos);
+ moved->set_position(mover_pos);
mgrd(mover->pos()) = mover->mindex();
mgrd(moved->pos()) = moved->mindex();
@@ -3027,9 +3027,9 @@ static bool _monster_swaps_places( monsters *mon, const coord_def& delta )
// Okay, do the swap!
_swim_or_move_energy(mon);
- mon->pos() = n;
+ mon->set_position(n);
mgrd(n) = monster_index(mon);
- m2->pos() = c;
+ m2->set_position(c);
const int m2i = monster_index(m2);
ASSERT(m2i >= 0 && m2i < MAX_MONSTERS);
mgrd(c) = m2i;
@@ -3091,7 +3091,7 @@ static bool _do_move_monster(monsters *monster, const coord_def& delta)
}
mgrd(monster->pos()) = NON_MONSTER;
- monster->pos() = f;
+ monster->set_position(f);
mgrd(monster->pos()) = monster_index(monster);
diff --git a/crawl-ref/source/monster.cc b/crawl-ref/source/monster.cc
index 6c584297b3..28f44c2c7b 100644
--- a/crawl-ref/source/monster.cc
+++ b/crawl-ref/source/monster.cc
@@ -2630,7 +2630,7 @@ void monsters::moveto(const coord_def& c)
if (c != pos() && in_bounds(pos()))
mons_clear_trapping_net(this);
- position = c;
+ set_position(c);
}
bool monsters::fumbles_attack(bool verbose)
@@ -4845,7 +4845,7 @@ void monsters::apply_enchantment(const mon_enchant &me)
// If you are no longer dying, you must be dead.
if (decay_enchantment(me))
{
- if (::see_cell(this->position))
+ if (::see_cell(position))
{
mprf("A nearby %s withers and dies.",
this->name(DESC_PLAIN, false).c_str());
diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc
index 15c3bfd9ee..9c2b3de63f 100644
--- a/crawl-ref/source/monstuff.cc
+++ b/crawl-ref/source/monstuff.cc
@@ -1143,7 +1143,7 @@ static bool _spore_goes_pop(monsters *monster, killer_type killer,
// used to be, so make sure that mgrd() doesn't get cleared a second
// time (causing the new monster to become floating) when
// monster->reset() is called.
- monster->pos().reset();
+ monster->set_position(coord_def(0,0));
// Exploding kills the monster a bit earlier than normal.
monster->hit_points = -16;
@@ -3764,7 +3764,7 @@ int clone_mons(const monsters* orig, bool quiet, bool* obvious,
monsters &mon(menv[midx]);
mon = *orig;
- mon.position = pos;
+ mon.set_position(pos);
mgrd(pos) = midx;
// Duplicate objects, or unequip them if they can't be duplicated.
diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc
index 43b57b5886..abd9b69748 100644
--- a/crawl-ref/source/player.cc
+++ b/crawl-ref/source/player.cc
@@ -7008,12 +7008,12 @@ bool player::is_fiery() const
return (false);
}
-void player::base_moveto(const coord_def &c)
+void player::set_position(const coord_def &c)
{
ASSERT(!crawl_state.arena);
const bool real_move = (c != pos());
- position = c;
+ actor::set_position(c);
if (real_move)
{
@@ -7032,13 +7032,13 @@ void player::moveto(const coord_def &c)
clear_trapping_net();
crawl_view.set_player_at(c);
- base_moveto(c);
+ set_position(c);
}
void player::shiftto(const coord_def &c)
{
crawl_view.shift_player_to(c);
- base_moveto(c);
+ set_position(c);
}
void player::reset_prev_move()
diff --git a/crawl-ref/source/player.h b/crawl-ref/source/player.h
index 29f4102bb1..7e8fa551b8 100644
--- a/crawl-ref/source/player.h
+++ b/crawl-ref/source/player.h
@@ -300,6 +300,8 @@ public:
void init();
+ // Set player position without updating view geometry.
+ void set_position(const coord_def &c);
// Low-level move the player. Use this instead of changing pos directly.
void moveto(const coord_def &c);
// Move the player during an abyss shift.
@@ -505,8 +507,6 @@ public:
void set_gold(int amount);
protected:
- void base_moveto(const coord_def &c);
-
void _removed_beholder();
bool _possible_beholder(const monsters *mon) const;
};
diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc
index e68cdf3b7e..f0984b4607 100644
--- a/crawl-ref/source/religion.cc
+++ b/crawl-ref/source/religion.cc
@@ -2628,7 +2628,7 @@ void god_speaks(god_type god, const char *mesg)
fake_mon.type = MONS_PROGRAM_BUG;
fake_mon.hit_points = 1;
fake_mon.god = god;
- fake_mon.position = you.pos();
+ fake_mon.set_position(you.pos());
fake_mon.foe = MHITYOU;
fake_mon.mname = "FAKE GOD MONSTER";
diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc
index bc2b9a6bb6..35e26beef7 100644
--- a/crawl-ref/source/spl-cast.cc
+++ b/crawl-ref/source/spl-cast.cc
@@ -1069,7 +1069,7 @@ static void _try_monster_cast(spell_type spell, int powc,
| MF_WAS_IN_VIEW | MF_HARD_RESET);
mon->hit_points = you.hp;
mon->hit_dice = you.experience_level;
- mon->pos() = you.pos();
+ mon->set_position(you.pos());
mon->target = spd.target;
if (!spd.isTarget)
diff --git a/crawl-ref/source/tags.cc b/crawl-ref/source/tags.cc
index f65421e5a1..0d140664e5 100644
--- a/crawl-ref/source/tags.cc
+++ b/crawl-ref/source/tags.cc
@@ -2186,8 +2186,9 @@ static void unmarshall_monster(reader &th, monsters &m)
// Avoid sign extension when loading files (Elethiomel's hang)
m.speed_increment = (unsigned char) unmarshallByte(th);
m.behaviour = static_cast<beh_type>(unmarshallByte(th));
- m.position.x = unmarshallByte(th);
- m.position.y = unmarshallByte(th);
+ int x = unmarshallByte(th);
+ int y = unmarshallByte(th);
+ m.set_position(coord_def(x,y));
m.target.x = unmarshallByte(th);
m.target.y = unmarshallByte(th);
diff --git a/crawl-ref/source/terrain.cc b/crawl-ref/source/terrain.cc
index e7f9458985..75b60c41c0 100644
--- a/crawl-ref/source/terrain.cc
+++ b/crawl-ref/source/terrain.cc
@@ -959,9 +959,9 @@ bool swap_features(const coord_def &pos1, const coord_def &pos2,
mgrd(pos2) = m1;
if (monster_at(pos1))
- menv[mgrd(pos1)].position = pos1;
+ menv[mgrd(pos1)].set_position(pos1);
if (monster_at(pos2))
- menv[mgrd(pos2)].position = pos2;
+ menv[mgrd(pos2)].set_position(pos2);
// Swap clouds.
move_cloud(env.cgrid(pos1), temp);
@@ -970,12 +970,12 @@ bool swap_features(const coord_def &pos1, const coord_def &pos2,
if (pos1 == you.pos())
{
- you.position = pos2;
+ you.set_position(pos2);
viewwindow(true, false);
}
else if (pos2 == you.pos())
{
- you.position = pos1;
+ you.set_position(pos1);
viewwindow(true, false);
}