mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-30 07:06:18 -04:00
Started work on character select screen. Disabled audio to prevent crashes.
This commit is contained in:
parent
9749fc7b75
commit
fcc3293aad
13
OpenDiablo2.Common/Interfaces/ISceneManager.cs
Normal file
13
OpenDiablo2.Common/Interfaces/ISceneManager.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace OpenDiablo2.Common.Interfaces
|
||||||
|
{
|
||||||
|
public interface ISceneManager
|
||||||
|
{
|
||||||
|
void ChangeScene(string sceneName);
|
||||||
|
}
|
||||||
|
}
|
@ -35,6 +35,8 @@ namespace OpenDiablo2.Common.Models
|
|||||||
|
|
||||||
public sealed class ImageSet
|
public sealed class ImageSet
|
||||||
{
|
{
|
||||||
|
static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private UInt32 version;
|
private UInt32 version;
|
||||||
private UInt32 unknown1; // 01 00 00 00 ???
|
private UInt32 unknown1; // 01 00 00 00 ???
|
||||||
private UInt32 unknown2; // 00 00 00 00 ???
|
private UInt32 unknown2; // 00 00 00 00 ???
|
||||||
@ -118,8 +120,6 @@ namespace OpenDiablo2.Common.Models
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,9 @@
|
|||||||
<Reference Include="ICSharpCode.SharpZipLib, Version=0.84.0.0, Culture=neutral, PublicKeyToken=1b03e6acf1164f73">
|
<Reference Include="ICSharpCode.SharpZipLib, Version=0.84.0.0, Culture=neutral, PublicKeyToken=1b03e6acf1164f73">
|
||||||
<HintPath>..\packages\NetSword.Common.ICSharpCode.SharpZipLib.0.84.0\lib\ICSharpCode.SharpZipLib.dll</HintPath>
|
<HintPath>..\packages\NetSword.Common.ICSharpCode.SharpZipLib.0.84.0\lib\ICSharpCode.SharpZipLib.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
@ -77,6 +80,7 @@
|
|||||||
<Compile Include="Interfaces\IRenderTarget.cs" />
|
<Compile Include="Interfaces\IRenderTarget.cs" />
|
||||||
<Compile Include="Interfaces\IRenderWindow.cs" />
|
<Compile Include="Interfaces\IRenderWindow.cs" />
|
||||||
<Compile Include="Interfaces\IScene.cs" />
|
<Compile Include="Interfaces\IScene.cs" />
|
||||||
|
<Compile Include="Interfaces\ISceneManager.cs" />
|
||||||
<Compile Include="Interfaces\ISprite.cs" />
|
<Compile Include="Interfaces\ISprite.cs" />
|
||||||
<Compile Include="Interfaces\IMouseInfoProvider.cs" />
|
<Compile Include="Interfaces\IMouseInfoProvider.cs" />
|
||||||
<Compile Include="Interfaces\ITextLabel.cs" />
|
<Compile Include="Interfaces\ITextLabel.cs" />
|
||||||
|
@ -18,6 +18,10 @@ namespace OpenDiablo2.Common
|
|||||||
public static string Diablo2LogoBlackLeft = "data\\global\\ui\\FrontEnd\\D2logoBlackLeft.DC6";
|
public static string Diablo2LogoBlackLeft = "data\\global\\ui\\FrontEnd\\D2logoBlackLeft.DC6";
|
||||||
public static string Diablo2LogoBlackRight = "data\\global\\ui\\FrontEnd\\D2logoBlackRight.DC6";
|
public static string Diablo2LogoBlackRight = "data\\global\\ui\\FrontEnd\\D2logoBlackRight.DC6";
|
||||||
|
|
||||||
|
// --- Character Select Screen ---
|
||||||
|
public static string CharacterSelectBackground = "data\\global\\ui\\FrontEnd\\charactercreationscreenEXP.dc6";
|
||||||
|
public static string CharacterSelectCampfire = "data\\global\\ui\\FrontEnd\\fire.DC6";
|
||||||
|
|
||||||
// --- Mouse Pointers ---
|
// --- Mouse Pointers ---
|
||||||
public static string CursorDefault = "data\\global\\ui\\CURSOR\\ohand.DC6";
|
public static string CursorDefault = "data\\global\\ui\\CURSOR\\ohand.DC6";
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="DotNetZip" version="1.12.0" targetFramework="net461" />
|
<package id="DotNetZip" version="1.12.0" targetFramework="net461" />
|
||||||
|
<package id="log4net" version="2.0.8" targetFramework="net461" />
|
||||||
<package id="NetSword.Common.ICSharpCode.SharpZipLib" version="0.84.0" targetFramework="net461" developmentDependency="true" />
|
<package id="NetSword.Common.ICSharpCode.SharpZipLib" version="0.84.0" targetFramework="net461" developmentDependency="true" />
|
||||||
<package id="SharpZipLib" version="1.0.0" targetFramework="net461" />
|
<package id="SharpZipLib" version="1.0.0" targetFramework="net461" />
|
||||||
</packages>
|
</packages>
|
@ -12,7 +12,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace OpenDiablo2.Core
|
namespace OpenDiablo2.Core
|
||||||
{
|
{
|
||||||
public sealed class GameEngine : IGameEngine, IPaletteProvider
|
public sealed class GameEngine : IGameEngine, IPaletteProvider, ISceneManager
|
||||||
{
|
{
|
||||||
static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
@ -21,6 +21,7 @@ namespace OpenDiablo2.Core
|
|||||||
private readonly Func<IMouseInfoProvider> getMouseInfoProvider;
|
private readonly Func<IMouseInfoProvider> getMouseInfoProvider;
|
||||||
private readonly Func<string, IScene> getScene;
|
private readonly Func<string, IScene> getScene;
|
||||||
private IScene currentScene;
|
private IScene currentScene;
|
||||||
|
private IScene nextScene = null;
|
||||||
private ISprite mouseSprite;
|
private ISprite mouseSprite;
|
||||||
|
|
||||||
private readonly MPQ[] MPQs;
|
private readonly MPQ[] MPQs;
|
||||||
@ -98,6 +99,13 @@ namespace OpenDiablo2.Core
|
|||||||
sw.Restart();
|
sw.Restart();
|
||||||
getRenderWindow().Update();
|
getRenderWindow().Update();
|
||||||
currentScene.Update(ms);
|
currentScene.Update(ms);
|
||||||
|
if (nextScene!= null)
|
||||||
|
{
|
||||||
|
currentScene.Dispose();
|
||||||
|
currentScene = nextScene;
|
||||||
|
nextScene = null;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
renderWindow.Clear();
|
renderWindow.Clear();
|
||||||
currentScene.Render();
|
currentScene.Render();
|
||||||
@ -111,7 +119,10 @@ namespace OpenDiablo2.Core
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
currentScene?.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
public void ChangeScene(string sceneName)
|
||||||
|
=> nextScene = getScene(sceneName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ namespace OpenDiablo2.SDL2_
|
|||||||
{
|
{
|
||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
this.font = font as SDL2Font;
|
this.font = font as SDL2Font;
|
||||||
texture = IntPtr.Zero;
|
this.texture = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Size CalculateSize()
|
internal Size CalculateSize()
|
||||||
@ -118,6 +118,7 @@ namespace OpenDiablo2.SDL2_
|
|||||||
{
|
{
|
||||||
if (texture != IntPtr.Zero)
|
if (texture != IntPtr.Zero)
|
||||||
SDL.SDL_DestroyTexture(texture);
|
SDL.SDL_DestroyTexture(texture);
|
||||||
|
texture = IntPtr.Zero;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -159,6 +159,7 @@ namespace OpenDiablo2.SDL2_
|
|||||||
for (var x = 0; x < xSegments; x++)
|
for (var x = 0; x < xSegments; x++)
|
||||||
{
|
{
|
||||||
var textureIndex = x + (y * xSegments) + (offset * xSegments * ySegments);
|
var textureIndex = x + (y * xSegments) + (offset * xSegments * ySegments);
|
||||||
|
textureIndex = Math.Min(spr.textures.Count() - 1, Math.Max(0, textureIndex));
|
||||||
if (textureIndex >= spr.textures.Count())
|
if (textureIndex >= spr.textures.Count())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -14,6 +14,8 @@ namespace OpenDiablo2.SDL2_
|
|||||||
{
|
{
|
||||||
internal sealed class SDL2Sprite : ISprite
|
internal sealed class SDL2Sprite : ISprite
|
||||||
{
|
{
|
||||||
|
static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
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();
|
||||||
public int Frame { get; set; }
|
public int Frame { get; set; }
|
||||||
@ -26,6 +28,7 @@ namespace OpenDiablo2.SDL2_
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
blend = value;
|
blend = value;
|
||||||
|
|
||||||
foreach (var texture in textures)
|
foreach (var texture in textures)
|
||||||
SDL.SDL_SetTextureBlendMode(texture, blend ? SDL.SDL_BlendMode.SDL_BLENDMODE_ADD : SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
|
SDL.SDL_SetTextureBlendMode(texture, blend ? SDL.SDL_BlendMode.SDL_BLENDMODE_ADD : SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
|
||||||
}
|
}
|
||||||
@ -130,8 +133,8 @@ namespace OpenDiablo2.SDL2_
|
|||||||
foreach (var texture in textures)
|
foreach (var texture in textures)
|
||||||
{
|
{
|
||||||
SDL.SDL_DestroyTexture(texture);
|
SDL.SDL_DestroyTexture(texture);
|
||||||
|
}
|
||||||
}
|
textures = new IntPtr[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ namespace OpenDiablo2.Scenes
|
|||||||
private readonly IMPQProvider mpqProvider;
|
private readonly IMPQProvider mpqProvider;
|
||||||
private readonly IMouseInfoProvider mouseInfoProvider;
|
private readonly IMouseInfoProvider mouseInfoProvider;
|
||||||
private readonly IMusicProvider musicProvider;
|
private readonly IMusicProvider musicProvider;
|
||||||
|
private readonly ISceneManager sceneManager;
|
||||||
|
|
||||||
private float logoFrame;
|
private float logoFrame;
|
||||||
private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack;
|
private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack;
|
||||||
@ -36,6 +37,7 @@ namespace OpenDiablo2.Scenes
|
|||||||
IMPQProvider mpqProvider,
|
IMPQProvider mpqProvider,
|
||||||
IMouseInfoProvider mouseInfoProvider,
|
IMouseInfoProvider mouseInfoProvider,
|
||||||
IMusicProvider musicProvider,
|
IMusicProvider musicProvider,
|
||||||
|
ISceneManager sceneManager,
|
||||||
Func<WideButton> createWideButton
|
Func<WideButton> createWideButton
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -43,6 +45,7 @@ namespace OpenDiablo2.Scenes
|
|||||||
this.paletteProvider = paletteProvider;
|
this.paletteProvider = paletteProvider;
|
||||||
this.mpqProvider = mpqProvider;
|
this.mpqProvider = mpqProvider;
|
||||||
this.mouseInfoProvider = mouseInfoProvider;
|
this.mouseInfoProvider = mouseInfoProvider;
|
||||||
|
this.sceneManager = sceneManager;
|
||||||
|
|
||||||
backgroundSprite = renderWindow.LoadSprite(ResourcePaths.GameSelectScreen, Palettes.Sky);
|
backgroundSprite = renderWindow.LoadSprite(ResourcePaths.GameSelectScreen, Palettes.Sky);
|
||||||
diabloLogoLeft = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoFireLeft, Palettes.Units, new Point(400, 120));
|
diabloLogoLeft = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoFireLeft, Palettes.Units, new Point(400, 120));
|
||||||
@ -78,6 +81,7 @@ namespace OpenDiablo2.Scenes
|
|||||||
renderWindow.Draw(loadingSprite);
|
renderWindow.Draw(loadingSprite);
|
||||||
renderWindow.Sync();
|
renderWindow.Sync();
|
||||||
|
|
||||||
|
/*
|
||||||
musicProvider.LoadSong(mpqProvider.GetStream("data\\global\\music\\introedit.wav"));
|
musicProvider.LoadSong(mpqProvider.GetStream("data\\global\\music\\introedit.wav"));
|
||||||
|
|
||||||
// TODO: Fake loading for now, this should be in its own scene as we start loading real stuff
|
// TODO: Fake loading for now, this should be in its own scene as we start loading real stuff
|
||||||
@ -93,6 +97,7 @@ namespace OpenDiablo2.Scenes
|
|||||||
}
|
}
|
||||||
|
|
||||||
musicProvider.PlaySong();
|
musicProvider.PlaySong();
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnVisitWebsiteClicked()
|
private void OnVisitWebsiteClicked()
|
||||||
@ -141,9 +146,7 @@ namespace OpenDiablo2.Scenes
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void OnSinglePlayerClicked()
|
private void OnSinglePlayerClicked()
|
||||||
{
|
=> sceneManager.ChangeScene("Select Hero Class");
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnExitClicked()
|
private void OnExitClicked()
|
||||||
{
|
{
|
||||||
|
@ -52,6 +52,7 @@
|
|||||||
<Compile Include="AutofacModule.cs" />
|
<Compile Include="AutofacModule.cs" />
|
||||||
<Compile Include="MainMenu.cs" />
|
<Compile Include="MainMenu.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
|
<Compile Include="SelectHeroClass.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\OpenDiablo2.Common\OpenDiablo2.Common.csproj">
|
<ProjectReference Include="..\OpenDiablo2.Common\OpenDiablo2.Common.csproj">
|
||||||
|
76
OpenDiablo2.Scenes/SelectHeroClass.cs
Normal file
76
OpenDiablo2.Scenes/SelectHeroClass.cs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using OpenDiablo2.Common;
|
||||||
|
using OpenDiablo2.Common.Attributes;
|
||||||
|
using OpenDiablo2.Common.Interfaces;
|
||||||
|
|
||||||
|
namespace OpenDiablo2.Scenes
|
||||||
|
{
|
||||||
|
[Scene("Select Hero Class")]
|
||||||
|
public sealed class SelectHeroClass : IScene
|
||||||
|
{
|
||||||
|
static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
private readonly IRenderWindow renderWindow;
|
||||||
|
private readonly IPaletteProvider paletteProvider;
|
||||||
|
private readonly IMPQProvider mpqProvider;
|
||||||
|
private readonly IMouseInfoProvider mouseInfoProvider;
|
||||||
|
private readonly IMusicProvider musicProvider;
|
||||||
|
private readonly ISceneManager sceneManager;
|
||||||
|
|
||||||
|
private float secondTimer;
|
||||||
|
private ISprite backgroundSprite, campfireSprite;
|
||||||
|
private IFont headingFont;
|
||||||
|
private ILabel headingLabel;
|
||||||
|
|
||||||
|
public SelectHeroClass(
|
||||||
|
IRenderWindow renderWindow,
|
||||||
|
IPaletteProvider paletteProvider,
|
||||||
|
IMPQProvider mpqProvider,
|
||||||
|
IMouseInfoProvider mouseInfoProvider,
|
||||||
|
IMusicProvider musicProvider,
|
||||||
|
ISceneManager sceneManager
|
||||||
|
)
|
||||||
|
{
|
||||||
|
this.renderWindow = renderWindow;
|
||||||
|
this.paletteProvider = paletteProvider;
|
||||||
|
this.mpqProvider = mpqProvider;
|
||||||
|
this.mouseInfoProvider = mouseInfoProvider;
|
||||||
|
this.sceneManager = sceneManager;
|
||||||
|
|
||||||
|
backgroundSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBackground, Palettes.Fechar);
|
||||||
|
campfireSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectCampfire, Palettes.Fechar, new System.Drawing.Point(380, 335));
|
||||||
|
|
||||||
|
headingFont = renderWindow.LoadFont(ResourcePaths.Font30, Palettes.Units);
|
||||||
|
headingLabel = renderWindow.CreateLabel(headingFont);
|
||||||
|
headingLabel.Text = "Select Hero Class";
|
||||||
|
headingLabel.Location = new System.Drawing.Point(400 - (headingLabel.TextArea.Width / 2), 20);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Render()
|
||||||
|
{
|
||||||
|
renderWindow.Draw(backgroundSprite, 4, 3, 0);
|
||||||
|
renderWindow.Draw(campfireSprite, (int)(campfireSprite.TotalFrames * secondTimer));
|
||||||
|
//renderWindow.Draw(headingLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update(long ms)
|
||||||
|
{
|
||||||
|
float seconds = ((float)ms / 1000f);
|
||||||
|
secondTimer += seconds;
|
||||||
|
while (secondTimer >= 1f)
|
||||||
|
secondTimer -= 1f;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -3,6 +3,7 @@
|
|||||||
<level value="ALL" />
|
<level value="ALL" />
|
||||||
<appender-ref ref="console" />
|
<appender-ref ref="console" />
|
||||||
<appender-ref ref="file" />
|
<appender-ref ref="file" />
|
||||||
|
<appender-ref ref="TraceAppender"/>
|
||||||
</root>
|
</root>
|
||||||
<appender name="console" type="log4net.Appender.ConsoleAppender">
|
<appender name="console" type="log4net.Appender.ConsoleAppender">
|
||||||
<layout type="log4net.Layout.PatternLayout">
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
@ -20,4 +21,9 @@
|
|||||||
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
|
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
|
||||||
</layout>
|
</layout>
|
||||||
</appender>
|
</appender>
|
||||||
|
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
|
||||||
|
<layout type="log4net.Layout.PatternLayout">
|
||||||
|
<conversionPattern value="%d [%t] %-5p %c %m%n"/>
|
||||||
|
</layout>
|
||||||
|
</appender>
|
||||||
</log4net>
|
</log4net>
|
Loading…
Reference in New Issue
Block a user