示例#1
0
        public static Zone ZoneA()
        {
            const string want = @"
-------------------
|     |     |     |
-------------------
|     |     |  C  |
-------------------
|     |  B  |     |
-------------------
";

            var zone = new Zone("tests");

            zone.Map        = ZoneMap.TinyMap();
            zone.Name       = "A";
            zone.Boundaries = new List <ZoneBoundary>
            {
                new ZoneBoundary
                {
                    FromZone     = "A",
                    FromPosition = new Vector3(0, 0, -1),
                    ToZone       = "B",
                    ToPosition   = new Vector3(0, 0, 1)
                },
                new ZoneBoundary
                {
                    FromZone     = "A",
                    FromPosition = new Vector3(1, 0, 0),
                    ToZone       = "C",
                    ToPosition   = new Vector3(-1, 0, 0)
                }
            };
            return(zone);
        }
        public void TravelerMarksNodesAsUnWalkableWhenStuck()
        {
            const string unused = @"
-------------------
|  e  |     |  ?  |
-------------------
|  x  |  x  |     |
-------------------
|  s  |     |  ?  |
-------------------
";
            // setup the world
            var zoneMap = ZoneMap.TinyMap();
            var zone    = new Zone("test")
            {
                Map = zoneMap
            };

            var world = new World();

            world.Zones.Add(zone);

            var walker = new Walker(new Vector3(-1, 0, -1));

            // Create the map the blind traveler will move against
            var knownGrid = ZoneMap.TinyMap();

            knownGrid.AddUnWalkableNode(Vector3.Zero);
            knownGrid.AddUnWalkableNode(new Vector3(-1, 0, 0));

            var revealedZone = new Zone("test");

            revealedZone.Map    = knownGrid;
            walker.RevealedZone = revealedZone;

            var traveler      = new Traveler("test", world, walker);
            var stubPersister = new StubPersister();
            var actor         = new KnownNodeActor(stubPersister, traveler.CurrentZone.Map);
            var watcher       = new Watcher(traveler, actor);

            // For this to work in the FFXI Finite State Machine this currently needs to exit
            // Frequently to allow for mobs and other stuff to get targeted. Should customize this behavior
            // To either break on events in the FSM or allow for extension to choose whether to exit under
            // certain conditions or not.
            for (int i = 0; i < 10; i++)
            {
                traveler.PathfindAndWalkToFarAwayWorldMapPosition(new Vector3(-1, 0, 1));
            }

            var want = new Vector3(-1, 0, 1);
            var got  = traveler.Position;


            Assert.Equal(want, got);
            Assert.Equal(2, traveler.CurrentZone.Map.UnknownNodes.Count);
            // Assert.Equal(traveler.PositionHistory);


            // Assert.Equal(want, got);
        }
示例#3
0
        public static Zone ZoneD()
        {
            const string want = @"
-------------------
|     |     |     |
-------------------
|  C  | sig |     |
-------------------
|     |     |  E  |
-------------------
";

            var zone = new Zone("tests");

            zone.Map  = ZoneMap.TinyMap();
            zone.Name = "D";
            zone.Npcs = new ObservableCollection <Person>
            {
                BastokSignetPerson()
            };
            zone.Boundaries = new List <ZoneBoundary>
            {
                new ZoneBoundary
                {
                    FromZone     = "D",
                    FromPosition = new Vector3(1, 0, -1),
                    ToZone       = "E",
                    ToPosition   = new Vector3(-1, 0, 1)
                },

                new ZoneBoundary
                {
                    FromZone     = "D",
                    FromPosition = new Vector3(-1, 0, 0),
                    ToZone       = "C",
                    ToPosition   = new Vector3(1, 0, 0)
                }
            };
            return(zone);
        }