mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-11-19 02:46:35 -05:00
Basic Character Panel and Inventory Panel drawing (#30)
* Initial minipanel work * Character and Inventory panel implementation, frame included * Separate panel frame from the actual inventory and character panels so they can be reused by other panels
This commit is contained in:
parent
baed1834b4
commit
f3793e0a60
8
OpenDiablo2.Common/Enums/ePanelFrameType.cs
Normal file
8
OpenDiablo2.Common/Enums/ePanelFrameType.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace OpenDiablo2.Common.Enums
|
||||
{
|
||||
public enum ePanelFrameType
|
||||
{
|
||||
Left,
|
||||
Right
|
||||
}
|
||||
}
|
10
OpenDiablo2.Common/Interfaces/ICharacterPanel.cs
Normal file
10
OpenDiablo2.Common/Interfaces/ICharacterPanel.cs
Normal file
@ -0,0 +1,10 @@
|
||||
using System;
|
||||
|
||||
namespace OpenDiablo2.Common.Interfaces
|
||||
{
|
||||
public interface ICharacterPanel : IDisposable
|
||||
{
|
||||
void Render();
|
||||
void Update();
|
||||
}
|
||||
}
|
@ -12,6 +12,12 @@ namespace OpenDiablo2.Common.Interfaces
|
||||
string MapName { get; }
|
||||
Palette CurrentPalette { get; }
|
||||
|
||||
bool ToggleShowInventoryPanel();
|
||||
bool ShowInventoryPanel { get; set; }
|
||||
|
||||
bool ToggleShowCharacterPanel();
|
||||
bool ShowCharacterPanel { get; set; }
|
||||
|
||||
void Initialize(string text, eHero value);
|
||||
void Update(long ms);
|
||||
IEnumerable<MapCellInfo> GetMapCellInfo(int cellX, int cellY, eRenderCellType renderCellType);
|
||||
|
10
OpenDiablo2.Common/Interfaces/IInventoryPanel.cs
Normal file
10
OpenDiablo2.Common/Interfaces/IInventoryPanel.cs
Normal file
@ -0,0 +1,10 @@
|
||||
using System;
|
||||
|
||||
namespace OpenDiablo2.Common.Interfaces
|
||||
{
|
||||
public interface IInventoryPanel : IDisposable
|
||||
{
|
||||
void Render();
|
||||
void Update();
|
||||
}
|
||||
}
|
11
OpenDiablo2.Common/Interfaces/IPanelFrame.cs
Normal file
11
OpenDiablo2.Common/Interfaces/IPanelFrame.cs
Normal file
@ -0,0 +1,11 @@
|
||||
using OpenDiablo2.Common.Enums;
|
||||
using System;
|
||||
|
||||
namespace OpenDiablo2.Common.Interfaces
|
||||
{
|
||||
public interface IPanelFrame : IDisposable
|
||||
{
|
||||
void Render();
|
||||
void Update();
|
||||
}
|
||||
}
|
@ -54,6 +54,7 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="Attributes\SceneAttribute.cs" />
|
||||
<Compile Include="AutofacModule.cs" />
|
||||
<Compile Include="Enums\ePanelFrameType.cs" />
|
||||
<Compile Include="Enums\eButtonType.cs" />
|
||||
<Compile Include="Enums\eHero.cs" />
|
||||
<Compile Include="Enums\eLevelId.cs" />
|
||||
@ -63,6 +64,8 @@
|
||||
<Compile Include="Enums\eTextAlign.cs" />
|
||||
<Compile Include="Enums\eWildBorder.cs" />
|
||||
<Compile Include="Interfaces\IButton.cs" />
|
||||
<Compile Include="Interfaces\IPanelFrame.cs" />
|
||||
<Compile Include="Interfaces\IInventoryPanel.cs" />
|
||||
<Compile Include="Interfaces\IEngineDataManager.cs" />
|
||||
<Compile Include="Interfaces\IFont.cs" />
|
||||
<Compile Include="Interfaces\IGameEngine.cs" />
|
||||
@ -71,6 +74,7 @@
|
||||
<Compile Include="Interfaces\ILabel.cs" />
|
||||
<Compile Include="Interfaces\IMapEngine.cs" />
|
||||
<Compile Include="Interfaces\IMiniPanel.cs" />
|
||||
<Compile Include="Interfaces\ICharacterPanel.cs" />
|
||||
<Compile Include="Interfaces\IMouseCursor.cs" />
|
||||
<Compile Include="Interfaces\IMPQProvider.cs" />
|
||||
<Compile Include="Interfaces\IMusicProvider.cs" />
|
||||
|
@ -111,6 +111,9 @@ namespace OpenDiablo2.Common
|
||||
public static string MinipanelSmall = "data\\global\\ui\\PANEL\\minipanel_s.dc6";
|
||||
public static string MinipanelButton = "data\\global\\ui\\PANEL\\minipanelbtn.DC6";
|
||||
|
||||
public static string Frame = "data\\global\\ui\\PANEL\\800borderframe.dc6";
|
||||
public static string InventoryCharacterPanel = "data\\global\\ui\\PANEL\\invchar.DC6";
|
||||
|
||||
public static string RunButton = "data\\global\\ui\\PANEL\\runbutton.dc6";
|
||||
public static string MenuButton = "data\\global\\ui\\PANEL\\menubutton.DC6";
|
||||
|
||||
|
@ -20,6 +20,9 @@ namespace OpenDiablo2.Core
|
||||
builder.RegisterType<GameState>().As<IGameState>().SingleInstance();
|
||||
builder.RegisterType<MapEngine>().As<IMapEngine>().SingleInstance();
|
||||
builder.RegisterType<MiniPanel>().As<IMiniPanel>().InstancePerDependency();
|
||||
builder.RegisterType<PanelFrame>().As<IPanelFrame>().InstancePerDependency();
|
||||
builder.RegisterType<CharacterPanel>().As<ICharacterPanel>().InstancePerDependency();
|
||||
builder.RegisterType<InventoryPanel>().As<IInventoryPanel>().InstancePerDependency();
|
||||
builder.RegisterType<MPQProvider>().As<IMPQProvider>().SingleInstance();
|
||||
builder.RegisterType<ResourceManager>().As<IResourceManager>().SingleInstance();
|
||||
builder.RegisterType<TextDictionary>().As<ITextDictionary>().SingleInstance();
|
||||
|
@ -34,6 +34,9 @@ namespace OpenDiablo2.Core.GameState_
|
||||
public string MapName { get; private set; }
|
||||
public Palette CurrentPalette => paletteProvider.PaletteTable[$"ACT{Act}"];
|
||||
|
||||
public bool ShowInventoryPanel { get; set; } = false;
|
||||
public bool ShowCharacterPanel { get; set; } = false;
|
||||
|
||||
public int Seed { get; internal set; }
|
||||
|
||||
public GameState(
|
||||
@ -223,6 +226,20 @@ namespace OpenDiablo2.Core.GameState_
|
||||
|
||||
}
|
||||
|
||||
public bool ToggleShowInventoryPanel()
|
||||
{
|
||||
ShowInventoryPanel = !ShowInventoryPanel;
|
||||
|
||||
return ShowInventoryPanel;
|
||||
}
|
||||
|
||||
public bool ToggleShowCharacterPanel()
|
||||
{
|
||||
ShowCharacterPanel = !ShowCharacterPanel;
|
||||
|
||||
return ShowCharacterPanel;
|
||||
}
|
||||
|
||||
|
||||
private MapCellInfo GetMapCellInfo(
|
||||
MapInfo map,
|
||||
|
@ -66,8 +66,11 @@
|
||||
<Compile Include="ResourceManager.cs" />
|
||||
<Compile Include="TextDictionary.cs" />
|
||||
<Compile Include="UI\Button.cs" />
|
||||
<Compile Include="UI\PanelFrame.cs" />
|
||||
<Compile Include="UI\InventoryPanel.cs" />
|
||||
<Compile Include="UI\TextBox.cs" />
|
||||
<Compile Include="UI\MiniPanel.cs" />
|
||||
<Compile Include="UI\CharacterPanel.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpenDiablo2.Common\OpenDiablo2.Common.csproj">
|
||||
|
44
OpenDiablo2.Core/UI/CharacterPanel.cs
Normal file
44
OpenDiablo2.Core/UI/CharacterPanel.cs
Normal file
@ -0,0 +1,44 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using OpenDiablo2.Common;
|
||||
using OpenDiablo2.Common.Enums;
|
||||
using OpenDiablo2.Common.Interfaces;
|
||||
|
||||
namespace OpenDiablo2.Core.UI
|
||||
{
|
||||
public sealed class CharacterPanel : ICharacterPanel
|
||||
{
|
||||
private readonly IRenderWindow renderWindow;
|
||||
private ISprite sprite;
|
||||
private IPanelFrame panelFrame;
|
||||
|
||||
public Point Location { get; set; }
|
||||
|
||||
public CharacterPanel(IRenderWindow renderWindow, Func<ePanelFrameType, IPanelFrame> createPanelFrame)
|
||||
{
|
||||
this.renderWindow = renderWindow;
|
||||
this.panelFrame = createPanelFrame(ePanelFrameType.Left);
|
||||
|
||||
sprite = renderWindow.LoadSprite(ResourcePaths.InventoryCharacterPanel, Palettes.Units, new Point(79,61));
|
||||
Location = new Point(0, 0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Render()
|
||||
{
|
||||
panelFrame.Render();
|
||||
renderWindow.Draw(sprite, 2, 2, 0);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
sprite.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
42
OpenDiablo2.Core/UI/InventoryPanel.cs
Normal file
42
OpenDiablo2.Core/UI/InventoryPanel.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using OpenDiablo2.Common;
|
||||
using OpenDiablo2.Common.Enums;
|
||||
using OpenDiablo2.Common.Interfaces;
|
||||
|
||||
namespace OpenDiablo2.Core.UI
|
||||
{
|
||||
public sealed class InventoryPanel : IInventoryPanel
|
||||
{
|
||||
private readonly IRenderWindow renderWindow;
|
||||
private ISprite sprite;
|
||||
private IPanelFrame panelFrame;
|
||||
|
||||
public Point Location { get; set; }
|
||||
|
||||
public InventoryPanel(Func<ePanelFrameType, IPanelFrame> createPanelFrame, IRenderWindow renderWindow)
|
||||
{
|
||||
this.renderWindow = renderWindow;
|
||||
this.panelFrame = createPanelFrame(ePanelFrameType.Right);
|
||||
|
||||
sprite = renderWindow.LoadSprite(ResourcePaths.InventoryCharacterPanel, Palettes.Units, new Point(402,61));
|
||||
Location = new Point(400, 0);
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Render()
|
||||
{
|
||||
panelFrame.Render();
|
||||
renderWindow.Draw(sprite, 2, 2, 1);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
sprite.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@ using OpenDiablo2.Common.Interfaces;
|
||||
|
||||
namespace OpenDiablo2.Core.UI
|
||||
{
|
||||
// TODO: Allow to set Minipanel.buttons.character.OnAction or similar for button delegates
|
||||
// TODO: Self-align when side panels are open
|
||||
public sealed class MiniPanel : IMiniPanel
|
||||
{
|
||||
private readonly IRenderWindow renderWindow;
|
||||
@ -28,7 +28,7 @@ namespace OpenDiablo2.Core.UI
|
||||
}
|
||||
}
|
||||
|
||||
public MiniPanel(IRenderWindow renderWindow, Func<eButtonType, IButton> createButton)
|
||||
public MiniPanel(IRenderWindow renderWindow, IGameState gameState, Func<eButtonType, IButton> createButton)
|
||||
{
|
||||
this.renderWindow = renderWindow;
|
||||
|
||||
@ -37,9 +37,11 @@ namespace OpenDiablo2.Core.UI
|
||||
|
||||
characterBtn = createButton(eButtonType.MinipanelCharacter);
|
||||
characterBtn.Location = new Point(3 + Location.X, 3 + Location.Y);
|
||||
characterBtn.OnActivate = () => gameState.ToggleShowCharacterPanel();
|
||||
|
||||
inventoryBtn = createButton(eButtonType.MinipanelInventory);
|
||||
inventoryBtn.Location = new Point(24 + Location.X, 3 + Location.Y);
|
||||
inventoryBtn.OnActivate = () => gameState.ToggleShowInventoryPanel();
|
||||
|
||||
skillBtn = createButton(eButtonType.MinipanelSkill);
|
||||
skillBtn.Location = new Point(45 + Location.X, 3 + Location.Y);
|
||||
|
67
OpenDiablo2.Core/UI/PanelFrame.cs
Normal file
67
OpenDiablo2.Core/UI/PanelFrame.cs
Normal file
@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using OpenDiablo2.Common;
|
||||
using OpenDiablo2.Common.Enums;
|
||||
using OpenDiablo2.Common.Interfaces;
|
||||
|
||||
namespace OpenDiablo2.Core.UI
|
||||
{
|
||||
public sealed class PanelFrame : IPanelFrame
|
||||
{
|
||||
private readonly IRenderWindow renderWindow;
|
||||
private ISprite sprite;
|
||||
private ePanelFrameType panelFrameType;
|
||||
|
||||
public Point Location { get; set; }
|
||||
|
||||
public PanelFrame(IRenderWindow renderWindow, ePanelFrameType panelFrameType)
|
||||
{
|
||||
this.renderWindow = renderWindow;
|
||||
this.panelFrameType = panelFrameType;
|
||||
|
||||
sprite = renderWindow.LoadSprite(ResourcePaths.Frame, Palettes.Units, new Point(0, 0));
|
||||
|
||||
Location = new Point(0, 0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void DrawPanel()
|
||||
{
|
||||
switch(this.panelFrameType)
|
||||
{
|
||||
case ePanelFrameType.Left:
|
||||
renderWindow.Draw(sprite, 0, new Point(0, 256));
|
||||
renderWindow.Draw(sprite, 1, new Point(256, 66));
|
||||
renderWindow.Draw(sprite, 2, new Point(0, 256 + 231));
|
||||
renderWindow.Draw(sprite, 3, new Point(0, 256 + 231 + 66));
|
||||
renderWindow.Draw(sprite, 4, new Point(256, 256 + 231 + 66));
|
||||
break;
|
||||
case ePanelFrameType.Right:
|
||||
renderWindow.Draw(sprite, 5, new Point(400 + 0, 66));
|
||||
renderWindow.Draw(sprite, 6, new Point(400 + 145, 256));
|
||||
renderWindow.Draw(sprite, 7, new Point(400 + 145 + 169, 256 + 231));
|
||||
renderWindow.Draw(sprite, 8, new Point(400 + 145, 256 + 231 + 66));
|
||||
renderWindow.Draw(sprite, 9, new Point(400 + 0, 256 + 231 + 66));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void Update()
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void Render()
|
||||
{
|
||||
DrawPanel();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
sprite.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
@ -23,6 +23,9 @@ namespace OpenDiablo2.Scenes
|
||||
private ISprite panelSprite, healthManaSprite, gameGlobeOverlapSprite;
|
||||
|
||||
private IMiniPanel minipanel;
|
||||
private ICharacterPanel characterpanel;
|
||||
private IInventoryPanel inventorypanel;
|
||||
|
||||
private bool showMinipanel = false;
|
||||
private IButton runButton, menuButton;
|
||||
|
||||
@ -33,7 +36,9 @@ namespace OpenDiablo2.Scenes
|
||||
IGameState gameState,
|
||||
IKeyboardInfoProvider keyboardInfoProvider,
|
||||
Func<eButtonType, IButton> createButton,
|
||||
Func<IMiniPanel> createMiniPanel
|
||||
Func<IMiniPanel> createMiniPanel,
|
||||
Func<ICharacterPanel> createCharacterPanel,
|
||||
Func<IInventoryPanel> createInventoryPanel
|
||||
)
|
||||
{
|
||||
this.renderWindow = renderWindow;
|
||||
@ -51,6 +56,9 @@ namespace OpenDiablo2.Scenes
|
||||
// Maybe? Not sure.
|
||||
// miniPanel.OnMenuActivate();
|
||||
|
||||
characterpanel = createCharacterPanel();
|
||||
inventorypanel = createInventoryPanel();
|
||||
|
||||
runButton = createButton(eButtonType.Run);
|
||||
runButton.Location = new Point(256, 570);
|
||||
runButton.OnToggle = OnRunToggle;
|
||||
@ -86,6 +94,16 @@ namespace OpenDiablo2.Scenes
|
||||
|
||||
private void DrawPanel()
|
||||
{
|
||||
if(gameState.ShowInventoryPanel)
|
||||
{
|
||||
inventorypanel.Render();
|
||||
}
|
||||
|
||||
if (gameState.ShowCharacterPanel)
|
||||
{
|
||||
characterpanel.Render();
|
||||
}
|
||||
|
||||
// Render the background bottom bar
|
||||
renderWindow.Draw(panelSprite, 0, new Point(0, 600));
|
||||
renderWindow.Draw(panelSprite, 1, new Point(166, 600));
|
||||
@ -107,6 +125,8 @@ namespace OpenDiablo2.Scenes
|
||||
minipanel.Render();
|
||||
}
|
||||
|
||||
|
||||
|
||||
runButton.Render();
|
||||
menuButton.Render();
|
||||
}
|
||||
@ -118,6 +138,8 @@ namespace OpenDiablo2.Scenes
|
||||
minipanel.Update();
|
||||
}
|
||||
|
||||
characterpanel.Update();
|
||||
|
||||
runButton.Update();
|
||||
menuButton.Update();
|
||||
|
||||
|
@ -68,6 +68,12 @@ namespace OpenDiablo2
|
||||
return (buttonType) => componentContext.Resolve<IButton>(new NamedParameter("buttonLayout", ButtonLayout.Values[buttonType]));
|
||||
});
|
||||
|
||||
containerBuilder.Register<Func<ePanelFrameType, IPanelFrame>>(c =>
|
||||
{
|
||||
var componentContext = c.Resolve<IComponentContext>();
|
||||
return (panelFrameType) => componentContext.Resolve<IPanelFrame>(new NamedParameter("panelFrameType", panelFrameType));
|
||||
});
|
||||
|
||||
/* Uncomment the below if we support multiple textbox types
|
||||
containerBuilder.Register<Func<TextBox>>(c =>
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user