1
1
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:
Kacper Drobny 2018-12-08 00:45:23 +01:00 committed by Tim Sarbin
parent 2f1f15c7b5
commit d899176963
14 changed files with 162 additions and 166 deletions

View File

@ -3,6 +3,7 @@
public enum ePanelFrameType public enum ePanelFrameType
{ {
Left, Left,
Right Right,
Center
} }
} }

View File

@ -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);

View File

@ -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();
} }
} }

View File

@ -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();
} }
} }

View File

@ -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();
} }

View 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();
}
}

View File

@ -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" />

View File

@ -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();

View File

@ -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)

View File

@ -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));

View File

@ -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);
} }

View File

@ -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();

View File

@ -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);
}
} }
} }

View File

@ -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
} }
} }
} }