# HG changeset patch
# User prock@33b003aa-7bff-0310-803a-e67f0ece8222
# Date 1274977747 0
# Node ID b6bd314df28aa9efcf12768418d39103126cdd66
# Parent 14f777be6b948c19615aa12d1af1e707694e8426
Added a quest dialog.
Added QuestGiver class.
Moved level specific settings to another file.
Added BaseItem class.
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/gui/quest.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/rpg/gui/quest.xml Thu May 27 16:29:07 2010 +0000
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/maps/town_objects.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/rpg/maps/town_objects.xml Thu May 27 16:29:07 2010 +0000
@@ -0,0 +1,7 @@
+
+
+
+ Quiller
+ QUESTGIVER ; warrior ; 1.0 ; 1.0
+
+
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/scripts/actors/baseactor.py
--- a/demos/rpg/scripts/actors/baseactor.py Thu May 27 04:36:09 2010 +0000
+++ b/demos/rpg/scripts/actors/baseactor.py Thu May 27 16:29:07 2010 +0000
@@ -29,12 +29,14 @@
from fife import fife
from fife.extensions.loaders import loadMapFile
-from scripts.objects.baseobject import ObjectActionListener, BaseGameObject
+from scripts.objects.baseobject import ObjectActionListener, BaseGameObject, GameObjectTypes
Actions = {'NONE':0,
'PICKUP':1,
'TALK':2,
- 'HIT':3}
+ 'HIT':3,
+ 'OPEN':4,
+ 'ENTER':5}
class BaseAction(object):
def __init__(self):
@@ -50,7 +52,8 @@
self._dest = destobj
def execute(self):
- print "talking"
+ print "talking to: " + self._dest.instance.getId()
+ self._source.showQuestDialog()
ActorStates = {'STAND':0,
'WALK':1,
@@ -76,6 +79,8 @@
self._nextaction = None
self.stand()
+
+ self._type = GameObjectTypes["NPC"]
def stand(self):
self._state = ActorStates["STAND"]
@@ -104,3 +109,13 @@
state = property(_getState, _setState)
nextaction = property(_getNextAction, _setNextAction)
+
+class QuestGiver(Actor):
+ def __init__(self, gamecontroller, instancename, instanceid=None, createInstance=False):
+ super(QuestGiver, self).__init__(gamecontroller, instancename, instanceid, createInstance)
+
+ self._type = GameObjectTypes["QUESTGIVER"]
+ self._quests = []
+
+ def addQuest(self, quest):
+ self._quests.append(quest)
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/scripts/actors/player.py
--- a/demos/rpg/scripts/actors/player.py Thu May 27 04:36:09 2010 +0000
+++ b/demos/rpg/scripts/actors/player.py Thu May 27 16:29:07 2010 +0000
@@ -28,7 +28,7 @@
from fife import fife
from scripts.actors.baseactor import Actor, ActorStates
-from scripts.objects.baseobject import ObjectActionListener, BaseGameObject
+from scripts.objects.baseobject import ObjectActionListener, BaseGameObject, GameObjectTypes
class PlayerActionListener(ObjectActionListener):
def __init__(self, gamecontroller, obj):
@@ -46,3 +46,8 @@
self._playermodelname = playermodelname
self._playeractionlistener = PlayerActionListener(self._gamecontroller, self)
+
+ self._type = GameObjectTypes["PLAYER"]
+
+ def showQuestDialog(self):
+ self._gamecontroller.guicontroller.showQuestDialog()
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/scripts/gamecontroller.py
--- a/demos/rpg/scripts/gamecontroller.py Thu May 27 04:36:09 2010 +0000
+++ b/demos/rpg/scripts/gamecontroller.py Thu May 27 16:29:07 2010 +0000
@@ -34,6 +34,7 @@
from scripts.scene import Scene
from scripts.guicontroller import GUIController
from scripts.actors.baseactor import TalkAction
+from scripts.objects.baseobject import GameObjectTypes
class KeyState(object):
@@ -88,11 +89,15 @@
self._gamecontroller.scene.player.walk( self._gamecontroller.scene.getLocationAt(clickpoint) )
instances = self._gamecontroller.scene.getInstancesAt(clickpoint)
if instances:
- self._gamecontroller.scene.player.nextaction = TalkAction(self, self)
+ obj = self._gamecontroller.scene.objectlist[instances[0].getId()]
+ print obj.type
+ if obj.type == GameObjectTypes["QUESTGIVER"]:
+ action = TalkAction(self._gamecontroller.scene.player, obj)
+ self._gamecontroller.scene.player.nextaction = action
if (event.getButton() == fife.MouseEvent.RIGHT):
instances = self._gamecontroller.scene.getInstancesAt(clickpoint)
- print "selected instances on actor layer: ", [i.getObject().getId() for i in instances]
+ print "selected instances on actor layer: ", [i.getId() for i in instances]
if instances:
#do something
pass
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/scripts/guicontroller.py
--- a/demos/rpg/scripts/guicontroller.py Thu May 27 04:36:09 2010 +0000
+++ b/demos/rpg/scripts/guicontroller.py Thu May 27 16:29:07 2010 +0000
@@ -30,11 +30,22 @@
from fife.extensions import pychan
from fife.extensions.pychan import widgets
-class MainMenu(object):
+class Window(object):
def __init__(self, gamecontroller):
self._guicontroller = gamecontroller.guicontroller
self._gamecontroller = gamecontroller
self._settings = gamecontroller.settings
+
+ self._widget = None
+
+ def _getWidget(self):
+ return self._widget
+
+ widget = property(_getWidget)
+
+class MainMenu(Window):
+ def __init__(self, gamecontroller):
+ super(MainMenu, self).__init__(gamecontroller)
self._widget = pychan.loadXML('gui/mainmenu.xml')
self._newgame = self._widget.findChild(name="new_game")
@@ -51,15 +62,10 @@
}
self._widget.mapEvents(eventMap)
-
- def _getWidget(self):
- return self._widget
-
- widget = property(_getWidget)
-class Credits(object):
+class Credits(Window):
def __init__(self, guicontroller):
- self._guicontroller = guicontroller
+ super(Credits, self).__init__(gamecontroller)
self._widget = pychan.loadXML('gui/credits.xml')
eventMap = {
@@ -68,11 +74,24 @@
self._widget.mapEvents(eventMap)
- def _getWidget(self):
- return self._widget
+class QuestDialog(Window):
+ def __init__(self, guicontroller):
+ super(QuestDialog, self).__init__(guicontroller)
+ self._widget = pychan.loadXML('gui/quest.xml')
- widget = property(_getWidget)
+ self._questtext = self._widget.findChild(name="questtext")
+
+ eventMap = {
+ 'accept': self.questAccepted,
+ 'decline': self._widget.hide,
+ }
+ self._widget.mapEvents(eventMap)
+
+ def questAccepted(self):
+ print "quest has been accepted"
+ self._widget.hide()
+
class GUIController(object):
def __init__(self, gamecontroller):
self._gamecontroller = gamecontroller
@@ -106,3 +125,7 @@
if self._credits:
self._credits.widget.hide()
self._credits = None
+
+ def showQuestDialog(self):
+ questdlg = QuestDialog(self._gamecontroller)
+ questdlg.widget.show()
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/scripts/objects/baseobject.py
--- a/demos/rpg/scripts/objects/baseobject.py Thu May 27 04:36:09 2010 +0000
+++ b/demos/rpg/scripts/objects/baseobject.py Thu May 27 16:29:07 2010 +0000
@@ -29,6 +29,15 @@
from fife import fife
from fife.extensions.loaders import loadMapFile
+GameObjectTypes = {
+ "DEFAULT": 0,
+ "ITEM":1,
+ "QUESTGIVER":2,
+ "PLAYER":3,
+ "NPC":4,
+ "ENEMY":5
+ }
+
class ObjectActionListener(fife.InstanceActionListener):
def __init__(self, gamecontroller, obj):
fife.InstanceActionListener.__init__(self)
@@ -68,6 +77,8 @@
self._instance = self._gamecontroller.scene.actorlayer.getInstance(self._id)
self._instance.thisown = 0
+ self._type = GameObjectTypes["DEFAULT"]
+
def destroy(self):
"""
Deletes the FIFE instance from the actor layer on the map.
@@ -105,6 +116,10 @@
def _getInstance(self):
return self._instance
-
+
+ def _getType(self):
+ return self._type
+
location = property(_getLocation, _setLocation)
instance = property(_getInstance)
+ type = property(_getType)
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/scripts/objects/items.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/rpg/scripts/objects/items.py Thu May 27 16:29:07 2010 +0000
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+
+# -*- coding: utf-8 -*-
+
+# ####################################################################
+# Copyright (C) 2005-2010 by the FIFE team
+# http://www.fifengine.net
+# This file is part of FIFE.
+#
+# FIFE is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+# ####################################################################
+# This is the rio de hola client for FIFE.
+
+import sys, os, re, math, random, shutil
+
+from fife import fife
+
+from scripts.objects.baseobject import BaseGameObject, GameObjectTypes
+
+
+class BaseItem(BaseGameObject):
+ def __init__(self, gamecontroller, itemname, itemtype="unknown"):
+ super(Item, self).__init__(gamecontroller, itemtype, itemname, True)
+
+ self._type = GameObjectTypes["ITEM"]
+
+ def onPickUp(self):
+ #remove item from the map
+ self.destroy()
+
+ def onDrop(self, dropx, dropy):
+ #recreate object
+ self._createFIFEInstance(self)
+ self.setMapPosition(dropx, dropy)
+
+ def _getItemType(self):
+ return self._name
+
+ def _getItemName(self):
+ return self._id
+
+ itemtype = property(_getItemType)
+ itemname = property(_getItemName)
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/scripts/scene.py
--- a/demos/rpg/scripts/scene.py Thu May 27 04:36:09 2010 +0000
+++ b/demos/rpg/scripts/scene.py Thu May 27 16:29:07 2010 +0000
@@ -28,9 +28,12 @@
from fife import fife
from fife.extensions.loaders import loadMapFile
+from fife.extensions.fife_settings import Setting
from scripts.actors.baseactor import Actor
+from scripts.actors.baseactor import QuestGiver
from scripts.actors.player import Player
+from scripts.objects.baseobject import GameObjectTypes
class Scene(object):
def __init__(self, gamecontroller):
@@ -43,7 +46,7 @@
self._actorlayer = None
self._player = None
- self._npclist = []
+ self._objectlist = {}
def createScene(self, mapfilename):
if not self._map:
@@ -61,11 +64,18 @@
self._player = Player(self._gamecontroller, "warrior")
mapname = os.path.splitext(os.path.basename(mapfilename))
- for npc in self._gamecontroller.settings.get(mapname[0], "npclist", []):
- (modelname, posx, posy) = self._gamecontroller.settings.get(mapname[0], npc, ["warrior", "0", "0"])
- actor = Actor(self._gamecontroller, modelname, npc, True)
+ objectfile = "maps/" + mapname[0] + "_objects.xml"
+ objectsettings = Setting(app_name="",settings_file=objectfile)
+
+ for npc in objectsettings.get(mapname[0], "npclist", []):
+ (objtype, modelname, posx, posy) = objectsettings.get(mapname[0], npc, ["NPC", "warrior", "0", "0"])
+ if objtype == "QUESTGIVER":
+ actor = QuestGiver(self._gamecontroller, modelname, npc, True)
+ elif objtype == "NPC":
+ actor = Actor(self._gamecontroller, modelname, npc, True)
+
actor.setMapPosition(float(posx), float(posy))
- self._npclist.append(actor)
+ self._objectlist[actor.instance.getId()] = actor
def destroyScene(self):
@@ -73,8 +83,8 @@
self._player.destroy()
- for npc in self._npclist:
- npc.destroy()
+ for obj in self._objectlist.values():
+ obj.destroy()
if self._map:
self._gamecontroller.engine.getModel().deleteMap(self._map)
@@ -83,7 +93,7 @@
self._actorlayer = None
self._player = None
- self._npclist = []
+ self._objectlist.clear()
def getInstancesAt(self, clickpoint):
"""
@@ -114,7 +124,11 @@
def _getPlayer(self):
return self._player
+ def _getObjectList(self):
+ return self._objectlist
+
actorlayer = property(_getActorLayer)
cameras = property(_getCameras)
player = property(_getPlayer)
+ objectlist = property(_getObjectList)
diff -r 14f777be6b94 -r b6bd314df28a demos/rpg/settings-dist.xml
--- a/demos/rpg/settings-dist.xml Thu May 27 04:36:09 2010 +0000
+++ b/demos/rpg/settings-dist.xml Thu May 27 16:29:07 2010 +0000
@@ -33,9 +33,4 @@
2.5
-
-
- Quiller
- warrior ; 0 ; 0
-