Bot_TestAttachAndDropCycle.c
class BotEventEntityAttachedclass BotEventEntityDetachedclass BotTestAttachAndDropCycleclass BotTestAttachAndDropCycle_Detachingclass BotTestAttachAndDropCycle_Attaching
class BotEventEntityAttached : BotEventBase { };
class BotEventEntityDetached : BotEventBase { };
class BotTestAttachAndDropCycle extends BotStateBase
{
EntityAI m_Entity;
ref BotTestAttachAndDropCycle_Detaching m_Detaching;
ref BotTestAttachAndDropCycle_Attaching m_Attaching;
void BotTestAttachAndDropCycle (Bot bot = NULL, BotStateBase parent = NULL)
{
// setup nested state machine
m_FSM = new BotFSM(this); // @NOTE: set owner of the submachine fsm
m_Detaching = new BotTestAttachAndDropCycle_Detaching(m_Bot, this);
m_Attaching = new BotTestAttachAndDropCycle_Attaching(m_Bot, this);
// events
BotEventBase __EntAtt__ = new BotEventEntityAttached;
BotEventBase __EntDet__ = new BotEventEntityDetached;
// transitions
m_FSM.AddTransition(new BotTransition( m_Detaching, __EntDet__, m_Attaching));
m_FSM.AddTransition(new BotTransition( m_Attaching, __EntAtt__, m_Detaching));
m_FSM.SetInitialState(m_Detaching);
}
override void OnEntry (BotEventBase e)
{
m_Entity = m_Owner.GetInventory().CreateAttachment("TaloonBag_Orange");
m_Detaching.m_Entity = m_Entity;
m_Attaching.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 BotTestAttachAndDropCycle_Detaching extends BotStateBase
{
EntityAI m_Entity;
override void OnEntry (BotEventBase e)
{
super.OnEntry(e);
}
override void OnAbort (BotEventBase e) { super.OnAbort(e); }
override void OnExit (BotEventBase e)
{
super.OnExit(e);
}
override void OnUpdate (float dt)
{
if (m_Entity)
{
botDebugPrint("[bot] + " + m_Owner + " drop item=" + m_Entity + " bot=" + m_Owner);
m_Owner.PredictiveDropEntity(m_Entity);
InventoryLocation loc = new InventoryLocation;
if (m_Entity.GetInventory().GetCurrentInventoryLocation(loc))
{
if (loc.GetType() == InventoryLocationType.GROUND)
{
m_Bot.ProcessEvent(new BotEventEntityDetached(m_Owner, m_Entity));
}
}
}
}
};
class BotTestAttachAndDropCycle_Attaching extends BotStateBase
{
EntityAI m_Entity;
override void OnEntry (BotEventBase e)
{
super.OnEntry(e);
}
override void OnAbort (BotEventBase e) { super.OnAbort(e); }
override void OnExit (BotEventBase e)
{
super.OnExit(e);
}
override void OnUpdate (float dt)
{
if (m_Entity)
{
botDebugPrint("[bot] + " + m_Owner + " att item=" + m_Entity + " bot=" + m_Owner);
if (m_Owner.GetInventory().CanAddAttachment(m_Entity))
{
m_Owner.PredictiveTakeEntityAsAttachment(m_Entity);
InventoryLocation loc = new InventoryLocation;
if (m_Entity.GetInventory().GetCurrentInventoryLocation(loc))
{
if (loc.GetType() == InventoryLocationType.ATTACHMENT)
{
m_Bot.ProcessEvent(new BotEventEntityAttached(m_Owner, m_Entity));
}
}
}
}
}
};