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); }
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); }