annotate src/parpg/gamescenecontroller.py @ 145:3dddf09377b8

"Open" will now not be shown in the context menu when the lockable is locked. "Lock" will not not be shown in the context menu when the lockable is open.
author KarstenBock@gmx.net
date Mon, 03 Oct 2011 14:12:17 +0200
parents c9fba51214ed
children 6e1eb964a6e5
rev   line source
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
1 # This file is part of PARPG.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
2
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
3 # PARPG is free software: you can redistribute it and/or modify
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
4 # it under the terms of the GNU General Public License as published by
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
5 # the Free Software Foundation, either version 3 of the License, or
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
6 # (at your option) any later version.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
7
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
8 # PARPG is distributed in the hope that it will be useful,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
11 # GNU General Public License for more details.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
12
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
13 # You should have received a copy of the GNU General Public License
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
14 # along with PARPG. If not, see <http://www.gnu.org/licenses/>.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
15 """This file contains the GameSceneController that handles input when the game
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
16 is exploring a scene"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
17
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
18
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
19 from datetime import datetime
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
20 import random
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
21 import glob
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
22 import os
84
1e7465a785c4 Removed the pos value from the fifeagent component. getItemActions of Gamescenecontroller gets the position by calling a method of the behaviour.
KarstenBock@gmx.net
parents: 80
diff changeset
23 import logging
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
24
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
25 from fife import fife
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
26 from fife import extensions
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
27
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
28 from controllerbase import ControllerBase
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
29 from parpg.gui.hud import Hud
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
30 from parpg.gui import drag_drop_data as data_drag
134
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
31 from objects.action import (ChangeMapAction, ExamineAction, TalkAction,
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
32 OpenAction, CloseAction, UnlockAction, LockAction,
137
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
33 PickUpAction, DropItemAction,
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
34 ExamineContentsAction,
134
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
35 )
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
36
118
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
37 from parpg.world import World
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
38
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
39 #For debugging/code analysis
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
40 if False:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
41 from gamesceneview import GameSceneView
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
42 from gamemodel import GameModel
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
43 from parpg import PARPGApplication
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
44
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
45
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
46 logger = logging.getLogger('gamescenecontroller')
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
47
118
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
48 class GameSceneController(World, ControllerBase):
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
49 '''
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
50 This controller handles inputs when the game is in "scene" state.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
51 "Scene" state is when the player can move around and interact
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
52 with objects. Like, talking to a npc or examining the contents of a box.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
53 '''
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
54
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
55
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
56 def __init__(self, engine, view, model, application):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
57 '''
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
58 Constructor
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
59 @param engine: Instance of the active fife engine
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
60 @type engine: fife.Engine
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
61 @param view: Instance of a GameSceneView
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
62 @param type: parpg.GameSceneView
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
63 @param model: The model that has the current gamestate
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
64 @type model: parpg.GameModel
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
65 @param application: The application that created this controller
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
66 @type application: parpg.PARPGApplication
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
67 @param settings: The current settings of the application
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
68 @type settings: fife.extensions.fife_settings.Setting
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
69 '''
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
70 ControllerBase.__init__(self,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
71 engine,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
72 view,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
73 model,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
74 application)
118
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
75 World.__init__(self)
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
76 #this can be helpful for IDEs code analysis
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
77 if False:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
78 assert(isinstance(self.engine, fife.Engine))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
79 assert(isinstance(self.view, GameSceneView))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
80 assert(isinstance(self.view, GameModel))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
81 assert(isinstance(self.application, PARPGApplication))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
82 assert(isinstance(self.event_manager, fife.EventManager))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
83
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
84 # Last saved mouse coords
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
85 self.action_number = 1
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
86
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
87 self.has_mouse_focus = True
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
88 self.last_mousecoords = None
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
89 self.mouse_callback = None
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
90 self.original_cursor_id = self.engine.getCursor().getId()
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
91 self.scroll_data = {"mouse":[], "kb":[], "offset":[0,0]}
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
92 self.scroll_timer = extensions.fife_timer.Timer(
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
93 100,
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
94 lambda: self.view.moveCamera(self.scroll_data["offset"]),
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
95 )
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
96
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
97 #this is temporary until we can set the native cursor
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
98 self.resetMouseCursor()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
99 self.paused = False
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
100
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
101 if model.settings.fife.EnableSound:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
102 if not self.view.sounds.music_init:
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
103 music_path = 'music'
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
104 music_file = random.choice(
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
105 glob.glob('/'.join([music_path, '*.ogg']))
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
106 )
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
107 self.view.sounds.playMusic(music_file)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
108 self.initHud()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
109
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
110
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
111 def initHud(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
112 """Initialize the hud member
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
113 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
114 hud_callbacks = {
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
115 'saveGame': self.saveGame,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
116 'loadGame': self.loadGame,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
117 'quitGame': self.quitGame,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
118 }
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
119 self.view.hud = Hud(self,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
120 self.model.settings,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
121 hud_callbacks)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
122
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
123 def keyPressed(self, evt):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
124 """Whenever a key is pressed, fife calls this routine.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
125 @type evt: fife.event
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
126 @param evt: The event that fife caught
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
127 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
128 key = evt.getKey()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
129 key_val = key.getValue()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
130
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
131 if(key_val == key.Q):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
132 # we need to quit the game
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
133 self.view.hud.quitGame()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
134 if(key_val == key.T):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
135 self.model.active_map.toggleRenderer('GridRenderer')
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
136 if(key_val == key.F1):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
137 # display the help screen and pause the game
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
138 self.view.hud.displayHelp()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
139 if(key_val == key.F5):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
140 self.model.active_map.toggleRenderer('CoordinateRenderer')
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
141 if(key_val == key.F7):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
142 # F7 saves a screenshot to screenshots directory
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
143
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
144 settings = self.model.settings
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
145 # FIXME M. George Hansen 2011-06-06: Not sure that user_path is set
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
146 # correctly atm.
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
147 screenshot_directory = os.path.join(settings.user_path,
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
148 'screenshots')
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
149 # try to create the screenshots directory
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
150 try:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
151 os.mkdir(screenshot_directory)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
152 #TODO: distinguish between already existing permissions error
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
153 except OSError:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
154 logger.warning("screenshot directory wasn't created.")
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
155
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
156 screenshot_file = os.path.join(screenshot_directory,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
157 'screen-{0}.png'.format(
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
158 datetime.now().strftime(
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
159 '%Y-%m-%d-%H-%M-%S')))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
160 self.engine.getRenderBackend().captureScreen(screenshot_file)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
161 logger.info("PARPG: Saved: {0}".format(screenshot_file))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
162 if(key_val == key.F10):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
163 # F10 shows/hides the console
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
164 self.engine.getGuiManager().getConsole().toggleShowHide()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
165 if(key_val == key.C):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
166 # C opens and closes the character screen.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
167 self.view.hud.toggleCharacterScreen()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
168 if(key_val == key.I):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
169 # I opens and closes the inventory
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
170 self.view.hud.toggleInventory()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
171 if(key_val == key.A):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
172 # A adds a test action to the action box
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
173 # The test actions will follow this format: Action 1,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
174 # Action 2, etc.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
175 self.view.hud.addAction("Action " + str(self.action_number))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
176 self.action_number += 1
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
177 if(key_val == key.ESCAPE):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
178 # Escape brings up the main menu
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
179 self.view.hud.displayMenu()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
180 # Hide the quit menu
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
181 self.view.hud.quit_window.hide()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
182 if(key_val == key.M):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
183 self.view.sounds.toggleMusic()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
184 if(key_val == key.PAUSE):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
185 # Pause pause/unpause the game
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
186 self.model.togglePause()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
187 self.pause(False)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
188 if(key_val == key.SPACE):
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
189 self.model.active_map.centerCameraOnPlayer()
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
190
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
191 #alter scroll data if a directional key is hit
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
192 if(key_val == key.UP):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
193 if not "up" in self.scroll_data["kb"]:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
194 self.scroll_data["kb"].append("up")
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
195
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
196 if(key_val == key.RIGHT):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
197 if not "right" in self.scroll_data["kb"]:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
198 self.scroll_data["kb"].append("right")
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
199
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
200 if(key_val == key.DOWN):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
201 if not "down" in self.scroll_data["kb"]:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
202 self.scroll_data["kb"].append("down")
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
203
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
204 if(key_val == key.LEFT):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
205 if not "left" in self.scroll_data["kb"]:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
206 self.scroll_data["kb"].append("left")
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
207
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
208 def keyReleased(self, evt):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
209 """Whenever a key is pressed, fife calls this routine.
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
210 @type evt: fife.event
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
211 @param evt: The event that fife caught
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
212 @return: None"""
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
213 key = evt.getKey()
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
214 key_val = key.getValue()
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
215
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
216 #alter scroll data if a directional key is released
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
217 if(key_val == key.UP):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
218 if "up" in self.scroll_data["kb"]:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
219 self.scroll_data["kb"].remove("up")
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
220
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
221 if(key_val == key.RIGHT):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
222 if "right" in self.scroll_data["kb"]:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
223 self.scroll_data["kb"].remove("right")
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
224
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
225 if(key_val == key.DOWN):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
226 if "down" in self.scroll_data["kb"]:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
227 self.scroll_data["kb"].remove("down")
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
228
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
229 if(key_val == key.LEFT):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
230 if "left" in self.scroll_data["kb"]:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
231 self.scroll_data["kb"].remove("left")
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
232
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
233 def mouseReleased(self, evt):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
234 """If a mouse button is released, fife calls this routine.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
235 We want to wait until the button is released, because otherwise
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
236 pychan captures the release if a menu is opened.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
237 @type evt: fife.event
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
238 @param evt: The event that fife caught
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
239 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
240 self.view.hud.hideContextMenu()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
241 scr_point = fife.ScreenPoint(evt.getX(), evt.getY())
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
242 if(evt.getButton() == fife.MouseEvent.LEFT):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
243 if(data_drag.dragging):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
244 coord = self.model.getCoords(scr_point)\
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
245 .getExactLayerCoordinates()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
246 commands = ({"Command": "ResetMouseCursor"},
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
247 {"Command": "StopDragging"})
69
ad75fa042b99 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 64
diff changeset
248 self.model.game_state.getObjectById("PlayerCharacter").fifeagent.approach([coord.x,
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
249 coord.y],
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
250 DropItemAction(self,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
251 data_drag.dragged_item,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
252 commands))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
253 else:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
254 self.model.movePlayer(self.model.getCoords(scr_point))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
255 elif(evt.getButton() == fife.MouseEvent.RIGHT):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
256 # is there an object here?
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
257 tmp_active_map = self.model.active_map
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
258 instances = tmp_active_map.cameras[tmp_active_map.my_cam_id].\
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
259 getMatchingInstances(scr_point,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
260 tmp_active_map.agent_layer)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
261 info = None
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
262 for inst in instances:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
263 # check to see if this is an active item
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
264 if(self.model.objectActive(inst.getId())):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
265 # yes, get the model
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
266 info = self.getItemActions(inst.getId())
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
267 break
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
268
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
269 # take the menu items returned by the engine or show a
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
270 # default menu if no items
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
271 data = info or \
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
272 [["Walk", "Walk here", self.view.onWalk,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
273 self.model.getCoords(scr_point)]]
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
274 # show the menu
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
275 self.view.hud.showContextMenu(data, (scr_point.x, scr_point.y))
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
276
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
277
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
278 def updateMouse(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
279 """Updates the mouse values"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
280 if self.paused:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
281 return
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
282 cursor = self.engine.getCursor()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
283 #this can be helpful for IDEs code analysis
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
284 if False:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
285 assert(isinstance(cursor, fife.Cursor))
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
286 self.last_mousecoords = fife.ScreenPoint(cursor.getX(), cursor.getY())
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
287 self.view.highlightFrontObject(self.last_mousecoords)
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
288
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
289 #set the trigger area in pixles
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
290 pixle_edge = 20
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
291
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
292 mouse_x = self.last_mousecoords.x
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
293 screen_width = self.model.engine.getSettings().getScreenWidth()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
294 mouse_y = self.last_mousecoords.y
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
295 screen_height = self.model.engine.getSettings().getScreenHeight()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
296
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
297 image = None
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
298 settings = self.model.settings
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
299
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
300
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
301 #edge logic
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
302 if self.has_mouse_focus:
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
303 direction = self.scroll_data["mouse"] = []
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
304
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
305 #up
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
306 if mouse_y <= pixle_edge:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
307 direction.append("up")
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
308 image = '/'.join(['gui/cursors', settings.parpg.CursorUp])
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
309
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
310 #right
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
311 if mouse_x >= screen_width - pixle_edge:
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
312 direction.append("right")
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
313 image = '/'.join(['gui/cursors', settings.parpg.CursorRight])
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
314
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
315 #down
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
316 if mouse_y >= screen_height - pixle_edge:
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
317 direction.append("down")
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
318 image = '/'.join(['gui/cursors', settings.parpg.CursorDown])
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
319
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
320 #left
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
321 if mouse_x <= pixle_edge:
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
322 direction.append("left")
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
323 image = '/'.join(['gui/cursors', settings.parpg.CursorLeft])
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
324
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
325 if image is not None and not data_drag.dragging:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
326 self.setMouseCursor(image, image)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
327
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
328
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
329 def handleCommands(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
330 """Check if a command is to be executed
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
331 """
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
332 if self.model.map_change:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
333 self.pause(True)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
334 if self.model.active_map:
118
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
335 self.model.updateObjectDB(self)
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
336 player_char = self.model.game_state.\
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
337 getObjectById("PlayerCharacter").fifeagent
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
338 pc_agent = self.model.agents\
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
339 [self.model.ALL_AGENTS_KEY]["PlayerCharacter"]
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
340 pc_agent["Map"] = self.model.target_map_name
131
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
341 pc_agent["Position"] = (self.model.target_position or
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
342 pc_agent["Position"])
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
343 player_agent = self.model.active_map.\
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
344 agent_layer.getInstance("PlayerCharacter")
131
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
345 self.model.game_state.deleteObject("PlayerCharacter").delete()
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
346 deleted = self.model.game_state.deleteObjectsFromMap(
118
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
347 self.model.game_state.current_map_name
29869273f9e1 Fixed moving between maps.
KarstenBock@gmx.net
parents: 116
diff changeset
348 )
131
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
349 deleted.extend(
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
350 self.model.game_state.deleteObjectsFromMap(None)
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
351 )
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
352 for obj in deleted:
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
353 obj.delete()
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
354
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
355 self.model.loadMap(self.model.target_map_name)
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
356
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
357 self.model.setActiveMap(self.model.target_map_name)
12
d60f1dab8469 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
358
64
32faacaf6f28 Added funcionality to load Entities from file
KarstenBock@gmx.net
parents: 30
diff changeset
359 self.model.placeAgents(self)
69
ad75fa042b99 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 64
diff changeset
360 self.model.placePC(self)
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
361 self.model.map_change = False
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
362 # The PlayerCharacter has an inventory, and also some
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
363 # filling of the ready slots in the HUD.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
364 # At this point we sync the contents of the ready slots
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
365 # with the contents of the inventory.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
366 self.view.hud.inventory = None
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
367 self.view.hud.initializeInventory()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
368 self.pause(False)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
369
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
370 def handleScrolling(self):
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
371 """
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
372 Merge kb and mouse related scroll data, limit the speed and
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
373 move the camera.
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
374 """
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
375 #this is how many pxls the camera is moved in one time frame
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
376 scroll_offset = self.scroll_data["offset"] = [0,0]
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
377
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
378 mouse = self.scroll_data["mouse"]
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
379 keyboard = self.scroll_data["kb"]
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
380 speed = self.model.settings.parpg.ScrollSpeed
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
381
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
382 #adds a value to the offset depending on the contents of each
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
383 # of the controllers: set() removes doubles
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
384 scroll_direction = set(mouse+keyboard)
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
385 for direction in scroll_direction:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
386 if direction == "up":
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
387 scroll_offset[0] +=1
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
388 scroll_offset[1] -=1
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
389 elif direction == "right":
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
390 scroll_offset[0] +=1
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
391 scroll_offset[1] +=1
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
392 elif direction == "down":
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
393 scroll_offset[0] -=1
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
394 scroll_offset[1] +=1
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
395 elif direction == "left":
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
396 scroll_offset[0] -=1
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
397 scroll_offset[1] -=1
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
398
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
399 #keep the speed within bounds
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
400 if scroll_offset[0] > 0: scroll_offset[0] = speed
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
401 if scroll_offset[0] < 0: scroll_offset[0] = -speed
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
402
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
403 if scroll_offset[1] > 0: scroll_offset[1] = speed
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
404 if scroll_offset[1] < 0: scroll_offset[1] = -speed
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
405
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
406 #de/activate scrolling
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
407 if scroll_offset != [0, 0]:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
408 self.scroll_timer.start()
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
409 else:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
410 self.scroll_timer.stop()
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
411 if not data_drag.dragging:
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
412 self.resetMouseCursor()
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
413
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
414 def nullFunc(self, userdata):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
415 """Sample callback for the context menus."""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
416 logger.info(userdata)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
417
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
418 def initTalk(self, npc_info):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
419 """ Starts the PlayerCharacter talking to an NPC. """
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
420 # TODO: work more on this when we get NPCData and HeroData straightened
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
421 # out
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
422 npc = self.model.game_state.getObjectById(
116
9b5498e3bda0 Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents: 112
diff changeset
423 npc_info.general.identifier,
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
424 self.model.game_state.current_map_name
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
425 )
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
426 npc_pos = npc.fifeagent.behaviour.getLocation().getLayerCoordinates()
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
427 self.model.game_state.getObjectById("PlayerCharacter").fifeagent.\
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
428 behaviour.approach([npc_pos.x,
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
429 npc_pos.y],
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
430 TalkAction(self, npc))
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
431
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
432 def getItemActions(self, obj_id):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
433 """Given the objects ID, return the text strings and callbacks.
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
434 @type obj_id: string
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
435 @param obj_id: ID of object
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
436 @rtype: list
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
437 @return: List of text and callbacks"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
438 actions = []
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
439 obj = self.model.game_state.\
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
440 getObjectById(obj_id,
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
441 self.model.game_state.current_map_name)
84
1e7465a785c4 Removed the pos value from the fifeagent component. getItemActions of Gamescenecontroller gets the position by calling a method of the behaviour.
KarstenBock@gmx.net
parents: 80
diff changeset
442 obj_pos = obj.fifeagent.behaviour.getLocation().getLayerCoordinates()
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
443 player = self.model.game_state.getObjectById("PlayerCharacter")
116
9b5498e3bda0 Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents: 112
diff changeset
444 is_player = obj.general.identifier == player.general.identifier
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
445
84
1e7465a785c4 Removed the pos value from the fifeagent component. getItemActions of Gamescenecontroller gets the position by calling a method of the behaviour.
KarstenBock@gmx.net
parents: 80
diff changeset
446
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
447 #TODO: Check all actions to be compatible with the grease components
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
448 if obj is not None:
80
84d03dc70904 Added code that checks if the object is the player so certain actions (talk, attack) will not appear in the menu.
KarstenBock@gmx.net
parents: 78
diff changeset
449 if obj.dialogue and not is_player:
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
450 actions.append(["Talk", "Talk", self.initTalk, obj])
80
84d03dc70904 Added code that checks if the object is the player so certain actions (talk, attack) will not appear in the menu.
KarstenBock@gmx.net
parents: 78
diff changeset
451 if obj.characterstats and not is_player:
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
452 actions.append(["Attack", "Attack", self.nullFunc, obj])
112
c1a6ea47b838 The Examine action in the context menu will now only be shown when the Entity actually has a description text.
KarstenBock@gmx.net
parents: 111
diff changeset
453 if obj.description and obj.description.desc:
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
454 actions.append(["Examine", "Examine",
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
455 player.fifeagent.behaviour.approach,
84
1e7465a785c4 Removed the pos value from the fifeagent component. getItemActions of Gamescenecontroller gets the position by calling a method of the behaviour.
KarstenBock@gmx.net
parents: 80
diff changeset
456 [obj_pos.x, obj_pos.y],
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
457 ExamineAction(self,
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
458 obj_id, obj.description.view_name,
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
459 obj.description.desc)])
111
a33fdfeb4109 Fixed bug in "getItemActions" when the Entity has a change_map component.
KarstenBock@gmx.net
parents: 84
diff changeset
460
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
461 if obj.change_map:
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
462 actions.append(["Change Map", "Change Map",
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
463 player.fifeagent.behaviour.approach,
84
1e7465a785c4 Removed the pos value from the fifeagent component. getItemActions of Gamescenecontroller gets the position by calling a method of the behaviour.
KarstenBock@gmx.net
parents: 80
diff changeset
464 [obj_pos.x, obj_pos.y],
111
a33fdfeb4109 Fixed bug in "getItemActions" when the Entity has a change_map component.
KarstenBock@gmx.net
parents: 84
diff changeset
465 ChangeMapAction(self, obj.change_map.target_map,
a33fdfeb4109 Fixed bug in "getItemActions" when the Entity has a change_map component.
KarstenBock@gmx.net
parents: 84
diff changeset
466 obj.change_map.target_position)])
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
467
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
468 if obj.lockable:
134
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
469 if obj.lockable.closed:
145
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
470 if not obj.lockable.locked:
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
471 actions.append(["Open", "Open",
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
472 player.fifeagent.behaviour.approach,
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
473 [obj_pos.x, obj_pos.y],
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
474 OpenAction(self, obj)])
134
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
475 else:
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
476 actions.append(["Close", "Close",
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
477 player.fifeagent.behaviour.approach,
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
478 [obj_pos.x, obj_pos.y],
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
479 CloseAction(self, obj)])
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
480 if obj.lockable.locked:
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
481 actions.append(["Unlock", "Unlock",
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
482 player.fifeagent.behaviour.approach,
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
483 [obj_pos.x, obj_pos.y],
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
484 UnlockAction(self, obj)])
c938a828a38a Added actions for lockable components (Open, Close, Lock and Unlock).
KarstenBock@gmx.net
parents: 131
diff changeset
485 else:
145
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
486 if obj.lockable.closed:
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
487 actions.append(["Lock", "Lock",
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
488 player.fifeagent.behaviour.approach,
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
489 [obj_pos.x, obj_pos.y],
3dddf09377b8 "Open" will now not be shown in the context menu when the lockable is locked.
KarstenBock@gmx.net
parents: 138
diff changeset
490 LockAction(self, obj)])
137
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
491 if obj.container:
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
492 if obj.characterstats:
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
493 #TODO: This is reserved for a possible "Steal" action.
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
494 pass
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
495 elif not obj.lockable or not obj.lockable.closed:
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
496 actions.append(["Examine contents", "Examine Contents",
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
497 player.fifeagent.behaviour.approach,
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
498 [obj_pos.x, obj_pos.y],
140e5e93f026 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 134
diff changeset
499 ExamineContentsAction(self, obj)])
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
500 if obj.containable:
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
501 actions.append(["Pick Up", "Pick Up",
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
502 player.fifeagent.behaviour.approach,
84
1e7465a785c4 Removed the pos value from the fifeagent component. getItemActions of Gamescenecontroller gets the position by calling a method of the behaviour.
KarstenBock@gmx.net
parents: 80
diff changeset
503 [obj_pos.x, obj_pos.y],
78
c25c734bd2a7 Modifications to make talking with npcs possible again. Special actions won't work yet though.
KarstenBock@gmx.net
parents: 69
diff changeset
504 PickUpAction(self, obj)])
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
505
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
506 return actions
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
507
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
508 def saveGame(self, *args, **kwargs):
131
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
509 """Saves the game state, delegates call to gamemodel.GameModel
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
510 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
511 self.model.pause(False)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
512 self.pause(False)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
513 self.view.hud.enabled = True
131
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
514 self.model.updateObjectDB(self)
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
515 self.model.save(*args, **kwargs)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
516
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
517 def loadGame(self, *args, **kwargs):
131
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
518 """Loads the game state, delegates call to gamemodel.GameModel
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
519 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
520 # Remove all currently loaded maps so we can start fresh
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
521 self.model.pause(False)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
522 self.pause(False)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
523 self.view.hud.enabled = True
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
524 self.model.deleteMaps()
131
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
525 for entity in self.entities.copy():
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
526 entity.delete()
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
527 self.view.hud.inventory = None
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
528
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
529 self.model.load(*args, **kwargs)
131
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
530 # Load the current map
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
531 if self.model.game_state.current_map_name:
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
532 self.model.loadMap(self.model.game_state.current_map_name)
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
533 self.model.placeAgents(self)
0ffebdca7ba3 Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 130
diff changeset
534 self.model.placePC(self)
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
535 self.view.hud.initializeInventory()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
536
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
537 def quitGame(self):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
538 """Quits the game
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
539 @return: None"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
540 self.application.listener.quitGame()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
541
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
542 def pause(self, paused):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
543 """Pauses the controller"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
544 super(GameSceneController, self).pause(paused)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
545 self.paused = paused
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
546 if paused:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
547 self.scroll_timer.stop()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
548 self.resetMouseCursor()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
549
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
550 def onCommand(self, command):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
551 if(command.getCommandType() == fife.CMD_MOUSE_FOCUS_GAINED):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
552 self.has_mouse_focus = True
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
553 elif(command.getCommandType() == fife.CMD_MOUSE_FOCUS_LOST):
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
554 self.has_mouse_focus = False
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
555
30
94cb5843dcbb Modifications to use the grease manager and modes
KarstenBock@gmx.net
parents: 25
diff changeset
556 def pump(self, dt):
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
557 """Routine called during each frame. Our main loop is in ./run.py"""
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
558 # uncomment to instrument
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
559 # t0 = time.time()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
560 if self.paused:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
561 return
30
94cb5843dcbb Modifications to use the grease manager and modes
KarstenBock@gmx.net
parents: 25
diff changeset
562 ControllerBase.pump(self, dt)
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
563 self.updateMouse()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
564 if self.model.active_map:
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
565 self.view.highlightFrontObject(self.last_mousecoords)
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
566 self.view.refreshTopLayerTransparencies()
25
aa3d837024a3 Scrolling by keyboard is now possible.
DomtronVox
parents: 12
diff changeset
567 self.handleScrolling()
0
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
568 self.handleCommands()
1fd2201f5c36 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
569 # print "%05f" % (time.time()-t0,)