
///////////////////////////////////////////////////////////////////////////////
//
// File   : Asura_Platform_Streaming_System.cpp
// Author : Andy Tate
// Date   : 27-Mar-2006
//
// Copyright (C) 2006 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

// RJT NOTE: Required for GCC builds as the file list generation doesn't account for VC project exclusion from build
#ifdef ASURA_USE_STREAMING

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

#include "Core/Asura.h"

// This file's header...
#include "Streaming/Asura_Streaming_SubsystemHandlers.h"

// Asura independent header-files...

// Asura platform header-files...
#include "Rendering/Asura_PSP_CharacterRenderer.h"
#include "Rendering/Asura_PSP_ObjectRenderer.h"
#include "Rendering/Asura_PSP_ObjectHierarchyRenderer.h"
#include "Rendering/Asura_PSP_RenderEnvironment.h"

// Game independent header-files...

// Game platform header-files...

// Tools header-files...


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


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


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

////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Streaming_SubsystemHandlers::Platform_CreateHandlerData
// Author       : Andy Tate
// Date         : 24-Mar-2006
////////////////////////////////////////////////////////////////////////////////

bool Asura_Streaming_SubsystemHandlers::Platform_CreateHandlerData (u_int& uHandlerIndex,
																	const Asura_Hash_ID uHandlerHash,
																	const u_int uDataIndex,
																	const char* szName,
																	const Asura_Hash_ID uParentHandlerHash)
{
	// What about platform-specific handlers?
	switch(uHandlerIndex)
	{
		case BEGIN_PLATFORM_HANDLER_INDEX + 0:
		{
			Asura_PSP_CharacterRenderer::CreateAndSetHandler(uHandlerHash, uParentHandlerHash);
			uHandlerIndex++;
			return(true);
		}

		case BEGIN_PLATFORM_HANDLER_INDEX + 1:
		{
			Asura_PSP_ObjectRenderer::CreateAndSetHandler(uHandlerHash, uParentHandlerHash);
			uHandlerIndex++;
			return(true);
		}

		case BEGIN_PLATFORM_HANDLER_INDEX + 2:
		{
			Asura_PSP_ObjectHierarchyRenderer::CreateAndSetHandler(uHandlerHash, uParentHandlerHash);
			uHandlerIndex	= END_PLATFORM_HANDLER_INDEX;
			return(true);
		}

		default:
		{
			return(false);
		}
	}		// End of switch.
}

/// End of function 'Asura_Streaming_SubsystemHandlers::Platform_CreateHandlerData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Streaming_SubsystemHandlers::Platform_CreateZoneData
// Author       : Andy Tate
// Date         : 24-Mar-2006
////////////////////////////////////////////////////////////////////////////////

bool Asura_Streaming_SubsystemHandlers::Platform_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)
{
	// What about platform-specific zone-handlers?
	switch(uHandlerIndex)
	{
		case BEGIN_PLATFORM_ZONE_INDEX + 0:
		{
			if(bAllowEnvironment)
			{
				Asura_PSP_RenderEnvironment::CreateAndSetZone(uHandlerHash);
			}
			uHandlerIndex	= END_PLATFORM_ZONE_INDEX;
			return(true);
		}

		default:
		{
			return(false);
		}
	}		// End of switch.
}

/// End of function 'Asura_Streaming_SubsystemHandlers::Platform_CreateZoneData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Streaming_SubsystemHandlers::Platform_DestroyHandlerData
// Author       : Andy Tate
// Date         : 24-Mar-2006
////////////////////////////////////////////////////////////////////////////////

bool Asura_Streaming_SubsystemHandlers::Platform_DestroyHandlerData (u_int& uHandlerIndex,
																	 const Asura_Hash_ID uHandlerHash,
																	 const u_int uDataIndex)
{
	// What about platform-specific handlers?
	switch(uHandlerIndex)
	{
		case BEGIN_PLATFORM_HANDLER_INDEX + 0:
		{
			Asura_PSP_CharacterRenderer::DestroyHandler(uHandlerHash);
			uHandlerIndex++;
			return(true);
		}

		case BEGIN_PLATFORM_HANDLER_INDEX + 1:
		{
			Asura_PSP_ObjectRenderer::DestroyHandler(uHandlerHash);
			uHandlerIndex++;
			return(true);
		}

		case BEGIN_PLATFORM_HANDLER_INDEX + 2:
		{
			Asura_PSP_ObjectHierarchyRenderer::DestroyHandler(uHandlerHash);
			uHandlerIndex	= END_PLATFORM_HANDLER_INDEX;
			return(true);
		}

		default:
		{
			return(false);
		}
	}		// End of switch.
}

/// End of function 'Asura_Streaming_SubsystemHandlers::Platform_DestroyData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Streaming_SubsystemHandlers::Platform_DestroyZoneData
// Author       : Andy Tate
// Date         : 24-Mar-2006
////////////////////////////////////////////////////////////////////////////////

bool Asura_Streaming_SubsystemHandlers::Platform_DestroyZoneData (u_int& uHandlerIndex,
																  const Asura_Hash_ID uHandlerHash,
																  const u_int uDataIndex,
																  const bool bAllowEnvironment)
{
	// What about platform-specific zone-handlers?
	switch(uHandlerIndex)
	{
		case BEGIN_PLATFORM_ZONE_INDEX + 0:
		{
			if(bAllowEnvironment)
			{
				Asura_PSP_RenderEnvironment::DestroyZone(uHandlerHash);
			}
			uHandlerIndex	= END_PLATFORM_ZONE_INDEX;
			return(true);
		}

		default:
		{
			return(false);
		}
	}		// End of switch.
}

/// End of function 'Asura_Streaming_SubsystemHandlers::Platform_DestroyZoneData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Streaming_SubsystemHandlers::Platform_SetAllHandlerData
// Author       : Andy Tate
// Date         : 24-Mar-2006
////////////////////////////////////////////////////////////////////////////////

void Asura_Streaming_SubsystemHandlers::Platform_SetAllHandlerData (const Asura_Hash_ID uHandlerHash,
																	const u_int uDataIndex)
{
	// Set the render data...
	Asura_PSP_CharacterRenderer::SetCurrentHandler(uHandlerHash);
	Asura_PSP_ObjectRenderer::SetCurrentHandler(uHandlerHash);
	Asura_PSP_ObjectHierarchyRenderer::SetCurrentHandler(uHandlerHash);
}

/// End of function 'Asura_Streaming_SubsystemHandlers::Platform_SetAllHandlerData'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_Streaming_SubsystemHandlers::Platform_SetAllZoneData
// Author       : Andy Tate
// Date         : 24-Mar-2006
////////////////////////////////////////////////////////////////////////////////

void Asura_Streaming_SubsystemHandlers::Platform_SetAllZoneData (const Asura_Hash_ID uHandlerHash,
																 const u_int uDataIndex,
																 const bool bAllowEnvironment)
{
	// Set the render data...
	if(bAllowEnvironment)
	{
		Asura_PSP_RenderEnvironment::SetCurrentZone(uHandlerHash);
	}
}

/// End of function 'Asura_Streaming_SubsystemHandlers::Platform_SetAllZoneData'. ///



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


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

#endif	// ASURA_USE_STREAMING

/// End of file. ///
