MapKonzept
Aus OOPWiki
Inhaltsverzeichnis[Verbergen] |
Map Allgemein
Die Maps werden mit Hilfe eines XML-Files spezifiziert in welchem der Pfad zu einem Collada File eingetragen ist, in welchem die Koordinaten und die Profiles der zu ladenden Objekte spezifiziert sind. Außerdem ist mindestens ein Player Profile Tag sowie ein oder mehrere NPC Profile Tag/s erforderlich. (genauere Beschreibung der Tags -> siehe Punkt "*.map").
Ladevorgang einer Map
Vorraussetzung:
- MapDB u. ResDB sind bereits gefetcht
- aus der ProfilDB wurden Objekte erstellt (availableProfiles)
- es ist bereits eine Map geladen
1. über ResMan->load(MAPNAME) wird der ladevorgang der neuen Map initialisiert ResMan->load führt nun alle relevanten vorgänge durch ... (dannach ist die map vollständig geladen)
3. ResMan->load: markiert alle availableRessources (die nicht "NOT_LOADED" sind) sowie alle loadedGeometry und loadedTex als "UNLOAD"
2. ResMan->load: sucht die map heraus und setzt sie intern als activeMap
3. ResMan->load: ruft die map auf und weist sie an ihre objekte zu laden ( activeMap->load(&availableRessources) )
4. activeMap->load: öffnet map xml file
5. activeMap->load: liest das mapcolladafile und die player- & npc- profile tags die im map file eingetragen sind aus das gelesene profil wird in availableProfiles gesucht und wenn vorhanden in die interne activeObjects liste kopiert(!)
6. activeMap->load: availableRessources mit modelname der mapobjects vergleichen und ressources die weiterhin gebraucht werden als LOADED markieren sowie deren pointer den ressources in den mapobjects zuweisen. ist eine ressource noch nicht geladen (-> "NOT_LOADED") pointer dieser ressource ebenfalls an das entsprechende map object vergeben und als LOAD markieren
6. activeMap->load: schließt map xml file
7. activeMap->load: alle mapobjects und deren ressources durchiterieren deren modellname mit der liste der loadedgeometry vergleichen, falls es noch keine geometry mit diesem namen in der loadedGeometry liste gibt, neue geometry erstellen und dieser ressource zuweisen sowie in die liste der loaded geometry's eintragen und mit "LOAD" taggen. gibt es das geometry shcon in der liste, einfach den pointer der akutellen mapobject ressource geben (nicht vergessen die geometry als LOADED zu markieren)
8. activeMap->load: liste der loadedgeometrys durchiterieren und alle mit der markierung "LOAD" laden. dabei kommt der texpath ins spiel diesen mit der liste der loadedTex vergleichen und wenn er noch nicht existiert neue textur erstellen, diese mit LOAD markieren dabei nicht vergessen den tex pointer in die liste der loadedTex einzuhaengen andernfalls die textur als "LOADED" markieren und den pointer der ressource zuweisen. alle geometrys die den status "UNLOAD" haben löschen.
9. activeMap->load: als letztes die loadedTex liste durchiterieren und alle mit "LOAD" markierten texturen laden. alle mit unload markierten texturen löschen.
10. alles sollte geladen sein
*.map
tags
- map: beginn der map daten
mögliche children von map:
- mapfile: pad zum collada mapfile
- playerprofile: maximal eines
- npcprofiles: können mehrere angegeben werden
example
<?xml version="1.0" ?>
<map>
<mapfile>../maps/abgabe3.DAE</mapfile> <playerprofile>pPlayer</player> <npcprofile>pNPC1</npcprofile> <npcprofile>pNPC1</npcprofile> <npcprofile>pNPC1</npcprofile>
</map>
collada map file
aus dem collada map file werden lediglich die positionen sowie die names der objekte übernommen der name steht dabei für ein entsprechendes profil.
bsp: kleine box an position 10, 10, 10, name = "sun1" -> beim laden wird nach dem profil mit dem namen sun1 gesucht. von diesem objekt (profil) wird eine kopie erstellt und diese dann nach 10, 10, 10 verschoben
profiles.xml
ein profile wird eingeleitet mit dem tag <profile>
must attribute von profile:
- <name> eindeutiger profilname
- <group> gruppenzugehörigkeit (planet, moon, sun, wormhole, bonus, bonus_field, asteroid, misc, player, npc, weapon)
- <res> name der ressource die zu diesem profil gehoert
weitere mögliche attribute von profile (fuer alle gruppen):
- <grav>
- <damage>
- <dullness>
- <maxhp>
- <hp>
- <maxspeed>
weitere mögliche attribute wenn gruppe player oder npc ist:
- <antigrav>
- <steering>
- <hpreg>
- <shield>
- <sunres>
- <damagefact>
res.xml
alle verfügbaren ressourcen werden hier eingetragen zB: Planet Models, Sun Models, Player Models, NPC Models, Asteroiden, others, etc. ..
einleitender tag fuer eine ressource: <res>
must children von res-tags:
- modelname: beliebig wählbarer eindeutiger name
- path: pfad zum collada file (aus dem die geometrie und texturdaten geladen werden)