51 lines
1,008 B
Go
51 lines
1,008 B
Go
package ax
|
|
|
|
import (
|
|
"surdeus.su/core/gg"
|
|
)
|
|
|
|
// Unique identifier for animation
|
|
// in the animation set.
|
|
type AnimationID int
|
|
|
|
// The type describes set of animations
|
|
// to switch between.
|
|
type AnimationSet map[AnimationID] Animation
|
|
|
|
// Make new animation set from an image.
|
|
func AnimationSetFromImage(
|
|
img *gg.Image,
|
|
// Width and height of one frame respectively.
|
|
w, h int,
|
|
// Gaps for X and Y respectively.
|
|
gx, gy int,
|
|
defines ...AnimationDefine,
|
|
) (AnimationSet, error) {
|
|
set := AnimationSet{}
|
|
|
|
r := img.Bounds()
|
|
fw, fh := r.Dx()/w, r.Dy()/h
|
|
|
|
for _, define := range defines {
|
|
animation := make(Animation, len(define.Indexes))
|
|
for i := range animation {
|
|
idx := define.Indexes[i]
|
|
rect := gg.ImageRect{
|
|
Min: gg.ImagePoint{
|
|
idx.X*fw+gx,
|
|
idx.Y*fh+gy,
|
|
},
|
|
Max: gg.ImagePoint{
|
|
(idx.X+1)*fw-gx,
|
|
(idx.Y+1)*fh-gy,
|
|
},
|
|
}
|
|
subImg := img.SubImage(rect)
|
|
animation[i] = gg.NewImageFromImage(subImg)
|
|
}
|
|
set[define.Id] = animation
|
|
}
|
|
|
|
return set, nil
|
|
}
|
|
|