public static void Create(Submarine sub) { int width = 4096; int height = 4096; Rectangle subDimensions = sub.CalculateDimensions(false); Vector2 viewPos = subDimensions.Center.ToVector2(); float scale = Math.Min(width / (float)subDimensions.Width, height / (float)subDimensions.Height); var viewMatrix = Matrix.CreateTranslation(new Vector3(width / 2.0f, height / 2.0f, 0)); var transform = Matrix.CreateTranslation( new Vector3(-viewPos.X, viewPos.Y, 0)) * Matrix.CreateScale(new Vector3(scale, scale, 1)) * viewMatrix; using (RenderTarget2D rt = new RenderTarget2D( GameMain.Instance.GraphicsDevice, width, height, false, SurfaceFormat.Color, DepthFormat.None)) using (SpriteBatch spriteBatch = new SpriteBatch(GameMain.Instance.GraphicsDevice)) { Viewport prevViewport = GameMain.Instance.GraphicsDevice.Viewport; GameMain.Instance.GraphicsDevice.Viewport = new Viewport(0, 0, width, height); GameMain.Instance.GraphicsDevice.SetRenderTarget(rt); GameMain.Instance.GraphicsDevice.Clear(Color.Transparent); spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.NonPremultiplied, null, null, null, null, transform); Submarine.Draw(spriteBatch); Submarine.DrawFront(spriteBatch); Submarine.DrawDamageable(spriteBatch, null); spriteBatch.End(); GameMain.Instance.GraphicsDevice.SetRenderTarget(null); GameMain.Instance.GraphicsDevice.Viewport = prevViewport; using (FileStream fs = File.Open("wikiimage.png", System.IO.FileMode.Create)) { rt.SaveAsPng(fs, width, height); } } }
public string CreateRoomName() { List <string> roomItems = new List <string>(); foreach (Item item in Item.ItemList) { if (item.CurrentHull != this) { continue; } if (item.GetComponent <Items.Components.Reactor>() != null) { roomItems.Add("reactor"); } if (item.GetComponent <Items.Components.Engine>() != null) { roomItems.Add("engine"); } if (item.GetComponent <Items.Components.Steering>() != null) { roomItems.Add("steering"); } if (item.GetComponent <Items.Components.Sonar>() != null) { roomItems.Add("sonar"); } if (item.HasTag("ballast")) { roomItems.Add("ballast"); } } if (roomItems.Contains("reactor")) { return(TextManager.Get("ReactorRoom")); } else if (roomItems.Contains("engine")) { return(TextManager.Get("EngineRoom")); } else if (roomItems.Contains("steering") && roomItems.Contains("sonar")) { return(TextManager.Get("CommandRoom")); } else if (roomItems.Contains("ballast")) { return(TextManager.Get("Ballast")); } if (ConnectedGaps.Any(g => !g.IsRoomToRoom && g.ConnectedDoor != null)) { return(TextManager.Get("Airlock")); } Rectangle subRect = Submarine.CalculateDimensions(); Alignment roomPos; if (rect.Y - rect.Height / 2 > subRect.Y + subRect.Height * 0.66f) { roomPos = Alignment.Top; } else if (rect.Y - rect.Height / 2 > subRect.Y + subRect.Height * 0.33f) { roomPos = Alignment.CenterY; } else { roomPos = Alignment.Bottom; } if (rect.Center.X < subRect.X + subRect.Width * 0.33f) { roomPos |= Alignment.Left; } else if (rect.Center.X < subRect.X + subRect.Width * 0.66f) { roomPos |= Alignment.CenterX; } else { roomPos |= Alignment.Right; } return(TextManager.Get("Sub" + roomPos.ToString())); }
public string CreateRoomName() { List <string> roomItems = new List <string>(); foreach (Item item in Item.ItemList) { if (item.CurrentHull != this) { continue; } if (item.GetComponent <Items.Components.Reactor>() != null) { roomItems.Add("reactor"); } if (item.GetComponent <Items.Components.Engine>() != null) { roomItems.Add("engine"); } if (item.GetComponent <Items.Components.Steering>() != null) { roomItems.Add("steering"); } if (item.GetComponent <Items.Components.Sonar>() != null) { roomItems.Add("sonar"); } if (item.HasTag("ballast")) { roomItems.Add("ballast"); } } if (roomItems.Contains("reactor")) { return("RoomName.ReactorRoom"); } else if (roomItems.Contains("engine")) { return("RoomName.EngineRoom"); } else if (roomItems.Contains("steering") && roomItems.Contains("sonar")) { return("RoomName.CommandRoom"); } else if (roomItems.Contains("ballast")) { return("RoomName.Ballast"); } var moduleFlags = Submarine?.Info?.OutpostModuleInfo?.ModuleFlags ?? this.moduleTags; if (moduleFlags != null && moduleFlags.Any() && (Submarine.Info.Type == SubmarineType.OutpostModule || Submarine.Info.Type == SubmarineType.Outpost)) { if (moduleFlags.Contains("airlock") && ConnectedGaps.Any(g => !g.IsRoomToRoom && g.ConnectedDoor != null)) { return("RoomName.Airlock"); } } else { if (ConnectedGaps.Any(g => !g.IsRoomToRoom && g.ConnectedDoor != null)) { return("RoomName.Airlock"); } } Rectangle subRect = Submarine.CalculateDimensions(); Alignment roomPos; if (rect.Y - rect.Height / 2 > subRect.Y + subRect.Height * 0.66f) { roomPos = Alignment.Top; } else if (rect.Y - rect.Height / 2 > subRect.Y + subRect.Height * 0.33f) { roomPos = Alignment.CenterY; } else { roomPos = Alignment.Bottom; } if (rect.Center.X < subRect.X + subRect.Width * 0.33f) { roomPos |= Alignment.Left; } else if (rect.Center.X < subRect.X + subRect.Width * 0.66f) { roomPos |= Alignment.CenterX; } else { roomPos |= Alignment.Right; } return("RoomName.Sub" + roomPos.ToString()); }