فهرست منبع

Merge branch 'GameObjectExamples' of https://github.com/Areloch/Torque3D into development

Areloch 6 سال پیش
والد
کامیت
bac0b2e8df
20فایلهای تغییر یافته به همراه709 افزوده شده و 0 حذف شده
  1. 42 0
      Engine/source/T3D/gameObjects/aiPlayerObject.cpp
  2. 20 0
      Engine/source/T3D/gameObjects/aiPlayerObject.h
  3. 165 0
      Engine/source/T3D/gameObjects/playerObject.cpp
  4. 40 0
      Engine/source/T3D/gameObjects/playerObject.h
  5. 38 0
      Engine/source/T3D/gameObjects/soundEmitterObject.cpp
  6. 20 0
      Engine/source/T3D/gameObjects/soundEmitterObject.h
  7. 68 0
      Engine/source/T3D/gameObjects/staticShapeObject.cpp
  8. 28 0
      Engine/source/T3D/gameObjects/staticShapeObject.h
  9. 8 0
      Templates/BaseGame/game/core/gameObjects/Core_GameObjects.cs
  10. 19 0
      Templates/BaseGame/game/core/gameObjects/Core_GameObjects.module
  11. 8 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/AIPlayerObject.asset.taml
  12. 42 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/AIPlayerObject.cs
  13. 12 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/AIPlayerObject.taml
  14. 8 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/PlayerObject.asset.taml
  15. 42 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/PlayerObject.cs
  16. 117 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/PlayerObject.taml
  17. 7 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/soundEmitterObject.asset.taml
  18. 9 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/soundEmitterObject.taml
  19. 7 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/staticShapeObject.asset.taml
  20. 9 0
      Templates/BaseGame/game/core/gameObjects/gameObjects/staticShapeObject.taml

+ 42 - 0
Engine/source/T3D/gameObjects/aiPlayerObject.cpp

@@ -0,0 +1,42 @@
+#include "aiPlayerObject.h"
+
+IMPLEMENT_CO_NETOBJECT_V1(AIPlayerObject);
+
+AIPlayerObject::AIPlayerObject()
+   : mAIControllerComponent(nullptr)
+{
+
+}
+AIPlayerObject::~AIPlayerObject()
+{
+
+}
+
+bool AIPlayerObject::onAdd()
+{
+   if (!Parent::onAdd())
+      return false;
+
+   //If we don't delinate from the template, just spawn as apropos here
+   if (!mDirtyGameObject)
+   {
+      //AI Controller
+      mAIControllerComponent = new AIControllerComponent();
+      if (!mAIControllerComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add mAIControllerComponent!");
+         return false;
+      }
+
+      mAIControllerComponent->setInternalName("aiControllerComponent");
+
+      addComponent(mAIControllerComponent);
+   }
+
+   return true;
+}
+
+void AIPlayerObject::onRemove()
+{
+   Parent::onRemove();
+}

+ 20 - 0
Engine/source/T3D/gameObjects/aiPlayerObject.h

@@ -0,0 +1,20 @@
+#pragma once
+#include "playerObject.h"
+
+#include "T3D/components/ai/aiControllerComponent.h"
+
+class AIPlayerObject : public PlayerObject
+{
+   typedef PlayerObject Parent;
+
+   AIControllerComponent* mAIControllerComponent;
+
+public:
+   AIPlayerObject();
+   ~AIPlayerObject();
+
+   virtual bool onAdd();
+   virtual void onRemove();
+
+   DECLARE_CONOBJECT(AIPlayerObject);
+};

+ 165 - 0
Engine/source/T3D/gameObjects/playerObject.cpp

