//////////////////////////////////////////////////////////////////////////////
//
// AVP_Behaviour_Types.h
//
// Created by NJD - 06 December 2006
//
// Copyright (C) 2006 Rebellion, All Rights Reserved.
//
//////////////////////////////////////////////////////////////////////////////

// B E G I N   F I L E   W R A P P E R ///////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
#pragma once
#endif

#ifndef __AVP_BEHAVIOUR_TYPES_H__
#define __AVP_BEHAVIOUR_TYPES_H__ 1

// E N D   F I L E   W R A P P E R ///////////////////////////////////////////

// I N C L U D E S ///////////////////////////////////////////////////////////

// axon
#include "Behaviour/BehaviourTypes/Axon_Behaviour_Types.h"

//////////////////////////////////////////////////////////////////////////////
//
// AVP_Behaviour_Types
//
//////////////////////////////////////////////////////////////////////////////

enum AVP_WeaponBehaviourTypes
{
	// Non AI or Downloadable Content
	AVP_WEAPON_BEHAVIOUR_TYPE_NONE = 0,

	// All Humanoid
	AVP_WEAPON_BEHAVIOUR_TYPE_PISTOL,

	// Marine
	AVP_WEAPON_BEHAVIOUR_TYPE_PULSERIFLE,
	AVP_WEAPON_BEHAVIOUR_TYPE_SHOTGUN,
	AVP_WEAPON_BEHAVIOUR_TYPE_FLAMETHROWER,
	AVP_WEAPON_BEHAVIOUR_TYPE_SMARTGUN,

	// Android
	AVP_WEAPON_BEHAVIOUR_TYPE_SCOPED_RIFLE,

	// Civilian
	AVP_WEAPON_BEHAVIOUR_TYPE_TASER,
	
	// Predator
	AVP_WEAPON_BEHAVIOUR_TYPE_PLASMA_CASTER,
	AVP_WEAPON_BEHAVIOUR_TYPE_SPEAR_GUN,
	AVP_WEAPON_BEHAVIOUR_TYPE_DISC,

	// must be last
	AVP_WEAPON_BEHAVIOUR_TYPE_MAX_TYPES
};

// If you create a new behaviour DO NOT forget to add it to the relevant function to determine the largest behaviour size!
enum AVP_Behaviour_Types
{
	// Alien behaviours
	AVP_BEHAVIOUR_TYPE_ALIEN_STANDARD = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC,
    AVP_BEHAVIOUR_TYPE_ALIEN_WANDER,
    AVP_BEHAVIOUR_TYPE_ALIEN_MOVEMENTWRAPPER,
    AVP_BEHAVIOUR_TYPE_ALIEN_JUMPATTACK,		// For SPSC.
    AVP_BEHAVIOUR_TYPE_ALIEN_ATTACK,
    AVP_BEHAVIOUR_TYPE_ALIEN_DISAPPEAR,
    AVP_BEHAVIOUR_TYPE_ALIEN_STANDATTACK,		// For SPSC debugging.
	AVP_BEHAVIOUR_TYPE_ALIEN_GRAPPLEPUPPET,
	AVP_BEHAVIOUR_TYPE_ALIEN_MOVEBETWEENCOVER,
    AVP_BEHAVIOUR_TYPE_ALIEN_SWARM,
	AVP_BEHAVIOUR_TYPE_ALIEN_AVOIDLIGHTTEST,	// Testing only.
	AVP_BEHAVIOUR_TYPE_ALIEN_LIGHTTEST,
	AVP_BEHAVIOUR_TYPE_ALIEN_SWARMIN,
	AVP_BEHAVIOUR_TYPE_ALIEN_ROOT,
	AVP_BEHAVIOUR_TYPE_ALIEN_STALK,
	AVP_BEHAVIOUR_TYPE_ALIEN_AMBUSH,
	AVP_BEHAVIOUR_TYPE_ALIEN_MOVEIN,
	AVP_BEHAVIOUR_TYPE_ALIEN_CYCLEROUNDIMMEDIATE,
	AVP_BEHAVIOUR_TYPE_ALIEN_CYCLEROUNDDELAYED,
	AVP_BEHAVIOUR_TYPE_ALIEN_INJURED,
	AVP_BEHAVIOUR_TYPE_ALIEN_ATTACK2,
	AVP_BEHAVIOUR_TYPE_ALIEN_HIDE_IN_SHADOWS,

    // Alien team behaviours
    AVP_BEHAVIOUR_TYPE_ALIENTEAM_UNUSED = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 1000,

