123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _SIM_H_
- #define _SIM_H_
- #ifndef _TORQUE_TYPES_H_
- #include "platform/types.h"
- #endif
- #ifndef _TORQUE_STRING_H_
- #include "core/util/str.h"
- #endif
- #ifndef _MODULE_H_
- #include "core/module.h"
- #endif
- #ifndef _CONSOLE_H_
- #include "console/console.h"
- #endif
- // Forward Refs
- class SimSet;
- class SimGroup;
- class SimDataBlockGroup;
- class SimObject;
- class SimEvent;
- class Stream;
- // Sim Types
- typedef U32 SimTime;
- typedef U32 SimObjectId;
- /// Definition of some basic Sim system constants.
- ///
- /// These constants define the range of ids assigned to datablocks
- /// (DataBlockObjectIdFirst - DataBlockObjectIdLast), and the number
- /// of bits used to store datablock IDs.
- ///
- /// Normal Sim objects are given the range of IDs starting at
- /// DynamicObjectIdFirst and going to infinity. Sim objects use
- /// a SimObjectId to represent their ID; this is currently a U32.
- ///
- /// The RootGroupId is assigned to gRootGroup, in which most SimObjects
- /// are addded as child members. See simManager.cc for details, particularly
- /// Sim::initRoot() and following.
- enum SimObjectsConstants : U32
- {
- DataBlockObjectIdFirst = 3,
- DataBlockObjectIdBitSize = 14,
- DataBlockObjectIdLast = DataBlockObjectIdFirst + (1 << DataBlockObjectIdBitSize) - 1,
- MessageObjectIdFirst = DataBlockObjectIdLast + 1,
- MessageObjectIdBitSize = 6,
- MessageObjectIdLast = MessageObjectIdFirst + (1 << MessageObjectIdBitSize) - 1,
- DynamicObjectIdFirst = MessageObjectIdLast + 1,
- InvalidEventId = 0,
- RootGroupId = 0xFFFFFFFF,
- };
- //---------------------------------------------------------------------------
- /// @defgroup simbase_helpermacros Helper Macros
- ///
- /// These are used for named sets and groups in the manager.
- /// @{
- #define DeclareNamedSet(set) extern SimSet *g##set;inline SimSet *get##set() { return g##set; }
- #define DeclareNamedGroup(set) extern SimGroup *g##set;inline SimGroup *get##set() { return g##set; }
- #define ImplementNamedSet(set) SimSet *g##set;
- #define ImplementNamedGroup(set) SimGroup *g##set;
- /// @}
- //---------------------------------------------------------------------------
- namespace Sim
- {
- DeclareNamedSet(ActiveActionMapSet)
- DeclareNamedSet(GhostAlwaysSet)
- DeclareNamedSet(WayPointSet)
- DeclareNamedSet(fxReplicatorSet)
- DeclareNamedSet(fxFoliageSet)
- DeclareNamedSet(BehaviorSet)
- DeclareNamedSet(MaterialSet)
- DeclareNamedSet(SFXSourceSet);
- DeclareNamedSet(SFXDescriptionSet);
- DeclareNamedSet(SFXTrackSet);
- DeclareNamedSet(SFXEnvironmentSet);
- DeclareNamedSet(SFXStateSet);
- DeclareNamedSet(SFXAmbienceSet);
- DeclareNamedSet(TerrainMaterialSet);
- DeclareNamedSet(DataBlockSet);
- DeclareNamedSet(ForestBrushSet);
- DeclareNamedSet(ForestItemDataSet);
- DeclareNamedGroup(ActionMapGroup)
- DeclareNamedGroup(ClientGroup)
- DeclareNamedGroup(GuiGroup)
- DeclareNamedGroup(GuiDataGroup)
- DeclareNamedGroup(TCPGroup)
- DeclareNamedGroup(ClientConnectionGroup)
- DeclareNamedGroup(SFXParameterGroup);
- DeclareNamedSet(sgMissionLightingFilterSet);
-
- void init();
- void shutdown();
-
- bool isShuttingDown();
- SimDataBlockGroup *getDataBlockGroup();
- SimGroup* getRootGroup();
- SimObject* findObject(SimObjectId);
- SimObject* findObject(const ConsoleValue&);
- SimObject* findObject(ConsoleValue*);
- SimObject* findObject(const char* name);
- SimObject* findObject(const char* fileName, S32 declarationLine);
- template<class T> inline bool findObject(SimObjectId iD,T*&t)
- {
- t = dynamic_cast<T*>(findObject(iD));
- return t != NULL;
- }
- template<class T> inline bool findObject(const char *objectName,T*&t)
- {
- t = dynamic_cast<T*>(findObject(objectName));
- return t != NULL;
- }
- SimObject *spawnObject(String spawnClass,
- String spawnDataBlock = String::EmptyString,
- String spawnName = String::EmptyString,
- String spawnProperties = String::EmptyString,
- String spawnScript = String::EmptyString);
- void advanceToTime(SimTime time);
- void advanceTime(SimTime delta);
- SimTime getCurrentTime();
- SimTime getTargetTime();
- /// a target time of 0 on an event means current event
- U32 postEvent(SimObject*, SimEvent*, SimTime targetTime);
- inline U32 postEvent(SimObjectId iD,SimEvent*evt, SimTime targetTime)
- {
- return postEvent(findObject(iD), evt, targetTime);
- }
- inline U32 postEvent(const char *objectName,SimEvent*evt, SimTime targetTime)
- {
- return postEvent(findObject(objectName), evt, targetTime);
- }
- inline U32 postCurrentEvent(SimObject*obj, SimEvent*evt)
- {
- return postEvent(obj,evt,getCurrentTime());
- }
- inline U32 postCurrentEvent(SimObjectId obj,SimEvent*evt)
- {
- return postEvent(obj,evt,getCurrentTime());
- }
- inline U32 postCurrentEvent(const char *obj,SimEvent*evt)
- {
- return postEvent(obj,evt,getCurrentTime());
- }
- void cancelEvent(U32 eventId);
- void cancelPendingEvents(SimObject *obj);
- bool isEventPending(U32 eventId);
- U32 getEventTimeLeft(U32 eventId);
- U32 getTimeSinceStart(U32 eventId);
- U32 getScheduleDuration(U32 eventId);
- /// Appends numbers to inName until an unused SimObject name is created
- String getUniqueName( const char *inName );
- /// Appends numbers to inName until an internal name not taken in the inSet is found.
- String getUniqueInternalName( const char *inName, SimSet *inSet, bool searchChildren );
-
- /// Return true if the given name string makes for a valid object name.
- /// Empty strings and NULL are also treated as valid names (anonymous objects).
- bool isValidObjectName( const char* name );
- bool saveObject(SimObject *obj, Stream *stream);
- SimObject *loadObjectStream(Stream *stream);
- bool saveObject(SimObject *obj, const char *filename);
- SimObject *loadObjectStream(const char *filename);
- }
- #endif // _SIM_H_
|