@@ -0,0 +1,165 @@
+#include "playerObject.h"
+
+IMPLEMENT_CO_NETOBJECT_V1(PlayerObject);
+
+PlayerObject::PlayerObject()
+   :  mMeshComponent(nullptr),
+      mCollisionComponent(nullptr),
+      mAnimationComponent(nullptr),
+      mPhysicsComponent(nullptr)
+{
+
+}
+PlayerObject::~PlayerObject()
+{
+
+}
+
+bool PlayerObject::onAdd()
+{
+   if (!Parent::onAdd())
+      return false;
+
+   //If we don't delinate from the template, just spawn as apropos here
+   if (!mDirtyGameObject)
+   {
+      //Mesh
+      mMeshComponent = new MeshComponent();
+      if (!mMeshComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add MeshComponent!");
+         return false;
+      }
+
+      mMeshComponent->setInternalName("meshComponent");
+
+      addComponent(mMeshComponent);
+
+      //Collision
+      mCollisionComponent = new ShapeCollisionComponent();
+      if (!mCollisionComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add ShapeCollisionComponent!");
+         return false;
+      }
+
+      mCollisionComponent->setInternalName("collisionComponent");
+
+      addComponent(mCollisionComponent);
+
+      //Animation
+      mAnimationComponent = new ActionAnimationComponent();
+      if (!mAnimationComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add ActionAnimationComponent!");
+         return false;
+      }
+
+      mAnimationComponent->setInternalName("animationComponent");
+
+      addComponent(mAnimationComponent);
+
+      //Arm Animation
+      mArmAnimationComponent = new ArmAnimationComponent();
+      if (!mArmAnimationComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add ArmAnimationComponent!");
+         return false;
+      }
+
+      mArmAnimationComponent->setInternalName("armAnimationComponent");
+
+      addComponent(mArmAnimationComponent);
+
+      //Physics control
+      mPhysicsComponent = new PlayerControllerComponent();
+      if (!mPhysicsComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add PhysicsComponent!");
+         return false;
+      }
+
+      mPhysicsComponent->setInternalName("physicsComponent");
+
+      addComponent(mPhysicsComponent);
+
+      //State Machine
+      mStateMachineComponent = new StateMachineComponent();
+      if (!mStateMachineComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add StateMachineComponent!");
+         return false;
+      }
+
+      mStateMachineComponent->setInternalName("stateMachineComponent");
+
+      addComponent(mStateMachineComponent);
+
+      //Camera
+      mCameraComponent = new CameraComponent();
+      if (!mCameraComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add CameraComponent!");
+         return false;
+      }
+
+      mCameraComponent->setInternalName("cameraComponent");
+
+      addComponent(mCameraComponent);
+
+      //Camera Orbiter
+      mCameraOrbiterComponent = new CameraOrbiterComponent();
+      if (!mCameraOrbiterComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add CameraOrbiterComponent!");
+         return false;
+      }
+
+      mCameraOrbiterComponent->setInternalName("cameraOrbiterComponent");
+
+      addComponent(mCameraOrbiterComponent);
+
+      //Control Object
+      mControlObjectComponent = new ControlObjectComponent();
+      if (!mControlObjectComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add ControlObjectComponent!");
+         return false;
+      }
+
+      mControlObjectComponent->setInternalName("controlObjectComponent");
+
+      addComponent(mControlObjectComponent);
+
+      //Sound
+      mSoundComponent = new SoundComponent();
+      if (!mSoundComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add SoundComponent!");
+         return false;
+      }
+
+      mSoundComponent->setInternalName("soundComponent");
+
+      addComponent(mSoundComponent);
+
+      //Interaction
+      mInteractComponent = new InteractComponent();
+      if (!mInteractComponent->registerObject())
+      {
+         Con::errorf("PlayerObject::onAdd - unable to add InteractComponent!");
+         return false;
+      }
+
+      mInteractComponent->setInternalName("interactComponent");
+
+      addComponent(mInteractComponent);
+   }
+
+   return true;
+}
+
+void PlayerObject::onRemove()
+{
+   Parent::onRemove();
+}

+ 40 - 0
Engine/source/T3D/gameObjects/playerObject.h

