66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package hero
|
|
|
|
import (
|
|
"image"
|
|
"image/color"
|
|
_ "image/gif"
|
|
"os"
|
|
|
|
"github.com/hajimehoshi/ebiten/v2"
|
|
)
|
|
|
|
var (
|
|
spriteBack1 *ebiten.Image
|
|
spriteBack2 *ebiten.Image
|
|
spriteFront1 *ebiten.Image
|
|
spriteFront2 *ebiten.Image
|
|
spriteLeft1 *ebiten.Image
|
|
spriteLeft2 *ebiten.Image
|
|
spriteRight1 *ebiten.Image
|
|
spriteRight2 *ebiten.Image
|
|
)
|
|
|
|
func init() {
|
|
spriteBack1 = loadSprite("assets/hero/avt1_bk1.gif")
|
|
spriteBack2 = loadSprite("assets/hero/avt1_bk2.gif")
|
|
spriteFront1 = loadSprite("assets/hero/avt1_fr1.gif")
|
|
spriteFront2 = loadSprite("assets/hero/avt1_fr2.gif")
|
|
spriteLeft1 = loadSprite("assets/hero/avt1_lf1.gif")
|
|
spriteLeft2 = loadSprite("assets/hero/avt1_lf2.gif")
|
|
spriteRight1 = loadSprite("assets/hero/avt1_rt1.gif")
|
|
spriteRight2 = loadSprite("assets/hero/avt1_rt2.gif")
|
|
}
|
|
|
|
func loadSprite(path string) *ebiten.Image {
|
|
file, err := os.Open(path)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer file.Close()
|
|
|
|
img, _, err := image.Decode(file)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
bounds := img.Bounds()
|
|
rgba := image.NewRGBA(bounds)
|
|
for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
|
|
for x := bounds.Min.X; x < bounds.Max.X; x++ {
|
|
r, g, b, a := img.At(x, y).RGBA()
|
|
if r > 0xf000 && g > 0xf000 && b > 0xf000 {
|
|
rgba.Set(x, y, color.RGBA{0, 0, 0, 0})
|
|
} else {
|
|
rgba.Set(x, y, color.RGBA{
|
|
R: uint8(r >> 8),
|
|
G: uint8(g >> 8),
|
|
B: uint8(b >> 8),
|
|
A: uint8(a >> 8),
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
return ebiten.NewImageFromImage(rgba)
|
|
}
|