//////////////////////////////////////////////////////////////////////////////
//
// Tools_Project_Entity_Object.cpp
//
// Copyright (c) 2006 Rebellion. All rights reserved.
//
//////////////////////////////////////////////////////////////////////////////

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

#include "Core/Asura.h"

// Project.
#include "Entity/AVP_Entity_Classification.h"

// Tools.
#include "Entity/Tools_Entity_Object.h"
#include "Entity/Tools_Entity_CountedVolumeTrigger.h"

// Project tools.
#include "Entity/Tools_Project_Entity_CheckPointNode.h"
#include "Entity/CameraVolume/ToolsAVP_Entity_CameraVolume.h"
#include "Entity/Controller/ToolsAVP_Entity_AlienTeam.h"
#include "Entity/Controller/ToolsAVP_Entity_MarineSquad.h"
#include "Entity/Controller/ToolsAVP_Entity_MarineTeam.h"
#include "Entity/Controller/ToolsAVP_Entity_Squad_Alien.h"
#include "Entity/Controller/ToolsAVP_Entity_Squad_FaceHugger.h"
#include "Entity/GameMode/ToolsAVP_Entity_GameMode.h"
#include "Entity/GamePlayVolume/ToolsAVP_Entity_GamePlayVolume.h"
#include "Entity/Locations/FleePoint/ToolsAVP_Node_FleePoint.h"
#include "Entity/Locations/FormationPoint/ToolsAVP_Node_FormationPoint.h"
#include "Entity/Locations/GuardZone/ToolsAVP_Node_GuardZone.h"
#include "Entity/Locations/LookAt/ToolsAVP_Entity_LookAt.h"
#include "Entity/Locations/Objective/ToolsAVP_Node_Objective.h"
#include "Entity/Locations/Objective/Marine/ToolsAVP_Node_Objective_Marine.h"
#include "Entity/Locations/OrientedNode/ToolsAVP_Node_OrientedNode.h"
#include "Entity/Locations/OrientedNode/CoverpointNode/ToolsAVP_Entity_CoverpointNode.h"
#include "Entity/Locations/OrientedNode/GamesceneNode/ToolsAVP_Node_GS2Node.h"
#include "Entity/Locations/OrientedNode/GamesceneNode/AttractorNode/ToolsAVP_Node_GS2Attractor.h"
#include "Entity/ObjectiveSystem/RoomNode/ToolsAVP_Entity_RoomNode.h"
#include "Entity/Locations/ShootAt/ToolsAVP_Entity_ShootAt.h"
#include "Entity/Locations/Spline/GamesceneSpline/ToolsAVP_Node_GS2Spline.h"
#include "Entity/Locations/VantagePoint/ToolsAVP_Node_VantagePoint_Predator.h"
#include "Entity/MotionTrackerBlip/ToolsAVP_Entity_MotionTrackerBlip.h"
#include "Entity/ObjectiveSystem/PlayerObjective/ToolsAVP_Entity_LocationMarker.h"
#include "Entity/ObjectiveSystem/PlayerObjective/ToolsAVP_Entity_PlayerObjective.h"
#include "Entity/PhysicalObject/ToolsAVP_Entity_PhysicalObject.h"
#include "Entity/PhysicalObject/Actor/Vehicles/Dropship/ToolsAVP_Entity_Dropship.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/Alien/ToolsAVP_Entity_Alien.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/Alien/ToolsAVP_Entity_AlienQueen.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/Alien/ToolsAVP_Entity_FaceHugger.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/Human/ToolsAVP_Entity_Android.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/Human/ToolsAVP_Entity_Civilian.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/Human/ToolsAVP_Entity_Human.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/Human/ToolsAVP_Entity_Marine.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/Predator/ToolsAVP_Entity_Predator.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/Predator/ToolsAVP_Entity_Predalien.h"
#include "Entity/PhysicalObject/Actor/Weapons/Sentrygun/ToolsAVP_Entity_Sentrygun.h"
#include "Entity/PhysicalObject/CommandPost/ToolsAVP_Entity_CommandPost.h"
#include "Entity/PhysicalObject/Interact/PredatorLock/ToolsAVP_Entity_InteractPredatorLock.h"
#include "Entity/PhysicalObject/Interact/ToolsAVP_Entity_InteractObject.h"
#include "Entity/PhysicalObject/Interact/InvisiSwitch/ToolsAVP_Entity_InteractInvisiSwitch.h"
#include "Entity/PhysicalObject/Interact/ToolReceptacle/ToolsAVP_Entity_InteractToolReceptacle.h"
#include "Entity/PhysicalObject/Interact/ToolReceptacle/BatteryReceptacle/ToolsAVP_Entity_InteractBatteryReceptacle.h"
#include "Entity/PhysicalObject/Interact/ToolReceptacle/HackingPoint/ToolsAVP_Entity_InteractHackingPoint.h"
#include "Entity/PhysicalObject/Interact/ToolReceptacle/RetinalScanner/ToolsAVP_Entity_InteractRetinalScanner.h"
#include "Entity/PhysicalObject/Lift/ToolsAVP_Entity_Lift.h"
#include "Entity/PhysicalObject/PhysicsObject/ToolsAVP_Entity_PhysicsObject.h"
#include "Entity/PhysicalObject/PhysicsObject/DamageableObject/ToolsAVP_Entity_DamageableObject.h"
#include "Entity/PhysicalObject/Pickup/ToolsAVP_Entity_Pickup.h"
#include "Entity/PlayerProxy/ToolsAVP_Entity_PlayerProxy.h"
#include "Entity/Spawners/ToolsAVP_Entity_SpawnController.h"
#include "Entity/Spawners/ToolsAVP_Entity_SpawnPoint.h"
#include "Entity/Spawners/ToolsAVP_Entity_SpawnPoint2.h"
#include "Entity/Spawners/ToolsAVP_Entity_StartPoint.h"
#include "Entity/Spawners/Alien/ToolsAVP_Entity_AlienSpawnPoint.h"
#include "Entity/Spawners/Human/ToolsAVP_Entity_HumanSpawnPoint.h"
#include "Entity/Triggers/ToolsAVP_Entity_AdvancedVolumeTrigger.h"
#include "Entity/Triggers/ToolsAVP_Entity_InteractionTrigger.h"
#include "Entity/Triggers/ToolsAVP_Entity_MultiDamageVolume.h"
#include "Entity/Triggers/ToolsAVP_Entity_VolumeTrigger.h"
#include "Entity/Triggers/ToolsAVP_Entity_WaypointBlockerVolume.h"
#include "Entity/Vent/ToolsAVP_Entity_Vent.h"
// C L A S S   I M P L E M E N T A T I O N S /////////////////////////////////

