mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-10-01 15:46:17 -04:00
removed gui manager singleton in d2gui (#735)
This commit is contained in:
parent
d0410001de
commit
ef0fbc0581
19
d2app/app.go
19
d2app/app.go
@ -68,6 +68,7 @@ type App struct {
|
|||||||
screen *d2screen.ScreenManager
|
screen *d2screen.ScreenManager
|
||||||
ui *d2ui.UIManager
|
ui *d2ui.UIManager
|
||||||
tAllocSamples *ring.Ring
|
tAllocSamples *ring.Ring
|
||||||
|
guiManager *d2gui.GuiManager
|
||||||
}
|
}
|
||||||
|
|
||||||
type bindTerminalEntry struct {
|
type bindTerminalEntry struct {
|
||||||
@ -92,7 +93,6 @@ func Create(gitBranch, gitCommit string,
|
|||||||
asset *d2asset.AssetManager,
|
asset *d2asset.AssetManager,
|
||||||
) *App {
|
) *App {
|
||||||
uiManager := d2ui.NewUIManager(asset, renderer, inputManager, audio)
|
uiManager := d2ui.NewUIManager(asset, renderer, inputManager, audio)
|
||||||
screenManager := d2screen.NewScreenManager(uiManager)
|
|
||||||
|
|
||||||
result := &App{
|
result := &App{
|
||||||
gitBranch: gitBranch,
|
gitBranch: gitBranch,
|
||||||
@ -103,7 +103,6 @@ func Create(gitBranch, gitCommit string,
|
|||||||
audio: audio,
|
audio: audio,
|
||||||
renderer: renderer,
|
renderer: renderer,
|
||||||
ui: uiManager,
|
ui: uiManager,
|
||||||
screen: screenManager,
|
|
||||||
asset: asset,
|
asset: asset,
|
||||||
tAllocSamples: createZeroedRing(nSamplesTAlloc),
|
tAllocSamples: createZeroedRing(nSamplesTAlloc),
|
||||||
}
|
}
|
||||||
@ -176,10 +175,15 @@ func (a *App) initialize() error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := d2gui.Initialize(a.asset, a.inputManager); err != nil {
|
var err error
|
||||||
|
|
||||||
|
a.guiManager, err = d2gui.CreateGuiManager(a.asset, a.inputManager)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a.screen = d2screen.NewScreenManager(a.ui, a.guiManager)
|
||||||
|
|
||||||
config := d2config.Config
|
config := d2config.Config
|
||||||
a.audio.SetVolumes(config.BgmVolume, config.SfxVolume)
|
a.audio.SetVolumes(config.BgmVolume, config.SfxVolume)
|
||||||
|
|
||||||
@ -378,7 +382,7 @@ func (a *App) render(target d2interface.Surface) error {
|
|||||||
|
|
||||||
a.ui.Render(target)
|
a.ui.Render(target)
|
||||||
|
|
||||||
if err := d2gui.Render(target); err != nil {
|
if err := a.guiManager.Render(target); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,7 +416,7 @@ func (a *App) advance(elapsed, elapsedUnscaled, current float64) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := d2gui.Advance(elapsed); err != nil {
|
if err := a.guiManager.Advance(elapsed); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -609,7 +613,7 @@ func (a *App) quitGame() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) enterGuiPlayground() {
|
func (a *App) enterGuiPlayground() {
|
||||||
a.screen.SetNextScreen(d2gamescreen.CreateGuiTestMain(a.renderer))
|
a.screen.SetNextScreen(d2gamescreen.CreateGuiTestMain(a.renderer, a.guiManager, a.asset))
|
||||||
}
|
}
|
||||||
|
|
||||||
func createZeroedRing(n int) *ring.Ring {
|
func createZeroedRing(n int) *ring.Ring {
|
||||||
@ -702,12 +706,11 @@ func (a *App) ToCreateGame(filePath string, connType d2clientconnectiontype.Clie
|
|||||||
}
|
}
|
||||||
|
|
||||||
a.screen.SetNextScreen(d2gamescreen.CreateGame(a, a.asset, a.ui, a.renderer, a.inputManager,
|
a.screen.SetNextScreen(d2gamescreen.CreateGame(a, a.asset, a.ui, a.renderer, a.inputManager,
|
||||||
a.audio, gameClient, a.terminal))
|
a.audio, gameClient, a.terminal, a.guiManager))
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToCharacterSelect forces the game to transition to the Character Select (load character) screen
|
// ToCharacterSelect forces the game to transition to the Character Select (load character) screen
|
||||||
func (a *App) ToCharacterSelect(connType d2clientconnectiontype.ClientConnectionType, connHost string) {
|
func (a *App) ToCharacterSelect(connType d2clientconnectiontype.ClientConnectionType, connHost string) {
|
||||||
|
|
||||||
characterSelect := d2gamescreen.CreateCharacterSelect(a, a.asset, a.renderer, a.inputManager,
|
characterSelect := d2gamescreen.CreateCharacterSelect(a, a.asset, a.renderer, a.inputManager,
|
||||||
a.audio, a.ui, connType, connHost)
|
a.audio, a.ui, connType, connHost)
|
||||||
|
|
||||||
|
@ -1,25 +1,12 @@
|
|||||||
package d2gui
|
package d2gui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"image/color"
|
"image/color"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2math"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2math"
|
||||||
)
|
)
|
||||||
|
|
||||||
func loadFont(fontStyle FontStyle) (*d2asset.Font, error) {
|
|
||||||
config := getFontStyleConfig(fontStyle)
|
|
||||||
if config == nil {
|
|
||||||
return nil, errors.New("invalid font style")
|
|
||||||
}
|
|
||||||
|
|
||||||
return singleton.asset.LoadFont(config.fontBasePath+".tbl", config.fontBasePath+".dc6",
|
|
||||||
config.palettePath)
|
|
||||||
}
|
|
||||||
|
|
||||||
func renderSegmented(animation d2interface.Animation, segmentsX, segmentsY, frameOffset int,
|
func renderSegmented(animation d2interface.Animation, segmentsX, segmentsY, frameOffset int,
|
||||||
target d2interface.Surface) error {
|
target d2interface.Surface) error {
|
||||||
var currentY int
|
var currentY int
|
||||||
|
@ -1,90 +0,0 @@
|
|||||||
package d2gui
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
errWasInit = errors.New("gui system is already initialized")
|
|
||||||
errNotInit = errors.New("gui system is not initialized")
|
|
||||||
)
|
|
||||||
|
|
||||||
var singleton *manager // nolint:gochecknoglobals // currently global by design
|
|
||||||
|
|
||||||
// Initialize creates a singleton gui manager
|
|
||||||
func Initialize(asset *d2asset.AssetManager, inputManager d2interface.InputManager) error {
|
|
||||||
verifyNotInit()
|
|
||||||
|
|
||||||
var err error
|
|
||||||
if singleton, err = createGuiManager(asset, inputManager); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Render all of the gui elements
|
|
||||||
func Render(target d2interface.Surface) error {
|
|
||||||
verifyWasInit()
|
|
||||||
return singleton.render(target)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Advance all of the gui elements
|
|
||||||
func Advance(elapsed float64) error {
|
|
||||||
verifyWasInit()
|
|
||||||
return singleton.advance(elapsed)
|
|
||||||
}
|
|
||||||
|
|
||||||
// CreateLayout creates a dynamic layout
|
|
||||||
func CreateLayout(renderer d2interface.Renderer, positionType PositionType) *Layout {
|
|
||||||
verifyWasInit()
|
|
||||||
return createLayout(renderer, positionType)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetLayout sets the gui manager's layout
|
|
||||||
func SetLayout(layout *Layout) {
|
|
||||||
verifyWasInit()
|
|
||||||
singleton.SetLayout(layout)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ShowLoadScreen renders the loading progress screen.
|
|
||||||
// The provided progress argument defines the loading animation's state in the range `[0, 1]`,
|
|
||||||
// where `0` is initial frame and `1` is the final frame
|
|
||||||
func ShowLoadScreen(progress float64) {
|
|
||||||
verifyWasInit()
|
|
||||||
singleton.showLoadScreen(progress)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HideLoadScreen hides the loading screen
|
|
||||||
func HideLoadScreen() {
|
|
||||||
verifyWasInit()
|
|
||||||
singleton.hideLoadScreen()
|
|
||||||
}
|
|
||||||
|
|
||||||
// ShowCursor shows the in-game mouse cursor
|
|
||||||
func ShowCursor() {
|
|
||||||
verifyWasInit()
|
|
||||||
singleton.showCursor()
|
|
||||||
}
|
|
||||||
|
|
||||||
// HideCursor hides the in-game mouse cursor
|
|
||||||
func HideCursor() {
|
|
||||||
verifyWasInit()
|
|
||||||
singleton.hideCursor()
|
|
||||||
}
|
|
||||||
|
|
||||||
func verifyWasInit() {
|
|
||||||
if singleton == nil {
|
|
||||||
panic(errNotInit)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func verifyNotInit() {
|
|
||||||
if singleton != nil {
|
|
||||||
panic(errWasInit)
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,7 +9,7 @@ import (
|
|||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
)
|
)
|
||||||
|
|
||||||
type manager struct {
|
type GuiManager struct {
|
||||||
asset *d2asset.AssetManager
|
asset *d2asset.AssetManager
|
||||||
layout *Layout
|
layout *Layout
|
||||||
cursorAnim d2interface.Animation
|
cursorAnim d2interface.Animation
|
||||||
@ -20,7 +20,8 @@ type manager struct {
|
|||||||
loading bool
|
loading bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func createGuiManager(asset *d2asset.AssetManager, inputManager d2interface.InputManager) (*manager, error) {
|
// CreateGuiManager creates an instance of the GuiManager
|
||||||
|
func CreateGuiManager(asset *d2asset.AssetManager, inputManager d2interface.InputManager) (*GuiManager, error) {
|
||||||
cursorAnim, err := asset.LoadAnimation(d2resource.CursorDefault, d2resource.PaletteUnits)
|
cursorAnim, err := asset.LoadAnimation(d2resource.CursorDefault, d2resource.PaletteUnits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -31,7 +32,7 @@ func createGuiManager(asset *d2asset.AssetManager, inputManager d2interface.Inpu
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
manager := &manager{
|
manager := &GuiManager{
|
||||||
asset: asset,
|
asset: asset,
|
||||||
cursorAnim: cursorAnim,
|
cursorAnim: cursorAnim,
|
||||||
loadingAnim: loadingAnim,
|
loadingAnim: loadingAnim,
|
||||||
@ -47,14 +48,16 @@ func createGuiManager(asset *d2asset.AssetManager, inputManager d2interface.Inpu
|
|||||||
return manager, nil
|
return manager, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) SetLayout(layout *Layout) {
|
// SetLayout sets the layout of the GuiManager
|
||||||
|
func (m *GuiManager) SetLayout(layout *Layout) {
|
||||||
m.layout = layout
|
m.layout = layout
|
||||||
if m.layout != nil {
|
if m.layout != nil {
|
||||||
m.layout.AdjustEntryPlacement()
|
m.layout.AdjustEntryPlacement()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) OnMouseButtonDown(event d2interface.MouseEvent) bool {
|
// OnMouseButtonDown handles mouse button click events
|
||||||
|
func (m *GuiManager) OnMouseButtonDown(event d2interface.MouseEvent) bool {
|
||||||
if m.layout == nil {
|
if m.layout == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -62,7 +65,8 @@ func (m *manager) OnMouseButtonDown(event d2interface.MouseEvent) bool {
|
|||||||
return m.layout.onMouseButtonDown(event)
|
return m.layout.onMouseButtonDown(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) OnMouseButtonUp(event d2interface.MouseEvent) bool {
|
// OnMouseButtonUp handles the mouse button release events
|
||||||
|
func (m *GuiManager) OnMouseButtonUp(event d2interface.MouseEvent) bool {
|
||||||
if m.layout == nil {
|
if m.layout == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -70,7 +74,8 @@ func (m *manager) OnMouseButtonUp(event d2interface.MouseEvent) bool {
|
|||||||
return m.layout.onMouseButtonUp(event)
|
return m.layout.onMouseButtonUp(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) OnMouseMove(event d2interface.MouseMoveEvent) bool {
|
// OnMouseMove handles mouse movement events
|
||||||
|
func (m *GuiManager) OnMouseMove(event d2interface.MouseMoveEvent) bool {
|
||||||
m.cursorX = event.X()
|
m.cursorX = event.X()
|
||||||
m.cursorY = event.Y()
|
m.cursorY = event.Y()
|
||||||
|
|
||||||
@ -81,7 +86,8 @@ func (m *manager) OnMouseMove(event d2interface.MouseMoveEvent) bool {
|
|||||||
return m.layout.onMouseMove(event)
|
return m.layout.onMouseMove(event)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) render(target d2interface.Surface) error {
|
// Render renders the GuiManager to the given surface
|
||||||
|
func (m *GuiManager) Render(target d2interface.Surface) error {
|
||||||
if m.loading {
|
if m.loading {
|
||||||
if err := m.renderLoadScreen(target); err != nil {
|
if err := m.renderLoadScreen(target); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -102,7 +108,7 @@ func (m *manager) render(target d2interface.Surface) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) renderLoadScreen(target d2interface.Surface) error {
|
func (m *GuiManager) renderLoadScreen(target d2interface.Surface) error {
|
||||||
if clearErr := target.Clear(color.Black); clearErr != nil {
|
if clearErr := target.Clear(color.Black); clearErr != nil {
|
||||||
return clearErr
|
return clearErr
|
||||||
}
|
}
|
||||||
@ -123,7 +129,7 @@ func (m *manager) renderLoadScreen(target d2interface.Surface) error {
|
|||||||
return m.loadingAnim.Render(target)
|
return m.loadingAnim.Render(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) renderCursor(target d2interface.Surface) error {
|
func (m *GuiManager) renderCursor(target d2interface.Surface) error {
|
||||||
_, height := m.cursorAnim.GetCurrentFrameSize()
|
_, height := m.cursorAnim.GetCurrentFrameSize()
|
||||||
pushCount := 0
|
pushCount := 0
|
||||||
|
|
||||||
@ -138,7 +144,8 @@ func (m *manager) renderCursor(target d2interface.Surface) error {
|
|||||||
return m.cursorAnim.Render(target)
|
return m.cursorAnim.Render(target)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) advance(elapsed float64) error {
|
// Advance advances the GuiManager state
|
||||||
|
func (m *GuiManager) Advance(elapsed float64) error {
|
||||||
if !m.loading && m.layout != nil {
|
if !m.loading && m.layout != nil {
|
||||||
if err := m.layout.advance(elapsed); err != nil {
|
if err := m.layout.advance(elapsed); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -148,7 +155,8 @@ func (m *manager) advance(elapsed float64) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) showLoadScreen(progress float64) {
|
// ShowLoadScreen shows the loading screen with the given progress
|
||||||
|
func (m *GuiManager) ShowLoadScreen(progress float64) {
|
||||||
progress = math.Min(progress, 1.0)
|
progress = math.Min(progress, 1.0)
|
||||||
progress = math.Max(progress, 0.0)
|
progress = math.Max(progress, 0.0)
|
||||||
|
|
||||||
@ -160,19 +168,22 @@ func (m *manager) showLoadScreen(progress float64) {
|
|||||||
m.loading = true
|
m.loading = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) hideLoadScreen() {
|
// HideLoadScreen hides the load screen
|
||||||
|
func (m *GuiManager) HideLoadScreen() {
|
||||||
m.loading = false
|
m.loading = false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) showCursor() {
|
// ShowCursor makes the cursor visible
|
||||||
|
func (m *GuiManager) ShowCursor() {
|
||||||
m.cursorVisible = true
|
m.cursorVisible = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) hideCursor() {
|
// HideCursor hides the cursor
|
||||||
|
func (m *GuiManager) HideCursor() {
|
||||||
m.cursorVisible = false
|
m.cursorVisible = false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *manager) clear() {
|
func (m *GuiManager) clear() {
|
||||||
m.SetLayout(nil)
|
m.SetLayout(nil)
|
||||||
m.hideLoadScreen()
|
m.HideLoadScreen()
|
||||||
}
|
}
|
@ -16,12 +16,7 @@ type Label struct {
|
|||||||
surface d2interface.Surface
|
surface d2interface.Surface
|
||||||
}
|
}
|
||||||
|
|
||||||
func createLabel(renderer d2interface.Renderer, text string, fontStyle FontStyle) (*Label, error) {
|
func createLabel(renderer d2interface.Renderer, text string, font *d2asset.Font) *Label {
|
||||||
font, err := loadFont(fontStyle)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
label := &Label{
|
label := &Label{
|
||||||
font: font,
|
font: font,
|
||||||
renderer: renderer,
|
renderer: renderer,
|
||||||
@ -30,7 +25,7 @@ func createLabel(renderer d2interface.Renderer, text string, fontStyle FontStyle
|
|||||||
_ = label.setText(text)
|
_ = label.setText(text)
|
||||||
label.SetVisible(true)
|
label.SetVisible(true)
|
||||||
|
|
||||||
return label, nil
|
return label
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l *Label) render(target d2interface.Surface) error {
|
func (l *Label) render(target d2interface.Surface) error {
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2math"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2math"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
)
|
)
|
||||||
|
|
||||||
const layoutDebug = false // turns on debug rendering stuff for layouts
|
const layoutDebug = false // turns on debug rendering stuff for layouts
|
||||||
@ -53,7 +54,8 @@ const (
|
|||||||
type Layout struct {
|
type Layout struct {
|
||||||
widgetBase
|
widgetBase
|
||||||
|
|
||||||
renderer d2interface.Renderer
|
renderer d2interface.Renderer
|
||||||
|
assetManager *d2asset.AssetManager
|
||||||
|
|
||||||
width int
|
width int
|
||||||
height int
|
height int
|
||||||
@ -63,10 +65,11 @@ type Layout struct {
|
|||||||
entries []*layoutEntry
|
entries []*layoutEntry
|
||||||
}
|
}
|
||||||
|
|
||||||
func createLayout(renderer d2interface.Renderer, positionType PositionType) *Layout {
|
func CreateLayout(renderer d2interface.Renderer, positionType PositionType, assetManager *d2asset.AssetManager) *Layout {
|
||||||
layout := &Layout{
|
layout := &Layout{
|
||||||
renderer: renderer,
|
renderer: renderer,
|
||||||
positionType: positionType,
|
positionType: positionType,
|
||||||
|
assetManager: assetManager,
|
||||||
}
|
}
|
||||||
|
|
||||||
layout.SetVisible(true)
|
layout.SetVisible(true)
|
||||||
@ -93,7 +96,7 @@ func (l *Layout) SetHorizontalAlign(horizontalAlign HorizontalAlign) {
|
|||||||
// AddLayout adds a nested layout to this layout, given a position type.
|
// AddLayout adds a nested layout to this layout, given a position type.
|
||||||
// Returns a pointer to the nested layout
|
// Returns a pointer to the nested layout
|
||||||
func (l *Layout) AddLayout(positionType PositionType) *Layout {
|
func (l *Layout) AddLayout(positionType PositionType) *Layout {
|
||||||
layout := createLayout(l.renderer, positionType)
|
layout := CreateLayout(l.renderer, positionType, l.assetManager)
|
||||||
l.entries = append(l.entries, &layoutEntry{widget: layout})
|
l.entries = append(l.entries, &layoutEntry{widget: layout})
|
||||||
|
|
||||||
return layout
|
return layout
|
||||||
@ -121,7 +124,7 @@ func (l *Layout) AddSpacerDynamic() *SpacerDynamic {
|
|||||||
|
|
||||||
// AddSprite given a path and palette, adds a Sprite as a layout entry
|
// AddSprite given a path and palette, adds a Sprite as a layout entry
|
||||||
func (l *Layout) AddSprite(imagePath, palettePath string) (*Sprite, error) {
|
func (l *Layout) AddSprite(imagePath, palettePath string) (*Sprite, error) {
|
||||||
sprite, err := createSprite(imagePath, palettePath)
|
sprite, err := createSprite(imagePath, palettePath, l.assetManager)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -134,7 +137,7 @@ func (l *Layout) AddSprite(imagePath, palettePath string) (*Sprite, error) {
|
|||||||
// AddAnimatedSprite given a path, palette, and direction will add an animated
|
// AddAnimatedSprite given a path, palette, and direction will add an animated
|
||||||
// sprite as a layout entry
|
// sprite as a layout entry
|
||||||
func (l *Layout) AddAnimatedSprite(imagePath, palettePath string, direction AnimationDirection) (*AnimatedSprite, error) {
|
func (l *Layout) AddAnimatedSprite(imagePath, palettePath string, direction AnimationDirection) (*AnimatedSprite, error) {
|
||||||
sprite, err := createAnimatedSprite(imagePath, palettePath, direction)
|
sprite, err := createAnimatedSprite(imagePath, palettePath, direction, l.assetManager)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -146,11 +149,13 @@ func (l *Layout) AddAnimatedSprite(imagePath, palettePath string, direction Anim
|
|||||||
|
|
||||||
// AddLabel given a string and a FontStyle, adds a text label as a layout entry
|
// AddLabel given a string and a FontStyle, adds a text label as a layout entry
|
||||||
func (l *Layout) AddLabel(text string, fontStyle FontStyle) (*Label, error) {
|
func (l *Layout) AddLabel(text string, fontStyle FontStyle) (*Label, error) {
|
||||||
label, err := createLabel(l.renderer, text, fontStyle)
|
font, err := l.loadFont(fontStyle)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
label := createLabel(l.renderer, text, font)
|
||||||
|
|
||||||
l.entries = append(l.entries, &layoutEntry{widget: label})
|
l.entries = append(l.entries, &layoutEntry{widget: label})
|
||||||
|
|
||||||
return label, nil
|
return label, nil
|
||||||
@ -419,7 +424,7 @@ func (l *Layout) createButton(renderer d2interface.Renderer, text string,
|
|||||||
return nil, errors.New("invalid button style")
|
return nil, errors.New("invalid button style")
|
||||||
}
|
}
|
||||||
|
|
||||||
animation, loadErr := singleton.asset.LoadAnimation(config.animationPath, config.palettePath)
|
animation, loadErr := l.assetManager.LoadAnimation(config.animationPath, config.palettePath)
|
||||||
if loadErr != nil {
|
if loadErr != nil {
|
||||||
return nil, loadErr
|
return nil, loadErr
|
||||||
}
|
}
|
||||||
@ -446,7 +451,7 @@ func (l *Layout) createButton(renderer d2interface.Renderer, text string,
|
|||||||
buttonHeight += h
|
buttonHeight += h
|
||||||
}
|
}
|
||||||
|
|
||||||
font, loadErr := loadFont(config.fontStyle)
|
font, loadErr := l.loadFont(config.fontStyle)
|
||||||
if loadErr != nil {
|
if loadErr != nil {
|
||||||
return nil, loadErr
|
return nil, loadErr
|
||||||
}
|
}
|
||||||
@ -496,3 +501,12 @@ func (l *Layout) createButton(renderer d2interface.Renderer, text string,
|
|||||||
|
|
||||||
return button, nil
|
return button, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l *Layout) loadFont(fontStyle FontStyle) (*d2asset.Font, error) {
|
||||||
|
config := getFontStyleConfig(fontStyle)
|
||||||
|
if config == nil {
|
||||||
|
return nil, errors.New("invalid font style")
|
||||||
|
}
|
||||||
|
|
||||||
|
return l.assetManager.LoadFont(config.fontBasePath+".tbl", config.fontBasePath+".dc6", config.palettePath)
|
||||||
|
}
|
||||||
|
@ -3,6 +3,7 @@ package d2gui
|
|||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AnimationDirection is a the animation play direction
|
// AnimationDirection is a the animation play direction
|
||||||
@ -30,8 +31,8 @@ type AnimatedSprite struct {
|
|||||||
*Sprite
|
*Sprite
|
||||||
}
|
}
|
||||||
|
|
||||||
func createSprite(imagePath, palettePath string) (*Sprite, error) {
|
func createSprite(imagePath, palettePath string, assetManager *d2asset.AssetManager) (*Sprite, error) {
|
||||||
animation, err := singleton.asset.LoadAnimation(imagePath, palettePath)
|
animation, err := assetManager.LoadAnimation(imagePath, palettePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -43,17 +44,13 @@ func createSprite(imagePath, palettePath string) (*Sprite, error) {
|
|||||||
return sprite, nil
|
return sprite, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createAnimatedSprite(imagePath, palettePath string, direction AnimationDirection) (*AnimatedSprite, error) {
|
func createAnimatedSprite(imagePath, palettePath string, direction AnimationDirection, assetManager *d2asset.AssetManager) (*AnimatedSprite, error) {
|
||||||
animation, err := singleton.asset.LoadAnimation(imagePath, palettePath)
|
animation, err := assetManager.LoadAnimation(imagePath, palettePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
sprite := &AnimatedSprite{
|
sprite := &AnimatedSprite{Sprite: &Sprite{animation: animation}}
|
||||||
&Sprite{},
|
|
||||||
}
|
|
||||||
|
|
||||||
sprite.animation = animation
|
|
||||||
|
|
||||||
if direction == DirectionForward {
|
if direction == DirectionForward {
|
||||||
sprite.animation.PlayForward()
|
sprite.animation.PlayForward()
|
||||||
|
@ -2,18 +2,8 @@ package d2screen
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// NewScreenManager creates a screen manager
|
|
||||||
func NewScreenManager(ui *d2ui.UIManager) *ScreenManager {
|
|
||||||
sm := &ScreenManager{
|
|
||||||
uiManager: ui,
|
|
||||||
}
|
|
||||||
|
|
||||||
return sm
|
|
||||||
}
|
|
||||||
|
|
||||||
// Screen is an exported interface
|
// Screen is an exported interface
|
||||||
type Screen interface{}
|
type Screen interface{}
|
||||||
|
|
||||||
|
@ -15,6 +15,12 @@ type ScreenManager struct {
|
|||||||
loadingScreen Screen
|
loadingScreen Screen
|
||||||
loadingState LoadingState
|
loadingState LoadingState
|
||||||
currentScreen Screen
|
currentScreen Screen
|
||||||
|
guiManager *d2gui.GuiManager
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewScreenManager creates a screen manager
|
||||||
|
func NewScreenManager(ui *d2ui.UIManager, guiManager *d2gui.GuiManager) *ScreenManager {
|
||||||
|
return &ScreenManager{uiManager: ui, guiManager: guiManager}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetNextScreen is about to set a given screen as next
|
// SetNextScreen is about to set a given screen as next
|
||||||
@ -37,14 +43,14 @@ func (sm *ScreenManager) Advance(elapsed float64) error {
|
|||||||
return load.err
|
return load.err
|
||||||
}
|
}
|
||||||
|
|
||||||
d2gui.ShowLoadScreen(load.progress)
|
sm.guiManager.ShowLoadScreen(load.progress)
|
||||||
|
|
||||||
if load.done {
|
if load.done {
|
||||||
sm.currentScreen = sm.loadingScreen
|
sm.currentScreen = sm.loadingScreen
|
||||||
sm.loadingScreen = nil
|
sm.loadingScreen = nil
|
||||||
|
|
||||||
d2gui.ShowCursor()
|
sm.guiManager.ShowCursor()
|
||||||
d2gui.HideLoadScreen()
|
sm.guiManager.HideLoadScreen()
|
||||||
}
|
}
|
||||||
case sm.nextScreen != nil:
|
case sm.nextScreen != nil:
|
||||||
if handler, ok := sm.currentScreen.(ScreenUnloadHandler); ok {
|
if handler, ok := sm.currentScreen.(ScreenUnloadHandler); ok {
|
||||||
@ -54,11 +60,11 @@ func (sm *ScreenManager) Advance(elapsed float64) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sm.uiManager.Reset()
|
sm.uiManager.Reset()
|
||||||
d2gui.SetLayout(nil)
|
sm.guiManager.SetLayout(nil)
|
||||||
|
|
||||||
if handler, ok := sm.nextScreen.(ScreenLoadHandler); ok {
|
if handler, ok := sm.nextScreen.(ScreenLoadHandler); ok {
|
||||||
d2gui.ShowLoadScreen(0)
|
sm.guiManager.ShowLoadScreen(0)
|
||||||
d2gui.HideCursor()
|
sm.guiManager.HideCursor()
|
||||||
|
|
||||||
sm.loadingState = LoadingState{updates: make(chan loadingUpdate)}
|
sm.loadingState = LoadingState{updates: make(chan loadingUpdate)}
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2enum"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -70,6 +71,8 @@ type EscapeMenu struct {
|
|||||||
renderer d2interface.Renderer
|
renderer d2interface.Renderer
|
||||||
audioProvider d2interface.AudioProvider
|
audioProvider d2interface.AudioProvider
|
||||||
navigator Navigator
|
navigator Navigator
|
||||||
|
guiManager *d2gui.GuiManager
|
||||||
|
assetManager *d2asset.AssetManager
|
||||||
}
|
}
|
||||||
|
|
||||||
type layout struct {
|
type layout struct {
|
||||||
@ -123,11 +126,18 @@ type actionableElement interface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewEscapeMenu creates a new escape menu
|
// NewEscapeMenu creates a new escape menu
|
||||||
func NewEscapeMenu(navigator Navigator, renderer d2interface.Renderer, audioProvider d2interface.AudioProvider) *EscapeMenu {
|
func NewEscapeMenu(navigator Navigator,
|
||||||
|
renderer d2interface.Renderer,
|
||||||
|
audioProvider d2interface.AudioProvider,
|
||||||
|
guiManager *d2gui.GuiManager,
|
||||||
|
assetManager *d2asset.AssetManager,
|
||||||
|
) *EscapeMenu {
|
||||||
m := &EscapeMenu{
|
m := &EscapeMenu{
|
||||||
audioProvider: audioProvider,
|
audioProvider: audioProvider,
|
||||||
renderer: renderer,
|
renderer: renderer,
|
||||||
navigator: navigator,
|
navigator: navigator,
|
||||||
|
guiManager: guiManager,
|
||||||
|
assetManager: assetManager,
|
||||||
}
|
}
|
||||||
|
|
||||||
m.layouts = []*layout{
|
m.layouts = []*layout{
|
||||||
@ -206,7 +216,7 @@ func (m *EscapeMenu) newConfigureControlsLayout() *layout {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *EscapeMenu) wrapLayout(fn func(*layout)) *layout {
|
func (m *EscapeMenu) wrapLayout(fn func(*layout)) *layout {
|
||||||
wrapper := d2gui.CreateLayout(m.renderer, d2gui.PositionTypeHorizontal)
|
wrapper := d2gui.CreateLayout(m.renderer, d2gui.PositionTypeHorizontal, m.assetManager)
|
||||||
wrapper.SetVerticalAlign(d2gui.VerticalAlignMiddle)
|
wrapper.SetVerticalAlign(d2gui.VerticalAlignMiddle)
|
||||||
wrapper.AddSpacerDynamic()
|
wrapper.AddSpacerDynamic()
|
||||||
|
|
||||||
@ -346,7 +356,7 @@ func (m *EscapeMenu) onEscKey() {
|
|||||||
func (m *EscapeMenu) close() {
|
func (m *EscapeMenu) close() {
|
||||||
m.isOpen = false
|
m.isOpen = false
|
||||||
|
|
||||||
d2gui.SetLayout(nil)
|
m.guiManager.SetLayout(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *EscapeMenu) open() {
|
func (m *EscapeMenu) open() {
|
||||||
@ -393,7 +403,7 @@ func (m *EscapeMenu) setLayout(id layoutID) {
|
|||||||
m.rightPent = m.layouts[id].rightPent
|
m.rightPent = m.layouts[id].rightPent
|
||||||
m.currentLayout = id
|
m.currentLayout = id
|
||||||
m.layouts[id].currentEl = 0
|
m.layouts[id].currentEl = 0
|
||||||
d2gui.SetLayout(m.layouts[id].Layout)
|
m.guiManager.SetLayout(m.layouts[id].Layout)
|
||||||
m.onHoverElement(0)
|
m.onHoverElement(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"image/color"
|
"image/color"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2math/d2vector"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2math/d2vector"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||||||
@ -44,6 +45,7 @@ type Game struct {
|
|||||||
escapeMenu *EscapeMenu
|
escapeMenu *EscapeMenu
|
||||||
soundEngine *d2audio.SoundEngine
|
soundEngine *d2audio.SoundEngine
|
||||||
soundEnv d2audio.SoundEnvironment
|
soundEnv d2audio.SoundEnvironment
|
||||||
|
guiManager *d2gui.GuiManager
|
||||||
|
|
||||||
renderer d2interface.Renderer
|
renderer d2interface.Renderer
|
||||||
inputManager d2interface.InputManager
|
inputManager d2interface.InputManager
|
||||||
@ -61,6 +63,7 @@ func CreateGame(
|
|||||||
audioProvider d2interface.AudioProvider,
|
audioProvider d2interface.AudioProvider,
|
||||||
gameClient *d2client.GameClient,
|
gameClient *d2client.GameClient,
|
||||||
term d2interface.Terminal,
|
term d2interface.Terminal,
|
||||||
|
guiManager *d2gui.GuiManager,
|
||||||
) *Game {
|
) *Game {
|
||||||
// find the local player and its initial location
|
// find the local player and its initial location
|
||||||
var startX, startY float64
|
var startX, startY float64
|
||||||
@ -85,13 +88,14 @@ func CreateGame(
|
|||||||
ticksSinceLevelCheck: 0,
|
ticksSinceLevelCheck: 0,
|
||||||
mapRenderer: d2maprenderer.CreateMapRenderer(asset, renderer,
|
mapRenderer: d2maprenderer.CreateMapRenderer(asset, renderer,
|
||||||
gameClient.MapEngine, term, startX, startY),
|
gameClient.MapEngine, term, startX, startY),
|
||||||
escapeMenu: NewEscapeMenu(navigator, renderer, audioProvider),
|
escapeMenu: NewEscapeMenu(navigator, renderer, audioProvider, guiManager, asset),
|
||||||
inputManager: inputManager,
|
inputManager: inputManager,
|
||||||
audioProvider: audioProvider,
|
audioProvider: audioProvider,
|
||||||
renderer: renderer,
|
renderer: renderer,
|
||||||
terminal: term,
|
terminal: term,
|
||||||
soundEngine: d2audio.NewSoundEngine(audioProvider, term),
|
soundEngine: d2audio.NewSoundEngine(audioProvider, term),
|
||||||
uiManager: ui,
|
uiManager: ui,
|
||||||
|
guiManager: guiManager,
|
||||||
}
|
}
|
||||||
result.soundEnv = d2audio.NewSoundEnvironment(result.soundEngine)
|
result.soundEnv = d2audio.NewSoundEnvironment(result.soundEngine)
|
||||||
|
|
||||||
@ -275,8 +279,8 @@ func (v *Game) bindGameControls() error {
|
|||||||
v.localPlayer = player
|
v.localPlayer = player
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
v.gameControls, err = d2player.NewGameControls(v.asset, v.renderer, player,
|
v.gameControls, err = d2player.NewGameControls(v.asset, v.renderer, player, v.gameClient.MapEngine,
|
||||||
v.gameClient.MapEngine, v.mapRenderer, v, v.terminal, v.uiManager, v.gameClient.IsSinglePlayer())
|
v.mapRenderer, v, v.terminal, v.uiManager, v.guiManager, v.gameClient.IsSinglePlayer())
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -4,25 +4,30 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
|
||||||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2gui"
|
||||||
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2screen"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GuiTestMain is a playground screen for the gui components
|
// GuiTestMain is a playground screen for the gui components
|
||||||
type GuiTestMain struct {
|
type GuiTestMain struct {
|
||||||
renderer d2interface.Renderer
|
renderer d2interface.Renderer
|
||||||
|
guiManager *d2gui.GuiManager
|
||||||
|
assetManager *d2asset.AssetManager
|
||||||
}
|
}
|
||||||
|
|
||||||
// CreateGuiTestMain creates a GuiTestMain screen
|
// CreateGuiTestMain creates a GuiTestMain screen
|
||||||
func CreateGuiTestMain(renderer d2interface.Renderer) *GuiTestMain {
|
func CreateGuiTestMain(renderer d2interface.Renderer, guiManager *d2gui.GuiManager, assetManager *d2asset.AssetManager) *GuiTestMain {
|
||||||
return &GuiTestMain{
|
return &GuiTestMain{
|
||||||
renderer: renderer,
|
renderer: renderer,
|
||||||
|
guiManager: guiManager,
|
||||||
|
assetManager: assetManager,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// OnLoad loads the resources and creates the gui components
|
// OnLoad loads the resources and creates the gui components
|
||||||
func (g *GuiTestMain) OnLoad(loading d2screen.LoadingState) {
|
func (g *GuiTestMain) OnLoad(loading d2screen.LoadingState) {
|
||||||
layout := d2gui.CreateLayout(g.renderer, d2gui.PositionTypeHorizontal)
|
layout := d2gui.CreateLayout(g.renderer, d2gui.PositionTypeHorizontal, g.assetManager)
|
||||||
|
|
||||||
loading.Progress(thirtyPercent)
|
loading.Progress(thirtyPercent)
|
||||||
//
|
//
|
||||||
@ -85,7 +90,7 @@ func (g *GuiTestMain) OnLoad(loading d2screen.LoadingState) {
|
|||||||
loading.Progress(ninetyPercent)
|
loading.Progress(ninetyPercent)
|
||||||
|
|
||||||
layout.SetVerticalAlign(d2gui.VerticalAlignMiddle)
|
layout.SetVerticalAlign(d2gui.VerticalAlignMiddle)
|
||||||
d2gui.SetLayout(layout)
|
g.guiManager.SetLayout(layout)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render does nothing for the GuiTestMain screen
|
// Render does nothing for the GuiTestMain screen
|
||||||
|
@ -112,6 +112,7 @@ func NewGameControls(
|
|||||||
inputListener InputCallbackListener,
|
inputListener InputCallbackListener,
|
||||||
term d2interface.Terminal,
|
term d2interface.Terminal,
|
||||||
ui *d2ui.UIManager,
|
ui *d2ui.UIManager,
|
||||||
|
guiManager *d2gui.GuiManager,
|
||||||
isSinglePlayer bool,
|
isSinglePlayer bool,
|
||||||
) (*GameControls, error) {
|
) (*GameControls, error) {
|
||||||
missileID := initialMissileID
|
missileID := initialMissileID
|
||||||
@ -172,7 +173,7 @@ func NewGameControls(
|
|||||||
mapRenderer: mapRenderer,
|
mapRenderer: mapRenderer,
|
||||||
inventory: NewInventory(asset, ui, inventoryRecord),
|
inventory: NewInventory(asset, ui, inventoryRecord),
|
||||||
heroStatsPanel: NewHeroStatsPanel(asset, ui, hero.Name(), hero.Class, hero.Stats),
|
heroStatsPanel: NewHeroStatsPanel(asset, ui, hero.Name(), hero.Class, hero.Stats),
|
||||||
helpOverlay: help.NewHelpOverlay(asset, renderer, ui),
|
helpOverlay: help.NewHelpOverlay(asset, renderer, ui, guiManager),
|
||||||
miniPanel: newMiniPanel(asset, ui, isSinglePlayer),
|
miniPanel: newMiniPanel(asset, ui, isSinglePlayer),
|
||||||
missileID: missileID,
|
missileID: missileID,
|
||||||
nameLabel: hoverLabel,
|
nameLabel: hoverLabel,
|
||||||
|
@ -22,7 +22,7 @@ const (
|
|||||||
rFrame
|
rFrame
|
||||||
)
|
)
|
||||||
|
|
||||||
// HelpOverlay represents the in-game overlay that toggles visibility when the h key is pressed
|
// Overlay represents the in-game overlay that toggles visibility when the h key is pressed
|
||||||
type Overlay struct {
|
type Overlay struct {
|
||||||
asset *d2asset.AssetManager
|
asset *d2asset.AssetManager
|
||||||
isOpen bool
|
isOpen bool
|
||||||
@ -35,14 +35,20 @@ type Overlay struct {
|
|||||||
originY int
|
originY int
|
||||||
layout *d2gui.Layout
|
layout *d2gui.Layout
|
||||||
closeButton *d2ui.Button
|
closeButton *d2ui.Button
|
||||||
|
guiManager *d2gui.GuiManager
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHelpOverlay(asset *d2asset.AssetManager, renderer d2interface.Renderer,
|
func NewHelpOverlay(
|
||||||
ui *d2ui.UIManager) *Overlay {
|
asset *d2asset.AssetManager,
|
||||||
|
renderer d2interface.Renderer,
|
||||||
|
ui *d2ui.UIManager,
|
||||||
|
guiManager *d2gui.GuiManager,
|
||||||
|
) *Overlay {
|
||||||
h := &Overlay{
|
h := &Overlay{
|
||||||
asset: asset,
|
asset: asset,
|
||||||
renderer: renderer,
|
renderer: renderer,
|
||||||
uiManager: ui,
|
uiManager: ui,
|
||||||
|
guiManager: guiManager,
|
||||||
}
|
}
|
||||||
|
|
||||||
return h
|
return h
|
||||||
@ -65,19 +71,19 @@ func (h *Overlay) Toggle() {
|
|||||||
func (h *Overlay) close() {
|
func (h *Overlay) close() {
|
||||||
h.isOpen = false
|
h.isOpen = false
|
||||||
h.closeButton.SetVisible(false)
|
h.closeButton.SetVisible(false)
|
||||||
d2gui.SetLayout(nil)
|
h.guiManager.SetLayout(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Overlay) open() {
|
func (h *Overlay) open() {
|
||||||
h.isOpen = true
|
h.isOpen = true
|
||||||
if h.layout == nil {
|
if h.layout == nil {
|
||||||
h.layout = d2gui.CreateLayout(h.renderer, d2gui.PositionTypeHorizontal)
|
h.layout = d2gui.CreateLayout(h.renderer, d2gui.PositionTypeHorizontal, h.asset)
|
||||||
}
|
}
|
||||||
|
|
||||||
h.closeButton.SetVisible(true)
|
h.closeButton.SetVisible(true)
|
||||||
h.closeButton.SetPressed(false)
|
h.closeButton.SetPressed(false)
|
||||||
|
|
||||||
d2gui.SetLayout(h.layout)
|
h.guiManager.SetLayout(h.layout)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Overlay) IsOpen() bool {
|
func (h *Overlay) IsOpen() bool {
|
||||||
|
Loading…
Reference in New Issue
Block a user