Mercurial > fife-parpg
diff demos/rpg/scripts/scene.py @ 524:6037f79b0dcf
Multiple quests now work.
Added the item layer.
Made movement more like diablo by allowing you to hold and drag the left mouse button.
All objects are now loaded from a separate "allobjects" file. Specific item attributes are loaded from the map objects file (like position). This allows for the possibility of multiple instances using the same FIFE model.
author | prock@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Thu, 27 May 2010 21:11:37 +0000 |
parents | d01eb65b2726 |
children | 19db5a8619a4 |
line wrap: on
line diff
--- a/demos/rpg/scripts/scene.py Thu May 27 18:29:20 2010 +0000 +++ b/demos/rpg/scripts/scene.py Thu May 27 21:11:37 2010 +0000 @@ -34,6 +34,7 @@ from scripts.actors.baseactor import QuestGiver, Quest from scripts.actors.player import Player from scripts.objects.baseobject import GameObjectTypes +from scripts.objects.items import BaseItem class Scene(object): def __init__(self, gamecontroller): @@ -47,7 +48,7 @@ self._player = None self._objectlist = {} - + def createScene(self, mapfilename): if not self._map: self._map = loadMapFile(mapfilename, self._gamecontroller.engine) @@ -60,27 +61,38 @@ self._cameras[self._maincameraname].setZoom(self._gamecontroller.settings.get("RPG", "DefaultZoom", 2.0)) self._actorlayer = self._map.getLayer(self._gamecontroller.settings.get("RPG", "ActorLayer", "actor_layer")) + self._itemlayer = self._map.getLayer(self._gamecontroller.settings.get("RPG", "ItemLayer", "item_layer")) self._player = Player(self._gamecontroller, "warrior") mapname = os.path.splitext(os.path.basename(mapfilename)) objectfile = "maps/" + mapname[0] + "_objects.xml" + itemfile = "maps/allobjects.xml" objectsettings = Setting(app_name="",settings_file=objectfile) + itemsettings = Setting(app_name="", settings_file=itemfile) - 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) - questcount = objectsettings.get(npc, "questcount", 0) + for item in objectsettings.get("items", "itemlist", []): + itemdict = objectsettings.get("items", item, {}) + modeldict = itemsettings.get("models", itemdict["typename"]) + + newitem = BaseItem(self._gamecontroller, item, modeldict["model"]) + + for npc in objectsettings.get("npcs", "npclist", []): + objdict = objectsettings.get("npcs", npc, {}) + modeldict = itemsettings.get("models", objdict["typename"]) + + if modeldict["type"] == "QUESTGIVER": + actor = QuestGiver(self._gamecontroller, modeldict["model"], npc, True) + questcount = itemsettings.get(npc, "questcount", 0) for x in range(1,questcount+1): quest = "quest" + str(x) - (qname, qtext) = objectsettings.get(npc, quest, []) + (qname, qtext) = itemsettings.get(npc, quest, []) actor.addQuest(Quest(actor, qname, qtext)) - elif objtype == "NPC": - actor = Actor(self._gamecontroller, modelname, npc, True) + elif modeldict["type"] == "NPC": + actor = Actor(self._gamecontroller, modeldict["model"], npc, True) - actor.setMapPosition(float(posx), float(posy)) + actor.setMapPosition(float(objdict["posx"]), float(objdict["posy"])) self._objectlist[actor.instance.getId()] = actor @@ -123,6 +135,9 @@ def _getActorLayer(self): return self._actorlayer + + def _getItemLayer(self): + return self._itemlayer def _getCameras(self): return self._cameras @@ -137,6 +152,7 @@ return self._map actorlayer = property(_getActorLayer) + itemlayer = property(_getItemLayer) cameras = property(_getCameras) player = property(_getPlayer) objectlist = property(_getObjectList)