mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-07 09:07:00 -05:00
UI: (Small) Minipanel Implementation (#15)
* ui stuff * Toggleable stuff * Initial minipanel work * Partial work commit to fix random error, still missing relative rendering * Toggle Minipanel with HUD menu button * Fix line breaks
This commit is contained in:
parent
6e7dccfe5d
commit
cb8916c085
@ -8,6 +8,13 @@
|
||||
Cancel,
|
||||
// Game UI
|
||||
Run,
|
||||
Menu
|
||||
Menu,
|
||||
MinipanelCharacter,
|
||||
MinipanelInventory,
|
||||
MinipanelSkill,
|
||||
MinipanelAutomap,
|
||||
MinipanelMessage,
|
||||
MinipanelQuest,
|
||||
MinipanelMenu
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,7 @@ namespace OpenDiablo2.Common.Models
|
||||
public string ResourceName { get; internal set; }
|
||||
public string PaletteName { get; internal set; }
|
||||
public bool Toggleable { get; internal set; } = false;
|
||||
public int BaseFrame { get; internal set; } = 0;
|
||||
|
||||
public static Dictionary<eButtonType, ButtonLayout> Values = new Dictionary<eButtonType, ButtonLayout>
|
||||
{
|
||||
@ -20,6 +21,15 @@ namespace OpenDiablo2.Common.Models
|
||||
{eButtonType.Medium, new ButtonLayout{ XSegments = 1, ResourceName=ResourcePaths.MediumButtonBlank, 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 } },
|
||||
// Minipanel
|
||||
{eButtonType.MinipanelCharacter, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 0 } },
|
||||
{eButtonType.MinipanelInventory, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 2 } },
|
||||
{eButtonType.MinipanelSkill, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 4 } },
|
||||
{eButtonType.MinipanelAutomap, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 8 } },
|
||||
{eButtonType.MinipanelMessage, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 10 } },
|
||||
{eButtonType.MinipanelQuest, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 12 } },
|
||||
{eButtonType.MinipanelMenu, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 14 } },
|
||||
|
||||
{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 } },
|
||||
};
|
||||
|
@ -104,6 +104,9 @@ namespace OpenDiablo2.Common
|
||||
public static string TextBox2 = "data\\global\\ui\\FrontEnd\\textbox2.dc6";
|
||||
|
||||
// --- GAME UI ---
|
||||
public static string MinipanelSmall = "data\\global\\ui\\PANEL\\minipanel_s.dc6";
|
||||
public static string MinipanelButton = "data\\global\\ui\\PANEL\\minipanelbtn.DC6";
|
||||
|
||||
public static string RunButton = "data\\global\\ui\\PANEL\\runbutton.dc6";
|
||||
public static string MenuButton = "data\\global\\ui\\PANEL\\menubutton.DC6";
|
||||
|
||||
|
@ -83,6 +83,7 @@
|
||||
<Compile Include="TextDictionary.cs" />
|
||||
<Compile Include="UI\Button.cs" />
|
||||
<Compile Include="UI\TextBox.cs" />
|
||||
<Compile Include="UI\Minipanel.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenDiablo2.Common\OpenDiablo2.Common.csproj">
|
||||
@ -94,4 +95,4 @@
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
</Project>
|
||||
|
@ -108,6 +108,18 @@ namespace OpenDiablo2.Core.UI
|
||||
return toggled;
|
||||
}
|
||||
|
||||
public bool Toggle(bool isToggled)
|
||||
{
|
||||
if(toggled != isToggled)
|
||||
{
|
||||
OnToggle?.Invoke(isToggled);
|
||||
|
||||
toggled = isToggled;
|
||||
}
|
||||
|
||||
return isToggled;
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (!enabled)
|
||||
@ -164,19 +176,19 @@ namespace OpenDiablo2.Core.UI
|
||||
|
||||
public void Render()
|
||||
{
|
||||
var frame = 0;
|
||||
var frame = buttonLayout.BaseFrame;
|
||||
|
||||
if(toggled && pressed)
|
||||
{
|
||||
frame = 3;
|
||||
frame = buttonLayout.BaseFrame + 3;
|
||||
}
|
||||
else if(pressed)
|
||||
{
|
||||
frame = 1;
|
||||
frame = buttonLayout.BaseFrame + 1;
|
||||
}
|
||||
else if(toggled)
|
||||
{
|
||||
frame = 2;
|
||||
frame = buttonLayout.BaseFrame + 2;
|
||||
}
|
||||
|
||||
renderWindow.Draw(sprite, buttonLayout.XSegments, 1, frame);
|
||||
|
103
OpenDiablo2.Core/UI/Minipanel.cs
Normal file
103
OpenDiablo2.Core/UI/Minipanel.cs
Normal file
@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using OpenDiablo2.Common;
|
||||
using OpenDiablo2.Common.Enums;
|
||||
using OpenDiablo2.Common.Interfaces;
|
||||
|
||||
namespace OpenDiablo2.Core.UI
|
||||
{
|
||||
// TODO: Allow to set Minipanel.buttons.character.OnAction or similar for button delegates
|
||||
public sealed class Minipanel : IDisposable
|
||||
{
|
||||
private readonly IRenderWindow renderWindow;
|
||||
private ISprite sprite;
|
||||
|
||||
private Button characterBtn, inventoryBtn, skillBtn, automapBtn, messageBtn, questBtn, menuBtn;
|
||||
|
||||
private Point location = new Point();
|
||||
public Point Location
|
||||
{
|
||||
get => location;
|
||||
set
|
||||
{
|
||||
if (location == value)
|
||||
return;
|
||||
location = value;
|
||||
|
||||
sprite.Location = new Point(value.X, value.Y + sprite.LocalFrameSize.Height);
|
||||
}
|
||||
}
|
||||
|
||||
public Minipanel(IRenderWindow renderWindow, Func<eButtonType, Button> createButton)
|
||||
{
|
||||
this.renderWindow = renderWindow;
|
||||
|
||||
sprite = renderWindow.LoadSprite(ResourcePaths.MinipanelSmall, Palettes.Units);
|
||||
Location = new Point(800/2-sprite.LocalFrameSize.Width/2, 526);
|
||||
|
||||
characterBtn = createButton(eButtonType.MinipanelCharacter);
|
||||
characterBtn.Location = new Point(3 + Location.X, 3 + Location.Y);
|
||||
|
||||
inventoryBtn = createButton(eButtonType.MinipanelInventory);
|
||||
inventoryBtn.Location = new Point(24 + Location.X, 3 + Location.Y);
|
||||
|
||||
skillBtn = createButton(eButtonType.MinipanelSkill);
|
||||
skillBtn.Location = new Point(45 + Location.X, 3 + Location.Y);
|
||||
|
||||
automapBtn = createButton(eButtonType.MinipanelAutomap);
|
||||
automapBtn.Location = new Point(66 + Location.X, 3 + Location.Y);
|
||||
|
||||
messageBtn = createButton(eButtonType.MinipanelMessage);
|
||||
messageBtn.Location = new Point(87 + Location.X, 3 + Location.Y);
|
||||
|
||||
questBtn = createButton(eButtonType.MinipanelQuest);
|
||||
questBtn.Location = new Point(108 + Location.X, 3 + Location.Y);
|
||||
|
||||
menuBtn = createButton(eButtonType.MinipanelMenu);
|
||||
menuBtn.Location = new Point(129 + Location.X, 3 + Location.Y);
|
||||
}
|
||||
|
||||
|
||||
public void Update()
|
||||
{
|
||||
characterBtn.Update();
|
||||
inventoryBtn.Update();
|
||||
skillBtn.Update();
|
||||
automapBtn.Update();
|
||||
messageBtn.Update();
|
||||
questBtn.Update();
|
||||
menuBtn.Update();
|
||||
|
||||
}
|
||||
|
||||
public void Render()
|
||||
{
|
||||
renderWindow.Draw(sprite);
|
||||
|
||||
characterBtn.Render();
|
||||
inventoryBtn.Render();
|
||||
skillBtn.Render();
|
||||
automapBtn.Render();
|
||||
messageBtn.Render();
|
||||
questBtn.Render();
|
||||
menuBtn.Render();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
characterBtn.Dispose();
|
||||
inventoryBtn.Dispose();
|
||||
skillBtn.Dispose();
|
||||
automapBtn.Dispose();
|
||||
messageBtn.Dispose();
|
||||
questBtn.Dispose();
|
||||
menuBtn.Dispose();
|
||||
|
||||
sprite.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
@ -28,6 +28,8 @@ namespace OpenDiablo2.Scenes
|
||||
|
||||
private ISprite panelSprite, healthManaSprite, gameGlobeOverlapSprite;
|
||||
|
||||
private Minipanel minipanel;
|
||||
private bool showMinipanel = false;
|
||||
private Button runButton, menuButton;
|
||||
|
||||
public Game(
|
||||
@ -50,6 +52,10 @@ namespace OpenDiablo2.Scenes
|
||||
healthManaSprite = renderWindow.LoadSprite(ResourcePaths.HealthMana, Palettes.Act1);
|
||||
gameGlobeOverlapSprite = renderWindow.LoadSprite(ResourcePaths.GameGlobeOverlap, Palettes.Act1);
|
||||
|
||||
minipanel = new Minipanel(renderWindow, createButton);
|
||||
// Maybe? Not sure.
|
||||
// miniPanel.OnMenuActivate();
|
||||
|
||||
runButton = createButton(eButtonType.Run);
|
||||
runButton.Location = new Point(256, 570);
|
||||
runButton.OnToggle = OnRunToggle;
|
||||
@ -61,7 +67,7 @@ namespace OpenDiablo2.Scenes
|
||||
|
||||
private void OnMenuToggle(bool isToggled)
|
||||
{
|
||||
log.Debug("Menu Toggle: " + isToggled);
|
||||
this.showMinipanel = isToggled;
|
||||
}
|
||||
|
||||
private void OnRunToggle(bool isToggled)
|
||||
@ -101,12 +107,22 @@ namespace OpenDiablo2.Scenes
|
||||
renderWindow.Draw(healthManaSprite, 1, new Point(692, 588));
|
||||
renderWindow.Draw(gameGlobeOverlapSprite, 1, new Point(693, 591));
|
||||
|
||||
if(showMinipanel)
|
||||
{
|
||||
minipanel.Render();
|
||||
}
|
||||
|
||||
runButton.Render();
|
||||
menuButton.Render();
|
||||
}
|
||||
|
||||
public void Update(long ms)
|
||||
{
|
||||
if(showMinipanel)
|
||||
{
|
||||
minipanel.Update();
|
||||
}
|
||||
|
||||
runButton.Update();
|
||||
menuButton.Update();
|
||||
|
||||
@ -167,4 +183,4 @@ namespace OpenDiablo2.Scenes
|
||||
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user