mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 08:34:40 +00:00
enhanced-physical-zone -- PhysicalZone object enhanced to allow orientation add radial forces.
pz-opt -- PhysicalZone network optimizations.
This commit is contained in:
parent
ab88b8f489
commit
a7c7b67c85
3 changed files with 244 additions and 28 deletions
|
|
@ -20,6 +20,11 @@
|
|||
// IN THE SOFTWARE.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
|
||||
// Arcane-FX for MIT Licensed Open Source version of Torque 3D from GarageGames
|
||||
// Copyright (C) 2015 Faust Logic, Inc.
|
||||
//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
|
||||
|
||||
#ifndef _H_PHYSICALZONE
|
||||
#define _H_PHYSICALZONE
|
||||
|
||||
|
|
@ -40,9 +45,14 @@ class PhysicalZone : public SceneObject
|
|||
{
|
||||
typedef SceneObject Parent;
|
||||
|
||||
enum UpdateMasks {
|
||||
enum UpdateMasks {
|
||||
ActiveMask = Parent::NextFreeMask << 0,
|
||||
NextFreeMask = Parent::NextFreeMask << 1
|
||||
SettingsMask = Parent::NextFreeMask << 1,
|
||||
FadeMask = Parent::NextFreeMask << 2,
|
||||
PolyhedronMask = Parent::NextFreeMask << 3,
|
||||
MoveMask = Parent::NextFreeMask << 4,
|
||||
ExclusionMask = Parent::NextFreeMask << 5,
|
||||
NextFreeMask = Parent::NextFreeMask << 6
|
||||
};
|
||||
|
||||
protected:
|
||||
|
|
@ -83,7 +93,10 @@ class PhysicalZone : public SceneObject
|
|||
|
||||
inline F32 getVelocityMod() const { return mVelocityMod; }
|
||||
inline F32 getGravityMod() const { return mGravityMod; }
|
||||
inline const Point3F& getForce() const { return mAppliedForce; }
|
||||
// the scene object is now passed in to getForce() where
|
||||
// it is needed to calculate the applied force when the
|
||||
// force is radial.
|
||||
const Point3F& getForce(const Point3F* center=0) const;
|
||||
|
||||
void setPolyhedron(const Polyhedron&);
|
||||
bool testObject(SceneObject*);
|
||||
|
|
@ -96,7 +109,25 @@ class PhysicalZone : public SceneObject
|
|||
void deactivate();
|
||||
inline bool isActive() const { return mActive; }
|
||||
|
||||
protected:
|
||||
friend class afxPhysicalZoneData;
|
||||
friend class afxEA_PhysicalZone;
|
||||
Vector<SceneObject*> excluded_objects;
|
||||
S32 force_type;
|
||||
F32 force_mag;
|
||||
bool orient_force;
|
||||
F32 fade_amt;
|
||||
void setFadeAmount(F32 amt) { fade_amt = amt; if (fade_amt < 1.0f) setMaskBits(FadeMask); }
|
||||
public:
|
||||
enum ForceType { VECTOR, SPHERICAL, CYLINDRICAL };
|
||||
enum { FORCE_TYPE_BITS = 2 };
|
||||
virtual void onStaticModified(const char* slotName, const char*newValue = NULL);
|
||||
bool isExcludedObject(SceneObject*) const;
|
||||
void registerExcludedObject(SceneObject*);
|
||||
void unregisterExcludedObject(SceneObject*);
|
||||
};
|
||||
|
||||
typedef PhysicalZone::ForceType PhysicalZone_ForceType;
|
||||
DefineEnumType( PhysicalZone_ForceType );
|
||||
#endif // _H_PHYSICALZONE
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue