-
Notifications
You must be signed in to change notification settings - Fork 0
/
splashscene.go
71 lines (63 loc) · 1.68 KB
/
splashscene.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: 2022 Hajime Hoshi
package main
import (
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/inpututil"
"image"
_ "image/png"
)
type SplashScene struct {
splashImg *ebiten.Image
sequence *Sequence
splashAlpha float64
}
func (s *SplashScene) Update(sceneSwitcher SceneSwitcher) error {
if s.splashImg == nil {
f, err := ResourceFS.Open("splash_1920x1080_black.png")
if err != nil {
return err
}
defer f.Close()
img, _, err := image.Decode(f)
if err != nil {
return err
}
s.splashImg = ebiten.NewImageFromImage(img)
}
if s.sequence == nil {
s.sequence = &Sequence{}
s.sequence.AddTask(NewTimerTask(func(counter, maxCounter int) error {
s.splashAlpha = float64(counter) / float64(maxCounter)
return nil
}, ebiten.MaxTPS()/2))
s.sequence.AddTask(NewTimerTask(func(counter, maxCounter int) error {
s.splashAlpha = 1
if inpututil.IsKeyJustPressed(ebiten.KeyS) || inpututil.IsKeyJustPressed(ebiten.KeyN) || inpututil.IsKeyJustPressed(ebiten.KeySpace) {
return TaskEnded
}
return nil
}, ebiten.MaxTPS()*2))
s.sequence.AddTask(NewTimerTask(func(counter, maxCounter int) error {
s.splashAlpha = 1 - float64(counter)/float64(maxCounter)
return nil
}, ebiten.MaxTPS()/2))
s.sequence.AddTask(func() error {
s.splashAlpha = 0
sceneSwitcher.MainScene()
return TaskEnded
})
}
if err := s.sequence.Update(); err != nil {
return err
}
return nil
}
func (s *SplashScene) Draw(screen *ebiten.Image) {
if s.sequence == nil {
return
}
op := &ebiten.DrawImageOptions{}
op.ColorM.Scale(1, 1, 1, s.splashAlpha)
screen.DrawImage(s.splashImg, op)
}