	// Common Human Behaviours
	AVP_BEHAVIOUR_TYPE_HUMAN_MOVEMENT = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 1500,
	AVP_BEHAVIOUR_TYPE_HUMAN_GRAPPLE,
	AVP_BEHAVIOUR_TYPE_HUMAN_LIFT,
	AXON_BEHAVIOUR_TYPE_HUMAN_GS2NODE_ACTOR_WITH_GUNFIRE,
	AXON_BEHAVIOUR_TYPE_HUMAN_GS2SPLINE_ACTOR_WITH_GUNFIRE,

	//----------------------------------------------------------------
    // Marine & Android behaviours - DO NOT REORDER! *****************
	//----------------------------------------------------------------
	AVP_BEHAVIOUR_TYPE_MARINE = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 2000,
	AVP_BEHAVIOUR_TYPE_MARINE_TRAVEL,
	AVP_BEHAVIOUR_TYPE_MARINE_WEAPON,
	
	//----------------------------------------------------------------
	// DO NOT REORDER THE MARINE BEHAVIOURS ABOVE!!!!
	//----------------------------------------------------------------
	AVP_BEHAVIOUR_TYPE_MARINE_ALERT,
	AVP_BEHAVIOUR_TYPE_MARINE_ATTACK,
	AVP_BEHAVIOUR_TYPE_MARINE_SQUADLEADER,
	AVP_BEHAVIOUR_TYPE_MARINE_SQUADMEMBER,
	AVP_BEHAVIOUR_TYPE_MARINE_GRAPPLE,
	AVP_BEHAVIOUR_TYPE_MARINE_INCOVER,
	AVP_BEHAVIOUR_TYPE_MARINE_PATROL,
	AVP_BEHAVIOUR_TYPE_MARINE_INVESTIGATE,
	AVP_BEHAVIOUR_TYPE_MARINE_TESTBEHAVIOUR,
	AVP_BEHAVIOUR_TYPE_MARINE_MELEE_COUNTER,
	AVP_BEHAVIOUR_TYPE_MARINE_POSITIONEVALUATION,
	AVP_BEHAVIOUR_TYPE_GS2_MARINE_NODE_COMBAT,
	AVP_BEHAVIOUR_TYPE_MARINE_HIDEFROMCLOAKEDPREDATOR,
	AVP_BEHAVIOUR_TYPE_MARINE_HANDLEOBJECTIVE,
	AVP_BEHAVIOUR_TYPE_MARINE_ATTACK_SELECTOR,
	AVP_BEHAVIOUR_TYPE_MARINE_ATTACK_ADVANCE,
	AVP_BEHAVIOUR_TYPE_MARINE_ATTACK_FALLBACK,
	AVP_BEHAVIOUR_TYPE_MARINE_ATTACK_SMARTGUN,
	AVP_BEHAVIOUR_TYPE_MARINE_ATTACK_SUPPORT,
	AVP_BEHAVIOUR_TYPE_MARINE_ATTACK_STANDGROUND,
	AVP_BEHAVIOUR_TYPE_MARINE_ATTACK_TRAVELLING,
	AVP_BEHAVIOUR_TYPE_MARINE_MELEE_PLAYER,
	AVP_BEHAVIOUR_TYPE_GS2_MARINE_NODE_LOOKAT,
	AVP_BEHAVIOUR_TYPE_MARINE_INJURED,
	AVP_BEHAVIOUR_TYPE_MARINE_TEQUIILACARRIED,
	AVP_BEHAVIOUR_TYPE_GS2_MARINE_SPLINE_COMBAT,
	AVP_BEHAVIOUR_TYPE_MARINE_MAX_BEHAVIOURS,	// <---- MUST BE LAST IN THE MARINE BEHAVIOUR SECTION
	//----------------------------------------------------------------

    // Predator Behaviours
	AVP_BEHAVIOUR_TYPE_PREDATOR = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 3000,
	AVP_BEHAVIOUR_TYPE_PREDATOR_MOVEMENT,
	AVP_BEHAVIOUR_TYPE_PREDATOR_POINTANDSHOOT,
	AVP_BEHAVIOUR_TYPE_PREDATOR_TEST,
	AVP_BEHAVIOUR_TYPE_PREDATOR_GS2MOVE,
	AVP_BEHAVIOUR_TYPE_PREDATOR_STALKING,
	AVP_BEHAVIOUR_TYPE_PREDATOR_SNEAKING,
	AVP_BEHAVIOUR_TYPE_PREDATOR_SEEKING,
	AVP_BEHAVIOUR_TYPE_PREDATOR_AT_VENTAGE_POINT,
	AVP_BEHAVIOUR_TYPE_PREDATOR_FLEE,
	AVP_BEHAVIOUR_TYPE_PREDATOR_MELEE,
	AVP_BEHAVIOUR_TYPE_PREDATOR_TESTBEHAVIOUR,

