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 bool WaterCollision(Point p) { const string layerName = "Water-Layer"; var waterLayer = Map.GetLayer <TiledTileLayer>(layerName); var collision = false; if (waterLayer != null) { var waterCollision = new TiledCollisionSystem(_possibleMovements, Map, layerName); collision = waterCollision.CheckCollision(p); } return(collision); }