source: branches/active/character_customization/game/parpg/gamesceneview.py @ 774

Revision 774, 6.2 KB checked in by aspidites, 9 years ago (diff)

Patch by Aspidites

  • removed shebang from all python files except launcher scripts
  • added shebang to pychan_designer
  • Property svn:eol-style set to native
Line 
1#   This file is part of PARPG.
2
3#   PARPG is free software: you can redistribute it and/or modify
4#   it under the terms of the GNU General Public License as published by
5#   the Free Software Foundation, either version 3 of the License, or
6#   (at your option) any later version.
7
8#   PARPG is distributed in the hope that it will be useful,
9#   but WITHOUT ANY WARRANTY; without even the implied warranty of
10#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11#   GNU General Public License for more details.
12
13#   You should have received a copy of the GNU General Public License
14#   along with PARPG.  If not, see <http://www.gnu.org/licenses/>.
15
16from sounds import SoundEngine
17from viewbase import ViewBase
18from fife import fife
19
20class GameSceneView(ViewBase):
21    """GameSceneView is responsible for drawing the scene"""
22    def __init__(self, engine, model):
23        """Constructor for GameSceneView
24           @param engine: A fife.Engine instance
25           @type engine: fife.Engine
26           @param model: a script.GameModel instance
27           @type model: script.GameModel
28           """
29        super(GameSceneView, self).__init__(engine, model)
30
31        # init the sound
32        self.sounds = SoundEngine(engine)
33
34        self.hud = None       
35
36        # The current highlighted object
37        self.highlight_obj = None
38     
39        # faded objects in top layer
40        self.faded_objects = set()
41
42    def displayObjectText(self, obj_id, text, time=1000):
43        """Display on screen the text of the object over the object.
44           @type obj_id: id of fife.instance
45           @param obj: id of object to draw over
46           @type text: String
47           @param text: text to display over object
48           @return: None"""
49        try:
50            if obj_id:
51                obj = self.model.active_map.agent_layer.getInstance(obj_id)
52            else:
53                obj = None
54        except RuntimeError as error:
55            if error.args[0].split(',')[0].strip() == "_[NotFound]_":
56                obj = None
57            else:
58                raise
59        if obj:
60            obj.say(str(text), time)
61
62    def onWalk(self, click):
63        """Callback sample for the context menu."""
64        self.hud.hideContainer()
65        self.model.game_state.player_character.run(click)
66
67    def refreshTopLayerTransparencies(self):
68        """Fade or unfade TopLayer instances if the PlayerCharacter
69        is under them."""
70        if not self.model.active_map:
71            return
72
73        # get the PlayerCharacter's screen coordinates
74        camera = self.model.active_map.cameras[self.model.active_map.my_cam_id]
75        point = self.model.game_state.player_character.\
76                                        behaviour.agent.getLocation()
77        scr_coords = camera.toScreenCoordinates(point.getMapCoordinates())
78
79        # find all instances on TopLayer that fall on those coordinates
80        instances = camera.getMatchingInstances(scr_coords,
81                        self.model.active_map.top_layer)
82        instance_ids = [ instance.getId() for instance in instances ]
83        faded_objects = self.faded_objects
84
85        # fade instances
86        for instance_id in instance_ids:
87            if instance_id not in faded_objects:
88                faded_objects.add(instance_id)
89                self.model.active_map.top_layer.getInstance(instance_id).\
90                        get2dGfxVisual().setTransparency(128)
91
92        # unfade previously faded instances
93        for instance_id in faded_objects.copy():
94            if instance_id not in instance_ids:
95                faded_objects.remove(instance_id)
96                self.model.active_map.top_layer.getInstance(instance_id).\
97                        get2dGfxVisual().setTransparency(0)
98
99
100    #def removeHighlight(self):
101       
102   
103    def highlightFrontObject(self, mouse_coords):
104        """Highlights the object that is at the
105        current mouse coordinates"""       
106        if not self.model.active_map:
107            return
108        if mouse_coords:
109            front_obj = self.model.getObjectAtCoords(mouse_coords)
110            if front_obj != None:
111                if self.highlight_obj == None \
112                                    or front_obj.getId() != \
113                                    self.highlight_obj:
114                    if self.model.game_state.hasObject(front_obj.getId()):
115                        self.displayObjectText(self.highlight_obj, "")
116                    self.model.active_map.outline_renderer.removeAllOutlines()
117                    self.highlight_obj = front_obj.getId()
118                    self.model.active_map.outline_renderer.addOutlined(
119                                                    front_obj, 
120                                                    0,
121                                                    137, 255, 2)
122                    # get the text
123                    item = self.model.objectActive(self.highlight_obj)
124                    if item is not None:
125                        self.displayObjectText(self.highlight_obj, 
126                                                    item.name)
127            else:
128                self.model.active_map.outline_renderer.removeAllOutlines()
129                self.highlight_obj = None 
130           
131
132    def moveCamera(self, direction):
133        """Move the camera in the given direction.
134        @type direction: list of two integers
135        @param direction: the two integers can be 1, -1, or 0
136        @return: None """ 
137       
138        if 'cameras' in dir(self.model.active_map):
139            cam = self.model.active_map.cameras[self.model.active_map.my_cam_id]
140            location = cam.getLocation()
141            position = location.getMapCoordinates()
142           
143            #how many pixls to move by each call
144            move_by = 1
145            #create a new DoublePoint3D and add it to position DoublePoint3D
146            new_x, new_y = move_by * direction[0], move_by * direction[1]
147
148            position_offset = fife.DoublePoint3D(int(new_x), int(new_y))
149            position += position_offset
150           
151            #give location the new position
152            location.setMapCoordinates(position)
153
154            #detach the camera from any objects
155            cam.detach()
156            #move the camera to the new location
157            cam.setLocation(location)
158           
159           
Note: See TracBrowser for help on using the repository browser.