123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 |
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
- // Arcane-FX for MIT Licensed Open Source version of Torque 3D from GarageGames
- // Copyright (C) 2015 Faust Logic, Inc.
- //
- // 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 _ARCANE_FX_H_
- #define _ARCANE_FX_H_
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
- #ifndef _PLATFORM_H_
- #include "platform/platform.h"
- #endif
- #define AFX_VERSION_STRING "2.0"
- #define AFX_VERSION 2.0
- // #define AFX_CUSTOMIZED_BRANCH
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//
- #if defined(AFX_CUSTOMIZED_BRANCH)
- #elif (TORQUE_GAME_ENGINE == 1100 || TORQUE_GAME_ENGINE >= 3000)
- #define AFX_CAP_SCOPE_TRACKING
- #define AFX_CAP_ROLLOVER_RAYCASTS
- //#define AFX_CAP_AFXMODEL_TYPE
- //#define BROKEN_POINT_IN_WATER
- #define BROKEN_DAMAGEFLASH_WHITEOUT_BLACKOUT
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//
- #else
- // This version of AFX source only supports T3D 1.1
- #endif
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//
- #ifndef _CONSOLETYPES_H_
- #include "console/consoleTypes.h"
- #endif
- #ifndef _ENGINEAPI_H_
- #include "console/engineAPI.h"
- #endif
- #ifndef _SIMBASE_H_
- #include "console/simBase.h"
- #endif
- #ifndef _BITSTREAM_H_
- #include "core/stream/bitStream.h"
- #endif
- #ifndef _GAMEBASE_H_
- #include "T3D/gameBase/gameBase.h"
- #endif
- #if defined(DGL_GRAPHICS_LAYER)
- #ifndef _DGL_H_
- #include "dgl/dgl.h"
- #endif
- #endif
- class afxChoreographer;
- class afxSelectronData;
- class GameConnection;
- class SceneObject;
- class arcaneFX
- {
- public:
- enum {
- TARGETING_OFF,
- TARGETING_STANDARD,
- TARGETING_FREE
- };
- enum {
- TARGET_CHECK_POLL,
- TARGET_CHECK_ON_MOUSE_MOVE
- };
- private:
- static Vector<afxChoreographer*> active_choreographers;
- static Vector<afxChoreographer*> client_choreographers;
- static Vector<afxSelectronData*> selectrons;
- static Vector<SceneObject*> scoped_objs;
- static bool is_shutdown;
- public:
- static StringTableEntry NULLSTRING;
- static U32 sTargetSelectionMask;
- static U32 sFreeTargetSelectionMask;
- static bool sIsFreeTargeting;
- static Point3F sFreeTargetPos;
- static bool sFreeTargetPosValid;
- static F32 sTargetSelectionRange;
- static U32 sTargetSelectionTimeoutMS;
- static bool sClickToTargetSelf;
- static U32 sMissileCollisionMask;
- static StringTableEntry sParameterFieldPrefix;
- static F32 sTerrainZodiacZBias;
- static F32 sInteriorZodiacZBias;
- static F32 sPolysoupZodiacZBias;
- static U32 master_choreographer_id;
- static U16 master_scope_id;
- public:
- static void init();
- static void shutdown();
- static void advanceTime(U32 delta);
- static U32 registerChoreographer(afxChoreographer*);
- static void unregisterChoreographer(afxChoreographer*);
- static void registerClientChoreographer(afxChoreographer*);
- static void unregisterClientChoreographer(afxChoreographer*);
- static afxChoreographer* findClientChoreographer(U32 id);
- static void registerSelectronData(afxSelectronData*);
- static void unregisterSelectronData(afxSelectronData*);
- static afxSelectronData* findSelectronData(U32 obj_type_mask, U8 code);
- static U16 generateScopeId();
- static void registerScopedObject(SceneObject*);
- static SceneObject* findScopedObject(U16 scope_id);
- static void unregisterScopedObject(SceneObject*);
- static void syncToNewConnection(GameConnection* conn);
- static void endMissionNotify();
- static S32 rolloverRayCast(Point3F start, Point3F end, U32 mask);
- static bool freeTargetingRayCast(Point3F start, Point3F end, U32 mask);
- static bool isShutdown() { return is_shutdown; }
- static StringTableEntry convertLightingModelName(StringTableEntry lm_name);
- private:
- static bool sUsePlayerCentricListener;
- public:
- static bool usePlayerCentricListener() { return sUsePlayerCentricListener; }
- };
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//
- class ByteRange
- {
- public:
- U8 low;
- U8 high;
- public:
- /*C*/ ByteRange() { low = 0; high = 255; }
- /*C*/ ByteRange(U8 l, U8 h=255) { low = l; high = h; }
- void set(U8 l, U8 h=255) { low = l; high = h; }
- bool outOfRange(U8 v) { return (v < low || v > high); }
- bool inRange(U8 v) { return !outOfRange(v); }
- S32 getSpan() const { return high - low; }
- };
- DefineConsoleType(TypeByteRange, ByteRange)
- DefineConsoleType(TypeByteRange2, ByteRange)
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//
- inline void writeDatablockID(BitStream* s, SimObject* simobj, bool packed=false)
- {
- if (s->writeFlag(simobj))
- s->writeRangedU32(packed ? SimObjectId((uintptr_t)simobj) : simobj->getId(),
- DataBlockObjectIdFirst, DataBlockObjectIdLast);
- }
- inline S32 readDatablockID(BitStream* s)
- {
- return (!s->readFlag()) ? 0 : ((S32)s->readRangedU32(DataBlockObjectIdFirst,
- DataBlockObjectIdLast));
- }
- inline void registerForCleanup(SimObject* obj)
- {
- SimGroup* cleanup_grp = dynamic_cast<SimGroup*>(Sim::findObject("MissionCleanup"));
- if (cleanup_grp)
- cleanup_grp->addObject(obj);
- }
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//
- #define ST_NULLSTRING (arcaneFX::NULLSTRING)
- //~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
- #endif // _ARCANE_FX_H_
|