1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-12-26 12:06:24 -05:00

Merged PR - Added UI toggle box

* ui stuff
* More ui stuff
* Toggleable stuff
* Some debug messages
This commit is contained in:
Diego M 2018-11-25 01:33:04 -03:00 committed by Tim Sarbin
parent 3a0cbe4b8e
commit 2cd64677f2
5 changed files with 204 additions and 123 deletions

View File

@ -4,6 +4,10 @@
{
Wide,
Medium,
Cancel
Narrow,
Cancel,
// Game UI
Run,
Menu
}
}

View File

@ -12,12 +12,16 @@ namespace OpenDiablo2.Common.Models
public int XSegments { get; internal set; }
public string ResourceName { get; internal set; }
public string PaletteName { get; internal set; }
public bool Toggleable { get; internal set; } = false;
public static Dictionary<eButtonType, ButtonLayout> Values = new Dictionary<eButtonType, ButtonLayout>
{
{eButtonType.Wide, new ButtonLayout { XSegments = 2, ResourceName = ResourcePaths.WideButtonBlank, PaletteName = Palettes.Units } },
{eButtonType.Medium, new ButtonLayout{ XSegments = 1, ResourceName=ResourcePaths.MediumButtonBlank, PaletteName = Palettes.Units } },
{eButtonType.Cancel, new ButtonLayout {XSegments = 1,ResourceName = ResourcePaths.CancelButton,PaletteName = Palettes.Units } }
{eButtonType.Narrow, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.NarrowButtonBlank,PaletteName = Palettes.Units } },
{eButtonType.Cancel, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.CancelButton,PaletteName = Palettes.Units } },
{eButtonType.Run, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.RunButton,PaletteName = Palettes.Units, Toggleable = true } },
{eButtonType.Menu, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MenuButton,PaletteName = Palettes.Units, Toggleable = true } },
};
}

View File

@ -100,8 +100,13 @@ namespace OpenDiablo2.Common
public static string WideButtonBlank = "data\\global\\ui\\FrontEnd\\WideButtonBlank.dc6";
public static string MediumButtonBlank = "data\\global\\ui\\FrontEnd\\MediumButtonBlank.dc6";
public static string CancelButton = "data\\global\\ui\\FrontEnd\\CancelButtonBlank.dc6";
public static string NarrowButtonBlank = "data\\global\\ui\\FrontEnd\\NarrowButtonBlank.dc6";
public static string TextBox2 = "data\\global\\ui\\FrontEnd\\textbox2.dc6";
// --- GAME UI ---
public static string RunButton = "data\\global\\ui\\PANEL\\runbutton.dc6";
public static string MenuButton = "data\\global\\ui\\PANEL\\menubutton.DC6";
// --- Data ---
// TODO: Doesn't sound right :)
public static string EnglishTable = "data\\local\\lng\\eng\\English.txt";

View File

@ -21,6 +21,9 @@ namespace OpenDiablo2.Core.UI
public delegate void OnActivateDelegate();
public OnActivateDelegate OnActivate { get; set; }
public delegate void OnToggleDelegate(bool isToggled);
public OnToggleDelegate OnToggle { get; set; }
private Point location = new Point();
public Point Location
{
@ -39,6 +42,8 @@ namespace OpenDiablo2.Core.UI
private bool pressed = false;
private bool active = false; // When true, button is actively being focus pressed
private bool activeLock = false; // When true, something else is being pressed so ignore everything
private bool toggled = false;
private Point labelOffset = new Point();
private bool enabled = true;
@ -94,6 +99,15 @@ namespace OpenDiablo2.Core.UI
}
}
public bool Toggle()
{
toggled = !toggled;
OnToggle?.Invoke(toggled);
return toggled;
}
public void Update()
{
if (!enabled)
@ -126,7 +140,15 @@ namespace OpenDiablo2.Core.UI
active = false;
if (hovered)
{
OnActivate?.Invoke();
if (buttonLayout.Toggleable)
{
Toggle();
}
}
}
else if (!active && mouseInfoProvider.LeftMouseDown)
{
@ -142,7 +164,22 @@ namespace OpenDiablo2.Core.UI
public void Render()
{
renderWindow.Draw(sprite, buttonLayout.XSegments, 1, pressed ? 1 : 0);
var frame = 0;
if(toggled && pressed)
{
frame = 3;
}
else if(pressed)
{
frame = 1;
}
else if(toggled)
{
frame = 2;
}
renderWindow.Draw(sprite, buttonLayout.XSegments, 1, frame);
var offset = pressed ? -2 : 0;
label.Location = new Point(location.X + offset + labelOffset.X, location.Y - offset + labelOffset.Y);

View File

@ -8,12 +8,16 @@ using OpenDiablo2.Common;
using OpenDiablo2.Common.Attributes;
using OpenDiablo2.Common.Enums;
using OpenDiablo2.Common.Interfaces;
using OpenDiablo2.Core.GameState_;
using OpenDiablo2.Core.UI;
namespace OpenDiablo2.Scenes
{
[Scene("Game")]
public sealed class Game : IScene
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private readonly IRenderWindow renderWindow;
private readonly IResourceManager resourceManager;
private readonly IMapEngine mapEngine;
@ -24,12 +28,15 @@ namespace OpenDiablo2.Scenes
private ISprite panelSprite, healthManaSprite, gameGlobeOverlapSprite;
private Button runButton, menuButton;
public Game(
IRenderWindow renderWindow,
IResourceManager resourceManager,
IMapEngine mapEngine,
IGameState gameState,
IKeyboardInfoProvider keyboardInfoProvider
IKeyboardInfoProvider keyboardInfoProvider,
Func<eButtonType, Button> createButton
)
{
this.renderWindow = renderWindow;
@ -38,9 +45,28 @@ namespace OpenDiablo2.Scenes
this.gameState = gameState;
this.keyboardInfoProvider = keyboardInfoProvider;
panelSprite = renderWindow.LoadSprite(ResourcePaths.GamePanels, Palettes.Act1);
healthManaSprite = renderWindow.LoadSprite(ResourcePaths.HealthMana, Palettes.Act1);
gameGlobeOverlapSprite = renderWindow.LoadSprite(ResourcePaths.GameGlobeOverlap, Palettes.Act1);
runButton = createButton(eButtonType.Run);
runButton.Location = new Point(256, 570);
runButton.OnToggle = OnRunToggle;
menuButton = createButton(eButtonType.Menu);
menuButton.Location = new Point(393, 561);
menuButton.OnToggle = OnMenuToggle;
}
private void OnMenuToggle(bool isToggled)
{
log.Debug("Menu Toggle: " + isToggled);
}
private void OnRunToggle(bool isToggled)
{
log.Debug("Run Toggle: " + isToggled);
}
public void Render()
@ -75,10 +101,15 @@ namespace OpenDiablo2.Scenes
renderWindow.Draw(healthManaSprite, 1, new Point(692, 588));
renderWindow.Draw(gameGlobeOverlapSprite, 1, new Point(693, 591));
runButton.Render();
menuButton.Render();
}
public void Update(long ms)
{
runButton.Update();
menuButton.Update();
var seconds = (float)ms / 1000f;
var xMod = 0f;
var yMod = 0f;