mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-27 21:56:19 -04:00
Skill Tree Panel Added (#50)
* Added attribute/skill buttons to the HUD * adjusted how movement works * Skills Panel added
This commit is contained in:
parent
842153c241
commit
68f95b8b5b
@ -1,26 +1,26 @@
|
|||||||
namespace OpenDiablo2.Common.Enums
|
namespace OpenDiablo2.Common.Enums
|
||||||
{
|
{
|
||||||
public enum eButtonType
|
public enum eButtonType
|
||||||
{
|
{
|
||||||
Wide,
|
Wide,
|
||||||
Medium,
|
Medium,
|
||||||
Narrow,
|
Narrow,
|
||||||
Cancel,
|
Cancel,
|
||||||
Tall,
|
Tall,
|
||||||
Short,
|
Short,
|
||||||
// Game UI
|
// Game UI
|
||||||
Skill,
|
Skill,
|
||||||
Run,
|
Run,
|
||||||
Menu,
|
Menu,
|
||||||
GoldCoin,
|
GoldCoin,
|
||||||
Close,
|
Close,
|
||||||
SecondaryInvHand,
|
SecondaryInvHand,
|
||||||
MinipanelCharacter,
|
MinipanelCharacter,
|
||||||
MinipanelInventory,
|
MinipanelInventory,
|
||||||
MinipanelSkill,
|
MinipanelSkill,
|
||||||
MinipanelAutomap,
|
MinipanelAutomap,
|
||||||
MinipanelMessage,
|
MinipanelMessage,
|
||||||
MinipanelQuest,
|
MinipanelQuest,
|
||||||
MinipanelMenu
|
MinipanelMenu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,16 +40,6 @@ namespace OpenDiablo2.Common.Interfaces
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
Point Location { get; set; }
|
Point Location { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Area from upper left corner that reacts to clicking
|
|
||||||
/// </summary>
|
|
||||||
Size ClickableRect { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Indicates if button sprite should react to Toggle and Activate on hover
|
|
||||||
/// </summary>
|
|
||||||
bool AllowFrameChange { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Assigning a function to this property will cause that function to be called
|
/// Assigning a function to this property will cause that function to be called
|
||||||
/// when the button is toggled on or off.
|
/// when the button is toggled on or off.
|
||||||
|
23
OpenDiablo2.Common/Interfaces/UI/ISkillsPanel.cs
Normal file
23
OpenDiablo2.Common/Interfaces/UI/ISkillsPanel.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace OpenDiablo2.Common.Interfaces.UI
|
||||||
|
{
|
||||||
|
public interface ISkillsPanel : IPanel
|
||||||
|
{
|
||||||
|
int ActivePanelIndex { get; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,46 +1,66 @@
|
|||||||
using System.Collections.Generic;
|
/* OpenDiablo 2 - An open source re-implementation of Diablo 2 in C#
|
||||||
using System.Collections.Immutable;
|
*
|
||||||
using System.Drawing;
|
* This program is free software: you can redistribute it and/or modify
|
||||||
using OpenDiablo2.Common.Enums;
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
namespace OpenDiablo2.Common.Models
|
* (at your option) any later version.
|
||||||
{
|
*
|
||||||
public class ButtonLayout
|
* This program is distributed in the hope that it will be useful,
|
||||||
{
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
public int XSegments { get; internal set; }
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
public string ResourceName { get; internal set; }
|
* GNU General Public License for more details.
|
||||||
public string PaletteName { get; internal set; }
|
*
|
||||||
public bool Toggleable { get; internal set; } = false;
|
* You should have received a copy of the GNU General Public License
|
||||||
public int BaseFrame { get; internal set; } = 0;
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
public int DisabledFrame { get; internal set; } = -1;
|
*/
|
||||||
public string FontPath { get; internal set; } = ResourcePaths.FontExocet10;
|
|
||||||
|
using OpenDiablo2.Common.Enums;
|
||||||
public bool IsDarkenedWhenDisabled => DisabledFrame == -1;
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.Immutable;
|
||||||
public static ImmutableDictionary<eButtonType, ButtonLayout> Values { get; } = new Dictionary<eButtonType, ButtonLayout>
|
using System.Drawing;
|
||||||
{
|
|
||||||
{eButtonType.Wide, new ButtonLayout { XSegments = 2, ResourceName = ResourcePaths.WideButtonBlank, PaletteName = Palettes.Units } },
|
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 } },
|
public class ButtonLayout
|
||||||
{eButtonType.Tall, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.TallButtonBlank, PaletteName = Palettes.Units } },
|
{
|
||||||
{eButtonType.Short, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.ShortButtonBlank, PaletteName = Palettes.Units, FontPath = ResourcePaths.FontExocet10 } },
|
public int XSegments { get; set; } = 1;
|
||||||
{eButtonType.Cancel, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.CancelButton,PaletteName = Palettes.Units } },
|
public int YSegments { get; set; } = 1;
|
||||||
// Minipanel
|
public string ResourceName { get; set; }
|
||||||
{eButtonType.MinipanelCharacter, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 0 } },
|
public string PaletteName { get; set; }
|
||||||
{eButtonType.MinipanelInventory, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 2 } },
|
public bool Toggleable { get; set; } = false;
|
||||||
{eButtonType.MinipanelSkill, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 4 } },
|
public int BaseFrame { get; set; } = 0;
|
||||||
{eButtonType.MinipanelAutomap, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 8 } },
|
public int DisabledFrame { get; set; } = -1;
|
||||||
{eButtonType.MinipanelMessage, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 10 } },
|
public string FontPath { get; set; } = ResourcePaths.FontExocet10;
|
||||||
{eButtonType.MinipanelQuest, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 12 } },
|
public Rectangle ClickableRect { get; set; }
|
||||||
{eButtonType.MinipanelMenu, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 14 } },
|
public bool AllowFrameChange { get; set; } = true;
|
||||||
|
|
||||||
{eButtonType.SecondaryInvHand, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.InventoryWeaponsTab, PaletteName = Palettes.Units } },
|
public bool IsDarkenedWhenDisabled => DisabledFrame == -1;
|
||||||
{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 } },
|
public static ImmutableDictionary<eButtonType, ButtonLayout> Values { get; } = new Dictionary<eButtonType, ButtonLayout>
|
||||||
{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.Wide, new ButtonLayout { XSegments = 2, ResourceName = ResourcePaths.WideButtonBlank, PaletteName = Palettes.Units } },
|
||||||
{eButtonType.Skill, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.AddSkillButton, PaletteName = Palettes.Units, DisabledFrame = 2 } },
|
{eButtonType.Medium, new ButtonLayout{ ResourceName = ResourcePaths.MediumButtonBlank, PaletteName = Palettes.Units } },
|
||||||
}.ToImmutableDictionary();
|
{eButtonType.Narrow, new ButtonLayout { ResourceName = ResourcePaths.NarrowButtonBlank, PaletteName = Palettes.Units } },
|
||||||
}
|
{eButtonType.Tall, new ButtonLayout { ResourceName = ResourcePaths.TallButtonBlank, PaletteName = Palettes.Units } },
|
||||||
|
{eButtonType.Short, new ButtonLayout { ResourceName = ResourcePaths.ShortButtonBlank, PaletteName = Palettes.Units, FontPath = ResourcePaths.FontExocet10 } },
|
||||||
}
|
{eButtonType.Cancel, new ButtonLayout { ResourceName = ResourcePaths.CancelButton, PaletteName = Palettes.Units } },
|
||||||
|
// Minipanel
|
||||||
|
{eButtonType.MinipanelCharacter, new ButtonLayout { ResourceName = ResourcePaths.MinipanelButton, PaletteName = Palettes.Units, BaseFrame = 0 } },
|
||||||
|
{eButtonType.MinipanelInventory, new ButtonLayout { ResourceName = ResourcePaths.MinipanelButton, PaletteName = Palettes.Units, BaseFrame = 2 } },
|
||||||
|
{eButtonType.MinipanelSkill, new ButtonLayout { ResourceName = ResourcePaths.MinipanelButton, PaletteName = Palettes.Units, BaseFrame = 4 } },
|
||||||
|
{eButtonType.MinipanelAutomap, new ButtonLayout { ResourceName = ResourcePaths.MinipanelButton, PaletteName = Palettes.Units, BaseFrame = 8 } },
|
||||||
|
{eButtonType.MinipanelMessage, new ButtonLayout { ResourceName = ResourcePaths.MinipanelButton, PaletteName = Palettes.Units, BaseFrame = 10 } },
|
||||||
|
{eButtonType.MinipanelQuest, new ButtonLayout { ResourceName = ResourcePaths.MinipanelButton, PaletteName = Palettes.Units, BaseFrame = 12 } },
|
||||||
|
{eButtonType.MinipanelMenu, new ButtonLayout { ResourceName = ResourcePaths.MinipanelButton, PaletteName = Palettes.Units, BaseFrame = 14 } },
|
||||||
|
|
||||||
|
{eButtonType.SecondaryInvHand, new ButtonLayout { ResourceName = ResourcePaths.InventoryWeaponsTab, PaletteName = Palettes.Units,
|
||||||
|
ClickableRect = new Rectangle(0, 0, 0, 20), AllowFrameChange = false } },
|
||||||
|
{eButtonType.Run, new ButtonLayout { ResourceName = ResourcePaths.RunButton, PaletteName = Palettes.Units, Toggleable = true } },
|
||||||
|
{eButtonType.Menu, new ButtonLayout { ResourceName = ResourcePaths.MenuButton, PaletteName = Palettes.Units, Toggleable = true } },
|
||||||
|
{eButtonType.GoldCoin, new ButtonLayout { ResourceName = ResourcePaths.GoldCoinButton, PaletteName = Palettes.Units } },
|
||||||
|
{eButtonType.Close, new ButtonLayout { ResourceName = ResourcePaths.SquareButton, PaletteName = Palettes.Units, BaseFrame = 10 } },
|
||||||
|
{eButtonType.Skill, new ButtonLayout { ResourceName = ResourcePaths.AddSkillButton, PaletteName = Palettes.Units, DisabledFrame = 2 } },
|
||||||
|
}.ToImmutableDictionary();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -103,6 +103,7 @@
|
|||||||
<Compile Include="Interfaces\Mobs\IEnemyTypeCombatConfig.cs" />
|
<Compile Include="Interfaces\Mobs\IEnemyTypeCombatConfig.cs" />
|
||||||
<Compile Include="Interfaces\Mobs\IEnemyTypeConfig.cs" />
|
<Compile Include="Interfaces\Mobs\IEnemyTypeConfig.cs" />
|
||||||
<Compile Include="Interfaces\Mobs\IEnemyTypeDifficultyConfig.cs" />
|
<Compile Include="Interfaces\Mobs\IEnemyTypeDifficultyConfig.cs" />
|
||||||
|
<Compile Include="Interfaces\UI\ISkillsPanel.cs" />
|
||||||
<Compile Include="Models\Mobs\EnemyTypeAppearanceConfig.cs" />
|
<Compile Include="Models\Mobs\EnemyTypeAppearanceConfig.cs" />
|
||||||
<Compile Include="Models\Mobs\EnemyTypeCombatConfig.cs" />
|
<Compile Include="Models\Mobs\EnemyTypeCombatConfig.cs" />
|
||||||
<Compile Include="Models\Mobs\EnemyTypeConfig.cs" />
|
<Compile Include="Models\Mobs\EnemyTypeConfig.cs" />
|
||||||
|
@ -1,314 +1,345 @@
|
|||||||
/* OpenDiablo 2 - An open source re-implementation of Diablo 2 in C#
|
/* OpenDiablo 2 - An open source re-implementation of Diablo 2 in C#
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* 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;
|
using OpenDiablo2.Common.Enums;
|
||||||
|
using System;
|
||||||
namespace OpenDiablo2.Common
|
|
||||||
{
|
namespace OpenDiablo2.Common
|
||||||
public static class ResourcePaths
|
{
|
||||||
{
|
public static class ResourcePaths
|
||||||
// --- Loading Screen ---
|
{
|
||||||
public const string LoadingScreen = @"data\global\ui\Loading\loadingscreen.dc6";
|
// --- Loading Screen ---
|
||||||
|
public const string LoadingScreen = @"data\global\ui\Loading\loadingscreen.dc6";
|
||||||
// --- Main Menu ---
|
|
||||||
public const string GameSelectScreen = @"data\global\ui\FrontEnd\gameselectscreenEXP.dc6";
|
// --- Main Menu ---
|
||||||
public const string Diablo2LogoFireLeft = @"data\global\ui\FrontEnd\D2logoFireLeft.DC6";
|
public const string GameSelectScreen = @"data\global\ui\FrontEnd\gameselectscreenEXP.dc6";
|
||||||
public const string Diablo2LogoFireRight = @"data\global\ui\FrontEnd\D2logoFireRight.DC6";
|
public const string Diablo2LogoFireLeft = @"data\global\ui\FrontEnd\D2logoFireLeft.DC6";
|
||||||
public const string Diablo2LogoBlackLeft = @"data\global\ui\FrontEnd\D2logoBlackLeft.DC6";
|
public const string Diablo2LogoFireRight = @"data\global\ui\FrontEnd\D2logoFireRight.DC6";
|
||||||
public const string Diablo2LogoBlackRight = @"data\global\ui\FrontEnd\D2logoBlackRight.DC6";
|
public const string Diablo2LogoBlackLeft = @"data\global\ui\FrontEnd\D2logoBlackLeft.DC6";
|
||||||
|
public const string Diablo2LogoBlackRight = @"data\global\ui\FrontEnd\D2logoBlackRight.DC6";
|
||||||
// --- Credits ---
|
|
||||||
public const string CreditsBackground = @"data\global\ui\CharSelect\creditsbckgexpand.dc6";
|
// --- Credits ---
|
||||||
public const string CreditsText = @"data\local\ui\eng\ExpansionCredits.txt";
|
public const string CreditsBackground = @"data\global\ui\CharSelect\creditsbckgexpand.dc6";
|
||||||
// --- Character Select Screen ---
|
public const string CreditsText = @"data\local\ui\eng\ExpansionCredits.txt";
|
||||||
public const string CharacterSelectBackground = @"data\global\ui\FrontEnd\charactercreationscreenEXP.dc6";
|
// --- Character Select Screen ---
|
||||||
public const string CharacterSelectCampfire = @"data\global\ui\FrontEnd\fire.DC6";
|
public const string CharacterSelectBackground = @"data\global\ui\FrontEnd\charactercreationscreenEXP.dc6";
|
||||||
|
public const string CharacterSelectCampfire = @"data\global\ui\FrontEnd\fire.DC6";
|
||||||
public const string CharacterSelectBarbarianUnselected = @"data\global\ui\FrontEnd\barbarian\banu1.DC6";
|
|
||||||
public const string CharacterSelectBarbarianUnselectedH = @"data\global\ui\FrontEnd\barbarian\banu2.DC6";
|
public const string CharacterSelectBarbarianUnselected = @"data\global\ui\FrontEnd\barbarian\banu1.DC6";
|
||||||
public const string CharacterSelectBarbarianSelected = @"data\global\ui\FrontEnd\barbarian\banu3.DC6";
|
public const string CharacterSelectBarbarianUnselectedH = @"data\global\ui\FrontEnd\barbarian\banu2.DC6";
|
||||||
public const string CharacterSelectBarbarianForwardWalk = @"data\global\ui\FrontEnd\barbarian\bafw.DC6";
|
public const string CharacterSelectBarbarianSelected = @"data\global\ui\FrontEnd\barbarian\banu3.DC6";
|
||||||
public const string CharacterSelectBarbarianForwardWalkOverlay = @"data\global\ui\FrontEnd\barbarian\BAFWs.DC6";
|
public const string CharacterSelectBarbarianForwardWalk = @"data\global\ui\FrontEnd\barbarian\bafw.DC6";
|
||||||
public const string CharacterSelectBarbarianBackWalk = @"data\global\ui\FrontEnd\barbarian\babw.DC6";
|
public const string CharacterSelectBarbarianForwardWalkOverlay = @"data\global\ui\FrontEnd\barbarian\BAFWs.DC6";
|
||||||
|
public const string CharacterSelectBarbarianBackWalk = @"data\global\ui\FrontEnd\barbarian\babw.DC6";
|
||||||
public const string CharacterSelecSorceressUnselected = @"data\global\ui\FrontEnd\sorceress\SONU1.DC6";
|
|
||||||
public const string CharacterSelecSorceressUnselectedH = @"data\global\ui\FrontEnd\sorceress\SONU2.DC6";
|
public const string CharacterSelecSorceressUnselected = @"data\global\ui\FrontEnd\sorceress\SONU1.DC6";
|
||||||
public const string CharacterSelecSorceressSelected = @"data\global\ui\FrontEnd\sorceress\SONU3.DC6";
|
public const string CharacterSelecSorceressUnselectedH = @"data\global\ui\FrontEnd\sorceress\SONU2.DC6";
|
||||||
public const string CharacterSelecSorceressSelectedOverlay = @"data\global\ui\FrontEnd\sorceress\SONU3s.DC6";
|
public const string CharacterSelecSorceressSelected = @"data\global\ui\FrontEnd\sorceress\SONU3.DC6";
|
||||||
public const string CharacterSelecSorceressForwardWalk = @"data\global\ui\FrontEnd\sorceress\SOFW.DC6";
|
public const string CharacterSelecSorceressSelectedOverlay = @"data\global\ui\FrontEnd\sorceress\SONU3s.DC6";
|
||||||
public const string CharacterSelecSorceressForwardWalkOverlay = @"data\global\ui\FrontEnd\sorceress\SOFWs.DC6";
|
public const string CharacterSelecSorceressForwardWalk = @"data\global\ui\FrontEnd\sorceress\SOFW.DC6";
|
||||||
public const string CharacterSelecSorceressBackWalk = @"data\global\ui\FrontEnd\sorceress\SOBW.DC6";
|
public const string CharacterSelecSorceressForwardWalkOverlay = @"data\global\ui\FrontEnd\sorceress\SOFWs.DC6";
|
||||||
public const string CharacterSelecSorceressBackWalkOverlay = @"data\global\ui\FrontEnd\sorceress\SOBWs.DC6";
|
public const string CharacterSelecSorceressBackWalk = @"data\global\ui\FrontEnd\sorceress\SOBW.DC6";
|
||||||
|
public const string CharacterSelecSorceressBackWalkOverlay = @"data\global\ui\FrontEnd\sorceress\SOBWs.DC6";
|
||||||
public const string CharacterSelectNecromancerUnselected = @"data\global\ui\FrontEnd\necromancer\NENU1.DC6";
|
|
||||||
public const string CharacterSelectNecromancerUnselectedH = @"data\global\ui\FrontEnd\necromancer\NENU2.DC6";
|
public const string CharacterSelectNecromancerUnselected = @"data\global\ui\FrontEnd\necromancer\NENU1.DC6";
|
||||||
public const string CharacterSelecNecromancerSelected = @"data\global\ui\FrontEnd\necromancer\NENU3.DC6";
|
public const string CharacterSelectNecromancerUnselectedH = @"data\global\ui\FrontEnd\necromancer\NENU2.DC6";
|
||||||
public const string CharacterSelecNecromancerSelectedOverlay = @"data\global\ui\FrontEnd\necromancer\NENU3s.DC6";
|
public const string CharacterSelecNecromancerSelected = @"data\global\ui\FrontEnd\necromancer\NENU3.DC6";
|
||||||
public const string CharacterSelecNecromancerForwardWalk = @"data\global\ui\FrontEnd\necromancer\NEFW.DC6";
|
public const string CharacterSelecNecromancerSelectedOverlay = @"data\global\ui\FrontEnd\necromancer\NENU3s.DC6";
|
||||||
public const string CharacterSelecNecromancerForwardWalkOverlay = @"data\global\ui\FrontEnd\necromancer\NEFWs.DC6";
|
public const string CharacterSelecNecromancerForwardWalk = @"data\global\ui\FrontEnd\necromancer\NEFW.DC6";
|
||||||
public const string CharacterSelecNecromancerBackWalk = @"data\global\ui\FrontEnd\necromancer\NEBW.DC6";
|
public const string CharacterSelecNecromancerForwardWalkOverlay = @"data\global\ui\FrontEnd\necromancer\NEFWs.DC6";
|
||||||
public const string CharacterSelecNecromancerBackWalkOverlay = @"data\global\ui\FrontEnd\necromancer\NEBWs.DC6";
|
public const string CharacterSelecNecromancerBackWalk = @"data\global\ui\FrontEnd\necromancer\NEBW.DC6";
|
||||||
|
public const string CharacterSelecNecromancerBackWalkOverlay = @"data\global\ui\FrontEnd\necromancer\NEBWs.DC6";
|
||||||
public const string CharacterSelectPaladinUnselected = @"data\global\ui\FrontEnd\paladin\PANU1.DC6";
|
|
||||||
public const string CharacterSelectPaladinUnselectedH = @"data\global\ui\FrontEnd\paladin\PANU2.DC6";
|
public const string CharacterSelectPaladinUnselected = @"data\global\ui\FrontEnd\paladin\PANU1.DC6";
|
||||||
public const string CharacterSelecPaladinSelected = @"data\global\ui\FrontEnd\paladin\PANU3.DC6";
|
public const string CharacterSelectPaladinUnselectedH = @"data\global\ui\FrontEnd\paladin\PANU2.DC6";
|
||||||
public const string CharacterSelecPaladinForwardWalk = @"data\global\ui\FrontEnd\paladin\PAFW.DC6";
|
public const string CharacterSelecPaladinSelected = @"data\global\ui\FrontEnd\paladin\PANU3.DC6";
|
||||||
public const string CharacterSelecPaladinForwardWalkOverlay = @"data\global\ui\FrontEnd\paladin\PAFWs.DC6";
|
public const string CharacterSelecPaladinForwardWalk = @"data\global\ui\FrontEnd\paladin\PAFW.DC6";
|
||||||
public const string CharacterSelecPaladinBackWalk = @"data\global\ui\FrontEnd\paladin\PABW.DC6";
|
public const string CharacterSelecPaladinForwardWalkOverlay = @"data\global\ui\FrontEnd\paladin\PAFWs.DC6";
|
||||||
|
public const string CharacterSelecPaladinBackWalk = @"data\global\ui\FrontEnd\paladin\PABW.DC6";
|
||||||
|
|
||||||
public const string CharacterSelectAmazonUnselected = @"data\global\ui\FrontEnd\amazon\AMNU1.DC6";
|
|
||||||
public const string CharacterSelectAmazonUnselectedH = @"data\global\ui\FrontEnd\amazon\AMNU2.DC6";
|
public const string CharacterSelectAmazonUnselected = @"data\global\ui\FrontEnd\amazon\AMNU1.DC6";
|
||||||
public const string CharacterSelecAmazonSelected = @"data\global\ui\FrontEnd\amazon\AMNU3.DC6";
|
public const string CharacterSelectAmazonUnselectedH = @"data\global\ui\FrontEnd\amazon\AMNU2.DC6";
|
||||||
public const string CharacterSelecAmazonForwardWalk = @"data\global\ui\FrontEnd\amazon\AMFW.DC6";
|
public const string CharacterSelecAmazonSelected = @"data\global\ui\FrontEnd\amazon\AMNU3.DC6";
|
||||||
public const string CharacterSelecAmazonForwardWalkOverlay = @"data\global\ui\FrontEnd\amazon\AMFWs.DC6";
|
public const string CharacterSelecAmazonForwardWalk = @"data\global\ui\FrontEnd\amazon\AMFW.DC6";
|
||||||
public const string CharacterSelecAmazonBackWalk = @"data\global\ui\FrontEnd\amazon\AMBW.DC6";
|
public const string CharacterSelecAmazonForwardWalkOverlay = @"data\global\ui\FrontEnd\amazon\AMFWs.DC6";
|
||||||
|
public const string CharacterSelecAmazonBackWalk = @"data\global\ui\FrontEnd\amazon\AMBW.DC6";
|
||||||
public const string CharacterSelectAssassinUnselected = @"data\global\ui\FrontEnd\assassin\ASNU1.DC6";
|
|
||||||
public const string CharacterSelectAssassinUnselectedH = @"data\global\ui\FrontEnd\assassin\ASNU2.DC6";
|
public const string CharacterSelectAssassinUnselected = @"data\global\ui\FrontEnd\assassin\ASNU1.DC6";
|
||||||
public const string CharacterSelectAssassinSelected = @"data\global\ui\FrontEnd\assassin\ASNU3.DC6";
|
public const string CharacterSelectAssassinUnselectedH = @"data\global\ui\FrontEnd\assassin\ASNU2.DC6";
|
||||||
public const string CharacterSelectAssassinForwardWalk = @"data\global\ui\FrontEnd\assassin\ASFW.DC6";
|
public const string CharacterSelectAssassinSelected = @"data\global\ui\FrontEnd\assassin\ASNU3.DC6";
|
||||||
public const string CharacterSelectAssassinBackWalk = @"data\global\ui\FrontEnd\assassin\ASBW.DC6";
|
public const string CharacterSelectAssassinForwardWalk = @"data\global\ui\FrontEnd\assassin\ASFW.DC6";
|
||||||
|
public const string CharacterSelectAssassinBackWalk = @"data\global\ui\FrontEnd\assassin\ASBW.DC6";
|
||||||
public const string CharacterSelectDruidUnselected = @"data\global\ui\FrontEnd\druid\DZNU1.dc6";
|
|
||||||
public const string CharacterSelectDruidUnselectedH = @"data\global\ui\FrontEnd\druid\DZNU2.dc6";
|
public const string CharacterSelectDruidUnselected = @"data\global\ui\FrontEnd\druid\DZNU1.dc6";
|
||||||
public const string CharacterSelectDruidSelected = @"data\global\ui\FrontEnd\druid\DZNU3.DC6";
|
public const string CharacterSelectDruidUnselectedH = @"data\global\ui\FrontEnd\druid\DZNU2.dc6";
|
||||||
public const string CharacterSelectDruidForwardWalk = @"data\global\ui\FrontEnd\druid\DZFW.DC6";
|
public const string CharacterSelectDruidSelected = @"data\global\ui\FrontEnd\druid\DZNU3.DC6";
|
||||||
public const string CharacterSelectDruidBackWalk = @"data\global\ui\FrontEnd\druid\DZBW.DC6";
|
public const string CharacterSelectDruidForwardWalk = @"data\global\ui\FrontEnd\druid\DZFW.DC6";
|
||||||
|
public const string CharacterSelectDruidBackWalk = @"data\global\ui\FrontEnd\druid\DZBW.DC6";
|
||||||
// -- Character Selection
|
|
||||||
public const string CharacterSelectionBackground = @"data\global\ui\CharSelect\characterselectscreenEXP.dc6";
|
// -- Character Selection
|
||||||
|
public const string CharacterSelectionBackground = @"data\global\ui\CharSelect\characterselectscreenEXP.dc6";
|
||||||
// --- Game ---
|
|
||||||
public const string GamePanels = @"data\global\ui\PANEL\800ctrlpnl7.dc6";
|
// --- Game ---
|
||||||
public const string GameGlobeOverlap = @"data\global\ui\PANEL\overlap.DC6";
|
public const string GamePanels = @"data\global\ui\PANEL\800ctrlpnl7.dc6";
|
||||||
public const string HealthMana = @"data\global\ui\PANEL\hlthmana.DC6";
|
public const string GameGlobeOverlap = @"data\global\ui\PANEL\overlap.DC6";
|
||||||
public const string GameSmallMenuButton = @"data\global\ui\PANEL\menubutton.DC6"; // TODO: Used for inventory popout
|
public const string HealthMana = @"data\global\ui\PANEL\hlthmana.DC6";
|
||||||
public const string SkillIcon = @"data\global\ui\PANEL\Skillicon.DC6"; // TODO: Used for skill icon button
|
public const string GameSmallMenuButton = @"data\global\ui\PANEL\menubutton.DC6"; // TODO: Used for inventory popout
|
||||||
public const string AddSkillButton = @"data\global\ui\PANEL\level.DC6";
|
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 ---
|
|
||||||
public const string CursorDefault = @"data\global\ui\CURSOR\ohand.DC6";
|
// --- Mouse Pointers ---
|
||||||
|
public const string CursorDefault = @"data\global\ui\CURSOR\ohand.DC6";
|
||||||
// --- Fonts ---
|
|
||||||
public const string Font6 = @"data\local\font\latin\font6";
|
// --- Fonts ---
|
||||||
public const string Font8 = @"data\local\font\latin\font8";
|
public const string Font6 = @"data\local\font\latin\font6";
|
||||||
public const string Font16 = @"data\local\font\latin\font16";
|
public const string Font8 = @"data\local\font\latin\font8";
|
||||||
public const string Font24 = @"data\local\font\latin\font24";
|
public const string Font16 = @"data\local\font\latin\font16";
|
||||||
public const string Font30 = @"data\local\font\latin\font30";
|
public const string Font24 = @"data\local\font\latin\font24";
|
||||||
public const string FontFormal12 = @"data\local\font\latin\fontformal12";
|
public const string Font30 = @"data\local\font\latin\font30";
|
||||||
public const string FontFormal11 = @"data\local\font\latin\fontformal11";
|
public const string FontFormal12 = @"data\local\font\latin\fontformal12";
|
||||||
public const string FontFormal10 = @"data\local\font\latin\fontformal10";
|
public const string FontFormal11 = @"data\local\font\latin\fontformal11";
|
||||||
public const string FontExocet10 = @"data\local\font\latin\fontexocet10";
|
public const string FontFormal10 = @"data\local\font\latin\fontformal10";
|
||||||
public const string FontExocet8 = @"data\local\font\latin\fontexocet8";
|
public const string FontExocet10 = @"data\local\font\latin\fontexocet10";
|
||||||
|
public const string FontExocet8 = @"data\local\font\latin\fontexocet8";
|
||||||
// --- UI ---
|
|
||||||
public const string WideButtonBlank = @"data\global\ui\FrontEnd\WideButtonBlank.dc6";
|
// --- UI ---
|
||||||
public const string MediumButtonBlank = @"data\global\ui\FrontEnd\MediumButtonBlank.dc6";
|
public const string WideButtonBlank = @"data\global\ui\FrontEnd\WideButtonBlank.dc6";
|
||||||
public const string CancelButton = @"data\global\ui\FrontEnd\CancelButtonBlank.dc6";
|
public const string MediumButtonBlank = @"data\global\ui\FrontEnd\MediumButtonBlank.dc6";
|
||||||
public const string NarrowButtonBlank = @"data\global\ui\FrontEnd\NarrowButtonBlank.dc6";
|
public const string CancelButton = @"data\global\ui\FrontEnd\CancelButtonBlank.dc6";
|
||||||
public const string ShortButtonBlank = @"data\global\ui\CharSelect\ShortButtonBlank.dc6";
|
public const string NarrowButtonBlank = @"data\global\ui\FrontEnd\NarrowButtonBlank.dc6";
|
||||||
public const string TextBox2 = @"data\global\ui\FrontEnd\textbox2.dc6";
|
public const string ShortButtonBlank = @"data\global\ui\CharSelect\ShortButtonBlank.dc6";
|
||||||
public const string TallButtonBlank = @"data\global\ui\CharSelect\TallButtonBlank.dc6";
|
public const string TextBox2 = @"data\global\ui\FrontEnd\textbox2.dc6";
|
||||||
|
public const string TallButtonBlank = @"data\global\ui\CharSelect\TallButtonBlank.dc6";
|
||||||
// --- GAME UI ---
|
|
||||||
public const string MinipanelSmall = @"data\global\ui\PANEL\minipanel_s.dc6";
|
// --- GAME UI ---
|
||||||
public const string MinipanelButton = @"data\global\ui\PANEL\minipanelbtn.DC6";
|
public const string MinipanelSmall = @"data\global\ui\PANEL\minipanel_s.dc6";
|
||||||
|
public const string MinipanelButton = @"data\global\ui\PANEL\minipanelbtn.DC6";
|
||||||
public const string Frame = @"data\global\ui\PANEL\800borderframe.dc6";
|
|
||||||
public const string InventoryCharacterPanel = @"data\global\ui\PANEL\invchar6.DC6";
|
public const string Frame = @"data\global\ui\PANEL\800borderframe.dc6";
|
||||||
public const string InventoryWeaponsTab = @"data\global\ui\PANEL\invchar6Tab.DC6";
|
public const string InventoryCharacterPanel = @"data\global\ui\PANEL\invchar6.DC6";
|
||||||
|
public const string InventoryWeaponsTab = @"data\global\ui\PANEL\invchar6Tab.DC6";
|
||||||
public const string RunButton = @"data\global\ui\PANEL\runbutton.dc6";
|
public const string SkillsPanelAmazon = @"data\global\ui\SPELLS\skltree_a_back.DC6";
|
||||||
public const string MenuButton = @"data\global\ui\PANEL\menubutton.DC6";
|
public const string SkillsPanelBarbarian = @"data\global\ui\SPELLS\skltree_b_back.DC6";
|
||||||
public const string GoldCoinButton = @"data\global\ui\panel\goldcoinbtn.dc6";
|
public const string SkillsPanelDruid = @"data\global\ui\SPELLS\skltree_d_back.DC6";
|
||||||
public const string SquareButton = @"data\global\ui\panel\buysellbtn.dc6";
|
public const string SkillsPanelAssassin = @"data\global\ui\SPELLS\skltree_i_back.DC6";
|
||||||
|
public const string SkillsPanelNecromancer = @"data\global\ui\SPELLS\skltree_n_back.DC6";
|
||||||
public const string ArmorPlaceholder = @"data\global\ui\PANEL\inv_armor.DC6";
|
public const string SkillsPanelPaladin = @"data\global\ui\SPELLS\skltree_p_back.DC6";
|
||||||
public const string BeltPlaceholder = @"data\global\ui\PANEL\inv_belt.DC6";
|
public const string SkillsPanelSorcerer = @"data\global\ui\SPELLS\skltree_s_back.DC6";
|
||||||
public const string BootsPlaceholder = @"data\global\ui\PANEL\inv_boots.DC6";
|
|
||||||
public const string HelmGlovePlaceholder = @"data\global\ui\PANEL\inv_helm_glove.DC6";
|
public const string RunButton = @"data\global\ui\PANEL\runbutton.dc6";
|
||||||
public const string RingAmuletPlaceholder = @"data\global\ui\PANEL\inv_ring_amulet.DC6";
|
public const string MenuButton = @"data\global\ui\PANEL\menubutton.DC6";
|
||||||
public const string WeaponsPlaceholder = @"data\global\ui\PANEL\inv_weapons.DC6";
|
public const string GoldCoinButton = @"data\global\ui\panel\goldcoinbtn.dc6";
|
||||||
|
public const string SquareButton = @"data\global\ui\panel\buysellbtn.dc6";
|
||||||
// --- Data ---
|
|
||||||
// TODO: Doesn't sound right :)
|
public const string ArmorPlaceholder = @"data\global\ui\PANEL\inv_armor.DC6";
|
||||||
public const string EnglishTable = @"data\local\lng\eng\English.txt";
|
public const string BeltPlaceholder = @"data\global\ui\PANEL\inv_belt.DC6";
|
||||||
public const string ExpansionStringTable = @"data\local\lng\eng\expansionstring.tbl";
|
public const string BootsPlaceholder = @"data\global\ui\PANEL\inv_boots.DC6";
|
||||||
public const string LevelPreset = @"data\global\excel\LvlPrest.txt";
|
public const string HelmGlovePlaceholder = @"data\global\ui\PANEL\inv_helm_glove.DC6";
|
||||||
public const string LevelType = @"data\global\excel\LvlTypes.txt";
|
public const string RingAmuletPlaceholder = @"data\global\ui\PANEL\inv_ring_amulet.DC6";
|
||||||
public const string LevelDetails = @"data\global\excel\Levels.txt";
|
public const string WeaponsPlaceholder = @"data\global\ui\PANEL\inv_weapons.DC6";
|
||||||
|
|
||||||
// --- Animations ---
|
// --- Data ---
|
||||||
public const string ObjectData = @"data\global\objects";
|
// TODO: Doesn't sound right :)
|
||||||
public const string AnimationData = @"data\global\animdata.d2";
|
public const string EnglishTable = @"data\local\lng\eng\English.txt";
|
||||||
public const string PlayerAnimationBase = @"data\global\CHARS";
|
public const string ExpansionStringTable = @"data\local\lng\eng\expansionstring.tbl";
|
||||||
|
public const string LevelPreset = @"data\global\excel\LvlPrest.txt";
|
||||||
// --- Inventory Data ---
|
public const string LevelType = @"data\global\excel\LvlTypes.txt";
|
||||||
public const string Weapons = @"data\global\excel\weapons.txt";
|
public const string LevelDetails = @"data\global\excel\Levels.txt";
|
||||||
public const string Armor = @"data\global\excel\armor.txt";
|
|
||||||
public const string Misc = @"data\global\excel\misc.txt";
|
// --- Animations ---
|
||||||
|
public const string ObjectData = @"data\global\objects";
|
||||||
// --- Character Data ---
|
public const string AnimationData = @"data\global\animdata.d2";
|
||||||
public const string Experience = @"data\global\excel\experience.txt";
|
public const string PlayerAnimationBase = @"data\global\CHARS";
|
||||||
public const string CharStats = @"data\global\excel\charstats.txt";
|
|
||||||
|
// --- Inventory Data ---
|
||||||
// --- Music ---
|
public const string Weapons = @"data\global\excel\weapons.txt";
|
||||||
public const string BGMTitle = @"data\global\music\introedit.wav";
|
public const string Armor = @"data\global\excel\armor.txt";
|
||||||
public const string BGMOptions = @"data\global\music\Common\options.wav";
|
public const string Misc = @"data\global\excel\misc.txt";
|
||||||
public const string BGMAct1AndarielAction = @"data\global\music\Act1\andarielaction.wav";
|
|
||||||
public const string BGMAct1BloodRavenResolution = @"data\global\music\Act1\bloodravenresolution.wav";
|
// --- Character Data ---
|
||||||
public const string BGMAct1Caves = @"data\global\music\Act1\caves.wav";
|
public const string Experience = @"data\global\excel\experience.txt";
|
||||||
public const string BGMAct1Crypt = @"data\global\music\Act1\crypt.wav";
|
public const string CharStats = @"data\global\excel\charstats.txt";
|
||||||
public const string BGMAct1DenOfEvilAction = @"data\global\music\Act1\denofevilaction.wav";
|
|
||||||
public const string BGMAct1Monastery = @"data\global\music\Act1\monastery.wav";
|
// --- Music ---
|
||||||
public const string BGMAct1Town1 = @"data\global\music\Act1\town1.wav";
|
public const string BGMTitle = @"data\global\music\introedit.wav";
|
||||||
public const string BGMAct1Tristram = @"data\global\music\Act1\tristram.wav";
|
public const string BGMOptions = @"data\global\music\Common\options.wav";
|
||||||
public const string BGMAct1Wild = @"data\global\music\Act1\wild.wav";
|
public const string BGMAct1AndarielAction = @"data\global\music\Act1\andarielaction.wav";
|
||||||
public const string BGMAct2Desert = @"data\global\music\Act2\desert.wav";
|
public const string BGMAct1BloodRavenResolution = @"data\global\music\Act1\bloodravenresolution.wav";
|
||||||
public const string BGMAct2Harem = @"data\global\music\Act2\harem.wav";
|
public const string BGMAct1Caves = @"data\global\music\Act1\caves.wav";
|
||||||
public const string BGMAct2HoradricAction = @"data\global\music\Act2\horadricaction.wav";
|
public const string BGMAct1Crypt = @"data\global\music\Act1\crypt.wav";
|
||||||
public const string BGMAct2Lair = @"data\global\music\Act2\lair.wav";
|
public const string BGMAct1DenOfEvilAction = @"data\global\music\Act1\denofevilaction.wav";
|
||||||
public const string BGMAct2RadamentResolution = @"data\global\music\Act2\radamentresolution.wav";
|
public const string BGMAct1Monastery = @"data\global\music\Act1\monastery.wav";
|
||||||
public const string BGMAct2Sanctuary = @"data\global\music\Act2\sanctuary.wav";
|
public const string BGMAct1Town1 = @"data\global\music\Act1\town1.wav";
|
||||||
public const string BGMAct2Sewer = @"data\global\music\Act2\sewer.wav";
|
public const string BGMAct1Tristram = @"data\global\music\Act1\tristram.wav";
|
||||||
public const string BGMAct2TaintedSunAction = @"data\global\music\Act2\taintedsunaction.wav";
|
public const string BGMAct1Wild = @"data\global\music\Act1\wild.wav";
|
||||||
public const string BGMAct2Tombs = @"data\global\music\Act2\tombs.wav";
|
public const string BGMAct2Desert = @"data\global\music\Act2\desert.wav";
|
||||||
public const string BGMAct2Town2 = @"data\global\music\Act2\town2.wav";
|
public const string BGMAct2Harem = @"data\global\music\Act2\harem.wav";
|
||||||
public const string BGMAct2Valley = @"data\global\music\Act2\valley.wav";
|
public const string BGMAct2HoradricAction = @"data\global\music\Act2\horadricaction.wav";
|
||||||
public const string BGMAct3Jungle = @"data\global\music\Act3\jungle.wav";
|
public const string BGMAct2Lair = @"data\global\music\Act2\lair.wav";
|
||||||
public const string BGMAct3Kurast = @"data\global\music\Act3\kurast.wav";
|
public const string BGMAct2RadamentResolution = @"data\global\music\Act2\radamentresolution.wav";
|
||||||
public const string BGMAct3KurastSewer = @"data\global\music\Act3\kurastsewer.wav";
|
public const string BGMAct2Sanctuary = @"data\global\music\Act2\sanctuary.wav";
|
||||||
public const string BGMAct3MefDeathAction = @"data\global\music\Act3\mefdeathaction.wav";
|
public const string BGMAct2Sewer = @"data\global\music\Act2\sewer.wav";
|
||||||
public const string BGMAct3OrbAction = @"data\global\music\Act3\orbaction.wav";
|
public const string BGMAct2TaintedSunAction = @"data\global\music\Act2\taintedsunaction.wav";
|
||||||
public const string BGMAct3Spider = @"data\global\music\Act3\spider.wav";
|
public const string BGMAct2Tombs = @"data\global\music\Act2\tombs.wav";
|
||||||
public const string BGMAct3Town3 = @"data\global\music\Act3\town3.wav";
|
public const string BGMAct2Town2 = @"data\global\music\Act2\town2.wav";
|
||||||
public const string BGMAct4Diablo = @"data\global\music\Act4\diablo.wav";
|
public const string BGMAct2Valley = @"data\global\music\Act2\valley.wav";
|
||||||
public const string BGMAct4DiabloAction = @"data\global\music\Act4\diabloaction.wav";
|
public const string BGMAct3Jungle = @"data\global\music\Act3\jungle.wav";
|
||||||
public const string BGMAct4ForgeAction = @"data\global\music\Act4\forgeaction.wav";
|
public const string BGMAct3Kurast = @"data\global\music\Act3\kurast.wav";
|
||||||
public const string BGMAct4IzualAction = @"data\global\music\Act4\izualaction.wav";
|
public const string BGMAct3KurastSewer = @"data\global\music\Act3\kurastsewer.wav";
|
||||||
public const string BGMAct4Mesa = @"data\global\music\Act4\mesa.wav";
|
public const string BGMAct3MefDeathAction = @"data\global\music\Act3\mefdeathaction.wav";
|
||||||
public const string BGMAct4Town4 = @"data\global\music\Act4\town4.wav";
|
public const string BGMAct3OrbAction = @"data\global\music\Act3\orbaction.wav";
|
||||||
public const string BGMAct5Baal = @"data\global\music\Act5\baal.wav";
|
public const string BGMAct3Spider = @"data\global\music\Act3\spider.wav";
|
||||||
public const string BGMAct5XTown = @"data\global\music\Act5\xtown.wav";
|
public const string BGMAct3Town3 = @"data\global\music\Act3\town3.wav";
|
||||||
|
public const string BGMAct4Diablo = @"data\global\music\Act4\diablo.wav";
|
||||||
|
public const string BGMAct4DiabloAction = @"data\global\music\Act4\diabloaction.wav";
|
||||||
// --- Sound Effects ---
|
public const string BGMAct4ForgeAction = @"data\global\music\Act4\forgeaction.wav";
|
||||||
public const string SFXButtonClick = @"data\global\sfx\Cursor\button.wav";
|
public const string BGMAct4IzualAction = @"data\global\music\Act4\izualaction.wav";
|
||||||
public const string SFXAmazonDeselect = @"data\global\sfx\Cursor\intro\amazon deselect.wav";
|
public const string BGMAct4Mesa = @"data\global\music\Act4\mesa.wav";
|
||||||
public const string SFXAmazonSelect = @"data\global\sfx\Cursor\intro\amazon select.wav";
|
public const string BGMAct4Town4 = @"data\global\music\Act4\town4.wav";
|
||||||
public const string SFXAssassinDeselect = @"data\global\sfx\Cursor\intro\assassin deselect.wav";
|
public const string BGMAct5Baal = @"data\global\music\Act5\baal.wav";
|
||||||
public const string SFXAssassinSelect = @"data\global\sfx\Cursor\intro\assassin select.wav";
|
public const string BGMAct5XTown = @"data\global\music\Act5\xtown.wav";
|
||||||
public const string SFXBarbarianDeselect = @"data\global\sfx\Cursor\intro\barbarian deselect.wav";
|
|
||||||
public const string SFXBarbarianSelect = @"data\global\sfx\Cursor\intro\barbarian select.wav";
|
|
||||||
public const string SFXDruidDeselect = @"data\global\sfx\Cursor\intro\druid deselect.wav";
|
// --- Sound Effects ---
|
||||||
public const string SFXDruidSelect = @"data\global\sfx\Cursor\intro\druid select.wav";
|
public const string SFXButtonClick = @"data\global\sfx\Cursor\button.wav";
|
||||||
public const string SFXNecromancerDeselect = @"data\global\sfx\Cursor\intro\necromancer deselect.wav";
|
public const string SFXAmazonDeselect = @"data\global\sfx\Cursor\intro\amazon deselect.wav";
|
||||||
public const string SFXNecromancerSelect = @"data\global\sfx\Cursor\intro\necromancer select.wav";
|
public const string SFXAmazonSelect = @"data\global\sfx\Cursor\intro\amazon select.wav";
|
||||||
public const string SFXPaladinDeselect = @"data\global\sfx\Cursor\intro\paladin deselect.wav";
|
public const string SFXAssassinDeselect = @"data\global\sfx\Cursor\intro\assassin deselect.wav";
|
||||||
public const string SFXPaladinSelect = @"data\global\sfx\Cursor\intro\paladin select.wav";
|
public const string SFXAssassinSelect = @"data\global\sfx\Cursor\intro\assassin select.wav";
|
||||||
public const string SFXSorceressDeselect = @"data\global\sfx\Cursor\intro\sorceress deselect.wav";
|
public const string SFXBarbarianDeselect = @"data\global\sfx\Cursor\intro\barbarian deselect.wav";
|
||||||
public const string SFXSorceressSelect = @"data\global\sfx\Cursor\intro\sorceress select.wav";
|
public const string SFXBarbarianSelect = @"data\global\sfx\Cursor\intro\barbarian select.wav";
|
||||||
|
public const string SFXDruidDeselect = @"data\global\sfx\Cursor\intro\druid deselect.wav";
|
||||||
// --- Enemy Data ---
|
public const string SFXDruidSelect = @"data\global\sfx\Cursor\intro\druid select.wav";
|
||||||
public static string MonStats = "data\\global\\excel\\monstats.txt";
|
public const string SFXNecromancerDeselect = @"data\global\sfx\Cursor\intro\necromancer deselect.wav";
|
||||||
|
public const string SFXNecromancerSelect = @"data\global\sfx\Cursor\intro\necromancer select.wav";
|
||||||
public static string GeneratePathForItem(string spriteName)
|
public const string SFXPaladinDeselect = @"data\global\sfx\Cursor\intro\paladin deselect.wav";
|
||||||
{
|
public const string SFXPaladinSelect = @"data\global\sfx\Cursor\intro\paladin select.wav";
|
||||||
return $@"data\global\items\{spriteName}.dc6";
|
public const string SFXSorceressDeselect = @"data\global\sfx\Cursor\intro\sorceress deselect.wav";
|
||||||
}
|
public const string SFXSorceressSelect = @"data\global\sfx\Cursor\intro\sorceress select.wav";
|
||||||
|
|
||||||
public static string GetMusicPathForLevel(eLevelId levelId)
|
// --- Enemy Data ---
|
||||||
{
|
public static string MonStats = "data\\global\\excel\\monstats.txt";
|
||||||
switch (levelId)
|
|
||||||
{
|
public static string GeneratePathForItem(string spriteName)
|
||||||
case eLevelId.None:
|
{
|
||||||
return string.Empty;
|
return $@"data\global\items\{spriteName}.dc6";
|
||||||
case eLevelId.Act1_Town1:
|
}
|
||||||
return BGMAct1Town1;
|
|
||||||
case eLevelId.Act1_CaveTreasure2:
|
public static string GetMusicPathForLevel(eLevelId levelId)
|
||||||
return BGMAct1Caves;
|
{
|
||||||
case eLevelId.Act1_CaveTreasure3:
|
switch (levelId)
|
||||||
return BGMAct1Caves;
|
{
|
||||||
case eLevelId.Act1_CaveTreasure4:
|
case eLevelId.None:
|
||||||
return BGMAct1Caves;
|
return string.Empty;
|
||||||
case eLevelId.Act1_CaveTreasure5:
|
case eLevelId.Act1_Town1:
|
||||||
return BGMAct1Caves;
|
return BGMAct1Town1;
|
||||||
case eLevelId.Act1_CryptCountessX:
|
case eLevelId.Act1_CaveTreasure2:
|
||||||
return BGMAct1BloodRavenResolution; // TODO: Verify
|
return BGMAct1Caves;
|
||||||
case eLevelId.Act1_Tower2:
|
case eLevelId.Act1_CaveTreasure3:
|
||||||
return BGMAct1Caves; // TODO: Verify
|
return BGMAct1Caves;
|
||||||
case eLevelId.Act1_MonFront:
|
case eLevelId.Act1_CaveTreasure4:
|
||||||
return BGMAct1DenOfEvilAction; // TODO: Verify
|
return BGMAct1Caves;
|
||||||
case eLevelId.Act1_Courtyard1:
|
case eLevelId.Act1_CaveTreasure5:
|
||||||
return BGMAct1Monastery; // TODO: Verify
|
return BGMAct1Caves;
|
||||||
case eLevelId.Act1_Courtyard2:
|
case eLevelId.Act1_CryptCountessX:
|
||||||
return BGMAct1Monastery; // TODO: Verify
|
return BGMAct1BloodRavenResolution; // TODO: Verify
|
||||||
case eLevelId.Act1_Cathedral:
|
case eLevelId.Act1_Tower2:
|
||||||
return BGMAct1Monastery; // TODO: Verify
|
return BGMAct1Caves; // TODO: Verify
|
||||||
case eLevelId.Act1_Andariel:
|
case eLevelId.Act1_MonFront:
|
||||||
return BGMAct1AndarielAction;
|
return BGMAct1DenOfEvilAction; // TODO: Verify
|
||||||
case eLevelId.Act1_Tristram:
|
case eLevelId.Act1_Courtyard1:
|
||||||
return BGMAct1Tristram;
|
return BGMAct1Monastery; // TODO: Verify
|
||||||
case eLevelId.Act2_Town:
|
case eLevelId.Act1_Courtyard2:
|
||||||
return BGMAct2Town2;
|
return BGMAct1Monastery; // TODO: Verify
|
||||||
case eLevelId.Act2_Harem:
|
case eLevelId.Act1_Cathedral:
|
||||||
return BGMAct2Harem;
|
return BGMAct1Monastery; // TODO: Verify
|
||||||
case eLevelId.Act2_DurielsLair:
|
case eLevelId.Act1_Andariel:
|
||||||
return BGMAct2Lair;
|
return BGMAct1AndarielAction;
|
||||||
case eLevelId.Act3_Town:
|
case eLevelId.Act1_Tristram:
|
||||||
return BGMAct3Town3;
|
return BGMAct1Tristram;
|
||||||
case eLevelId.Act3_DungeonTreasure1:
|
case eLevelId.Act2_Town:
|
||||||
return BGMAct3Kurast; // TODO: Verify
|
return BGMAct2Town2;
|
||||||
case eLevelId.Act3_DungeonTreasure2:
|
case eLevelId.Act2_Harem:
|
||||||
return BGMAct3Kurast; // TODO: Verify
|
return BGMAct2Harem;
|
||||||
case eLevelId.Act3_SewerTreasureX:
|
case eLevelId.Act2_DurielsLair:
|
||||||
return BGMAct3KurastSewer; // TODO: Verify
|
return BGMAct2Lair;
|
||||||
case eLevelId.Act3_Temple1:
|
case eLevelId.Act3_Town:
|
||||||
return BGMAct3Kurast; // TODO: Verify
|
return BGMAct3Town3;
|
||||||
case eLevelId.Act3_Temple2:
|
case eLevelId.Act3_DungeonTreasure1:
|
||||||
return BGMAct3Kurast; // TODO: Verify
|
return BGMAct3Kurast; // TODO: Verify
|
||||||
case eLevelId.Act3_Temple3:
|
case eLevelId.Act3_DungeonTreasure2:
|
||||||
return BGMAct3Kurast; // TODO: Verify
|
return BGMAct3Kurast; // TODO: Verify
|
||||||
case eLevelId.Act3_Temple4:
|
case eLevelId.Act3_SewerTreasureX:
|
||||||
return BGMAct3Kurast; // TODO: Verify
|
return BGMAct3KurastSewer; // TODO: Verify
|
||||||
case eLevelId.Act3_Temple5:
|
case eLevelId.Act3_Temple1:
|
||||||
return BGMAct3Kurast; // TODO: Verify
|
return BGMAct3Kurast; // TODO: Verify
|
||||||
case eLevelId.Act3_Temple6:
|
case eLevelId.Act3_Temple2:
|
||||||
return BGMAct3Kurast; // TODO: Verify
|
return BGMAct3Kurast; // TODO: Verify
|
||||||
case eLevelId.Act3_MephistoComplex:
|
case eLevelId.Act3_Temple3:
|
||||||
return BGMAct3MefDeathAction; // TODO: Verify
|
return BGMAct3Kurast; // TODO: Verify
|
||||||
case eLevelId.Act4_Fortress:
|
case eLevelId.Act3_Temple4:
|
||||||
return BGMAct4Mesa; // TODO: Verify
|
return BGMAct3Kurast; // TODO: Verify
|
||||||
case eLevelId.Act5_Town:
|
case eLevelId.Act3_Temple5:
|
||||||
return BGMAct5XTown;
|
return BGMAct3Kurast; // TODO: Verify
|
||||||
case eLevelId.Act5_TempleFinalRoom:
|
case eLevelId.Act3_Temple6:
|
||||||
return BGMAct2Sanctuary; // TODO: Verify
|
return BGMAct3Kurast; // TODO: Verify
|
||||||
case eLevelId.Act5_ThroneRoom:
|
case eLevelId.Act3_MephistoComplex:
|
||||||
return BGMAct2Sanctuary; // TODO: Verify
|
return BGMAct3MefDeathAction; // TODO: Verify
|
||||||
case eLevelId.Act5_WorldStone:
|
case eLevelId.Act4_Fortress:
|
||||||
return BGMAct4ForgeAction; // TODO: Verify
|
return BGMAct4Mesa; // TODO: Verify
|
||||||
case eLevelId.Act5_TempleEntrance:
|
case eLevelId.Act5_Town:
|
||||||
return BGMAct5Baal; // TODO: Verify
|
return BGMAct5XTown;
|
||||||
case eLevelId.Act5_BaalEntrance:
|
case eLevelId.Act5_TempleFinalRoom:
|
||||||
return BGMAct5Baal; // TODO: Verify
|
return BGMAct2Sanctuary; // TODO: Verify
|
||||||
default:
|
case eLevelId.Act5_ThroneRoom:
|
||||||
return string.Empty;
|
return BGMAct2Sanctuary; // TODO: Verify
|
||||||
}
|
case eLevelId.Act5_WorldStone:
|
||||||
}
|
return BGMAct4ForgeAction; // TODO: Verify
|
||||||
}
|
case eLevelId.Act5_TempleEntrance:
|
||||||
}
|
return BGMAct5Baal; // TODO: Verify
|
||||||
|
case eLevelId.Act5_BaalEntrance:
|
||||||
|
return BGMAct5Baal; // TODO: Verify
|
||||||
|
default:
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetHeroSkillPanel(eHero hero)
|
||||||
|
{
|
||||||
|
switch (hero)
|
||||||
|
{
|
||||||
|
case eHero.Amazon:
|
||||||
|
return SkillsPanelAmazon;
|
||||||
|
case eHero.Assassin:
|
||||||
|
return SkillsPanelAssassin;
|
||||||
|
case eHero.Barbarian:
|
||||||
|
return SkillsPanelBarbarian;
|
||||||
|
case eHero.Druid:
|
||||||
|
return SkillsPanelDruid;
|
||||||
|
case eHero.Necromancer:
|
||||||
|
return SkillsPanelNecromancer;
|
||||||
|
case eHero.Paladin:
|
||||||
|
return SkillsPanelPaladin;
|
||||||
|
case eHero.Sorceress:
|
||||||
|
return SkillsPanelSorcerer;
|
||||||
|
default:
|
||||||
|
throw new ArgumentException($"Unknown hero type: {hero}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -43,6 +43,7 @@ namespace OpenDiablo2.Core
|
|||||||
builder.RegisterType<PanelFrame>().As<IPanelFrame>().InstancePerDependency();
|
builder.RegisterType<PanelFrame>().As<IPanelFrame>().InstancePerDependency();
|
||||||
builder.RegisterType<CharacterPanel>().AsImplementedInterfaces().InstancePerDependency();
|
builder.RegisterType<CharacterPanel>().AsImplementedInterfaces().InstancePerDependency();
|
||||||
builder.RegisterType<InventoryPanel>().AsImplementedInterfaces().InstancePerDependency();
|
builder.RegisterType<InventoryPanel>().AsImplementedInterfaces().InstancePerDependency();
|
||||||
|
builder.RegisterType<SkillsPanel>().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();
|
||||||
|
@ -76,10 +76,11 @@
|
|||||||
<Compile Include="UI\GameHUD.cs" />
|
<Compile Include="UI\GameHUD.cs" />
|
||||||
<Compile Include="UI\ItemContainer.cs" />
|
<Compile Include="UI\ItemContainer.cs" />
|
||||||
<Compile Include="UI\PanelFrame.cs" />
|
<Compile Include="UI\PanelFrame.cs" />
|
||||||
<Compile Include="UI\InventoryPanel.cs" />
|
<Compile Include="UI\Panels\InventoryPanel.cs" />
|
||||||
|
<Compile Include="UI\Panels\SkillsPanel.cs" />
|
||||||
<Compile Include="UI\TextBox.cs" />
|
<Compile Include="UI\TextBox.cs" />
|
||||||
<Compile Include="UI\MiniPanel.cs" />
|
<Compile Include="UI\MiniPanel.cs" />
|
||||||
<Compile Include="UI\CharacterPanel.cs" />
|
<Compile Include="UI\Panels\CharacterPanel.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="app.config" />
|
<None Include="app.config" />
|
||||||
|
@ -1,232 +1,234 @@
|
|||||||
using OpenDiablo2.Common;
|
using OpenDiablo2.Common;
|
||||||
using OpenDiablo2.Common.Interfaces;
|
using OpenDiablo2.Common.Interfaces;
|
||||||
using OpenDiablo2.Common.Models;
|
using OpenDiablo2.Common.Models;
|
||||||
using System;
|
using System.Drawing;
|
||||||
using System.Drawing;
|
|
||||||
|
namespace OpenDiablo2.Core.UI
|
||||||
namespace OpenDiablo2.Core.UI
|
{
|
||||||
{
|
public sealed class Button : IButton
|
||||||
public sealed class Button : IButton
|
{
|
||||||
{
|
private readonly IMouseInfoProvider mouseInfoProvider;
|
||||||
private readonly IMouseInfoProvider mouseInfoProvider;
|
private readonly IRenderWindow renderWindow;
|
||||||
private readonly IRenderWindow renderWindow;
|
private readonly ISoundProvider musicProvider;
|
||||||
private readonly ISoundProvider musicProvider;
|
private readonly ButtonLayout buttonLayout;
|
||||||
private readonly ButtonLayout buttonLayout;
|
private readonly byte[] sfxButtonClick;
|
||||||
private readonly byte[] sfxButtonClick;
|
|
||||||
|
public OnActivateDelegate OnActivate { get; set; }
|
||||||
public OnActivateDelegate OnActivate { get; set; }
|
public OnToggleDelegate OnToggle { get; set; }
|
||||||
public OnToggleDelegate OnToggle { get; set; }
|
|
||||||
|
private Point location = new Point();
|
||||||
private Point location = new Point();
|
public Point Location
|
||||||
public Point Location
|
{
|
||||||
{
|
get => location;
|
||||||
get => location;
|
set
|
||||||
set
|
{
|
||||||
{
|
location = value;
|
||||||
location = value;
|
sprite.Location = value;
|
||||||
sprite.Location = value;
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
private readonly int buttonWidth;
|
||||||
private readonly int buttonWidth;
|
private readonly int buttonHeight;
|
||||||
private readonly int buttonHeight;
|
private readonly ISprite sprite;
|
||||||
private readonly ISprite sprite;
|
private readonly IFont font;
|
||||||
private readonly IFont font;
|
private readonly ILabel label;
|
||||||
private readonly ILabel label;
|
private bool pressed = false;
|
||||||
private bool pressed = false;
|
private bool active = false; // When true, button is actively being focus pressed
|
||||||
private bool active = false; // When true, button is actively being focus pressed
|
private bool activeLock = false; // When true, we have locked the mouse from everything else
|
||||||
private bool activeLock = false; // When true, we have locked the mouse from everything else
|
public bool Toggled { get; private set; } = false;
|
||||||
public bool Toggled { get; private set; } = false;
|
|
||||||
|
private Point labelOffset = new Point();
|
||||||
private Point labelOffset = new Point();
|
|
||||||
|
private bool enabled = true;
|
||||||
public Size ClickableRect { get; set; }
|
public bool Enabled
|
||||||
public bool AllowFrameChange { get; set; } = true;
|
{
|
||||||
|
get => enabled;
|
||||||
private bool enabled = true;
|
set
|
||||||
public bool Enabled
|
{
|
||||||
{
|
if (value == enabled)
|
||||||
get => enabled;
|
return;
|
||||||
set
|
enabled = value;
|
||||||
{
|
|
||||||
if (value == enabled)
|
if(buttonLayout.IsDarkenedWhenDisabled)
|
||||||
return;
|
sprite.Darken = !enabled;
|
||||||
enabled = value;
|
}
|
||||||
|
}
|
||||||
if(buttonLayout.IsDarkenedWhenDisabled)
|
|
||||||
sprite.Darken = !enabled;
|
private string text;
|
||||||
}
|
public string Text
|
||||||
}
|
{
|
||||||
|
get => text;
|
||||||
private string text;
|
set
|
||||||
public string Text
|
{
|
||||||
{
|
text = value;
|
||||||
get => text;
|
UpdateText();
|
||||||
set
|
}
|
||||||
{
|
}
|
||||||
text = value;
|
|
||||||
UpdateText();
|
|
||||||
}
|
public Button(
|
||||||
}
|
ButtonLayout buttonLayout,
|
||||||
|
IRenderWindow renderWindow,
|
||||||
|
IMouseInfoProvider mouseInfoProvider,
|
||||||
public Button(
|
ISoundProvider soundProvider,
|
||||||
ButtonLayout buttonLayout,
|
IMPQProvider mpqProvider
|
||||||
IRenderWindow renderWindow,
|
)
|
||||||
IMouseInfoProvider mouseInfoProvider,
|
{
|
||||||
ISoundProvider soundProvider,
|
this.buttonLayout = buttonLayout;
|
||||||
IMPQProvider mpqProvider
|
this.renderWindow = renderWindow;
|
||||||
)
|
this.mouseInfoProvider = mouseInfoProvider;
|
||||||
{
|
this.musicProvider = soundProvider;
|
||||||
this.buttonLayout = buttonLayout;
|
|
||||||
this.renderWindow = renderWindow;
|
font = renderWindow.LoadFont(buttonLayout.FontPath, Palettes.Units);
|
||||||
this.mouseInfoProvider = mouseInfoProvider;
|
label = renderWindow.CreateLabel(font);
|
||||||
this.musicProvider = soundProvider;
|
|
||||||
|
sprite = renderWindow.LoadSprite(buttonLayout.ResourceName, buttonLayout.PaletteName, true);
|
||||||
font = renderWindow.LoadFont(buttonLayout.FontPath, Palettes.Units);
|
|
||||||
label = renderWindow.CreateLabel(font);
|
// TODO: Less stupid way of doing this would be super nice
|
||||||
|
buttonWidth = 0;
|
||||||
sprite = renderWindow.LoadSprite(buttonLayout.ResourceName, buttonLayout.PaletteName, true);
|
buttonHeight = 0;
|
||||||
|
for (int i = 0; i < buttonLayout.XSegments; i++)
|
||||||
// TODO: Less stupid way of doing this would be nice
|
{
|
||||||
buttonWidth = 0;
|
sprite.Frame = i;
|
||||||
buttonHeight = 0;
|
buttonWidth += sprite.LocalFrameSize.Width;
|
||||||
for (int i = 0; i < buttonLayout.XSegments; i++)
|
}
|
||||||
{
|
for(int i = 0; i < buttonLayout.YSegments; i++)
|
||||||
sprite.Frame = i;
|
{
|
||||||
buttonWidth += sprite.LocalFrameSize.Width;
|
sprite.Frame = i * buttonLayout.YSegments;
|
||||||
buttonHeight = Math.Max(buttonHeight, sprite.LocalFrameSize.Height);
|
buttonHeight += sprite.LocalFrameSize.Height;
|
||||||
}
|
}
|
||||||
|
|
||||||
label.MaxWidth = buttonWidth - 8;
|
label.MaxWidth = buttonWidth - 8;
|
||||||
label.Alignment = Common.Enums.eTextAlign.Centered;
|
label.Alignment = Common.Enums.eTextAlign.Centered;
|
||||||
|
|
||||||
sfxButtonClick = mpqProvider.GetBytes(ResourcePaths.SFXButtonClick);
|
sfxButtonClick = mpqProvider.GetBytes(ResourcePaths.SFXButtonClick);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Toggle()
|
public bool Toggle()
|
||||||
{
|
{
|
||||||
Toggled = !Toggled;
|
Toggled = !Toggled;
|
||||||
|
|
||||||
OnToggle?.Invoke(Toggled);
|
OnToggle?.Invoke(Toggled);
|
||||||
|
|
||||||
return Toggled;
|
return Toggled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Toggle(bool isToggled)
|
public bool Toggle(bool isToggled)
|
||||||
{
|
{
|
||||||
if(Toggled != isToggled)
|
if(Toggled != isToggled)
|
||||||
{
|
{
|
||||||
OnToggle?.Invoke(isToggled);
|
OnToggle?.Invoke(isToggled);
|
||||||
|
|
||||||
Toggled = isToggled;
|
Toggled = isToggled;
|
||||||
}
|
}
|
||||||
|
|
||||||
return isToggled;
|
return isToggled;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if (!enabled)
|
if (!enabled)
|
||||||
{
|
{
|
||||||
// Prevent sticky locks
|
// Prevent sticky locks
|
||||||
if (activeLock && mouseInfoProvider.ReserveMouse)
|
if (activeLock && mouseInfoProvider.ReserveMouse)
|
||||||
{
|
{
|
||||||
activeLock = false;
|
activeLock = false;
|
||||||
mouseInfoProvider.ReserveMouse = false;
|
mouseInfoProvider.ReserveMouse = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
active = false;
|
active = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int clickWidth = ClickableRect.Width > 0 ? ClickableRect.Width : buttonWidth;
|
int clickWidth = buttonLayout.ClickableRect.Width > 0 ? buttonLayout.ClickableRect.Width : buttonWidth;
|
||||||
int clickHeight = ClickableRect.Height > 0 ? ClickableRect.Height : buttonHeight;
|
int clickHeight = buttonLayout.ClickableRect.Height > 0 ? buttonLayout.ClickableRect.Height : buttonHeight;
|
||||||
var hovered = mouseInfoProvider.MouseX >= location.X && mouseInfoProvider.MouseX < (location.X + clickWidth)
|
|
||||||
&& mouseInfoProvider.MouseY >= location.Y && mouseInfoProvider.MouseY < (location.Y + clickHeight);
|
var hovered = mouseInfoProvider.MouseX >= location.X + buttonLayout.ClickableRect.X
|
||||||
|
&& mouseInfoProvider.MouseY >= location.Y + buttonLayout.ClickableRect.Y
|
||||||
|
&& mouseInfoProvider.MouseX < location.X + clickWidth + buttonLayout.ClickableRect.X
|
||||||
if (!activeLock && hovered && mouseInfoProvider.LeftMouseDown && !mouseInfoProvider.ReserveMouse)
|
&& mouseInfoProvider.MouseY < location.Y + clickHeight + buttonLayout.ClickableRect.Y;
|
||||||
{
|
|
||||||
// The button is being pressed down
|
if (!activeLock && hovered && mouseInfoProvider.LeftMouseDown && !mouseInfoProvider.ReserveMouse)
|
||||||
mouseInfoProvider.ReserveMouse = true;
|
{
|
||||||
active = true;
|
// The button is being pressed down
|
||||||
musicProvider.PlaySfx(sfxButtonClick);
|
mouseInfoProvider.ReserveMouse = true;
|
||||||
}
|
active = true;
|
||||||
else if (active && !mouseInfoProvider.LeftMouseDown)
|
musicProvider.PlaySfx(sfxButtonClick);
|
||||||
{
|
}
|
||||||
mouseInfoProvider.ReserveMouse = false;
|
else if (active && !mouseInfoProvider.LeftMouseDown)
|
||||||
active = false;
|
{
|
||||||
|
mouseInfoProvider.ReserveMouse = false;
|
||||||
if (hovered)
|
active = false;
|
||||||
{
|
|
||||||
OnActivate?.Invoke();
|
if (hovered)
|
||||||
|
{
|
||||||
if (buttonLayout.Toggleable)
|
OnActivate?.Invoke();
|
||||||
{
|
|
||||||
Toggle();
|
if (buttonLayout.Toggleable)
|
||||||
}
|
{
|
||||||
}
|
Toggle();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (!active && mouseInfoProvider.LeftMouseDown)
|
|
||||||
{
|
}
|
||||||
activeLock = true;
|
else if (!active && mouseInfoProvider.LeftMouseDown)
|
||||||
}
|
{
|
||||||
else if (activeLock && !mouseInfoProvider.LeftMouseDown)
|
activeLock = true;
|
||||||
{
|
}
|
||||||
activeLock = false;
|
else if (activeLock && !mouseInfoProvider.LeftMouseDown)
|
||||||
}
|
{
|
||||||
|
activeLock = false;
|
||||||
pressed = hovered && mouseInfoProvider.LeftMouseDown && active;
|
}
|
||||||
}
|
|
||||||
|
pressed = hovered && mouseInfoProvider.LeftMouseDown && active;
|
||||||
public void Render()
|
}
|
||||||
{
|
|
||||||
var frame = buttonLayout.BaseFrame;
|
public void Render()
|
||||||
|
{
|
||||||
if (AllowFrameChange)
|
var frame = buttonLayout.BaseFrame;
|
||||||
{
|
|
||||||
if(!Enabled && buttonLayout.DisabledFrame >= 0)
|
if (buttonLayout.AllowFrameChange)
|
||||||
{
|
{
|
||||||
frame = buttonLayout.DisabledFrame;
|
if(!Enabled && buttonLayout.DisabledFrame >= 0)
|
||||||
}
|
{
|
||||||
else if (Toggled && pressed)
|
frame = buttonLayout.DisabledFrame;
|
||||||
{
|
}
|
||||||
frame = buttonLayout.BaseFrame + 3;
|
else if (Toggled && pressed)
|
||||||
}
|
{
|
||||||
else if (pressed)
|
frame = buttonLayout.BaseFrame + 3;
|
||||||
{
|
}
|
||||||
frame = buttonLayout.BaseFrame + 1;
|
else if (pressed)
|
||||||
}
|
{
|
||||||
else if (Toggled)
|
frame = buttonLayout.BaseFrame + 1;
|
||||||
{
|
}
|
||||||
frame = buttonLayout.BaseFrame + 2;
|
else if (Toggled)
|
||||||
}
|
{
|
||||||
}
|
frame = buttonLayout.BaseFrame + 2;
|
||||||
|
}
|
||||||
renderWindow.Draw(sprite, buttonLayout.XSegments, 1, frame);
|
}
|
||||||
var offset = pressed ? -2 : 0;
|
|
||||||
|
renderWindow.Draw(sprite, buttonLayout.XSegments, buttonLayout.YSegments, frame);
|
||||||
label.Location = new Point(location.X + offset + labelOffset.X, location.Y - offset + labelOffset.Y);
|
var offset = pressed ? -2 : 0;
|
||||||
renderWindow.Draw(label);
|
|
||||||
}
|
label.Location = new Point(location.X + offset + labelOffset.X, location.Y - offset + labelOffset.Y);
|
||||||
|
renderWindow.Draw(label);
|
||||||
private void UpdateText()
|
}
|
||||||
{
|
|
||||||
label.Text = text;
|
private void UpdateText()
|
||||||
label.TextColor = Color.FromArgb(75, 75, 75);
|
{
|
||||||
|
label.Text = text;
|
||||||
var offsetX = (buttonWidth / 2) - (label.TextArea.Width / 2);
|
label.TextColor = Color.FromArgb(75, 75, 75);
|
||||||
var offsetY = (buttonHeight / 2) - (label.TextArea.Height / 2);
|
|
||||||
labelOffset = new Point(offsetX, offsetY - 5);
|
var offsetX = (buttonWidth / 2) - (label.TextArea.Width / 2);
|
||||||
}
|
var offsetY = (buttonHeight / 2) - (label.TextArea.Height / 2);
|
||||||
|
labelOffset = new Point(offsetX, offsetY - 5);
|
||||||
public void Dispose()
|
}
|
||||||
{
|
|
||||||
sprite.Dispose();
|
public void Dispose()
|
||||||
font.Dispose();
|
{
|
||||||
label.Dispose();
|
sprite.Dispose();
|
||||||
}
|
font.Dispose();
|
||||||
}
|
label.Dispose();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -38,7 +38,7 @@ namespace OpenDiablo2.Core.UI
|
|||||||
|
|
||||||
// Test fields
|
// Test fields
|
||||||
private bool addNewAttribute = true;
|
private bool addNewAttribute = true;
|
||||||
private bool addNewSkill = false;
|
private bool addNewSkill = true;
|
||||||
|
|
||||||
public GameHUD(
|
public GameHUD(
|
||||||
IRenderWindow renderWindow,
|
IRenderWindow renderWindow,
|
||||||
@ -74,6 +74,7 @@ namespace OpenDiablo2.Core.UI
|
|||||||
addSkillButton = createButton(eButtonType.Skill);
|
addSkillButton = createButton(eButtonType.Skill);
|
||||||
addSkillButton.Location = new Point(564, 562);
|
addSkillButton.Location = new Point(564, 562);
|
||||||
addSkillButton.Enabled = addNewSkill;
|
addSkillButton.Enabled = addNewSkill;
|
||||||
|
addSkillButton.OnActivate = () => TogglePanel(ePanelType.Skill);
|
||||||
|
|
||||||
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);
|
||||||
|
@ -55,14 +55,10 @@ namespace OpenDiablo2.Core.UI
|
|||||||
secondaryLeftButton = createButton(eButtonType.SecondaryInvHand);
|
secondaryLeftButton = createButton(eButtonType.SecondaryInvHand);
|
||||||
secondaryLeftButton.Location = panelSprite.Location + new Size(15, 22);
|
secondaryLeftButton.Location = panelSprite.Location + new Size(15, 22);
|
||||||
secondaryLeftButton.OnActivate = ToggleWeaponsSlot;
|
secondaryLeftButton.OnActivate = ToggleWeaponsSlot;
|
||||||
secondaryLeftButton.ClickableRect = new Size(0, 20);
|
|
||||||
secondaryLeftButton.AllowFrameChange = false;
|
|
||||||
|
|
||||||
secondaryRightButton = createButton(eButtonType.SecondaryInvHand);
|
secondaryRightButton = createButton(eButtonType.SecondaryInvHand);
|
||||||
secondaryRightButton.Location = panelSprite.Location + new Size(246, 22);
|
secondaryRightButton.Location = panelSprite.Location + new Size(246, 22);
|
||||||
secondaryRightButton.OnActivate = ToggleWeaponsSlot;
|
secondaryRightButton.OnActivate = ToggleWeaponsSlot;
|
||||||
secondaryRightButton.ClickableRect = new Size(0, 20);
|
|
||||||
secondaryRightButton.AllowFrameChange = false;
|
|
||||||
|
|
||||||
goldButton = createButton(eButtonType.GoldCoin);
|
goldButton = createButton(eButtonType.GoldCoin);
|
||||||
goldButton.Location = panelSprite.Location + new Size(84, 391);
|
goldButton.Location = panelSprite.Location + new Size(84, 391);
|
83
OpenDiablo2.Core/UI/Panels/SkillsPanel.cs
Normal file
83
OpenDiablo2.Core/UI/Panels/SkillsPanel.cs
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/* 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.Extensions;
|
||||||
|
using OpenDiablo2.Common.Interfaces;
|
||||||
|
using OpenDiablo2.Common.Interfaces.UI;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace OpenDiablo2.Core.UI
|
||||||
|
{
|
||||||
|
public class SkillsPanel : ISkillsPanel
|
||||||
|
{
|
||||||
|
private readonly IRenderWindow renderWindow;
|
||||||
|
private readonly ISprite panelSprite;
|
||||||
|
|
||||||
|
private readonly IButton[] treeButtons;
|
||||||
|
|
||||||
|
public event OnPanelClosedEvent OnPanelClosed;
|
||||||
|
|
||||||
|
// Test fields
|
||||||
|
private readonly eHero hero = eHero.Barbarian;
|
||||||
|
|
||||||
|
public SkillsPanel(
|
||||||
|
IRenderWindow renderWindow,
|
||||||
|
Func<eHero, int, IButton> createTreeButton,
|
||||||
|
Func<eButtonType, IButton> createButton)
|
||||||
|
{
|
||||||
|
this.renderWindow = renderWindow;
|
||||||
|
|
||||||
|
panelSprite = renderWindow.LoadSprite(ResourcePaths.GetHeroSkillPanel(hero), Palettes.Act1, FrameType.GetOffset(), true);
|
||||||
|
|
||||||
|
treeButtons = Enumerable.Range(0, 3).Select(o =>
|
||||||
|
{
|
||||||
|
var btn = createTreeButton(hero, o);
|
||||||
|
btn.Location = FrameType.GetOffset();
|
||||||
|
btn.OnActivate = () => { ActivePanelIndex = o; };
|
||||||
|
return btn;
|
||||||
|
}).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ePanelType PanelType => ePanelType.Skill;
|
||||||
|
public ePanelFrameType FrameType => ePanelFrameType.Right;
|
||||||
|
|
||||||
|
public int ActivePanelIndex { get; private set; }
|
||||||
|
|
||||||
|
public void Update()
|
||||||
|
{
|
||||||
|
foreach (var button in treeButtons)
|
||||||
|
button.Update();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Render()
|
||||||
|
{
|
||||||
|
renderWindow.Draw(panelSprite, 2, 2, 0);
|
||||||
|
|
||||||
|
treeButtons[ActivePanelIndex].Render();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
panelSprite.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,117 +1,122 @@
|
|||||||
/* OpenDiablo 2 - An open source re-implementation of Diablo 2 in C#
|
/* OpenDiablo 2 - An open source re-implementation of Diablo 2 in C#
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* 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;
|
using OpenDiablo2.Common;
|
||||||
using OpenDiablo2.Common.Attributes;
|
using OpenDiablo2.Common.Attributes;
|
||||||
using OpenDiablo2.Common.Enums;
|
using OpenDiablo2.Common.Enums;
|
||||||
using OpenDiablo2.Common.Interfaces;
|
using OpenDiablo2.Common.Interfaces;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace OpenDiablo2.Scenes
|
namespace OpenDiablo2.Scenes
|
||||||
{
|
{
|
||||||
[Scene(eSceneType.Game)]
|
[Scene(eSceneType.Game)]
|
||||||
public sealed class Game : IScene
|
public sealed class Game : IScene
|
||||||
{
|
{
|
||||||
private readonly IRenderWindow renderWindow;
|
private readonly IRenderWindow renderWindow;
|
||||||
private readonly IMapEngine mapEngine;
|
private readonly IMapEngine mapEngine;
|
||||||
private readonly IMouseInfoProvider mouseInfoProvider;
|
private readonly IMouseInfoProvider mouseInfoProvider;
|
||||||
private readonly IGameState gameState;
|
private readonly IGameState gameState;
|
||||||
private readonly ISessionManager sessionManager;
|
private readonly ISessionManager sessionManager;
|
||||||
private readonly IGameHUD gameHUD;
|
private readonly IGameHUD gameHUD;
|
||||||
|
|
||||||
private eMovementType lastMovementType = eMovementType.Stopped;
|
private eMovementType lastMovementType = eMovementType.Stopped;
|
||||||
private byte lastDirection = 255;
|
private byte lastDirection = 255;
|
||||||
|
private bool clickedOnHud = false;
|
||||||
const double Rad2Deg = 180.0 / Math.PI;
|
|
||||||
|
const double Rad2Deg = 180.0 / Math.PI;
|
||||||
public Game(
|
|
||||||
IRenderWindow renderWindow,
|
public Game(
|
||||||
IMapEngine mapEngine,
|
IRenderWindow renderWindow,
|
||||||
IGameState gameState,
|
IMapEngine mapEngine,
|
||||||
IMouseInfoProvider mouseInfoProvider,
|
IGameState gameState,
|
||||||
IItemManager itemManager,
|
IMouseInfoProvider mouseInfoProvider,
|
||||||
ISessionManager sessionManager,
|
IItemManager itemManager,
|
||||||
ISoundProvider soundProvider,
|
ISessionManager sessionManager,
|
||||||
IMPQProvider mpqProvider,
|
ISoundProvider soundProvider,
|
||||||
IGameHUD gameHUD
|
IMPQProvider mpqProvider,
|
||||||
)
|
IGameHUD gameHUD
|
||||||
{
|
)
|
||||||
this.renderWindow = renderWindow;
|
{
|
||||||
this.mapEngine = mapEngine;
|
this.renderWindow = renderWindow;
|
||||||
this.gameState = gameState;
|
this.mapEngine = mapEngine;
|
||||||
this.mouseInfoProvider = mouseInfoProvider;
|
this.gameState = gameState;
|
||||||
this.sessionManager = sessionManager;
|
this.mouseInfoProvider = mouseInfoProvider;
|
||||||
this.gameHUD = gameHUD;
|
this.sessionManager = sessionManager;
|
||||||
|
this.gameHUD = gameHUD;
|
||||||
//var item = itemManager.getItem("hdm");
|
|
||||||
}
|
//var item = itemManager.getItem("hdm");
|
||||||
|
}
|
||||||
public void Render()
|
|
||||||
{
|
public void Render()
|
||||||
// TODO: Maybe show some sort of connecting/loading message?
|
{
|
||||||
if (mapEngine.FocusedPlayerId == 0)
|
// TODO: Maybe show some sort of connecting/loading message?
|
||||||
return;
|
if (mapEngine.FocusedPlayerId == 0)
|
||||||
|
return;
|
||||||
mapEngine.Render();
|
|
||||||
gameHUD.Render();
|
mapEngine.Render();
|
||||||
}
|
gameHUD.Render();
|
||||||
|
}
|
||||||
public void Update(long ms)
|
|
||||||
{
|
public void Update(long ms)
|
||||||
HandleMovement();
|
{
|
||||||
|
HandleMovement();
|
||||||
mapEngine.Update(ms);
|
|
||||||
gameHUD.Update();
|
mapEngine.Update(ms);
|
||||||
}
|
gameHUD.Update();
|
||||||
|
}
|
||||||
private void HandleMovement()
|
|
||||||
{
|
private void HandleMovement()
|
||||||
// todo; if clicked on hud, then we don't move. But when clicked on map and move cursor over hud, then it's fine
|
{
|
||||||
if (gameHUD.IsMouseOver())
|
if(gameHUD.IsMouseOver() && lastMovementType == eMovementType.Stopped)
|
||||||
return;
|
clickedOnHud = true;
|
||||||
|
else if (!mouseInfoProvider.LeftMouseDown)
|
||||||
var mx = mouseInfoProvider.MouseX - 400 - gameState.CameraOffset;
|
clickedOnHud = false;
|
||||||
var my = mouseInfoProvider.MouseY - 300;
|
|
||||||
|
if (clickedOnHud)
|
||||||
var tx = (mx / 60f + my / 40f) / 2f;
|
return;
|
||||||
var ty = (my / 40f - (mx / 60f)) / 2f;
|
|
||||||
var cursorDirection = (int)Math.Round(Math.Atan2(ty, tx) * Rad2Deg);
|
var mx = mouseInfoProvider.MouseX - 400 - gameState.CameraOffset;
|
||||||
if (cursorDirection < 0)
|
var my = mouseInfoProvider.MouseY - 300;
|
||||||
cursorDirection += 360;
|
|
||||||
var actualDirection = (byte)(cursorDirection / 22);
|
var tx = (mx / 60f + my / 40f) / 2f;
|
||||||
if (actualDirection >= 16)
|
var ty = (my / 40f - (mx / 60f)) / 2f;
|
||||||
actualDirection -= 16;
|
var cursorDirection = (int)Math.Round(Math.Atan2(ty, tx) * Rad2Deg);
|
||||||
|
if (cursorDirection < 0)
|
||||||
if (mouseInfoProvider.LeftMouseDown && (lastMovementType == eMovementType.Stopped || lastDirection != actualDirection))
|
cursorDirection += 360;
|
||||||
{
|
var actualDirection = (byte)(cursorDirection / 22);
|
||||||
lastDirection = actualDirection;
|
if (actualDirection >= 16)
|
||||||
lastMovementType = gameHUD.IsRunningEnabled ? eMovementType.Running : eMovementType.Walking;
|
actualDirection -= 16;
|
||||||
sessionManager.MoveRequest(actualDirection, lastMovementType);
|
|
||||||
}
|
if (mouseInfoProvider.LeftMouseDown && (lastMovementType == eMovementType.Stopped || lastDirection != actualDirection))
|
||||||
else if (!mouseInfoProvider.LeftMouseDown && lastMovementType != eMovementType.Stopped)
|
{
|
||||||
{
|
lastDirection = actualDirection;
|
||||||
lastDirection = actualDirection;
|
lastMovementType = gameHUD.IsRunningEnabled ? eMovementType.Running : eMovementType.Walking;
|
||||||
lastMovementType = eMovementType.Stopped;
|
sessionManager.MoveRequest(actualDirection, lastMovementType);
|
||||||
sessionManager.MoveRequest(actualDirection, lastMovementType);
|
}
|
||||||
}
|
else if (!mouseInfoProvider.LeftMouseDown && lastMovementType != eMovementType.Stopped)
|
||||||
}
|
{
|
||||||
|
lastDirection = actualDirection;
|
||||||
public void Dispose()
|
lastMovementType = eMovementType.Stopped;
|
||||||
{
|
sessionManager.MoveRequest(actualDirection, lastMovementType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
public void Dispose()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -71,6 +71,7 @@
|
|||||||
<HintPath>..\packages\System.Console.4.3.1\lib\net46\System.Console.dll</HintPath>
|
<HintPath>..\packages\System.Console.4.3.1\lib\net46\System.Console.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
<Reference Include="System.Drawing" />
|
||||||
<Reference Include="System.Reflection.TypeExtensions, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="System.Reflection.TypeExtensions, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Reflection.TypeExtensions.4.5.1\lib\net461\System.Reflection.TypeExtensions.dll</HintPath>
|
<HintPath>..\packages\System.Reflection.TypeExtensions.4.5.1\lib\net461\System.Reflection.TypeExtensions.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
@ -15,11 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Autofac;
|
using Autofac;
|
||||||
using CommandLine;
|
using CommandLine;
|
||||||
|
using OpenDiablo2.Common;
|
||||||
using OpenDiablo2.Common.Enums;
|
using OpenDiablo2.Common.Enums;
|
||||||
using OpenDiablo2.Common.Interfaces;
|
using OpenDiablo2.Common.Interfaces;
|
||||||
using OpenDiablo2.Common.Models;
|
using OpenDiablo2.Common.Models;
|
||||||
@ -106,6 +108,21 @@ namespace OpenDiablo2
|
|||||||
return (buttonType) => componentContext.Resolve<IButton>(new NamedParameter("buttonLayout", ButtonLayout.Values[buttonType]));
|
return (buttonType) => componentContext.Resolve<IButton>(new NamedParameter("buttonLayout", ButtonLayout.Values[buttonType]));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
containerBuilder.Register<Func<eHero, int, IButton>>(c =>
|
||||||
|
{
|
||||||
|
var componentContext = c.Resolve<IComponentContext>();
|
||||||
|
return (hero, tabIndex) => componentContext.Resolve<IButton>(new NamedParameter("buttonLayout", new ButtonLayout()
|
||||||
|
{
|
||||||
|
XSegments = 2,
|
||||||
|
YSegments = 2,
|
||||||
|
BaseFrame = 3 - tabIndex, // tabs are ordered from the bottom in the files
|
||||||
|
PaletteName = Palettes.Units,
|
||||||
|
ResourceName = ResourcePaths.GetHeroSkillPanel(hero),
|
||||||
|
ClickableRect = new Rectangle(227, (tabIndex + 1) * 107, 95, 108), // todo; verify clickable rectangle
|
||||||
|
AllowFrameChange = false
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
|
||||||
containerBuilder.Register<Func<ePanelFrameType, IPanelFrame>>(c =>
|
containerBuilder.Register<Func<ePanelFrameType, IPanelFrame>>(c =>
|
||||||
{
|
{
|
||||||
var componentContext = c.Resolve<IComponentContext>();
|
var componentContext = c.Resolve<IComponentContext>();
|
||||||
|
Loading…
Reference in New Issue
Block a user