First commit >:]
This commit is contained in:
104
reward.go
Normal file
104
reward.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"image"
|
||||
_ "image/png"
|
||||
"log"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
)
|
||||
|
||||
const (
|
||||
REWARD_HEIGHT = 32
|
||||
REWARD_WIDTH = 32
|
||||
|
||||
SHINY_ANIMATION_CYCLES = 9
|
||||
SHINY_ROW_INDEX = 11
|
||||
SPARKLE_ROW_INDEX = 7
|
||||
)
|
||||
|
||||
var (
|
||||
//go:embed resources/images/gold.png
|
||||
assetsReward_png []byte
|
||||
rewardsImage *ebiten.Image
|
||||
|
||||
//go:embed resources/images/shiny.png
|
||||
assetsShiny_png []byte
|
||||
shinyImage *ebiten.Image
|
||||
)
|
||||
|
||||
type Reward struct {
|
||||
Sprite *ebiten.Image
|
||||
scratch *ebiten.Image
|
||||
cycle int
|
||||
}
|
||||
|
||||
func NewReward() *Reward {
|
||||
r := &Reward{
|
||||
cycle: 0,
|
||||
}
|
||||
r.Sprite = ebiten.NewImageFromImage(rewardsImage)
|
||||
r.scratch = ebiten.NewImageFromImage(rewardsImage)
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *Reward) Animate() {
|
||||
|
||||
r.scratch.Clear()
|
||||
r.Sprite.Clear()
|
||||
|
||||
r.scratch.DrawImage(rewardsImage.SubImage(image.Rect(0, 0, REWARD_WIDTH, REWARD_HEIGHT)).(*ebiten.Image), nil)
|
||||
|
||||
if r.cycle < SHINY_ANIMATION_CYCLES {
|
||||
//add sheen
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.Blend = ebiten.BlendSourceAtop
|
||||
|
||||
sx := r.cycle * REWARD_WIDTH
|
||||
sy := REWARD_HEIGHT * SHINY_ROW_INDEX
|
||||
|
||||
ex := sx + REWARD_WIDTH
|
||||
ey := sy + REWARD_HEIGHT
|
||||
|
||||
r.scratch.DrawImage(shinyImage.SubImage(image.Rect(sx, sy, ex, ey)).(*ebiten.Image), op)
|
||||
|
||||
//add sparkle
|
||||
spsy := REWARD_HEIGHT * SPARKLE_ROW_INDEX
|
||||
spey := spsy + REWARD_HEIGHT
|
||||
op.GeoM.Translate(REWARD_WIDTH/2, REWARD_HEIGHT/2)
|
||||
r.scratch.DrawImage(shinyImage.SubImage(image.Rect(sx, spsy, ex, spey)).(*ebiten.Image), nil)
|
||||
}
|
||||
|
||||
r.Sprite.DrawImage(r.scratch, nil)
|
||||
r.CycleUpdate()
|
||||
}
|
||||
|
||||
func (r *Reward) CycleUpdate() {
|
||||
r.cycle = (r.cycle + 1) % (SHINY_ANIMATION_CYCLES * 8)
|
||||
}
|
||||
|
||||
func (r *Reward) Width() int {
|
||||
return REWARD_WIDTH
|
||||
}
|
||||
|
||||
func (r *Reward) Height() int {
|
||||
return REWARD_HEIGHT
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
||||
img, _, err := image.Decode(bytes.NewReader(assetsReward_png))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
rewardsImage = ebiten.NewImageFromImage(img)
|
||||
|
||||
img, _, err = image.Decode(bytes.NewReader(assetsShiny_png))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
shinyImage = ebiten.NewImageFromImage(img)
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user