From 8717a2259f3ede13dcddce5add3bae16ae019553 Mon Sep 17 00:00:00 2001 From: Regalis Date: Sat, 2 Jan 2016 16:40:24 +0200 Subject: [PATCH] Fixed LobbyScreen item grouping & light.hullsInRange updating --- Subsurface/Source/Characters/Character.cs | 6 +-- Subsurface/Source/GUI/GUI.cs | 13 +++-- .../Source/Items/Components/Machines/Radar.cs | 2 +- Subsurface/Source/Map/Lights/LightManager.cs | 2 +- Subsurface/Source/Map/Lights/LightSource.cs | 2 +- Subsurface/Source/Screens/EditMapScreen.cs | 4 +- Subsurface/Source/Screens/LobbyScreen.cs | 45 +++++++++++------- Subsurface_Solution.v12.suo | Bin 821760 -> 824320 bytes 8 files changed, 46 insertions(+), 28 deletions(-) diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 1e1be8458..3e1f566f6 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -1084,12 +1084,12 @@ namespace Barotrauma for (int i = 0; i < 10; i++) { Particle p = GameMain.ParticleManager.CreateParticle("waterblood", - ConvertUnits.ToDisplayUnits(centerOfMass) + Rand.Vector(50.0f), - Vector2.Zero); + ConvertUnits.ToDisplayUnits(centerOfMass) + Rand.Vector(5.0f), + Rand.Vector(10.0f)); if (p!=null) p.Size *= 2.0f; GameMain.ParticleManager.CreateParticle("bubbles", - ConvertUnits.ToDisplayUnits(centerOfMass) + Rand.Vector(50.0f), + ConvertUnits.ToDisplayUnits(centerOfMass) + Rand.Vector(5.0f), new Vector2(Rand.Range(-50f, 50f), Rand.Range(-100f,50f))); } diff --git a/Subsurface/Source/GUI/GUI.cs b/Subsurface/Source/GUI/GUI.cs index 41bb503cb..b6d151ad2 100644 --- a/Subsurface/Source/GUI/GUI.cs +++ b/Subsurface/Source/GUI/GUI.cs @@ -166,12 +166,15 @@ namespace Barotrauma public static void DrawString(SpriteBatch sb, Vector2 pos, string text, Color color, Color? backgroundColor=null, int backgroundPadding=0, SpriteFont font = null) { - if (font == null) font = GUI.Font; - sb.DrawString(font, text, pos, color); - if (backgroundColor == null) return; - Vector2 textSize = font.MeasureString(text); - DrawRectangle(sb, pos - Vector2.One*backgroundPadding, textSize + Vector2.One * 2.0f * backgroundPadding, (Color)backgroundColor, true); + if (font == null) font = GUI.Font; + if (backgroundColor != null) + { + Vector2 textSize = font.MeasureString(text); + DrawRectangle(sb, pos - Vector2.One * backgroundPadding, textSize + Vector2.One * 2.0f * backgroundPadding, (Color)backgroundColor, true); + } + + sb.DrawString(font, text, pos, color); } public static void DrawRectangle(SpriteBatch sb, Vector2 start, Vector2 size, Color clr, bool isFilled = false, float depth = 0.0f) diff --git a/Subsurface/Source/Items/Components/Machines/Radar.cs b/Subsurface/Source/Items/Components/Machines/Radar.cs index 3f647db3c..70ef05a08 100644 --- a/Subsurface/Source/Items/Components/Machines/Radar.cs +++ b/Subsurface/Source/Items/Components/Machines/Radar.cs @@ -97,7 +97,7 @@ namespace Barotrauma.Items.Components item.NewComponentEvent(this, true, false); } - int radius = GuiFrame.Rect.Height / 2 - 10; + int radius = GuiFrame.Rect.Height / 2 - 30; DrawRadar(spriteBatch, new Rectangle((int)GuiFrame.Center.X - radius, (int)GuiFrame.Center.Y - radius, radius * 2, radius * 2)); //voltage = 0.0f; diff --git a/Subsurface/Source/Map/Lights/LightManager.cs b/Subsurface/Source/Map/Lights/LightManager.cs index f69cff20c..e2d905acf 100644 --- a/Subsurface/Source/Map/Lights/LightManager.cs +++ b/Subsurface/Source/Map/Lights/LightManager.cs @@ -141,7 +141,7 @@ namespace Barotrauma.Lights foreach (LightSource light in lights) { if (light.hullsInRange.Count > 0 || light.Color.A < 0.01f || light.Range < 1.0f) continue; - if (!MathUtils.CircleIntersectsRectangle(light.Position, light.Range, viewRect)) continue; + if (!MathUtils.CircleIntersectsRectangle(light.WorldPosition, light.Range, viewRect)) continue; light.Draw(spriteBatch); } diff --git a/Subsurface/Source/Map/Lights/LightSource.cs b/Subsurface/Source/Map/Lights/LightSource.cs index 0eb9fee15..f0194a173 100644 --- a/Subsurface/Source/Map/Lights/LightSource.cs +++ b/Subsurface/Source/Map/Lights/LightSource.cs @@ -68,7 +68,7 @@ namespace Barotrauma.Lights { range = MathHelper.Clamp(value, 0.0f, 2048.0f); - if (Math.Abs(prevHullUpdateRange - range)>5.0f) return; + if (Math.Abs(prevHullUpdateRange - range)<5.0f) return; UpdateHullsInRange(); prevHullUpdateRange = range; diff --git a/Subsurface/Source/Screens/EditMapScreen.cs b/Subsurface/Source/Screens/EditMapScreen.cs index ee553c61e..5bf3778fd 100644 --- a/Subsurface/Source/Screens/EditMapScreen.cs +++ b/Subsurface/Source/Screens/EditMapScreen.cs @@ -95,7 +95,6 @@ namespace Barotrauma itemList.OnSelected = SelectPrefab; itemList.CheckSelected = MapEntityPrefab.GetSelected; - foreach (MapEntityPrefab ep in MapEntityPrefab.list) { if (ep.Category != category) continue; @@ -130,6 +129,9 @@ namespace Barotrauma img.Color = ep.SpriteColor; } } + + itemList.children.Sort((i1, i2) => (i1.UserData as MapEntityPrefab).Name.CompareTo((i2.UserData as MapEntityPrefab).Name)); + } diff --git a/Subsurface/Source/Screens/LobbyScreen.cs b/Subsurface/Source/Screens/LobbyScreen.cs index f0285b0db..f9a2044cd 100644 --- a/Subsurface/Source/Screens/LobbyScreen.cs +++ b/Subsurface/Source/Screens/LobbyScreen.cs @@ -1,6 +1,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; +using System.Linq; using System.Collections.Generic; using System.Globalization; @@ -20,7 +21,7 @@ namespace Barotrauma private GUIListBox characterList, hireList; private GUIListBox selectedItemList; - private GUIListBox[] storeItemLists; + private GUIListBox storeItemList; private SinglePlayerMode gameMode; @@ -139,23 +140,23 @@ namespace Barotrauma buyButton = new GUIButton(new Rectangle(sellColumnWidth + 20, 0, 100, 25), "Buy", Alignment.Bottom, GUI.Style, bottomPanel[(int)PanelTab.Store]); buyButton.OnClicked = BuyItems; - - storeItemLists = new GUIListBox[Enum.GetValues(typeof(MapEntityCategory)).Length]; - + int x = selectedItemList.Rect.Width + 40; foreach (MapEntityCategory category in Enum.GetValues(typeof(MapEntityCategory))) { - storeItemLists[(int)category] = new GUIListBox(new Rectangle(0, 0, sellColumnWidth, 400), Color.White * 0.7f, Alignment.TopRight, GUI.Style, bottomPanel[(int)PanelTab.Store]); - storeItemLists[(int)category].OnSelected = SelectItem; - storeItemLists[(int)category].UserData = category; - bottomPanel[(int)PanelTab.Store].RemoveChild(storeItemLists[(int)category]); + var items = MapEntityPrefab.list.FindAll(ep => ep.Price>0.0f && ep.Category == category); + if (!items.Any()) continue; - foreach (MapEntityPrefab ep in MapEntityPrefab.list) - { - if (ep.Price == 0 || ep.Category != category) continue; + var categoryButton = new GUIButton(new Rectangle(x, 0, 100, 20), category.ToString(), GUI.Style, bottomPanel[(int)PanelTab.Store]); + categoryButton.UserData = category; + categoryButton.OnClicked = SelectItemCategory; + x += 110; - CreateItemFrame(ep, storeItemLists[(int)category]); - } + storeItemList = new GUIListBox(new Rectangle(0, 30, sellColumnWidth, 400), Color.White * 0.7f, Alignment.TopRight, GUI.Style, bottomPanel[(int)PanelTab.Store]); + storeItemList.OnSelected = SelectItem; + storeItemList.UserData = category; } + + SelectItemCategory(null, MapEntityCategory.Item); } @@ -427,10 +428,22 @@ namespace Barotrauma { if (!(selection is MapEntityCategory)) return false; - var existingList = bottomPanel[(int)PanelTab.Store].children.Find(c => c.UserData is MapEntityCategory); - if (existingList != null) bottomPanel[(int)PanelTab.Store].RemoveChild(existingList); + //var existingList = bottomPanel[(int)PanelTab.Store].children.Find(c => c is GUIListBox && c.UserData is MapEntityCategory); + //if (existingList != null) bottomPanel[(int)PanelTab.Store].RemoveChild(existingList); - bottomPanel[(int)PanelTab.Store].AddChild(storeItemLists[(int)selection]); + //bottomPanel[(int)PanelTab.Store].AddChild(storeItemLists[(int)selection]); + + storeItemList.ClearChildren(); + + MapEntityCategory category = (MapEntityCategory)selection; + var items = MapEntityPrefab.list.FindAll(ep => ep.Price > 0.0f && ep.Category == category); + + foreach (MapEntityPrefab ep in items) + { + CreateItemFrame(ep, storeItemList); + } + + storeItemList.children.Sort((x, y) => (x.UserData as MapEntityPrefab).Name.CompareTo((y.UserData as MapEntityPrefab).Name)); return true; } diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index a758957d408f97680e1e48f7439c1f8ad8dc3f62..5ab6d778169747404206cd5e39048902ff1d75af 100644 GIT binary patch delta 11103 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 delta 11116 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 rr|wQS