User Tools

Site Tools


z:objekteditor

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:

  • Eine vollständige Abstraktion zwischen Spiellogik und der grafischen Darstellung.
  • Objekte können erstellt bzw. verändert werden ohne eine 3D-Software zu bedienen.

Daraus ergeben sich einige weitere Bequemlichkeiten. Zum Beispiel ist es möglich meshes zu verwenden für die keine Quelldateien vorliegen. Lästiges Exportiervorgänge die man bei einer Festlegung von spielrelevanten Parametern in 3D-Software hätte entfallen. Genaues Einhalten von Namenskonventionen wird überflüssig.

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
  • Effect

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<meshAnimation, speed> - Abspielgeschwindigkeit für die Animationszustände
  • mapping<AnimState, ParticleEffect> particleMapping - Welcher Partikeleffekt wird bei welchem AnimationState abgespielt?
  • Vector3 position
  • Quaternion orientation
  • Vector3 scale
  • flag castsShadow
  • flag receivesShadow
  • texture colourAlphaMap
  • texture normalSpecularMap
  • texture tintMap
  • texture environmentMap
z/objekteditor.1224510561.txt.gz · Last modified: 2015/08/23 14:03 (external edit)