refact
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
package lib
|
||||
|
||||
import (
|
||||
"math"
|
||||
"math/rand"
|
||||
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
)
|
||||
|
||||
type Rabbit struct {
|
||||
Lane int
|
||||
T float64
|
||||
Speed float64
|
||||
}
|
||||
|
||||
// newRabbit spawns a rabbit at the horizon with a speed that ramps up with score.
|
||||
func newRabbit(score int) *Rabbit {
|
||||
return &Rabbit{
|
||||
Lane: rand.Intn(LaneCount),
|
||||
Speed: 0.010 + rand.Float64()*0.006 + math.Min(float64(score), 60)*0.0002,
|
||||
}
|
||||
}
|
||||
|
||||
// Position returns the on-screen pixel position along the perspective curve.
|
||||
func (r *Rabbit) Position() (float32, float32) {
|
||||
endX := float64(LaneX[r.Lane])
|
||||
endY := PlayerY - 6.0
|
||||
x := HorizonX + (endX-HorizonX)*(r.T*r.T)
|
||||
y := HorizonY + (endY-HorizonY)*r.T
|
||||
hop := math.Abs(math.Sin(r.T*14)) * (2 + r.T*4)
|
||||
return float32(x), float32(y - hop)
|
||||
}
|
||||
|
||||
// Draw renders the rabbit, growing from the horizon and cycling hop frames.
|
||||
func (r *Rabbit) Draw(dst *ebiten.Image, frames [4]*ebiten.Image) {
|
||||
x, y := r.Position()
|
||||
h := float32(6 + r.T*22)
|
||||
frame := frames[int(r.T*16)%len(frames)]
|
||||
blitH(dst, frame, x, y+h/2, h)
|
||||
}
|
||||
Reference in New Issue
Block a user