示例#1
0
        public void LoadOpenWorld(string levelName)
        {
            var possibleMovements = StaticServiceLocator.GetService <IPossibleMovements>();

            _possibleMovements = new PossibleMovementWrapper(possibleMovements);
            ClickEvent         = (sender, args) =>
            {
                Action action = Show <MainMenuScreen>;
                action.Invoke();
            };
            OpenWorldGameMode = new OpenWorldGameMode(_viewPort, _possibleMovements, levelName, _entityManager, _storyEngine, ClickEvent);
            var map        = OpenWorldGameMode.Map;
            var player     = PlayerEntity.Instance;
            var grassLayer = map.GetLayer <TiledTileLayer>("Grass-Layer");

            if (grassLayer != null)
            {
                var grassCollisionSystem = new TiledCollisionSystem(_possibleMovements, map, "Grass-Layer");
                PlayerEntity.Instance.OnMoveEvent += (sender, args) =>
                {
                    var point          = player.Position.ToPoint();
                    var grassCollision = grassCollisionSystem.CheckCollision(point);
                    if (grassCollision)
                    {
                        player.SpeedContext.Terrain = new SpeedGrass();
                    }
                    else if (player.SpeedContext.Terrain != null)
                    {
                        player.SpeedContext.Terrain = null;
                    }
                };
            }
            var teleportlayer = map.GetObjectGroup("Teleport-Layer");

            if (teleportlayer != null)
            {
                var tileSize    = new Point(map.TileWidth, map.TileHeight);
                var teleporters = new TiledObjectCollisionSystem(_possibleMovements, map, tileSize, "Teleport-Layer");
                PlayerEntity.Instance.OnMoveEvent += (sender, args) =>
                {
                    var point = player.Position.ToPoint();
                    if (teleporters.CheckCollision(point))
                    {
                        var teleporter = teleporters.GetObjectAt(point);
                        var position   = StringToVector.ConvertString(teleporter.Type);
                        PlayerEntity.Instance = new PlayerEntity(position);
                        GameModeStack.Unload();
                        LoadOpenWorld(teleporter.Name);
                    }
                };
            }
            GameModes.Push(OpenWorldGameMode);
        }
示例#2
0
        public void PathTypesTest()
        {
            var p1 = new Point(9, 5);
            var p2 = new Point(10, 4);

            var eightWayPossibleMovement = new EightWayPossibleMovement(new CrowDistance());

            eightWayPossibleMovement.GetAdjacentLocations(p2);
            eightWayPossibleMovement.PositionsToCheck(p1, p2);

            PossibleMovementWrapper wrapper = new PossibleMovementWrapper(eightWayPossibleMovement);

            wrapper.PositionsToCheck(p1, p2);
            wrapper.GetAdjacentLocations(p1);
            Assert.AreEqual(wrapper.Heuristic, eightWayPossibleMovement.Heuristic);

            eightWayPossibleMovement = new EightWayPossibleMovement(new DiagonalDistance());
            wrapper = new PossibleMovementWrapper(eightWayPossibleMovement);
            Assert.AreEqual(wrapper.Heuristic, eightWayPossibleMovement.Heuristic);

            eightWayPossibleMovement = new EightWayPossibleMovement(new ManhattanDistance());
            wrapper = new PossibleMovementWrapper(eightWayPossibleMovement);
            Assert.AreEqual(wrapper.Heuristic, eightWayPossibleMovement.Heuristic);


            var fourWayPossibleMovement = new FourWayPossibleMovement(new CrowDistance());

            fourWayPossibleMovement.PositionsToCheck(p1, p2);
            fourWayPossibleMovement.GetAdjacentLocations(p2);

            wrapper = new PossibleMovementWrapper(fourWayPossibleMovement);
            wrapper.PositionsToCheck(p1, p2);
            wrapper.GetAdjacentLocations(p1);
            Assert.AreEqual(wrapper.Heuristic, fourWayPossibleMovement.Heuristic);

            fourWayPossibleMovement = new FourWayPossibleMovement(new DiagonalDistance());
            wrapper = new PossibleMovementWrapper(fourWayPossibleMovement);
            Assert.AreEqual(wrapper.Heuristic, fourWayPossibleMovement.Heuristic);

            fourWayPossibleMovement = new FourWayPossibleMovement(new ManhattanDistance());
            wrapper = new PossibleMovementWrapper(fourWayPossibleMovement);
            Assert.AreEqual(wrapper.Heuristic, fourWayPossibleMovement.Heuristic);
        }