Changeset 104


Ignore:
Timestamp:
06/08/09 04:01:46 (10 years ago)
Author:
maximinus_parpg
Message:

Objects now highlight on mouse over.
Object right-clicking is pixel base, not tile based.

Location:
trunk/PARPG/scripts
Files:
3 edited

Legend:

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

    r77 r104  
    157157                                 i[3], i[4])) 
    158158 
     159    def objectActive(self, ident): 
     160        """Given the objects ID, pass back the object if it is active, 
     161           False if it doesn't exist or not displayed""" 
     162        for i in self.objects: 
     163            if((i.display == True)and(i.id == ident)): 
     164                # we found a match 
     165                return i 
     166        # now try NPC's 
     167        for i in self.npcs: 
     168            # all NPC's are deemed active 
     169            if(i.id == ident): 
     170                return i 
     171        # no match 
     172        return False 
     173 
    159174    def getObjectText(self, xpos, ypos): 
    160175        """Get the objects id and description of itself""" 
  • trunk/PARPG/scripts/objects.py

    r70 r104  
    2323           constructors in one function""" 
    2424        if(data[0]==True): 
     25            self.display = True 
    2526            self.xpos = int(float(data[1])) 
    2627            self.ypos = int(float(data[2])) 
     
    2930            self.text = data[5] 
    3031        else: 
     32            self.display = False 
    3133            self.xpos = None 
    3234            self.ypos = None 
  • trunk/PARPG/scripts/world.py

    r103 r104  
    6262       The engine keeps a copy of this class""" 
    6363    def __init__(self, engine): 
     64        """Constructor for engine 
     65           TODO: Comment these variables""" 
    6466        super(World, self).__init__(engine, regMouse = True, regKeys = True) 
    6567        self.engine = engine 
     
    121123        self.target_rotation = self.cameras['main'].getRotation() 
    122124        self.cord_render = self.cameras['main'].getRenderer('CoordinateRenderer') 
     125        self.outline_render = fife.InstanceRenderer.getInstance(self.cameras['main']) 
    123126         
    124127        # set the rnder text 
     
    139142        obj = self.agent_layer.createInstance( 
    140143                self.model.getObject(str(gfx), "PARPG"), 
    141                 fife.ExactModelCoordinate(xpos,ypos,0.0), str(gfx)) 
     144                fife.ExactModelCoordinate(xpos,ypos,0.0), str(name)) 
    142145        obj.setRotation(0) 
    143146        fife.InstanceVisual.create(obj) 
     
    163166 
    164167    def setImages(self, widget, image): 
    165         """ Set the up, down, and hover images of an Imagebutton """ 
     168        """Set the up, down, and hover images of an Imagebutton""" 
    166169        widget.up_image = image 
    167170        widget.down_image = image 
    168171        widget.hover_image = image 
    169  
    170172 
    171173    def closeInventoryAndToggle(self): 
     
    242244            self.data.handleMouseClick(self.getCoords(click)) 
    243245        elif(evt.getButton() == fife.MouseEvent.RIGHT): 
    244             # there's no need to query fife about what things are where, 
    245             # the engine code should know.... 
    246             coords = self.getCoords(click).getLayerCoordinates() 
    247             obj, text = self.data.getObjectText(coords.x, coords.y) 
    248             if(obj != ""): 
    249                 self.displayObjectText(obj, text) 
     246            # although the engine code knows, fife can be more accurate 
     247            i=self.cameras['main'].getMatchingInstances(click, self.agent_layer) 
     248            if(i != ()): 
     249                for obj in i: 
     250                    # check to see if this in our list at all 
     251                    test = self.data.objectActive(obj.getId()) 
     252                    if(test != False): 
     253                        # finally, display the text     
     254                        self.displayObjectText(obj.getId(), test.text) 
     255 
     256    def mouseMoved(self, evt): 
     257        """Called when the mouse is moved""" 
     258        click = fife.ScreenPoint(evt.getX(), evt.getY()) 
     259        i=self.cameras['main'].getMatchingInstances(click, self.agent_layer) 
     260        # no object returns an empty tuple 
     261        if(i != ()): 
     262            for obj in i: 
     263                # check to see if this in our list at all 
     264                if(self.data.objectActive(obj.getId())!=False): 
     265                    # yes, so outline     
     266                    self.outline_render.addOutlined(obj, 0, 137, 255, 2) 
     267        else: 
     268            # erase the outline 
     269            self.outline_render.removeAllOutlines() 
    250270 
    251271    def toggle_renderer (self, r_name): 
Note: See TracChangeset for help on using the changeset viewer.