#ifndef SCENEENTITY_SHARED_H
#define SCENEENTITY_SHARED_H
#ifdef _WIN32
#pragma once
#endif

#if defined( CLIENT_DLL )
#define CBaseFlex C_BaseFlex
#define CSceneEntity C_SceneEntity
#endif

#include "iscenetokenprocessor.h"

class CBaseFlex;

class CChoreoEvent;
class CChoreoScene;
class CChoreoActor;
class CSceneEntity;

class CSceneEventInfo
{
public:
	CSceneEventInfo()
		:
		m_pEvent(0),
		m_pScene(0),
		m_pActor(0),
		m_bStarted(false),
		m_iLayer(-1),
		m_iPriority(0),
		m_nSequence(0),
		m_bIsGesture(false),
		m_flWeight(0.0f),
		m_hTarget(),
		m_bIsMoving(false),
		m_bHasArrived(false),
		m_flInitialYaw(0.0f),
		m_flTargetYaw(0.0f),
		m_flFacingYaw(0.0f),
		m_nType(0),
		m_flNext(0.0f),
		m_bClientSide(false)
	{
	}

	CChoreoEvent* m_pEvent;

	CChoreoScene* m_pScene;

	CChoreoActor* m_pActor;

	bool			m_bStarted;

public:
	int						m_iLayer;
	int						m_iPriority;
	int						m_nSequence;
	bool					m_bIsGesture;
	float					m_flWeight;        

	EHANDLE					m_hTarget;
	bool					m_bIsMoving;
	bool					m_bHasArrived;
	float					m_flInitialYaw;
	float					m_flTargetYaw;
	float					m_flFacingYaw;

	int						m_nType;
	float					m_flNext;

	bool					m_bClientSide;

	void					InitWeight(CBaseFlex* pActor);
	float					UpdateWeight(CBaseFlex* pActor);
};

class CSceneTokenProcessor : public ISceneTokenProcessor
{
public:
	const char* CurrentToken(void);
	bool		GetToken(bool crossline);
	bool		TokenAvailable(void);
	void		Error(PRINTF_FORMAT_STRING const char* fmt, ...);
	void		SetBuffer(char* buffer);
private:
	const char* m_pBuffer;
	char		m_szToken[1024];
};

extern CSceneTokenProcessor g_TokenProcessor;

void Scene_Printf(PRINTF_FORMAT_STRING const char* pFormat, ...);
extern ConVar scene_clientflex;

#endif  