Changeset 360 for trunk


Ignore:
Timestamp:
11/01/09 20:02:15 (10 years ago)
Author:
eliedebrauwer
Message:

Ticket #140: patch by eliedebrauwer. Modified the PCBehaviour which allows actions to trigger actions, this way we can keep following an NPC until we get close enough to start a conversation. This is not an optimal path (yet), but at least we got close now. fixes[s:trac, t:140]

Location:
trunk/game/scripts
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/game/scripts/engine.py

    r356 r360  
    264264                                     npc.getLocation().\ 
    265265                                     getLayerCoordinates().y], \ 
    266                                      TalkAction(self, npc)) 
     266                                    TalkAction(self, npc)) 
    267267 
    268268    def loadMap(self, map_name, map_file): 
  • trunk/game/scripts/hud.py

    r348 r360  
    614614    def showDialogue(self, npc): 
    615615        """Show the NPC dialogue window 
    616            @type npc: ??? 
    617            @param npc: the npc that we are having a dialogue with""" 
     616           @type npc: actors.NonPlayerCharacter 
     617           @param npc: the npc that we are having a dialogue with 
     618           @return: None""" 
    618619        dialogue = DialogueGUI(npc) 
    619620        dialogue.initiateDialogue() 
  • trunk/game/scripts/objects/action.py

    r320 r360  
    8585        """@type engine: Engine reference 
    8686           @param engine: A reference to the engine. 
    87            @type examineName: NonPlayerCharacter 
    88            @param examineName: NPC to interact with. 
     87           @type npc: NonPlayerCharacter 
     88           @param npc: NPC to interact with. 
    8989           """ 
    9090        self.engine = engine 
     
    9292         
    9393    def execute(self): 
    94         """Talk with the NPC.""" 
     94        """Talk with the NPC when we are close enough, otherwise 
     95           we move close. 
     96           @return: None""" 
     97         
    9598        pc = self.engine.game_state.PC 
    96         pc.behaviour.agent.act('stand', self.npc.getLocation()) 
    97  
    98         if self.npc.dialogue is not None: 
    99             self.npc.talk(pc) 
    100             self.engine.view.hud.showDialogue(self.npc) 
     99        npc_coordinates = self.npc.getLocation().getLayerCoordinates() 
     100        pc_coordinates = pc.behaviour.agent.getLocation().getLayerCoordinates() 
     101         
     102        distance_squared = (npc_coordinates.x - pc_coordinates.x) *\ 
     103                         (npc_coordinates.x - pc_coordinates.x) +\ 
     104                         (npc_coordinates.y - pc_coordinates.y) *\ 
     105                         (npc_coordinates.y - pc_coordinates.y) 
     106         
     107         
     108        # If we are too far away, we approach the NPC again 
     109        if distance_squared > 2: 
     110            pc.approach([self.npc.getLocation().\ 
     111                         getLayerCoordinates().x, \ 
     112                         self.npc.getLocation().\ 
     113                         getLayerCoordinates().y], \ 
     114                        TalkAction(self.engine,\ 
     115                                   self.npc))         
    101116        else: 
    102             self.npc.behaviour.agent.say("Leave me alone!", 1000) 
     117            pc.behaviour.agent.act('stand', self.npc.getLocation()) 
     118     
     119            if self.npc.dialogue is not None: 
     120                self.npc.talk(pc) 
     121                self.engine.view.hud.showDialogue(self.npc) 
     122            else: 
     123                self.npc.behaviour.agent.say("Leave me alone!", 1000) 
     124                 
     125            self.engine.game_state.PC.behaviour.idle() 
     126            self.engine.game_state.PC.nextAction = None  
  • trunk/game/scripts/objects/actors.py

    r356 r360  
    7676           @param action: ??? 
    7777           @return: None""" 
    78         if self.nextAction: 
    79             self.nextAction.execute() 
    80             self.nextAction = None 
    81             self.idle() 
    82         else: 
    83             self.idle() 
     78         
     79        # First we reset the next behavior  
     80        act = self.nextAction 
     81        self.nextAction = None  
     82        self.idle() 
     83         
     84        if act: 
     85            act.execute() 
    8486             
    8587        if(action.getId() != 'stand'): 
     
    160162 
    161163    def approach(self, location, action = None): 
    162         """Approaches an npc and then ???. 
     164        """Approaches a location and then perform an action (if set). 
    163165           @type loc: fife.Location 
    164166           @param loc: the location to approach 
     
    172174        l.setLayerCoordinates(fife.ModelCoordinate(*boxLocation)) 
    173175        self.behaviour.agent.move('run', l, self.behaviour.speed) 
     176         
    174177 
    175178class NPCBehaviour(ActorBehaviour): 
Note: See TracChangeset for help on using the changeset viewer.