mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2025-02-20 07:27:19 -05:00
Removed audio singleton (#482)
This commit is contained in:
parent
1b614ddb3a
commit
3f575cf1d8
7
d2common/d2interface/audio_provider.go
Normal file
7
d2common/d2interface/audio_provider.go
Normal file
@ -0,0 +1,7 @@
|
||||
package d2interface
|
||||
|
||||
type AudioProvider interface {
|
||||
PlayBGM(song string)
|
||||
LoadSoundEffect(sfx string) (SoundEffect, error)
|
||||
SetVolumes(bgmVolume, sfxVolume float64)
|
||||
}
|
6
d2common/d2interface/sound_effect.go
Normal file
6
d2common/d2interface/sound_effect.go
Normal file
@ -0,0 +1,6 @@
|
||||
package d2interface
|
||||
|
||||
type SoundEffect interface {
|
||||
Play()
|
||||
Stop()
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
package d2audio
|
||||
|
||||
import (
|
||||
"errors"
|
||||
)
|
||||
|
||||
var singleton AudioProvider
|
||||
|
||||
var (
|
||||
ErrWasInit = errors.New("audio system is already initialized")
|
||||
ErrNotInit = errors.New("audio system has not been initialized")
|
||||
)
|
||||
|
||||
type SoundEffect interface {
|
||||
Play()
|
||||
Stop()
|
||||
}
|
||||
|
||||
type AudioProvider interface {
|
||||
PlayBGM(song string)
|
||||
LoadSoundEffect(sfx string) (SoundEffect, error)
|
||||
SetVolumes(bgmVolume, sfxVolume float64)
|
||||
}
|
||||
|
||||
// CreateManager creates a sound provider
|
||||
func Initialize(audioProvider AudioProvider) error {
|
||||
verifyNotInit()
|
||||
singleton = audioProvider
|
||||
return nil
|
||||
}
|
||||
|
||||
// PlayBGM plays an infinitely looping background track
|
||||
func PlayBGM(song string) error {
|
||||
verifyWasInit()
|
||||
singleton.PlayBGM(song)
|
||||
return nil
|
||||
}
|
||||
|
||||
func LoadSoundEffect(sfx string) (SoundEffect, error) {
|
||||
verifyWasInit()
|
||||
return singleton.LoadSoundEffect(sfx)
|
||||
}
|
||||
|
||||
func SetVolumes(bgmVolume, sfxVolume float64) {
|
||||
verifyWasInit()
|
||||
singleton.SetVolumes(bgmVolume, sfxVolume)
|
||||
}
|
||||
|
||||
func verifyWasInit() {
|
||||
if singleton == nil {
|
||||
panic(ErrNotInit)
|
||||
}
|
||||
}
|
||||
|
||||
func verifyNotInit() {
|
||||
if singleton != nil {
|
||||
panic(ErrWasInit)
|
||||
}
|
||||
}
|
@ -3,8 +3,9 @@ package ebiten
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||
"github.com/hajimehoshi/ebiten/audio/wav"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/audio"
|
||||
@ -70,7 +71,7 @@ func (eap *AudioProvider) PlayBGM(song string) {
|
||||
}
|
||||
}
|
||||
|
||||
func (eap *AudioProvider) LoadSoundEffect(sfx string) (d2audio.SoundEffect, error) {
|
||||
func (eap *AudioProvider) LoadSoundEffect(sfx string) (d2interface.SoundEffect, error) {
|
||||
result := CreateSoundEffect(sfx, eap.audioContext, eap.sfxVolume) // TODO: Split
|
||||
return result, nil
|
||||
}
|
||||
|
@ -3,8 +3,9 @@ package d2ui
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
||||
)
|
||||
@ -28,10 +29,10 @@ type UI struct {
|
||||
}
|
||||
|
||||
var singleton UI
|
||||
var clickSfx d2audio.SoundEffect
|
||||
var clickSfx d2interface.SoundEffect
|
||||
|
||||
func Initialize() {
|
||||
sfx, err := d2audio.LoadSoundEffect(d2resource.SFXButtonClick)
|
||||
func Initialize(audioProvider d2interface.AudioProvider) {
|
||||
sfx, err := audioProvider.LoadSoundEffect(d2resource.SFXButtonClick)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to initialize ui: %v", err)
|
||||
}
|
||||
|
@ -6,12 +6,13 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2inventory"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2mapentity"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
||||
@ -45,18 +46,21 @@ type CharacterSelect struct {
|
||||
showDeleteConfirmation bool
|
||||
connectionType d2clientconnectiontype.ClientConnectionType
|
||||
connectionHost string
|
||||
audioProvider d2interface.AudioProvider
|
||||
}
|
||||
|
||||
func CreateCharacterSelect(connectionType d2clientconnectiontype.ClientConnectionType, connectionHost string) *CharacterSelect {
|
||||
func CreateCharacterSelect(audioProvider d2interface.AudioProvider,
|
||||
connectionType d2clientconnectiontype.ClientConnectionType, connectionHost string) *CharacterSelect {
|
||||
return &CharacterSelect{
|
||||
selectedCharacter: -1,
|
||||
connectionType: connectionType,
|
||||
connectionHost: connectionHost,
|
||||
audioProvider: audioProvider,
|
||||
}
|
||||
}
|
||||
|
||||
func (v *CharacterSelect) OnLoad(loading d2screen.LoadingState) {
|
||||
d2audio.PlayBGM(d2resource.BGMTitle)
|
||||
v.audioProvider.PlayBGM(d2resource.BGMTitle)
|
||||
d2input.BindHandler(v)
|
||||
loading.Progress(0.1)
|
||||
|
||||
@ -172,11 +176,11 @@ func (v *CharacterSelect) updateCharacterBoxes() {
|
||||
}
|
||||
|
||||
func (v *CharacterSelect) onNewCharButtonClicked() {
|
||||
d2screen.SetNextScreen(CreateSelectHeroClass(v.connectionType, v.connectionHost))
|
||||
d2screen.SetNextScreen(CreateSelectHeroClass(v.audioProvider, v.connectionType, v.connectionHost))
|
||||
}
|
||||
|
||||
func (v *CharacterSelect) onExitButtonClicked() {
|
||||
mainMenu := CreateMainMenu()
|
||||
mainMenu := CreateMainMenu(v.audioProvider)
|
||||
mainMenu.SetScreenMode(ScreenModeMainMenu)
|
||||
d2screen.SetNextScreen(mainMenu)
|
||||
}
|
||||
@ -307,5 +311,5 @@ func (v *CharacterSelect) onOkButtonClicked() {
|
||||
gameClient.Open("", v.gameStates[v.selectedCharacter].FilePath)
|
||||
}
|
||||
|
||||
d2screen.SetNextScreen(CreateGame(gameClient))
|
||||
d2screen.SetNextScreen(CreateGame(v.audioProvider, gameClient))
|
||||
}
|
||||
|
@ -8,6 +8,8 @@ import (
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||
|
||||
@ -32,15 +34,17 @@ type Credits struct {
|
||||
cycleTime float64
|
||||
cyclesTillNextLine int
|
||||
doneWithCredits bool
|
||||
audioProvider d2interface.AudioProvider
|
||||
}
|
||||
|
||||
// CreateCredits creates an instance of the credits screen
|
||||
func CreateCredits() *Credits {
|
||||
func CreateCredits(audioProvider d2interface.AudioProvider) *Credits {
|
||||
result := &Credits{
|
||||
labels: make([]*labelItem, 0),
|
||||
cycleTime: 0,
|
||||
doneWithCredits: false,
|
||||
cyclesTillNextLine: 0,
|
||||
audioProvider: audioProvider,
|
||||
}
|
||||
return result
|
||||
}
|
||||
@ -134,7 +138,7 @@ func (v *Credits) Advance(tickTime float64) error {
|
||||
}
|
||||
|
||||
func (v *Credits) onExitButtonClicked() {
|
||||
mainMenu := CreateMainMenu()
|
||||
mainMenu := CreateMainMenu(v.audioProvider)
|
||||
mainMenu.SetScreenMode(ScreenModeMainMenu)
|
||||
d2screen.SetNextScreen(mainMenu)
|
||||
}
|
||||
|
@ -3,8 +3,9 @@ package d2gamescreen
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
|
||||
@ -56,13 +57,14 @@ const (
|
||||
|
||||
type EscapeMenu struct {
|
||||
isOpen bool
|
||||
selectSound d2audio.SoundEffect
|
||||
selectSound d2interface.SoundEffect
|
||||
currentLayout layoutID
|
||||
|
||||
// leftPent and rightPent are generated once and shared between the layouts
|
||||
leftPent *d2gui.AnimatedSprite
|
||||
rightPent *d2gui.AnimatedSprite
|
||||
layouts []*layout
|
||||
leftPent *d2gui.AnimatedSprite
|
||||
rightPent *d2gui.AnimatedSprite
|
||||
layouts []*layout
|
||||
audioProvider d2interface.AudioProvider
|
||||
}
|
||||
|
||||
type layout struct {
|
||||
@ -110,8 +112,11 @@ type actionableElement interface {
|
||||
Trigger()
|
||||
}
|
||||
|
||||
func NewEscapeMenu() *EscapeMenu {
|
||||
m := &EscapeMenu{}
|
||||
func NewEscapeMenu(audioProvider d2interface.AudioProvider) *EscapeMenu {
|
||||
m := &EscapeMenu{
|
||||
audioProvider: audioProvider,
|
||||
}
|
||||
|
||||
m.layouts = []*layout{
|
||||
mainLayoutID: m.newMainLayout(),
|
||||
optionsLayoutID: m.newOptionsLayout(),
|
||||
@ -283,7 +288,7 @@ func (m *EscapeMenu) addEnumLabel(l *layout, optID optionID, text string, values
|
||||
}
|
||||
|
||||
func (m *EscapeMenu) OnLoad() {
|
||||
m.selectSound, _ = d2audio.LoadSoundEffect(d2resource.SFXCursorSelect)
|
||||
m.selectSound, _ = m.audioProvider.LoadSoundEffect(d2resource.SFXCursorSelect)
|
||||
}
|
||||
|
||||
func (m *EscapeMenu) OnEscKey() {
|
||||
@ -334,7 +339,7 @@ func (m *EscapeMenu) showLayout(id layoutID) {
|
||||
}
|
||||
|
||||
if id == saveLayoutID {
|
||||
mainMenu := CreateMainMenu()
|
||||
mainMenu := CreateMainMenu(m.audioProvider)
|
||||
mainMenu.SetScreenMode(ScreenModeMainMenu)
|
||||
d2screen.SetNextScreen(mainMenu)
|
||||
return
|
||||
|
@ -2,14 +2,15 @@ package d2gamescreen
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||
"image/color"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2mapentity"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2map/d2maprenderer"
|
||||
@ -25,11 +26,12 @@ type Game struct {
|
||||
gameControls *d2player.GameControls // TODO: Hack
|
||||
localPlayer *d2mapentity.Player
|
||||
lastRegionType d2enum.RegionIdType
|
||||
audioProvider d2interface.AudioProvider
|
||||
ticksSinceLevelCheck float64
|
||||
escapeMenu *EscapeMenu
|
||||
}
|
||||
|
||||
func CreateGame(gameClient *d2client.GameClient) *Game {
|
||||
func CreateGame(audioProvider d2interface.AudioProvider, gameClient *d2client.GameClient) *Game {
|
||||
result := &Game{
|
||||
gameClient: gameClient,
|
||||
gameControls: nil,
|
||||
@ -37,7 +39,8 @@ func CreateGame(gameClient *d2client.GameClient) *Game {
|
||||
lastRegionType: d2enum.RegionNone,
|
||||
ticksSinceLevelCheck: 0,
|
||||
mapRenderer: d2maprenderer.CreateMapRenderer(gameClient.MapEngine),
|
||||
escapeMenu: NewEscapeMenu(),
|
||||
escapeMenu: NewEscapeMenu(audioProvider),
|
||||
audioProvider: audioProvider,
|
||||
}
|
||||
result.escapeMenu.OnLoad()
|
||||
d2input.BindHandler(result.escapeMenu)
|
||||
@ -45,7 +48,7 @@ func CreateGame(gameClient *d2client.GameClient) *Game {
|
||||
}
|
||||
|
||||
func (v *Game) OnLoad(loading d2screen.LoadingState) {
|
||||
d2audio.PlayBGM("")
|
||||
v.audioProvider.PlayBGM("")
|
||||
}
|
||||
|
||||
func (v *Game) OnUnload() error {
|
||||
@ -88,7 +91,7 @@ func (v *Game) Advance(tickTime float64) error {
|
||||
tile := v.gameClient.MapEngine.TileAt(v.localPlayer.TileX, v.localPlayer.TileY)
|
||||
if tile != nil {
|
||||
musicInfo := d2common.GetMusicDef(tile.RegionType)
|
||||
d2audio.PlayBGM(musicInfo.MusicFile)
|
||||
v.audioProvider.PlayBGM(musicInfo.MusicFile)
|
||||
|
||||
// skip showing zone change text the first time we enter the world
|
||||
if v.lastRegionType != d2enum.RegionNone && v.lastRegionType != tile.RegionType {
|
||||
|
@ -8,6 +8,8 @@ import (
|
||||
"os/exec"
|
||||
"runtime"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2player"
|
||||
@ -18,7 +20,6 @@ import (
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||
@ -69,19 +70,21 @@ type MainMenu struct {
|
||||
tcpJoinGameEntry d2ui.TextBox
|
||||
screenMode MainMenuScreenMode
|
||||
leftButtonHeld bool
|
||||
audioProvider d2interface.AudioProvider
|
||||
}
|
||||
|
||||
// CreateMainMenu creates an instance of MainMenu
|
||||
func CreateMainMenu() *MainMenu {
|
||||
func CreateMainMenu(audioProvider d2interface.AudioProvider) *MainMenu {
|
||||
return &MainMenu{
|
||||
screenMode: ScreenModeUnknown,
|
||||
leftButtonHeld: true,
|
||||
audioProvider: audioProvider,
|
||||
}
|
||||
}
|
||||
|
||||
// Load is called to load the resources for the main menu
|
||||
func (v *MainMenu) OnLoad(loading d2screen.LoadingState) {
|
||||
d2audio.PlayBGM(d2resource.BGMTitle)
|
||||
v.audioProvider.PlayBGM(d2resource.BGMTitle)
|
||||
loading.Progress(0.2)
|
||||
|
||||
v.versionLabel = d2ui.CreateLabel(d2resource.FontFormal12, d2resource.PaletteStatic)
|
||||
@ -277,10 +280,10 @@ func openbrowser(url string) {
|
||||
func (v *MainMenu) onSinglePlayerClicked() {
|
||||
// Go here only if existing characters are available to select
|
||||
if d2player.HasGameStates() {
|
||||
d2screen.SetNextScreen(CreateCharacterSelect(d2clientconnectiontype.Local, v.tcpJoinGameEntry.GetText()))
|
||||
d2screen.SetNextScreen(CreateCharacterSelect(v.audioProvider, d2clientconnectiontype.Local, v.tcpJoinGameEntry.GetText()))
|
||||
return
|
||||
}
|
||||
d2screen.SetNextScreen(CreateSelectHeroClass(d2clientconnectiontype.Local, v.tcpJoinGameEntry.GetText()))
|
||||
d2screen.SetNextScreen(CreateSelectHeroClass(v.audioProvider, d2clientconnectiontype.Local, v.tcpJoinGameEntry.GetText()))
|
||||
}
|
||||
|
||||
func (v *MainMenu) onGithubButtonClicked() {
|
||||
@ -292,7 +295,7 @@ func (v *MainMenu) onExitButtonClicked() {
|
||||
}
|
||||
|
||||
func (v *MainMenu) onCreditsButtonClicked() {
|
||||
d2screen.SetNextScreen(CreateCredits())
|
||||
d2screen.SetNextScreen(CreateCredits(v.audioProvider))
|
||||
}
|
||||
|
||||
// Render renders the main menu
|
||||
@ -407,7 +410,7 @@ func (v *MainMenu) onTcpIpCancelClicked() {
|
||||
}
|
||||
|
||||
func (v *MainMenu) onTcpIpHostGameClicked() {
|
||||
d2screen.SetNextScreen(CreateCharacterSelect(d2clientconnectiontype.LANServer, ""))
|
||||
d2screen.SetNextScreen(CreateCharacterSelect(v.audioProvider, d2clientconnectiontype.LANServer, ""))
|
||||
}
|
||||
|
||||
func (v *MainMenu) onTcpIpJoinGameClicked() {
|
||||
@ -419,5 +422,5 @@ func (v *MainMenu) onBtnTcpIpCancelClicked() {
|
||||
}
|
||||
|
||||
func (v *MainMenu) onBtnTcpIpOkClicked() {
|
||||
d2screen.SetNextScreen(CreateCharacterSelect(d2clientconnectiontype.LANClient, v.tcpJoinGameEntry.GetText()))
|
||||
d2screen.SetNextScreen(CreateCharacterSelect(v.audioProvider, d2clientconnectiontype.LANClient, v.tcpJoinGameEntry.GetText()))
|
||||
}
|
||||
|
@ -4,6 +4,8 @@ import (
|
||||
"image"
|
||||
"image/color"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2game/d2player"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2networking/d2client"
|
||||
@ -15,7 +17,6 @@ import (
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||
@ -32,8 +33,8 @@ type HeroRenderInfo struct {
|
||||
BackWalkSprite *d2ui.Sprite
|
||||
BackWalkSpriteOverlay *d2ui.Sprite
|
||||
SelectionBounds image.Rectangle
|
||||
SelectSfx d2audio.SoundEffect
|
||||
DeselectSfx d2audio.SoundEffect
|
||||
SelectSfx d2interface.SoundEffect
|
||||
DeselectSfx d2interface.SoundEffect
|
||||
}
|
||||
|
||||
func (hri *HeroRenderInfo) Advance(elapsed float64) {
|
||||
@ -67,20 +68,23 @@ type SelectHeroClass struct {
|
||||
hardcoreCharLabel d2ui.Label
|
||||
connectionType d2clientconnectiontype.ClientConnectionType
|
||||
connectionHost string
|
||||
audioProvider d2interface.AudioProvider
|
||||
}
|
||||
|
||||
func CreateSelectHeroClass(connectionType d2clientconnectiontype.ClientConnectionType, connectionHost string) *SelectHeroClass {
|
||||
func CreateSelectHeroClass(audioProvider d2interface.AudioProvider,
|
||||
connectionType d2clientconnectiontype.ClientConnectionType, connectionHost string) *SelectHeroClass {
|
||||
result := &SelectHeroClass{
|
||||
heroRenderInfo: make(map[d2enum.Hero]*HeroRenderInfo),
|
||||
selectedHero: d2enum.HeroNone,
|
||||
connectionType: connectionType,
|
||||
connectionHost: connectionHost,
|
||||
audioProvider: audioProvider,
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (v *SelectHeroClass) OnLoad(loading d2screen.LoadingState) {
|
||||
d2audio.PlayBGM(d2resource.BGMTitle)
|
||||
v.audioProvider.PlayBGM(d2resource.BGMTitle)
|
||||
loading.Progress(0.1)
|
||||
|
||||
v.bgImage = loadSprite(d2resource.CharacterSelectBackground, d2resource.PaletteFechar)
|
||||
@ -172,8 +176,8 @@ func (v *SelectHeroClass) OnLoad(loading d2screen.LoadingState) {
|
||||
loadSprite(d2resource.CharacterSelectBarbarianBackWalk, d2resource.PaletteFechar),
|
||||
nil,
|
||||
image.Rectangle{Min: image.Point{X: 364, Y: 201}, Max: image.Point{X: 90, Y: 170}},
|
||||
loadSoundEffect(d2resource.SFXBarbarianSelect),
|
||||
loadSoundEffect(d2resource.SFXBarbarianDeselect),
|
||||
v.loadSoundEffect(d2resource.SFXBarbarianSelect),
|
||||
v.loadSoundEffect(d2resource.SFXBarbarianDeselect),
|
||||
}
|
||||
v.heroRenderInfo[d2enum.HeroBarbarian].IdleSprite.SetPosition(400, 330)
|
||||
v.heroRenderInfo[d2enum.HeroBarbarian].IdleSprite.PlayForward()
|
||||
@ -205,8 +209,8 @@ func (v *SelectHeroClass) OnLoad(loading d2screen.LoadingState) {
|
||||
loadSprite(d2resource.CharacterSelecSorceressBackWalk, d2resource.PaletteFechar),
|
||||
loadSprite(d2resource.CharacterSelecSorceressBackWalkOverlay, d2resource.PaletteFechar),
|
||||
image.Rectangle{Min: image.Point{X: 580, Y: 240}, Max: image.Point{X: 65, Y: 160}},
|
||||
loadSoundEffect(d2resource.SFXSorceressSelect),
|
||||
loadSoundEffect(d2resource.SFXSorceressDeselect),
|
||||
v.loadSoundEffect(d2resource.SFXSorceressSelect),
|
||||
v.loadSoundEffect(d2resource.SFXSorceressDeselect),
|
||||
}
|
||||
v.heroRenderInfo[d2enum.HeroSorceress].IdleSprite.SetPosition(626, 352)
|
||||
v.heroRenderInfo[d2enum.HeroSorceress].IdleSprite.PlayForward()
|
||||
@ -252,8 +256,8 @@ func (v *SelectHeroClass) OnLoad(loading d2screen.LoadingState) {
|
||||
loadSprite(d2resource.CharacterSelecNecromancerBackWalk, d2resource.PaletteFechar),
|
||||
loadSprite(d2resource.CharacterSelecNecromancerBackWalkOverlay, d2resource.PaletteFechar),
|
||||
image.Rectangle{Min: image.Point{X: 265, Y: 220}, Max: image.Point{X: 55, Y: 175}},
|
||||
loadSoundEffect(d2resource.SFXNecromancerSelect),
|
||||
loadSoundEffect(d2resource.SFXNecromancerDeselect),
|
||||
v.loadSoundEffect(d2resource.SFXNecromancerSelect),
|
||||
v.loadSoundEffect(d2resource.SFXNecromancerDeselect),
|
||||
}
|
||||
v.heroRenderInfo[d2enum.HeroNecromancer].IdleSprite.SetPosition(300, 335)
|
||||
v.heroRenderInfo[d2enum.HeroNecromancer].IdleSprite.PlayForward()
|
||||
@ -296,8 +300,8 @@ func (v *SelectHeroClass) OnLoad(loading d2screen.LoadingState) {
|
||||
loadSprite(d2resource.CharacterSelecPaladinBackWalk, d2resource.PaletteFechar),
|
||||
nil,
|
||||
image.Rectangle{Min: image.Point{X: 490, Y: 210}, Max: image.Point{X: 65, Y: 180}},
|
||||
loadSoundEffect(d2resource.SFXPaladinSelect),
|
||||
loadSoundEffect(d2resource.SFXPaladinDeselect),
|
||||
v.loadSoundEffect(d2resource.SFXPaladinSelect),
|
||||
v.loadSoundEffect(d2resource.SFXPaladinDeselect),
|
||||
}
|
||||
v.heroRenderInfo[d2enum.HeroPaladin].IdleSprite.SetPosition(521, 338)
|
||||
v.heroRenderInfo[d2enum.HeroPaladin].IdleSprite.PlayForward()
|
||||
@ -333,8 +337,8 @@ func (v *SelectHeroClass) OnLoad(loading d2screen.LoadingState) {
|
||||
loadSprite(d2resource.CharacterSelecAmazonBackWalk, d2resource.PaletteFechar),
|
||||
nil,
|
||||
image.Rectangle{Min: image.Point{X: 70, Y: 220}, Max: image.Point{X: 55, Y: 200}},
|
||||
loadSoundEffect(d2resource.SFXAmazonSelect),
|
||||
loadSoundEffect(d2resource.SFXAmazonDeselect),
|
||||
v.loadSoundEffect(d2resource.SFXAmazonSelect),
|
||||
v.loadSoundEffect(d2resource.SFXAmazonDeselect),
|
||||
}
|
||||
v.heroRenderInfo[d2enum.HeroAmazon].IdleSprite.SetPosition(100, 339)
|
||||
v.heroRenderInfo[d2enum.HeroAmazon].IdleSprite.PlayForward()
|
||||
@ -365,8 +369,8 @@ func (v *SelectHeroClass) OnLoad(loading d2screen.LoadingState) {
|
||||
loadSprite(d2resource.CharacterSelectAssassinBackWalk, d2resource.PaletteFechar),
|
||||
nil,
|
||||
image.Rectangle{Min: image.Point{X: 175, Y: 235}, Max: image.Point{X: 50, Y: 180}},
|
||||
loadSoundEffect(d2resource.SFXAssassinSelect),
|
||||
loadSoundEffect(d2resource.SFXAssassinDeselect),
|
||||
v.loadSoundEffect(d2resource.SFXAssassinSelect),
|
||||
v.loadSoundEffect(d2resource.SFXAssassinDeselect),
|
||||
}
|
||||
v.heroRenderInfo[d2enum.HeroAssassin].IdleSprite.SetPosition(231, 365)
|
||||
v.heroRenderInfo[d2enum.HeroAssassin].IdleSprite.PlayForward()
|
||||
@ -398,8 +402,8 @@ func (v *SelectHeroClass) OnLoad(loading d2screen.LoadingState) {
|
||||
loadSprite(d2resource.CharacterSelectDruidBackWalk, d2resource.PaletteFechar),
|
||||
nil,
|
||||
image.Rectangle{Min: image.Point{X: 680, Y: 220}, Max: image.Point{X: 70, Y: 195}},
|
||||
loadSoundEffect(d2resource.SFXDruidSelect),
|
||||
loadSoundEffect(d2resource.SFXDruidDeselect),
|
||||
v.loadSoundEffect(d2resource.SFXDruidSelect),
|
||||
v.loadSoundEffect(d2resource.SFXDruidDeselect),
|
||||
}
|
||||
v.heroRenderInfo[d2enum.HeroDruid].IdleSprite.SetPosition(720, 370)
|
||||
v.heroRenderInfo[d2enum.HeroDruid].IdleSprite.PlayForward()
|
||||
@ -429,15 +433,15 @@ func (v *SelectHeroClass) OnUnload() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (v SelectHeroClass) onExitButtonClicked() {
|
||||
d2screen.SetNextScreen(CreateCharacterSelect(v.connectionType, v.connectionHost))
|
||||
func (v *SelectHeroClass) onExitButtonClicked() {
|
||||
d2screen.SetNextScreen(CreateCharacterSelect(v.audioProvider, v.connectionType, v.connectionHost))
|
||||
}
|
||||
|
||||
func (v SelectHeroClass) onOkButtonClicked() {
|
||||
func (v *SelectHeroClass) onOkButtonClicked() {
|
||||
gameState := d2player.CreatePlayerState(v.heroNameTextbox.GetText(), v.selectedHero, *d2datadict.CharStats[v.selectedHero], v.hardcoreCheckbox.GetCheckState())
|
||||
gameClient, _ := d2client.Create(d2clientconnectiontype.Local)
|
||||
gameClient.Open(v.connectionHost, gameState.FilePath)
|
||||
d2screen.SetNextScreen(CreateGame(gameClient))
|
||||
d2screen.SetNextScreen(CreateGame(v.audioProvider, gameClient))
|
||||
}
|
||||
|
||||
func (v *SelectHeroClass) Render(screen d2render.Surface) error {
|
||||
@ -658,7 +662,7 @@ func loadSprite(animationPath, palettePath string) *d2ui.Sprite {
|
||||
return sprite
|
||||
}
|
||||
|
||||
func loadSoundEffect(sfx string) d2audio.SoundEffect {
|
||||
result, _ := d2audio.LoadSoundEffect(sfx)
|
||||
func (v *SelectHeroClass) loadSoundEffect(sfx string) d2interface.SoundEffect {
|
||||
result, _ := v.audioProvider.LoadSoundEffect(sfx)
|
||||
return result
|
||||
}
|
||||
|
30
main.go
30
main.go
@ -15,13 +15,15 @@ import (
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
ebiten2 "github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio/ebiten"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2data/d2datadict"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio"
|
||||
ebiten2 "github.com/OpenDiablo2/OpenDiablo2/d2core/d2audio/ebiten"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2config"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
|
||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2input"
|
||||
@ -73,7 +75,13 @@ func main() {
|
||||
log.SetFlags(log.Lshortfile)
|
||||
log.Println("OpenDiablo2 - Open source Diablo 2 engine")
|
||||
|
||||
if err := initialize(); err != nil {
|
||||
// Initialize our providers
|
||||
audioProvider, err := ebiten2.CreateAudio()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
if err := initialize(audioProvider); err != nil {
|
||||
if os.IsNotExist(err) {
|
||||
run(updateInitError)
|
||||
}
|
||||
@ -88,7 +96,7 @@ func main() {
|
||||
}
|
||||
|
||||
if *region == 0 {
|
||||
d2screen.SetNextScreen(d2gamescreen.CreateMainMenu())
|
||||
d2screen.SetNextScreen(d2gamescreen.CreateMainMenu(audioProvider))
|
||||
} else {
|
||||
d2screen.SetNextScreen(d2gamescreen.CreateMapEngineTest(*region, *preset))
|
||||
}
|
||||
@ -96,7 +104,7 @@ func main() {
|
||||
run(update)
|
||||
}
|
||||
|
||||
func initialize() error {
|
||||
func initialize(audioProvider d2interface.AudioProvider) error {
|
||||
singleton.timeScale = 1.0
|
||||
singleton.lastTime = d2common.Now()
|
||||
singleton.lastScreenAdvance = singleton.lastTime
|
||||
@ -181,15 +189,7 @@ func initialize() error {
|
||||
return err
|
||||
}
|
||||
|
||||
audioProvider, err := ebiten2.CreateAudio()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := d2audio.Initialize(audioProvider); err != nil {
|
||||
return err
|
||||
}
|
||||
d2audio.SetVolumes(config.BgmVolume, config.SfxVolume)
|
||||
audioProvider.SetVolumes(config.BgmVolume, config.SfxVolume)
|
||||
|
||||
if err := loadDataDict(); err != nil {
|
||||
return err
|
||||
@ -201,7 +201,7 @@ func initialize() error {
|
||||
|
||||
d2inventory.LoadHeroObjects()
|
||||
|
||||
d2ui.Initialize()
|
||||
d2ui.Initialize(audioProvider)
|
||||
|
||||
d2script.CreateScriptEngine()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user