Adding collider support.
diff --git a/Source/Actor.cpp b/Source/Actor.cpp
index bdc4ce3..4f42ea7 100644
--- a/Source/Actor.cpp
+++ b/Source/Actor.cpp
@@ -4,6 +4,7 @@
 #include "ActorIKTarget.hpp"
 #include "ActorEvent.hpp"
 #include "CustomProperty.hpp"
+#include "ActorCollider.hpp"
 #include "BinaryReader.hpp"
 #include "BlockReader.hpp"
 #include "Exceptions/OverflowException.hpp"
@@ -395,6 +396,21 @@
 			case BlockType::CustomBooleanProperty:
 				component = CustomBooleanProperty::read(this, componentBlock);
 				break;
+			case BlockType::ColliderRectangle:
+				component = ActorColliderRectangle::read(this, componentBlock);
+				break;
+			case BlockType::ColliderTriangle:
+				component = ActorColliderTriangle::read(this, componentBlock);
+				break;
+			case BlockType::ColliderCircle:
+				component = ActorColliderCircle::read(this, componentBlock);
+				break;
+			case BlockType::ColliderPolygon:
+				component = ActorColliderPolygon::read(this, componentBlock);
+				break;
+			case BlockType::ColliderLine:
+				component = ActorColliderLine::read(this, componentBlock);
+				break;
 			default:
 				// Not handled/expected block.
 				break;
