1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-12-25 11:36:26 -05:00

Finished button logic. Added github and quit buttons.

This commit is contained in:
Tim Sarbin 2018-11-22 18:46:24 -05:00
parent 2e90e71c79
commit 9749fc7b75
5 changed files with 88 additions and 7 deletions

View File

@ -12,5 +12,6 @@ namespace OpenDiablo2.Common.Interfaces
int MouseY { get; }
bool LeftMouseDown { get; }
bool RightMouseDown { get; }
bool ReserveMouse { get; set; }
}
}

View File

@ -15,6 +15,7 @@ namespace OpenDiablo2.Common.Interfaces
void Update();
void Clear();
void Sync();
void Quit();
ISprite LoadSprite(string resourcePath, string palette, Point location);
ISprite LoadSprite(string resourcePath, string palette);
IFont LoadFont(string resourcePath, string palette);

View File

@ -33,6 +33,8 @@ namespace OpenDiablo2.Core.UI
private IFont font;
private ILabel label;
private bool pressed = false;
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 Point labelOffset = new Point();
private string text;
@ -69,7 +71,32 @@ namespace OpenDiablo2.Core.UI
var hovered = (mouseInfoProvider.MouseX >= location.X && mouseInfoProvider.MouseX < (location.X + buttonWidth))
&& (mouseInfoProvider.MouseY >= location.Y && mouseInfoProvider.MouseY < (location.Y + buttonHeight));
pressed = hovered;
if (!activeLock && hovered && mouseInfoProvider.LeftMouseDown && !mouseInfoProvider.ReserveMouse)
{
// The button is being pressed down
mouseInfoProvider.ReserveMouse = true;
active = true;
}
else if (active && !mouseInfoProvider.LeftMouseDown)
{
mouseInfoProvider.ReserveMouse = false;
active = false;
if (hovered)
OnActivate?.Invoke();
}
else if (!active && mouseInfoProvider.LeftMouseDown)
{
activeLock = true;
}
else if (activeLock && !mouseInfoProvider.LeftMouseDown)
{
activeLock = false;
}
pressed = (hovered && mouseInfoProvider.LeftMouseDown && active);
}
public void Render()

View File

@ -17,13 +17,13 @@ namespace OpenDiablo2.SDL2_
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private IntPtr window, renderer;
private bool running;
public bool IsRunning => running;
public bool IsRunning { get; private set; }
public int MouseX { get; internal set; } = 0;
public int MouseY { get; internal set; } = 0;
public bool LeftMouseDown { get; internal set; } = false;
public bool RightMouseDown { get; internal set; } = false;
public bool ReserveMouse { get; set; } = false;
private readonly IMPQProvider mpqProvider;
private readonly IPaletteProvider paletteProvider;
@ -52,9 +52,12 @@ namespace OpenDiablo2.SDL2_
SDL.SDL_ShowCursor(0);
running = true;
IsRunning = true;
}
public void Quit() => IsRunning = false;
public void Dispose()
{
SDL.SDL_DestroyRenderer(renderer);
@ -84,9 +87,35 @@ namespace OpenDiablo2.SDL2_
continue;
}
if (evt.type == SDL.SDL_EventType.SDL_QUIT)
else if (evt.type == SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN)
{
running = false;
switch((uint)evt.button.button)
{
case SDL.SDL_BUTTON_LEFT:
LeftMouseDown = true;
break;
case SDL.SDL_BUTTON_RIGHT:
RightMouseDown = true;
break;
}
}
else if (evt.type == SDL.SDL_EventType.SDL_MOUSEBUTTONUP)
{
switch ((uint)evt.button.button)
{
case SDL.SDL_BUTTON_LEFT:
LeftMouseDown = false;
break;
case SDL.SDL_BUTTON_RIGHT:
RightMouseDown = false;
break;
}
}
else if (evt.type == SDL.SDL_EventType.SDL_QUIT)
{
IsRunning = false;
continue;
}
}

View File

@ -28,7 +28,7 @@ namespace OpenDiablo2.Scenes
private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack;
private IFont labelFont;
private ILabel versionLabel, urlLabel;
private WideButton btnSinglePlayer;
private WideButton btnSinglePlayer, btnExit, btnWebsite;
public MainMenu(
IRenderWindow renderWindow,
@ -55,6 +55,17 @@ namespace OpenDiablo2.Scenes
btnSinglePlayer = createWideButton();
btnSinglePlayer.Text = "Single Player".ToUpper();
btnSinglePlayer.Location = new Point(264, 290);
btnSinglePlayer.OnActivate = OnSinglePlayerClicked;
btnWebsite = createWideButton();
btnWebsite.Text = "Visible Github".ToUpper();
btnWebsite.Location = new Point(264, 460);
btnWebsite.OnActivate = OnVisitWebsiteClicked;
btnExit = createWideButton();
btnExit.Text = "Exit Diablo II".ToUpper();
btnExit.Location = new Point(264, 500);
btnExit.OnActivate = OnExitClicked;
labelFont = renderWindow.LoadFont(ResourcePaths.Font16, Palettes.Static);
versionLabel = renderWindow.CreateLabel(labelFont, new Point(50, 555), "v0.01 Pre-Alpha");
@ -84,6 +95,9 @@ namespace OpenDiablo2.Scenes
musicProvider.PlaySong();
}
private void OnVisitWebsiteClicked()
=> System.Diagnostics.Process.Start("https://github.com/essial/OpenDiablo2/");
public void Render()
{
// Render the background
@ -101,6 +115,8 @@ namespace OpenDiablo2.Scenes
// Render the UI buttons
btnSinglePlayer.Render();
btnWebsite.Render();
btnExit.Render();
//wideButton.Location = new Point(264, 290);
//renderWindow.Draw(wideButton, 2, 1, 0);
@ -114,6 +130,8 @@ namespace OpenDiablo2.Scenes
logoFrame -= 1f;
btnSinglePlayer.Update();
btnWebsite.Update();
btnExit.Update();
}
@ -126,5 +144,10 @@ namespace OpenDiablo2.Scenes
{
}
private void OnExitClicked()
{
renderWindow.Quit();
}
}
}