// Validates the context preconditions public override bool ValidateContextPreconditions(WorldState current, bool planning) { E_CoverState coverState = Owner.WorldState.GetWSProperty(E_PropKey.CoverState).GetCoverState(); //not in cover - failed if (coverState == E_CoverState.None) { return(false); } //no move direction - failed if (Owner.BlackBoard.Desires.MoveDirection == Vector3.zero) { return(false); } if (coverState == E_CoverState.Middle && Vector3.Dot(Owner.BlackBoard.Desires.MoveDirection, Owner.BlackBoard.Cover.Forward) < 0.6f) { return(true); } if (Owner.BlackBoard.CoverPosition == E_CoverDirection.Left && Vector3.Dot(Owner.BlackBoard.Desires.MoveDirection, Owner.BlackBoard.Cover.Left) < 0.4f) { return(true); } if (Owner.BlackBoard.CoverPosition == E_CoverDirection.Right && Vector3.Dot(Owner.BlackBoard.Desires.MoveDirection, Owner.BlackBoard.Cover.Right) < 0.4f) { return(true); } return(false); }
public void SetWSProperty(E_PropKey key, E_CoverState value) { if (IsWSPropertySet(key)) { WorldStatePropFactory.Return(WorldStateProperties[(int)key]); WorldStateProperties[(int)key] = WorldStatePropFactory.Create(key, value); } else { WorldStateProperties[(int)key] = WorldStatePropFactory.Create(key, value); } }
public override void CalculateGoalRelevancy() { //AgentOrder order = Ai.BlackBoard.OrderGet(); //if(order != null && order.Type == AgentOrder.E_OrderType.E_GOTO) GoalRelevancy = 0; if (Owner.BlackBoard.Cover == null) { return; } if (Owner.BlackBoard.MotionType != E_MotionType.None) { return; } WorldStateProp prop = Owner.WorldState.GetWSProperty(E_PropKey.AtTargetPos); if (prop != null && prop.GetBool() == true) { return; } E_CoverState coverState = Owner.WorldState.GetWSProperty(E_PropKey.CoverState).GetCoverState(); if (coverState == E_CoverState.Middle && Vector3.Dot(Owner.BlackBoard.Desires.MoveDirection, Owner.BlackBoard.Cover.Forward) > 0.6f) { return; } if (Owner.BlackBoard.CoverPosition == E_CoverDirection.Left && Vector3.Dot(Owner.BlackBoard.Desires.MoveDirection, Owner.BlackBoard.Cover.Left) > -0.4f) { return; } if (Owner.BlackBoard.CoverPosition == E_CoverDirection.Right && Vector3.Dot(Owner.BlackBoard.Desires.MoveDirection, Owner.BlackBoard.Cover.Right) > -0.4f) { return; } GoalRelevancy = Owner.BlackBoard.GoapSetup.GoToRelevancy; }
public static WorldStateProp Create(E_PropKey key, E_CoverState state) { WorldStateProp p = null; if (m_UnusedProps.Count > 0) { p = m_UnusedProps.Dequeue(); p.CoverState = state; p.PropType = E_PropType.CoverState; } else { p = new WorldStateProp(state); } p.Time = UnityEngine.Time.timeSinceLevelLoad; p.PropKey = key; return(p); }
public WorldStateProp(E_CoverState state) { CoverState = state; PropType = E_PropType.CoverState; }