summaryrefslogtreecommitdiffstats
path: root/game/code/worldsim/worldcollisionsolveragent.h
blob: c624e0150c564eaa7a965a68400c3da3f9981d8e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//=============================================================================
// Copyright (C) 2002 Radical Entertainment Ltd.  All rights reserved.
//
// File:        worldcollisionsolveragent.h
//
// Description: Blahblahblah
//
// History:     6/14/2002 + Created -- TBJ
//
//=============================================================================

#ifndef WORLDCOLLISIONSOLVERAGENT_H
#define WORLDCOLLISIONSOLVERAGENT_H

//========================================
// Nested Includes
//========================================
#include <simcollision/impulsebasedcollisionsolver.hpp>

//========================================
// Forward References
//========================================
class RedBrickCollisionSolverAgent;

using namespace sim;
//=============================================================================
//
// Synopsis:    Blahblahblah
//
//=============================================================================
class WorldCollisionSolverAgent
:
public CollisionSolverAgent
{
public:
    virtual void ResetCollisionFlags() {};
};

class WorldCollisionSolverAgentManager
: 
public CollisionSolverAgent
{
public:
    WorldCollisionSolverAgentManager();
	~WorldCollisionSolverAgentManager();

    // the key method to override
    Solving_Answer PreCollisionEvent(Collision& inCollision, int inPass);
    Solving_Answer TestImpulse(rmt::Vector& mImpulse, Collision& inCollision);    
    Solving_Answer TestCache(SimState* inSimState, int inIndex);

    
    Solving_Answer EndObjectCollision(SimState* inSimState, int inIndex);


    // need to override this so that the sim library version doesn't automatically 
    // switch from ai to sim ctrl when objects are hit

    // this method allows to trigger sounds, animation and modify the objects state.
    Solving_Answer CollisionEvent(  SimState* inSimStateA, int indexA, 
                                    SimState* inSimStateB, int indexB, 
                                    const rmt::Vector& inPos, float inDvN, float inDvT,
                                    SimulatedObject** simA, SimulatedObject** simB);




    void ResetCollisionFlags();
private:

    //Prevent wasteful constructor creation.
	WorldCollisionSolverAgentManager( const WorldCollisionSolverAgent& worldcollisionsolveragent );
	WorldCollisionSolverAgentManager& operator=( const WorldCollisionSolverAgentManager& worldcollisionsolveragent );

    static const int NUM_SOLVERS = 1;
    WorldCollisionSolverAgent* mpCollisionSolverAgentArray[ NUM_SOLVERS ];
};


#endif //WORLDCOLLISIONSOLVERAGENT_H