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

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

// core
#include "Core/Asura.h"

// This files header
#include "Axon_Project_Behaviour.h"

// Asura
#include "Entity/PhysicalObject/Actor/AVP_ServerEntity_Actor.h"
#include "Entity/PhysicalObject/Actor/Vertebrates/AVP_ServerActor_Vertebrate.h"

// Axon
#include "Core/BrainTypes/Axon_Project_Brain.h"

//////////////////////////////////////////////////////////////////////////////
//
// Axon_Project_Behaviour
//
//////////////////////////////////////////////////////////////////////////////

Axon_Project_Behaviour::Axon_Project_Behaviour( Axon_Project_Brain* pxBrain, const u_int uType )
: PARENT( uType, pxBrain )
, m_pxParentBehaviour( NULL )
, m_iCurrentState( 0 )
, m_fStateTimer( 0.0f )
{
}

#ifndef ASURA_NO_DEBUG_OUTPUT
bool Axon_Project_Behaviour::DoVerify()
{
	if ( !Verify() ) { return false; }

	// Assuming here that we're not using the core behaviour tree-ish behaviours.
	Axon_Behaviour* pxChild = GetChild();
	while ( pxChild )
	{
		if ( Axon_Project_Brain::IsProjectBehaviourType( pxChild ) )
		{
			Axon_Project_Behaviour* pxProjectChild = static_cast< Axon_Project_Behaviour* >( pxChild );
			if ( !pxProjectChild->Verify() ) { return false; }
		}
		pxChild = pxChild->GetSibling();
	}

	return true;
}
#endif

Axon_Project_Brain* Axon_Project_Behaviour::GetProjectBrain() const
{
	return static_cast< Axon_Project_Brain* >( GetBrain() );
}

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