mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-06-28 10:05:23 +00:00
Cleaned up hero rendering to prepare for selection logic
This commit is contained in:
parent
5f5e2a158c
commit
d576729c6a
|
@ -86,7 +86,6 @@ namespace OpenDiablo2.Core
|
||||||
mouseSprite = renderWindow.LoadSprite(ResourcePaths.CursorDefault, Palettes.Units);
|
mouseSprite = renderWindow.LoadSprite(ResourcePaths.CursorDefault, Palettes.Units);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
currentScene = getScene("Main Menu");
|
currentScene = getScene("Main Menu");
|
||||||
sw.Start();
|
sw.Start();
|
||||||
while (getRenderWindow().IsRunning)
|
while (getRenderWindow().IsRunning)
|
||||||
|
|
|
@ -39,7 +39,8 @@ namespace OpenDiablo2.Scenes
|
||||||
IMouseInfoProvider mouseInfoProvider,
|
IMouseInfoProvider mouseInfoProvider,
|
||||||
IMusicProvider musicProvider,
|
IMusicProvider musicProvider,
|
||||||
ISceneManager sceneManager,
|
ISceneManager sceneManager,
|
||||||
Func<eButtonType, Button> createButton
|
Func<eButtonType, Button> createButton,
|
||||||
|
Func<string, IScene> getScene // Temporary until SDL load functions are sped up
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.renderWindow = renderWindow;
|
this.renderWindow = renderWindow;
|
||||||
|
@ -78,9 +79,18 @@ namespace OpenDiablo2.Scenes
|
||||||
|
|
||||||
var loadingSprite = renderWindow.LoadSprite(ResourcePaths.LoadingScreen, Palettes.Loading, new Point(300, 400));
|
var loadingSprite = renderWindow.LoadSprite(ResourcePaths.LoadingScreen, Palettes.Loading, new Point(300, 400));
|
||||||
|
|
||||||
|
|
||||||
|
// Pre-load all the scenes for now until we fix the sdl load problem
|
||||||
|
var scenesToLoad = new string[] {"Select Hero Class" };
|
||||||
|
for (int i = 0; i < scenesToLoad.Count(); i++)
|
||||||
|
{
|
||||||
renderWindow.Clear();
|
renderWindow.Clear();
|
||||||
renderWindow.Draw(loadingSprite);
|
renderWindow.Draw(loadingSprite, (int)((float)loadingSprite.TotalFrames * ((float)i / (float)scenesToLoad.Count())));
|
||||||
renderWindow.Sync();
|
renderWindow.Sync();
|
||||||
|
getScene(scenesToLoad[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
musicProvider.LoadSong(mpqProvider.GetStream("data\\global\\music\\introedit.wav"));
|
musicProvider.LoadSong(mpqProvider.GetStream("data\\global\\music\\introedit.wav"));
|
||||||
|
|
|
@ -11,6 +11,32 @@ using OpenDiablo2.Core.UI;
|
||||||
|
|
||||||
namespace OpenDiablo2.Scenes
|
namespace OpenDiablo2.Scenes
|
||||||
{
|
{
|
||||||
|
enum eHero
|
||||||
|
{
|
||||||
|
Amazon,
|
||||||
|
Assassin,
|
||||||
|
Necromancer,
|
||||||
|
Barbarian,
|
||||||
|
Paladin,
|
||||||
|
Sorceress,
|
||||||
|
Druid
|
||||||
|
}
|
||||||
|
|
||||||
|
enum eHeroStance
|
||||||
|
{
|
||||||
|
Idle,
|
||||||
|
IdleSelected,
|
||||||
|
Approaching,
|
||||||
|
Selected,
|
||||||
|
Retreating
|
||||||
|
}
|
||||||
|
|
||||||
|
struct HeroRenderInfo
|
||||||
|
{
|
||||||
|
public ISprite IdleSprite, IdleSelectedSprite, ApproacingSprite, SelectedSprite, RetreatingSprite;
|
||||||
|
public eHeroStance Stance;
|
||||||
|
}
|
||||||
|
|
||||||
[Scene("Select Hero Class")]
|
[Scene("Select Hero Class")]
|
||||||
public sealed class SelectHeroClass : IScene
|
public sealed class SelectHeroClass : IScene
|
||||||
{
|
{
|
||||||
|
@ -24,17 +50,11 @@ namespace OpenDiablo2.Scenes
|
||||||
private readonly ISceneManager sceneManager;
|
private readonly ISceneManager sceneManager;
|
||||||
|
|
||||||
private float secondTimer;
|
private float secondTimer;
|
||||||
private ISprite backgroundSprite, campfireSprite,
|
private ISprite backgroundSprite, campfireSprite;
|
||||||
barbarianUnselected, barbarianUnselectedH,
|
|
||||||
sorceressUnselected, sorceressUnselectedH,
|
|
||||||
necromancerUnselected, necromancerUnselectedH,
|
|
||||||
paladinUnselected, paladinUnselectedH,
|
|
||||||
amazonUnselected, amazonUnselectedH,
|
|
||||||
assassinUnselected, assassinUnselectedH,
|
|
||||||
druidUnselected, druidUnselectedH;
|
|
||||||
private IFont headingFont;
|
private IFont headingFont;
|
||||||
private ILabel headingLabel;
|
private ILabel headingLabel;
|
||||||
private Button exitButton;
|
private Button exitButton;
|
||||||
|
private Dictionary<eHero, HeroRenderInfo> heroRenderInfo = new Dictionary<eHero, HeroRenderInfo>();
|
||||||
|
|
||||||
public SelectHeroClass(
|
public SelectHeroClass(
|
||||||
IRenderWindow renderWindow,
|
IRenderWindow renderWindow,
|
||||||
|
@ -52,29 +72,58 @@ namespace OpenDiablo2.Scenes
|
||||||
this.mouseInfoProvider = mouseInfoProvider;
|
this.mouseInfoProvider = mouseInfoProvider;
|
||||||
this.sceneManager = sceneManager;
|
this.sceneManager = sceneManager;
|
||||||
|
|
||||||
|
|
||||||
backgroundSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBackground, Palettes.Fechar);
|
backgroundSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBackground, Palettes.Fechar);
|
||||||
campfireSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectCampfire, Palettes.Fechar, new System.Drawing.Point(380, 335));
|
campfireSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectCampfire, Palettes.Fechar, new System.Drawing.Point(380, 335));
|
||||||
|
|
||||||
barbarianUnselected = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianUnselected, Palettes.Fechar, new System.Drawing.Point(400, 330));
|
heroRenderInfo[eHero.Barbarian] = new HeroRenderInfo
|
||||||
barbarianUnselectedH = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianUnselectedH, Palettes.Fechar, new System.Drawing.Point(400, 330));
|
{
|
||||||
|
Stance = eHeroStance.Idle,
|
||||||
|
IdleSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianUnselected, Palettes.Fechar, new System.Drawing.Point(400, 330)),
|
||||||
|
IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianUnselectedH, Palettes.Fechar, new System.Drawing.Point(400, 330))
|
||||||
|
};
|
||||||
|
|
||||||
sorceressUnselected = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressUnselected, Palettes.Fechar, new System.Drawing.Point(626, 352));
|
heroRenderInfo[eHero.Sorceress] = new HeroRenderInfo
|
||||||
sorceressUnselectedH = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressUnselectedH, Palettes.Fechar, new System.Drawing.Point(626, 352));
|
{
|
||||||
|
Stance = eHeroStance.Idle,
|
||||||
|
IdleSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressUnselected, Palettes.Fechar, new System.Drawing.Point(626, 352)),
|
||||||
|
IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressUnselectedH, Palettes.Fechar, new System.Drawing.Point(626, 352))
|
||||||
|
};
|
||||||
|
|
||||||
necromancerUnselected = renderWindow.LoadSprite(ResourcePaths.CharacterSelectNecromancerUnselected, Palettes.Fechar, new System.Drawing.Point(300, 335));
|
heroRenderInfo[eHero.Necromancer] = new HeroRenderInfo
|
||||||
necromancerUnselectedH = renderWindow.LoadSprite(ResourcePaths.CharacterSelectNecromancerUnselectedH, Palettes.Fechar, new System.Drawing.Point(300, 335));
|
{
|
||||||
|
Stance = eHeroStance.Idle,
|
||||||
|
IdleSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectNecromancerUnselected, Palettes.Fechar, new System.Drawing.Point(300, 335)),
|
||||||
|
IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectNecromancerUnselectedH, Palettes.Fechar, new System.Drawing.Point(300, 335))
|
||||||
|
};
|
||||||
|
|
||||||
paladinUnselected = renderWindow.LoadSprite(ResourcePaths.CharacterSelectPaladinUnselected, Palettes.Fechar, new System.Drawing.Point(521, 338));
|
heroRenderInfo[eHero.Paladin] = new HeroRenderInfo
|
||||||
paladinUnselectedH = renderWindow.LoadSprite(ResourcePaths.CharacterSelectPaladinUnselectedH, Palettes.Fechar, new System.Drawing.Point(521, 338));
|
{
|
||||||
|
Stance = eHeroStance.Idle,
|
||||||
|
IdleSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectPaladinUnselected, Palettes.Fechar, new System.Drawing.Point(521, 338)),
|
||||||
|
IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectPaladinUnselectedH, Palettes.Fechar, new System.Drawing.Point(521, 338))
|
||||||
|
};
|
||||||
|
|
||||||
amazonUnselected = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAmazonUnselected, Palettes.Fechar, new System.Drawing.Point(100, 339));
|
heroRenderInfo[eHero.Amazon] = new HeroRenderInfo
|
||||||
amazonUnselectedH = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAmazonUnselectedH, Palettes.Fechar, new System.Drawing.Point(100, 339));
|
{
|
||||||
|
Stance = eHeroStance.Idle,
|
||||||
|
IdleSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAmazonUnselected, Palettes.Fechar, new System.Drawing.Point(100, 339)),
|
||||||
|
IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAmazonUnselectedH, Palettes.Fechar, new System.Drawing.Point(100, 339))
|
||||||
|
};
|
||||||
|
|
||||||
assassinUnselected = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAssassinUnselected, Palettes.Fechar, new System.Drawing.Point(231, 365));
|
heroRenderInfo[eHero.Assassin] = new HeroRenderInfo
|
||||||
assassinUnselectedH = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAssassinUnselectedH, Palettes.Fechar, new System.Drawing.Point(231, 365));
|
{
|
||||||
|
Stance = eHeroStance.Idle,
|
||||||
|
IdleSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAssassinUnselected, Palettes.Fechar, new System.Drawing.Point(231, 365)),
|
||||||
|
IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAssassinUnselectedH, Palettes.Fechar, new System.Drawing.Point(231, 365))
|
||||||
|
};
|
||||||
|
|
||||||
druidUnselected = renderWindow.LoadSprite(ResourcePaths.CharacterSelectDruidUnselected, Palettes.Fechar, new System.Drawing.Point(720, 370));
|
heroRenderInfo[eHero.Druid] = new HeroRenderInfo
|
||||||
druidUnselectedH = renderWindow.LoadSprite(ResourcePaths.CharacterSelectDruidUnselectedH, Palettes.Fechar, new System.Drawing.Point(720, 370));
|
{
|
||||||
|
Stance = eHeroStance.Idle,
|
||||||
|
IdleSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectDruidUnselected, Palettes.Fechar, new System.Drawing.Point(720, 370)),
|
||||||
|
IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectDruidUnselectedH, Palettes.Fechar, new System.Drawing.Point(720, 370))
|
||||||
|
};
|
||||||
|
|
||||||
headingFont = renderWindow.LoadFont(ResourcePaths.Font30, Palettes.Units);
|
headingFont = renderWindow.LoadFont(ResourcePaths.Font30, Palettes.Units);
|
||||||
headingLabel = renderWindow.CreateLabel(headingFont);
|
headingLabel = renderWindow.CreateLabel(headingFont);
|
||||||
|
@ -96,22 +145,46 @@ namespace OpenDiablo2.Scenes
|
||||||
{
|
{
|
||||||
renderWindow.Draw(backgroundSprite, 4, 3, 0);
|
renderWindow.Draw(backgroundSprite, 4, 3, 0);
|
||||||
|
|
||||||
renderWindow.Draw(barbarianUnselected, (int)(barbarianUnselected.TotalFrames * secondTimer));
|
RenderHeros();
|
||||||
renderWindow.Draw(sorceressUnselected, (int)(sorceressUnselected.TotalFrames * secondTimer));
|
|
||||||
renderWindow.Draw(necromancerUnselected, (int)(necromancerUnselected.TotalFrames * secondTimer));
|
|
||||||
renderWindow.Draw(paladinUnselected, (int)(paladinUnselected.TotalFrames * secondTimer));
|
|
||||||
renderWindow.Draw(amazonUnselected, (int)(amazonUnselected.TotalFrames * secondTimer));
|
|
||||||
renderWindow.Draw(assassinUnselected, (int)(assassinUnselected.TotalFrames * secondTimer));
|
|
||||||
renderWindow.Draw(druidUnselected, (int)(druidUnselected.TotalFrames * secondTimer));
|
|
||||||
|
|
||||||
renderWindow.Draw(campfireSprite, (int)(campfireSprite.TotalFrames * secondTimer));
|
renderWindow.Draw(campfireSprite, (int)(campfireSprite.TotalFrames * secondTimer));
|
||||||
renderWindow.Draw(headingLabel);
|
renderWindow.Draw(headingLabel);
|
||||||
exitButton.Render();
|
exitButton.Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RenderHeros()
|
||||||
|
{
|
||||||
|
foreach (var hero in Enum.GetValues(typeof(eHero)).Cast<eHero>())
|
||||||
|
RenderHero(hero);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RenderHero(eHero hero)
|
||||||
|
{
|
||||||
|
var renderInfo = heroRenderInfo[hero];
|
||||||
|
switch (renderInfo.Stance)
|
||||||
|
{
|
||||||
|
case eHeroStance.Idle:
|
||||||
|
renderWindow.Draw(renderInfo.IdleSprite, (int)(renderInfo.IdleSprite.TotalFrames * secondTimer));
|
||||||
|
break;
|
||||||
|
case eHeroStance.IdleSelected:
|
||||||
|
renderWindow.Draw(renderInfo.IdleSelectedSprite, (int)(renderInfo.IdleSelectedSprite.TotalFrames * secondTimer));
|
||||||
|
break;
|
||||||
|
case eHeroStance.Approaching:
|
||||||
|
break;
|
||||||
|
case eHeroStance.Selected:
|
||||||
|
break;
|
||||||
|
case eHeroStance.Retreating:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public void Update(long ms)
|
public void Update(long ms)
|
||||||
{
|
{
|
||||||
float seconds = ((float)ms / 1000f);
|
float seconds = ((float)ms / 1500f);
|
||||||
secondTimer += seconds;
|
secondTimer += seconds;
|
||||||
while (secondTimer >= 1f)
|
while (secondTimer >= 1f)
|
||||||
secondTimer -= 1f;
|
secondTimer -= 1f;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user