
///////////////////////////////////////////////////////////////////////////////
//
// File   : Asura_Handler_System_Callbacks_PS2.cpp
// Author : Paul Cardy
// Date   : 01-Feb-2008
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////

#include "Core/Asura.h"

#if defined(ASURA_USE_MULTIPLE_HANDLERS)

// This file's header...
#include "Core/Handlers/Asura_Handler_System_Callbacks_PS2.h"

// Asura independent header-files...
#include "Core/Handlers/Asura_Handler_System.h"

// Asura platform header-files...
#include "Animation/Asura_PS2_Hierarchy.h"
#include "Mesh/Asura_PS2_Env_Store.h"
#include "Rendering/Asura_PS2_Object_System.h"


////////////////////////////////////////////////////////////////////////////////
// Constant declarations...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Static variable declarations...
////////////////////////////////////////////////////////////////////////////////

// Creating a single instance forces registration with the "Asura_Handler_System"...
static Asura_Handler_System_Callbacks_PS2	s_xPlatformHandlerSystemCallbacks;


////////////////////////////////////////////////////////////////////////////////
// Private functions...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Protected functions...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Public functions...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::Asura_Handler_System_Callbacks_PS2
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

Asura_Handler_System_Callbacks_PS2::Asura_Handler_System_Callbacks_PS2(void)
{
	Asura_Handler_System::RegisterPlatformCallbacks(this);
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::Asura_Handler_System_Callbacks_PS2'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::CreateHandlerData
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

bool Asura_Handler_System_Callbacks_PS2::CreateHandlerData(u_int& uHandlerIndex, 
														  const Asura_Hash_ID uHandlerHash,
														  const u_int uDataIndex,
														  const char* szName,
														  const Asura_Hash_ID uParentHandlerHash)
{
	const u_int	uIndex	= Asura_Handler_System::GetIndexWithGroup(uHandlerIndex);

	switch(uIndex)
	{
		case 0:
		{
			Asura_PS2_Object_System::CreateAndSetHandler( uHandlerHash, uParentHandlerHash );
			uHandlerIndex++;
			return(true);
		}

		case 1:
		{
			Asura_PS2_SkinSystem::CreateAndSetHandler( uHandlerHash, uParentHandlerHash );
			uHandlerIndex++;
			return(false);
		}

		default:
		{
			Asura_Assert(false, "Unexpected index for sub-system handler to be created.");
			return(false);
		}
	}		// End of switch.
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::CreateHandlerData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::DestroyHandlerData
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

bool Asura_Handler_System_Callbacks_PS2::DestroyHandlerData(u_int& uHandlerIndex,
														   const Asura_Hash_ID uHandlerHash,
														   const u_int uDataIndex)
{
	const u_int	uIndex	= Asura_Handler_System::GetIndexWithGroup(uHandlerIndex);

	switch(uIndex)
	{
		case 0:
		{
			Asura_PS2_Object_System::DestroyHandler(uHandlerHash);
			uHandlerIndex++;
			return(true);
		}

		case 1:
		{
			Asura_PS2_SkinSystem::DestroyHandler(uHandlerHash);
			uHandlerIndex++;
			return(false);
		}

		default:
		{
			Asura_Assert(false, "Unexpected index for sub-system handler to be destroyed.");
			return(false);
		}
	}		// End of switch.
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::DestroyHandlerData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::ReparentAllHandlerData
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

void Asura_Handler_System_Callbacks_PS2::ReparentAllHandlerData(const Asura_Hash_ID uHandlerHash,
															   const Asura_Hash_ID uParentHandlerHash)
{
	// Set all the render data...
	Asura_PS2_Object_System::ReparentHandler(uHandlerHash, uParentHandlerHash);
	Asura_PS2_SkinSystem::ReparentHandler(uHandlerHash, uParentHandlerHash);
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::ReparentAllHandlerData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::SetAllHandlerData
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

void Asura_Handler_System_Callbacks_PS2::SetAllHandlerData(const Asura_Hash_ID uHandlerHash,
														  const u_int uDataIndex)
{
	// SetAll the render data...
	Asura_PS2_SkinSystem::SetCurrentHandler(uHandlerHash);
	Asura_PS2_Object_System::SetCurrentHandler(uHandlerHash);
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::SetAllHandlerData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::CreateZoneData
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

bool Asura_Handler_System_Callbacks_PS2::CreateZoneData(u_int& uHandlerIndex, 
													   const Asura_Hash_ID uHandlerHash,
													   const u_int uDataIndex,
													   const char* szName,
													   const Asura_Hash_ID uParentHandlerHash,
													   const Asura_Hash_ID uZoneHash,
													   const bool bAllowEnvironment)
{
	return(false); //No platform specific systems support zones on PS2 as yet
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::CreateZoneData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::DestroyZoneData
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

bool Asura_Handler_System_Callbacks_PS2::DestroyZoneData(u_int& uHandlerIndex,
														const Asura_Hash_ID uHandlerHash,
														const u_int uDataIndex,
														const bool bAllowEnvironment)
{
	const u_int	uIndex	= Asura_Handler_System::GetIndexWithGroup(uHandlerIndex);

	switch(uIndex)
	{
		case 0:
		{
			if(bAllowEnvironment)
			{
				Asura_PS2_Env_Store::Reset();
			}
			return(false);
		}

		default:
		{
			Asura_Assert(false, "Unexpected index for sub-system handler to be destroyed.");
			return(false);
		}
	}		// End of switch.
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::DestroyZoneData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::ReparentAllZoneData
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

void Asura_Handler_System_Callbacks_PS2::ReparentAllZoneData(const Asura_Hash_ID uHandlerHash,
															const Asura_Hash_ID uParentHandlerHash)
{
	return; //No platform specific systems support zones on PS2 as yet
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::ReparentAllZoneData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::SetAllZoneData
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

void Asura_Handler_System_Callbacks_PS2::SetAllZoneData(const Asura_Hash_ID uHandlerHash,
													   const u_int uDataIndex,
													   const bool bAllowEnvironment)
{
	return; //No platform specific systems support zones on PS2 as yet
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::SetAllZoneData'. ///


#if defined(ASURA_LOGFILES_ENABLED)

////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Handler_System_Callbacks_PS2::CreateReport
// Author       : Paul Cardy
// Date         : 01-Feb-2008
////////////////////////////////////////////////////////////////////////////////

void Asura_Handler_System_Callbacks_PS2::CreateReport(const Asura_Hash_ID uHandlerHash,
													 Asura_Stream& xOutputStream)
{
	Asura_PS2_Object_System::WriteHandlerReport( uHandlerHash, xOutputStream );
	Asura_PS2_SkinSystem::WriteHandlerReport( uHandlerHash, xOutputStream );
}

/// End of function 'Asura_Handler_System_Callbacks_PS2::CreateReport'. ///

#endif	//defined(ASURA_LOGFILES_ENABLED)

#endif	//defined(ASURA_USE_MULTIPLE_HANDLERS)


/// End of file. ///
