mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-11-02 17:27:23 -04:00
125 lines
2.4 KiB
Go
125 lines
2.4 KiB
Go
|
package d2player
|
||
|
|
||
|
import (
|
||
|
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
|
||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
|
||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2render"
|
||
|
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2ui"
|
||
|
)
|
||
|
|
||
|
type HeroStats struct {
|
||
|
frame *d2ui.Sprite
|
||
|
panel *d2ui.Sprite
|
||
|
originX int
|
||
|
originY int
|
||
|
isOpen bool
|
||
|
}
|
||
|
|
||
|
func NewHeroStats() *HeroStats {
|
||
|
originX := 0
|
||
|
originY := 0
|
||
|
return &HeroStats{
|
||
|
originX: originX,
|
||
|
originY: originY,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *HeroStats) Load() {
|
||
|
animation, _ := d2asset.LoadAnimation(d2resource.Frame, d2resource.PaletteSky)
|
||
|
s.frame, _ = d2ui.LoadSprite(animation)
|
||
|
animation, _ = d2asset.LoadAnimation(d2resource.InventoryCharacterPanel, d2resource.PaletteSky)
|
||
|
s.panel, _ = d2ui.LoadSprite(animation)
|
||
|
}
|
||
|
|
||
|
func (s *HeroStats) IsOpen() bool {
|
||
|
return s.isOpen
|
||
|
}
|
||
|
|
||
|
func (s *HeroStats) Toggle() {
|
||
|
s.isOpen = !s.isOpen
|
||
|
}
|
||
|
|
||
|
func (s *HeroStats) Open() {
|
||
|
s.isOpen = true
|
||
|
}
|
||
|
|
||
|
func (s *HeroStats) Close() {
|
||
|
s.isOpen = false
|
||
|
}
|
||
|
|
||
|
func (s *HeroStats) Render(target d2render.Surface) {
|
||
|
if !s.isOpen {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
x, y := s.originX, s.originY
|
||
|
|
||
|
// Frame
|
||
|
// Top left
|
||
|
s.frame.SetCurrentFrame(0)
|
||
|
w, h := s.frame.GetCurrentFrameSize()
|
||
|
s.frame.SetPosition(x, y+h)
|
||
|
s.frame.Render(target)
|
||
|
x += w
|
||
|
y += h
|
||
|
|
||
|
// Top right
|
||
|
s.frame.SetCurrentFrame(1)
|
||
|
w, h = s.frame.GetCurrentFrameSize()
|
||
|
s.frame.SetPosition(x, s.originY+h)
|
||
|
s.frame.Render(target)
|
||
|
x = s.originX
|
||
|
|
||
|
// Right
|
||
|
s.frame.SetCurrentFrame(2)
|
||
|
w, h = s.frame.GetCurrentFrameSize()
|
||
|
s.frame.SetPosition(x, y+h)
|
||
|
s.frame.Render(target)
|
||
|
y += h
|
||
|
|
||
|
// Bottom left
|
||
|
s.frame.SetCurrentFrame(3)
|
||
|
w, h = s.frame.GetCurrentFrameSize()
|
||
|
s.frame.SetPosition(x, y+h)
|
||
|
s.frame.Render(target)
|
||
|
x += w
|
||
|
|
||
|
// Bottom right
|
||
|
s.frame.SetCurrentFrame(4)
|
||
|
w, h = s.frame.GetCurrentFrameSize()
|
||
|
s.frame.SetPosition(x, y+h)
|
||
|
s.frame.Render(target)
|
||
|
|
||
|
x, y = s.originX, s.originY
|
||
|
y += 64
|
||
|
x += 80
|
||
|
|
||
|
// Panel
|
||
|
// Top left
|
||
|
s.panel.SetCurrentFrame(0)
|
||
|
w, h = s.panel.GetCurrentFrameSize()
|
||
|
s.panel.SetPosition(x, y+h)
|
||
|
s.panel.Render(target)
|
||
|
x += w
|
||
|
|
||
|
// Top right
|
||
|
s.panel.SetCurrentFrame(1)
|
||
|
w, h = s.panel.GetCurrentFrameSize()
|
||
|
s.panel.SetPosition(x, y+h)
|
||
|
s.panel.Render(target)
|
||
|
y += h
|
||
|
|
||
|
// Bottom right
|
||
|
s.panel.SetCurrentFrame(3)
|
||
|
w, h = s.panel.GetCurrentFrameSize()
|
||
|
s.panel.SetPosition(x, y+h)
|
||
|
s.panel.Render(target)
|
||
|
|
||
|
// Bottom left
|
||
|
s.panel.SetCurrentFrame(2)
|
||
|
w, h = s.panel.GetCurrentFrameSize()
|
||
|
s.panel.SetPosition(x-w, y+h)
|
||
|
s.panel.Render(target)
|
||
|
|
||
|
}
|