afxForce.h

Engine/source/afx/forces/afxForce.h

More...

Classes:

Detailed Description

 1
 2
 3//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
 4// Arcane-FX for MIT Licensed Open Source version of Torque 3D from GarageGames
 5// Copyright (C) 2015 Faust Logic, Inc.
 6//
 7// Permission is hereby granted, free of charge, to any person obtaining a copy
 8// of this software and associated documentation files (the "Software"), to
 9// deal in the Software without restriction, including without limitation the
10// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
11// sell copies of the Software, and to permit persons to whom the Software is
12// furnished to do so, subject to the following conditions:
13//
14// The above copyright notice and this permission notice shall be included in
15// all copies or substantial portions of the Software.
16//
17// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
23// IN THE SOFTWARE.
24//
25//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
26
27#ifndef _AFX_FORCE_H_
28#define _AFX_FORCE_H_
29
30//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
31// afxForce Data
32class afxForceDesc;
33
34class afxForceData : public GameBaseData
35{
36  typedef GameBaseData Parent;
37
38public:
39  StringTableEntry  force_set_name;
40  afxForceDesc*     force_desc;
41
42public:
43  /*C*/         afxForceData();
44  /*C*/         afxForceData(const afxForceData&, bool = false);
45
46  virtual bool  onAdd();
47  virtual void  packData(BitStream* stream);
48  virtual void  unpackData(BitStream* stream);
49
50  virtual bool  allowSubstitutions() const { return true; }
51  virtual afxForceData* cloneAndPerformSubstitutions(const SimObject*, S32 index=0)=0;
52
53  static void   initPersistFields();
54};
55
56//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
57// afxForce
58
59class afxForce
60{
61  afxForceData*         datablock;
62
63protected:
64  F32                   fade_amt;
65
66public:
67  /*C*/                 afxForce();
68  /*D*/                 ~afxForce();
69
70  virtual bool          onNewDataBlock(afxForceData* dptr, bool reload);
71  void                  setFadeAmount(F32 amt) { fade_amt = amt; }
72
73  virtual void          start() {};
74  virtual void          update(F32 dt) {};
75  virtual Point3F       evaluate(Point3F pos, Point3F v, F32 mass) { return Point3F(0,0,0); }; //=0;
76};
77
78//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
79
80class afxForceDesc
81{
82private:
83  static Vector<afxForceDesc*>* forces;
84
85public:
86  /*C*/         afxForceDesc();
87
88  virtual bool  testForceType(const SimDataBlock*) const=0;
89
90  virtual afxForce* create() const=0;
91
92  static bool   identifyForce(afxForceData*);
93};
94
95
96//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~//~~~~~~~~~~~~~~~~~~~~~//
97
98#endif // _AFX_FORCE_H_
99