@@ -0,0 +1,40 @@
+#pragma once
+
+#include "T3D/entity.h"
+#include "T3D/components/render/meshComponent.h"
+#include "T3D/components/collision/shapeCollisionComponent.h"
+#include "T3D/components/animation/actionAnimationComponent.h"
+#include "T3D/components/animation/armAnimationComponent.h"
+#include "T3D/components/physics/playerControllerComponent.h"
+#include "T3D/components/game/stateMachineComponent.h"
+#include "T3D/components/camera/cameraComponent.h"
+#include "T3D/components/camera/cameraOrbiterComponent.h"
+#include "T3D/components/game/controlObjectComponent.h"
+#include "T3D/components/audio/soundComponent.h"
+#include "T3D/components/game/interactComponent.h"
+
+class PlayerObject : public Entity
+{
+   typedef Entity Parent;
+
+   MeshComponent* mMeshComponent;
+   ShapeCollisionComponent* mCollisionComponent;
+   ActionAnimationComponent* mAnimationComponent;
+   ArmAnimationComponent* mArmAnimationComponent;
+   PlayerControllerComponent* mPhysicsComponent;
+   StateMachineComponent* mStateMachineComponent;
+   CameraComponent* mCameraComponent;
+   CameraOrbiterComponent* mCameraOrbiterComponent;
+   ControlObjectComponent* mControlObjectComponent;
+   SoundComponent* mSoundComponent;
+   InteractComponent* mInteractComponent;
+
+public:
+   PlayerObject();
+   ~PlayerObject();
+
+   virtual bool onAdd();
+   virtual void onRemove();
+
+   DECLARE_CONOBJECT(PlayerObject);
+};

+ 38 - 0
Engine/source/T3D/gameObjects/soundEmitterObject.cpp

@@ -0,0 +1,38 @@
+#include "SoundEmitterObject.h"
+
+IMPLEMENT_CO_NETOBJECT_V1(SoundEmitterObject);
+
+SoundEmitterObject::SoundEmitterObject()
+   :  mSoundComponent(nullptr)
+{
+
+}
+SoundEmitterObject::~SoundEmitterObject()
+{
+
+}
+
+bool SoundEmitterObject::onAdd()
+{
+   if (!Parent::onAdd())
+      return false;
+
+   //Sound
+   mSoundComponent = new SoundComponent();
+   if (!mSoundComponent->registerObject())
+   {
+      Con::errorf("SoundEmitterObject::onAdd - unable to add soundComponent!");
+      return false;
+   }
+
+   mSoundComponent->setInternalName("soundComponent");
+   
+   addComponent(mSoundComponent);
+
+   return true;
+}
+
+void SoundEmitterObject::onRemove()
+{
+   Parent::onRemove();
+}

+ 20 - 0
Engine/source/T3D/gameObjects/soundEmitterObject.h

@@ -0,0 +1,20 @@
+#pragma once
+
+#include "T3D/entity.h"
+#include "T3D/components/audio/soundComponent.h"
+
+class SoundEmitterObject : public Entity
+{
+   typedef Entity Parent;
+
+   SoundComponent* mSoundComponent;
+
+public:
+   SoundEmitterObject();
+   ~SoundEmitterObject();
+
+   virtual bool onAdd();
+   virtual void onRemove();
+
+   DECLARE_CONOBJECT(SoundEmitterObject);
+};

+ 68 - 0
Engine/source/T3D/gameObjects/staticShapeObject.cpp

