mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-20 07:27:19 -05: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
|
||||
{
|
||||
static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
private UInt32 version;
|
||||
private UInt32 unknown1; // 01 00 00 00 ???
|
||||
private UInt32 unknown2; // 00 00 00 00 ???
|
||||
@ -118,8 +120,6 @@ namespace OpenDiablo2.Common.Models
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
@ -55,6 +55,9 @@
|
||||
<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>
|
||||
</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.Core" />
|
||||
<Reference Include="System.Drawing" />
|
||||
@ -77,6 +80,7 @@
|
||||
<Compile Include="Interfaces\IRenderTarget.cs" />
|
||||
<Compile Include="Interfaces\IRenderWindow.cs" />
|
||||
<Compile Include="Interfaces\IScene.cs" />
|
||||
<Compile Include="Interfaces\ISceneManager.cs" />
|
||||
<Compile Include="Interfaces\ISprite.cs" />
|
||||
<Compile Include="Interfaces\IMouseInfoProvider.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 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 ---
|
||||
public static string CursorDefault = "data\\global\\ui\\CURSOR\\ohand.DC6";
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<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="SharpZipLib" version="1.0.0" targetFramework="net461" />
|
||||
</packages>
|
@ -12,7 +12,7 @@ using System.Threading.Tasks;
|
||||
|
||||
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);
|
||||
|
||||
@ -21,6 +21,7 @@ namespace OpenDiablo2.Core
|
||||
private readonly Func<IMouseInfoProvider> getMouseInfoProvider;
|
||||
private readonly Func<string, IScene> getScene;
|
||||
private IScene currentScene;
|
||||
private IScene nextScene = null;
|
||||
private ISprite mouseSprite;
|
||||
|
||||
private readonly MPQ[] MPQs;
|
||||
@ -98,6 +99,13 @@ namespace OpenDiablo2.Core
|
||||
sw.Restart();
|
||||
getRenderWindow().Update();
|
||||
currentScene.Update(ms);
|
||||
if (nextScene!= null)
|
||||
{
|
||||
currentScene.Dispose();
|
||||
currentScene = nextScene;
|
||||
nextScene = null;
|
||||
continue;
|
||||
}
|
||||
|
||||
renderWindow.Clear();
|
||||
currentScene.Render();
|
||||
@ -111,7 +119,10 @@ namespace OpenDiablo2.Core
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
|
||||
currentScene?.Dispose();
|
||||
}
|
||||
|
||||
public void ChangeScene(string sceneName)
|
||||
=> nextScene = getScene(sceneName);
|
||||
}
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ namespace OpenDiablo2.SDL2_
|
||||
{
|
||||
this.renderer = renderer;
|
||||
this.font = font as SDL2Font;
|
||||
texture = IntPtr.Zero;
|
||||
this.texture = IntPtr.Zero;
|
||||
}
|
||||
|
||||
internal Size CalculateSize()
|
||||
@ -118,6 +118,7 @@ namespace OpenDiablo2.SDL2_
|
||||
{
|
||||
if (texture != IntPtr.Zero)
|
||||
SDL.SDL_DestroyTexture(texture);
|
||||
texture = IntPtr.Zero;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -159,6 +159,7 @@ namespace OpenDiablo2.SDL2_
|
||||
for (var x = 0; x < xSegments; x++)
|
||||
{
|
||||
var textureIndex = x + (y * xSegments) + (offset * xSegments * ySegments);
|
||||
textureIndex = Math.Min(spr.textures.Count() - 1, Math.Max(0, textureIndex));
|
||||
if (textureIndex >= spr.textures.Count())
|
||||
continue;
|
||||
|
||||
|
@ -14,6 +14,8 @@ namespace OpenDiablo2.SDL2_
|
||||
{
|
||||
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 Size FrameSize { get; set; } = new Size();
|
||||
public int Frame { get; set; }
|
||||
@ -26,6 +28,7 @@ namespace OpenDiablo2.SDL2_
|
||||
set
|
||||
{
|
||||
blend = value;
|
||||
|
||||
foreach (var texture in textures)
|
||||
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)
|
||||
{
|
||||
SDL.SDL_DestroyTexture(texture);
|
||||
|
||||
}
|
||||
textures = new IntPtr[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,6 +23,7 @@ namespace OpenDiablo2.Scenes
|
||||
private readonly IMPQProvider mpqProvider;
|
||||
private readonly IMouseInfoProvider mouseInfoProvider;
|
||||
private readonly IMusicProvider musicProvider;
|
||||
private readonly ISceneManager sceneManager;
|
||||
|
||||
private float logoFrame;
|
||||
private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack;
|
||||
@ -36,6 +37,7 @@ namespace OpenDiablo2.Scenes
|
||||
IMPQProvider mpqProvider,
|
||||
IMouseInfoProvider mouseInfoProvider,
|
||||
IMusicProvider musicProvider,
|
||||
ISceneManager sceneManager,
|
||||
Func<WideButton> createWideButton
|
||||
)
|
||||
{
|
||||
@ -43,6 +45,7 @@ namespace OpenDiablo2.Scenes
|
||||
this.paletteProvider = paletteProvider;
|
||||
this.mpqProvider = mpqProvider;
|
||||
this.mouseInfoProvider = mouseInfoProvider;
|
||||
this.sceneManager = sceneManager;
|
||||
|
||||
backgroundSprite = renderWindow.LoadSprite(ResourcePaths.GameSelectScreen, Palettes.Sky);
|
||||
diabloLogoLeft = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoFireLeft, Palettes.Units, new Point(400, 120));
|
||||
@ -78,6 +81,7 @@ namespace OpenDiablo2.Scenes
|
||||
renderWindow.Draw(loadingSprite);
|
||||
renderWindow.Sync();
|
||||
|
||||
/*
|
||||
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
|
||||
@ -93,6 +97,7 @@ namespace OpenDiablo2.Scenes
|
||||
}
|
||||
|
||||
musicProvider.PlaySong();
|
||||
*/
|
||||
}
|
||||
|
||||
private void OnVisitWebsiteClicked()
|
||||
@ -141,9 +146,7 @@ namespace OpenDiablo2.Scenes
|
||||
}
|
||||
|
||||
private void OnSinglePlayerClicked()
|
||||
{
|
||||
|
||||
}
|
||||
=> sceneManager.ChangeScene("Select Hero Class");
|
||||
|
||||
private void OnExitClicked()
|
||||
{
|
||||
|
@ -52,6 +52,7 @@
|
||||
<Compile Include="AutofacModule.cs" />
|
||||
<Compile Include="MainMenu.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SelectHeroClass.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<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" />
|
||||
<appender-ref ref="console" />
|
||||
<appender-ref ref="file" />
|
||||
<appender-ref ref="TraceAppender"/>
|
||||
</root>
|
||||
<appender name="console" type="log4net.Appender.ConsoleAppender">
|
||||
<layout type="log4net.Layout.PatternLayout">
|
||||
@ -20,4 +21,9 @@
|
||||
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
|
||||
</layout>
|
||||
</appender>
|
||||
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
|
||||
<layout type="log4net.Layout.PatternLayout">
|
||||
<conversionPattern value="%d [%t] %-5p %c %m%n"/>
|
||||
</layout>
|
||||
</appender>
|
||||
</log4net>
|
Loading…
x
Reference in New Issue
Block a user