mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-27 21:56:19 -04:00
refactoring of minipanel (#36)
This commit is contained in:
parent
2f1f15c7b5
commit
d899176963
@ -3,6 +3,7 @@
|
|||||||
public enum ePanelFrameType
|
public enum ePanelFrameType
|
||||||
{
|
{
|
||||||
Left,
|
Left,
|
||||||
Right
|
Right,
|
||||||
|
Center
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,15 +16,11 @@ namespace OpenDiablo2.Common.Interfaces
|
|||||||
Palette CurrentPalette { get; }
|
Palette CurrentPalette { get; }
|
||||||
IEnumerable<PlayerInfo> PlayerInfos { get; }
|
IEnumerable<PlayerInfo> PlayerInfos { get; }
|
||||||
|
|
||||||
bool ToggleShowInventoryPanel();
|
|
||||||
bool ShowInventoryPanel { get; set; }
|
|
||||||
|
|
||||||
bool ToggleShowCharacterPanel();
|
|
||||||
bool ShowCharacterPanel { get; set; }
|
|
||||||
|
|
||||||
Item SelectedItem { get; }
|
Item SelectedItem { get; }
|
||||||
void SelectItem(Item item);
|
void SelectItem(Item item);
|
||||||
|
|
||||||
|
int CameraOffset { get; set; }
|
||||||
|
|
||||||
void Initialize(string text, eHero value, eSessionType sessionType);
|
void Initialize(string text, eHero value, eSessionType sessionType);
|
||||||
void Update(long ms);
|
void Update(long ms);
|
||||||
IEnumerable<MapCellInfo> GetMapCellInfo(int cellX, int cellY, eRenderCellType renderCellType);
|
IEnumerable<MapCellInfo> GetMapCellInfo(int cellX, int cellY, eRenderCellType renderCellType);
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
using System;
|
namespace OpenDiablo2.Common.Interfaces
|
||||||
|
|
||||||
namespace OpenDiablo2.Common.Interfaces
|
|
||||||
{
|
{
|
||||||
public interface ICharacterPanel : IDisposable
|
public interface ICharacterPanel : IPanel
|
||||||
{
|
{
|
||||||
void Render();
|
|
||||||
void Update();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
using System;
|
namespace OpenDiablo2.Common.Interfaces
|
||||||
|
|
||||||
namespace OpenDiablo2.Common.Interfaces
|
|
||||||
{
|
{
|
||||||
public interface IInventoryPanel : IDisposable
|
public interface IInventoryPanel : IPanel
|
||||||
{
|
{
|
||||||
void Render();
|
|
||||||
void Update();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,10 @@ namespace OpenDiablo2.Common.Interfaces
|
|||||||
{
|
{
|
||||||
public interface IMiniPanel : IDisposable
|
public interface IMiniPanel : IDisposable
|
||||||
{
|
{
|
||||||
|
bool IsLeftPanelVisible { get; }
|
||||||
|
bool IsRightPanelVisible { get; }
|
||||||
|
|
||||||
|
void OnMenuToggle(bool isToggled);
|
||||||
void Render();
|
void Render();
|
||||||
void Update();
|
void Update();
|
||||||
}
|
}
|
||||||
|
13
OpenDiablo2.Common/Interfaces/UI/IPanel.cs
Normal file
13
OpenDiablo2.Common/Interfaces/UI/IPanel.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using OpenDiablo2.Common.Enums;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace OpenDiablo2.Common.Interfaces
|
||||||
|
{
|
||||||
|
public interface IPanel : IDisposable
|
||||||
|
{
|
||||||
|
eButtonType PanelType { get; }
|
||||||
|
ePanelFrameType FrameType { get; }
|
||||||
|
void Render();
|
||||||
|
void Update();
|
||||||
|
}
|
||||||
|
}
|
@ -85,6 +85,7 @@
|
|||||||
<Compile Include="Interfaces\MessageBus\IMessageFrame.cs" />
|
<Compile Include="Interfaces\MessageBus\IMessageFrame.cs" />
|
||||||
<Compile Include="Interfaces\MessageBus\ISessionManager.cs" />
|
<Compile Include="Interfaces\MessageBus\ISessionManager.cs" />
|
||||||
<Compile Include="Interfaces\MessageBus\ISessionServer.cs" />
|
<Compile Include="Interfaces\MessageBus\ISessionServer.cs" />
|
||||||
|
<Compile Include="Interfaces\UI\IPanel.cs" />
|
||||||
<Compile Include="Models\AnimationData.cs" />
|
<Compile Include="Models\AnimationData.cs" />
|
||||||
<Compile Include="Models\BitMuncher.cs" />
|
<Compile Include="Models\BitMuncher.cs" />
|
||||||
<Compile Include="Models\MPQCOF.cs" />
|
<Compile Include="Models\MPQCOF.cs" />
|
||||||
|
@ -23,8 +23,8 @@ namespace OpenDiablo2.Core
|
|||||||
builder.RegisterType<MapEngine>().As<IMapEngine>().SingleInstance();
|
builder.RegisterType<MapEngine>().As<IMapEngine>().SingleInstance();
|
||||||
builder.RegisterType<MiniPanel>().As<IMiniPanel>().InstancePerDependency();
|
builder.RegisterType<MiniPanel>().As<IMiniPanel>().InstancePerDependency();
|
||||||
builder.RegisterType<PanelFrame>().As<IPanelFrame>().InstancePerDependency();
|
builder.RegisterType<PanelFrame>().As<IPanelFrame>().InstancePerDependency();
|
||||||
builder.RegisterType<CharacterPanel>().As<ICharacterPanel>().InstancePerDependency();
|
builder.RegisterType<CharacterPanel>().AsImplementedInterfaces().InstancePerDependency();
|
||||||
builder.RegisterType<InventoryPanel>().As<IInventoryPanel>().InstancePerDependency();
|
builder.RegisterType<InventoryPanel>().AsImplementedInterfaces().InstancePerDependency();
|
||||||
builder.RegisterType<ItemContainer>().As<IItemContainer>().InstancePerDependency();
|
builder.RegisterType<ItemContainer>().As<IItemContainer>().InstancePerDependency();
|
||||||
builder.RegisterType<MPQProvider>().As<IMPQProvider>().SingleInstance();
|
builder.RegisterType<MPQProvider>().As<IMPQProvider>().SingleInstance();
|
||||||
builder.RegisterType<ResourceManager>().As<IResourceManager>().SingleInstance();
|
builder.RegisterType<ResourceManager>().As<IResourceManager>().SingleInstance();
|
||||||
|
@ -32,9 +32,6 @@ namespace OpenDiablo2.Core.GameState_
|
|||||||
public Palette CurrentPalette => paletteProvider.PaletteTable[$"ACT{Act}"];
|
public Palette CurrentPalette => paletteProvider.PaletteTable[$"ACT{Act}"];
|
||||||
public List<PlayerInfo> PlayerInfos { get; private set; } = new List<PlayerInfo>();
|
public List<PlayerInfo> PlayerInfos { get; private set; } = new List<PlayerInfo>();
|
||||||
|
|
||||||
public bool ShowInventoryPanel { get; set; } = false;
|
|
||||||
public bool ShowCharacterPanel { get; set; } = false;
|
|
||||||
|
|
||||||
readonly private IMouseCursor originalMouseCursor;
|
readonly private IMouseCursor originalMouseCursor;
|
||||||
|
|
||||||
public int Seed { get; internal set; }
|
public int Seed { get; internal set; }
|
||||||
@ -42,6 +39,8 @@ namespace OpenDiablo2.Core.GameState_
|
|||||||
public Item SelectedItem { get; internal set; }
|
public Item SelectedItem { get; internal set; }
|
||||||
public object ThreadLocker { get; } = new object();
|
public object ThreadLocker { get; } = new object();
|
||||||
|
|
||||||
|
public int CameraOffset { get; set; } = 0;
|
||||||
|
|
||||||
IEnumerable<PlayerInfo> IGameState.PlayerInfos => PlayerInfos;
|
IEnumerable<PlayerInfo> IGameState.PlayerInfos => PlayerInfos;
|
||||||
|
|
||||||
const double Deg2Rad = Math.PI / 180.0;
|
const double Deg2Rad = Math.PI / 180.0;
|
||||||
@ -189,7 +188,7 @@ namespace OpenDiablo2.Core.GameState_
|
|||||||
var map = GetMap(ref cellX, ref cellY);
|
var map = GetMap(ref cellX, ref cellY);
|
||||||
|
|
||||||
if (map == null)
|
if (map == null)
|
||||||
return new List<MapCellInfo>();
|
return Enumerable.Empty<MapCellInfo>();
|
||||||
|
|
||||||
if (cellY >= map.FileData.Height || cellX >= map.FileData.Width)
|
if (cellY >= map.FileData.Height || cellX >= map.FileData.Width)
|
||||||
return new List<MapCellInfo>(); // Temporary code
|
return new List<MapCellInfo>(); // Temporary code
|
||||||
@ -236,20 +235,6 @@ namespace OpenDiablo2.Core.GameState_
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ToggleShowInventoryPanel()
|
|
||||||
{
|
|
||||||
ShowInventoryPanel = !ShowInventoryPanel;
|
|
||||||
|
|
||||||
return ShowInventoryPanel;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool ToggleShowCharacterPanel()
|
|
||||||
{
|
|
||||||
ShowCharacterPanel = !ShowCharacterPanel;
|
|
||||||
|
|
||||||
return ShowCharacterPanel;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SelectItem(Item item)
|
public void SelectItem(Item item)
|
||||||
{
|
{
|
||||||
if(item == null)
|
if(item == null)
|
||||||
|
@ -55,7 +55,7 @@ namespace OpenDiablo2.Core.Map_Engine
|
|||||||
|
|
||||||
public void Render()
|
public void Render()
|
||||||
{
|
{
|
||||||
var xOffset = (gameState.ShowInventoryPanel ? -200 : 0) + (gameState.ShowCharacterPanel ? 200 : 0);
|
var xOffset = gameState.CameraOffset;
|
||||||
|
|
||||||
var cx = -(cameraLocation.X - Math.Truncate(cameraLocation.X));
|
var cx = -(cameraLocation.X - Math.Truncate(cameraLocation.X));
|
||||||
var cy = -(cameraLocation.Y - Math.Truncate(cameraLocation.Y));
|
var cy = -(cameraLocation.Y - Math.Truncate(cameraLocation.Y));
|
||||||
|
@ -10,21 +10,20 @@ namespace OpenDiablo2.Core.UI
|
|||||||
{
|
{
|
||||||
private readonly IRenderWindow renderWindow;
|
private readonly IRenderWindow renderWindow;
|
||||||
private ISprite sprite;
|
private ISprite sprite;
|
||||||
private IPanelFrame panelFrame;
|
|
||||||
|
|
||||||
public Point Location { get; set; }
|
public Point Location { get; set; }
|
||||||
|
|
||||||
public CharacterPanel(IRenderWindow renderWindow, Func<ePanelFrameType, IPanelFrame> createPanelFrame)
|
public CharacterPanel(IRenderWindow renderWindow)
|
||||||
{
|
{
|
||||||
this.renderWindow = renderWindow;
|
this.renderWindow = renderWindow;
|
||||||
this.panelFrame = createPanelFrame(ePanelFrameType.Left);
|
|
||||||
|
|
||||||
sprite = renderWindow.LoadSprite(ResourcePaths.InventoryCharacterPanel, Palettes.Units, new Point(79,61));
|
sprite = renderWindow.LoadSprite(ResourcePaths.InventoryCharacterPanel, Palettes.Units, new Point(79,61));
|
||||||
Location = new Point(0, 0);
|
Location = new Point(0, 0);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public eButtonType PanelType => eButtonType.MinipanelCharacter;
|
||||||
|
public ePanelFrameType FrameType => ePanelFrameType.Left;
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -32,7 +31,6 @@ namespace OpenDiablo2.Core.UI
|
|||||||
|
|
||||||
public void Render()
|
public void Render()
|
||||||
{
|
{
|
||||||
panelFrame.Render();
|
|
||||||
renderWindow.Draw(sprite, 2, 2, 0);
|
renderWindow.Draw(sprite, 2, 2, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ namespace OpenDiablo2.Core.UI
|
|||||||
{
|
{
|
||||||
private readonly IRenderWindow renderWindow;
|
private readonly IRenderWindow renderWindow;
|
||||||
private ISprite sprite;
|
private ISprite sprite;
|
||||||
private IPanelFrame panelFrame;
|
|
||||||
private Point location;
|
private Point location;
|
||||||
|
|
||||||
public Point Location {
|
public Point Location {
|
||||||
@ -25,6 +24,9 @@ namespace OpenDiablo2.Core.UI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public eButtonType PanelType => eButtonType.MinipanelInventory;
|
||||||
|
public ePanelFrameType FrameType => ePanelFrameType.Right;
|
||||||
|
|
||||||
// Test vars
|
// Test vars
|
||||||
public IItemContainer helmContainer, armorContainer, weaponLeftContainer, weaponRightContainer, beltContainer, gloveContainer, bootsContainer;
|
public IItemContainer helmContainer, armorContainer, weaponLeftContainer, weaponRightContainer, beltContainer, gloveContainer, bootsContainer;
|
||||||
private Point previouslyContainedItem;
|
private Point previouslyContainedItem;
|
||||||
@ -32,10 +34,9 @@ namespace OpenDiablo2.Core.UI
|
|||||||
private IItemContainer ringtRightContainer;
|
private IItemContainer ringtRightContainer;
|
||||||
private IItemContainer amuletContainer;
|
private IItemContainer amuletContainer;
|
||||||
|
|
||||||
public InventoryPanel(Func<ePanelFrameType, IPanelFrame> createPanelFrame, IRenderWindow renderWindow, IItemManager itemManager, Func<eItemContainerType, IItemContainer> createItemContainer)
|
public InventoryPanel(IRenderWindow renderWindow, IItemManager itemManager, Func<eItemContainerType, IItemContainer> createItemContainer)
|
||||||
{
|
{
|
||||||
this.renderWindow = renderWindow;
|
this.renderWindow = renderWindow;
|
||||||
this.panelFrame = createPanelFrame(ePanelFrameType.Right);
|
|
||||||
|
|
||||||
sprite = renderWindow.LoadSprite(ResourcePaths.InventoryCharacterPanel, Palettes.Units, new Point(402,61));
|
sprite = renderWindow.LoadSprite(ResourcePaths.InventoryCharacterPanel, Palettes.Units, new Point(402,61));
|
||||||
Location = new Point(400, 0);
|
Location = new Point(400, 0);
|
||||||
@ -83,7 +84,6 @@ namespace OpenDiablo2.Core.UI
|
|||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
|
|
||||||
helmContainer.Update();
|
helmContainer.Update();
|
||||||
amuletContainer.Update();
|
amuletContainer.Update();
|
||||||
armorContainer.Update();
|
armorContainer.Update();
|
||||||
@ -98,7 +98,6 @@ namespace OpenDiablo2.Core.UI
|
|||||||
|
|
||||||
public void Render()
|
public void Render()
|
||||||
{
|
{
|
||||||
panelFrame.Render();
|
|
||||||
renderWindow.Draw(sprite, 2, 2, 1);
|
renderWindow.Draw(sprite, 2, 2, 1);
|
||||||
|
|
||||||
helmContainer.Render();
|
helmContainer.Render();
|
||||||
|
@ -1,101 +1,150 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
using OpenDiablo2.Common;
|
using OpenDiablo2.Common;
|
||||||
using OpenDiablo2.Common.Enums;
|
using OpenDiablo2.Common.Enums;
|
||||||
using OpenDiablo2.Common.Interfaces;
|
using OpenDiablo2.Common.Interfaces;
|
||||||
|
|
||||||
namespace OpenDiablo2.Core.UI
|
namespace OpenDiablo2.Core.UI
|
||||||
{
|
{
|
||||||
// TODO: Self-align when side panels are open
|
|
||||||
public sealed class MiniPanel : IMiniPanel
|
public sealed class MiniPanel : IMiniPanel
|
||||||
{
|
{
|
||||||
|
private static readonly IEnumerable<eButtonType> panelButtons = new[] { eButtonType.MinipanelCharacter, eButtonType.MinipanelInventory,
|
||||||
|
eButtonType.MinipanelSkill, eButtonType.MinipanelAutomap, eButtonType.MinipanelMessage, eButtonType.MinipanelQuest, eButtonType.MinipanelMenu };
|
||||||
|
|
||||||
private readonly IRenderWindow renderWindow;
|
private readonly IRenderWindow renderWindow;
|
||||||
private ISprite sprite;
|
private readonly IGameState gameState;
|
||||||
|
private readonly ISprite sprite;
|
||||||
|
private readonly IReadOnlyList<IButton> buttons;
|
||||||
|
private readonly IEnumerable<IPanel> panels;
|
||||||
|
private readonly IPanelFrame leftPanelFrame;
|
||||||
|
private readonly IPanelFrame rightPanelFrame;
|
||||||
|
|
||||||
private IButton characterBtn, inventoryBtn, skillBtn, automapBtn, messageBtn, questBtn, menuBtn;
|
private bool isPanelVisible;
|
||||||
|
|
||||||
private Point location = new Point();
|
public IPanel LeftPanel { get; private set; }
|
||||||
public Point Location
|
public IPanel RightPanel { get; private set; }
|
||||||
{
|
public bool IsLeftPanelVisible => LeftPanel != null;
|
||||||
get => location;
|
public bool IsRightPanelVisible => RightPanel != null;
|
||||||
set
|
|
||||||
{
|
|
||||||
if (location == value)
|
|
||||||
return;
|
|
||||||
location = value;
|
|
||||||
|
|
||||||
sprite.Location = new Point(value.X, value.Y + sprite.LocalFrameSize.Height);
|
public MiniPanel(IRenderWindow renderWindow, IGameState gameState,
|
||||||
}
|
IEnumerable<IPanel> panels, Func<eButtonType, IButton> createButton,
|
||||||
}
|
Func<ePanelFrameType, IPanelFrame> createPanelFrame)
|
||||||
|
|
||||||
public MiniPanel(IRenderWindow renderWindow, IGameState gameState, Func<eButtonType, IButton> createButton)
|
|
||||||
{
|
{
|
||||||
this.renderWindow = renderWindow;
|
this.renderWindow = renderWindow;
|
||||||
|
this.gameState = gameState;
|
||||||
|
this.panels = panels;
|
||||||
|
leftPanelFrame = createPanelFrame(ePanelFrameType.Left);
|
||||||
|
rightPanelFrame = createPanelFrame(ePanelFrameType.Right);
|
||||||
|
|
||||||
sprite = renderWindow.LoadSprite(ResourcePaths.MinipanelSmall, Palettes.Units);
|
sprite = renderWindow.LoadSprite(ResourcePaths.MinipanelSmall, Palettes.Units);
|
||||||
Location = new Point(800/2-sprite.LocalFrameSize.Width/2, 526);
|
|
||||||
|
|
||||||
characterBtn = createButton(eButtonType.MinipanelCharacter);
|
buttons = panelButtons.Select((x, i) =>
|
||||||
characterBtn.Location = new Point(3 + Location.X, 3 + Location.Y);
|
{
|
||||||
characterBtn.OnActivate = () => gameState.ToggleShowCharacterPanel();
|
var newBtn = createButton(x);
|
||||||
|
newBtn.OnActivate = () =>
|
||||||
|
{
|
||||||
|
var panel = panels.SingleOrDefault(o => o.PanelType == x);
|
||||||
|
if (panel == null) return;
|
||||||
|
TogglePanel(panel);
|
||||||
|
};
|
||||||
|
return newBtn;
|
||||||
|
}).ToList().AsReadOnly();
|
||||||
|
|
||||||
inventoryBtn = createButton(eButtonType.MinipanelInventory);
|
UpdatePanelLocation();
|
||||||
inventoryBtn.Location = new Point(24 + Location.X, 3 + Location.Y);
|
OnMenuToggle(true);
|
||||||
inventoryBtn.OnActivate = () => gameState.ToggleShowInventoryPanel();
|
|
||||||
|
|
||||||
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 OnMenuToggle(bool isToggled) => isPanelVisible = isToggled;
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
characterBtn.Update();
|
if (IsLeftPanelVisible)
|
||||||
inventoryBtn.Update();
|
{
|
||||||
skillBtn.Update();
|
LeftPanel.Update();
|
||||||
automapBtn.Update();
|
leftPanelFrame.Update();
|
||||||
messageBtn.Update();
|
}
|
||||||
questBtn.Update();
|
|
||||||
menuBtn.Update();
|
if (IsRightPanelVisible)
|
||||||
|
{
|
||||||
|
RightPanel.Update();
|
||||||
|
rightPanelFrame.Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isPanelVisible || (IsLeftPanelVisible && IsRightPanelVisible))
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach (var button in buttons)
|
||||||
|
button.Update();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Render()
|
public void Render()
|
||||||
{
|
{
|
||||||
|
if (IsLeftPanelVisible)
|
||||||
|
{
|
||||||
|
LeftPanel.Render();
|
||||||
|
leftPanelFrame.Render();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (IsRightPanelVisible)
|
||||||
|
{
|
||||||
|
RightPanel.Render();
|
||||||
|
rightPanelFrame.Render();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isPanelVisible || (IsLeftPanelVisible && IsRightPanelVisible))
|
||||||
|
return;
|
||||||
|
|
||||||
renderWindow.Draw(sprite);
|
renderWindow.Draw(sprite);
|
||||||
|
|
||||||
characterBtn.Render();
|
foreach (var button in buttons)
|
||||||
inventoryBtn.Render();
|
button.Render();
|
||||||
skillBtn.Render();
|
|
||||||
automapBtn.Render();
|
|
||||||
messageBtn.Render();
|
|
||||||
questBtn.Render();
|
|
||||||
menuBtn.Render();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
characterBtn.Dispose();
|
foreach (var button in buttons)
|
||||||
inventoryBtn.Dispose();
|
button.Dispose();
|
||||||
skillBtn.Dispose();
|
|
||||||
automapBtn.Dispose();
|
|
||||||
messageBtn.Dispose();
|
|
||||||
questBtn.Dispose();
|
|
||||||
menuBtn.Dispose();
|
|
||||||
|
|
||||||
sprite.Dispose();
|
sprite.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void TogglePanel(IPanel panel)
|
||||||
|
{
|
||||||
|
switch (panel.FrameType)
|
||||||
|
{
|
||||||
|
case ePanelFrameType.Left:
|
||||||
|
LeftPanel = LeftPanel == panel ? null : panel;
|
||||||
|
break;
|
||||||
|
case ePanelFrameType.Right:
|
||||||
|
RightPanel = RightPanel == panel ? null : panel;
|
||||||
|
break;
|
||||||
|
case ePanelFrameType.Center:
|
||||||
|
// todo; stack center panels
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Debug.Fail("Unknown frame type");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateCameraOffset();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateCameraOffset()
|
||||||
|
{
|
||||||
|
gameState.CameraOffset = (IsRightPanelVisible ? -200 : 0) + (IsLeftPanelVisible ? 200 : 0);
|
||||||
|
UpdatePanelLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdatePanelLocation()
|
||||||
|
{
|
||||||
|
sprite.Location = new Point((800 - sprite.LocalFrameSize.Width + (int)(gameState.CameraOffset * 1.3f)) / 2,
|
||||||
|
526 + sprite.LocalFrameSize.Height);
|
||||||
|
|
||||||
|
for (int i = 0; i < buttons.Count; i++)
|
||||||
|
buttons[i].Location = new Point(3 + 21 * i + sprite.Location.X, 3 + sprite.Location.Y - sprite.LocalFrameSize.Height);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,11 +25,8 @@ namespace OpenDiablo2.Scenes
|
|||||||
|
|
||||||
private ISprite panelSprite, healthManaSprite, gameGlobeOverlapSprite;
|
private ISprite panelSprite, healthManaSprite, gameGlobeOverlapSprite;
|
||||||
|
|
||||||
private IMiniPanel minipanel;
|
private readonly IMiniPanel minipanel;
|
||||||
private ICharacterPanel characterpanel;
|
|
||||||
private IInventoryPanel inventorypanel;
|
|
||||||
|
|
||||||
private bool showMinipanel = false;
|
|
||||||
private IButton runButton, menuButton;
|
private IButton runButton, menuButton;
|
||||||
private eMovementType lastMovementType = eMovementType.Stopped;
|
private eMovementType lastMovementType = eMovementType.Stopped;
|
||||||
private byte lastDirection = 255;
|
private byte lastDirection = 255;
|
||||||
@ -46,9 +43,7 @@ namespace OpenDiablo2.Scenes
|
|||||||
IItemManager itemManager,
|
IItemManager itemManager,
|
||||||
ISessionManager sessionManager,
|
ISessionManager sessionManager,
|
||||||
Func<eButtonType, IButton> createButton,
|
Func<eButtonType, IButton> createButton,
|
||||||
Func<IMiniPanel> createMiniPanel,
|
Func<IMiniPanel> createMiniPanel
|
||||||
Func<ICharacterPanel> createCharacterPanel,
|
|
||||||
Func<IInventoryPanel> createInventoryPanel
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.renderWindow = renderWindow;
|
this.renderWindow = renderWindow;
|
||||||
@ -65,19 +60,15 @@ namespace OpenDiablo2.Scenes
|
|||||||
gameGlobeOverlapSprite = renderWindow.LoadSprite(ResourcePaths.GameGlobeOverlap, Palettes.Act1);
|
gameGlobeOverlapSprite = renderWindow.LoadSprite(ResourcePaths.GameGlobeOverlap, Palettes.Act1);
|
||||||
|
|
||||||
minipanel = createMiniPanel();
|
minipanel = createMiniPanel();
|
||||||
// Maybe? Not sure.
|
|
||||||
// miniPanel.OnMenuActivate();
|
|
||||||
|
|
||||||
characterpanel = createCharacterPanel();
|
|
||||||
inventorypanel = createInventoryPanel();
|
|
||||||
|
|
||||||
runButton = createButton(eButtonType.Run);
|
runButton = createButton(eButtonType.Run);
|
||||||
runButton.Location = new Point(256, 570);
|
runButton.Location = new Point(256, 570);
|
||||||
runButton.OnToggle = OnRunToggle;
|
runButton.OnToggle = OnRunToggle;
|
||||||
|
|
||||||
|
// move to minipanel?
|
||||||
menuButton = createButton(eButtonType.Menu);
|
menuButton = createButton(eButtonType.Menu);
|
||||||
menuButton.Location = new Point(393, 561);
|
menuButton.Location = new Point(393, 561);
|
||||||
menuButton.OnToggle = OnMenuToggle;
|
menuButton.OnToggle = minipanel.OnMenuToggle;
|
||||||
|
|
||||||
/*var item = itemManager.getItem("hdm");
|
/*var item = itemManager.getItem("hdm");
|
||||||
var cursorsprite = renderWindow.LoadSprite(ResourcePaths.GeneratePathForItem(item.InvFile), Palettes.Units);
|
var cursorsprite = renderWindow.LoadSprite(ResourcePaths.GeneratePathForItem(item.InvFile), Palettes.Units);
|
||||||
@ -85,11 +76,6 @@ namespace OpenDiablo2.Scenes
|
|||||||
renderWindow.MouseCursor = renderWindow.LoadCursor(cursorsprite, 0, new Point(cursorsprite.FrameSize.Width/2, cursorsprite.FrameSize.Height / 2));*/
|
renderWindow.MouseCursor = renderWindow.LoadCursor(cursorsprite, 0, new Point(cursorsprite.FrameSize.Width/2, cursorsprite.FrameSize.Height / 2));*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnMenuToggle(bool isToggled)
|
|
||||||
{
|
|
||||||
this.showMinipanel = isToggled;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnRunToggle(bool isToggled)
|
private void OnRunToggle(bool isToggled)
|
||||||
{
|
{
|
||||||
log.Debug("Run Toggle: " + isToggled);
|
log.Debug("Run Toggle: " + isToggled);
|
||||||
@ -108,15 +94,7 @@ namespace OpenDiablo2.Scenes
|
|||||||
|
|
||||||
private void DrawPanel()
|
private void DrawPanel()
|
||||||
{
|
{
|
||||||
if(gameState.ShowInventoryPanel)
|
minipanel.Render();
|
||||||
{
|
|
||||||
inventorypanel.Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gameState.ShowCharacterPanel)
|
|
||||||
{
|
|
||||||
characterpanel.Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render the background bottom bar
|
// Render the background bottom bar
|
||||||
renderWindow.Draw(panelSprite, 0, new Point(0, 600));
|
renderWindow.Draw(panelSprite, 0, new Point(0, 600));
|
||||||
@ -134,11 +112,6 @@ namespace OpenDiablo2.Scenes
|
|||||||
renderWindow.Draw(healthManaSprite, 1, new Point(692, 588));
|
renderWindow.Draw(healthManaSprite, 1, new Point(692, 588));
|
||||||
renderWindow.Draw(gameGlobeOverlapSprite, 1, new Point(693, 591));
|
renderWindow.Draw(gameGlobeOverlapSprite, 1, new Point(693, 591));
|
||||||
|
|
||||||
if(showMinipanel)
|
|
||||||
{
|
|
||||||
minipanel.Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
runButton.Render();
|
runButton.Render();
|
||||||
@ -149,20 +122,7 @@ namespace OpenDiablo2.Scenes
|
|||||||
{
|
{
|
||||||
var seconds = ms / 1000f;
|
var seconds = ms / 1000f;
|
||||||
|
|
||||||
if(showMinipanel)
|
minipanel.Update();
|
||||||
{
|
|
||||||
minipanel.Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gameState.ShowInventoryPanel)
|
|
||||||
{
|
|
||||||
inventorypanel.Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gameState.ShowCharacterPanel)
|
|
||||||
{
|
|
||||||
characterpanel.Update();
|
|
||||||
}
|
|
||||||
|
|
||||||
runButton.Update();
|
runButton.Update();
|
||||||
menuButton.Update();
|
menuButton.Update();
|
||||||
@ -177,17 +137,15 @@ namespace OpenDiablo2.Scenes
|
|||||||
if (mouseInfoProvider.MouseY > 530) // 550 is what it should be, but the minipanel check needs to happent oo
|
if (mouseInfoProvider.MouseY > 530) // 550 is what it should be, but the minipanel check needs to happent oo
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (gameState.ShowInventoryPanel && mouseInfoProvider.MouseX >= 400)
|
if (minipanel.IsRightPanelVisible && mouseInfoProvider.MouseX >= 400)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (gameState.ShowCharacterPanel && mouseInfoProvider.MouseX < 400)
|
if (minipanel.IsLeftPanelVisible && mouseInfoProvider.MouseX < 400)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
||||||
// TODO: Filter movement for inventory panel
|
// TODO: Filter movement for inventory panel
|
||||||
var xOffset = (gameState.ShowInventoryPanel ? -200 : 0) + (gameState.ShowCharacterPanel ? 200 : 0);
|
var mx = (mouseInfoProvider.MouseX - 400) - gameState.CameraOffset;
|
||||||
|
|
||||||
var mx = (mouseInfoProvider.MouseX - 400) - xOffset;
|
|
||||||
var my = (mouseInfoProvider.MouseY - 300);
|
var my = (mouseInfoProvider.MouseY - 300);
|
||||||
|
|
||||||
var tx = (mx / 60f + my / 40f) / 2f;
|
var tx = (mx / 60f + my / 40f) / 2f;
|
||||||
@ -216,4 +174,4 @@ namespace OpenDiablo2.Scenes
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user