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