1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-07-01 11:25:26 +00:00

Fixed UI bugs. Added credits scene.

This commit is contained in:
Tim Sarbin 2019-10-26 00:26:48 -04:00
parent c0f5460d6c
commit 26b2bee88c
6 changed files with 75 additions and 3 deletions

View File

@ -112,7 +112,7 @@ func CreateSprite(data []byte, palette Palette) *Sprite {
result.Frames[ix].Image, _ = ebiten.NewImage(int(result.Frames[ix].Width), int(result.Frames[ix].Height), ebiten.FilterNearest)
newData := make([]byte, result.Frames[ix].Width*result.Frames[ix].Height*4)
for ii := uint32(0); ii < result.Frames[ix].Width*result.Frames[ix].Height; ii++ {
if result.Frames[ix].ImageData[ii] == -1 {
if result.Frames[ix].ImageData[ii] < 1 { // TODO: Is this == -1 or < 1?
continue
}
newData[ii*4] = palette.Colors[result.Frames[ix].ImageData[ii]].R

View File

@ -63,7 +63,7 @@ func CreateEngine() *Engine {
result.LoadingSprite = result.LoadSprite(ResourcePaths.LoadingScreen, Palettes.Loading)
loadingSpriteSizeX, loadingSpriteSizeY := result.LoadingSprite.GetSize()
result.LoadingSprite.MoveTo(int(400-(loadingSpriteSizeX/2)), int(300+(loadingSpriteSizeY/2)))
result.SetNextScene(Scenes.CreateMainMenu(result, result.UIManager, result.SoundManager))
result.SetNextScene(Scenes.CreateMainMenu(result, result, result.UIManager, result.SoundManager))
return result
}

54
Scenes/Credits.go Normal file
View File

@ -0,0 +1,54 @@
package Scenes
import (
"github.com/essial/OpenDiablo2/Common"
"github.com/essial/OpenDiablo2/Palettes"
"github.com/essial/OpenDiablo2/ResourcePaths"
"github.com/essial/OpenDiablo2/Sound"
"github.com/essial/OpenDiablo2/UI"
"github.com/hajimehoshi/ebiten"
)
// Credits represents the credits scene
type Credits struct {
uiManager *UI.Manager
soundManager *Sound.Manager
fileProvider Common.FileProvider
sceneProvider SceneProvider
creditsBackground *Common.Sprite
}
// CreateCredits creates an instance of the credits scene
func CreateCredits(fileProvider Common.FileProvider, sceneProvider SceneProvider, uiManager *UI.Manager, soundManager *Sound.Manager) *Credits {
result := &Credits{
fileProvider: fileProvider,
uiManager: uiManager,
soundManager: soundManager,
sceneProvider: sceneProvider,
}
return result
}
// Load is called to load the resources for the credits scene
func (v *Credits) Load() []func() {
return []func(){
func() {
v.creditsBackground = v.fileProvider.LoadSprite(ResourcePaths.CreditsBackground, Palettes.Sky)
},
}
}
// Unload unloads the data for the credits scene
func (v *Credits) Unload() {
}
// Render renders the credits scene
func (v *Credits) Render(screen *ebiten.Image) {
v.creditsBackground.DrawSegments(screen, 4, 3, 0)
}
// Update runs the update logic on the credits scene
func (v *Credits) Update() {
}

View File

@ -18,6 +18,7 @@ type MainMenu struct {
uiManager *UI.Manager
soundManager *Sound.Manager
fileProvider Common.FileProvider
sceneProvider SceneProvider
trademarkBackground *Common.Sprite
background *Common.Sprite
diabloLogoLeft *Common.Sprite
@ -33,11 +34,12 @@ type MainMenu struct {
}
// CreateMainMenu creates an instance of MainMenu
func CreateMainMenu(fileProvider Common.FileProvider, uiManager *UI.Manager, soundManager *Sound.Manager) *MainMenu {
func CreateMainMenu(fileProvider Common.FileProvider, sceneProvider SceneProvider, uiManager *UI.Manager, soundManager *Sound.Manager) *MainMenu {
result := &MainMenu{
fileProvider: fileProvider,
uiManager: uiManager,
soundManager: soundManager,
sceneProvider: sceneProvider,
showTrademarkScreen: true,
}
return result
@ -100,6 +102,7 @@ func (v *MainMenu) Load() []func() {
v.creditsButton = UI.CreateButton(UI.ButtonTypeShort, v.fileProvider, "CREDITS")
v.creditsButton.MoveTo(264, 505)
v.creditsButton.SetVisible(false)
v.creditsButton.OnActivated(func() { v.onCreditsButtonClicked() })
v.uiManager.AddWidget(v.creditsButton)
},
}
@ -109,6 +112,10 @@ func (v *MainMenu) onExitButtonClicked() {
os.Exit(0)
}
func (v *MainMenu) onCreditsButtonClicked() {
v.sceneProvider.SetNextScene(CreateCredits(v.fileProvider, v.sceneProvider, v.uiManager, v.soundManager))
}
// Unload unloads the data for the main menu
func (v *MainMenu) Unload() {

6
Scenes/SceneProvider.go Normal file
View File

@ -0,0 +1,6 @@
package Scenes
// SceneProvider provides the ability to change scenes
type SceneProvider interface {
SetNextScene(nextScene Scene)
}

View File

@ -13,6 +13,7 @@ type Manager struct {
fileProvider Common.FileProvider
audioContext *audio.Context // The Audio context
bgmAudio *audio.Player // The audio player
lastBgm string
}
// CreateManager creates a sound provider
@ -30,6 +31,10 @@ func CreateManager(fileProvider Common.FileProvider) *Manager {
// PlayBGM plays an infinitely looping background track
func (v *Manager) PlayBGM(song string) {
if v.lastBgm == song {
return
}
v.lastBgm = song
go func() {
if v.bgmAudio != nil {
v.bgmAudio.Close()