示例#1
0
        private IMarker GetSingleTileMarker(Tile[,] tiles, mapObjectgroupObject o, string levelName)
        {
            var point = new Point((int)double.Parse(o.x) / 16, (int)double.Parse(o.y) / 16);
            var tile  = GetTile(tiles, point);

            switch (tile)
            {
            case Tile.Portal:
            {
                var target = PortalTarget.FromTargetId(o.name, levelName);
                if (target?.Spawnpoint == null)
                {
                    Warn($"Invalid Portal Target \"{o.name}\" at {point}. (syntax: [LEVEL.]SPAWNPOINT )");
                }
                return(new Portal
                    {
                        Target = target,
                        Point = point
                    });
            }

            case Tile.Spawnpoint:
                return(new Spawnpoint
                {
                    SpawnpointId = o.name,
                    Point = point
                });

            case Tile.PressurePlate:
                return(new PressurePlate
                {
                    Trigger = o.name,
                    Point = point
                });

            case Tile.FlameThrowerOffset:
                if (!int.TryParse(o.name, out var shoot_offset))
                {
                    shoot_offset = 0;
                    Warn($"Invalid flamethrower offset \"{o.name}\" at {point}: should be 0, 1, 2 or 3.");
                }

                tiles[point.X, point.Y] = Tile.FlameThrowerOffset + shoot_offset;
                return(null);

            default:
                throw new Exception(
                          $"Illegal Point object found at {point}. Only allowed on tiles of type Portal, Spawnpoint, PressurePlate.");
            }
        }
示例#2
0
        private static IMarker GetRectangularMarker(mapObjectgroupObject o)
        {
            var x0 = (int)double.Parse(o.x) / 16;
            var y0 = (int)double.Parse(o.y) / 16;
            var x1 = (int)(double.Parse(o.x) + double.Parse(o.width)) / 16;
            var y1 = (int)(double.Parse(o.y) + double.Parse(o.height)) / 16;

            return(new TriggerArea
            {
                Trigger = o.name,
                Left = x0,
                Top = y0,
                Right = x1,
                Bottom = y1
            });
        }