//
// Tools_Entity_Object
//

bool Tools_Entity_Object::Project_CreateToolsEntityObject( Asura_Entity* pxEntity )
{
    if( !pxEntity ) { return false; }

    switch( pxEntity->GetClassification() )
    {
		case AsuraEntityClass_AdvancedVolumeTrigger:
			ToolsAVP_Entity_AdvancedVolumeTrigger::Create(pxEntity);
			return(true);

        case AsuraEntityClass_PhysicsObject:
            ToolsAVP_Entity_PhysicsObject::Create( pxEntity );
            return true;

		case AsuraEntityClass_Lift:
			ToolsAVP_Entity_Lift::Create( pxEntity );
			return true;

		case AsuraEntityClass_MultiDamageVolume:
			ToolsAVP_Entity_MultiDamageVolume::Create(pxEntity);
			return(true);

		case AsuraEntityClass_StartPoint:
			new ToolsAVP_Entity_StartPoint(pxEntity);
			return(true);

		case AsuraEntityClass_VolumeTrigger:
			ToolsAVP_Entity_VolumeTrigger::Create(pxEntity);
			return(true);

		case AsuraEntityClass_CountedVolumeTrigger:
			new Tools_Entity_CountedVolumeTrigger(pxEntity);
			return(true);

		case AVP_ENTITYCLASS_INTERACTIONTRIGGER:
			ToolsAVP_Entity_InteractionTrigger::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_SPAWNPOINT:
			ToolsAVP_Entity_SpawnPoint::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_ALIENSPAWNPOINT:
			ToolsAVP_Entity_AlienSpawnPoint::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_HUMANSPAWNPOINT:
			ToolsAVP_Entity_HumanSpawnPoint::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_GAMEPLAYVOLUME:
			ToolsAVP_Entity_GamePlayVolume::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_ORIENTEDNODE:
		//case AsuraEntityClass_OrientedNode:
			ToolsAVP_Node_OrientedNode::Create(pxEntity);
			return true;

		case AVP_ENTITYCLASS_GUARDZONE:
		//case AsuraEntityClass_GuardZone:
			ToolsAVP_Node_GuardZone::Create(pxEntity);
			return true;

		case AVP_ENTITYCLASS_PREDATOR:
            ToolsAVP_Entity_Predator::Create( pxEntity );
            return true;

		case AVP_ENTITYCLASS_PREDALIEN:
			ToolsAVP_Entity_Predalien::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_ALIEN:
            ToolsAVP_Entity_Alien::Create( pxEntity );
            return true;	

		case AVP_ENTITYCLASS_ALIENQUEEN:
            ToolsAVP_Entity_AlienQueen::Create( pxEntity );
            return true;	

		case AVP_ENTITYCLASS_DROPSHIP:
			ToolsAVP_Entity_Dropship::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_ALIENFACEHUGGER:
            ToolsAVP_Entity_FaceHugger::Create( pxEntity );
            return true;

		case AVP_ENTITYCLASS_ANDROID:
			ToolsAVP_Entity_Android::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_CIVILIAN:
			ToolsAVP_Entity_Civilian::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_HUMAN:
		case AVP_ENTITYCLASS_MARINE:
			ToolsAVP_Entity_Marine::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_DAMAGEABLEOBJECT:
			ToolsAVP_Entity_DamageableObject::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_INTERACTOBJECT:
			ToolsAVP_Entity_InteractObject::Create(pxEntity);
			return true;

#ifdef ASURA_USE_CAMERA_VOLUME
		case AsuraEntityClass_CameraVolume:
			ToolsAVP_Entity_CameraVolume::Create( pxEntity );
			return true;
#endif //ASURA_USE_CAMERA_VOLUME

		case AVP_ENTITYCLASS_CHECKPOINTNODE:
			new Tools_Project_Entity_CheckPointNode(pxEntity);
			return true;

        case AVP_ENTITYCLASS_ALIENTEAM:
            ToolsAVP_Entity_AlienTeam::Create( pxEntity );
            return true;

		case AVP_ENTITYCLASS_MARINESQUAD:
			ToolsAVP_Entity_MarineSquad::Create(pxEntity);
			return true;

        case AVP_ENTITYCLASS_MARINETEAM:
            ToolsAVP_Entity_MarineTeam::Create( pxEntity );
            return true;

		case AVP_ENTITYCLASS_LOOKAT:
			ToolsAVP_Entity_LookAt::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_COVERPOINT:
			ToolsAVP_Entity_CoverpointNode::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_FORMATIONPOINT:
			ToolsAVP_Node_FormationPoint::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_FLEEPOINT:
			ToolsAVP_Node_FleePoint::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_VANTAGEPOINT_PREDATOR:
			new ToolsAVP_Node_VantagePoint_Predator( pxEntity );
			return true;

		case AVP_ENTITYCLASS_AI_OBJECTIVE:
			ToolsAVP_Node_Objective::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_AI_MARINE_OBJECTIVE:
			ToolsAVP_Node_Objective_Marine::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_VENT:
			ToolsAVP_Entity_Vent::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_GS2NODE:
			ToolsAVP_Node_GS2Node::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_GS2ATTRACTOR:
			ToolsAVP_Node_GS2Attractor::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_GS2SPLINE:
			ToolsAVP_Node_GS2Spline::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_SPAWNCONTROLLER:
			ToolsAVP_Entity_SpawnController::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_SPAWNPOINT2:
			ToolsAVP_Entity_SpawnPoint2::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_ALIENSQUAD:
			ToolsAVP_Entity_Squad_Alien::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_SENTRYGUN:
			ToolsAVP_Entity_Sentrygun::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_GAMEMODE:
			ToolsAVP_Entity_GameMode::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_FACEHUGGERSQUAD:
			ToolsAVP_Entity_Squad_FaceHugger::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_PICKUP:
			ToolsAVP_Entity_Pickup::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_SHOOTAT:
			ToolsAVP_Entity_ShootAt::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_PLAYER_OBJECTIVE:
			ToolsAVP_Entity_PlayerObjective::Create( pxEntity );
			return true;
	
		case AVP_ENTITYCLASS_INTERACT_PREDATOR_LOCK:
			ToolsAVP_Entity_InteractPredatorLock::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_INTERACT_BATTERY_RECEPTACLE:
			ToolsAVP_Entity_InteractBatteryReceptacle::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_INTERACT_HACKING_POINT:
			ToolsAVP_Entity_InteractHackingPoint::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_INTERACT_SENTRYGUN_INVISISWITCH:
			ToolsAVP_Entity_InteractInvisiSwitch::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_INTERACT_RETINAL_SCANNER:
			ToolsAVP_Entity_InteractRetinalScanner::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_COMMANDPOST:
			ToolsAVP_Entity_CommandPost::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_ROOMNODE:
			ToolsAVP_Entity_RoomNode::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_MOTIONTRACKERBLIP:
			ToolsAVP_Entity_MotionTrackerBlip::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_PLAYER_PROXY:
			ToolsAVP_Entity_PlayerProxy::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_LOCATIONMARKER:
			ToolsAVP_Entity_LocationMarker::Create( pxEntity );
			return true;

		case AVP_ENTITYCLASS_WAYPOINTBLOCKERVOLUME:
			ToolsAVP_Entity_WaypointBlockerVolume::Create( pxEntity );
			return true;
		

		default:
            break;
    }

    return false;
}
