convert line ends
[canaan.git] / prj / cam / src / actreact / contag8r.h
blobef5a5c18ecfdacb6c96ac4e190ee622623c5da1b
1 /*
2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
4 */
6 // $Header: r:/t2repos/thief2/src/actreact/contag8r.h,v 1.8 1998/10/21 18:52:21 mahk Exp $
7 #pragma once
8 #ifndef __CONTAG8R_H
9 #define __CONTAG8R_H
10 #include <prpag8r_.h>
12 #include <dmgmodel.h>
13 #include <dlistsim.h>
14 #include <hashpp.h>
16 #include <reactype.h>
17 #include <reacbase.h>
19 #include <listset.h>
21 ////////////////////////////////////////////////////////////
22 // PHYSICAL CONTACT PROPAGATOR
25 F_DECLARE_INTERFACE(IStimSources);
26 F_DECLARE_INTERFACE(IStimSensors);
28 class cContactPropagator : public cBasePropagator
31 public:
32 cContactPropagator();
33 ~cContactPropagator();
35 //------------------------------------------------------------
36 // IPropagator Methods
39 STDMETHOD(InitSource)(sStimSourceDesc* desc);
40 STDMETHOD_(const struct sStructDesc*,DescribeShapes)();
41 STDMETHOD_(const struct sStructDesc*,DescribeLifeCycles)();
42 STDMETHOD(SourceEvent)(sStimSourceEvent* event);
43 STDMETHOD_(tStimLevel,GetSourceLevel)(StimSourceID id);
44 STDMETHOD(DescribeSource)(StimSourceID id, sStimSourceDesc* desc);
45 STDMETHOD(SensorEvent)(sStimSensorEvent* event);
46 STDMETHOD(Propagate)(tStimTimeStamp curtime, tStimDuration duration);
47 STDMETHOD(Reset)();
49 protected:
51 //------------------------------------------------------------
52 // Helper classes
55 // List of sources
56 class cSourceList : public cSimpleListSet<StimSourceID>
61 // Hash functions
62 typedef cScalarHashFunctions<ObjID> cSourceTableHashFuncs;
64 // Table of lists of sources
65 class cSourceTable : public cHashTable<ObjID,cSourceList*,cSourceTableHashFuncs>
67 public:
68 void RemoveAll();
72 public:
73 //------------------------------------------------------------
74 // API for frob and weapon swing
77 enum ePropFlags
79 kNoDefer = 1 << 0,
80 kPhysical = 1 << 1,
83 void DoPropagationEvent(ulong eventmask, ObjID from, ObjID to, float magnitude, const struct sChainedEvent* cause = NULL, ulong propflags = 0);
85 // the propagator to use
86 static cContactPropagator* gpGator;
88 protected:
89 //------------------------------------------------------------
90 // Helper Functions
93 eDamageResult HandleImpact(const struct sDamageMsg* msg);
94 static eDamageResult LGAPI ImpactListener(const struct sDamageMsg* msg, tDamageCallbackData data);
96 eReactionResult SetImpactResult(sReactionEvent* event, const sReactionParam* param);
97 static eReactionResult LGAPI ImpactResultReaction(sReactionEvent* event, const sReactionParam* param, tReactionFuncData data);
99 void AddReactions();
101 //------------------------------------------------------------
102 // Data Members
105 // Interfaces we use
106 IStimSensors* pSensors;
107 IStimSources* pSources;
109 // Internals
110 cSourceTable Sources; // Sources we handle
112 // Collision Data
113 const sDamageMsg* pImpactEvent;
114 eDamageResult ImpactResult;
119 #endif // __CONTAG8R_H