//============================================================================= // Copyright (C) 2002 Radical Entertainment Ltd. All rights reserved. // // File: worldbuilder.h // // Description: Blahblahblah // // History: 16/05/2002 + Created -- Cary Brisebois // //============================================================================= #ifndef WORLDBUILDER_H #define WORLDBUILDER_H //======================================== // Nested Includes //======================================== #include "precompiled/PCH.h" #include #include <..\..\..\game\code\meta\locatortypes.h> //======================================== // Forward References //======================================== //============================================================================= // // Synopsis: Blahblahblah // //============================================================================= const char* const WORLD_BUILDER_NAME = "WBWorldBuilder"; const char* const LOCATORS_NAME = "WBLocators"; const char* const TRIGGER_VOLUMES_NAME = "WBTriggerVolumes"; const char* const SPLINES_NAME = "WBSplines"; class WorldBuilder { public: enum { MAX_PREFIX_LENGTH = 24, MAX_NAME_LENGTH = 256 }; enum DisplayLevel { EVENT_LOCATORS = ( 1 << 0 ), SCRIPT_LOCATORS = ( 1 << 1 ), GENERIC_LOCATORS = ( 1 << 2 ), CARSTART_LOCATORS = ( 1 << 3 ), ZONE_EVENT_LOCATORS = ( 1 << 4 ), OCCLUSION_LOCATORS = ( 1 << 5 ), RAILCAM_LOCATORS = ( 1 << 6 ), INTERIOR_LOCATORS = ( 1 << 7 ), DIRECTIONAL_LOCATORS = ( 1 << 8 ), ACTION_EVENT_LOCATORS = ( 1 << 9 ), FOV_LOCATORS = ( 1 << 10 ), BREAKABLE_CAMERA_LOCATORS = ( 1 << 11 ), STATIC_CAMERA_LOCATORS = ( 1 << 12 ), PED_GROUP_LOCATORS = ( 1 << 13 ), LOCATORS = EVENT_LOCATORS | SCRIPT_LOCATORS | GENERIC_LOCATORS | ZONE_EVENT_LOCATORS | OCCLUSION_LOCATORS | RAILCAM_LOCATORS | INTERIOR_LOCATORS | DIRECTIONAL_LOCATORS | ACTION_EVENT_LOCATORS | FOV_LOCATORS | BREAKABLE_CAMERA_LOCATORS | STATIC_CAMERA_LOCATORS | PED_GROUP_LOCATORS, TRIGGER_VOLUMES = ( 1 << 20 ), ALL = ~0, TOTAL_LEVELS = 6 }; WorldBuilder(); virtual ~WorldBuilder(); static unsigned int GetDisplayLevel(); static LocatorType::Type GetLocatorType(); static void SetPrefix( const char* prefix ); static const char* const GetPrefix(); static bool Exists(); static MStatus AddChild( MObject& obj ); static void SetSelectedLocator( const char* name ); static const char* GetSelectedLocator(); static const char* sName; protected: friend class WBChangeDisplayCommand; static unsigned int sDisplayLevel; friend class WBSetLocatorTypeCmd; static LocatorType::Type sLocatorType; static char sPrefix[MAX_PREFIX_LENGTH + 1]; //+ 1 for the \n static char sSelectedLocator[MAX_NAME_LENGTH + 1]; static void SetDisplayLevel( unsigned int level, bool on ); static void SetLocatorType( LocatorType::Type type ); private: static void CreateWorldBuilderNode(); //Prevent wasteful constructor creation. WorldBuilder( const WorldBuilder& worldbuilder ); WorldBuilder& operator=( const WorldBuilder& worldbuilder ); }; //***************************************************************************** // // Inline Public Methods // //***************************************************************************** //============================================================================= // WorldBuilder::GetDisplayLevel //============================================================================= // Description: Comment // // Parameters: () // // Return: DisplayLevel // //============================================================================= inline unsigned int WorldBuilder::GetDisplayLevel() { return sDisplayLevel; } //============================================================================= // WorldBuilder::GetLocatorType //============================================================================= // Description: Comment // // Parameters: () // // Return: LocatorType // //============================================================================= inline LocatorType::Type WorldBuilder::GetLocatorType() { return sLocatorType; } //============================================================================= // WorldBuilder::SetLocatorType //============================================================================= // Description: Comment // // Parameters: ( LocatorType::Type type ) // // Return: void // //============================================================================= inline void WorldBuilder::SetLocatorType( LocatorType::Type type ) { sLocatorType = type; } //============================================================================= // WorldBuilder::GetPrefix //============================================================================= // Description: Comment // // Parameters: () // // Return: const char* const // //============================================================================= inline const char* const WorldBuilder::GetPrefix() { return sPrefix; } //============================================================================= // WorldBuilder::SetPrefix //============================================================================= // Description: Comment // // Parameters: ( const char* prefix ) // // Return: void // //============================================================================= inline void WorldBuilder::SetPrefix( const char* prefix ) { strcpy( sPrefix, prefix ); sPrefix[MAX_PREFIX_LENGTH] = '\0'; } //============================================================================= // WorldBuilder::SetSelectedLocator //============================================================================= // Description: Comment // // Parameters: ( const char* name ) // // Return: void // //============================================================================= inline void WorldBuilder::SetSelectedLocator( const char* name ) { strcpy( sSelectedLocator, name ); sSelectedLocator[MAX_NAME_LENGTH] = '\0'; } //============================================================================= // WorldBuilder::GetSelectedLocator //============================================================================= // Description: Comment // // Parameters: () // // Return: const // //============================================================================= inline const char* WorldBuilder::GetSelectedLocator() { return sSelectedLocator; } //***************************************************************************** // // Inline Protected Methods // //***************************************************************************** //============================================================================= // WorldBuilder::SetDisplayLevel //============================================================================= // Description: Comment // // Parameters: ( unsigned int level, bool on ) // // Return: inline // //============================================================================= inline void WorldBuilder::SetDisplayLevel( unsigned int level, bool on ) { assert( level <= TOTAL_LEVELS ); on ? sDisplayLevel |= ( 1 << level ) : sDisplayLevel &= ~( 1 << level ); } //***************************************************************************** // // Inline Private Methods // //***************************************************************************** #endif //WORLDBUILDER_H