Dayz 1.25
Dayz Code Explorer by KGB
Загрузка...
Поиск...
Не найдено
Класс HumanInventoryWithFSM

HumanInventory... with FSM (synchronous, no anims) Подробнее...

+ Граф наследования:HumanInventoryWithFSM:

Защищенные члены

void HumanInventoryWithFSM ()
 
void CreateStableStates ()
 
override void Init ()
 
bool CanProcessHandEvents ()
 
override bool ProcessHandEvent (HandEventBase e)
 hand's fsm handling of events @NOTE: warning: ProcessHandEvent can be called only within DayZPlayer::HandleInventory (or CommandHandler)
 
bool ProcessHandAbortEvent (HandEventBase e)
 
override bool OnStoreLoad (ParamsReadContext ctx, int version)
 
override void OnStoreSave (ParamsWriteContext ctx)
 
int GetCurrentStateID ()
 
bool IsIdle ()
 
void NetSyncCurrentStateID (int id)
 Engine callback - network synchronization of FSM's state. not intended to direct use.
 

Защищенные данные

ref HandFSM m_FSM
 
ref HandStateBase m_Empty
 hand slot state machine
 
ref HandStateBase m_Equipped
 

Дополнительные унаследованные члены

- Закрытые члены унаследованные от HumanInventory
bool ReplaceItemInElsewhereWithNewinHandsImpl (InventoryMode mode, HandEventBase e)
 
bool ReplaceItemInHandsWithNewImpl (InventoryMode mode, HandEventBase e)
 
bool ReplaceItemInHandsWithNew (InventoryMode mode, ReplaceItemWithNewLambdaBase lambda)
 
bool ReplaceItemInHandsWithNewElsewhere (InventoryMode mode, ReplaceItemWithNewLambdaBase lambda)
 
bool SwappingToPreviousLocation (EntityAI item1, EntityAI item2, out InventoryLocation dst)
 
void HandleInventoryManipulation ()
 
void Update (float delta_time)
 
bool ValidateUserReservationCancel (inout Serializer ctx, InventoryValidation validation)
 

Подробное описание

HumanInventory... with FSM (synchronous, no anims)

Конструктор(ы)

◆ HumanInventoryWithFSM()

void HumanInventoryWithFSM ( )
inlineprotected
12 {
13 m_FSM = new HandFSM();
14 }
Hand finite state machine.
ref HandFSM m_FSM
Definition HumanInventoryWithFSM.c:7

Перекрестные ссылки m_FSM.

Методы

◆ CanProcessHandEvents()

bool CanProcessHandEvents ( )
inlineprotected
90{ return m_FSM && m_FSM.IsRunning(); }

Перекрестные ссылки m_FSM.

◆ CreateStableStates()

void CreateStableStates ( )
inlineprotected
17 {
18 // stable states are created only if they do not exist already (for example created by derived class like DayZPlayerInventory)
19 // @NOTE: this cannot be done in constructor, as there is NO owner set yet. GetManOwner() will therefore return NULL.
20 if (!m_Empty)
22 if (!m_Equipped)
24 }
Definition Hand_States.c:33
Man GetManOwner()
Definition HumanInventory.c:102
ref HandStateBase m_Equipped
Definition HumanInventoryWithFSM.c:9
ref HandStateBase m_Empty
hand slot state machine
Definition HumanInventoryWithFSM.c:8
Definition EntityAI.c:95

Перекрестные ссылки HumanInventory::GetManOwner(), m_Empty и m_Equipped.

Используется в Init().

◆ GetCurrentStateID()

GetCurrentStateID ( )
inlineprotected
Возвращает
identifier of current stable state
154{ return m_FSM.GetCurrentStateID(); }

Перекрестные ссылки m_FSM.

◆ Init()