@@ -0,0 +1,68 @@
+#include "staticShapeObject.h"
+
+IMPLEMENT_CO_NETOBJECT_V1(StaticShapeObject);
+
+StaticShapeObject::StaticShapeObject()
+   :  mMeshComponent(nullptr),
+      mCollisionComponent(nullptr),
+      mAnimationComponent(nullptr)
+{
+
+}
+StaticShapeObject::~StaticShapeObject()
+{
+
+}
+
+bool StaticShapeObject::onAdd()
+{
+   if (!Parent::onAdd())
+      return false;
+
+   //If we don't delinate from the template, just spawn as apropos here
+   if (!mDirtyGameObject)
+   {
+      //Mesh
+      mMeshComponent = new MeshComponent();
+      if (!mMeshComponent->registerObject())
+      {
+         Con::errorf("StaticShapeObject::onAdd - unable to add MeshComponent!");
+         return false;
+      }
+
+      mMeshComponent->setInternalName("meshComponent");
+
+      addComponent(mMeshComponent);
+
+      //Collision
+      mCollisionComponent = new ShapeCollisionComponent();
+      if (!mCollisionComponent->registerObject())
+      {
+         Con::errorf("StaticShapeObject::onAdd - unable to add ShapeCollisionComponent!");
+         return false;
+      }
+
+      mCollisionComponent->setInternalName("collisionComponent");
+
+      addComponent(mCollisionComponent);
+
+      //Animation
+      mAnimationComponent = new AnimationComponent();
+      if (!mAnimationComponent->registerObject())
+      {
+         Con::errorf("StaticShapeObject::onAdd - unable to add AnimationComponent!");
+         return false;
+      }
+
+      mAnimationComponent->setInternalName("animationComponent");
+
+      addComponent(mAnimationComponent);
+   }
+
+   return true;
+}
+
+void StaticShapeObject::onRemove()
+{
+   Parent::onRemove();
+}

+ 28 - 0
Engine/source/T3D/gameObjects/staticShapeObject.h

@@ -0,0 +1,28 @@
+#pragma once
+
+#include "T3D/entity.h"
+#include "T3D/components/render/meshComponent.h"
+#include "T3D/components/collision/shapeCollisionComponent.h"
+#include "T3D/components/animation/animationComponent.h"
+
+class StaticShapeObject : public Entity
+{
+   typedef Entity Parent;
+
+   MeshComponent* mMeshComponent;
+   ShapeCollisionComponent* mCollisionComponent;
+   AnimationComponent* mAnimationComponent;
+
+public:
+   StaticShapeObject();
+   ~StaticShapeObject();
+
+   virtual bool onAdd();
+   virtual void onRemove();
+
+   MeshComponent* getMeshComponent() { return mMeshComponent; }
+   ShapeCollisionComponent* getCollisionComponent() { return mCollisionComponent; }
+   AnimationComponent* getAnimationComponent() { return mAnimationComponent; }
+
+   DECLARE_CONOBJECT(StaticShapeObject);
+};

+ 8 - 0
Templates/BaseGame/game/core/gameObjects/Core_GameObjects.cs

@@ -0,0 +1,8 @@
+
+function Core_GameObjects::onCreate(%this)
+{
+}
+
+function Core_GameObjects::onDestroy(%this)
+{
+}

+ 19 - 0
Templates/BaseGame/game/core/gameObjects/Core_GameObjects.module

@@ -0,0 +1,19 @@
+<ModuleDefinition
+	ModuleId="Core_GameObjects"
+	VersionId="1"
+	Description="Module that implements the core engine-level setup for the game."
+	ScriptFile="Core_GameObjects.cs"
+	CreateFunction="onCreate"
+	DestroyFunction="onDestroy"
+	Group="Core">
+	<DeclaredAssets
+           canSave="true"
+           canSaveDynamicFields="true"
+           Extension="asset.taml"
+           Recurse="true" />
+	<AutoloadAssets
+	   canSave="true"
+	   canSaveDynamicFields="true"
+	   AssetType="GameObjectAsset"
+	   Recurse="true" />
+</ModuleDefinition>

+ 8 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/AIPlayerObject.asset.taml

@@ -0,0 +1,8 @@
+<GameObjectAsset
+    canSave="true"
+    canSaveDynamicFields="true"
+    AssetName="AIPlayerObject"
+    gameObjectName="AIPlayerObject"
+    scriptFilePath="core/gameObjects/gameObjects/AIPlayerObject.cs"
+    TAMLFilePath="core/gameObjects/gameObjects/AIPlayerObject.taml"
+    description="A basic AI Player Object example." />

+ 42 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/AIPlayerObject.cs

