mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-30 07:06:18 -04:00
Added mouse support. Started font support. Added screenshot
This commit is contained in:
parent
4d124ad959
commit
411d8830f1
16
OpenDiablo2.Common/Interfaces/IMouseInfoProvider.cs
Normal file
16
OpenDiablo2.Common/Interfaces/IMouseInfoProvider.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpenDiablo2.Common.Interfaces
|
||||
{
|
||||
public interface IMouseInfoProvider
|
||||
{
|
||||
int MouseX { get; }
|
||||
int MouseY { get; }
|
||||
bool LeftMouseDown { get; }
|
||||
bool RightMouseDown { get; }
|
||||
}
|
||||
}
|
16
OpenDiablo2.Common/Interfaces/ITextLabel.cs
Normal file
16
OpenDiablo2.Common/Interfaces/ITextLabel.cs
Normal file
@ -0,0 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpenDiablo2.Common.Interfaces
|
||||
{
|
||||
public interface ITextLabel
|
||||
{
|
||||
string Text { get; set; }
|
||||
Point Position { get; set; }
|
||||
ISprite Font { get; set; }
|
||||
}
|
||||
}
|
@ -75,6 +75,8 @@
|
||||
<Compile Include="Interfaces\IRenderWindow.cs" />
|
||||
<Compile Include="Interfaces\IScene.cs" />
|
||||
<Compile Include="Interfaces\ISprite.cs" />
|
||||
<Compile Include="Interfaces\IMouseInfoProvider.cs" />
|
||||
<Compile Include="Interfaces\ITextLabel.cs" />
|
||||
<Compile Include="Models\BitStream.cs" />
|
||||
<Compile Include="Models\GlobalConfiguration.cs" />
|
||||
<Compile Include="Models\ImageSet.cs" />
|
||||
|
@ -12,12 +12,18 @@ using Autofac;
|
||||
|
||||
namespace OpenDiablo2.SDL2_
|
||||
{
|
||||
public sealed class SDL2RenderWindow : IRenderWindow, IRenderTarget
|
||||
public sealed class SDL2RenderWindow : IRenderWindow, IRenderTarget, IMouseInfoProvider
|
||||
{
|
||||
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 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;
|
||||
|
||||
private readonly ILifetimeScope lifetimeScope;
|
||||
|
||||
public SDL2RenderWindow(ILifetimeScope lifetimeScope)
|
||||
@ -38,6 +44,8 @@ namespace OpenDiablo2.SDL2_
|
||||
|
||||
SDL.SDL_SetRenderDrawBlendMode(renderer, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
|
||||
|
||||
SDL.SDL_ShowCursor(0);
|
||||
|
||||
running = true;
|
||||
|
||||
}
|
||||
@ -63,8 +71,18 @@ namespace OpenDiablo2.SDL2_
|
||||
{
|
||||
while (SDL.SDL_PollEvent(out SDL.SDL_Event evt) != 0)
|
||||
{
|
||||
if (evt.type == SDL.SDL_EventType.SDL_MOUSEMOTION)
|
||||
{
|
||||
MouseX = evt.motion.x;
|
||||
MouseY = evt.motion.y;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (evt.type == SDL.SDL_EventType.SDL_QUIT)
|
||||
{
|
||||
running = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -69,9 +69,9 @@ namespace OpenDiablo2.SDL2_
|
||||
private Color AdjustColor(Color source)
|
||||
=> Color.FromArgb(
|
||||
source.A,
|
||||
(byte)Math.Min((float)source.R * 1.2, 255),
|
||||
(byte)Math.Min((float)source.G * 1.2, 255),
|
||||
(byte)Math.Min((float)source.B * 1.2, 255)
|
||||
(byte)Math.Min((float)source.R * 1.4, 255),
|
||||
(byte)Math.Min((float)source.G * 1.4, 255),
|
||||
(byte)Math.Min((float)source.B * 1.4, 255)
|
||||
);
|
||||
|
||||
private IntPtr LoadFrame(ImageFrame frame, IntPtr renderer)
|
||||
|
@ -18,33 +18,42 @@ namespace OpenDiablo2.Scenes
|
||||
private readonly IRenderWindow renderWindow;
|
||||
private readonly IPaletteProvider paletteProvider;
|
||||
private readonly IMPQProvider mpqProvider;
|
||||
private readonly IMouseInfoProvider mouseInfoProvider;
|
||||
|
||||
private float logoFrame;
|
||||
private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack;
|
||||
private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack, mouseSprite;
|
||||
|
||||
public MainMenu(
|
||||
IRenderWindow renderWindow,
|
||||
IPaletteProvider paletteProvider,
|
||||
IMPQProvider mpqProvider
|
||||
IMPQProvider mpqProvider,
|
||||
IMouseInfoProvider mouseInfoProvider
|
||||
)
|
||||
{
|
||||
this.renderWindow = renderWindow;
|
||||
this.paletteProvider = paletteProvider;
|
||||
this.mpqProvider = mpqProvider;
|
||||
this.mouseInfoProvider = mouseInfoProvider;
|
||||
|
||||
//var texture = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\Logo\\logo.DC6")));
|
||||
backgroundSprite = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\trademarkscreenEXP.DC6")));
|
||||
backgroundSprite = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\gameselectscreenEXP.dc6")));
|
||||
backgroundSprite.CurrentPalette = paletteProvider.PaletteTable["Sky"];
|
||||
|
||||
diabloLogoLeft = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoFireLeft.DC6")));
|
||||
diabloLogoLeft.CurrentPalette = paletteProvider.PaletteTable["Units"];
|
||||
|
||||
diabloLogoRight = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoFireRight.DC6")));
|
||||
diabloLogoRight.CurrentPalette = paletteProvider.PaletteTable["Units"];
|
||||
|
||||
diabloLogoLeftBlack = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoBlackLeft.DC6")));
|
||||
diabloLogoLeftBlack.CurrentPalette = paletteProvider.PaletteTable["Units"];
|
||||
|
||||
diabloLogoRightBlack = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoBlackRight.DC6")));
|
||||
diabloLogoRightBlack.CurrentPalette = paletteProvider.PaletteTable["Units"];
|
||||
|
||||
mouseSprite = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\CURSOR\\ohand.DC6")));
|
||||
mouseSprite.CurrentPalette = paletteProvider.PaletteTable["STATIC"];
|
||||
|
||||
logoFrame = 0f;
|
||||
|
||||
diabloLogoLeft.Location = new Point(400, 120);
|
||||
@ -76,6 +85,9 @@ namespace OpenDiablo2.Scenes
|
||||
diabloLogoRight.Frame = (int)((float)diabloLogoRight.TotalFrames * logoFrame);
|
||||
renderWindow.Draw(diabloLogoRight);
|
||||
|
||||
mouseSprite.Location = new Point(mouseInfoProvider.MouseX, mouseInfoProvider.MouseY + mouseSprite.FrameSize.Height - 1);
|
||||
renderWindow.Draw(mouseSprite);
|
||||
|
||||
renderWindow.Sync();
|
||||
}
|
||||
|
||||
|
BIN
Screenshot.png
Normal file
BIN
Screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 467 KiB |
Loading…
Reference in New Issue
Block a user