Browse Source

Adding Atomic Mutant C# scample

Josh Engebretson 9 years ago
parent
commit
c113974331
89 changed files with 1187 additions and 1 deletions
  1. 5 0
      AtomicNET/AtomicMutant/.gitignore
  2. 9 0
      AtomicNET/AtomicMutant/AtomicMutant.atomic
  3. 5 0
      AtomicNET/AtomicMutant/Resources.asset
  4. 5 0
      AtomicNET/AtomicMutant/Resources/Components.asset
  5. 179 0
      AtomicNET/AtomicMutant/Resources/Components/Character.cs
  6. 5 0
      AtomicNET/AtomicMutant/Resources/Components/Character.cs.asset
  7. 167 0
      AtomicNET/AtomicMutant/Resources/Components/CharacterExample.cs
  8. 5 0
      AtomicNET/AtomicMutant/Resources/Components/CharacterExample.cs.asset
  9. 5 0
      AtomicNET/AtomicMutant/Resources/Models.asset
  10. BIN
      AtomicNET/AtomicMutant/Resources/Models/Crate.fbx
  11. 10 0
      AtomicNET/AtomicMutant/Resources/Models/Crate.fbx.asset
  12. BIN
      AtomicNET/AtomicMutant/Resources/Models/Ground.fbx
  13. 10 0
      AtomicNET/AtomicMutant/Resources/Models/Ground.fbx.asset
  14. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Materials.asset
  15. 10 0
      AtomicNET/AtomicMutant/Resources/Models/Materials/Crate.Basic.material
  16. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Materials/Crate.Basic.material.asset
  17. 18 0
      AtomicNET/AtomicMutant/Resources/Models/Materials/DefaultMaterial.material
  18. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Materials/DefaultMaterial.material.asset
  19. 10 0
      AtomicNET/AtomicMutant/Resources/Models/Materials/Pallet.material
  20. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Materials/Pallet.material.asset
  21. 15 0
      AtomicNET/AtomicMutant/Resources/Models/Materials/Robot_01_mat.material
  22. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Materials/Robot_01_mat.material.asset
  23. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant.asset
  24. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Layer.asset
  25. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Layer/Mutant_Block_LY.ani
  26. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Layer/Mutant_Wave_LY.ani
  27. 36 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/License.txt
  28. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/License.txt.asset
  29. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Materials.asset
  30. 9 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Materials/mutant_M.material
  31. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Materials/mutant_M.material.asset
  32. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant.mdl
  33. 10 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant.mdl.asset
  34. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Death.ani
  35. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_HipHop1.ani
  36. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Idle0.ani
  37. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Idle1.ani
  38. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Jump.ani
  39. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Jump1.ani
  40. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_JumpAttack.ani
  41. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_JumpStop.ani
  42. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Kick.ani
  43. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Punch.ani
  44. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Run.ani
  45. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Swipe.ani
  46. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Walk.ani
  47. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/RootMotion.asset
  48. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/RootMotion/Mutant_JumpAttack_RM.ani
  49. 5 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures.asset
  50. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures/Mutant_diffuse.jpg
  51. 7 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures/Mutant_diffuse.jpg.asset
  52. BIN
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures/Mutant_normal.jpg
  53. 7 0
      AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures/Mutant_normal.jpg.asset
  54. BIN
      AtomicNET/AtomicMutant/Resources/Models/Pallet.fbx
  55. 10 0
      AtomicNET/AtomicMutant/Resources/Models/Pallet.fbx.asset
  56. BIN
      AtomicNET/AtomicMutant/Resources/Models/Plane.blend
  57. 10 0
      AtomicNET/AtomicMutant/Resources/Models/Plane.blend.asset
  58. 5 0
      AtomicNET/AtomicMutant/Resources/Prefabs.asset
  59. 20 0
      AtomicNET/AtomicMutant/Resources/Prefabs/Crate.prefab
  60. 5 0
      AtomicNET/AtomicMutant/Resources/Prefabs/Crate.prefab.asset
  61. 20 0
      AtomicNET/AtomicMutant/Resources/Prefabs/Pallet.prefab
  62. 5 0
      AtomicNET/AtomicMutant/Resources/Prefabs/Pallet.prefab.asset
  63. 5 0
      AtomicNET/AtomicMutant/Resources/Scenes.asset
  64. 370 0
      AtomicNET/AtomicMutant/Resources/Scenes/Scene.scene
  65. 8 0
      AtomicNET/AtomicMutant/Resources/Scenes/Scene.scene.asset
  66. 5 0
      AtomicNET/AtomicMutant/Resources/Scripts.asset
  67. 14 0
      AtomicNET/AtomicMutant/Resources/Scripts/Program.cs
  68. 5 0
      AtomicNET/AtomicMutant/Resources/Scripts/Program.cs.asset
  69. 5 0
      AtomicNET/AtomicMutant/Resources/Textures.asset
  70. BIN
      AtomicNET/AtomicMutant/Resources/Textures/BlueGrid.png
  71. 7 0
      AtomicNET/AtomicMutant/Resources/Textures/BlueGrid.png.asset
  72. BIN
      AtomicNET/AtomicMutant/Resources/Textures/Crate-Bump.jpg
  73. 7 0
      AtomicNET/AtomicMutant/Resources/Textures/Crate-Bump.jpg.asset
  74. BIN
      AtomicNET/AtomicMutant/Resources/Textures/Crate-Diffuse.jpg
  75. 7 0
      AtomicNET/AtomicMutant/Resources/Textures/Crate-Diffuse.jpg.asset
  76. BIN
      AtomicNET/AtomicMutant/Resources/Textures/Crate-Normal.jpg
  77. 7 0
      AtomicNET/AtomicMutant/Resources/Textures/Crate-Normal.jpg.asset
  78. BIN
      AtomicNET/AtomicMutant/Resources/Textures/Crate-Specular.jpg
  79. 7 0
      AtomicNET/AtomicMutant/Resources/Textures/Crate-Specular.jpg.asset
  80. BIN
      AtomicNET/AtomicMutant/Resources/Textures/Pallet-Bump.jpg
  81. 7 0
      AtomicNET/AtomicMutant/Resources/Textures/Pallet-Bump.jpg.asset
  82. BIN
      AtomicNET/AtomicMutant/Resources/Textures/Pallet-Difuse.jpg
  83. 7 0
      AtomicNET/AtomicMutant/Resources/Textures/Pallet-Difuse.jpg.asset
  84. BIN
      AtomicNET/AtomicMutant/Resources/Textures/Pallet-Normal.jpg
  85. 7 0
      AtomicNET/AtomicMutant/Resources/Textures/Pallet-Normal.jpg.asset
  86. BIN
      AtomicNET/AtomicMutant/Resources/Textures/Pallet-Specular.jpg
  87. 7 0
      AtomicNET/AtomicMutant/Resources/Textures/Pallet-Specular.jpg.asset
  88. 49 0
      AtomicNET/AtomicMutant/Settings/Engine.json
  89. 1 1
      AtomicNET/Basic3D/Resources/Scripts/Program.cs