@@ -0,0 +1,42 @@
+function AIPlayerObject::onAdd(%this)
+{
+
+}
+
+function AIPlayerObject::onRemove(%this)
+{
+
+}
+
+function AIPlayerObject::moveVectorEvent(%this)
+{
+
+}
+
+function AIPlayerObject::moveYawEvent(%this)
+{
+
+}
+
+function AIPlayerObject::movePitchEvent(%this)
+{
+
+}
+
+function AIPlayerObject::moveRollEvent(%this){}
+
+function AIPlayerObject::moveTriggerEvent(%this, %triggerNum, %triggerValue)
+{
+
+}
+
+function AIPlayerObject::onCollisionEvent(%this, %colObject, %colNormal, %colPoint, %colMatID, %velocity)
+{
+
+}
+
+function AIPlayerObject::processTick(%this)
+{
+
+}
+

+ 12 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/AIPlayerObject.taml

@@ -0,0 +1,12 @@
+<AIPlayerObject
+    scale="1 1 1"
+    class="AIPlayerObject"
+    canSave="true"
+    canSaveDynamicFields="true"
+    position="0 0 0"
+    rotation="0 -0 -0"
+    LocalPosition="0 0 0"
+    LocalRotation="1 0 0 0"
+    lifetimeMS="0"
+    gameObject="Core_GameObjects:AIPlayerObject">
+</AIPlayerObject>

+ 8 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/PlayerObject.asset.taml

@@ -0,0 +1,8 @@
+<GameObjectAsset
+    canSave="true"
+    canSaveDynamicFields="true"
+    AssetName="PlayerObject"
+    gameObjectName="PlayerObject"
+    scriptFilePath="core/gameObjects/gameObjects/PlayerObject.cs"
+    TAMLFilePath="core/gameObjects/gameObjects/PlayerObject.taml"
+    description="A basic Player Object example." />

+ 42 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/PlayerObject.cs

@@ -0,0 +1,42 @@
+function PlayerObject::onAdd(%this)
+{
+
+}
+
+function PlayerObject::onRemove(%this)
+{
+
+}
+
+function PlayerObject::moveVectorEvent(%this)
+{
+
+}
+
+function PlayerObject::moveYawEvent(%this)
+{
+
+}
+
+function PlayerObject::movePitchEvent(%this)
+{
+
+}
+
+function PlayerObject::moveRollEvent(%this){}
+
+function PlayerObject::moveTriggerEvent(%this, %triggerNum, %triggerValue)
+{
+
+}
+
+function PlayerObject::onCollisionEvent(%this, %colObject, %colNormal, %colPoint, %colMatID, %velocity)
+{
+
+}
+
+function PlayerObject::processTick(%this)
+{
+
+}
+

+ 117 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/PlayerObject.taml