diff --git a/Source/ActorCollider.cpp b/Source/ActorCollider.cpp
new file mode 100644
index 0000000..bd6d6ad
--- /dev/null
+++ b/Source/ActorCollider.cpp
@@ -0,0 +1,272 @@
+#include "ActorCollider.hpp"
+#include "BlockReader.hpp"
+
+using namespace nima;
+
+ActorCollider::ActorCollider() : 
+	m_IsCollisionEnabled(true)
+{
+}
+
+void ActorCollider::copy(ActorCollider* node, Actor* resetActor)
+{
+	Base::copy(node, resetActor);
+
+	m_IsCollisionEnabled = node->m_IsCollisionEnabled;
+}
+
+ActorCollider* ActorCollider::read(Actor* actor, BlockReader* reader, ActorCollider* collider)
+{
+	Base::read(actor, reader, collider);
+	collider->m_IsCollisionEnabled = reader->readByte() == 1;
+	return collider;
+}
+
+bool ActorCollider::isCollisionEnabled() const
+{
+	return m_IsCollisionEnabled;
+}
+
+// Rectangle
+
+ActorColliderRectangle::ActorColliderRectangle() : 
+	m_Width(0.0f),
+	m_Height(0.0f)
+{
+
+}
+
+ActorComponent* ActorColliderRectangle::makeInstance(Actor* resetActor)
+{
+	ActorColliderRectangle* instanceProp = new ActorColliderRectangle();
+	instanceProp->copy(this, resetActor);
+	return instanceProp;
+}
+
+void ActorColliderRectangle::copy(ActorColliderRectangle* collider, Actor* resetActor)
+{
+	Base::copy(collider, resetActor);
+	m_Width = collider->m_Width;
+	m_Height = collider->m_Height;
+}
+
+ActorColliderRectangle* ActorColliderRectangle::read(Actor* actor, BlockReader* reader, ActorColliderRectangle* collider)
+{
+	if(collider == nullptr)
+	{
+		collider = new ActorColliderRectangle();
+	}
+	Base::read(actor, reader, collider);
+	collider->m_Width = reader->readFloat();
+	collider->m_Height = reader->readFloat();
+	return collider;
+}
+
+float ActorColliderRectangle::width() const
+{
+	return m_Width;
+}
+
+float ActorColliderRectangle::height() const
+{
+	return m_Height;
+}
+
+
+// Triangle
+
+ActorColliderTriangle::ActorColliderTriangle() : 
+	m_Width(0.0f),
+	m_Height(0.0f)
+{
+
+}
+
+ActorComponent* ActorColliderTriangle::makeInstance(Actor* resetActor)
+{
+	ActorColliderTriangle* instanceProp = new ActorColliderTriangle();
+	instanceProp->copy(this, resetActor);
+	return instanceProp;
+}
+
+void ActorColliderTriangle::copy(ActorColliderTriangle* collider, Actor* resetActor)
+{
+	Base::copy(collider, resetActor);
+	m_Width = collider->m_Width;
+	m_Height = collider->m_Height;
+}
+
+ActorColliderTriangle* ActorColliderTriangle::read(Actor* actor, BlockReader* reader, ActorColliderTriangle* collider)
+{
+	if(collider == nullptr)
+	{
+		collider = new ActorColliderTriangle();
+	}
+	Base::read(actor, reader, collider);
+	collider->m_Width = reader->readFloat();
+	collider->m_Height = reader->readFloat();
+	return collider;
+}
+
+float ActorColliderTriangle::width() const
+{
+	return m_Width;
+}
+
+float ActorColliderTriangle::height() const
+{
+	return m_Height;
+}
+
+// Circle
+
+ActorColliderCircle::ActorColliderCircle() : 
+	m_Radius(0.0f)
+{
+
+}
+
+ActorComponent* ActorColliderCircle::makeInstance(Actor* resetActor)
+{
+	ActorColliderCircle* instanceProp = new ActorColliderCircle();
+	instanceProp->copy(this, resetActor);
+	return instanceProp;
+}
+
+void ActorColliderCircle::copy(ActorColliderCircle* collider, Actor* resetActor)
+{
+	Base::copy(collider, resetActor);
+	m_Radius = collider->m_Radius;
+}
+
+ActorColliderCircle* ActorColliderCircle::read(Actor* actor, BlockReader* reader, ActorColliderCircle* collider)
+{
+	if(collider == nullptr)
+	{
+		collider = new ActorColliderCircle();
+	}
+	Base::read(actor, reader, collider);
+	collider->m_Radius = reader->readFloat();
+	return collider;
+}
+
+float ActorColliderCircle::radius() const
+{
+	return m_Radius;
+}
+
+// Polygon
+
+ActorColliderPolygon::ActorColliderPolygon() : 
+	m_IsInstance(false),
+	m_ContourVertexCount(0),
+	m_ContourVertices(nullptr)
+{
+
+}
+
+ActorColliderPolygon::~ActorColliderPolygon()
+{
+	if(!m_IsInstance)
+	{
+		delete [] m_ContourVertices;
+	}
+}
+
+ActorComponent* ActorColliderPolygon::makeInstance(Actor* resetActor)
+{
+	ActorColliderPolygon* instanceProp = new ActorColliderPolygon();
+	instanceProp->copy(this, resetActor);
+	return instanceProp;
+}
+
+void ActorColliderPolygon::copy(ActorColliderPolygon* collider, Actor* resetActor)
+{
+	Base::copy(collider, resetActor);
+	m_IsInstance = true;
+	m_ContourVertexCount = collider->m_ContourVertexCount;
+	m_ContourVertices = collider->m_ContourVertices;
+}
+
+ActorColliderPolygon* ActorColliderPolygon::read(Actor* actor, BlockReader* reader, ActorColliderPolygon* collider)
+{
+	if(collider == nullptr)
+	{
+		collider = new ActorColliderPolygon();
+	}
+	Base::read(actor, reader, collider);
+
+	collider->m_ContourVertexCount = reader->readUnsignedInt();
+	collider->m_ContourVertices = new float[collider->m_ContourVertexCount*2];
+	reader->readFloatArray(collider->m_ContourVertices, collider->m_ContourVertexCount*2);
+
+	return collider;
+}
+
+float* ActorColliderPolygon::contourVertices() const
+{
+	return m_ContourVertices;
+}
+
+unsigned int ActorColliderPolygon::contourVertexCount() const
+{
+	return m_ContourVertexCount;
+}
+
+// Line
+
+ActorColliderLine::ActorColliderLine() : 
+	m_IsInstance(false),
+	m_VertexCount(0),
+	m_Vertices(nullptr)
+{
+
+}
+
+ActorColliderLine::~ActorColliderLine()
+{
+	if(!m_IsInstance)
+	{
+		delete [] m_Vertices;
+	}
+}
+
+ActorComponent* ActorColliderLine::makeInstance(Actor* resetActor)
+{
+	ActorColliderLine* instanceProp = new ActorColliderLine();
+	instanceProp->copy(this, resetActor);
+	return instanceProp;
+}
+
+void ActorColliderLine::copy(ActorColliderLine* collider, Actor* resetActor)
+{
+	Base::copy(collider, resetActor);
+	m_IsInstance = true;
+	m_VertexCount = collider->m_VertexCount;
+	m_Vertices = collider->m_Vertices;
+}
+
+ActorColliderLine* ActorColliderLine::read(Actor* actor, BlockReader* reader, ActorColliderLine* collider)
+{
+	if(collider == nullptr)
+	{
+		collider = new ActorColliderLine();
+	}
+	Base::read(actor, reader, collider);
+
+	collider->m_VertexCount = reader->readUnsignedInt();
+	collider->m_Vertices = new float[collider->m_VertexCount*2];
+	reader->readFloatArray(collider->m_Vertices, collider->m_VertexCount*2);
+
+	return collider;
+}
+
+float* ActorColliderLine::vertices() const
+{
+	return m_Vertices;
+}
+
+unsigned int ActorColliderLine::vertexCount() const
+{
+	return m_VertexCount;
+}
\ No newline at end of file
diff --git a/Source/ActorCollider.hpp b/Source/ActorCollider.hpp
new file mode 100644
index 0000000..edc8bf3
--- /dev/null
+++ b/Source/ActorCollider.hpp
@@ -0,0 +1,110 @@
+#ifndef _NIMA_ACTORCOLLIDER_HPP_
+#define _NIMA_ACTORCOLLIDER_HPP_
+
+#include <string>
+#include "ActorNode.hpp"
+
+namespace nima
+{
+	class ActorCollider : public ActorNode
+	{
+		typedef ActorNode Base;
+		private:
+			bool m_IsCollisionEnabled;
+			
+		public:
+			ActorCollider();
+			void copy(ActorCollider* node, Actor* resetActor);
+			static ActorCollider* read(Actor* actor, BlockReader* reader, ActorCollider* collider);
+
+			bool isCollisionEnabled() const;
+	};
+
+	class ActorColliderRectangle : public ActorCollider
+	{
+		typedef ActorCollider Base;
+		private:
+			float m_Width;
+			float m_Height;
+			
+		public:
+			ActorColliderRectangle();
+			ActorComponent* makeInstance(Actor* resetActor) override;
+			void copy(ActorColliderRectangle* collider, Actor* resetActor);
+			static ActorColliderRectangle* read(Actor* actor, BlockReader* reader, ActorColliderRectangle* collider = NULL);
+
+			float width() const;
+			float height() const;
+	};
+
+	class ActorColliderTriangle : public ActorCollider
+	{
+		typedef ActorCollider Base;
+		private:
+			float m_Width;
+			float m_Height;
+			
+		public:
+			ActorColliderTriangle();
+			ActorComponent* makeInstance(Actor* resetActor) override;
+			void copy(ActorColliderTriangle* collider, Actor* resetActor);
+			static ActorColliderTriangle* read(Actor* actor, BlockReader* reader, ActorColliderTriangle* collider = NULL);
+
+			float width() const;
+			float height() const;
+	};
+
+	class ActorColliderCircle : public ActorCollider
+	{
+		typedef ActorCollider Base;
+		private:
+			float m_Radius;
+			
+		public:
+			ActorColliderCircle();
+			ActorComponent* makeInstance(Actor* resetActor) override;
+			void copy(ActorColliderCircle* collider, Actor* resetActor);
+			static ActorColliderCircle* read(Actor* actor, BlockReader* reader, ActorColliderCircle* collider = NULL);
+
+			float radius() const;
+	};
+
+	class ActorColliderPolygon : public ActorCollider
+	{
+		typedef ActorCollider Base;
+		private:
+			bool m_IsInstance;
+			unsigned int m_ContourVertexCount;
+			float* m_ContourVertices;
+			
+		public:
+			ActorColliderPolygon();
+			~ActorColliderPolygon();
+			ActorComponent* makeInstance(Actor* resetActor) override;
+			void copy(ActorColliderPolygon* collider, Actor* resetActor);
+			static ActorColliderPolygon* read(Actor* actor, BlockReader* reader, ActorColliderPolygon* collider = NULL);
+
+			float* contourVertices() const;
+			unsigned int contourVertexCount() const;
+	};
+
+	class ActorColliderLine : public ActorCollider
+	{
+		typedef ActorCollider Base;
+		private:
+			bool m_IsInstance;
+			unsigned int m_VertexCount;
+			float* m_Vertices;
+			
+		public:
+			ActorColliderLine();
+			~ActorColliderLine();
+			ActorComponent* makeInstance(Actor* resetActor) override;
+			void copy(ActorColliderLine* collider, Actor* resetActor);
+			static ActorColliderLine* read(Actor* actor, BlockReader* reader, ActorColliderLine* collider = NULL);
+
+			float* vertices() const;
+			unsigned int vertexCount() const;
+	};
+}
+#endif
\ No newline at end of file