File: trigger.py

package info (click to toggle)
cyphesis-cpp 0.5.16-1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 5,084 kB
  • ctags: 3,627
  • sloc: cpp: 30,418; python: 4,812; xml: 4,674; sh: 4,118; makefile: 902; ansic: 617
file content (37 lines) | stat: -rw-r--r-- 1,448 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#This file is distributed under the terms of the GNU General Public license.
#Copyright (C) 2007 Al Riddoch (See the file COPYING for details).

from atlas import *
from physics import *
from Vector3D import Vector3D

try:
  from random import *
except ImportError:
  from whrandom import *

from mind.goals.dynamic.DynamicGoal import DynamicGoal

class chase(DynamicGoal):
    def __init__(self, kinds, desc="Chase after things."):
        DynamicGoal.__init__(self, trigger="sight_move", desc=desc)
        self.kinds = kinds
    def event(self, me, original_op, op):
        # FIXME Now that this code is trigger goal, has this update been done?
        other = me.map.update(op[0], op.getSeconds())
        if other.id==me.id: return
        #target=op[0].location.copy()
        if other.location.parent.id!=me.location.parent.id: return
        if hasattr(other, "type") and other.type[0] not in self.kinds: return
        destination=other.location.coordinates
        distance=destination.distance(me.location.coordinates)
        if distance<1: return
        # CHeat, random chance that it ignores movement
        if uniform(0, 30/distance)<1: return
        target=Location(me.location.parent)
        velocity=destination-me.location.coordinates
        if velocity.mag()==0: return
        target.velocity=velocity.unit_vector()
        target.coordinates=destination
        return Operation("move", Entity(me.id, location=target))