mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-10-01 15:46:17 -04:00
removed magic numbers from d2ui/frame.go (#784)
This commit is contained in:
parent
7661b81576
commit
2704a23289
@ -9,26 +9,43 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type UIFrame struct {
|
type UIFrame struct {
|
||||||
asset *d2asset.AssetManager
|
asset *d2asset.AssetManager
|
||||||
uiManager *UIManager
|
uiManager *UIManager
|
||||||
frame *Sprite
|
frame *Sprite
|
||||||
originX int
|
originX int
|
||||||
originY int
|
originY int
|
||||||
frameOrientation FrameOrientation
|
frameOrientation FrameOrientation
|
||||||
}
|
}
|
||||||
|
|
||||||
type FrameOrientation = int
|
type FrameOrientation = int
|
||||||
const(
|
|
||||||
|
const (
|
||||||
FrameLeft FrameOrientation = iota
|
FrameLeft FrameOrientation = iota
|
||||||
FrameRight
|
FrameRight
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewUIFrame (
|
// frame indices into dc6 images for panels
|
||||||
|
const (
|
||||||
|
leftFrameTopLeft = iota
|
||||||
|
leftFrameTopRight
|
||||||
|
leftFrameMiddleRight
|
||||||
|
leftFrameBottomLeft
|
||||||
|
leftFrameBottomRight
|
||||||
|
rightFrameTopLeft
|
||||||
|
rightFrameTopRight
|
||||||
|
rightFrameMiddleRight
|
||||||
|
rightFrameBottomRight
|
||||||
|
rightFrameBottomLeft
|
||||||
|
)
|
||||||
|
|
||||||
|
type offsetCalcFn = func(u *UIFrame) (x, y int)
|
||||||
|
|
||||||
|
func NewUIFrame(
|
||||||
asset *d2asset.AssetManager,
|
asset *d2asset.AssetManager,
|
||||||
uiManager *UIManager,
|
uiManager *UIManager,
|
||||||
frameOrientation FrameOrientation,
|
frameOrientation FrameOrientation,
|
||||||
) *UIFrame {
|
) *UIFrame {
|
||||||
var originX, originY = 0,0
|
var originX, originY = 0, 0
|
||||||
|
|
||||||
switch frameOrientation {
|
switch frameOrientation {
|
||||||
case FrameLeft:
|
case FrameLeft:
|
||||||
@ -38,12 +55,12 @@ func NewUIFrame (
|
|||||||
originX = 400
|
originX = 400
|
||||||
originY = 0
|
originY = 0
|
||||||
}
|
}
|
||||||
frame := &UIFrame {
|
frame := &UIFrame{
|
||||||
asset : asset,
|
asset: asset,
|
||||||
uiManager: uiManager,
|
uiManager: uiManager,
|
||||||
frameOrientation: frameOrientation,
|
frameOrientation: frameOrientation,
|
||||||
originX: originX,
|
originX: originX,
|
||||||
originY: originY,
|
originY: originY,
|
||||||
}
|
}
|
||||||
frame.Load()
|
frame.Load()
|
||||||
return frame
|
return frame
|
||||||
@ -68,161 +85,118 @@ func (u *UIFrame) Render(target d2interface.Surface) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (u *UIFrame) renderLeft(target d2interface.Surface) error {
|
func (u *UIFrame) renderLeft(target d2interface.Surface) error {
|
||||||
x, y := u.originX, u.originY
|
// the frame pieces we are interested in.
|
||||||
|
framePieces := []int{
|
||||||
// Frame
|
leftFrameTopLeft,
|
||||||
// Top left
|
leftFrameTopRight,
|
||||||
if err := u.frame.SetCurrentFrame(0); err != nil {
|
leftFrameMiddleRight,
|
||||||
return err
|
leftFrameBottomLeft,
|
||||||
|
leftFrameBottomRight,
|
||||||
}
|
}
|
||||||
|
|
||||||
w, h := u.frame.GetCurrentFrameSize()
|
// the frame coordinates
|
||||||
|
coord := make(map[int]*struct{ x, y int })
|
||||||
|
|
||||||
u.frame.SetPosition(x, y+h)
|
startX, startY := u.originX, u.originY
|
||||||
|
currentX, currentY := startX, startY
|
||||||
|
|
||||||
if err := u.frame.Render(target); err != nil {
|
// first determine the coordinates for each frame
|
||||||
return err
|
// the order that we check is important
|
||||||
|
for _, piece := range framePieces {
|
||||||
|
width, height, err := u.frame.GetFrameSize(piece)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
c := &struct{ x, y int }{}
|
||||||
|
|
||||||
|
switch piece {
|
||||||
|
case leftFrameTopLeft:
|
||||||
|
c.x, c.y = currentX, currentY+height
|
||||||
|
currentX, currentY = currentX+width, currentY+height
|
||||||
|
case leftFrameTopRight:
|
||||||
|
c.x, c.y = currentX, startY+height
|
||||||
|
currentX = startX
|
||||||
|
case leftFrameMiddleRight:
|
||||||
|
c.x, c.y = currentX, currentY+height
|
||||||
|
currentY += height
|
||||||
|
case leftFrameBottomLeft:
|
||||||
|
c.x, c.y = currentX, currentY+height
|
||||||
|
currentX += width
|
||||||
|
case leftFrameBottomRight:
|
||||||
|
c.x, c.y = currentX, currentY+height
|
||||||
|
}
|
||||||
|
|
||||||
|
coord[piece] = c
|
||||||
}
|
}
|
||||||
|
|
||||||
x += w
|
// now render the pieces with the coordinates
|
||||||
y += h
|
for idx, c := range coord {
|
||||||
|
err := u.renderFramePiece(target, c.x, c.y, idx)
|
||||||
// Top right
|
if err != nil {
|
||||||
if err := u.frame.SetCurrentFrame(1); err != nil {
|
return err
|
||||||
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *UIFrame) renderRight(target d2interface.Surface) error {
|
func (u *UIFrame) renderRight(target d2interface.Surface) error {
|
||||||
x, y := u.originX, u.originY
|
// the frame pieces we are interested in.
|
||||||
|
framePieces := []int{
|
||||||
// Frame
|
rightFrameTopLeft,
|
||||||
// Top left
|
rightFrameTopRight,
|
||||||
if err := u.frame.SetCurrentFrame(5); err != nil {
|
rightFrameMiddleRight,
|
||||||
return err
|
rightFrameBottomRight,
|
||||||
|
rightFrameBottomLeft,
|
||||||
}
|
}
|
||||||
|
|
||||||
w, h := u.frame.GetCurrentFrameSize()
|
// the frame coordinates
|
||||||
|
coord := make(map[int]*struct{ x, y int })
|
||||||
|
|
||||||
u.frame.SetPosition(x, y+h)
|
startX, startY := u.originX, u.originY
|
||||||
|
currentX, currentY := startX, startY
|
||||||
|
|
||||||
if err := u.frame.Render(target); err != nil {
|
// first determine the coordinates for each frame
|
||||||
return err
|
// the order that we check is important
|
||||||
|
for _, piece := range framePieces {
|
||||||
|
width, height, err := u.frame.GetFrameSize(piece)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
c := &struct{ x, y int }{}
|
||||||
|
|
||||||
|
switch piece {
|
||||||
|
case rightFrameTopLeft:
|
||||||
|
c.x, c.y = currentX, currentY+height
|
||||||
|
currentX += width
|
||||||
|
case rightFrameTopRight:
|
||||||
|
c.x, c.y = currentX, currentY+height
|
||||||
|
currentX += width
|
||||||
|
currentY += height
|
||||||
|
case rightFrameMiddleRight:
|
||||||
|
c.x, c.y = currentX-width, currentY+height
|
||||||
|
currentY += height
|
||||||
|
case rightFrameBottomRight:
|
||||||
|
c.x, c.y = currentX-width, currentY+height
|
||||||
|
currentX -= width
|
||||||
|
case rightFrameBottomLeft:
|
||||||
|
c.x, c.y = currentX-width, currentY+height
|
||||||
|
currentX += width
|
||||||
|
}
|
||||||
|
|
||||||
|
coord[piece] = c
|
||||||
}
|
}
|
||||||
|
|
||||||
x += w
|
// now render the pieces with the coordinates
|
||||||
|
for idx, c := range coord {
|
||||||
// Top right
|
err := u.renderFramePiece(target, c.x, c.y, idx)
|
||||||
if err := u.frame.SetCurrentFrame(6); err != nil {
|
if err != nil {
|
||||||
return err
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,3 +207,17 @@ func (u *UIFrame) GetFrameBounds() (width, height int) {
|
|||||||
func (u *UIFrame) GetFrameCount() int {
|
func (u *UIFrame) GetFrameCount() int {
|
||||||
return u.frame.GetFrameCount()
|
return u.frame.GetFrameCount()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *UIFrame) renderFramePiece(sfc d2interface.Surface, x, y, idx int) error {
|
||||||
|
if err := u.frame.SetCurrentFrame(idx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
u.frame.SetPosition(x, y)
|
||||||
|
|
||||||
|
if err := u.frame.Render(sfc); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user