Updated exit condition. Added interactive mosaic effect.
This commit is contained in:
@@ -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
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user