public Tile GetTile(TeleporterTileData t) { SetMinimapTile(Color.Blue); if (t.Teleport != null) { t.Teleport.Processed = true; var destinationPosition = t.Teleport.DestinationPosition.ToAbsolutePosition(builder.Data.Maps[t.Teleport.MapIndex]); if (t.Teleport.MapIndex == level) { Successors = new[] { new TileInfo <TileData> { Position = destinationPosition, Tile = builder.CurrentMap[destinationPosition.X, destinationPosition.Y] } }; } return(new Teleport(tilePosition, t.Teleport.MapIndex, destinationPosition, t.Teleport.Rotation.ToMapDirection(), t.IsOpen, t.IsVisible, GetTeleportScopeType(t.Teleport.Scope))); } else { throw new InvalidOperationException("Invalid map format. Teleport tile has to have teleport"); } }
public Tile GetTile(TeleporterTileData t) { if (t.Teleport == null) { throw new InvalidOperationException("Invalid map format. Teleport tile has to have teleport"); } SetMinimapTile(Color.Blue); var initializer = new TeleprotInitializer { Direction = t.Teleport.Rotation.ToMapDirection(), AbsoluteDirection = t.Teleport.RotationType == RotationType.Absolute, Open = t.IsOpen, ScopeConstrain = GetTeleportScopeType(t.Teleport.Scope), TargetTilePosition = t.Teleport.DestinationPosition.ToAbsolutePosition(builder.Data.Maps[t.Teleport.MapIndex]), NextLevelIndex = t.Teleport.MapIndex, Visible = t.IsVisible, }; var res = new TeleportTile(initializer); //setup target tile for in level teleports, cross lever teleportation doesn't work for creatures unless player is near by. GetTeleportTarget(initializer); SetupTeleportSides(initializer, currentGridPosition, true, res); res.Renderer = builder.Factories.RenderersSource.GetTileRenderer(res); this.initializer = initializer; return(res); }