mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-20 23:47:16 -05:00
Fixed UI bugs. Added credits scene.
This commit is contained in:
parent
c0f5460d6c
commit
26b2bee88c
@ -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
|
||||
|
@ -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
54
Scenes/Credits.go
Normal 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() {
|
||||
|
||||
}
|
@ -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
6
Scenes/SceneProvider.go
Normal file
@ -0,0 +1,6 @@
|
||||
package Scenes
|
||||
|
||||
// SceneProvider provides the ability to change scenes
|
||||
type SceneProvider interface {
|
||||
SetNextScene(nextScene Scene)
|
||||
}
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user