@@ -0,0 +1,117 @@
+<PlayerObject
+    scale="1 1 1"
+    class="PlayerObject"
+    canSave="true"
+    canSaveDynamicFields="true"
+    position="0 0 0"
+    rotation="0 -0 -0"
+    LocalPosition="0 0 0"
+    LocalRotation="1 0 0 0"
+    lifetimeMS="0"
+    gameObject="Core_GameObjects:PlayerObject">
+    <MeshComponent
+        componentType="Render"
+        friendlyName="Mesh Component"
+        description="Causes the object to render a non-animating 3d shape using the file provided."
+        networked="true"
+        enabled="true"
+        internalName="MeshComponent" />
+    <ShapeCollisionComponent
+        componentType="Collision"
+        friendlyName="Shape Collision"
+        description="A stub component class that physics components should inherit from."
+        networked="false"
+        enabled="true"
+        internalName="CollisionComponent"
+        CollisionType="Collision Mesh"
+        LineOfSightType="Collision Mesh"
+        DecalType="Collision Mesh"
+        CollisionMeshPrefix="Collision"
+        BlockCollisions="true" />
+    <AnimationComponent
+        componentType="Render"
+        friendlyName="Animation(Component)"
+        description="Allows a rendered mesh to be animated"
+        networked="true"
+        enabled="true"
+        internalName="AnimationComponent" />
+    <PlayerControllerComponent
+        componentType="Physics"
+        friendlyName="Player Controller"
+        description="A general-purpose physics player controller."
+        networked="false"
+        enabled="true"
+        internalName="PhysicsComponent"
+        inputVelocity="0 0 0"
+        useDirectMoveInput="0 -3.37028e+15 0" />
+    <StateMachineComponent
+        componentType="Game"
+        friendlyName="State Machine"
+        description="A generic state machine."
+        networked="false"
+        enabled="true"
+        internalName="StateMachineComponent" />
+    <CameraComponent
+        friendlyName="Camera(Component)"
+        networked="true"
+        enabled="true"
+        internalName="CameraComponent"
+        FOV="80"
+        MinFOV="5"
+        MaxFOV="175"
+        ScreenAspect="1065353216 1065353216"
+        positionOffset="0 0 0"
+        rotationOffset="0 -0 -0"
+        useParentTransform="true" />
+    <CameraOrbiterComponent
+        networked="false"
+        enabled="true"
+        internalName="CameraOrbiterComponent"
+        orbitDistance="8"
+        rotation="0 0 0"
+        maxPitchAngle="70"
+        minPitchAngle="-10" />
+    <ControlObjectComponent
+        componentType="Game"
+        friendlyName="Control Object"
+        description="Allows owner entity to be controlled by a client."
+        networked="false"
+        enabled="true"
+        internalName="ControlObjectComponent"
+        clientOwner="0" />
+    <SoundComponent
+        componentType="Sound"
+        friendlyName="Sound(Component)"
+        description="Stores up to 4 sounds for playback."
+        networked="true"
+        enabled="true"
+        internalName="SoundComponent">
+        <SoundComponent.MPreviewSounds>
+            <MPreviewSound
+                MPreviewSound="false" />
+            <MPreviewSound
+                MPreviewSound="false" />
+            <MPreviewSound
+                MPreviewSound="false" />
+            <MPreviewSound
+                MPreviewSound="false" />
+        </SoundComponent.MPreviewSounds>
+        <SoundComponent.Plays>
+            <Play
+                Play="false" />
+            <Play
+                Play="false" />
+            <Play
+                Play="false" />
+            <Play
+                Play="false" />
+        </SoundComponent.Plays>
+    </SoundComponent>
+    <InteractComponent
+        componentType="Game"
+        friendlyName="Interact"
+        description="Allows owner entity interact."
+        networked="false"
+        enabled="true"
+        internalName="InteractComponent" />
+</PlayerObject>

+ 7 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/soundEmitterObject.asset.taml

@@ -0,0 +1,7 @@
+<GameObjectAsset
+    canSave="true"
+    canSaveDynamicFields="true"
+    AssetName="soundEmitterObject"
+    gameObjectName="soundEmitterObject"
+    TAMLFilePath="core/gameObjects/gameObjects/soundEmitterObject.taml"
+    description="A basic sound emitter example." />

+ 9 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/soundEmitterObject.taml

@@ -0,0 +1,9 @@
+<soundEmitterObject
+    scale="1 1 1"
+    class="SoundEmitterObject"
+    canSave="true"
+    canSaveDynamicFields="true"
+    position="0 0 0"
+    Rotation="0 -0 -0"
+    LocalPosition="0 0 0"
+    LocalRotation="1 0 0 0"/>

+ 7 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/staticShapeObject.asset.taml

@@ -0,0 +1,7 @@
+<GameObjectAsset
+    canSave="true"
+    canSaveDynamicFields="true"
+    AssetName="StaticShapeObject"
+    gameObjectName="StaticShapeObject"
+    TAMLFilePath="core/gameObjects/gameObjects/staticShapeObject.taml"
+    description="A basic static shape example." />

+ 9 - 0
Templates/BaseGame/game/core/gameObjects/gameObjects/staticShapeObject.taml

@@ -0,0 +1,9 @@
+<StaticShapeObject
+    scale="1 1 1"
+    class="StaticShapeObject"
+    canSave="true"
+    canSaveDynamicFields="true"
+    position="0 0 0"
+    Rotation="0 -0 -0"
+    LocalPosition="0 0 0"
+    LocalRotation="1 0 0 0"/>