示例#1
0
    // 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);
    }
示例#2
0
 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);
     }
 }
示例#3
0
    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;
    }
示例#4
0
    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);
    }
示例#5
0
 public WorldStateProp(E_CoverState state)
 {
     CoverState = state;
     PropType   = E_PropType.CoverState;
 }