annotate gamescenecontroller.py @ 120:adbcdb900fa9

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