Mercurial > rinkhals
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 |