#pragma once

#include "entity.h"

//##########################################################################
//#####################    EyeCandy::ModelResource    #####################
//##########################################################################

struct EyeCandy__ModelResource
{
	Scalar
		maxWaitTime;
	Scalar
		minWaitTime;

};

//##########################################################################
//###########################    EyeCandy    ###############################
//##########################################################################

class EyeCandy:
	public Entity
{
public:
	enum {
		effectOff = Entity::StateCount,
		effectOn,
		StateCount
	};

private:
	Scalar
		maxWaitTime;
	Scalar
		minWaitTime;
	Scalar
		waitTime;
	Scalar
		lastTrigger;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Shared Data support
//
public:
	static Derivation *GetClassDerivations();

	static SharedData DefaultData;

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Model Support
//
public:
	typedef void
		(EyeCandy::*Performance)(Scalar time_slice);

	void
		SetPerformance(Performance performance)
		{
			Check(this);
			activePerformance = (Simulation::Performance)performance;
		}

	void
		EyeCandySimulation(Scalar time_slice);

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Construction and Destruction
//
public:

	typedef EyeCandy__ModelResource ModelResource;

	static EyeCandy*
		Make(EyeCandy::MakeMessage *creation_message);

	EyeCandy(
		MakeMessage *creation_message,
		SharedData &virtual_data = DefaultData
	);
	~EyeCandy();

	Logical
  	TestInstance() const;

	static Logical
		CreateMakeMessage(
			MakeMessage *creation_message,
			NotationFile *model_file,
			const ResourceDirectories *directories
		);

	static ResourceDescription::ResourceID
		EyeCandy::CreateModelResource(
			ResourceFile *resource_file,
			const char* model_name,
			NotationFile * model_file,
			const ResourceDirectories *directories,
			ModelResource *model = NULL
		);

};
