1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-09-27 21:56:19 -04:00

Added button disable support. Added ability to darken sprite. Added ok button to char select

This commit is contained in:
Tim Sarbin 2018-11-23 18:03:29 -05:00
parent caa9c88d4e
commit 4c020c13bc
4 changed files with 66 additions and 5 deletions

View File

@ -13,5 +13,6 @@ namespace OpenDiablo2.Common.Interfaces
int TotalFrames { get; } int TotalFrames { get; }
Palette CurrentPalette { get; set; } Palette CurrentPalette { get; set; }
bool Blend { get; set; } bool Blend { get; set; }
bool Darken { get; set; }
} }
} }

View File

@ -40,6 +40,20 @@ namespace OpenDiablo2.Core.UI
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, something else is being pressed so ignore everything private bool activeLock = false; // When true, something else is being pressed so ignore everything
private Point labelOffset = new Point(); private Point labelOffset = new Point();
private bool enabled = true;
public bool Enabled
{
get => enabled;
set
{
if (value == enabled)
return;
enabled = value;
sprite.Darken = !enabled;
}
}
private string text; private string text;
public string Text public string Text
@ -82,6 +96,19 @@ namespace OpenDiablo2.Core.UI
public void Update() public void Update()
{ {
if (!enabled)
{
// Prevent sticky locks
if (activeLock && mouseInfoProvider.ReserveMouse)
{
activeLock = false;
mouseInfoProvider.ReserveMouse = false;
}
active = false;
return;
}
var hovered = (mouseInfoProvider.MouseX >= location.X && mouseInfoProvider.MouseX < (location.X + buttonWidth)) var hovered = (mouseInfoProvider.MouseX >= location.X && mouseInfoProvider.MouseX < (location.X + buttonWidth))
&& (mouseInfoProvider.MouseY >= location.Y && mouseInfoProvider.MouseY < (location.Y + buttonHeight)); && (mouseInfoProvider.MouseY >= location.Y && mouseInfoProvider.MouseY < (location.Y + buttonHeight));

View File

@ -19,6 +19,19 @@ namespace OpenDiablo2.SDL2_
public Point Location { get; set; } = new Point(); public Point Location { get; set; } = new Point();
public Size FrameSize { get; set; } = new Size(); public Size FrameSize { get; set; } = new Size();
private bool darken;
public bool Darken
{
get => darken;
set
{
if (darken == value)
return;
darken = value;
LoadFrame(frame);
}
}
private int frame = -1; private int frame = -1;
public int Frame public int Frame
{ {
@ -75,7 +88,6 @@ namespace OpenDiablo2.SDL2_
public Size LocalFrameSize => new Size((int)source.Frames[Frame].Width, (int)source.Frames[Frame].Height); public Size LocalFrameSize => new Size((int)source.Frames[Frame].Width, (int)source.Frames[Frame].Height);
// TODO: This is slow. Make fix.
private void UpdateTextureData() private void UpdateTextureData()
{ {
if (texture == IntPtr.Zero) if (texture == IntPtr.Zero)
@ -87,7 +99,6 @@ namespace OpenDiablo2.SDL2_
Frame = 0; Frame = 0;
} }
} }
private unsafe void LoadFrame(int index) private unsafe void LoadFrame(int index)
@ -114,8 +125,10 @@ namespace OpenDiablo2.SDL2_
continue; continue;
} }
var color = frame.GetColor(x, (int)(y - frameOffset), CurrentPalette);
data[x + (y * (pitch / 4))] = frame.GetColor(x, (int)(y - frameOffset), CurrentPalette); if (darken)
color = ((color & 0xFF000000) > 0) ? (color >> 1) & 0xFF7F7F7F | 0xFF000000 : 0;
data[x + (y * (pitch / 4))] = color;
} }
} }
} }

View File

@ -54,12 +54,13 @@ namespace OpenDiablo2.Scenes
private readonly ISceneManager sceneManager; private readonly ISceneManager sceneManager;
private readonly ITextDictionary textDictionary; private readonly ITextDictionary textDictionary;
private bool showEntryUi = false;
private eHero? selectedHero = null; private eHero? selectedHero = null;
private float secondTimer; private float secondTimer;
private ISprite backgroundSprite, campfireSprite; private ISprite backgroundSprite, campfireSprite;
private IFont headingFont, heroDescFont; private IFont headingFont, heroDescFont;
private ILabel headingLabel, heroClassLabel, heroDesc1Label, heroDesc2Label, heroDesc3Label; private ILabel headingLabel, heroClassLabel, heroDesc1Label, heroDesc2Label, heroDesc3Label;
private Button exitButton; private Button exitButton, okButton;
private Dictionary<eHero, HeroRenderInfo> heroRenderInfo = new Dictionary<eHero, HeroRenderInfo>(); private Dictionary<eHero, HeroRenderInfo> heroRenderInfo = new Dictionary<eHero, HeroRenderInfo>();
public SelectHeroClass( public SelectHeroClass(
@ -211,6 +212,18 @@ namespace OpenDiablo2.Scenes
exitButton.Text = "EXIT"; exitButton.Text = "EXIT";
exitButton.Location = new Point(30, 540); exitButton.Location = new Point(30, 540);
exitButton.OnActivate = OnExitClicked; exitButton.OnActivate = OnExitClicked;
okButton = createButton(eButtonType.Medium);
okButton.Text = "OK";
okButton.Location = new Point(630, 540);
okButton.OnActivate = OnOkclicked;
okButton.Enabled = false;
}
private void OnOkclicked()
{
} }
private void OnExitClicked() private void OnExitClicked()
@ -221,6 +234,7 @@ namespace OpenDiablo2.Scenes
heroRenderInfo[hero].SpecialFrameTime = 0; heroRenderInfo[hero].SpecialFrameTime = 0;
heroRenderInfo[hero].Stance = eHeroStance.Idle; heroRenderInfo[hero].Stance = eHeroStance.Idle;
} }
showEntryUi = false;
sceneManager.ChangeScene("Main Menu"); sceneManager.ChangeScene("Main Menu");
} }
@ -240,7 +254,11 @@ namespace OpenDiablo2.Scenes
renderWindow.Draw(heroDesc2Label); renderWindow.Draw(heroDesc2Label);
renderWindow.Draw(heroDesc3Label); renderWindow.Draw(heroDesc3Label);
} }
exitButton.Render(); exitButton.Render();
if (showEntryUi)
okButton.Render();
} }
private void RenderHeros() private void RenderHeros()
@ -313,6 +331,7 @@ namespace OpenDiablo2.Scenes
} }
exitButton.Update(); exitButton.Update();
okButton.Update();
} }
private void UpdateHeroSelectionHover(eHero hero, long ms, bool canSelect) private void UpdateHeroSelectionHover(eHero hero, long ms, bool canSelect)
@ -365,6 +384,7 @@ namespace OpenDiablo2.Scenes
if (mouseHover && mouseInfoProvider.LeftMouseDown) if (mouseHover && mouseInfoProvider.LeftMouseDown)
{ {
showEntryUi = true;
renderInfo.Stance = eHeroStance.Approaching; renderInfo.Stance = eHeroStance.Approaching;
renderInfo.SpecialFrameTime = 0; renderInfo.SpecialFrameTime = 0;