mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-06-28 18:15:23 +00:00
Added attribute/skill buttons to the HUD (#47)
This commit is contained in:
parent
de83a86aeb
commit
c277cb2d89
|
@ -8,6 +8,7 @@
|
||||||
Cancel,
|
Cancel,
|
||||||
Tall,
|
Tall,
|
||||||
// Game UI
|
// Game UI
|
||||||
|
Skill,
|
||||||
Run,
|
Run,
|
||||||
Menu,
|
Menu,
|
||||||
GoldCoin,
|
GoldCoin,
|
||||||
|
|
14
OpenDiablo2.Common/Enums/ePanelType.cs
Normal file
14
OpenDiablo2.Common/Enums/ePanelType.cs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
namespace OpenDiablo2.Common.Enums
|
||||||
|
{
|
||||||
|
public enum ePanelType
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Character,
|
||||||
|
Inventory,
|
||||||
|
Skill,
|
||||||
|
Automap,
|
||||||
|
Message,
|
||||||
|
Quest,
|
||||||
|
Menu
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,5 +38,28 @@ namespace OpenDiablo2.Common.Extensions
|
||||||
log.Warn($"Unknown panel positon, {value}");
|
log.Warn($"Unknown panel positon, {value}");
|
||||||
return default(Point);
|
return default(Point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ePanelType GetPanelType(this eButtonType value)
|
||||||
|
{
|
||||||
|
switch(value)
|
||||||
|
{
|
||||||
|
case eButtonType.MinipanelAutomap:
|
||||||
|
return ePanelType.Automap;
|
||||||
|
case eButtonType.MinipanelCharacter:
|
||||||
|
return ePanelType.Character;
|
||||||
|
case eButtonType.MinipanelInventory:
|
||||||
|
return ePanelType.Inventory;
|
||||||
|
case eButtonType.MinipanelMenu:
|
||||||
|
return ePanelType.Menu;
|
||||||
|
case eButtonType.MinipanelMessage:
|
||||||
|
return ePanelType.Message;
|
||||||
|
case eButtonType.MinipanelQuest:
|
||||||
|
return ePanelType.Quest;
|
||||||
|
case eButtonType.MinipanelSkill:
|
||||||
|
return ePanelType.Skill;
|
||||||
|
default:
|
||||||
|
return ePanelType.None;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
using OpenDiablo2.Common.Enums;
|
||||||
|
|
||||||
namespace OpenDiablo2.Common.Interfaces
|
namespace OpenDiablo2.Common.Interfaces
|
||||||
{
|
{
|
||||||
public interface IGameHUD
|
public interface IGameHUD
|
||||||
|
@ -23,6 +25,7 @@ namespace OpenDiablo2.Common.Interfaces
|
||||||
bool IsRightPanelVisible { get; }
|
bool IsRightPanelVisible { get; }
|
||||||
|
|
||||||
bool IsMouseOver();
|
bool IsMouseOver();
|
||||||
|
void TogglePanel(ePanelType panelType);
|
||||||
void TogglePanel(IPanel panel);
|
void TogglePanel(IPanel panel);
|
||||||
void OpenPanels(IPanel leftPanel, IPanel rightPanel);
|
void OpenPanels(IPanel leftPanel, IPanel rightPanel);
|
||||||
void ClosePanels();
|
void ClosePanels();
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using OpenDiablo2.Common.Enums;
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace OpenDiablo2.Common.Interfaces
|
namespace OpenDiablo2.Common.Interfaces
|
||||||
{
|
{
|
||||||
|
@ -8,6 +9,7 @@ namespace OpenDiablo2.Common.Interfaces
|
||||||
{
|
{
|
||||||
event OnPanelToggledEvent OnPanelToggled;
|
event OnPanelToggledEvent OnPanelToggled;
|
||||||
|
|
||||||
|
IPanel GetPanel(ePanelType panelType);
|
||||||
bool IsMouseOver();
|
bool IsMouseOver();
|
||||||
void UpdatePanelLocation();
|
void UpdatePanelLocation();
|
||||||
void OnMenuToggle(bool isToggled);
|
void OnMenuToggle(bool isToggled);
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace OpenDiablo2.Common.Interfaces
|
||||||
{
|
{
|
||||||
event OnPanelClosedEvent OnPanelClosed;
|
event OnPanelClosedEvent OnPanelClosed;
|
||||||
|
|
||||||
eButtonType PanelType { get; }
|
ePanelType PanelType { get; }
|
||||||
ePanelFrameType FrameType { get; }
|
ePanelFrameType FrameType { get; }
|
||||||
void Render();
|
void Render();
|
||||||
void Update();
|
void Update();
|
||||||
|
|
|
@ -12,6 +12,9 @@ namespace OpenDiablo2.Common.Models
|
||||||
public string PaletteName { get; internal set; }
|
public string PaletteName { get; internal set; }
|
||||||
public bool Toggleable { get; internal set; } = false;
|
public bool Toggleable { get; internal set; } = false;
|
||||||
public int BaseFrame { get; internal set; } = 0;
|
public int BaseFrame { get; internal set; } = 0;
|
||||||
|
public int DisabledFrame { get; internal set; } = -1;
|
||||||
|
|
||||||
|
public bool IsDarkenedWhenDisabled => DisabledFrame == -1;
|
||||||
|
|
||||||
public static ImmutableDictionary<eButtonType, ButtonLayout> Values { get; } = new Dictionary<eButtonType, ButtonLayout>
|
public static ImmutableDictionary<eButtonType, ButtonLayout> Values { get; } = new Dictionary<eButtonType, ButtonLayout>
|
||||||
{
|
{
|
||||||
|
@ -34,6 +37,7 @@ namespace OpenDiablo2.Common.Models
|
||||||
{eButtonType.Menu, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MenuButton,PaletteName = Palettes.Units, Toggleable = true } },
|
{eButtonType.Menu, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MenuButton,PaletteName = Palettes.Units, Toggleable = true } },
|
||||||
{eButtonType.GoldCoin, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.GoldCoinButton,PaletteName = Palettes.Units } },
|
{eButtonType.GoldCoin, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.GoldCoinButton,PaletteName = Palettes.Units } },
|
||||||
{eButtonType.Close, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.SquareButton,PaletteName = Palettes.Units, BaseFrame = 10 } },
|
{eButtonType.Close, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.SquareButton,PaletteName = Palettes.Units, BaseFrame = 10 } },
|
||||||
|
{eButtonType.Skill, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.AddSkillButton, PaletteName = Palettes.Units, DisabledFrame = 2 } },
|
||||||
}.ToImmutableDictionary();
|
}.ToImmutableDictionary();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,6 +75,7 @@
|
||||||
<Compile Include="Enums\eLevelId.cs" />
|
<Compile Include="Enums\eLevelId.cs" />
|
||||||
<Compile Include="Enums\eLevelSubType.cs" />
|
<Compile Include="Enums\eLevelSubType.cs" />
|
||||||
<Compile Include="Enums\eMPQFormatVersion.cs" />
|
<Compile Include="Enums\eMPQFormatVersion.cs" />
|
||||||
|
<Compile Include="Enums\ePanelType.cs" />
|
||||||
<Compile Include="Enums\eRenderCellType.cs" />
|
<Compile Include="Enums\eRenderCellType.cs" />
|
||||||
<Compile Include="Enums\eSceneType.cs" />
|
<Compile Include="Enums\eSceneType.cs" />
|
||||||
<Compile Include="Enums\eSessionType.cs" />
|
<Compile Include="Enums\eSessionType.cs" />
|
||||||
|
|
|
@ -95,6 +95,7 @@ namespace OpenDiablo2.Common
|
||||||
public const string HealthMana = @"data\global\ui\PANEL\hlthmana.DC6";
|
public const string HealthMana = @"data\global\ui\PANEL\hlthmana.DC6";
|
||||||
public const string GameSmallMenuButton = @"data\global\ui\PANEL\menubutton.DC6"; // TODO: Used for inventory popout
|
public const string GameSmallMenuButton = @"data\global\ui\PANEL\menubutton.DC6"; // TODO: Used for inventory popout
|
||||||
public const string SkillIcon = @"data\global\ui\PANEL\Skillicon.DC6"; // TODO: Used for skill icon button
|
public const string SkillIcon = @"data\global\ui\PANEL\Skillicon.DC6"; // TODO: Used for skill icon button
|
||||||
|
public const string AddSkillButton = @"data\global\ui\PANEL\level.DC6";
|
||||||
|
|
||||||
// --- Mouse Pointers ---
|
// --- Mouse Pointers ---
|
||||||
public const string CursorDefault = @"data\global\ui\CURSOR\ohand.DC6";
|
public const string CursorDefault = @"data\global\ui\CURSOR\ohand.DC6";
|
||||||
|
|
|
@ -53,6 +53,7 @@ namespace OpenDiablo2.Core.UI
|
||||||
return;
|
return;
|
||||||
enabled = value;
|
enabled = value;
|
||||||
|
|
||||||
|
if(buttonLayout.IsDarkenedWhenDisabled)
|
||||||
sprite.Darken = !enabled;
|
sprite.Darken = !enabled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,7 +187,11 @@ namespace OpenDiablo2.Core.UI
|
||||||
|
|
||||||
if (AllowFrameChange)
|
if (AllowFrameChange)
|
||||||
{
|
{
|
||||||
if (Toggled && pressed)
|
if(!Enabled && buttonLayout.DisabledFrame >= 0)
|
||||||
|
{
|
||||||
|
frame = buttonLayout.DisabledFrame;
|
||||||
|
}
|
||||||
|
else if (Toggled && pressed)
|
||||||
{
|
{
|
||||||
frame = buttonLayout.BaseFrame + 3;
|
frame = buttonLayout.BaseFrame + 3;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ namespace OpenDiablo2.Core.UI
|
||||||
closeButton.OnActivate = () => OnPanelClosed?.Invoke(this);
|
closeButton.OnActivate = () => OnPanelClosed?.Invoke(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public eButtonType PanelType => eButtonType.MinipanelCharacter;
|
public ePanelType PanelType => ePanelType.Character;
|
||||||
public ePanelFrameType FrameType => ePanelFrameType.Left;
|
public ePanelFrameType FrameType => ePanelFrameType.Left;
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
|
|
|
@ -32,10 +32,14 @@ namespace OpenDiablo2.Core.UI
|
||||||
private readonly IMouseInfoProvider mouseInfoProvider;
|
private readonly IMouseInfoProvider mouseInfoProvider;
|
||||||
private readonly IMiniPanel minipanel;
|
private readonly IMiniPanel minipanel;
|
||||||
|
|
||||||
private readonly IButton runButton, menuButton;
|
private readonly IButton runButton, menuButton, addStatButton, addSkillButton;
|
||||||
private readonly ISprite panelSprite, healthManaSprite, gameGlobeOverlapSprite;
|
private readonly ISprite panelSprite, healthManaSprite, gameGlobeOverlapSprite;
|
||||||
private readonly IPanelFrame leftPanelFrame, rightPanelFrame;
|
private readonly IPanelFrame leftPanelFrame, rightPanelFrame;
|
||||||
|
|
||||||
|
// Test fields
|
||||||
|
private bool addNewAttribute = true;
|
||||||
|
private bool addNewSkill = false;
|
||||||
|
|
||||||
public GameHUD(
|
public GameHUD(
|
||||||
IRenderWindow renderWindow,
|
IRenderWindow renderWindow,
|
||||||
IGameState gameState,
|
IGameState gameState,
|
||||||
|
@ -62,6 +66,15 @@ namespace OpenDiablo2.Core.UI
|
||||||
menuButton.OnToggle = minipanel.OnMenuToggle;
|
menuButton.OnToggle = minipanel.OnMenuToggle;
|
||||||
menuButton.Toggle();
|
menuButton.Toggle();
|
||||||
|
|
||||||
|
addStatButton = createButton(eButtonType.Skill);
|
||||||
|
addStatButton.Location = new Point(207, 562);
|
||||||
|
addStatButton.Enabled = addNewAttribute;
|
||||||
|
addStatButton.OnActivate = () => TogglePanel(ePanelType.Character);
|
||||||
|
|
||||||
|
addSkillButton = createButton(eButtonType.Skill);
|
||||||
|
addSkillButton.Location = new Point(564, 562);
|
||||||
|
addSkillButton.Enabled = addNewSkill;
|
||||||
|
|
||||||
panelSprite = renderWindow.LoadSprite(ResourcePaths.GamePanels, Palettes.Act1, true);
|
panelSprite = renderWindow.LoadSprite(ResourcePaths.GamePanels, Palettes.Act1, true);
|
||||||
healthManaSprite = renderWindow.LoadSprite(ResourcePaths.HealthMana, Palettes.Act1, true);
|
healthManaSprite = renderWindow.LoadSprite(ResourcePaths.HealthMana, Palettes.Act1, true);
|
||||||
gameGlobeOverlapSprite = renderWindow.LoadSprite(ResourcePaths.GameGlobeOverlap, Palettes.Act1, true);
|
gameGlobeOverlapSprite = renderWindow.LoadSprite(ResourcePaths.GameGlobeOverlap, Palettes.Act1, true);
|
||||||
|
@ -75,6 +88,11 @@ namespace OpenDiablo2.Core.UI
|
||||||
public bool IsRightPanelVisible => RightPanel != null;
|
public bool IsRightPanelVisible => RightPanel != null;
|
||||||
public bool IsRunningEnabled => runButton.Toggled;
|
public bool IsRunningEnabled => runButton.Toggled;
|
||||||
|
|
||||||
|
public void TogglePanel(ePanelType panelType)
|
||||||
|
{
|
||||||
|
TogglePanel(minipanel.GetPanel(panelType));
|
||||||
|
}
|
||||||
|
|
||||||
public void TogglePanel(IPanel panel)
|
public void TogglePanel(IPanel panel)
|
||||||
{
|
{
|
||||||
switch (panel.FrameType)
|
switch (panel.FrameType)
|
||||||
|
@ -168,12 +186,16 @@ namespace OpenDiablo2.Core.UI
|
||||||
|
|
||||||
runButton.Render();
|
runButton.Render();
|
||||||
menuButton.Render();
|
menuButton.Render();
|
||||||
|
addStatButton.Render();
|
||||||
|
addSkillButton.Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
runButton.Update();
|
runButton.Update();
|
||||||
menuButton.Update();
|
menuButton.Update();
|
||||||
|
addStatButton.Update();
|
||||||
|
addSkillButton.Update();
|
||||||
|
|
||||||
if (IsLeftPanelVisible)
|
if (IsLeftPanelVisible)
|
||||||
{
|
{
|
||||||
|
|
|
@ -105,7 +105,7 @@ namespace OpenDiablo2.Core.UI
|
||||||
bootsContainer.Location = panelSprite.Location + new Size(251, 178);
|
bootsContainer.Location = panelSprite.Location + new Size(251, 178);
|
||||||
}
|
}
|
||||||
|
|
||||||
public eButtonType PanelType => eButtonType.MinipanelInventory;
|
public ePanelType PanelType => ePanelType.Inventory;
|
||||||
public ePanelFrameType FrameType => ePanelFrameType.Right;
|
public ePanelFrameType FrameType => ePanelFrameType.Right;
|
||||||
|
|
||||||
public bool IsSecondaryEquipped { get; private set; }
|
public bool IsSecondaryEquipped { get; private set; }
|
||||||
|
|
|
@ -1,5 +1,22 @@
|
||||||
using OpenDiablo2.Common;
|
/* OpenDiablo 2 - An open source re-implementation of Diablo 2 in C#
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using OpenDiablo2.Common;
|
||||||
using OpenDiablo2.Common.Enums;
|
using OpenDiablo2.Common.Enums;
|
||||||
|
using OpenDiablo2.Common.Extensions;
|
||||||
using OpenDiablo2.Common.Interfaces;
|
using OpenDiablo2.Common.Interfaces;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -40,7 +57,7 @@ namespace OpenDiablo2.Core.UI
|
||||||
buttons = panelButtons.Select((x, i) =>
|
buttons = panelButtons.Select((x, i) =>
|
||||||
{
|
{
|
||||||
var newBtn = createButton(x);
|
var newBtn = createButton(x);
|
||||||
var panel = panels.SingleOrDefault(o => o.PanelType == x);
|
var panel = panels.SingleOrDefault(o => o.PanelType == x.GetPanelType());
|
||||||
|
|
||||||
if (panel != null)
|
if (panel != null)
|
||||||
{
|
{
|
||||||
|
@ -55,6 +72,11 @@ namespace OpenDiablo2.Core.UI
|
||||||
|
|
||||||
public void OnMenuToggle(bool isToggled) => isPanelVisible = isToggled;
|
public void OnMenuToggle(bool isToggled) => isPanelVisible = isToggled;
|
||||||
|
|
||||||
|
public IPanel GetPanel(ePanelType panelType)
|
||||||
|
{
|
||||||
|
return panels.SingleOrDefault(o => o.PanelType == panelType);
|
||||||
|
}
|
||||||
|
|
||||||
public bool IsMouseOver()
|
public bool IsMouseOver()
|
||||||
{
|
{
|
||||||
int xDiff = mouseInfoProvider.MouseX - sprite.Location.X;
|
int xDiff = mouseInfoProvider.MouseX - sprite.Location.X;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user