diff --git a/d2core/d2map/d2maprenderer/renderer.go b/d2core/d2map/d2maprenderer/renderer.go index 867d16d8..16b9e625 100644 --- a/d2core/d2map/d2maprenderer/renderer.go +++ b/d2core/d2map/d2maprenderer/renderer.go @@ -352,3 +352,15 @@ func loadPaletteForAct(levelType d2enum.RegionIdType) (*d2dat.DATPalette, error) return d2asset.LoadPalette(palettePath) } + +func (mr *MapRenderer) ViewportToLeft() { + mr.viewport.toLeft() +} + +func (mr *MapRenderer) ViewportToRight() { + mr.viewport.toRight() +} + +func (mr *MapRenderer) ViewportDefault() { + mr.viewport.resetAlign() +} diff --git a/d2game/d2player/game_controls.go b/d2game/d2player/game_controls.go index f1b74d64..9780a95e 100644 --- a/d2game/d2player/game_controls.go +++ b/d2game/d2player/game_controls.go @@ -100,6 +100,7 @@ func (g *GameControls) OnKeyDown(event d2input.KeyEvent) bool { if g.inventory.IsOpen() || g.heroStats.IsOpen() { g.inventory.Close() g.heroStats.Close() + g.updateLayout() break } g.escapeMenu.Toggle() @@ -111,8 +112,10 @@ func (g *GameControls) OnKeyDown(event d2input.KeyEvent) bool { g.escapeMenu.OnEnterKey() case d2input.KeyI: g.inventory.Toggle() + g.updateLayout() case d2input.KeyC: g.heroStats.Toggle() + g.updateLayout() default: return false } @@ -190,6 +193,23 @@ func (g *GameControls) Advance(elapsed float64) error { return nil } +func (g *GameControls) updateLayout() { + isRightPanelOpen := false + isLeftPanelOpen := false + + // todo : add same logic when adding quest log and skill tree + isRightPanelOpen = g.inventory.isOpen || isRightPanelOpen + isLeftPanelOpen = g.heroStats.isOpen || isLeftPanelOpen + + if isRightPanelOpen == isLeftPanelOpen { + g.mapRenderer.ViewportDefault() + } else if isRightPanelOpen == true { + g.mapRenderer.ViewportToLeft() + } else { + g.mapRenderer.ViewportToRight() + } +} + // TODO: consider caching the panels to single image that is reused. func (g *GameControls) Render(target d2render.Surface) { g.inventory.Render(target)