+ 5 - 0
AtomicNET/AtomicMutant/.gitignore

@@ -0,0 +1,5 @@
+UserPrefs.json
+BuildSettings.json
+Cache/*
+AtomicNET/*
+Resources/AtomicProject.*

+ 9 - 0
AtomicNET/AtomicMutant/AtomicMutant.atomic

@@ -0,0 +1,9 @@
+{
+   "version": 1,
+   "project": {
+      "version": "1.0.0"
+   },
+   "platforms": [
+      "mac", "windows"
+   ]
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "b7655e5b333fee62040eb865fa21fd2b",
+	"FolderImporter": {}
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Components.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "cfa4a6ce6d3f1dc2b188471e5c110c30",
+	"FolderImporter": {}
+}

+ 179 - 0
AtomicNET/AtomicMutant/Resources/Components/Character.cs

@@ -0,0 +1,179 @@
+using System;
+using AtomicEngine;
+
+public class Character : CSComponent
+{
+
+    void Start()
+    {
+        SubscribeToEvent("NodeCollision", HandleNodeCollision);
+    }
+
+    void FixedUpdate(float timeStep)
+    {
+
+        /// TODO: Could cache the components for faster access instead of finding them each frame
+        /// Also, switch to generic version of GetComponent
+        /// 
+        RigidBody body = (RigidBody)Node.GetComponent("RigidBody");
+        AnimationController animCtrl = (AnimationController)Node.GetComponent("AnimationController", true);
+
+        // Update the in air timer. Reset if grounded
+        if (!onGround)
+            inAirTimer += timeStep;
+        else
+            inAirTimer = 0.0f;
+
+        // When character has been in air less than 1/10 second, it's still interpreted as being on ground
+        bool softGrounded = inAirTimer < INAIR_THRESHOLD_TIME;
+
+        // Update movement & animation
+        Quaternion rot = Node.Rotation;
+
+        Vector3 moveDir = Vector3.Zero;
+
+        Vector3 velocity = body.LinearVelocity;
+
+        // Velocity on the XZ plane
+
+        Vector3 planeVelocity = new Vector3(velocity.X, 0.0f, velocity.Z);
+
+        var input = GetSubsystem<Input>();
+
+        if (input.GetKeyDown(Constants.KEY_W))
+        {
+            moveDir += Vector3.Forward;
+        }
+
+        if (input.GetKeyDown(Constants.KEY_S))
+        {
+            moveDir += Vector3.Back;
+        }
+
+        if (input.GetKeyDown(Constants.KEY_A))
+        {
+            moveDir += Vector3.Left;
+        }
+
+        if (input.GetKeyDown(Constants.KEY_D))
+        {
+            moveDir += Vector3.Right;
+        }
+
+        float breakAdjust = ((float)input.MouseMoveWheel) * timeStep * 4.0f;
+        breakForce -= breakAdjust;
+        breakForce = Clamp<float>(breakForce, MIN_BRAKE_FORCE, MAX_BRAKE_FORCE);
+
+        // Normalize move vector so that diagonal strafing is not faster
+        if (moveDir.LengthSquared > 0.0f)
+            moveDir.Normalize();
+
+        // If in air, allow control, but slower than when on ground
+        body.ApplyImpulse(rot * moveDir * (softGrounded ? MOVE_FORCE : INAIR_MOVE_FORCE));
+
+        if (softGrounded)
+        {
+            // When on ground, apply a braking force to limit maximum ground velocity
+            Vector3 brakeForce = -planeVelocity * breakForce;
+            body.ApplyImpulse(brakeForce);
+
+            // Jump. Must release jump control inbetween jumps
+            if (input.GetKeyDown(Constants.KEY_SPACE))
+            {
+                if (okToJump)
+                {
+                    body.ApplyImpulse(Vector3.Up * JUMP_FORCE);
+                    okToJump = false;
+                    animCtrl.PlayExclusive("Models/Mutant/Mutant_Jump1.ani", 0, false, 0.2f);
+                }
+            }
+            else
+                okToJump = true;
+        }
+
+        if (!onGround)
+        {
+            animCtrl.PlayExclusive("Models/Mutant/Mutant_Jump1.ani", 0, false, 0.2f);
+        }
+        else
+        {
+            // Play walk animation if moving on ground, otherwise fade it out
+            if (softGrounded && !moveDir.Equals(Vector3.Zero))
+                animCtrl.PlayExclusive("Models/Mutant/Mutant_Run.ani", 0, true, 0.2f);
+            else
+                animCtrl.PlayExclusive("Models/Mutant/Mutant_Idle0.ani", 0, true, 0.2f);
+
+            // Set walk animation speed proportional to velocity
+            animCtrl.SetSpeed("Models/Mutant/Mutant_Run.ani", planeVelocity.Length * 0.3f);
+        }
+
+        // Reset grounded flag for next frame
+        onGround = false;
+
+    }
+
+    void HandleNodeCollision(uint eventType, ScriptVariantMap eventData)
+    {
+        PhysicsNodeCollision nodeCollision = eventData.GetPtr<PhysicsNodeCollision>("PhysicsNodeCollision");
+
+        if (nodeCollision == null)
+            return;
+
+        // TODO: We need to be able to subscribe to specific object's events
+        if (nodeCollision.OtherNode == Node)
+        {
+            var nodePosition = Node.Position;
+
+            for (uint i = 0; i < nodeCollision.Contacts.Size; i++)
+            {
+                var contact = nodeCollision.Contacts.At(i);
+
+                var contactPosition = contact.Position;
+
+                // TODO: This needs to be flipped when can listen to specific node
+
+                // If contact is below node center and pointing up, assume it's a ground contact
+                if (contactPosition.Y > (nodePosition.Y - 1.0f))
+                {
+                    float level = contact.Normal.Y;
+                    
+                    if (level < 0.75f)
+                        onGround = true;
+                }
+
+            }
+
+        }
+
+    }
+
+
+
+    const float MOVE_FORCE = 0.8f;
+    const float INAIR_MOVE_FORCE = 0.02f;
+    const float JUMP_FORCE = 7.0f;
+    const float YAW_SENSITIVITY = 0.1f;
+    const float INAIR_THRESHOLD_TIME = 0.1f;
+
+    const float MIN_BRAKE_FORCE = 0.1f;
+    const float MAX_BRAKE_FORCE = 0.4f;
+
+    float breakForce = 0.2f;
+
+    /// Grounded flag for movement.
+    bool onGround = false;
+    /// Jump flag.
+    bool okToJump = true;
+    /// In air timer. Due to possible physics inaccuracy, character can be off ground for max. 1/10 second and still be allowed to move.
+    float inAirTimer = 0.0f;
+
+    // TODO: add this to a utility class
+    static T Clamp<T>(T val, T min, T max) where T : IComparable<T>
+    {
+        if (val.CompareTo(min) < 0) return min;
+        else if (val.CompareTo(max) > 0) return max;
+        else return val;
+    }
+
+
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Components/Character.cs.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "a57d4fa8450a99968136fc1b068cd91f",
+	"CSharpImporter": null
+}

+ 167 - 0
AtomicNET/AtomicMutant/Resources/Components/CharacterExample.cs

@@ -0,0 +1,167 @@
+using System;
+using AtomicEngine;
+
+public class CharacterExample : CSComponent
+{
+    void Start()
+    {
+        Node objectNode = Scene.CreateChild("AtomicMutant");
+
+        objectNode.Scale = new Vector3(1.5f, 1.5f, 1.5f);
+        objectNode.Position = Node.Position;
+
+        // spin node
+        Node adjustNode = objectNode.CreateChild("AdjNode");
+        adjustNode.Rotation = Quaternion.FromAxisAngle(new Vector3(0, 1, 0), 180);
+
+        // Create the rendering component + animation controller
+        AnimatedModel animatedModel = adjustNode.CreateComponent<AnimatedModel>();
+
+        animatedModel.Model = AtomicNET.Cache.GetResource<Model>("Models/Mutant/Mutant.mdl");
+        animatedModel.Material = AtomicNET.Cache.GetResource<Material>("Models/Mutant/Materials/mutant_M.material");
+        animatedModel.CastShadows = true;
+
+        // Create animation controller
+        adjustNode.CreateComponent<AnimationController>();
+
+        // Create rigidbody, and set non-zero mass so that the body becomes dynamic
+        RigidBody body = objectNode.CreateComponent<RigidBody>();
+        body.CollisionLayer = 1;
+        body.Mass = 1.0f;
+
+        // Set zero angular factor so that physics doesn't turn the character on its own.
+        // Instead we will control the character yaw manually
+        body.AngularFactor = Vector3.Zero;
+
+        // Set the rigidbody to signal collision also when in rest, so that we get ground collisions properly
+        body.CollisionEventMode = CollisionEventMode.COLLISION_ALWAYS;
+
+        // Set a capsule shape for collision
+        CollisionShape shape = objectNode.CreateComponent<CollisionShape>();
+        shape.SetCapsule(1.5f, 1.8f, new Vector3(0.0f, 0.9f, 0.0f));
+
+        character = objectNode.CreateComponent<Character>();
+
+
+        AtomicNET.GetSubsystem<Renderer>().ShadowMapSize = 2048;
+
+        // Get Camera from Scene
+        Vector<Node> children = new Vector<Node>();
+        Scene.GetChildrenWithComponent<Camera>(children, true);
+        if (children.Size > 0)
+        {
+            cameraNode = children[0];
+        }
+    }
+
+    Node cameraNode;
+    Character character;
+
+    float pitch = 0.0f;
+    float yaw = 0.0f;
+
+    void Update(float timeStep)
+    {
+        var input = GetSubsystem<Input>();
+
+        input.SetMouseVisible(false);
+
+        yaw += (float)input.MouseMoveX * PITCH_SENSITIVITY;
+        pitch += (float)input.MouseMoveY * YAW_SENSITIVITY;
+
+        // Limit pitch
+        pitch = Clamp<float>(pitch, -80.0f, 80.0f);
+
+        // Set rotation already here so that it's updated every rendering frame instead of every physics frame        
+        character.Node.Rotation = Quaternion.FromAxisAngle(Vector3.Up, yaw);
+
+        if (input.GetKeyPress(Constants.KEY_F))
+        {
+            viewMode += 1;
+
+            if (viewMode == 2)
+                viewMode = 0;
+        }
+
+    }
+
+    void PostUpdate(float timeStep)
+    {
+        if (cameraNode == null)
+            return;
+
+        Node characterNode = character.Node;
+
+        // Get camera lookat dir from character yaw + pitch
+        Quaternion rot = characterNode.Rotation;
+
+        Quaternion dir = rot * Quaternion.FromAxisAngle(Vector3.Right, pitch);
+
+        // Turn head to camera pitch, but limit to avoid unnatural animation
+
+        Node headNode = characterNode.GetChild("Mutant:Head", true);
+
+        float limitPitch = Clamp<float>(pitch, -45.0f, 45.0f);
+        Quaternion headDir = rot * Quaternion.FromAxisAngle(new Vector3(1.0f, 0.0f, 0.0f), limitPitch);
+
+        // This could be expanded to look at an arbitrary target, now just look at a point in front
+        Vector3 headWorldTarget = headNode.WorldPosition + headDir * (new Vector3(0.0f, 0.0f, -1.0f));
+        headNode.LookAt(headWorldTarget, new Vector3(0.0f, 1.0f, 0.0f));
+
+        if (firstPerson)
+        {
+            cameraNode.Position = headNode.WorldPosition + rot * (new Vector3(0.0f, 0.15f, 0.2f));
+            cameraNode.Rotation = dir;
+        }
+        else
+        {
+            // Third person camera: position behind the character
+            Vector3 aimPoint;
+            aimPoint = characterNode.Position + rot * (new Vector3(0.0f, 1.7f, 0.0f));
+
+            // Collide camera ray with static physics objects (layer bitmask 2) to ensure we see the character properly
+            Vector3 rayDir;
+
+            if (viewMode == 0)
+                rayDir = dir * Vector3.Back;
+            else
+            {
+                dir = rot *  Quaternion.FromAxisAngle(Vector3.Up, 180.0f);
+                rayDir = dir * Vector3.Back;
+            }
+
+            float rayDistance = CAMERA_INITIAL_DIST;
+
+            //PhysicsRaycastResult result;
+            //scene_->GetComponent<PhysicsWorld>()->RaycastSingle(result, Ray(aimPoint, rayDir), rayDistance, 2);
+            //if (result.body_)
+            //    rayDistance = Min(rayDistance, result.distance_);
+
+
+            rayDistance = Clamp<float>(rayDistance, CAMERA_MIN_DIST, CAMERA_MAX_DIST);
+
+            cameraNode.Position = aimPoint + rayDir * rayDistance;
+            cameraNode.Rotation = dir;
+        }
+
+
+    }
+
+    static T Clamp<T>(T val, T min, T max) where T : IComparable<T>
+    {
+        if (val.CompareTo(min) < 0) return min;
+        else if (val.CompareTo(max) > 0) return max;
+        else return val;
+    }
+
+    const float CAMERA_MIN_DIST = 1.0f;
+    const float CAMERA_INITIAL_DIST = 6.0f;
+    const float CAMERA_MAX_DIST = 20.0f;
+    const float YAW_SENSITIVITY = 0.1f;
+    const float PITCH_SENSITIVITY = 0.1f;
+
+
+    int viewMode;
+    bool firstPerson = false;
+
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Components/CharacterExample.cs.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "639f7615ff0f2ad641622c8b8c815b63",
+	"CSharpImporter": null
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "348ac79570d9570be777b71a3b1b35a4",
+	"FolderImporter": {}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Crate.fbx


+ 10 - 0
AtomicNET/AtomicMutant/Resources/Models/Crate.fbx.asset

@@ -0,0 +1,10 @@
+{
+	"version": 1,
+	"guid": "36ba46e851eaa3896f434f50d34cbda6",
+	"ModelImporter": {
+		"scale": 1,
+		"importAnimations": false,
+		"importMaterials": true,
+		"animInfo": []
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Ground.fbx


+ 10 - 0
AtomicNET/AtomicMutant/Resources/Models/Ground.fbx.asset

@@ -0,0 +1,10 @@
+{
+	"version": 1,
+	"guid": "15934bd919b214d7f7810775e5d852d3",
+	"ModelImporter": {
+		"scale": 1,
+		"importAnimations": false,
+		"importMaterials": true,
+		"animInfo": []
+	}
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Materials.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "6624ccbe132ffe065388f0f017b88628",
+	"FolderImporter": {}
+}

+ 10 - 0
AtomicNET/AtomicMutant/Resources/Models/Materials/Crate.Basic.material

@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<material>
+	<technique name="Techniques/DiffNormalSpec.xml" />
+	<texture unit="diffuse" name="Textures/Crate-Diffuse.jpg" />
+	<texture unit="normal" name="Textures/Crate-Normal.jpg" />
+	<texture unit="specular" name="Textures/Crate-Specular.jpg" />
+	<parameter name="MatDiffColor" value="0.64 0.64 0.64 1" />
+	<parameter name="MatSpecColor" value="0.5 0.5 0.5 9.60784" />
+	<parameter name="MatEmissiveColor" value="0 0 0 1" />
+</material>

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Materials/Crate.Basic.material.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "153f6788464b746c4e34407a27fc2696",
+	"MaterialImporter": {}
+}

+ 18 - 0
AtomicNET/AtomicMutant/Resources/Models/Materials/DefaultMaterial.material

@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<material>
+	<technique name="Techniques/Diff.xml" quality="0" loddistance="0" />
+	<texture unit="diffuse" name="Textures/BlueGrid.png" />
+	<parameter name="UOffset" value="32 0 0 0" />
+	<parameter name="VOffset" value="0 32 0 0" />
+	<parameter name="MatDiffColor" value="0.8 0.8 0.8 1" />
+	<parameter name="MatEmissiveColor" value="0 0 0 1" />
+	<parameter name="MatEnvMapColor" value="1 1 1" />
+	<parameter name="MatSpecColor" value="0.6 0.6 0.6 16" />
+	<parameter name="Roughness" value="0.5" />
+	<parameter name="Metallic" value="0" />
+	<cull value="ccw" />
+	<shadowcull value="ccw" />
+	<fill value="solid" />
+	<depthbias constant="0" slopescaled="0" />
+	<renderorder value="128" />
+</material>

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Materials/DefaultMaterial.material.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "b5d7107a4d4aa450e70ca23d82c47141",
+	"MaterialImporter": {}
+}

+ 10 - 0
AtomicNET/AtomicMutant/Resources/Models/Materials/Pallet.material

@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<material>
+	<technique name="Techniques/DiffNormalSpec.xml" />
+	<texture unit="diffuse" name="Textures/Pallet-Difuse.jpg" />
+	<texture unit="normal" name="Textures/Pallet-Normal.jpg" />
+	<texture unit="specular" name="Textures/Pallet-Specular.jpg" />
+	<parameter name="MatDiffColor" value="0.64 0.64 0.64 1" />
+	<parameter name="MatSpecColor" value="0.5 0.5 0.5 9.60784" />
+	<parameter name="MatEmissiveColor" value="0 0 0 1" />
+</material>

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Materials/Pallet.material.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "05ba50117cf320362b848bd9c648e2be",
+	"MaterialImporter": {}
+}

+ 15 - 0
AtomicNET/AtomicMutant/Resources/Models/Materials/Robot_01_mat.material

@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<material>
+	<technique name="Techniques/Diff.xml" quality="0" loddistance="0" />
+	<texture unit="diffuse" name="Textures/AtomicRobot.png" />
+	<parameter name="UOffset" value="1 0 0 0" />
+	<parameter name="VOffset" value="0 1 0 0" />
+	<parameter name="MatDiffColor" value="0.8 0.8 0.8 1" />
+	<parameter name="MatEmissiveColor" value="0 0 0 1" />
+	<parameter name="MatEnvMapColor" value="1 1 1" />
+	<parameter name="MatSpecColor" value="0.4 0.4 0.4 16" />
+	<cull value="ccw" />
+	<shadowcull value="ccw" />
+	<fill value="solid" />
+	<depthbias constant="0" slopescaled="0" />
+</material>

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Materials/Robot_01_mat.material.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "75252c6d50e5b9694e30345c8aae1952",
+	"MaterialImporter": {}
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "beb3559bb6b3703b134ee68e28004098",
+	"FolderImporter": {}
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/Layer.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "22f0214a6e5fc96fbd8dffaf22f678a3",
+	"FolderImporter": {}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Layer/Mutant_Block_LY.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Layer/Mutant_Wave_LY.ani


+ 36 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/License.txt

@@ -0,0 +1,36 @@
+--------------------------
+note:
+--------------------------
+There is no requirement in the Mixamo License to provide any license information with any content.  
+However, for the purpose of learning, I have provided some pertinent information below.
+
+--------------------------
+info:
+--------------------------
+website: https://www.mixamo.com/
+model: Mutant
+license: http://www.adobe.com/legal/terms.html
+
+--------------------------
+license short explanation (from the forum):
+--------------------------
+Jeanette Mathews
+May 31, 2016 07:24
+
+Thanks for the feedback, and glad to hear the tutorial was useful getting you started.  :)
+
+Yes, all Fuse and Mixamo content is available for commercial and non commercial use, royalty free.  
+You can edit them to your hearts content!
+
+The only requirement we have is that the final product you are creating must have our content in an 'embedded', non-editable format.  
+So you can't edit the characters and sell them directly, because then other people have access to the character 3d data files.  
+Games, movies, 3d prints, 2D illustrations, or any other file format where the character/animation files are not-editable is fine.  
+Selling characters/animations directly is against the TOS/EULA.
+
+Hope that helps clarify!
+
+reference: https://community.mixamo.com/hc/en-us/community/posts/211496987-Mixamo-Store-Characters-Licence
+
+--------------------------
+
+

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/License.txt.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "36ffd5a330bcf2d161670773f8e38331",
+	"TextImporter": {}
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/Materials.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "596ed0286f14230b0f3e3d7178c60529",
+	"FolderImporter": {}
+}

+ 9 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/Materials/mutant_M.material

@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<material>
+	<technique name="Techniques/DiffNormal.xml" />
+	<texture unit="diffuse" name="Models/Mutant/Textures/Mutant_diffuse.jpg" />
+	<texture unit="normal" name="Models/Mutant/Textures/Mutant_normal.jpg" />
+	<parameter name="MatDiffColor" value="1 1 1 1" />
+	<parameter name="MatSpecColor" value="0.2 0.2 0.2 6.15385" />
+	<parameter name="MatEmissiveColor" value="0 0 0 1" />
+</material>

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/Materials/mutant_M.material.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "631a8f34ff5dfe37258ea52306410e45",
+	"MaterialImporter": {}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant.mdl


+ 10 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant.mdl.asset

@@ -0,0 +1,10 @@
+{
+	"version": 1,
+	"guid": "7a0f0fe34bc602ea3b04ffa30722084d",
+	"ModelImporter": {
+		"scale": 1,
+		"importAnimations": false,
+		"importMaterials": true,
+		"animInfo": []
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Death.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_HipHop1.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Idle0.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Idle1.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Jump.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Jump1.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_JumpAttack.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_JumpStop.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Kick.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Punch.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Run.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Swipe.ani


BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Mutant_Walk.ani


+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/RootMotion.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "e65ce0a6edce385c2faf111a349671d2",
+	"FolderImporter": {}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/RootMotion/Mutant_JumpAttack_RM.ani


+ 5 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "b4931a3b7cbae0302def8f377cb3ce10",
+	"FolderImporter": {}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures/Mutant_diffuse.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures/Mutant_diffuse.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "25f207a21df3551f2cd591e5c2c08f9f",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures/Mutant_normal.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Models/Mutant/Textures/Mutant_normal.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "1100bad378502f5eab2d86d183cf901c",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Pallet.fbx


+ 10 - 0
AtomicNET/AtomicMutant/Resources/Models/Pallet.fbx.asset

@@ -0,0 +1,10 @@
+{
+	"version": 1,
+	"guid": "57fddae4d4352ac0b9c3036f28f9e62b",
+	"ModelImporter": {
+		"scale": 4,
+		"importAnimations": false,
+		"importMaterials": true,
+		"animInfo": []
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Models/Plane.blend


+ 10 - 0
AtomicNET/AtomicMutant/Resources/Models/Plane.blend.asset

@@ -0,0 +1,10 @@
+{
+	"version": 1,
+	"guid": "895f519a3a33e921a43471088cba958b",
+	"ModelImporter": {
+		"scale": 1,
+		"importAnimations": false,
+		"importMaterials": true,
+		"animInfo": []
+	}
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Prefabs.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "1795b1cc596f4b279f781c9461680c45",
+	"FolderImporter": {}
+}

+ 20 - 0
AtomicNET/AtomicMutant/Resources/Prefabs/Crate.prefab

@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<node id="448">
+	<attribute name="Is Enabled" value="true" />
+	<attribute name="Name" value="Crate" />
+	<attribute name="Position" value="0 0 0" />
+	<attribute name="Rotation" value="1 0 0 0" />
+	<attribute name="Scale" value="1 1 1" />
+	<attribute name="Variables" />
+	<component type="StaticModel" id="2402">
+		<attribute name="Model" value="Model;36ba46e851eaa3896f434f50d34cbda6.mdl" />
+		<attribute name="Material" value="Material;Models/Materials/Crate.Basic.material" />
+		<attribute name="Cast Shadows" value="true" />
+	</component>
+	<component type="CollisionShape" id="2403">
+		<attribute name="Size" value="2 2 2" />
+	</component>
+	<component type="RigidBody" id="2404">
+		<attribute name="Mass" value="1" />
+	</component>
+</node>

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Prefabs/Crate.prefab.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "f28b0342cc83510cd46702d551c58f02",
+	"PrefabImporter": {}
+}

+ 20 - 0
AtomicNET/AtomicMutant/Resources/Prefabs/Pallet.prefab

@@ -0,0 +1,20 @@
+<?xml version="1.0"?>
+<node id="451">
+	<attribute name="Is Enabled" value="true" />
+	<attribute name="Name" value="Pallet" />
+	<attribute name="Position" value="0 0 0" />
+	<attribute name="Rotation" value="1 0 0 0" />
+	<attribute name="Scale" value="1 1 1" />
+	<attribute name="Variables" />
+	<component type="StaticModel" id="2405">
+		<attribute name="Model" value="Model;57fddae4d4352ac0b9c3036f28f9e62b.mdl" />
+		<attribute name="Material" value="Material;Models/Materials/Pallet.material" />
+		<attribute name="Cast Shadows" value="true" />
+	</component>
+	<component type="CollisionShape" id="2406">
+		<attribute name="Size" value="4.064 0.609602 4.8768" />
+	</component>
+	<component type="RigidBody" id="2407">
+		<attribute name="Mass" value="1" />
+	</component>
+</node>

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Prefabs/Pallet.prefab.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "9e1083378dc59da1d98981cf2acf9f7c",
+	"PrefabImporter": {}
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Scenes.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "39542c62040785a46f37e07e6b6f99ce",
+	"FolderImporter": {}
+}

+ 370 - 0
AtomicNET/AtomicMutant/Resources/Scenes/Scene.scene

@@ -0,0 +1,370 @@
+<?xml version="1.0"?>
+<scene id="1">
+	<attribute name="Name" value="" />
+	<attribute name="Time Scale" value="1" />
+	<attribute name="Smoothing Constant" value="50" />
+	<attribute name="Snap Threshold" value="5" />
+	<attribute name="Elapsed Time" value="0" />
+	<attribute name="Next Replicated Node ID" value="479" />
+	<attribute name="Next Replicated Component ID" value="3035" />
+	<attribute name="Next Local Node ID" value="16778496" />
+	<attribute name="Next Local Component ID" value="16777216" />
+	<attribute name="Variables" />
+	<attribute name="Variable Names" value="" />
+	<component type="PhysicsWorld" id="1" />
+	<component type="Octree" id="2" />
+	<component type="DebugRenderer" id="3" />
+	<node id="2">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Zone" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="0 0 0" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="Zone" id="4">
+			<attribute name="Bounding Box Min" value="-10000 -10000 -10000" />
+			<attribute name="Bounding Box Max" value="10000 10000 10000" />
+			<attribute name="Ambient Color" value="0.567873 0.567873 0.567873 1" />
+		</component>
+	</node>
+	<node id="3">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="GlobalLight" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="1.02593 2.02863 -1.271" />
+		<attribute name="Rotation" value="0.313506 0.889258 -0.110741 0.314117" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="Light" id="5">
+			<attribute name="Light Type" value="Directional" />
+			<attribute name="Color" value="0.890146 0.890146 0.890146 1" />
+			<attribute name="Cast Shadows" value="true" />
+			<attribute name="CSM Splits" value="5 10 100 0" />
+			<attribute name="CSM Fade Start" value="0.1" />
+			<attribute name="View Size Quantize" value="1" />
+			<attribute name="View Size Minimum" value="5" />
+			<attribute name="Depth Constant Bias" value="5e-05" />
+			<attribute name="Depth Slope Bias" value="0.001" />
+		</component>
+	</node>
+	<node id="361">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Ground" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="0 -7.02201 0" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="100 1 100" />
+		<attribute name="Variables" />
+		<component type="StaticModel" id="1973">
+			<attribute name="Model" value="Model;15934bd919b214d7f7810775e5d852d3.mdl" />
+			<attribute name="Material" value="Material;Models/Materials/DefaultMaterial.material" />
+			<attribute name="Geometry Enabled">
+				<variant type="Bool" value="true" />
+			</attribute>
+		</component>
+		<component type="CollisionShape" id="1974" />
+		<component type="RigidBody" id="1975">
+			<attribute name="Physics Position" value="0 -7.02201 0" />
+		</component>
+	</node>
+	<node id="407">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="MainCamera" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-14.0251 -6.17082 13.1266" />
+		<attribute name="Rotation" value="-4.37114e-08 -0 -1 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="Camera" id="2004" />
+	</node>
+	<node id="422">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-2.09 -5.11 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2023">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="429">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="0.2 -5.11 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2032">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="435">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="2.47 -5.11 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2047">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="436">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="4.70119 -5.11 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2051">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="438">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-4.42 -5.11 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2065">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="439">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-4.42 -2.9 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2069">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="440">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-2.09 -2.9 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2073">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="441">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="0.2 -2.9 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2077">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="442">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="2.47 -2.9 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2081">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="444">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="0.2 -0.75 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2089">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="445">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-2.09 -0.75 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2093">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="446">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-4.42 -0.75 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2097">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="447">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-2.09 1.42 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2101">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="448">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-4.42 1.42 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2105">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="450">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Pallet" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="8.54 -5.75 9.53" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2271">
+			<attribute name="PrefabGUID" value="9e1083378dc59da1d98981cf2acf9f7c" />
+		</component>
+	</node>
+	<node id="451">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Pallet" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-7.15 -4.32 -2.56" />
+		<attribute name="Rotation" value="0.632814 -0.315509 0.632814 0.315509" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2272">
+			<attribute name="PrefabGUID" value="9e1083378dc59da1d98981cf2acf9f7c" />
+		</component>
+	</node>
+	<node id="452">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Pallet" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="7.66 -4.53 -2.36" />
+		<attribute name="Rotation" value="0.692911 0.140974 0.692911 -0.140974" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2276">
+			<attribute name="PrefabGUID" value="9e1083378dc59da1d98981cf2acf9f7c" />
+		</component>
+	</node>
+	<node id="464">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="8.56 -3.81 10.55" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2561">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="465">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="8.56 -3.81 8.52" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2565">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="466">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="8.56 -1.32 9.46" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2569">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="467">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-0.62 4.02 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2573">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="468">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-2.05 6.68 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2577">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="469">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="Crate" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-5.68 4.02 -2.6" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="PrefabComponent" id="2581">
+			<attribute name="PrefabGUID" value="f28b0342cc83510cd46702d551c58f02" />
+		</component>
+	</node>
+	<node id="477">
+		<attribute name="Is Enabled" value="true" />
+		<attribute name="Name" value="CharacterExample" />
+		<attribute name="Tags" />
+		<attribute name="Position" value="-13.9294 -4.2619 3.72029" />
+		<attribute name="Rotation" value="1 0 0 0" />
+		<attribute name="Scale" value="1 1 1" />
+		<attribute name="Variables" />
+		<component type="CSComponent" id="2970">
+			<attribute name="Assembly" value="CSComponentAssembly;AtomicProject.dll" />
+			<attribute name="Class" value="CharacterExample" />
+		</component>
+	</node>
+</scene>

+ 8 - 0
AtomicNET/AtomicMutant/Resources/Scenes/Scene.scene.asset

@@ -0,0 +1,8 @@
+{
+	"version": 1,
+	"guid": "627532ce83065783581852967b660c15",
+	"SceneImporter": {
+		"sceneCamRotation": "0.25771 0.0380556 0.955115 -0.14104",
+		"sceneCamPosition": "-14.5019 4.72938 27.0545"
+	}
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Scripts.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "4d56b7fa12e72b41428c6e3f38124ea9",
+	"FolderImporter": {}
+}

+ 14 - 0
AtomicNET/AtomicMutant/Resources/Scripts/Program.cs

@@ -0,0 +1,14 @@
+using AtomicEngine;
+using AtomicPlayer;
+
+public static class AtomicMain
+{
+    /// <summary>
+    /// The main entry point for the application.
+    /// </summary>
+    static void Main(string[] args)
+    {        
+        var scene = AtomicNET.GetSubsystem<Player>().LoadScene("Scenes/Scene.scene");
+    }
+
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Scripts/Program.cs.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "4ed3123b82ac76297cdd7040a756cefc",
+	"CSharpImporter": null
+}

+ 5 - 0
AtomicNET/AtomicMutant/Resources/Textures.asset

@@ -0,0 +1,5 @@
+{
+	"version": 1,
+	"guid": "dcf414f72523abe9a89f2dd9685a42bd",
+	"FolderImporter": {}
+}

BIN
AtomicNET/AtomicMutant/Resources/Textures/BlueGrid.png


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Textures/BlueGrid.png.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "f23157495cd9f8b0a41bdbf4b780b353",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Textures/Crate-Bump.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Textures/Crate-Bump.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "31b7f68671b5580c0951abb15af193a9",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Textures/Crate-Diffuse.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Textures/Crate-Diffuse.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "e6126ed129fabe92c167289aba92c051",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Textures/Crate-Normal.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Textures/Crate-Normal.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "142e85dfba0ab7d971371dd25795627a",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Textures/Crate-Specular.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Textures/Crate-Specular.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "e4a719a307e46a878668edd4447e1e3c",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Textures/Pallet-Bump.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Textures/Pallet-Bump.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "04d8b8652f43376a52054bc8b687b8c0",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Textures/Pallet-Difuse.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Textures/Pallet-Difuse.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "b9a3026da1599521f2dc742d9512fe99",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Textures/Pallet-Normal.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Textures/Pallet-Normal.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "4c0c21f8c0a547acdf1c7d5abf222965",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

BIN
AtomicNET/AtomicMutant/Resources/Textures/Pallet-Specular.jpg


+ 7 - 0
AtomicNET/AtomicMutant/Resources/Textures/Pallet-Specular.jpg.asset

@@ -0,0 +1,7 @@
+{
+	"version": 1,
+	"guid": "f008b9a2156cf7c89dc0a8b804b1bd89",
+	"TextureImporter": {
+		"compressionSize": 0
+	}
+}

+ 49 - 0
AtomicNET/AtomicMutant/Settings/Engine.json

@@ -0,0 +1,49 @@
+{
+  "desktop": {
+
+    "engine" : {
+      "workerThreads" : true,
+      "logQuiet" : false,
+      "logLevel" : 1
+    },
+
+    "graphics": {
+      "headless": false,
+      "frameLimiter" : true,
+      "flushGPU" : false,
+      "forceGL2" : false,
+      "orientations" : "LandscapeLeft LandscapeRight",
+      "vsync" : false,
+      "tripleBuffer" : false,
+      "multiSample" : 1,
+      "renderPath" : "forward",
+      "shadows" : true,
+      "lowQualityShadows" : false,
+      "materialQuality" : "high",
+      "textureQuality" : "high",
+      "textureFilterMode" : "trilinear",
+      "textureAnisotropy" : 4
+    },
+
+    "window" : {
+      "title" : "AtomicMutant",
+      "fullscreen" : false,
+      "borderless" : false,
+      "resizable" : false
+    },
+
+    "sound": {
+      "enabled" : true,
+      "interpolation" : true,
+      "stereo" : true,
+      "bufferMS": 100,
+      "mixRate" : 44100
+    },
+
+    "input" : {
+      "touchEmulation" : false
+    }
+
+  }
+
+}

+ 1 - 1
AtomicNET/Basic3D/Resources/Scripts/Program.cs

@@ -12,5 +12,5 @@ public static class AtomicMain
         AtomicNET.GetSubsystem<Player>().LoadScene("Scenes/Scene.scene");
         AtomicNET.GetSubsystem<Player>().LoadScene("Scenes/Scene.scene");
 
 
     }
     }
-    
+
 }
 }