Mercurial > fujo
changeset 96:c85184d7faa1
patrol behavior
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Mon, 06 Jan 2014 12:48:35 +0100 |
| parents | 02afe37cd2f1 |
| children | 714368b41a82 |
| files | fujo/behaviors.py fujo/mobs.py |
| diffstat | 2 files changed, 77 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/fujo/behaviors.py Mon Jan 06 11:55:41 2014 +0100 +++ b/fujo/behaviors.py Mon Jan 06 12:48:35 2014 +0100 @@ -241,7 +241,7 @@ @Behavior.register class Panic(Behavior): - priority = 102 + priority = 152 def __init__(self, afraid=None): super(Panic, self).__init__() @@ -272,3 +272,67 @@ self.afraid = data['afraid'] +@Behavior.register +class Running(Behavior): + def __init__(self): + super(Running, self).__init__() + self.face = random.randint(0, 4) + self.turn = random.choice([-1, 1]) + + def act(self, level): + count = 0 + while level.is_blocked(dpos(self.mob.pos, self.face)): + self.face += self.turn + count += 1 + if count >= 3: + return False + self.mob.do_walk(level, self.face) + return True + + def save(self): + data = super(Running, self).save() + data['face'] = self.face + data['turn'] = self.turn + return data + + def load(self, data): + super(Running, self).load(data) + self.face = data['face'] + self.turn = data['turn'] + +@Behavior.register +class Patrol(Behavior): + def __init__(self): + super(Patrol, self).__init__() + self.face = random.randint(0, 4) + self.turn = random.choice([-1, 1]) + self.last_possible = 4 + + def act(self, level): + possible = [d for d in xrange(4) + if not level.is_blocked(dpos(self.mob.pos, d))] + if not possible: + return False + if self.last_possible < 4: + # Hug the wall + side = (self.face + self.turn) % 4 + if side in possible: + self.face = side + self.last_possible = len(possible) + while self.face not in possible: + self.face = (self.face - self.turn) % 4 + self.mob.do_walk(level, self.face) + return True + + def save(self): + data = super(Patrol, self).save() + data['face'] = self.face + data['turn'] = self.turn + data['last_possible'] = self.last_possible + return data + + def load(self, data): + super(Patrol, self).load(data) + self.face = data['face'] + self.turn = data['turn'] + self.last_possible = data['last_possible']
--- a/fujo/mobs.py Mon Jan 06 11:55:41 2014 +0100 +++ b/fujo/mobs.py Mon Jan 06 12:48:35 2014 +0100 @@ -211,7 +211,7 @@ self.add_behavior(behaviors.Sleep(random.randint(0, 5))) self.add_behavior(behaviors.Coward()) self.add_behavior(behaviors.Hostile()) - self.add_behavior(behaviors.Wander()) + self.add_behavior(behaviors.Hunting()) @Mob.register @@ -239,11 +239,21 @@ damage = 3 attack = 4 + def init_behaviors(self): + self.add_behavior(behaviors.Sleep(random.randint(0, 5))) + self.add_behavior(behaviors.Hostile()) + self.add_behavior(behaviors.Patrol()) + @Mob.register class Kappa(Monster): looks = 3 + def init_behaviors(self): + self.add_behavior(behaviors.Sleep(random.randint(0, 5))) + self.add_behavior(behaviors.Hostile()) + self.add_behavior(behaviors.Panic()) + @Mob.register class Bat(Monster): @@ -275,7 +285,7 @@ def init_behaviors(self): self.add_behavior(behaviors.Hostile()) self.add_behavior(behaviors.Excitable()) - self.add_behavior(behaviors.Wander()) + self.add_behavior(behaviors.Patrol()) self.add_behavior(behaviors.Hide()) def hide_anim(self):
