Bot_TestItemMoveBackAndForth.c
class BotTestItemMoveBackAndForth extends BotStateBase
{
EntityAI m_Entity;
ref BotTestItemMoveBackAndForth_MoveFromSlotToSlot m_Move;
void BotTestItemMoveBackAndForth (Bot bot = NULL, BotStateBase parent = NULL)
{
// setup nested state machine
m_FSM = new BotFSM(this); // @NOTE: set owner of the submachine fsm
m_Move = new BotTestItemMoveBackAndForth_MoveFromSlotToSlot(m_Bot, this);
// events
BotEventBase __EntAtt__ = new BotEventEntityAttached;
// transitions
m_FSM.AddTransition(new BotTransition( m_Move, __EntAtt__, m_Move));
m_FSM.SetInitialState(m_Move);
}
override void OnEntry (BotEventBase e)
{
//m_Entity = m_Owner.GetInventory().CreateAttachment("TaloonBag_Orange");
//m_Entity = m_Owner.GetInventory().FindAttachment();
GameInventory ownerInventory = m_Owner.GetInventory();
EntityAI hgear = ownerInventory.FindAttachment( InventorySlots.GetSlotIdFromString("Headgear") );
EntityAI mask = ownerInventory.FindAttachment( InventorySlots.GetSlotIdFromString("Mask") );
if (hgear)
m_Entity = hgear;
if (mask)
m_Entity = mask;
InventoryLocation loc = new InventoryLocation;
if (m_Entity.GetInventory().GetCurrentInventoryLocation(loc))
{
m_Move.m_WaitingForSlot = loc.GetSlot();
}
else
Error("EE");
m_Move.m_Entity = m_Entity;
super.OnEntry(e);
}
override void OnExit (BotEventBase e)
{
m_Entity = null;
super.OnExit(e);
}
override void OnUpdate (float dt)
{
super.OnUpdate(dt);
}
};
class BotTestItemMoveBackAndForth_MoveFromSlotToSlot extends BotStateBase
{
EntityAI m_Entity;
int m_WaitingForSlot = InventorySlots.INVALID;
int m_hgSlot = InventorySlots.GetSlotIdFromString("Headgear");
int m_mskSlot = InventorySlots.GetSlotIdFromString("Mask");
override void OnEntry (BotEventBase e)
{
super.OnEntry(e);
}
override void OnAbort (BotEventBase e) { super.OnAbort(e); }
override void OnExit (BotEventBase e)
{
super.OnExit(e);
}
int GetNextSlot (int curr)
{
if (curr == m_hgSlot)
return m_mskSlot;
if (curr == m_mskSlot)
return m_hgSlot;
Error("EE2");
return InventorySlots.INVALID;
}
override void OnUpdate (float dt)
{
if (m_Entity)
{
botDebugPrint("[bot] + " + m_Owner + " move item=" + m_Entity);
InventoryLocation loc = new InventoryLocation;
if (m_Entity.GetInventory().GetCurrentInventoryLocation(loc))
{
if (loc.GetType() == InventoryLocationType.ATTACHMENT)
{
if (loc.GetSlot() == m_WaitingForSlot)
{
int nextSlot = GetNextSlot(m_WaitingForSlot);
botDebugPrint("[bot] + " + m_Owner + " will switch slot=" + nextSlot + " for item=" + m_Entity);
m_WaitingForSlot = nextSlot;
m_Owner.PredictiveTakeEntityAsAttachmentEx(m_Entity, nextSlot);
//m_Bot.ProcessEvent(new BotEventEntityDet(m_Owner, m_Entity));
}
}
}
}
}
};