OpenDiablo2/Scenes/MainMenu.go

156 lines
4.8 KiB
Go
Raw Normal View History

2019-10-26 00:28:14 +00:00
package Scenes
2019-10-24 13:31:59 +00:00
import (
"image/color"
2019-10-26 03:41:54 +00:00
"os"
2019-10-25 23:12:42 +00:00
"github.com/essial/OpenDiablo2/Common"
"github.com/essial/OpenDiablo2/Palettes"
2019-10-26 00:28:14 +00:00
"github.com/essial/OpenDiablo2/Sound"
2019-10-25 23:37:04 +00:00
"github.com/essial/OpenDiablo2/UI"
2019-10-24 15:26:07 +00:00
"github.com/essial/OpenDiablo2/ResourcePaths"
2019-10-24 13:31:59 +00:00
"github.com/hajimehoshi/ebiten"
)
// MainMenu represents the main menu
2019-10-24 13:31:59 +00:00
type MainMenu struct {
2019-10-26 00:28:14 +00:00
uiManager *UI.Manager
soundManager *Sound.Manager
fileProvider Common.FileProvider
2019-10-26 04:26:48 +00:00
sceneProvider SceneProvider
2019-10-25 23:12:42 +00:00
trademarkBackground *Common.Sprite
background *Common.Sprite
diabloLogoLeft *Common.Sprite
diabloLogoRight *Common.Sprite
diabloLogoLeftBack *Common.Sprite
diabloLogoRightBack *Common.Sprite
exitDiabloButton *UI.Button
2019-10-26 04:06:54 +00:00
creditsButton *UI.Button
2019-10-25 23:37:04 +00:00
copyrightLabel *UI.Label
copyrightLabel2 *UI.Label
2019-10-26 04:55:59 +00:00
ShowTrademarkScreen bool
leftButtonHeld bool
2019-10-24 13:31:59 +00:00
}
// CreateMainMenu creates an instance of MainMenu
2019-10-26 04:26:48 +00:00
func CreateMainMenu(fileProvider Common.FileProvider, sceneProvider SceneProvider, uiManager *UI.Manager, soundManager *Sound.Manager) *MainMenu {
2019-10-24 13:31:59 +00:00
result := &MainMenu{
2019-10-26 00:28:14 +00:00
fileProvider: fileProvider,
uiManager: uiManager,
soundManager: soundManager,
2019-10-26 04:26:48 +00:00
sceneProvider: sceneProvider,
2019-10-26 04:55:59 +00:00
ShowTrademarkScreen: true,
2019-10-24 13:31:59 +00:00
}
return result
}
// Load is called to load the resources for the main menu
2019-10-26 00:28:14 +00:00
func (v *MainMenu) Load() []func() {
v.soundManager.PlayBGM(ResourcePaths.BGMTitle)
return []func(){
func() {
v.copyrightLabel = UI.CreateLabel(v.fileProvider, ResourcePaths.FontFormal12, Palettes.Static)
2019-10-25 23:37:04 +00:00
v.copyrightLabel.Alignment = UI.LabelAlignCenter
v.copyrightLabel.SetText("Diablo 2 is © Copyright 2000-2016 Blizzard Entertainment")
v.copyrightLabel.Color = color.RGBA{188, 168, 140, 255}
v.copyrightLabel.MoveTo(400, 500)
2019-10-26 00:28:14 +00:00
},
func() {
v.copyrightLabel2 = UI.CreateLabel(v.fileProvider, ResourcePaths.FontFormal12, Palettes.Static)
2019-10-25 23:37:04 +00:00
v.copyrightLabel2.Alignment = UI.LabelAlignCenter
v.copyrightLabel2.SetText("All Rights Reserved.")
v.copyrightLabel2.Color = color.RGBA{188, 168, 140, 255}
v.copyrightLabel2.MoveTo(400, 525)
2019-10-26 00:28:14 +00:00
},
func() {
v.background = v.fileProvider.LoadSprite(ResourcePaths.GameSelectScreen, Palettes.Sky)
v.background.MoveTo(0, 0)
2019-10-26 00:28:14 +00:00
},
func() {
v.trademarkBackground = v.fileProvider.LoadSprite(ResourcePaths.TrademarkScreen, Palettes.Sky)
v.trademarkBackground.MoveTo(0, 0)
2019-10-26 00:28:14 +00:00
},
func() {
v.diabloLogoLeft = v.fileProvider.LoadSprite(ResourcePaths.Diablo2LogoFireLeft, Palettes.Units)
v.diabloLogoLeft.Blend = true
v.diabloLogoLeft.Animate = true
v.diabloLogoLeft.MoveTo(400, 120)
2019-10-26 00:28:14 +00:00
},
func() {
v.diabloLogoRight = v.fileProvider.LoadSprite(ResourcePaths.Diablo2LogoFireRight, Palettes.Units)
v.diabloLogoRight.Blend = true
v.diabloLogoRight.Animate = true
v.diabloLogoRight.MoveTo(400, 120)
2019-10-26 00:28:14 +00:00
},
func() {
v.diabloLogoLeftBack = v.fileProvider.LoadSprite(ResourcePaths.Diablo2LogoBlackLeft, Palettes.Units)
v.diabloLogoLeftBack.MoveTo(400, 120)
2019-10-26 00:28:14 +00:00
},
func() {
v.diabloLogoRightBack = v.fileProvider.LoadSprite(ResourcePaths.Diablo2LogoBlackRight, Palettes.Units)
v.diabloLogoRightBack.MoveTo(400, 120)
2019-10-26 00:28:14 +00:00
},
func() {
2019-10-26 03:41:54 +00:00
v.exitDiabloButton = UI.CreateButton(UI.ButtonTypeWide, v.fileProvider, "EXIT DIABLO II")
v.exitDiabloButton.MoveTo(264, 535)
2019-10-26 04:55:59 +00:00
v.exitDiabloButton.SetVisible(!v.ShowTrademarkScreen)
2019-10-26 03:41:54 +00:00
v.exitDiabloButton.OnActivated(func() { v.onExitButtonClicked() })
v.uiManager.AddWidget(v.exitDiabloButton)
},
2019-10-26 04:06:54 +00:00
func() {
v.creditsButton = UI.CreateButton(UI.ButtonTypeShort, v.fileProvider, "CREDITS")
v.creditsButton.MoveTo(264, 505)
2019-10-26 04:55:59 +00:00
v.creditsButton.SetVisible(!v.ShowTrademarkScreen)
2019-10-26 04:26:48 +00:00
v.creditsButton.OnActivated(func() { v.onCreditsButtonClicked() })
2019-10-26 04:06:54 +00:00
v.uiManager.AddWidget(v.creditsButton)
},
2019-10-26 00:28:14 +00:00
}
2019-10-24 13:31:59 +00:00
}
2019-10-26 03:41:54 +00:00
func (v *MainMenu) onExitButtonClicked() {
os.Exit(0)
}
2019-10-26 04:26:48 +00:00
func (v *MainMenu) onCreditsButtonClicked() {
v.sceneProvider.SetNextScene(CreateCredits(v.fileProvider, v.sceneProvider, v.uiManager, v.soundManager))
}
// Unload unloads the data for the main menu
2019-10-24 13:31:59 +00:00
func (v *MainMenu) Unload() {
}
// Render renders the main menu
2019-10-24 13:31:59 +00:00
func (v *MainMenu) Render(screen *ebiten.Image) {
2019-10-26 04:55:59 +00:00
if v.ShowTrademarkScreen {
v.trademarkBackground.DrawSegments(screen, 4, 3, 0)
2019-10-24 13:31:59 +00:00
} else {
v.background.DrawSegments(screen, 4, 3, 0)
2019-10-24 13:31:59 +00:00
}
v.diabloLogoLeftBack.Draw(screen)
v.diabloLogoRightBack.Draw(screen)
v.diabloLogoLeft.Draw(screen)
v.diabloLogoRight.Draw(screen)
2019-10-24 13:31:59 +00:00
2019-10-26 04:55:59 +00:00
if v.ShowTrademarkScreen {
v.copyrightLabel.Draw(screen)
v.copyrightLabel2.Draw(screen)
2019-10-24 13:31:59 +00:00
} else {
}
}
// Update runs the update logic on the main menu
func (v *MainMenu) Update(tickTime float64) {
2019-10-26 04:55:59 +00:00
if v.ShowTrademarkScreen {
2019-10-26 00:28:14 +00:00
if v.uiManager.CursorButtonPressed(UI.CursorButtonLeft) {
v.leftButtonHeld = true
2019-10-26 04:55:59 +00:00
v.ShowTrademarkScreen = false
v.exitDiabloButton.SetVisible(true)
2019-10-26 04:06:54 +00:00
v.creditsButton.SetVisible(true)
2019-10-25 19:06:47 +00:00
}
return
}
2019-10-24 13:31:59 +00:00
}