Changeset 358


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

Ticket #124 Patch by Beliar, fixed highlight of front object when the object moves away from under the mouse. Patch by eliedebrauwer to only display the name of the currently highlighted object. fixes[s:trac, t:124]

File:
1 edited

Legend:

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

    r356 r358  
    8181            if(self.sounds.music_init == False): 
    8282                self.sounds.playMusic("/music/preciouswasteland.ogg") 
    83                  
     83         
     84        #The current highlighted object 
     85        self.highlight_obj = None 
     86         
     87        #Last saved mouse coords 
     88        self.last_mousecoords = None 
     89     
    8490    def quitGame(self): 
    8591        """Quits the game 
     
    234240           @param evt: The event that fife caught 
    235241           @return: None""" 
    236         click = fife.ScreenPoint(evt.getX(), evt.getY()) 
     242        self.last_mousecoords = fife.ScreenPoint(evt.getX(), evt.getY()) 
     243        self.highlightFrontObject() 
     244 
     245    def highlightFrontObject(self): 
     246        """Highlights the object that is at the current mouse coordinates""" 
     247        if self.last_mousecoords: 
     248            front_obj = self.getObjectAtCoords(self.last_mousecoords) 
     249            if front_obj != None: 
     250                if self.highlight_obj == None or front_obj.getId() != self.highlight_obj.getId(): 
     251                    if self.highlight_obj: 
     252                        self.displayObjectText(self.highlight_obj,"") 
     253                    self.active_map.outline_render.removeAllOutlines() 
     254                    self.highlight_obj = front_obj 
     255                    self.active_map.outline_render.addOutlined(self.highlight_obj, 0, \ 
     256                                                               137, 255, 2) 
     257                        # get the text 
     258                    item = self.data.objectActive(self.highlight_obj.getId()) 
     259                    if item is not None: 
     260                        self.displayObjectText(self.highlight_obj, item.name) 
     261            else: 
     262                if self.highlight_obj: 
     263                    self.displayObjectText(self.highlight_obj,"") 
     264                self.active_map.outline_render.removeAllOutlines() 
     265                self.highlight_obj = None 
     266                 
     267    def getObjectAtCoords(self, coords): 
     268        """Get the object which is at the given coords 
     269            @type coords: fife.Screenpoint 
     270            @param coords: Coordinates where to check for an object 
     271            @rtype: fife.Object 
     272            @return: An object or None""" 
    237273        i=self.active_map.cameras[self.active_map.my_cam_id].\ 
    238                 getMatchingInstances(click, self.active_map.agent_layer) 
     274            getMatchingInstances(coords, self.active_map.agent_layer) 
    239275        # no object returns an empty tuple 
    240276        if(i != ()): 
    241277            front_y = 0 
    242             front_obj = None 
     278             
    243279 
    244280            for obj in i: 
     
    255291                        #Object on the foreground 
    256292                        front_y = obj_screen_coords.y 
    257                         front_obj = obj 
    258  
    259             if front_obj:                     
    260                 self.active_map.outline_render.removeAllOutlines()  
    261                 self.active_map.outline_render.addOutlined(front_obj, 0, \ 
    262                                                                137, 255, 2) 
    263                 # get the text 
    264                 item = self.data.objectActive(front_obj.getId()) 
    265                 if(item is not None): 
    266                     self.displayObjectText(front_obj, item.name) 
     293                        return obj 
     294                    else: 
     295                        return None 
    267296        else: 
    268             # erase the outline 
    269             self.active_map.outline_render.removeAllOutlines() 
     297            return None          
    270298 
    271299    def getCoords(self, click): 
     
    293321 
    294322    def pump(self): 
    295         """Routine called during each frame. Our main loop is in ./run.py 
    296            We ignore this main loop (but FIFE complains if it is missing).""" 
    297         pass 
     323        """Routine called during each frame. Our main loop is in ./run.py""" 
     324        self.highlightFrontObject() 
Note: See TracChangeset for help on using the changeset viewer.