Bot_TestSpawnAndOpenCan.c
class BotEventEntityInHandsclass BotSpawnEntityInHandsclass BotEventEntityInHandsOpenedclass BotOpenEntityInHandsclass Bot_TestSpawnOpenclass BotEventHandsEmptyclass BotWaitForEmptyHandsclass BotWaitForChangeInHandsclass BotDropEntityInHandsclass BotEatEntityInHandsclass BotDestroyEntityInHandsclass Bot_TestSpawnOpenDropclass Bot_TestSpawnOpenDestroyclass Bot_TestSpawnOpenEat
class BotEventEntityInHands : BotEventBase { };
class BotSpawnEntityInHands extends BotStateBase
{
string m_Type;
void BotSpawnEntityInHands (Bot bot = NULL, BotStateBase parent = NULL, string new_type = "")
{
if (new_type == string.Empty)
m_Type = "TunaCan";
else
m_Type = new_type;
}
override void OnEntry (BotEventBase e)
{
super.OnEntry(e);
if (m_Owner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
{
m_Owner.GetHumanInventory().CreateInHands(m_Type);
}
}
override void OnExit (BotEventBase e) { super.OnExit(e); }
override void OnUpdate (float dt)
{
super.OnUpdate(dt);
EntityAI inHands = m_Owner.GetEntityInHands();
if (inHands)
{
botDebugPrint("[bot] + " + m_Owner + " hand item=" + inHands + " bot=" + m_Owner);
m_Bot.ProcessEvent(new BotEventEntityInHands(m_Owner, inHands));
}
}
};
class BotEventEntityInHandsOpened : BotEventBase { };
class BotOpenEntityInHands extends BotStateBase
{
EntityAI m_Entity;
override void OnEntry (BotEventBase e)
{
super.OnEntry(e);
if (m_Owner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
{
BotEventEntityInHands ev_ih = BotEventEntityInHands.Cast(e);
if (ev_ih)
{
m_Entity = ev_ih.m_Entity;
Edible_Base b = Edible_Base.Cast(m_Entity);
if (b)
{
botDebugPrint("[bot] + " + m_Owner + " will open edible item=" + b + " bot=" + m_Owner);
b.Open();
}
}
}
}
override void OnAbort (BotEventBase e) { super.OnAbort(e); }
override void OnExit (BotEventBase e)
{
super.OnExit(e);
}
override void OnUpdate (float dt)
{
super.OnUpdate(dt);
EntityAI inHands = m_Owner.GetEntityInHands();
botDebugSpam("[bot] + " + m_Owner + " wait for opened item inHands=" + inHands + " bot=" + m_Owner);
if (inHands)
{
string t_str = inHands.GetType();
//string t_str = t.ToString();
if (t_str.IndexOf("_Opened") != -1)
{
botDebugPrint("[bot] + " + m_Owner + " opened item=" + inHands + " bot=" + m_Owner);
m_Bot.ProcessEvent(new BotEventEntityInHandsOpened(m_Owner, inHands));
}
}
}
};
class Bot_TestSpawnOpen extends BotStateBase
{
string m_Type;
ref BotSpawnEntityInHands m_Spawning;
ref BotOpenEntityInHands m_Opening;
void Bot_TestSpawnOpen (Bot bot = NULL, BotStateBase parent = NULL, string new_type = "")
{
m_Type = new_type;
// setup nested state machine
m_FSM = new BotFSM(this); // @NOTE: set owner of the submachine fsm
m_Spawning = new BotSpawnEntityInHands(m_Bot, this);
m_Opening = new BotOpenEntityInHands(m_Bot, this);
// events
BotEventBase __EntInH__ = new BotEventEntityInHands;
// transitions
m_FSM.AddTransition(new BotTransition( m_Spawning, __EntInH__, m_Opening));
//m_FSM.AddTransition(new BotTransition( m_Opening, __EntAtt__, m_Eating));
//m_FSM.AddTransition(new BotTransition( m_Eating, __EntAtt__, m_Eating));
m_FSM.SetInitialState(m_Spawning);
}
override void OnEntry (BotEventBase e) { super.OnEntry(e); }
override void OnExit (BotEventBase e) { super.OnExit(e); }
override void OnUpdate (float dt) { super.OnUpdate(dt); }
};
class BotEventHandsEmpty : BotEventBase { };
class BotWaitForEmptyHands extends BotStateBase
{
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)
{
super.OnUpdate(dt);
EntityAI inHands = m_Owner.GetEntityInHands();
botDebugSpam("[bot] + " + m_Owner + " waiting for empty hands, inHands=" + inHands + " bot=" + m_Owner);
if (!inHands)
{
botDebugPrint("[bot] + " + m_Owner + " hand slot empty. bot=" + m_Owner);
m_Bot.ProcessEvent(new BotEventHandsEmpty(m_Owner, inHands));
}
}
};
class BotWaitForChangeInHands extends BotStateBase
{
/*override void OnExit (BotEventBase e)
{
super.OnExit(e);
m_Bot.ProcessEvent(new BotEventEndOK(m_Owner));
}*/
};
class BotDropEntityInHands extends BotWaitForChangeInHands
{
EntityAI m_Entity;
override void OnEntry (BotEventBase e)
{
super.OnEntry(e);
EntityAI inHands = m_Owner.GetEntityInHands();
if (inHands)
{
botDebugPrint("[bot] + " + m_Owner + " dropping item=" + inHands + " bot=" + m_Owner);
if (m_Owner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
m_Owner.PredictiveDropEntity(inHands);
//m_Owner.LocalDropEntity(inHands);
}
}
override void OnAbort (BotEventBase e) { super.OnAbort(e); }
override void OnExit (BotEventBase e) { super.OnExit(e); }
override void OnUpdate (float dt) { super.OnUpdate(dt); }
};
class BotEatEntityInHands extends BotWaitForChangeInHands
{
EntityAI m_Entity;
override void OnEntry (BotEventBase e)
{
super.OnEntry(e);
EntityAI inHands = m_Owner.GetEntityInHands();
if (inHands)
{
botDebugPrint("[bot] + " + m_Owner + " eating item=" + inHands + " bot=" + m_Owner);
if (m_Owner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
{
#ifdef BOT
ActionManagerBase mgr = m_Owner.GetActionManager();
ActionManagerClient cli_mgr = ActionManagerClient.Cast(mgr);
if (cli_mgr)
{
ActionTarget target;
target = new ActionTarget(inHands, null, -1, vector.Zero, -1);
cli_mgr.PerformAction(AT_EAT, target, inHands);
}
#endif
}
}
}
override void OnAbort (BotEventBase e) { super.OnAbort(e); }
override void OnExit (BotEventBase e) { super.OnExit(e); }
override void OnUpdate (float dt) { super.OnUpdate(dt); }
};
class BotDestroyEntityInHands extends BotWaitForChangeInHands
{
EntityAI m_Entity;
override void OnEntry (BotEventBase e)
{
super.OnEntry(e);
EntityAI inHands = m_Owner.GetEntityInHands();
if (inHands)
{
botDebugPrint("[bot] + " + m_Owner + " deleting item=" + inHands + " bot=" + m_Owner);
if (m_Owner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
inHands.Delete();
}
}
override void OnAbort (BotEventBase e) { super.OnAbort(e); }
override void OnExit (BotEventBase e) { super.OnExit(e); }
override void OnUpdate (float dt) { super.OnUpdate(dt); }
};
class Bot_TestSpawnOpenDrop extends Bot_TestSpawnOpen
{
ref BotDropEntityInHands m_Dropping;
void Bot_TestSpawnOpenDrop (Bot bot = NULL, BotStateBase parent = NULL, string new_type = "")
{
m_Dropping = new BotDropEntityInHands(m_Bot, this);
// events
BotEventBase __EntOpn__ = new BotEventEntityInHandsOpened;
BotEventBase __HndChg__ = new BotEventOnItemInHandsChanged;
// transitions
m_FSM.AddTransition(new BotTransition( m_Opening, __EntOpn__, m_Dropping));
m_FSM.AddTransition(new BotTransition( m_Dropping, __HndChg__, NULL));
}
override void OnEntry (BotEventBase e) { super.OnEntry(e); }
override void OnExit (BotEventBase e) { super.OnExit(e); }
override void OnUpdate (float dt) { super.OnUpdate(dt); }
};
class Bot_TestSpawnOpenDestroy extends Bot_TestSpawnOpen
{
ref BotDestroyEntityInHands m_Destroying;
void Bot_TestSpawnOpenDestroy (Bot bot = NULL, BotStateBase parent = NULL, string new_type = "")
{
m_Destroying = new BotDestroyEntityInHands(m_Bot, this);
// events
BotEventBase __EntOpn__ = new BotEventEntityInHandsOpened;
BotEventBase __HndChg__ = new BotEventOnItemInHandsChanged;
// transitions
m_FSM.AddTransition(new BotTransition( m_Opening, __EntOpn__, m_Destroying));
m_FSM.AddTransition(new BotTransition( m_Destroying, __HndChg__, NULL));
}
override void OnEntry (BotEventBase e) { super.OnEntry(e); }
override void OnExit (BotEventBase e) { super.OnExit(e); }
override void OnUpdate (float dt) { super.OnUpdate(dt); }
};
class Bot_TestSpawnOpenEat extends Bot_TestSpawnOpen
{
ref BotEatEntityInHands m_Eating;
void Bot_TestSpawnOpenEat (Bot bot = NULL, BotStateBase parent = NULL, string new_type = "")
{
m_Eating = new BotEatEntityInHands(m_Bot, this);
// events
BotEventBase __EntOpn__ = new BotEventEntityInHandsOpened;
BotEventBase __HndChg__ = new BotEventOnItemInHandsChanged;
// transitions
m_FSM.AddTransition(new BotTransition( m_Opening, __EntOpn__, m_Eating));
m_FSM.AddTransition(new BotTransition( m_Eating, __HndChg__, NULL));
}
override void OnEntry (BotEventBase e)
{
super.OnEntry(e);
}
override void OnExit (BotEventBase e)
{
super.OnExit(e);
}
override void OnUpdate (float dt)
{
super.OnUpdate(dt);
}
};