コード例 #1
0
        private Task <Vector3Int> FindItem(Vector3Int origin, Type itemToFind)
        {
            // breadth first search for the itemtype
            HashSet <Vector3Int> failedPositions = new HashSet <Vector3Int>();
            Queue <Vector3Int>   testPositions   = new Queue <Vector3Int>();

            testPositions.Enqueue(origin);
            while (testPositions.Count > 0)
            {
                Vector3Int current = testPositions.Dequeue();
                failedPositions.Add(current);
                InventoryComponent[] inventories = ItemMap.GetInventories(current);
                foreach (InventoryComponent inventory in inventories)
                {
                    if (inventory.HasItem(itemToFind))
                    {
                        return(Task.FromResult(current));
                    }
                }

                foreach (Vector3Int delta in DeltaPositions.DeltaPositions3D)
                {
                    Vector3Int nextPos = current + delta;
                    if (Astar.IsStepValid(nextPos, current, delta) && !failedPositions.Contains(nextPos))
                    {
                        testPositions.Enqueue(nextPos);
                    }
                }
            }
            return(null);
        }
コード例 #2
0
        public override State OnDuring()
        {
            Vector3Int currPos = user.Position;

            foreach (var delta in DeltaPositions.GetRandomDeltaPositions3D())
            {
                Vector3Int newPos = currPos + delta;
                if (Astar.IsStepValid(newPos, currPos, delta))
                {
                    user.Move(newPos);
                    break;
                }
            }
            return(new WaitState(this.logger));
        }