comparison gamelib/animal.py @ 533:7addf41b6abb

Allow backtracking on ladders
author Neil Muller <drnlmuller@gmail.com>
date Fri, 27 Nov 2009 22:09:54 +0000
parents 452cde9af2a2
children 11c4cebfe4c5
comparison
equal deleted inserted replaced
532:0667189a5973 533:7addf41b6abb
516 if next_step.dist(self.pos) < 2: 516 if next_step.dist(self.pos) < 2:
517 return next_step 517 return next_step
518 else: 518 else:
519 # Been bounced off the path 519 # Been bounced off the path
520 self.path = [] 520 self.path = []
521 new_pos = None
521 if self.target.z < self.pos.z: 522 if self.target.z < self.pos.z:
522 # We need to try heading down. 523 # We need to try heading down.
523 return Position(self.pos.x, self.pos.y, self.pos.z - 1) 524 new_pos = Position(self.pos.x, self.pos.y, self.pos.z - 1)
524 if self.target.x == self.pos.x and self.target.y == self.pos.y and \ 525 if self.target.x == self.pos.x and self.target.y == self.pos.y and \
525 self.target.z > self.pos.z: 526 self.target.z > self.pos.z:
526 # We try heading up 527 # We try heading up
527 return Position(self.pos.x, self.pos.y, self.pos.z + 1) 528 new_pos = Position(self.pos.x, self.pos.y, self.pos.z + 1)
529 if new_pos:
530 if new_pos in self._last_steps:
531 # ladder, so we allow backtracking
532 self._last_steps.remove(new_pos)
533 return new_pos
528 cur_dist = self.target.dist(self.pos) 534 cur_dist = self.target.dist(self.pos)
529 if cur_dist < 2: 535 if cur_dist < 2:
530 # We're right ontop of our target, so just go there 536 # We're right ontop of our target, so just go there
531 return self.target 537 return self.target
532 # Find the cheapest spot close to us that moves us closer to the target 538 # Find the cheapest spot close to us that moves us closer to the target
686 self.tick = 0 692 self.tick = 0
687 else: 693 else:
688 # We've dug through the fence, so make a hole 694 # We've dug through the fence, so make a hole
689 self._make_hole() 695 self._make_hole()
690 return 696 return
691 else: 697 desired_pos = self._calc_next_move()
692 desired_pos = self._calc_next_move()
693 final_pos = self._update_pos(desired_pos) 698 final_pos = self._update_pos(desired_pos)
694 self._fix_face(final_pos) 699 self._fix_face(final_pos)
695 self.pos = final_pos 700 self.pos = final_pos
696 change_visible = False 701 change_visible = False
697 # See if we're entering/leaving a building 702 # See if we're entering/leaving a building