diff --git a/include/Engine/Rendering/AnimationSystem.h b/include/Engine/Rendering/AnimationSystem.h
new file mode 100644
index 00000000..0876bfd7
--- /dev/null
+++ b/include/Engine/Rendering/AnimationSystem.h
@@ -0,0 +1,28 @@
+#ifndef AnimationSystem_h__
+#define AnimationSystem_h__
+
+#include "GLM.h"
+
+#include "Common.h"
+#include "Core/System.h"
+#include "Core/ResourceManager.h"
+#include "Rendering/Model.h"
+#include "Rendering/EAnimationComplete.h"
+
+class AnimationSystem : public PureSystem
+{
+public:
+ AnimationSystem(World* world, EventBroker* eventBroker)
+ : System(world, eventBroker)
+ , PureSystem("Animation")
+ {
+
+ }
+ ~AnimationSystem() { }
+ virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& animationComponent, double dt) override;
+private:
+
+
+};
+
+#endif
\ No newline at end of file
diff --git a/include/Engine/Rendering/EAnimationComplete.h b/include/Engine/Rendering/EAnimationComplete.h
new file mode 100644
index 00000000..00519a38
--- /dev/null
+++ b/include/Engine/Rendering/EAnimationComplete.h
@@ -0,0 +1,18 @@
+#ifndef Events_AnimationComplete_h__
+#define Events_AnimationComplete_h__
+
+#include "../Core/EventBroker.h"
+#include "../Core/EntityWrapper.h"
+
+namespace Events
+{
+
+struct AnimationComplete : Event
+{
+ EntityWrapper Entity;
+ std::string Name;
+};
+
+}
+
+#endif
diff --git a/resources/Schema/Components.xsd b/resources/Schema/Components.xsd
index 12d94611..d663f695 100644
--- a/resources/Schema/Components.xsd
+++ b/resources/Schema/Components.xsd
@@ -23,4 +23,5 @@
+
\ No newline at end of file
diff --git a/resources/Schema/Components/Animation.xml b/resources/Schema/Components/Animation.xml
new file mode 100644
index 00000000..01af2747
--- /dev/null
+++ b/resources/Schema/Components/Animation.xml
@@ -0,0 +1,6 @@
+
+
+
+ 0
+ true
+
\ No newline at end of file
diff --git a/resources/Schema/Components/Animation.xsd b/resources/Schema/Components/Animation.xsd
new file mode 100644
index 00000000..0dd21f29
--- /dev/null
+++ b/resources/Schema/Components/Animation.xsd
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/Schema/Entities/RenderingWorld.xml b/resources/Schema/Entities/RenderingWorld.xml
index 69b18982..f8aa2491 100644
--- a/resources/Schema/Entities/RenderingWorld.xml
+++ b/resources/Schema/Entities/RenderingWorld.xml
@@ -8,9 +8,7 @@
-
- ActionCamera
-
+
Models/Camera.obj
@@ -25,7 +23,9 @@
Camera #2
Fonts/DroidSans.ttf,64
- 0
+
+
+
@@ -79,7 +79,7 @@
-
+
@@ -200,9 +200,7 @@
-
- MainCamera
-
+
Models/Camera.obj
@@ -219,7 +217,9 @@
Taiwan #1
Fonts/DroidSans.ttf,64
- 0
+
+
+
@@ -257,6 +257,34 @@
+
+
+
+
+ Models/Arm.dae
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Models/Sid_Flying.dae
+
+
+
+
+
+
+
+
+
diff --git a/src/Engine/Rendering/AnimationSystem.cpp b/src/Engine/Rendering/AnimationSystem.cpp
new file mode 100644
index 00000000..b65c5a33
--- /dev/null
+++ b/src/Engine/Rendering/AnimationSystem.cpp
@@ -0,0 +1,32 @@
+#include "Rendering/AnimationSystem.h"
+
+void AnimationSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& animationComponent, double dt)
+{
+ if(!entity.HasComponent("Model")) {
+ return;
+ }
+
+ Model* model = ResourceManager::Load(entity["Model"]["Resource"]);
+ //Skeleton* skeleton = model->m_Skeleton;
+ //auto animation == skeleton->GetAnimation(animation["Name"]);
+
+ double animationSpeed = (double)animationComponent["Speed"];
+
+ if( animationSpeed != 0.0) {
+ double nextTime = (double)animationComponent["Time"] + animationSpeed * dt;
+
+ if (!animationComponent["Loop"] && glm::abs(nextTime) > animation->Duration) {
+ (double&)animationComponent["Time"] = glm::sign(nextTime) * animation->Duration;
+ (double&)animationComponent["Speed"] = 0.0;
+ Events::AnimationComplete e;
+ e.Entity = entity;
+ // e.Name = animationComponent->Name;
+ m_EventBroker->Publish(e);
+ } else {
+ (double&)animationComponent["Time"] = nextTime;
+ }
+
+ }
+
+}
+