override void Init ( )
inlineprotected
27 {
28 // setup state machine
29 if (LogManager.IsInventoryHFSMLogEnable()) hndDebugPrint("[hndfsm] Initializing Human Inventory FSM");
30
31 // basic states
33
34 // events
35 HandEventBase __T__ = new HandEventTake;
36 HandEventBase __D__ = new HandEventDrop;
37 HandEventBase __Tw_ = new HandEventThrow;
38 HandEventBase __M__ = new HandEventMoveTo;
40 HandEventBase __F__ = new HandEventForceSwap;
41 HandEventBase __X__ = new HandEventDestroy;
42 HandEventBase __Xd_ = new HandEventDestroyed;
44 HandEventBase __Re_ = new HandEventDestroyAndReplaceWithNewElsewhere;
45 HandEventBase __Rh_ = new HandEventDestroyElsewhereAndReplaceWithNewInHands;
46 HandEventBase __Rd_ = new HandEventReplaced;
47 HandEventBase __Cd_ = new HandEventCreated;
48 HandEventBase _fin_ = new HandEventHumanCommandActionFinished;
49 HandEventBase _abt_ = new HandEventHumanCommandActionAborted;
50
51
52 HandReplacingItemInHands replacing = new HandReplacingItemInHands(GetManOwner());
53 HandReplacingItemInHands replacingElsewhere = new HandReplacingItemInHands(GetManOwner());
54 HandReplacingItemElsewhereWithNewInHands replacingElsewhere3 = new HandReplacingItemElsewhereWithNewInHands(GetManOwner());
55
56 // setup transitions
59
62 m_FSM.AddTransition(new HandTransition(m_Equipped, __M__, m_Empty, new HandActionMoveTo, new HandGuardAnd(new HandGuardHasItemInHands(GetManOwner()), new HandGuardCanMove(GetManOwner()))));
63 m_FSM.AddTransition(new HandTransition(m_Equipped, __X__, m_Empty, new HandActionDestroy, new HandGuardHasItemInHands(GetManOwner())));
64 m_FSM.AddTransition(new HandTransition(m_Equipped, __Xd_, m_Empty, new HandActionDestroyed, new HandGuardHasDestroyedItemInHands(GetManOwner())));
65 m_FSM.AddTransition(new HandTransition(m_Equipped, __Xd_, m_Equipped, new HandActionDestroyed, new HandGuardNot(new HandGuardHasDestroyedItemInHands(GetManOwner()))));
66
67 m_FSM.AddTransition(new HandTransition(m_Equipped, __R__, replacing));
68 m_FSM.AddTransition(new HandTransition(replacing, _fin_, m_Equipped));
69 replacing.AddTransition(new HandTransition(replacing.m_Replacing, _abt_, m_Equipped));
70
74
77 replacingElsewhere3.AddTransition(new HandTransition(replacingElsewhere3.m_Replacing, _abt_, m_Empty));
78
80 m_FSM.AddTransition(new HandTransition(m_Equipped, __W__, m_Equipped, new HandActionSwap, new HandGuardAnd(new HandGuardHasItemInHands(GetManOwner()), new HandGuardCanSwap(GetManOwner()))));
81 m_FSM.AddTransition(new HandTransition(m_Equipped, __F__, m_Equipped, new HandActionForceSwap, new HandGuardAnd(new HandGuardHasItemInHands(GetManOwner()), new HandGuardCanForceSwap(GetManOwner()))));
82
83 // start FSM
84 m_FSM.SetInitialState(m_Empty);
85 m_FSM.Start();
86
87 super.Init();
88 }
void hndDebugPrint(string s)
Definition HandFSM.c:1
FSMTransition< HandStateBase, HandEventBase, HandActionBase, HandGuardBase > HandTransition
Definition HandFSM.c:28
Abstracted event, not to be used, only inherited.
Definition Hand_Events.c:195
Definition Hand_Events.c:754
Definition Hand_Events.c:660
Definition Hand_Guards.c:112
void CreateStableStates()
Definition HumanInventoryWithFSM.c:16
Definition Debug.c:735
static bool IsInventoryHFSMLogEnable()
Definition Debug.c:809