	// Civilian Behaviours
	AVP_BEHAVIOUR_TYPE_CIVILIAN = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 4000,
	AVP_BEHAVIOUR_TYPE_CIVILIAN_ALERT,
	AVP_BEHAVIOUR_TYPE_CIVILIAN_PATROL,
	AVP_BEHAVIOUR_TYPE_CIVILIAN_PANIC,
	AVP_BEHAVIOUR_TYPE_CIVILIAN_WANDER,
	AVP_BEHAVIOUR_TYPE_CIVILIAN_ATTACK,

	// Face Hugger Behaviours
	AVP_BEHAVIOUR_TYPE_FACEHUGGER = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 5000,
	AVP_BEHAVIOUR_TYPE_FACEHUGGER_WANDER,
	AVP_BEHAVIOUR_TYPE_FACEHUGGER_MOVETOPREY,
	AVP_BEHAVIOUR_TYPE_FACEHUGGER_ATTACKPREY,
	AVP_BEHAVIOUR_TYPE_FACEHUGGER_ATTACK,
	AVP_BEHAVIOUR_TYPE_FACEHUGGER_MOVEMENT,
	AVP_BEHAVIOUR_TYPE_FACEHUGGER_RETURN_HOME,
	AVP_BEHAVIOUR_TYPE_FACEHUGGER_PET,
	AVP_BEHAVIOUR_TYPE_FACEHUGGER_GS2_MOVEMENT,
	AVP_BEHAVIOUR_TYPE_FACEHUGGER_HIDE_IN_SHADOWS,
		
    // Shared Behaviours
	AVP_BEHAVIOUR_TYPE_GS2_NODE_ROUTETRAVERSE = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 6000,
	AVP_BEHAVIOUR_TYPE_GS2_NODE_ANIMMESSAGES,

	// Sentrygun Behaviours
	AVP_BEHAVIOUR_TYPE_SENTRYGUN = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 7000,

	// Dropship Behaviours
	AVP_BEHAVIOUR_TYPE_DROPSHIP = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 8000,
	AVP_BEHAVIOUR_TYPE_DROPSHIP_MOVEMENT,
	AVP_BEHAVIOUR_TYPE_DROPSHIP_FIRE_MISSILES,

    // AlienQueen Behaviours
    AVP_BEHAVIOUR_TYPE_ALIENQUEEN = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 9000,
	AVP_BEHAVIOUR_TYPE_ALIENQUEEN_MOVEMENT,
	AVP_BEHAVIOUR_TYPE_ALIENQUEEN_WANDER,
	AVP_BEHAVIOUR_TYPE_ALIENQUEEN_STALK,
	AVP_BEHAVIOUR_TYPE_ALIENQUEEN_ATTACK,
	AVP_BEHAVIOUR_TYPE_ALIENQUEEN_GS2MOVE,
	AVP_BEHAVIOUR_TYPE_ALIENQUEEN_STUNNED,
	AVP_BEHAVIOUR_TYPE_ALIENQUEEN_FORCEDROAR,

	AVP_BEHAVIOUR_TYPE_PREDALIEN = AXON_BEHAVIOUR_TYPE_FIRST_PROJECT_SPECIFIC + 10000,
	AVP_BEHAVIOUR_TYPE_PREDALIEN_MOVEMENT,
	AVP_BEHAVIOUR_TYPE_PREDALIEN_TEST,
	AVP_BEHAVIOUR_TYPE_PREDALIEN_GS2MOVE
};

enum AVP_BehaviourSet_IDs
{
	// Ordinarily this would be FIRST = AXON_BS_ID_FIRST_PROJECT_SPECIFIC,
	// then sequential after that, but this enum was added late and the values
	// were already established.

	AVP_BS_ID_NODE_MARINE_COMBAT  = 3014,
	AVP_BS_ID_NODE_MARINE_LOOK_AT = 3025,
	AVP_BS_ID_NODE_ROUTE_TRAVERSE = 7000,
	AVP_BS_ID_SPLINE_MARINE_COMBAT = 3028,
	AVP_BS_ID_NODE_ANIMMESSAGES = 7001,
	// new behaviour set IDs can simply follow on sequentially

	AVP_BS_ID_NODE_HUMAN_GS2_ACTOR_WITH_GUNFIRE = 7002,
	AVP_BS_ID_SPLINE_HUMAN_GS2_ACTOR_WITH_GUNFIRE = 7003
};

//////////////////////////////////////////////////////////////////////////////
//
// 
//
//////////////////////////////////////////////////////////////////////////////

#endif //__AVP_BEHAVIOUR_TYPES_H__
