1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-09-25 20:55:55 -04:00
OpenDiablo2/d2core/d2ui/frame.go

236 lines
3.9 KiB
Go
Raw Normal View History

package d2ui
import (
"log"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2interface"
"github.com/OpenDiablo2/OpenDiablo2/d2common/d2resource"
"github.com/OpenDiablo2/OpenDiablo2/d2core/d2asset"
)
type UIFrame struct {
asset *d2asset.AssetManager
uiManager *UIManager
frame *Sprite
originX int
originY int
frameOrientation FrameOrientation
}
type FrameOrientation = int
const(
FrameLeft FrameOrientation = iota
FrameRight
)
func NewUIFrame (
asset *d2asset.AssetManager,
uiManager *UIManager,
frameOrientation FrameOrientation,
) *UIFrame {
var originX, originY = 0,0
switch frameOrientation {
case FrameLeft:
originX = 0
originY = 0
case FrameRight:
originX = 400
originY = 0
}
frame := &UIFrame {
asset : asset,
uiManager: uiManager,
frameOrientation: frameOrientation,
originX: originX,
originY: originY,
}
frame.Load()
return frame
}
func (u *UIFrame) Load() {
sprite, err := u.uiManager.NewSprite(d2resource.Frame, d2resource.PaletteSky)
if err != nil {
log.Print(err)
}
u.frame = sprite
}
func (u *UIFrame) Render(target d2interface.Surface) error {
switch u.frameOrientation {
case FrameLeft:
return u.renderLeft(target)
case FrameRight:
return u.renderRight(target)
}
return nil
}
func (u *UIFrame) renderLeft(target d2interface.Surface) error {
x, y := u.originX, u.originY
// Frame
// Top left
if err := u.frame.SetCurrentFrame(0); err != nil {
return err
}
w, h := u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x, y+h)
if err := u.frame.Render(target); err != nil {
return err
}
x += w
y += h
// Top right
if err := u.frame.SetCurrentFrame(1); err != nil {
return err
}
_, h = u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x, u.originY+h)
if err := u.frame.Render(target); err != nil {
return err
}
x = u.originX
// Right
if err := u.frame.SetCurrentFrame(2); err != nil {
return err
}
_, h = u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x, y+h)
if err := u.frame.Render(target); err != nil {
return err
}
y += h
// Bottom left
if err := u.frame.SetCurrentFrame(3); err != nil {
return err
}
w, h = u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x, y+h)
if err := u.frame.Render(target); err != nil {
return err
}
x += w
// Bottom right
if err := u.frame.SetCurrentFrame(4); err != nil {
return err
}
_, h = u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x, y+h)
if err := u.frame.Render(target); err != nil {
return err
}
return nil
}
func (u *UIFrame) renderRight(target d2interface.Surface) error {
x, y := u.originX, u.originY
// Frame
// Top left
if err := u.frame.SetCurrentFrame(5); err != nil {
return err
}
w, h := u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x, y+h)
if err := u.frame.Render(target); err != nil {
return err
}
x += w
// Top right
if err := u.frame.SetCurrentFrame(6); err != nil {
return err
}
w, h = u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x, y+h)
if err := u.frame.Render(target); err != nil {
return err
}
x += w
y += h
// Right
if err := u.frame.SetCurrentFrame(7); err != nil {
return err
}
w, h = u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x-w, y+h)
if err := u.frame.Render(target); err != nil {
return err
}
y += h
// Bottom right
if err := u.frame.SetCurrentFrame(8); err != nil {
return err
}
w, h = u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x-w, y+h)
if err := u.frame.Render(target); err != nil {
return err
}
x -= w
// Bottom left
if err := u.frame.SetCurrentFrame(9); err != nil {
return err
}
w, h = u.frame.GetCurrentFrameSize()
u.frame.SetPosition(x-w, y+h)
if err := u.frame.Render(target); err != nil {
return err
}
return nil
}
func (u *UIFrame) GetFrameBounds() (width, height int) {
return u.frame.GetFrameBounds()
}
func (u *UIFrame) GetFrameCount() int {
return u.frame.GetFrameCount()
}