Skip to content
This repository has been archived by the owner on Dec 20, 2021. It is now read-only.

D2core logger #934

Merged
merged 14 commits into from
Nov 21, 2020
8 changes: 4 additions & 4 deletions d2app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ func (a *App) loadEngine() error {

a.asset.SetLogLevel(logLevel)

audio := ebiten2.CreateAudio(a.asset)
audio := ebiten2.CreateAudio(a.config.LogLevel, a.asset)

inputManager := d2input.NewInputManager()

Expand All @@ -195,7 +195,7 @@ func (a *App) loadEngine() error {

scriptEngine := d2script.CreateScriptEngine()

uiManager := d2ui.NewUIManager(a.asset, renderer, inputManager, audio)
uiManager := d2ui.NewUIManager(a.asset, renderer, inputManager, a.config.LogLevel, audio)

a.inputManager = inputManager
a.terminal = term
Expand Down Expand Up @@ -409,14 +409,14 @@ func (a *App) initialize() error {
}
}

gui, err := d2gui.CreateGuiManager(a.asset, a.inputManager)
gui, err := d2gui.CreateGuiManager(a.asset, a.config.LogLevel, a.inputManager)
if err != nil {
return err
}

a.guiManager = gui

a.screen = d2screen.NewScreenManager(a.ui, a.guiManager)
a.screen = d2screen.NewScreenManager(a.ui, a.config.LogLevel, a.guiManager)

a.audio.SetVolumes(a.config.BgmVolume, a.config.SfxVolume)

Expand Down
24 changes: 16 additions & 8 deletions d2core/d2audio/ebiten/ebiten_audio_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package ebiten

import (
"io"
"log"

"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2util"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"

"github.com/hajimehoshi/ebiten/v2/audio"
Expand All @@ -14,14 +14,20 @@ import (

const sampleRate = 44100

const logPrefix = "Ebiten Audio Provider"

var _ d2interface.AudioProvider = &AudioProvider{} // Static check to confirm struct conforms to interface

// CreateAudio creates an instance of ebiten's audio provider
func CreateAudio(am *d2asset.AssetManager) *AudioProvider {
func CreateAudio(l d2util.LogLevel, am *d2asset.AssetManager) *AudioProvider {
result := &AudioProvider{
asset: am,
}

result.Logger = d2util.NewLogger()
result.Logger.SetLevel(l)
result.Logger.SetPrefix(logPrefix)

result.audioContext = audio.NewContext(sampleRate)

return result
Expand All @@ -36,6 +42,8 @@ type AudioProvider struct {
lastBgm string
sfxVolume float64
bgmVolume float64

*d2util.Logger
}

// PlayBGM loads an audio stream and plays it in the background
Expand All @@ -55,7 +63,7 @@ func (eap *AudioProvider) PlayBGM(song string) {
err := eap.bgmAudio.Close()

if err != nil {
log.Panic(err)
eap.Fatal(err.Error())
}
}

Expand All @@ -66,20 +74,20 @@ func (eap *AudioProvider) PlayBGM(song string) {
}

if _, err = audioStream.Seek(0, io.SeekStart); err != nil {
log.Fatal(err)
eap.Fatal(err.Error())
}

eap.bgmStream, err = wav.Decode(eap.audioContext, audioStream)

if err != nil {
log.Fatal(err)
eap.Fatal(err.Error())
}

s := audio.NewInfiniteLoop(eap.bgmStream, eap.bgmStream.Length())
eap.bgmAudio, err = audio.NewPlayer(eap.audioContext, s)

if err != nil {
log.Fatal(err)
eap.Fatal(err.Error())
}

eap.bgmAudio.SetVolume(eap.bgmVolume)
Expand Down Expand Up @@ -142,7 +150,7 @@ func (eap *AudioProvider) createSoundEffect(sfx string, context *audio.Context,
d, err := wav.Decode(context, audioData)

if err != nil {
log.Fatal(err)
eap.Fatal(err.Error())
}

var player *audio.Player
Expand All @@ -157,7 +165,7 @@ func (eap *AudioProvider) createSoundEffect(sfx string, context *audio.Context,
}

if err != nil {
log.Fatal(err)
eap.Fatal(err.Error())
}

result.player = player
Expand Down
32 changes: 23 additions & 9 deletions d2core/d2audio/sound_engine.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
package d2audio

import (
"log"
"fmt"
"math/rand"

"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"

"github.com/OpenDiablo2/OpenDiablo2/d2core/d2records"

"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2util"
)

type envState int

const (
logPrefix = "Sound Engine"
)

const (
envAttack = 0
envSustain = 1
Expand All @@ -32,6 +37,8 @@ type Sound struct {
vRate float64
state envState
// panning float64 // lets forget about this for now

*d2util.Logger
}

func (s *Sound) update(elapsed float64) {
Expand Down Expand Up @@ -66,7 +73,7 @@ func (s *Sound) SetPan(pan float64) {

// Play the sound
func (s *Sound) Play() {
log.Println("starting sound", s.entry.Handle)
s.Info("starting sound" + s.entry.Handle)
s.effect.Play()

if s.entry.FadeIn != 0 {
Expand Down Expand Up @@ -103,49 +110,55 @@ type SoundEngine struct {
timer float64
accTime float64
sounds map[*Sound]struct{}

*d2util.Logger
}

// NewSoundEngine creates a new sound engine
func NewSoundEngine(provider d2interface.AudioProvider,
asset *d2asset.AssetManager, term d2interface.Terminal) *SoundEngine {
asset *d2asset.AssetManager, l d2util.LogLevel, term d2interface.Terminal) *SoundEngine {
r := SoundEngine{
asset: asset,
provider: provider,
sounds: map[*Sound]struct{}{},
timer: 1,
}

r.Logger = d2util.NewLogger()
r.Logger.SetPrefix(logPrefix)
r.Logger.SetLevel(l)

err := term.BindAction("playsoundid", "plays the sound for a given id", func(id int) {
r.PlaySoundID(id)
})
if err != nil {
log.Print(err)
r.Error(err.Error())
return nil
}

err = term.BindAction("playsound", "plays the sound for a given handle string", func(handle string) {
r.PlaySoundHandle(handle)
})
if err != nil {
log.Print(err)
r.Error(err.Error())
return nil
}

err = term.BindAction("activesounds", "list currently active sounds", func() {
for s := range r.sounds {
if err != nil {
log.Print(err)
r.Error(err.Error())
return
}

log.Println(s)
r.Info(fmt.Sprint(s))
}
})

err = term.BindAction("killsounds", "kill active sounds", func() {
for s := range r.sounds {
if err != nil {
log.Print(err)
r.Error(err.Error())
return
}

Expand Down Expand Up @@ -207,13 +220,14 @@ func (s *SoundEngine) PlaySoundID(id int) *Sound {

effect, err := s.provider.LoadSound(entry.FileName, entry.Loop, entry.MusicVol)
if err != nil {
log.Print(err)
s.Error(err.Error())
return nil
}

snd := Sound{
entry: entry,
effect: effect,
Logger: s.Logger,
}

s.sounds[&snd] = struct{}{}
Expand Down
33 changes: 20 additions & 13 deletions d2core/d2gui/box.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package d2gui

import (
"log"

"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2util"
Expand Down Expand Up @@ -66,6 +64,8 @@ type Box struct {
disableBorder bool
isOpen bool
title string

*d2util.Logger
}

// NewBox return a new Box instance
Expand All @@ -76,9 +76,10 @@ func NewBox(
contentLayout *Layout,
width, height int,
x, y int,
l d2util.LogLevel,
title string,
) *Box {
return &Box{
box := &Box{
asset: asset,
renderer: renderer,
uiManager: ui,
Expand All @@ -90,6 +91,12 @@ func NewBox(
x: x,
y: y,
}

box.Logger = d2util.NewLogger()
box.Logger.SetLevel(l)
box.Logger.SetPrefix(logPrefix)

return box
}

// GetLayout returns the box layout
Expand Down Expand Up @@ -145,12 +152,12 @@ func (box *Box) setupTopBorder(offsetY int) {
for _, frameIndex := range topEdgePiece {
f, err := box.uiManager.NewSprite(d2resource.BoxPieces, d2resource.PaletteSky)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

err = f.SetCurrentFrame(frameIndex)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

f.SetPosition(currentX, currentY)
Expand Down Expand Up @@ -187,12 +194,12 @@ func (box *Box) setupBottomBorder(offsetY int) {
for _, frameIndex := range bottomEdgePiece {
f, err := box.uiManager.NewSprite(d2resource.BoxPieces, d2resource.PaletteSky)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

err = f.SetCurrentFrame(frameIndex)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

f.SetPosition(currentX, currentY)
Expand Down Expand Up @@ -227,12 +234,12 @@ func (box *Box) setupLeftBorder() {
for _, frameIndex := range leftBorderPiece {
f, err := box.uiManager.NewSprite(d2resource.BoxPieces, d2resource.PaletteSky)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

err = f.SetCurrentFrame(frameIndex)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

f.SetPosition(currentX, currentY)
Expand Down Expand Up @@ -266,12 +273,12 @@ func (box *Box) setupRightBorder() {
for _, frameIndex := range rightBorderPiece {
f, err := box.uiManager.NewSprite(d2resource.BoxPieces, d2resource.PaletteSky)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

err = f.SetCurrentFrame(frameIndex)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

f.SetPosition(currentX, currentY)
Expand Down Expand Up @@ -302,12 +309,12 @@ func (box *Box) setupCorners() {
for _, frameIndex := range cornersFrames {
f, err := box.uiManager.NewSprite(d2resource.BoxPieces, d2resource.PaletteSky)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

err = f.SetCurrentFrame(frameIndex)
if err != nil {
log.Print(err)
box.Error(err.Error())
}

switch frameIndex {
Expand Down
Loading