Ejemplo n.º 1
0
        public MovementNode GetNodeNearest(Vector3 position, LocationTerrainType locationType, bool interior, int occupationFlags)
        {
            MovementNode closest      = MovementNode.Empty;
            MovementNode m            = MovementNode.Empty;
            float        closestSoFar = Mathf.Infinity;
            float        current      = 0f;
            bool         checkFlags   = (occupationFlags < Int32.MaxValue);

            for (int i = 0; i < State.MovementNodes.Count; i++)
            {
                m = State.MovementNodes [i];
                if (!checkFlags || Flags.Check(occupationFlags, m.OccupationFlags, Flags.CheckType.MatchAny))
                {
                    current = Vector3.Distance(position, m.Position);
                    if (current < 2f)
                    {
                        return(closest = m);

                        break;
                    }
                    else if (current < closestSoFar)
                    {
                        closestSoFar = current;
                        closest      = m;
                    }
                }
            }
            if (MovementNode.IsEmpty(m))
            {
                Debug.Log("Returning empty in closest from " + name);
            }
            return(closest);
        }
Ejemplo n.º 2
0
        public MovementNode GetNextNode(MovementNode lastMovementNode, LocationTerrainType locationType, bool interior, int occupationFlags)
        {
            //we only have one location type
            MovementNode mn = MovementNode.Empty;

            if (State.MovementNodes.Count == 0)
            {
                Debug.Log("Movement nodes were zero in " + name);
                return(mn);
            }
            bool checkFlags = (occupationFlags < Int32.MaxValue);

            if (lastMovementNode.ConnectingNodes != null && lastMovementNode.ConnectingNodes.Count > 0)
            {
                int nodeNum = 0;
                if (lastMovementNode.ConnectingNodes.Count > 1)
                {
                    nodeNum = UnityEngine.Random.Range(0, lastMovementNode.ConnectingNodes.Count);
                }
                int index = lastMovementNode.ConnectingNodes [nodeNum];
                mn = State.MovementNodes [lastMovementNode.ConnectingNodes [nodeNum]];
            }
            return(mn);
        }
Ejemplo n.º 3
0
 public bool IsActive(LocationTerrainType locationType, bool interior, int occupationFlags)
 {
     return(worlditem.Is(WIActiveState.Active));
 }
Ejemplo n.º 4
0
 public bool HasMovementNodes(LocationTerrainType locationType, bool interior, int occupationFlags)
 {
     return(State.MovementNodes.Count > 0);
 }