#ifndef EDITSCENE_PLAYERCONTROLLER_HPP
#define EDITSCENE_PLAYERCONTROLLER_HPP
#pragma once

#include <Ogre.h>

/**
 * Player controller component.
 * Only active in game mode. Editable in editor mode.
 */
struct PlayerControllerComponent {
	enum CameraMode { TPS = 0, FPS = 1 };
	int cameraMode = TPS;
	Ogre::String targetCharacterName = "";
	Ogre::String fpsBoneName = "Head";
	float tpsDistance = 3.0f;
	float tpsHeight = 2.0f;
	float mouseSensitivity = 0.2f;
	/* Animation state machine configuration */
	Ogre::String locomotionStateMachine = "locomotion";
	Ogre::String idleState = "idle";
	Ogre::String walkState = "walking";
	Ogre::String runState = "running";

	/* Swim animation states (used when character is in water) */
	Ogre::String swimIdleState = "swim-idle";
	Ogre::String swimState = "swimming";
	Ogre::String swimFastState = "swimming-fast";

	/* Actuator interaction settings */
	float actuatorDistance = 25.0f;
	float actuatorCooldown = 1.5f;
	Ogre::Vector3 actuatorColor = Ogre::Vector3(0.0f, 0.4f, 1.0f);
	float distantCircleRadius = 8.0f;
	float nearCircleRadius = 14.0f;
	float actuatorLabelFontSize = 14.0f;

	/* Runtime: set by ActuatorSystem while executing an action */
	bool inputLocked = false;
};

/**
 * Tag component marking a character entity as currently under player control.
 * AI systems (e.g. SmartObjectSystem) should skip entities with this tag.
 */
struct PlayerControlledComponent {
};

#endif // EDITSCENE_PLAYERCONTROLLER_HPP
