Updated exit condition. Added interactive mosaic effect.
This commit is contained in:
@@ -21,6 +21,9 @@ const (
|
||||
maxGlitchOffset = 25
|
||||
minGlitchInterval = 60
|
||||
maxGlitchTimeOffset = 15
|
||||
//in seconds
|
||||
fadeTimer = 1.0
|
||||
fadeOffset = 2.0
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -56,6 +59,46 @@ func init() {
|
||||
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 {
|
||||
Dimensions groovy.Area
|
||||
events map[groovy.SceneEvent]func()
|
||||
@@ -64,6 +107,7 @@ type Bsoft struct {
|
||||
renderTarget *ebiten.Image
|
||||
mosaicRatio uint
|
||||
countDown uint
|
||||
curtain Fader
|
||||
}
|
||||
|
||||
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) {
|
||||
b.DrawGlitchLogo(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) {
|
||||
@@ -135,39 +224,3 @@ func getRandomDirection() int {
|
||||
}
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user