Updated exit condition. Added interactive mosaic effect.

This commit is contained in:
2023-08-31 17:03:20 -04:00
parent ffb02b2169
commit b6ea6abad6

View File

@@ -21,6 +21,9 @@ const (
maxGlitchOffset = 25 maxGlitchOffset = 25
minGlitchInterval = 60 minGlitchInterval = 60
maxGlitchTimeOffset = 15 maxGlitchTimeOffset = 15
//in seconds
fadeTimer = 1.0
fadeOffset = 2.0
) )
var ( var (
@@ -56,6 +59,46 @@ func init() {
glitchTimer = 15 glitchTimer = 15
} }
type Fader struct {
Curtain *ebiten.Image
counter int
timer float32
offset float32
alpha float32
fps float32
}
func NewFader(x, y int, t, offset float32) Fader {
f := Fader{
Curtain: ebiten.NewImage(x, y),
timer: t,
counter: 0,
alpha: 0.0,
fps: 60,
offset: offset,
}
f.Curtain.Fill(color.RGBA{0x00, 0x00, 0x00, 0xFF})
return f
}
func (f *Fader) Update() {
f.counter++
f.alpha = (float32(f.counter) - (f.offset * f.fps)) / (f.timer * f.fps)
if f.alpha < 0 {
f.alpha = 0
}
}
func (f *Fader) Draw(img *ebiten.Image) {
op := &ebiten.DrawImageOptions{}
op.ColorScale.Scale(1, 1, 1, f.alpha)
img.DrawImage(f.Curtain, op)
}
func (f *Fader) IsComplete() bool {
return f.alpha > 1.0
}
type Bsoft struct { type Bsoft struct {
Dimensions groovy.Area Dimensions groovy.Area
events map[groovy.SceneEvent]func() events map[groovy.SceneEvent]func()
@@ -64,6 +107,7 @@ type Bsoft struct {
renderTarget *ebiten.Image renderTarget *ebiten.Image
mosaicRatio uint mosaicRatio uint
countDown uint countDown uint
curtain Fader
} }
func NewBsoft() Bsoft { func NewBsoft() Bsoft {
@@ -75,9 +119,54 @@ func NewBsoft() Bsoft {
} }
} }
func (b *Bsoft) Update() error {
b.increment++
var keysPressed []ebiten.Key
keysPressed = inpututil.AppendPressedKeys(keysPressed[:0])
for _, k := range keysPressed {
switch k {
case ebiten.KeyUp:
b.mosaicRatio = b.mosaicRatio + 1
case ebiten.KeyDown:
if b.mosaicRatio > 1 {
b.mosaicRatio = b.mosaicRatio - 1
}
case ebiten.KeyQ:
if b.events[groovy.COMPLETED] != nil {
b.events[groovy.COMPLETED]()
}
default:
}
}
if b.curtain.IsComplete() {
if b.events[groovy.COMPLETED] != nil {
b.events[groovy.COMPLETED]()
}
}
b.curtain.Update()
return nil
}
func (b *Bsoft) Draw(screen *ebiten.Image) { func (b *Bsoft) Draw(screen *ebiten.Image) {
b.DrawGlitchLogo(screen) b.DrawGlitchLogo(screen)
b.DrawGlitchLogoText(screen) b.DrawGlitchLogoText(screen)
b.curtain.Draw(screen)
}
func (b *Bsoft) SetEventHandler(event groovy.SceneEvent, f func()) {
b.events[event] = f
}
// sets sene dimensions
func (b *Bsoft) SetDimensions(a groovy.Area) {
b.Dimensions = a
b.renderTarget = ebiten.NewImage(imgDimensions.Width, imgDimensions.Height)
b.curtain = NewFader(a.Width, a.Height, fadeTimer, fadeOffset)
} }
func (b *Bsoft) DrawGlitchLogo(screen *ebiten.Image) { func (b *Bsoft) DrawGlitchLogo(screen *ebiten.Image) {
@@ -135,39 +224,3 @@ func getRandomDirection() int {
} }
return 1 return 1
} }
func (b *Bsoft) Update() error {
b.increment++
var keysPressed []ebiten.Key
keysPressed = inpututil.AppendPressedKeys(keysPressed[:0])
for _, k := range keysPressed {
switch k {
case ebiten.KeyUp:
b.mosaicRatio = b.mosaicRatio + 1
case ebiten.KeyDown:
if b.mosaicRatio > 1 {
b.mosaicRatio = b.mosaicRatio - 1
}
case ebiten.KeyQ:
if b.events[groovy.COMPLETED] != nil {
b.events[groovy.COMPLETED]()
}
default:
}
}
return nil
}
// sets sene dimensions
func (b *Bsoft) SetDimensions(a groovy.Area) {
b.Dimensions = a
b.renderTarget = ebiten.NewImage(imgDimensions.Width, imgDimensions.Height)
}
func (b *Bsoft) SetEventHandler(event groovy.SceneEvent, f func()) {
b.events[event] = f
}