This is an old revision of the document!
Objekteditor
Der Editor soll es erlauben Spielobjekte aus meshes die in einem für Ogre3D lesbaren Format vorliegen zusammenzusetzen. Hintergedanke dabei sind 2 Punkte:
Monolithisches Spielobjekt
Diese abstrakte Darstellung beschreibt einen Objekttyp, der alle für das Spiel nötigen Objekte abbilden könnte - aus der Sicht des Objekteditors. D.h. Parameter die für die Konfigurierbarkeit uninteressant sind werden nicht aufgeführt.
Konfiguration und Node-Tree
Eine Definition besteht aus zwei Teilen. Die Konfiguration enthält alle für das Objekt globalen Parameter. Im Node-Tree wird die Hierarchie und räumliche Anordnung der einzelnen Teile des Objekts beschrieben. Beim Erstellen eines Objekts im Editor würde man dann zunächst die Konfiguration anfertigen. Daraus leitet sich ab welche Nodes man im Node-Tree platzieren darf bzw. muss.
Konfiguration
Datentyp GameObject
Type type
Role role - Konkrete Rolle im Spiel für das Objekt.
typ? boundingShape
list<AnimState> animStates
flag vulnerable
flag destructible
list<GameObject*> wreckages - Sofern das Objekt zerstörbar ist kann eine Liste möglicher Wracks angegeben werden.
int numTurrets - Anzahl installierbarer Geschütze, nicht die der Kanonen bei Fahrzeugen. Ein Wert >0 hier würde beispielsweise Nodes für die Geschützpositionen “freischalten”.
list <(Turret, int slotID)> turretMapping - Liste legaler Paare von Geschütztyp und Sot.
flag hasEntrance
flag hasDriver
list<Robot> allowedDrivers
mapping<Robot, Driver> driverMapping - Welches Fahrerobjekt bei welchem Roboter wählen?
flag driverLooksOut
mapping<Driver, int lookOut> lookOutProbability - Für jeden Fahrer ein Wert der bestimmt wie häufig er aus dem Fahrzeug schaut.
int numPassengers
list<Robot> allowedPassengers
mapping<Robot, Passenger> passengerMapping
int numGuns
list <(Gun, int slotID, Robot)> gunMapping
flag movable
real moveSpeed
real turnSpeed
real acceleration
int numWheels
int numTankTracks
int hitPoints
mapping<damageType, real multiplier> armorMapping
flag repairable
real repairMultiplier
real repairDistance
Datentyp Gun
angle maxTurnHorizontal
angle maxTurnVertical
flag exitPoint - Ist der Austrittspunkt der Kanone mit ihrer Position identisch?
real shootDelay
real shotDuration
enum projectileType
GameObject* hitEffect
enum damageType
real damage
real range
enum controlledBy - Ist der Fahrer, ein bestimmter Passagier oder niemand notwendig um die Kanone zu bedienen?
flag visibleIfEmpty - Ist die Kanone sichtbar, wenn der zugehörige Roboter nicht da ist?
flag repairDevice
real repairSpeed
Enumeration Type
Der Typ könnte schon viele Parameter ausschließen für die meisten Objekte, und vorgeben welche AnimationStates existieren. Mögliche Werte:
Building
Vehicle
Robot
Driver
Passenger
Decal
Wreckage
Node-Tree
Je nach Konfiguration ergibt sich eine Menge von notwendigen Nodes. Zusätzlich können Nodes ohne Funktion platziert werden (bei Objekten die aus mehreren Teilen mit unterschiedlichem Material bestehen z.B.).
Node
NodeRole role - welche der möglichen bzw. erlaubten Funktionen übernimmt die Node?
Mesh mesh
mapping<AnimState, material> materialMapping
mapping<AnimState, (list<(meshAnimation, probability)>, list<(meshAnimation, probability)>, list<(meshAnimation, probability)» animMapping - Welche Mesh-Animationen werden mit welcher Wahrscheinlichkeit für die 3 Teile (Start, Mitte, Ende) eines AnimationStates gewählt?
mapping<AnimState, ParticleEffect> particleMapping - Welcher Partikeleffekt wird bei welchem AnimationState abgespielt?
Vector3 position
Quaternion orientation
Vector3 scale