Перекрестные ссылки CreateStableStates(), HumanInventory::GetManOwner(), hndDebugPrint(), LogManager::IsInventoryHFSMLogEnable(), m_Empty, m_Equipped и m_FSM.

◆ IsIdle()

bool IsIdle ( )
inlineprotected
156{ return m_FSM.GetCurrentState().IsIdle(); }

Перекрестные ссылки m_FSM.

◆ NetSyncCurrentStateID()

NetSyncCurrentStateID ( int id)
inlineprotected

Engine callback - network synchronization of FSM's state. not intended to direct use.

162 {
163 m_FSM.NetSyncCurrentStateID(id);
164 }

Перекрестные ссылки m_FSM.

◆ OnStoreLoad()

override bool OnStoreLoad ( ParamsReadContext ctx,
int version )
inlineprotected
134 {
135 if ( !super.OnStoreLoad(ctx, version) )
136 return false;
137
138 //@TODO
139 //m_FSM.OnStoreLoad(ctx, version);
140
141 return true;
142 }

◆ OnStoreSave()

override void OnStoreSave ( ParamsWriteContext ctx)
inlineprotected
145 {
146 super.OnStoreSave(ctx);
147 //@TODO
148 //m_FSM.OnStoreSave(ctx, version);
149 }

◆ ProcessHandAbortEvent()

bool ProcessHandAbortEvent ( HandEventBase e)
inlineprotected
117 {
118 //SyncRemote(e);
120 m_FSM.ProcessAbortEvent(e, aa);
121 if (aa == ProcessEventResult.FSM_OK)
122 {
123 if (LogManager.IsInventoryHFSMLogEnable()) hndDebugSpam("[hndfsm] STS = " + GetManOwner().GetSimulationTimeStamp() + " Processed event e=" + e.ToString());
124 return true;
125 }
126 else
127 {
128 //if (LogManager.IsInventoryHFSMLogEnable()) hndDebugPrint("FSM refused to process event (no transition): src=" + GetCurrentState().ToString() + " event=" + e.ToString());
129 return false;
130 }
131 }
ProcessEventResult
Definition FSMBase.c:41
void hndDebugSpam(string s)
Definition HandFSM.c:9

Перекрестные ссылки HumanInventory::GetManOwner(), hndDebugSpam(), LogManager::IsInventoryHFSMLogEnable() и m_FSM.

◆ ProcessHandEvent()

ProcessHandEvent ( HandEventBase e)
inlineprotected

hand's fsm handling of events @NOTE: warning: ProcessHandEvent can be called only within DayZPlayer::HandleInventory (or CommandHandler)

97 {
98 //SyncRemote(e);
99 if (m_FSM.ProcessEvent(e) == ProcessEventResult.FSM_OK)
100 {
101 #ifdef DEVELOPER
103 {
104 Debug.InventoryHFSMLog("STS = " + GetManOwner().GetSimulationTimeStamp() , e.ToString(), "ProcessHandEvent", e.m_Player.ToString() );
105 }
106 #endif
107 return true;
108 }
109 else
110 {
111 //if (LogManager.IsInventoryHFSMLogEnable()) hndDebugPrint("FSM refused to process event (no transition): src=" + GetCurrentState().ToString() + " event=" + e.ToString());
112 return false;
113 }
114 }
Definition Debug.c:14
static void InventoryHFSMLog(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Definition Debug.c:196

Перекрестные ссылки HumanInventory::GetManOwner(), Debug::InventoryHFSMLog(), LogManager::IsInventoryHFSMLogEnable() и m_FSM.

Поля

◆ m_Empty

ref HandStateBase m_Empty
protected

hand slot state machine

Используется в CreateStableStates() и Init().

◆ m_Equipped

ref HandStateBase m_Equipped
protected

Используется в CreateStableStates() и Init().

◆ m_FSM


Объявления и описания членов класса находятся в файле: