Esempio n. 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);
        }
Esempio n. 2
0
        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);
        }