diff --git a/ClassicalSharp/2D/Screens/ChatScreen.cs b/ClassicalSharp/2D/Screens/ChatScreen.cs index 258359133..a607241ec 100644 --- a/ClassicalSharp/2D/Screens/ChatScreen.cs +++ b/ClassicalSharp/2D/Screens/ChatScreen.cs @@ -194,10 +194,10 @@ namespace ClassicalSharp.Gui.Screens { int height = InputUsedHeight; if (force || height != inputOldHeight) { clientStatus.YOffset = Math.Max(hud.BottomOffset + 15, height); - clientStatus.CalculatePosition(); + clientStatus.Reposition(); normalChat.YOffset = clientStatus.YOffset + clientStatus.GetUsedHeight(); - normalChat.CalculatePosition(); + normalChat.Reposition(); inputOldHeight = height; } } diff --git a/ClassicalSharp/2D/Screens/DisconnectScreen.cs b/ClassicalSharp/2D/Screens/DisconnectScreen.cs index a26ebe0e9..72f832afd 100644 --- a/ClassicalSharp/2D/Screens/DisconnectScreen.cs +++ b/ClassicalSharp/2D/Screens/DisconnectScreen.cs @@ -57,8 +57,7 @@ namespace ClassicalSharp.Gui.Screens { } public override void OnResize(int width, int height) { - for (int i = 0; i < widgets.Length; i++) - widgets[i].CalculatePosition(); + RepositionWidgets(widgets); clearTime = DateTime.UtcNow.AddSeconds(0.5); } @@ -104,8 +103,7 @@ namespace ClassicalSharp.Gui.Screens { void Redraw(double delta) { gfx.Draw2DQuad(0, 0, game.Width, game.Height, top, bottom); gfx.Texturing = true; - for (int i = 0; i < widgets.Length; i++) - widgets[i].Render(delta); + RenderWidgets(widgets, delta); gfx.Texturing = false; } diff --git a/ClassicalSharp/2D/Screens/HudScreen.cs b/ClassicalSharp/2D/Screens/HudScreen.cs index d81a7bdb4..b5a840c61 100644 --- a/ClassicalSharp/2D/Screens/HudScreen.cs +++ b/ClassicalSharp/2D/Screens/HudScreen.cs @@ -89,7 +89,7 @@ namespace ClassicalSharp.Gui.Screens { playerList.Init(); playerList.RecalcYOffset(); - playerList.CalculatePosition(); + playerList.Reposition(); } public override void Dispose() { @@ -114,11 +114,11 @@ namespace ClassicalSharp.Gui.Screens { public override void OnResize(int width, int height) { chat.OnResize(width, height); - hotbar.CalculatePosition(); + hotbar.Reposition(); if (playerList != null) { playerList.RecalcYOffset(); - playerList.CalculatePosition(); + playerList.Reposition(); } } diff --git a/ClassicalSharp/2D/Screens/LoadingMapScreen.cs b/ClassicalSharp/2D/Screens/LoadingMapScreen.cs index eb6ad359f..5971082b1 100644 --- a/ClassicalSharp/2D/Screens/LoadingMapScreen.cs +++ b/ClassicalSharp/2D/Screens/LoadingMapScreen.cs @@ -72,8 +72,8 @@ namespace ClassicalSharp.Gui.Screens { } public override void OnResize(int width, int height) { - messageWidget.CalculatePosition(); - titleWidget.CalculatePosition(); + messageWidget.Reposition(); + titleWidget.Reposition(); } protected override void ContextLost() { diff --git a/ClassicalSharp/2D/Screens/Menu/FilesScreen.cs b/ClassicalSharp/2D/Screens/Menu/FilesScreen.cs index b08ab9e73..b35ab907a 100644 --- a/ClassicalSharp/2D/Screens/Menu/FilesScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/FilesScreen.cs @@ -125,17 +125,15 @@ namespace ClassicalSharp.Gui.Screens { } public override void OnResize(int width, int height) { - for (int i = 0; i < buttons.Length; i++) - buttons[i].CalculatePosition(); - title.CalculatePosition(); + RepositionWidgets(buttons); + title.Reposition(); } public override void Render(double delta) { gfx.Draw2DQuad(0, 0, game.Width, game.Height, new FastColour(60, 60, 60, 160)); gfx.Texturing = true; title.Render(delta); - for (int i = 0; i < buttons.Length; i++) - buttons[i].Render(delta); + RenderWidgets(buttons, delta); gfx.Texturing = false; } } diff --git a/ClassicalSharp/2D/Screens/Menu/GenLevelScreen.cs b/ClassicalSharp/2D/Screens/Menu/GenLevelScreen.cs index d17294ade..bae06a749 100644 --- a/ClassicalSharp/2D/Screens/Menu/GenLevelScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/GenLevelScreen.cs @@ -83,7 +83,7 @@ namespace ClassicalSharp.Gui.Screens { .SetLocation(Anchor.Centre, Anchor.Centre, x, y); label.XOffset = -110 - label.Width / 2; - label.CalculatePosition(); + label.Reposition(); label.Colour = new FastColour(224, 224, 224); return label; } diff --git a/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs b/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs index 7449b471a..19ba15f90 100644 --- a/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/MenuOptionsScreen.cs @@ -28,7 +28,7 @@ namespace ClassicalSharp.Gui.Screens { } gfx.Texturing = true; - RenderMenuWidgets(delta); + RenderWidgets(widgets, delta); if (extendedHelp != null && extEndY <= extClipY) extendedHelp.Render(delta); @@ -72,7 +72,7 @@ namespace ClassicalSharp.Gui.Screens { extendedHelp.XOffset = game.Width / 2 - extendedHelp.Width / 2; extendedHelp.YOffset = game.Height / 2 + extHelpY; - extendedHelp.CalculatePosition(); + extendedHelp.Reposition(); } protected override void ContextLost() { @@ -167,7 +167,7 @@ namespace ClassicalSharp.Gui.Screens { extendedHelp.XOffset = game.Width / 2 - extendedHelp.Width / 2; extendedHelp.YOffset = game.Height / 2 + extHelpY; - extendedHelp.CalculatePosition(); + extendedHelp.Reposition(); } void DisposeExtendedHelp() { diff --git a/ClassicalSharp/2D/Screens/Menu/OptionsGroupScreen.cs b/ClassicalSharp/2D/Screens/Menu/OptionsGroupScreen.cs index d02e629a1..ac4e7fe90 100644 --- a/ClassicalSharp/2D/Screens/Menu/OptionsGroupScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/OptionsGroupScreen.cs @@ -17,7 +17,7 @@ namespace ClassicalSharp.Gui.Screens { public override void Render(double delta) { RenderMenuBounds(); gfx.Texturing = true; - RenderMenuWidgets(delta); + RenderWidgets(widgets, delta); if (descWidget != null) descWidget.Render(delta); gfx.Texturing = false; @@ -94,7 +94,7 @@ namespace ClassicalSharp.Gui.Screens { public override void OnResize(int width, int height) { if (descWidget != null) - descWidget.CalculatePosition(); + descWidget.Reposition(); base.OnResize(width, height); } diff --git a/ClassicalSharp/2D/Screens/Menu/SaveLevelScreen.cs b/ClassicalSharp/2D/Screens/Menu/SaveLevelScreen.cs index a81ef472f..94a66e40b 100644 --- a/ClassicalSharp/2D/Screens/Menu/SaveLevelScreen.cs +++ b/ClassicalSharp/2D/Screens/Menu/SaveLevelScreen.cs @@ -20,7 +20,7 @@ namespace ClassicalSharp.Gui.Screens { public override void Render(double delta) { RenderMenuBounds(); gfx.Texturing = true; - RenderMenuWidgets(delta); + RenderWidgets(widgets, delta); input.Render(delta); if (desc != null) desc.Render(delta); gfx.Texturing = false; @@ -84,7 +84,7 @@ namespace ClassicalSharp.Gui.Screens { public override void OnResize(int width, int height) { - input.CalculatePosition(); + input.Reposition(); base.OnResize(width, height); } diff --git a/ClassicalSharp/2D/Screens/MenuScreen.cs b/ClassicalSharp/2D/Screens/MenuScreen.cs index 82cb7f1ba..589c06e4c 100644 --- a/ClassicalSharp/2D/Screens/MenuScreen.cs +++ b/ClassicalSharp/2D/Screens/MenuScreen.cs @@ -18,17 +18,10 @@ namespace ClassicalSharp.Gui.Screens { gfx.Draw2DQuad(0, 0, game.Width, game.Height, backCol); } - protected void RenderMenuWidgets(double delta) { - for (int i = 0; i < widgets.Length; i++) { - if (widgets[i] == null) continue; - widgets[i].Render(delta); - } - } - public override void Render(double delta) { RenderMenuBounds(); gfx.Texturing = true; - RenderMenuWidgets(delta); + RenderWidgets(widgets, delta); gfx.Texturing = false; } @@ -49,10 +42,7 @@ namespace ClassicalSharp.Gui.Screens { protected override void ContextLost() { DisposeWidgets(widgets); } public override void OnResize(int width, int height) { - for (int i = 0; i < widgets.Length; i++) { - if (widgets[i] == null) continue; - widgets[i].CalculatePosition(); - } + RepositionWidgets(widgets); } diff --git a/ClassicalSharp/2D/Screens/Overlays/Overlay.cs b/ClassicalSharp/2D/Screens/Overlays/Overlay.cs index b8fb67c87..cdfcb00a8 100644 --- a/ClassicalSharp/2D/Screens/Overlays/Overlay.cs +++ b/ClassicalSharp/2D/Screens/Overlays/Overlay.cs @@ -28,9 +28,8 @@ namespace ClassicalSharp.Gui.Screens { public override void Render(double delta) { RenderMenuBounds(); gfx.Texturing = true; - RenderMenuWidgets(delta); - for (int i = 0; i < labels.Length; i++) - labels[i].Render(delta); + RenderWidgets(widgets, delta); + RenderWidgets(labels, delta); gfx.Texturing = false; if (OnRenderFrame != null) OnRenderFrame(this); @@ -38,8 +37,7 @@ namespace ClassicalSharp.Gui.Screens { public override void OnResize(int width, int height) { base.OnResize(width, height); - for (int i = 0; i < labels.Length; i++) - labels[i].CalculatePosition(); + RepositionWidgets(labels); } protected override void ContextLost() { diff --git a/ClassicalSharp/2D/Screens/Screen.cs b/ClassicalSharp/2D/Screens/Screen.cs index 5b6414c7a..06e5e36b3 100644 --- a/ClassicalSharp/2D/Screens/Screen.cs +++ b/ClassicalSharp/2D/Screens/Screen.cs @@ -25,7 +25,7 @@ namespace ClassicalSharp.Gui.Screens { public bool RenderHudOver; /// Called when the game window is resized. - public abstract void OnResize(int width, int height); + public abstract void OnResize(int width, int height); protected ClickHandler LeftOnly(SimpleClickHandler action) { if (action == null) return (g, w, btn, x, y) => {}; @@ -43,8 +43,24 @@ namespace ClassicalSharp.Gui.Screens { if (widgets == null) return; for (int i = 0; i < widgets.Length; i++) { - widgets[i].Dispose(); + if (widgets[i] != null) widgets[i].Dispose(); + } + } + + protected static void RepositionWidgets(T[] widgets) where T : Widget { + if (widgets == null) return; + + for (int i = 0; i < widgets.Length; i++) { + if (widgets[i] != null) widgets[i].Reposition(); + } + } + + protected static void RenderWidgets(T[] widgets, double delta) where T : Widget { + if (widgets == null) return; + + for (int i = 0; i < widgets.Length; i++) { + if (widgets[i] != null) widgets[i].Render(delta); } } } -} +} \ No newline at end of file diff --git a/ClassicalSharp/2D/Widgets/ButtonWidget.cs b/ClassicalSharp/2D/Widgets/ButtonWidget.cs index f0e2a8213..fca55f294 100644 --- a/ClassicalSharp/2D/Widgets/ButtonWidget.cs +++ b/ClassicalSharp/2D/Widgets/ButtonWidget.cs @@ -35,7 +35,7 @@ namespace ClassicalSharp.Gui.Widgets { public ButtonWidget SetLocation(Anchor horAnchor, Anchor verAnchor, int xOffset, int yOffset) { HorizontalAnchor = horAnchor; VerticalAnchor = verAnchor; XOffset = xOffset; YOffset = yOffset; - CalculatePosition(); + Reposition(); return this; } @@ -70,7 +70,7 @@ namespace ClassicalSharp.Gui.Widgets { Width = Math.Max(texture.Width, MinWidth); Height = Math.Max(texture.Height, MinHeight); - CalculatePosition(); + Reposition(); texture.X1 = X + (Width / 2 - texture.Width / 2); texture.Y1 = Y + (Height / 2 - texture.Height / 2); } @@ -115,9 +115,9 @@ namespace ClassicalSharp.Gui.Widgets { gfx.DeleteTexture(ref texture); } - public override void CalculatePosition() { + public override void Reposition() { int oldX = X, oldY = Y; - base.CalculatePosition(); + base.Reposition(); texture.X1 += X - oldX; texture.Y1 += Y - oldY; diff --git a/ClassicalSharp/2D/Widgets/Chat/TextGroupWidget.cs b/ClassicalSharp/2D/Widgets/Chat/TextGroupWidget.cs index a2cdf7e2e..78d1e11f0 100644 --- a/ClassicalSharp/2D/Widgets/Chat/TextGroupWidget.cs +++ b/ClassicalSharp/2D/Widgets/Chat/TextGroupWidget.cs @@ -15,7 +15,7 @@ namespace ClassicalSharp.Gui.Widgets { public TextGroupWidget SetLocation(Anchor horAnchor, Anchor verAnchor, int xOffset, int yOffset) { HorizontalAnchor = horAnchor; VerticalAnchor = verAnchor; XOffset = xOffset; YOffset = yOffset; - CalculatePosition(); + Reposition(); return this; } @@ -107,7 +107,7 @@ namespace ClassicalSharp.Gui.Widgets { Width = Math.Max(Width, Textures[i].Width); Height += Textures[i].Height; } - CalculatePosition(); + Reposition(); } public override void Render(double delta) { @@ -123,9 +123,9 @@ namespace ClassicalSharp.Gui.Widgets { gfx.DeleteTexture(ref Textures[i]); } - public override void CalculatePosition() { + public override void Reposition() { int oldY = Y; - base.CalculatePosition(); + base.Reposition(); if (Textures == null) return; for (int i = 0; i < Textures.Length; i++) { diff --git a/ClassicalSharp/2D/Widgets/HotbarWidget.cs b/ClassicalSharp/2D/Widgets/HotbarWidget.cs index 0623378a0..6f2f2128f 100644 --- a/ClassicalSharp/2D/Widgets/HotbarWidget.cs +++ b/ClassicalSharp/2D/Widgets/HotbarWidget.cs @@ -48,8 +48,8 @@ namespace ClassicalSharp.Gui.Widgets { public override void Dispose() { } - public override void CalculatePosition() { - base.CalculatePosition(); + public override void Reposition() { + base.Reposition(); Recreate(); } diff --git a/ClassicalSharp/2D/Widgets/InputWidget.cs b/ClassicalSharp/2D/Widgets/InputWidget.cs index 5b6b6d1da..9a4f1fc3e 100644 --- a/ClassicalSharp/2D/Widgets/InputWidget.cs +++ b/ClassicalSharp/2D/Widgets/InputWidget.cs @@ -30,7 +30,7 @@ namespace ClassicalSharp.Gui.Widgets { public InputWidget SetLocation(Anchor horAnchor, Anchor verAnchor, int xOffset, int yOffset) { HorizontalAnchor = horAnchor; VerticalAnchor = verAnchor; XOffset = xOffset; YOffset = yOffset; - CalculatePosition(); + Reposition(); return this; } @@ -89,9 +89,9 @@ namespace ClassicalSharp.Gui.Widgets { Init(); } - public override void CalculatePosition() { + public override void Reposition() { int oldX = X, oldY = Y; - base.CalculatePosition(); + base.Reposition(); caretTex.X1 += X - oldX; caretTex.Y1 += Y - oldY; inputTex.X1 += X - oldX; inputTex.Y1 += Y - oldY; @@ -194,7 +194,7 @@ namespace ClassicalSharp.Gui.Widgets { Width = size.Width; Height = realHeight == 0 ? prefixHeight : realHeight; - CalculatePosition(); + Reposition(); inputTex.X1 = X + Padding; inputTex.Y1 = Y; } diff --git a/ClassicalSharp/2D/Widgets/Menu/MenuInputWidget.cs b/ClassicalSharp/2D/Widgets/Menu/MenuInputWidget.cs index 095fa6c84..299d190f5 100644 --- a/ClassicalSharp/2D/Widgets/Menu/MenuInputWidget.cs +++ b/ClassicalSharp/2D/Widgets/Menu/MenuInputWidget.cs @@ -76,7 +76,7 @@ namespace ClassicalSharp.Gui.Widgets { inputTex = drawer.Make2DTexture(bmp, adjSize, 0, 0); } - CalculatePosition(); + Reposition(); inputTex.X1 = X; inputTex.Y1 = Y; if (size.Height < MinHeight) inputTex.Y1 += MinHeight / 2 - size.Height / 2; diff --git a/ClassicalSharp/2D/Widgets/PlayerList/ClassicPlayerListWidget.cs b/ClassicalSharp/2D/Widgets/PlayerList/ClassicPlayerListWidget.cs index bcbf83117..ce7cb2659 100644 --- a/ClassicalSharp/2D/Widgets/PlayerList/ClassicPlayerListWidget.cs +++ b/ClassicalSharp/2D/Widgets/PlayerList/ClassicPlayerListWidget.cs @@ -35,7 +35,7 @@ namespace ClassicalSharp.Gui.Widgets { gfx.Texturing = true; overview.YOffset = Y - offset + 5; - overview.CalculatePosition(); + overview.Reposition(); overview.Render(delta); for (int i = 0; i < namesCount; i++) { diff --git a/ClassicalSharp/2D/Widgets/PlayerList/PlayerListWidget.cs b/ClassicalSharp/2D/Widgets/PlayerList/PlayerListWidget.cs index 9905d6f37..0859f64a6 100644 --- a/ClassicalSharp/2D/Widgets/PlayerList/PlayerListWidget.cs +++ b/ClassicalSharp/2D/Widgets/PlayerList/PlayerListWidget.cs @@ -105,9 +105,9 @@ namespace ClassicalSharp.Gui.Widgets { YOffset = -Math.Max(0, game.Height / 4 - Height / 2); } - public override void CalculatePosition() { + public override void Reposition() { int oldX = X, oldY = Y; - base.CalculatePosition(); + base.Reposition(); for (int i = 0; i < namesCount; i++) { textures[i].X1 += X - oldX; @@ -164,7 +164,7 @@ namespace ClassicalSharp.Gui.Widgets { OnSort(); UpdateTableDimensions(); RecalcYOffset(); - CalculatePosition(); + Reposition(); } protected virtual void OnSort() { } diff --git a/ClassicalSharp/2D/Widgets/TextWidget.cs b/ClassicalSharp/2D/Widgets/TextWidget.cs index a157bd7da..4f9492d52 100644 --- a/ClassicalSharp/2D/Widgets/TextWidget.cs +++ b/ClassicalSharp/2D/Widgets/TextWidget.cs @@ -19,7 +19,7 @@ namespace ClassicalSharp.Gui.Widgets { public TextWidget SetLocation(Anchor horAnchor, Anchor verAnchor, int xOffset, int yOffset) { HorizontalAnchor = horAnchor; VerticalAnchor = verAnchor; XOffset = xOffset; YOffset = yOffset; - CalculatePosition(); + Reposition(); return this; } @@ -56,7 +56,7 @@ namespace ClassicalSharp.Gui.Widgets { game.Drawer2D.ReducePadding(ref texture, Utils.Floor(font.Size)); Width = texture.Width; Height = texture.Height; - CalculatePosition(); + Reposition(); texture.X1 = X; texture.Y1 = Y; } } @@ -70,9 +70,9 @@ namespace ClassicalSharp.Gui.Widgets { gfx.DeleteTexture(ref texture); } - public override void CalculatePosition() { + public override void Reposition() { int oldX = X, oldY = Y; - base.CalculatePosition(); + base.Reposition(); texture.X1 += X - oldX; texture.Y1 += Y - oldY; diff --git a/ClassicalSharp/2D/Widgets/Widget.cs b/ClassicalSharp/2D/Widgets/Widget.cs index 566e145b3..1418fcc56 100644 --- a/ClassicalSharp/2D/Widgets/Widget.cs +++ b/ClassicalSharp/2D/Widgets/Widget.cs @@ -48,7 +48,7 @@ namespace ClassicalSharp.Gui.Widgets { /// Specifies the boundaries of the widget in pixels. public Rectangle Bounds { get { return new Rectangle(X, Y, Width, Height); } } - public virtual void CalculatePosition() { + public virtual void Reposition() { X = CalcPos(HorizontalAnchor, XOffset, Width, game.Width); Y = CalcPos(VerticalAnchor, YOffset, Height, game.Height); }