#ifndef BOTTYPES_H
#define BOTTYPES_H
/*
created by harSens to fix up linux compilation with the bot code, feel free to change this
*/
typedef enum 
{
	TaskPowerup = 0,
	TaskTeleport,
	TaskBlock,
	TaskKickEnemy,
	TaskCounterMelee,
	TaskCombat,
	TaskNormalMovement,
	TaskSwoop,
	TaskFinishMelee,
	TaskPowerstruggle,
	TaskAscend,
	TaskBlinded,
	TaskCombo,
	TaskChargeAttack,
	TaskControlFriezaDisc,
	TaskControlBeam,
	TaskLookAround,
	TaskRecoverHP,
	TaskWallJump,
	TaskKameTorp,
	TaskIdle,
	TaskRecoverMelee,
	TaskBeamJump,
	TaskNormalJump,
	TaskShootCandy,
	TaskShootScatterShots,
	TaskShootNonChargeble,
	TaskDB,
	TaskJumpOffGround,
	TaskHuntEnemy,
	TaskGetSensu,
	TaskGetCandy,
	TaskHeadToGoal,

	// for sbots
	TaskShootLaser1,
	TaskDrainEnts,
	TaskAbsorbHealth,

	TaskNone
} ETaskCode;

typedef enum
{
	// Types to make a swoop
	COMBO_TYPE_LEFT_SWOOP,
	COMBO_TYPE_RIGHT_SWOOP,
	COMBO_TYPE_FORWARD_SWOOP,
	COMBO_TYPE_BACKWARD_SWOOP,
	COMBO_TYPE_UP_SWOOP,
	COMBO_TYPE_DOWN_SWOOP,

	COMBO_TYPE_TELE_ATTACK, // First teleport a few times then attack with chargeble
	COMBO_TYPE_TELE_ATTACK2, // First teleport a few times then attack with non-chargeble

	COMBO_TYPE_FALL_POWERUP, // First fall down for a while, then powerup
	COMBO_TYPE_FALL_ASCEND, // First fall down for a while, then ascend

	COMBO_TYPE_MULTI_TELEPORT, // Teleport a few times, used when the bot is in really danger.

	// Teleport melee types; bot teleports 1-2 times and then swoop to his enemy right away
	COMBO_TYPE_TELE_LEFT_BACK_MELEE,
	COMBO_TYPE_TELE_RIGHT_BACK_MELEE,
	COMBO_TYPE_TELE_BACK_MELEE,
	COMBO_TYPE_TELE_LEFT_MELEE,
	COMBO_TYPE_TELE_RIGHT_MELEE,
	COMBO_TYPE_TELE_UP_MELEE,
	COMBO_TYPE_TELE_DOWN_MELEE,
	COMBO_TYPE_TELE_FORWARD_LEFT_MELEE,
	COMBO_TYPE_TELE_FORWARD_RIGHT_MELEE,

	COMBO_TYPE_TELE_KICK, // Teleport to enemy and try to kick him/her

	// Teleport a few times forward to get behind the enemy, then swoop to him
	COMBO_TYPE_TELE_BEHIND_SWOOP,
	// Swoop to get near to enemy, then stop swooping and teleport to get behind enemy,
	// then swoop again
	COMBO_TYPE_SWOOP_TELE_SWOOP,

	COMBO_TYPE_TELE_FORWARD_SWOOP, // Teleport forward to get in front of the enemy, then swoop
	COMBO_TYPE_TELE_FORWARD_SWOOP_AIM, // Teleport sideays and keep aiming, to confuse enemy, then swoop

	COMBO_TYPE_POWERUP_SWOOP, // First powerup then forward swoop
	COMBO_TYPE_POWERUP_ATTACK, // First powerup then attack with chargeble
	COMBO_TYPE_POWERUP_ATTACK2, // First powerup then attack with non-chargeble(ie laser)

	COMBO_TYPE_CHARGE_GBALL_SWOOP, // Charge a weak generic ball then swoop right away

	// Chain swoop to avoid attack, then chain swoop again to attack
	COMBO_TYPE_LEFT_AVOID_ATTACK_SWOOP,
	COMBO_TYPE_RIGHT_AVOID_ATTACK_SWOOP,
	COMBO_TYPE_UP_AVOID_ATTACK_SWOOP,
	COMBO_TYPE_DOWN_AVOID_ATTACK_SWOOP,

	// After forward swoop chain swoop for a short time left/right/up/down and 
	// then forward swoop again
	COMBO_TYPE_LEFT_ATTACK_CHAINSWOOP,
	COMBO_TYPE_RIGHT_ATTACK_CHAINSWOOP,
	COMBO_TYPE_UP_ATTACK_CHAINSWOOP,
	COMBO_TYPE_DOWN_ATTACK_CHAINSWOOP,

	COMBO_TYPE_TELE_POWERUP, // Teleport away, then powerup

	COMBO_TYPE_NONE
} EComboType;

typedef enum
{
	BOTTEACHER_ROSHI=0,
	BOTTEACHER_KINGKAI
} EBotTeacherType;

typedef enum 
{
	NOT_STARTED,
	BUSY,
	DONE
} EState;

#endif