From 403864fdd1bd65809324c5504b8a0c98a92639ee Mon Sep 17 00:00:00 2001 From: Mike Bundy Date: Thu, 29 Nov 2018 03:25:08 +0000 Subject: [PATCH] Character selection scene skeleton (#27) * Fix issue with typing char name with no hero selected * Character Selection begin... * Add buttons and wire up Character selection scene --- OpenDiablo2.Common/Enums/eButtonType.cs | 17 ++--- OpenDiablo2.Common/Models/ButtonLayout.cs | 17 ++--- OpenDiablo2.Common/ResourcePaths.cs | 4 ++ OpenDiablo2.Scenes/CharacterSelection.cs | 75 ++++++++++++++++++++ OpenDiablo2.Scenes/OpenDiablo2.Scenes.csproj | 1 + OpenDiablo2.Scenes/SelectHeroClass.cs | 4 +- 6 files changed, 100 insertions(+), 18 deletions(-) create mode 100644 OpenDiablo2.Scenes/CharacterSelection.cs diff --git a/OpenDiablo2.Common/Enums/eButtonType.cs b/OpenDiablo2.Common/Enums/eButtonType.cs index ab7815b0..bff008cb 100644 --- a/OpenDiablo2.Common/Enums/eButtonType.cs +++ b/OpenDiablo2.Common/Enums/eButtonType.cs @@ -6,15 +6,16 @@ Medium, Narrow, Cancel, + Tall, // Game UI Run, - Menu, - MinipanelCharacter, - MinipanelInventory, - MinipanelSkill, - MinipanelAutomap, - MinipanelMessage, - MinipanelQuest, - MinipanelMenu + Menu, + MinipanelCharacter, + MinipanelInventory, + MinipanelSkill, + MinipanelAutomap, + MinipanelMessage, + MinipanelQuest, + MinipanelMenu } } diff --git a/OpenDiablo2.Common/Models/ButtonLayout.cs b/OpenDiablo2.Common/Models/ButtonLayout.cs index 7ea1e853..1863cb80 100644 --- a/OpenDiablo2.Common/Models/ButtonLayout.cs +++ b/OpenDiablo2.Common/Models/ButtonLayout.cs @@ -20,16 +20,17 @@ namespace OpenDiablo2.Common.Models {eButtonType.Wide, new ButtonLayout { XSegments = 2, ResourceName = ResourcePaths.WideButtonBlank, PaletteName = Palettes.Units } }, {eButtonType.Medium, new ButtonLayout{ XSegments = 1, ResourceName=ResourcePaths.MediumButtonBlank, PaletteName = Palettes.Units } }, {eButtonType.Narrow, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.NarrowButtonBlank,PaletteName = Palettes.Units } }, + {eButtonType.Tall, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.TallButtonBlank, PaletteName = Palettes.Units } }, {eButtonType.Cancel, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.CancelButton,PaletteName = Palettes.Units } }, // Minipanel - {eButtonType.MinipanelCharacter, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 0 } }, - {eButtonType.MinipanelInventory, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 2 } }, - {eButtonType.MinipanelSkill, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 4 } }, - {eButtonType.MinipanelAutomap, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 8 } }, - {eButtonType.MinipanelMessage, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 10 } }, - {eButtonType.MinipanelQuest, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 12 } }, - {eButtonType.MinipanelMenu, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 14 } }, - + {eButtonType.MinipanelCharacter, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 0 } }, + {eButtonType.MinipanelInventory, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 2 } }, + {eButtonType.MinipanelSkill, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 4 } }, + {eButtonType.MinipanelAutomap, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 8 } }, + {eButtonType.MinipanelMessage, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 10 } }, + {eButtonType.MinipanelQuest, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 12 } }, + {eButtonType.MinipanelMenu, new ButtonLayout {XSegments = 1, ResourceName = ResourcePaths.MinipanelButton,PaletteName = Palettes.Units, BaseFrame = 14 } }, + {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 } }, }; diff --git a/OpenDiablo2.Common/ResourcePaths.cs b/OpenDiablo2.Common/ResourcePaths.cs index 9828b0e0..67206bbc 100644 --- a/OpenDiablo2.Common/ResourcePaths.cs +++ b/OpenDiablo2.Common/ResourcePaths.cs @@ -74,6 +74,9 @@ namespace OpenDiablo2.Common public static string CharacterSelectDruidForwardWalk = "data\\global\\ui\\FrontEnd\\druid\\DZFW.DC6"; public static string CharacterSelectDruidBackWalk = "data\\global\\ui\\FrontEnd\\druid\\DZBW.DC6"; + // -- Character Selection + public static string CharacterSelectionBackground = "data\\global\\ui\\CharSelect\\characterselectscreenEXP.dc6"; + // --- Game --- public static string GamePanels = "data\\global\\ui\\PANEL\\800ctrlpnl7.dc6"; public static string GameGlobeOverlap = "data\\global\\ui\\PANEL\\overlap.DC6"; @@ -102,6 +105,7 @@ namespace OpenDiablo2.Common public static string CancelButton = "data\\global\\ui\\FrontEnd\\CancelButtonBlank.dc6"; public static string NarrowButtonBlank = "data\\global\\ui\\FrontEnd\\NarrowButtonBlank.dc6"; public static string TextBox2 = "data\\global\\ui\\FrontEnd\\textbox2.dc6"; + public static string TallButtonBlank = "data\\global\\ui\\CharSelect\\TallButtonBlank.dc6"; // --- GAME UI --- public static string MinipanelSmall = "data\\global\\ui\\PANEL\\minipanel_s.dc6"; diff --git a/OpenDiablo2.Scenes/CharacterSelection.cs b/OpenDiablo2.Scenes/CharacterSelection.cs new file mode 100644 index 00000000..ebea62a1 --- /dev/null +++ b/OpenDiablo2.Scenes/CharacterSelection.cs @@ -0,0 +1,75 @@ +using System; +using System.Drawing; +using OpenDiablo2.Common; +using OpenDiablo2.Common.Attributes; +using OpenDiablo2.Common.Enums; +using OpenDiablo2.Common.Interfaces; + +namespace OpenDiablo2.Scenes +{ + [Scene("Select Character")] + public sealed class CharacterSelection : IScene + { + static readonly log4net.ILog log = + log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + + private readonly IRenderWindow renderWindow; + + private readonly ISprite backgroundSprite; + private readonly IButton createNewCharacterButton, deleteCharacterButton, exitButton, okButton; + + public CharacterSelection(IRenderWindow renderWindow, + ISceneManager sceneManager, ITextDictionary textDictionary, Func createButton) + { + this.renderWindow = renderWindow; + + backgroundSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectionBackground, Palettes.Sky); + createNewCharacterButton = createButton(eButtonType.Tall); + // TODO: use strCreateNewCharacter -- need to get the text to split after 10 chars though. + createNewCharacterButton.Text = "Create New".ToUpper(); + createNewCharacterButton.Location = new Point(33, 467); + createNewCharacterButton.OnActivate = () => sceneManager.ChangeScene("Select Hero Class"); + + deleteCharacterButton = createButton(eButtonType.Tall); + deleteCharacterButton.Text = textDictionary.Translate("strDelete"); + deleteCharacterButton.Location = new Point(433, 467); + + exitButton = createButton(eButtonType.Medium); + exitButton.Text = textDictionary.Translate("strExit"); + exitButton.Location = new Point(33, 540); + exitButton.OnActivate = () => sceneManager.ChangeScene("Main Menu"); + + okButton = createButton(eButtonType.Medium); + okButton.Text = textDictionary.Translate("strOk"); + okButton.Location = new Point(630, 540); + okButton.Enabled = false; + } + + public void Update(long ms) + { + createNewCharacterButton.Update(); + deleteCharacterButton.Update(); + exitButton.Update(); + okButton.Update(); + } + + public void Render() + { + renderWindow.Draw(backgroundSprite, 4, 3, 0); + + createNewCharacterButton.Render(); + deleteCharacterButton.Render(); + exitButton.Render(); + okButton.Render(); + } + + public void Dispose() + { + backgroundSprite.Dispose(); + createNewCharacterButton.Dispose(); + deleteCharacterButton.Dispose(); + exitButton.Dispose(); + okButton.Dispose(); + } + } +} \ No newline at end of file diff --git a/OpenDiablo2.Scenes/OpenDiablo2.Scenes.csproj b/OpenDiablo2.Scenes/OpenDiablo2.Scenes.csproj index bea1aba0..2ae44f4f 100644 --- a/OpenDiablo2.Scenes/OpenDiablo2.Scenes.csproj +++ b/OpenDiablo2.Scenes/OpenDiablo2.Scenes.csproj @@ -53,6 +53,7 @@ + diff --git a/OpenDiablo2.Scenes/SelectHeroClass.cs b/OpenDiablo2.Scenes/SelectHeroClass.cs index feb968f6..42d715db 100644 --- a/OpenDiablo2.Scenes/SelectHeroClass.cs +++ b/OpenDiablo2.Scenes/SelectHeroClass.cs @@ -211,7 +211,7 @@ namespace OpenDiablo2.Scenes exitButton = createButton(eButtonType.Medium); exitButton.Text = textDictionary.Translate("strExit"); - exitButton.Location = new Point(30, 540); + exitButton.Location = new Point(33, 540); exitButton.OnActivate = OnExitClicked; okButton = createButton(eButtonType.Medium); @@ -245,7 +245,7 @@ namespace OpenDiablo2.Scenes okButton.Enabled = false; selectedHero = null; - sceneManager.ChangeScene("Main Menu"); + sceneManager.ChangeScene("Select Character"); } public void Render()