mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-27 21:56:19 -04:00
Cleaned up rendering logic to reduce verbose code
This commit is contained in:
parent
68d942ab4a
commit
78190b12d6
12
OpenDiablo2.Common/Interfaces/IFont.cs
Normal file
12
OpenDiablo2.Common/Interfaces/IFont.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpenDiablo2.Common.Interfaces
|
||||
{
|
||||
public interface IFont
|
||||
{
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
using OpenDiablo2.Common.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
@ -14,8 +15,10 @@ namespace OpenDiablo2.Common.Interfaces
|
||||
void Update();
|
||||
void Clear();
|
||||
void Sync();
|
||||
ISprite LoadSprite(ImageSet source);
|
||||
ISprite LoadSprite(string resourcePath, string palette, Point location);
|
||||
ISprite LoadSprite(string resourcePath, string palette);
|
||||
void Draw(ISprite sprite);
|
||||
void Draw(ISprite sprite, int frame);
|
||||
void Draw(ISprite sprite, int xSegments, int ySegments, int offset);
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,6 @@ namespace OpenDiablo2.Common.Interfaces
|
||||
{
|
||||
string Text { get; set; }
|
||||
Point Position { get; set; }
|
||||
ISprite Font { get; set; }
|
||||
IFont Font { get; set; }
|
||||
}
|
||||
}
|
||||
|
@ -68,6 +68,7 @@
|
||||
<ItemGroup>
|
||||
<Compile Include="Attributes\SceneAttribute.cs" />
|
||||
<Compile Include="Enums\eMPQFormatVersion.cs" />
|
||||
<Compile Include="Interfaces\IFont.cs" />
|
||||
<Compile Include="Interfaces\IGameEngine.cs" />
|
||||
<Compile Include="Interfaces\IMPQProvider.cs" />
|
||||
<Compile Include="Interfaces\IMusicProvider.cs" />
|
||||
@ -88,7 +89,9 @@
|
||||
<Compile Include="Models\Palette.cs" />
|
||||
<Compile Include="Models\PKLibDecompress.cs" />
|
||||
<Compile Include="Models\SoundEntry.cs" />
|
||||
<Compile Include="Palettes.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="ResourcePaths.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
|
30
OpenDiablo2.Common/Palettes.cs
Normal file
30
OpenDiablo2.Common/Palettes.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpenDiablo2.Common
|
||||
{
|
||||
public static class Palettes
|
||||
{
|
||||
public static string Act1 => "ACT1";
|
||||
public static string Act2 => "ACT2";
|
||||
public static string Act3 => "ACT3";
|
||||
public static string Act4 => "ACT4";
|
||||
public static string Act5 => "ACT5";
|
||||
public static string EndGame => "EndGame";
|
||||
public static string EndGame2 => "EndGame2";
|
||||
public static string Fechar => "fechar";
|
||||
public static string Loading => "loading";
|
||||
public static string Menu0 => "Menu0";
|
||||
public static string Menu1 => "menu1";
|
||||
public static string Menu2 => "menu2";
|
||||
public static string Menu3 => "menu3";
|
||||
public static string Menu4 => "menu4";
|
||||
public static string Sky => "Sky";
|
||||
public static string Static => "STATIC";
|
||||
public static string Trademark => "Trademark";
|
||||
public static string Units => "Units";
|
||||
}
|
||||
}
|
24
OpenDiablo2.Common/ResourcePaths.cs
Normal file
24
OpenDiablo2.Common/ResourcePaths.cs
Normal file
@ -0,0 +1,24 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpenDiablo2.Common
|
||||
{
|
||||
public static class ResourcePaths
|
||||
{
|
||||
// --- Loading Screen ---
|
||||
public static string LoadingScreen = "data\\global\\ui\\Loading\\loadingscreen.dc6";
|
||||
|
||||
// --- Main Menu ---
|
||||
public static string GameSelectScreen = "data\\global\\ui\\FrontEnd\\gameselectscreenEXP.dc6";
|
||||
public static string Diablo2LogoFireLeft = "data\\global\\ui\\FrontEnd\\D2logoFireLeft.DC6";
|
||||
public static string Diablo2LogoFireRight = "data\\global\\ui\\FrontEnd\\D2logoFireRight.DC6";
|
||||
public static string Diablo2LogoBlackLeft = "data\\global\\ui\\FrontEnd\\D2logoBlackLeft.DC6";
|
||||
public static string Diablo2LogoBlackRight = "data\\global\\ui\\FrontEnd\\D2logoBlackRight.DC6";
|
||||
|
||||
// --- Mouse Pointers ---
|
||||
public static string CursorDefault = "data\\global\\ui\\CURSOR\\ohand.DC6";
|
||||
}
|
||||
}
|
@ -16,7 +16,7 @@ namespace OpenDiablo2.Core
|
||||
static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private readonly IMPQProvider mpqProvider;
|
||||
private readonly IRenderWindow renderWindow;
|
||||
private readonly Func<IRenderWindow> getRenderWindow;
|
||||
private readonly Func<string, IScene> getScene;
|
||||
private IScene currentScene;
|
||||
|
||||
@ -27,10 +27,10 @@ namespace OpenDiablo2.Core
|
||||
private Stopwatch sw = new Stopwatch();
|
||||
|
||||
|
||||
public GameEngine(IMPQProvider mpqProvider, IRenderWindow renderWindow, Func<string, IScene> getScene)
|
||||
public GameEngine(IMPQProvider mpqProvider, Func<IRenderWindow> getRenderWindow, Func<string, IScene> getScene)
|
||||
{
|
||||
this.mpqProvider = mpqProvider;
|
||||
this.renderWindow = renderWindow;
|
||||
this.getRenderWindow = getRenderWindow;
|
||||
this.getScene = getScene;
|
||||
|
||||
MPQs = mpqProvider.GetMPQs().ToArray();
|
||||
@ -68,7 +68,7 @@ namespace OpenDiablo2.Core
|
||||
|
||||
currentScene = getScene("Main Menu");
|
||||
sw.Start();
|
||||
while (renderWindow.IsRunning)
|
||||
while (getRenderWindow().IsRunning)
|
||||
{
|
||||
while (sw.ElapsedMilliseconds < 16)
|
||||
Thread.Sleep(1); // Oh yes we did
|
||||
@ -82,7 +82,7 @@ namespace OpenDiablo2.Core
|
||||
continue;
|
||||
}
|
||||
sw.Restart();
|
||||
renderWindow.Update();
|
||||
getRenderWindow().Update();
|
||||
currentScene.Update(ms);
|
||||
|
||||
currentScene.Render();
|
||||
|
@ -15,6 +15,7 @@ namespace OpenDiablo2.SDL2_
|
||||
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;
|
||||
@ -24,11 +25,16 @@ namespace OpenDiablo2.SDL2_
|
||||
public bool LeftMouseDown { get; internal set; } = false;
|
||||
public bool RightMouseDown { get; internal set; } = false;
|
||||
|
||||
private readonly ILifetimeScope lifetimeScope;
|
||||
private readonly IMPQProvider mpqProvider;
|
||||
private readonly IPaletteProvider paletteProvider;
|
||||
|
||||
public SDL2RenderWindow(ILifetimeScope lifetimeScope)
|
||||
public SDL2RenderWindow(
|
||||
IMPQProvider mpqProvider,
|
||||
IPaletteProvider paletteProvider
|
||||
)
|
||||
{
|
||||
this.lifetimeScope = lifetimeScope;
|
||||
this.mpqProvider = mpqProvider;
|
||||
this.paletteProvider = paletteProvider;
|
||||
|
||||
SDL.SDL_Init(SDL.SDL_INIT_EVERYTHING);
|
||||
if (SDL.SDL_SetHint(SDL.SDL_HINT_RENDER_SCALE_QUALITY, "0") == SDL.SDL_bool.SDL_FALSE)
|
||||
@ -87,6 +93,12 @@ namespace OpenDiablo2.SDL2_
|
||||
}
|
||||
|
||||
|
||||
public void Draw(ISprite sprite, int frame)
|
||||
{
|
||||
sprite.Frame = frame;
|
||||
Draw(sprite);
|
||||
}
|
||||
|
||||
public void Draw(ISprite sprite)
|
||||
{
|
||||
var spr = sprite as SDL2Sprite;
|
||||
@ -128,7 +140,13 @@ namespace OpenDiablo2.SDL2_
|
||||
}
|
||||
}
|
||||
|
||||
public ISprite LoadSprite(ImageSet source)
|
||||
=> new SDL2Sprite(source, renderer);
|
||||
public ISprite LoadSprite(string resourcePath, string palette) => LoadSprite(resourcePath, palette, Point.Empty);
|
||||
public ISprite LoadSprite(string resourcePath, string palette, Point location)
|
||||
{
|
||||
var result = new SDL2Sprite(ImageSet.LoadFromStream(mpqProvider.GetStream(resourcePath)), renderer);
|
||||
result.CurrentPalette = paletteProvider.PaletteTable[palette];
|
||||
result.Location = location;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using OpenDiablo2.Common.Attributes;
|
||||
using OpenDiablo2.Common;
|
||||
using OpenDiablo2.Common.Attributes;
|
||||
using OpenDiablo2.Common.Interfaces;
|
||||
using OpenDiablo2.Common.Models;
|
||||
using System;
|
||||
@ -38,40 +39,18 @@ namespace OpenDiablo2.Scenes
|
||||
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\\gameselectscreenEXP.dc6")));
|
||||
backgroundSprite.CurrentPalette = paletteProvider.PaletteTable["Sky"];
|
||||
backgroundSprite.Location = new Point(0, 0);
|
||||
backgroundSprite = renderWindow.LoadSprite(ResourcePaths.GameSelectScreen, Palettes.Sky);
|
||||
diabloLogoLeft = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoFireLeft, Palettes.Units, new Point(400, 120));
|
||||
diabloLogoRight = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoFireRight, Palettes.Units, new Point(400, 120));
|
||||
diabloLogoLeftBlack = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoBlackLeft, Palettes.Units, new Point(400, 120));
|
||||
diabloLogoRightBlack = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoBlackRight, Palettes.Units, new Point(400, 120));
|
||||
|
||||
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"];
|
||||
|
||||
wideButton = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\WideButtonBlank.dc6")));
|
||||
wideButton.CurrentPalette = paletteProvider.PaletteTable["ACT1"];
|
||||
|
||||
logoFrame = 0f;
|
||||
|
||||
diabloLogoLeft.Location = new Point(400, 120);
|
||||
diabloLogoRight.Location = new Point(400, 120);
|
||||
diabloLogoLeftBlack.Location = new Point(400, 120);
|
||||
diabloLogoRightBlack.Location = new Point(400, 120);
|
||||
mouseSprite = renderWindow.LoadSprite(ResourcePaths.CursorDefault, Palettes.Units);
|
||||
wideButton = renderWindow.LoadSprite("data\\global\\ui\\FrontEnd\\WideButtonBlank.dc6", "ACT1");
|
||||
|
||||
|
||||
var loadingSprite = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\Loading\\loadingscreen.dc6")));
|
||||
loadingSprite.CurrentPalette = paletteProvider.PaletteTable["loading"];
|
||||
loadingSprite.Location = new Point(300, 400);
|
||||
var loadingSprite = renderWindow.LoadSprite(ResourcePaths.LoadingScreen, Palettes.Loading, new Point(300, 400));
|
||||
|
||||
renderWindow.Clear();
|
||||
renderWindow.Draw(loadingSprite);
|
||||
renderWindow.Sync();
|
||||
@ -99,15 +78,11 @@ namespace OpenDiablo2.Scenes
|
||||
|
||||
renderWindow.Draw(backgroundSprite, 4, 3, 0);
|
||||
|
||||
diabloLogoLeftBlack.Frame = (int)((float)diabloLogoLeftBlack.TotalFrames * logoFrame);
|
||||
renderWindow.Draw(diabloLogoLeftBlack);
|
||||
diabloLogoRightBlack.Frame = (int)((float)diabloLogoRightBlack.TotalFrames * logoFrame);
|
||||
renderWindow.Draw(diabloLogoRightBlack);
|
||||
renderWindow.Draw(diabloLogoLeftBlack, (int)((float)diabloLogoLeftBlack.TotalFrames * logoFrame));
|
||||
renderWindow.Draw(diabloLogoRightBlack, (int)((float)diabloLogoRightBlack.TotalFrames * logoFrame));
|
||||
|
||||
diabloLogoLeft.Frame = (int)((float)diabloLogoLeft.TotalFrames * logoFrame);
|
||||
renderWindow.Draw(diabloLogoLeft);
|
||||
diabloLogoRight.Frame = (int)((float)diabloLogoRight.TotalFrames * logoFrame);
|
||||
renderWindow.Draw(diabloLogoRight);
|
||||
renderWindow.Draw(diabloLogoLeft, (int)((float)diabloLogoLeft.TotalFrames * logoFrame));
|
||||
renderWindow.Draw(diabloLogoRight, (int)((float)diabloLogoRight.TotalFrames * logoFrame));
|
||||
|
||||
wideButton.Location = new Point(264, 290);
|
||||
renderWindow.Draw(wideButton, 2, 1, 0);
|
||||
|
Loading…
Reference in New Issue
Block a user