From e55a5d6d9d223b06c3254f85426fea76d1a740a7 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 7 May 2019 13:23:02 +0300 Subject: [PATCH] (aef4f0ea0) Option to override sprites per language, new logos --- .../Source/GUI/LoadingScreen.cs | 61 ++++++++----------- .../Source/Screens/MainMenuScreen.cs | 10 +-- .../BarotraumaShared/Source/Sprite/Sprite.cs | 35 ++++++++++- 3 files changed, 60 insertions(+), 46 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/GUI/LoadingScreen.cs b/Barotrauma/BarotraumaClient/Source/GUI/LoadingScreen.cs index 9a5dcf5d6..e8e7f7d0a 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/LoadingScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/LoadingScreen.cs @@ -5,12 +5,13 @@ using System; using System.Collections.Generic; using System.Xml.Linq; using Barotrauma.Media; +using System.Linq; namespace Barotrauma { class LoadingScreen { - private Texture2D backgroundTexture, monsterTexture, titleTexture; + private Texture2D backgroundTexture; private RenderTarget2D renderTarget; @@ -37,24 +38,13 @@ namespace Barotrauma private string selectedTip; - public Vector2 CenterPosition; + public Vector2 BackgroundPosition; public Vector2 TitlePosition; private object loadMutex = new object(); private float? loadState; - - public Vector2 TitleSize - { - get { return new Vector2(titleTexture.Width, titleTexture.Height); } - } - - public float Scale - { - get; - private set; - } - + public float? LoadState { get @@ -83,8 +73,6 @@ namespace Barotrauma public LoadingScreen(GraphicsDevice graphics) { backgroundTexture = TextureLoader.FromFile("Content/UI/titleBackground.png"); - monsterTexture = TextureLoader.FromFile("Content/UI/titleMonster.png"); - titleTexture = TextureLoader.FromFile("Content/UI/titleText.png"); renderTarget = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight); GameMain.Instance.OnResolutionChanged += () => @@ -97,7 +85,7 @@ namespace Barotrauma selectedTip = TextManager.Get("LoadingScreenTip", true); } - + public void Draw(SpriteBatch spriteBatch, GraphicsDevice graphics, float deltaTime) { if (GameMain.Config.EnableSplashScreen) @@ -105,7 +93,7 @@ namespace Barotrauma try { DrawSplashScreen(spriteBatch); - if (SplashScreen!=null && SplashScreen.IsPlaying) return; + if (SplashScreen != null && SplashScreen.IsPlaying) return; } catch (Exception e) { @@ -113,37 +101,38 @@ namespace Barotrauma GameMain.Config.EnableSplashScreen = false; } } - + + var titleStyle = GUI.Style?.GetComponentStyle("TitleText"); + Sprite titleSprite = null; + if (titleStyle != null && titleStyle.Sprites.ContainsKey(GUIComponent.ComponentState.None)) + { + titleSprite = titleStyle.Sprites[GUIComponent.ComponentState.None].First()?.Sprite; + } + drawn = true; graphics.SetRenderTarget(renderTarget); - Scale = GameMain.GraphicsHeight / 1500.0f; + float backgroundScale = GameMain.GraphicsHeight / 1500.0f; + float titleScale = MathHelper.SmoothStep(0.8f, 1.0f, state / 10.0f) * GameMain.GraphicsHeight / 1000.0f; state += deltaTime; if (DrawLoadingText) { - CenterPosition = new Vector2(GameMain.GraphicsWidth * 0.3f, GameMain.GraphicsHeight / 2.0f); - TitlePosition = CenterPosition + new Vector2(-0.0f + (float)Math.Sqrt(state) * 220.0f, 0.0f) * Scale; - TitlePosition.X = Math.Min(TitlePosition.X, (float)GameMain.GraphicsWidth / 2.0f); + BackgroundPosition = new Vector2(GameMain.GraphicsWidth * 0.3f, GameMain.GraphicsHeight * 0.45f); + TitlePosition = new Vector2(GameMain.GraphicsWidth * 0.5f, GameMain.GraphicsHeight * 0.45f); } spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend); graphics.Clear(Color.Black); - spriteBatch.Draw(backgroundTexture, CenterPosition, null, Color.White * Math.Min(state / 5.0f, 1.0f), 0.0f, + spriteBatch.Draw(backgroundTexture, BackgroundPosition, null, Color.White * Math.Min(state / 5.0f, 1.0f), 0.0f, new Vector2(backgroundTexture.Width / 2.0f, backgroundTexture.Height / 2.0f), - Scale * 1.5f, SpriteEffects.None, 0.2f); - - spriteBatch.Draw(monsterTexture, - CenterPosition + new Vector2((state % 40) * 100.0f - 1800.0f, (state % 40) * 30.0f - 200.0f) * Scale, null, - Color.White, 0.0f, Vector2.Zero, Scale, SpriteEffects.None, 0.1f); - - spriteBatch.Draw(titleTexture, - TitlePosition, null, - Color.White * Math.Min((state - 1.0f) / 5.0f, 1.0f), 0.0f, new Vector2(titleTexture.Width / 2.0f, titleTexture.Height / 2.0f), Scale, SpriteEffects.None, 0.0f); - + backgroundScale * 1.5f, SpriteEffects.None, 0.2f); + + titleSprite?.Draw(spriteBatch, TitlePosition, Color.White * Math.Min((state - 1.0f) / 5.0f, 1.0f), scale: titleScale); + spriteBatch.End(); graphics.SetRenderTarget(null); @@ -156,9 +145,7 @@ namespace Barotrauma spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend); - spriteBatch.Draw(titleTexture, - TitlePosition, null, - Color.White * Math.Min((state - 3.0f) / 5.0f, 1.0f), 0.0f, new Vector2(titleTexture.Width / 2.0f, titleTexture.Height / 2.0f), Scale, SpriteEffects.None, 0.0f); + titleSprite?.Draw(spriteBatch, TitlePosition, Color.White * Math.Min((state - 1.0f) / 5.0f, 1.0f), scale: titleScale); if (DrawLoadingText) { diff --git a/Barotrauma/BarotraumaClient/Source/Screens/MainMenuScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/MainMenuScreen.cs index ae13a6eba..76ac8bd4f 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/MainMenuScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/MainMenuScreen.cs @@ -44,13 +44,14 @@ namespace Barotrauma backgroundVignette = new Sprite("Content/UI/MainMenuVignette.png", Vector2.Zero); new GUIImage(new RectTransform(new Vector2(0.35f, 0.2f), Frame.RectTransform, Anchor.BottomRight) - { RelativeOffset = new Vector2(0.05f, 0.05f), AbsoluteOffset = new Point(-5, -5) }, + { RelativeOffset = new Vector2(0.05f, 0.1f), AbsoluteOffset = new Point(-8, -8) }, style: "TitleText") { Color = Color.Black * 0.5f, CanBeFocused = false }; - titleText = new GUIImage(new RectTransform(new Vector2(0.35f, 0.2f), Frame.RectTransform, Anchor.BottomRight) { RelativeOffset = new Vector2(0.05f, 0.05f) }, + titleText = new GUIImage(new RectTransform(new Vector2(0.35f, 0.2f), Frame.RectTransform, Anchor.BottomRight) + { RelativeOffset = new Vector2(0.05f, 0.1f) }, style: "TitleText"); buttonsParent = new GUILayoutGroup(new RectTransform(new Vector2(0.3f, 0.85f), parent: Frame.RectTransform, anchor: Anchor.CenterLeft) @@ -717,11 +718,6 @@ namespace Barotrauma public override void Update(double deltaTime) { - GameMain.TitleScreen.TitlePosition = - Vector2.Lerp(GameMain.TitleScreen.TitlePosition, new Vector2( - GameMain.TitleScreen.TitleSize.X / 2.0f * GameMain.TitleScreen.Scale + 30.0f, - GameMain.TitleScreen.TitleSize.Y / 2.0f * GameMain.TitleScreen.Scale + 30.0f), - 0.1f); #if !DEBUG #if !OSX if (Steam.SteamManager.USE_STEAM) diff --git a/Barotrauma/BarotraumaShared/Source/Sprite/Sprite.cs b/Barotrauma/BarotraumaShared/Source/Sprite/Sprite.cs index 064b5d1e2..26059513f 100644 --- a/Barotrauma/BarotraumaShared/Source/Sprite/Sprite.cs +++ b/Barotrauma/BarotraumaShared/Source/Sprite/Sprite.cs @@ -109,6 +109,11 @@ namespace Barotrauma if (!ParseTexturePath(path, file)) { return; } Name = SourceElement.GetAttributeString("name", null); Vector4 sourceVector = SourceElement.GetAttributeVector4("sourcerect", Vector4.Zero); + var overrideElement = GetLocalizationOverrideElement(); + if (overrideElement != null && overrideElement.Attribute("sourcerect") != null) + { + sourceVector = overrideElement.GetAttributeVector4("sourcerect", Vector4.Zero); + } preMultipliedAlpha = preMultiplyAlpha ?? SourceElement.GetAttributeBool("premultiplyalpha", true); bool shouldReturn = false; if (!lazyLoad) @@ -240,8 +245,12 @@ namespace Barotrauma } if (SourceElement != null) { - Vector4 sourceVector = SourceElement.GetAttributeVector4("sourcerect", Vector4.Zero); - sourceRect = new Rectangle((int)sourceVector.X, (int)sourceVector.Y, (int)sourceVector.Z, (int)sourceVector.W); + sourceRect = SourceElement.GetAttributeRect("sourcerect", Rectangle.Empty); + var overrideElement = GetLocalizationOverrideElement(); + if (overrideElement != null && overrideElement.Attribute("sourcerect") != null) + { + sourceRect = overrideElement.GetAttributeRect("sourcerect", Rectangle.Empty); + } size = SourceElement.GetAttributeVector2("size", Vector2.One); size.X *= sourceRect.Width; size.Y *= sourceRect.Height; @@ -256,6 +265,12 @@ namespace Barotrauma if (file == "") { file = SourceElement.GetAttributeString("texture", ""); + var overrideElement = GetLocalizationOverrideElement(); + if (overrideElement != null) + { + string overrideFile = overrideElement.GetAttributeString("texture", ""); + if (!string.IsNullOrEmpty(overrideFile)) { file = overrideFile; } + } } if (file == "") { @@ -273,6 +288,22 @@ namespace Barotrauma } return true; } + + private XElement GetLocalizationOverrideElement() + { + foreach (XElement subElement in SourceElement.Elements()) + { + if (subElement.Name.ToString().ToLowerInvariant() == "override") + { + string language = subElement.GetAttributeString("language", ""); + if (TextManager.Language.ToLower() == language.ToLower()) + { + return subElement; + } + } + } + return null; + } } }