(e31a38ae1) Fixed spritebatch not being disposed when saving submarine preview images, don't reload all subs when saving a sub
This commit is contained in:
@@ -60,11 +60,6 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public CrewManager(XElement element, bool isSinglePlayer)
|
public CrewManager(XElement element, bool isSinglePlayer)
|
||||||
: this(isSinglePlayer)
|
: this(isSinglePlayer)
|
||||||
{
|
|
||||||
return characterListBox.Rect;
|
|
||||||
}
|
|
||||||
|
|
||||||
partial void InitProjectSpecific()
|
|
||||||
{
|
{
|
||||||
guiFrame = new GUIFrame(new RectTransform(Vector2.One, GUICanvas.Instance), null, Color.Transparent)
|
guiFrame = new GUIFrame(new RectTransform(Vector2.One, GUICanvas.Instance), null, Color.Transparent)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -175,142 +175,6 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ApplyTo(RectTransform target)
|
|
||||||
{
|
|
||||||
if (RelativeOffset.HasValue)
|
|
||||||
{
|
|
||||||
target.RelativeOffset = RelativeOffset.Value;
|
|
||||||
}
|
|
||||||
else if (AbsoluteOffset.HasValue)
|
|
||||||
{
|
|
||||||
target.AbsoluteOffset = AbsoluteOffset.Value;
|
|
||||||
}
|
|
||||||
if (RelativeSize.HasValue)
|
|
||||||
{
|
|
||||||
target.RelativeSize = RelativeSize.Value;
|
|
||||||
}
|
|
||||||
else if (AbsoluteSize.HasValue)
|
|
||||||
{
|
|
||||||
target.NonScaledSize = AbsoluteSize.Value;
|
|
||||||
}
|
|
||||||
if (Anchor.HasValue)
|
|
||||||
{
|
|
||||||
target.Anchor = Anchor.Value;
|
|
||||||
}
|
|
||||||
if (Pivot.HasValue)
|
|
||||||
{
|
|
||||||
target.Pivot = Pivot.Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
target.Pivot = RectTransform.MatchPivotToAnchor(target.Anchor);
|
|
||||||
}
|
|
||||||
target.RecalculateChildren(true, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GUIFrame GuiFrame { get; protected set; }
|
|
||||||
|
|
||||||
[Serialize(false, false)]
|
|
||||||
public bool AllowUIOverlap
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ItemComponent linkToUIComponent;
|
|
||||||
[Serialize("", false)]
|
|
||||||
public string LinkUIToComponent
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Serialize(0, false)]
|
|
||||||
public int HudPriority
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool useAlternativeLayout;
|
|
||||||
public bool UseAlternativeLayout
|
|
||||||
{
|
|
||||||
get { return useAlternativeLayout; }
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (AlternativeLayout != null)
|
|
||||||
{
|
|
||||||
if (value == useAlternativeLayout) { return; }
|
|
||||||
useAlternativeLayout = value;
|
|
||||||
if (useAlternativeLayout)
|
|
||||||
{
|
|
||||||
AlternativeLayout?.ApplyTo(GuiFrame.RectTransform);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DefaultLayout?.ApplyTo(GuiFrame.RectTransform);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ApplyTo(RectTransform target)
|
|
||||||
{
|
|
||||||
if (RelativeOffset.HasValue)
|
|
||||||
{
|
|
||||||
target.RelativeOffset = RelativeOffset.Value;
|
|
||||||
}
|
|
||||||
else if (AbsoluteOffset.HasValue)
|
|
||||||
{
|
|
||||||
target.AbsoluteOffset = AbsoluteOffset.Value;
|
|
||||||
}
|
|
||||||
if (RelativeSize.HasValue)
|
|
||||||
{
|
|
||||||
target.RelativeSize = RelativeSize.Value;
|
|
||||||
}
|
|
||||||
else if (AbsoluteSize.HasValue)
|
|
||||||
{
|
|
||||||
target.NonScaledSize = AbsoluteSize.Value;
|
|
||||||
}
|
|
||||||
if (Anchor.HasValue)
|
|
||||||
{
|
|
||||||
target.Anchor = Anchor.Value;
|
|
||||||
}
|
|
||||||
if (Pivot.HasValue)
|
|
||||||
{
|
|
||||||
target.Pivot = Pivot.Value;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
target.Pivot = RectTransform.MatchPivotToAnchor(target.Anchor);
|
|
||||||
}
|
|
||||||
target.RecalculateChildren(true, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public GUIFrame GuiFrame { get; protected set; }
|
|
||||||
|
|
||||||
[Serialize(false, false)]
|
|
||||||
public bool AllowUIOverlap
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
private ItemComponent linkToUIComponent;
|
|
||||||
[Serialize("", false)]
|
|
||||||
public string LinkUIToComponent
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
set;
|
|
||||||
}
|
|
||||||
|
|
||||||
[Serialize(0, false)]
|
|
||||||
public int HudPriority
|
|
||||||
{
|
|
||||||
get;
|
|
||||||
private set;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool shouldMuffleLooping;
|
private bool shouldMuffleLooping;
|
||||||
|
|||||||
@@ -144,15 +144,10 @@ namespace Barotrauma
|
|||||||
private void CreateUI()
|
private void CreateUI()
|
||||||
{
|
{
|
||||||
TopPanel = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.05f), GUI.Canvas) { MinSize = new Point(0, 35) }, "GUIFrameTop");
|
TopPanel = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.05f), GUI.Canvas) { MinSize = new Point(0, 35) }, "GUIFrameTop");
|
||||||
|
GUIFrame paddedTopPanel = new GUIFrame(new RectTransform(new Vector2(0.95f, 0.55f), TopPanel.RectTransform, Anchor.Center) { RelativeOffset = new Vector2(0.0f, -0.1f) },
|
||||||
GUIFrame paddedTopPanel = new GUIFrame(new RectTransform(new Vector2(0.95f, 0.55f), TopPanel.RectTransform, Anchor.Center) { RelativeOffset = new Vector2(0.0f, -0.1f) }, style: null);
|
style: null);
|
||||||
|
|
||||||
var button = new GUIButton(new RectTransform(new Vector2(0.07f, 0.9f), paddedTopPanel.RectTransform, Anchor.CenterLeft), TextManager.Get("Back"))
|
var button = new GUIButton(new RectTransform(new Vector2(0.07f, 0.9f), paddedTopPanel.RectTransform, Anchor.CenterLeft), TextManager.Get("OpenSubButton"))
|
||||||
{
|
|
||||||
OnClicked = GameMain.MainMenuScreen.ReturnToMainMenu
|
|
||||||
};
|
|
||||||
|
|
||||||
button = new GUIButton(new RectTransform(new Vector2(0.07f, 0.9f), paddedTopPanel.RectTransform, Anchor.CenterLeft) { RelativeOffset = new Vector2(0.07f, 0.0f) }, TextManager.Get("OpenSubButton"))
|
|
||||||
{
|
{
|
||||||
OnClicked = (GUIButton btn, object data) =>
|
OnClicked = (GUIButton btn, object data) =>
|
||||||
{
|
{
|
||||||
@@ -163,7 +158,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
button = new GUIButton(new RectTransform(new Vector2(0.07f, 0.9f), paddedTopPanel.RectTransform, Anchor.CenterLeft) { RelativeOffset = new Vector2(0.14f, 0.0f) }, TextManager.Get("SaveSubButton"))
|
button = new GUIButton(new RectTransform(new Vector2(0.07f, 0.9f), paddedTopPanel.RectTransform, Anchor.CenterLeft) { RelativeOffset = new Vector2(0.08f, 0.0f) }, TextManager.Get("SaveSubButton"))
|
||||||
{
|
{
|
||||||
OnClicked = (GUIButton btn, object data) =>
|
OnClicked = (GUIButton btn, object data) =>
|
||||||
{
|
{
|
||||||
@@ -174,13 +169,13 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var nameLabel = new GUITextBlock(new RectTransform(new Vector2(0.1f, 0.9f), paddedTopPanel.RectTransform, Anchor.CenterLeft) { RelativeOffset = new Vector2(0.21f, 0.0f) },
|
var nameLabel = new GUITextBlock(new RectTransform(new Vector2(0.1f, 0.9f), paddedTopPanel.RectTransform, Anchor.CenterLeft) { RelativeOffset = new Vector2(0.15f, 0.0f) },
|
||||||
"", font: GUI.LargeFont, textAlignment: Alignment.CenterLeft)
|
"", font: GUI.LargeFont, textAlignment: Alignment.CenterLeft)
|
||||||
{
|
{
|
||||||
TextGetter = GetSubName
|
TextGetter = GetSubName
|
||||||
};
|
};
|
||||||
|
|
||||||
linkedSubBox = new GUIDropDown(new RectTransform(new Vector2(0.15f, 0.9f), paddedTopPanel.RectTransform) { RelativeOffset = new Vector2(0.385f, 0.0f) },
|
linkedSubBox = new GUIDropDown(new RectTransform(new Vector2(0.15f, 0.9f), paddedTopPanel.RectTransform) { RelativeOffset = new Vector2(0.4f, 0.0f) },
|
||||||
TextManager.Get("AddSubButton"), elementCount: 20)
|
TextManager.Get("AddSubButton"), elementCount: 20)
|
||||||
{
|
{
|
||||||
ToolTip = TextManager.Get("AddSubToolTip")
|
ToolTip = TextManager.Get("AddSubToolTip")
|
||||||
@@ -284,7 +279,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
var paddedTab = new GUIFrame(new RectTransform(new Vector2(1.0f, 1.0f), EntityMenu.RectTransform, Anchor.Center), style: null);
|
var paddedTab = new GUIFrame(new RectTransform(new Vector2(1.0f, 1.0f), EntityMenu.RectTransform, Anchor.Center), style: null);
|
||||||
|
|
||||||
var filterArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), paddedTab.RectTransform) { AbsoluteOffset = new Point(0, 10) }, isHorizontal: true)
|
var filterArea = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.1f), paddedTab.RectTransform), isHorizontal: true)
|
||||||
{
|
{
|
||||||
Color = secondaryColor,
|
Color = secondaryColor,
|
||||||
Stretch = true,
|
Stretch = true,
|
||||||
@@ -299,7 +294,7 @@ namespace Barotrauma
|
|||||||
OnClicked = (btn, userdata) => { ClearFilter(); entityFilterBox.Flash(Color.White); return true; }
|
OnClicked = (btn, userdata) => { ClearFilter(); entityFilterBox.Flash(Color.White); return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
var entityListHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.85f), paddedTab.RectTransform, Anchor.Center) { RelativeOffset = new Vector2(0.0f, 0.06f) });
|
var entityListHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.85f), paddedTab.RectTransform, Anchor.Center) { RelativeOffset = new Vector2(0.0f, 0.05f) });
|
||||||
|
|
||||||
var tabButtonHolder = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.1f), entityListHolder.RectTransform, Anchor.TopRight, Pivot.BottomRight),
|
var tabButtonHolder = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.1f), entityListHolder.RectTransform, Anchor.TopRight, Pivot.BottomRight),
|
||||||
isHorizontal: true)
|
isHorizontal: true)
|
||||||
@@ -861,7 +856,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
GUI.AddMessage(TextManager.Get("SubSavedNotification").Replace("[filepath]", Submarine.MainSub.FilePath), Color.Green);
|
GUI.AddMessage(TextManager.Get("SubSavedNotification").Replace("[filepath]", Submarine.MainSub.FilePath), Color.Green);
|
||||||
|
|
||||||
Submarine.RefreshSavedSubs();
|
Submarine.RefreshSavedSub(savePath);
|
||||||
|
|
||||||
linkedSubBox.ClearChildren();
|
linkedSubBox.ClearChildren();
|
||||||
foreach (Submarine sub in Submarine.SavedSubmarines)
|
foreach (Submarine sub in Submarine.SavedSubmarines)
|
||||||
{
|
{
|
||||||
@@ -2209,14 +2205,10 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
MapEntity.SelectedList.Clear();
|
MapEntity.SelectedList.Clear();
|
||||||
|
|
||||||
RenderTarget2D rt = new RenderTarget2D(
|
|
||||||
GameMain.Instance.GraphicsDevice,
|
|
||||||
width, height, false, SurfaceFormat.Color, DepthFormat.None);
|
|
||||||
|
|
||||||
var prevScissorRect = GameMain.Instance.GraphicsDevice.ScissorRectangle;
|
var prevScissorRect = GameMain.Instance.GraphicsDevice.ScissorRectangle;
|
||||||
|
|
||||||
Rectangle subDimensions = Submarine.MainSub.CalculateDimensions(false);
|
Rectangle subDimensions = Submarine.MainSub.CalculateDimensions(false);
|
||||||
Vector2 viewPos = subDimensions.Center.ToVector2();
|
Vector2 viewPos = subDimensions.Center.ToVector2();
|
||||||
float scale = Math.Min(width / (float)subDimensions.Width, height / (float)subDimensions.Height);
|
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 viewMatrix = Matrix.CreateTranslation(new Vector3(width / 2.0f, height / 2.0f, 0));
|
||||||
@@ -2225,26 +2217,32 @@ namespace Barotrauma
|
|||||||
Matrix.CreateScale(new Vector3(scale, scale, 1)) *
|
Matrix.CreateScale(new Vector3(scale, scale, 1)) *
|
||||||
viewMatrix;
|
viewMatrix;
|
||||||
|
|
||||||
GameMain.Instance.GraphicsDevice.SetRenderTarget(rt);
|
|
||||||
SpriteBatch spriteBatch = new SpriteBatch(GameMain.Instance.GraphicsDevice);
|
|
||||||
|
|
||||||
Sprite backgroundSprite = LevelGenerationParams.LevelParams.Find(l => l.BackgroundTopSprite != null).BackgroundTopSprite;
|
Sprite backgroundSprite = LevelGenerationParams.LevelParams.Find(l => l.BackgroundTopSprite != null).BackgroundTopSprite;
|
||||||
if (backgroundSprite != null)
|
|
||||||
{
|
|
||||||
spriteBatch.Begin();
|
|
||||||
backgroundSprite.Draw(spriteBatch, Vector2.Zero, new Color(0.025f, 0.075f, 0.131f, 1.0f));
|
|
||||||
spriteBatch.End();
|
|
||||||
}
|
|
||||||
|
|
||||||
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, null, null, null, null, transform);
|
|
||||||
Submarine.Draw(spriteBatch, false);
|
|
||||||
Submarine.DrawFront(spriteBatch);
|
|
||||||
Submarine.DrawDamageable(spriteBatch, null);
|
|
||||||
spriteBatch.End();
|
|
||||||
|
|
||||||
GameMain.Instance.GraphicsDevice.SetRenderTarget(null);
|
using (RenderTarget2D rt = new RenderTarget2D(
|
||||||
rt.SaveAsPng(stream, width, height);
|
GameMain.Instance.GraphicsDevice,
|
||||||
rt.Dispose();
|
width, height, false, SurfaceFormat.Color, DepthFormat.None))
|
||||||
|
using (SpriteBatch spriteBatch = new SpriteBatch(GameMain.Instance.GraphicsDevice))
|
||||||
|
{
|
||||||
|
GameMain.Instance.GraphicsDevice.SetRenderTarget(rt);
|
||||||
|
|
||||||
|
if (backgroundSprite != null)
|
||||||
|
{
|
||||||
|
spriteBatch.Begin();
|
||||||
|
backgroundSprite.Draw(spriteBatch, Vector2.Zero, new Color(0.025f, 0.075f, 0.131f, 1.0f));
|
||||||
|
spriteBatch.End();
|
||||||
|
}
|
||||||
|
|
||||||
|
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, null, null, null, null, transform);
|
||||||
|
Submarine.Draw(spriteBatch, false);
|
||||||
|
Submarine.DrawFront(spriteBatch);
|
||||||
|
Submarine.DrawDamageable(spriteBatch, null);
|
||||||
|
spriteBatch.End();
|
||||||
|
|
||||||
|
|
||||||
|
GameMain.Instance.GraphicsDevice.SetRenderTarget(null);
|
||||||
|
rt.SaveAsPng(stream, width, height);
|
||||||
|
}
|
||||||
|
|
||||||
//for some reason setting the rendertarget changes the size of the viewport
|
//for some reason setting the rendertarget changes the size of the viewport
|
||||||
//but it doesn't change back to default when setting it back to null
|
//but it doesn't change back to default when setting it back to null
|
||||||
|
|||||||
+1
-1
@@ -161,7 +161,7 @@ namespace Barotrauma
|
|||||||
private void OperateRepairTool(float deltaTime)
|
private void OperateRepairTool(float deltaTime)
|
||||||
{
|
{
|
||||||
character.CursorPosition = Item.Position;
|
character.CursorPosition = Item.Position;
|
||||||
if (repairTool.Item.RequireAimToUse)
|
if (Item.RequireAimToUse)
|
||||||
{
|
{
|
||||||
character.SetInput(InputType.Aim, false, true);
|
character.SetInput(InputType.Aim, false, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1102,6 +1102,21 @@ namespace Barotrauma
|
|||||||
savedSubmarines.Add(sub);
|
savedSubmarines.Add(sub);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void RefreshSavedSub(string filePath)
|
||||||
|
{
|
||||||
|
string fullPath = Path.GetFullPath(filePath);
|
||||||
|
for (int i = savedSubmarines.Count - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
if (Path.GetFullPath(savedSubmarines[i].filePath) == fullPath)
|
||||||
|
{
|
||||||
|
savedSubmarines[i].Dispose();
|
||||||
|
savedSubmarines.RemoveAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
savedSubmarines.Add(new Submarine(filePath));
|
||||||
|
}
|
||||||
|
|
||||||
public static void RefreshSavedSubs()
|
public static void RefreshSavedSubs()
|
||||||
{
|
{
|
||||||
for (int i = savedSubmarines.Count - 1; i>= 0; i--)
|
for (int i = savedSubmarines.Count - 1; i>= 0; i--)
|
||||||
|
|||||||
Reference in New Issue
Block a user