====== Renderable ====== Renderable-Objekte stellen die Schnittstelle dar über die [[Entity]]-Objekte ihre grafische Repräsentation manipulieren. ===== Grundlegende Überlegung ===== * Der Aufbau aus SceneNodes usw. ist nur dem Renderable bekannt, die Entity kann davon nichts erfahren. * Animationenszustände sind intern komplexer aufgebaut als über das Interface ansprechbar. Nach außen verdeckt sind (optionale) Animationen die z.B. Übergänge zwischen verschiedenen Zuständen flüssig erscheinen lassen. ===== Interface-Entwurf ===== * **attachRenderable(vector3 position, renderable renderable)**, **detachRenderable(renderable renderable)** * **setHealthState(string stateName)** - Ändert Material- und Texturparameter wie in der Renderable-Definition spezifiziert. * **setOwner(int playerNumber)** - Ändert intern Parameter um die Spielerfarbe zu ändern. * **setGateOpen(bool isOpen, float time)** - Falls nicht schon im Zustand, öffne/schließe alle Tore/Luken in der spezifizierten Zeit. * **rotateCannon(int cannonId, float vertAngle, float horzAngle)** - Rotiert den der Kannonen-Id zugeordneten Bone bzw. die SceneNode. * **hasHealthState(string stateName), hasCannon(int cannonId), hasAnim(string animName)** - Abfragen um die Fähigkeiten des Renderables zu überprüfen.. * **setAnimIdle()** - Spielt zufällig idle-Animationen. * **setAnimShoot(time shotSpeed, time shootDelay)** - Spielt zufällig abwechselnd Schuss-Animationen und Schusspausen-Animationen. * **setAnimMove(float speed)** - Spielt Bewegungsanimation ab und setzt evtl. Shader-Parameter. * **setAnimCustom(string animName, time playSpeed)** - Spielt die spezifizierte Animation einmal ab und wechselt dann in den vorherigen Zustand. * **setCustomAnimLoop(string animName, time playSpeed)** - Spielt die spezifizierte Animation in einer Schleife.