#include "SkyeCuillin.h"

class DemoController : public Engine::Component
{
public:
	static std::string mComponentName;

	Engine::float4 mFloat4Value;
	Engine::mat4 mMatrixValue;
	float mValue;
	int mIntValue;
	std::string mStringValue;

	virtual std::string& GetName() override
	{
		return mComponentName;
	}

	virtual bool Editor(std::string& prev, std::string& next)
	{
		SetupContext();
		
		return Engine::Component::DefaultEditor(this, &Reflection, prev, next);
	}

	virtual void Init()
	{
		mValue = 0.0f;
	}

	virtual void Update(float deltaTime)
	{
		mValue += 1.0f / 60.0f;
		if (mValue > 1.0f)
		{
			mValue -= 1.0f;
		}

		printf("%f %f %f\n",
			this->mGameObject->GetEntity()->Transformation().GetTranslation().x,
			this->mGameObject->GetEntity()->Transformation().GetTranslation().y,
			this->mGameObject->GetEntity()->Transformation().GetTranslation().z);
	}

	virtual std::string Serialize()
	{
		return Engine::Component::DefaultSerialize(this, &Reflection);
	}

	virtual void Deserialize(const std::string& data)
	{
		Engine::Component::DefaultDeserialize(this, &Reflection, data);
	}

	REFLECT()
};

REFLECT_STRUCT_BEGIN(DemoController)
REFLECT_STRUCT_MEMBER(mValue)
REFLECT_STRUCT_MEMBER(mIntValue)
REFLECT_STRUCT_MEMBER(mFloat4Value)
REFLECT_STRUCT_MEMBER(mMatrixValue)
REFLECT_STRUCT_MEMBER(mStringValue)
REFLECT_STRUCT_END()

SKYE_CUILLIN_COMPONENT(DemoController)