-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathaibasatr.h
105 lines (82 loc) · 3.02 KB
/
aibasatr.h
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
/*
@Copyright Looking Glass Studios, Inc.
1996,1997,1998,1999,2000 Unpublished Work.
*/
///////////////////////////////////////////////////////////////////////////////
// $Header: r:/t2repos/thief2/src/ai/aibasatr.h,v 1.1 1999/03/02 17:42:26 TOML Exp $
//
// Base implementation of an AI actor
//
#ifndef __AIBASATR_H
#define __AIBASATR_H
#include <aiapiatr.h>
#include <aibascmp.h>
#pragma once
#pragma pack(4)
class cAIAction;
class cAIActions;
class cAIMoveAction;
class cAILocoAction;
class cAIMotionAction;
class cAIMoveAction;
class cAISoundAction;
class cAIOrientAction;
class cAIFrobAction;
class cAIFollowAction;
class cAIInvestAction;
class cAIWanderAction;
class cAIPsdScrAction;
class cAIWaitAction;
///////////////////////////////////////////////////////////////////////////////
//
// TEMPLATE: cAIActorBase
//
// Classes that only implement IAIActor may derive from "cAIActor"
//
#undef INTERFACE
template <class INTERFACE, const GUID * pIID_INTERFACE>
class cAIActorBase : public cAIComponentBase<INTERFACE, pIID_INTERFACE>
{
public:
STDMETHOD (QueryInterface)(REFIID id, void ** ppI);
// Current action list save/load (pTagFile cursor should be prepositioned).
STDMETHOD_(BOOL, SaveActions)(ITagFile * pTagFile, cAIActions * pActions);
STDMETHOD_(BOOL, LoadActions)(ITagFile * pTagFile, cAIActions * pActions);
STDMETHOD (SuggestActions)(cAIGoal * pGoal, const cAIActions & previous, cAIActions * pNew);
protected:
//
// Factory method helpers
//
cAIMoveAction * CreateMoveAction(DWORD data = 0);
cAILocoAction * CreateLocoAction(DWORD data = 0);
cAIMotionAction * CreateMotionAction(DWORD data = 0);
cAISoundAction * CreateSoundAction(DWORD data = 0);
cAIOrientAction * CreateOrientAction(DWORD data = 0);
cAIFrobAction * CreateFrobAction(DWORD data = 0);
cAIFollowAction * CreateFollowAction(DWORD data = 0);
cAIInvestAction * CreateInvestAction(DWORD data = 0);
cAIWanderAction * CreateWanderAction(DWORD data = 0);
cAIPsdScrAction * CreatePsdScrAction(DWORD data = 0);
cAIWaitAction * CreateWaitAction(DWORD data = 0);
//
// Notification helpers
//
// Did the action come from this ability?
BOOL IsOwn(IAIAction * pAction) const;
// Is the action message even relevant to this ability?
BOOL IsRelevant(IAIAction * pPrevious, IAIAction * pAction) const;
// Is this the first action of a new control sequence?
BOOL IsFirstAction(IAIAction * pPrevious, IAIAction * pAction) const;
// Use this in your SuggestActions when you just want to continue
HRESULT ContinueActions(const cAIActions & previous, cAIActions *pNew) const;
};
///////////////////////////////////////////////////////////////////////////////
//
// Base class for generic actors
//
class cAIActor : public cAIActorBase<IAIActor, &IID_IAIActor>
{
};
///////////////////////////////////////////////////////////////////////////////
#pragma pack()
#endif /* !__AIBASATR_H */