Adding splash screen.

This commit is contained in:
2024-11-11 10:25:02 -05:00
parent 6f794b7bb2
commit e10bf47427
3 changed files with 116 additions and 60 deletions

View File

@@ -26,6 +26,7 @@ const (
)
type Game struct {
events map[ScreenManagerEvent]func()
background *ebiten.Image
collisionMask *ebiten.Image
projectileMask *ebiten.Image
@@ -54,6 +55,13 @@ type Game struct {
//pressedButtons map[ebiten.GamepadID][]string
}
func NewGame() *Game {
g := &Game{
events: make(map[ScreenManagerEvent]func()),
}
return g
}
func (g *Game) Initialize() {
origin := gamedata.Coordinates{X: 640 / 2, Y: 480 / 2}
@@ -124,75 +132,77 @@ func (g *Game) Update() error {
func (g *Game) Draw(screen *ebiten.Image) {
screen.Clear()
screen.DrawImage(g.background, nil)
g.hero.Draw()
if g.initialized {
screen.DrawImage(g.background, nil)
op := &ebiten.DrawImageOptions{}
g.hero.Draw()
if !g.gameover {
g.runtime = float64(g.counter) / 60.
}
op := &ebiten.DrawImageOptions{}
s := fmt.Sprintf("%02.3f", g.runtime)
if !g.gameover {
text.Draw(screen, "TIME: "+s, fonts.SurviveFont.Arcade, 640/2-250, 25, color.White)
text.Draw(screen, fmt.Sprintf("SCORE: %d", g.score*10), fonts.SurviveFont.Arcade, 640/2+100, 25, color.White)
} else {
if (g.counter/30)%2 == 0 {
if !g.gameover {
g.runtime = float64(g.counter) / 60.
}
s := fmt.Sprintf("%02.3f", g.runtime)
if !g.gameover {
text.Draw(screen, "TIME: "+s, fonts.SurviveFont.Arcade, 640/2-250, 25, color.White)
text.Draw(screen, fmt.Sprintf("SCORE: %d", g.score*10), fonts.SurviveFont.Arcade, 640/2+100, 25, color.White)
} else {
if (g.counter/30)%2 == 0 {
text.Draw(screen, "TIME: "+s, fonts.SurviveFont.Arcade, 640/2-250, 25, color.White)
text.Draw(screen, fmt.Sprintf("SCORE: %d", g.score*10), fonts.SurviveFont.Arcade, 640/2+100, 25, color.White)
}
}
}
op.GeoM.Translate(-MOVER_WIDTH/2, -MOVER_HEIGHT/2)
//op.GeoM.Rotate(g.hero.Angle)
op.GeoM.Translate(g.hero.Pos.X, g.hero.Pos.Y)
screen.DrawImage(g.hero.Sprite, op)
op.GeoM.Reset()
op.GeoM.Translate(0, -16)
op.GeoM.Rotate(g.hero.Angle)
op.GeoM.Translate(g.hero.Pos.X, g.hero.Pos.Y)
screen.DrawImage(assets.ImageBank[assets.Weapon], op)
//secondary/upgraded weapon sprite; in testing proves sort of distracting
/*
if g.hero.Upgrade {
op.GeoM.Reset()
op.GeoM.Translate(-16, -16)
op.GeoM.Scale(0.75, 0.75)
op.GeoM.Translate(16, 0)
op.GeoM.Rotate(g.hero.Angle + math.Pi)
op.GeoM.Translate(g.hero.Pos.X, g.hero.Pos.Y)
screen.DrawImage(weaponImage, op)
}*/
for _, target := range g.targets {
target.Draw()
op.GeoM.Translate(-MOVER_WIDTH/2, -MOVER_HEIGHT/2)
//op.GeoM.Rotate(g.hero.Angle)
op.GeoM.Translate(g.hero.Pos.X, g.hero.Pos.Y)
screen.DrawImage(g.hero.Sprite, op)
op.GeoM.Reset()
op.GeoM.Translate(-MOVER_WIDTH/2, -MOVER_HEIGHT/2)
op.GeoM.Rotate(target.Angle)
op.GeoM.Translate(target.Pos.X, target.Pos.Y)
screen.DrawImage(target.Sprite, op)
op.GeoM.Translate(0, -16)
op.GeoM.Rotate(g.hero.Angle)
op.GeoM.Translate(g.hero.Pos.X, g.hero.Pos.Y)
screen.DrawImage(assets.ImageBank[assets.Weapon], op)
//secondary/upgraded weapon sprite; in testing proves sort of distracting
/*
if g.hero.Upgrade {
op.GeoM.Reset()
op.GeoM.Translate(-16, -16)
op.GeoM.Scale(0.75, 0.75)
op.GeoM.Translate(16, 0)
op.GeoM.Rotate(g.hero.Angle + math.Pi)
op.GeoM.Translate(g.hero.Pos.X, g.hero.Pos.Y)
screen.DrawImage(weaponImage, op)
}*/
for _, target := range g.targets {
target.Draw()
op.GeoM.Reset()
op.GeoM.Translate(-MOVER_WIDTH/2, -MOVER_HEIGHT/2)
op.GeoM.Rotate(target.Angle)
op.GeoM.Translate(target.Pos.X, target.Pos.Y)
screen.DrawImage(target.Sprite, op)
}
g.projectileMask.Clear()
//ebitenutil.DrawCircle()
for _, p := range g.projectiles {
//vector.DrawFilledCircle(screen, float32(p.Pos.X), float32(p.Pos.Y), 3, color.White, true)
vector.DrawFilledCircle(g.projectileMask, float32(p.Pos.X), float32(p.Pos.Y), 3, color.White, true)
}
screen.DrawImage(g.projectileMask, nil)
vector.StrokeCircle(screen, float32(g.explosion.Origin.X), float32(g.explosion.Origin.Y), float32(g.explosion.Radius), 3, color.White, true)
/*for _, gamepad ebiten.StandardGamepadAxisValue(id, ebiten.StandardGamepadAxisRightStickHorizontal),
ebiten.StandardGamepadAxisValue(id, ebiten.StandardGamepadAxisRightStickVertical))*/
}
g.projectileMask.Clear()
//ebitenutil.DrawCircle()
for _, p := range g.projectiles {
//vector.DrawFilledCircle(screen, float32(p.Pos.X), float32(p.Pos.Y), 3, color.White, true)
vector.DrawFilledCircle(g.projectileMask, float32(p.Pos.X), float32(p.Pos.Y), 3, color.White, true)
}
screen.DrawImage(g.projectileMask, nil)
vector.StrokeCircle(screen, float32(g.explosion.Origin.X), float32(g.explosion.Origin.Y), float32(g.explosion.Radius), 3, color.White, true)
/*for _, gamepad ebiten.StandardGamepadAxisValue(id, ebiten.StandardGamepadAxisRightStickHorizontal),
ebiten.StandardGamepadAxisValue(id, ebiten.StandardGamepadAxisRightStickVertical))*/
}
func (g *Game) Layout(width, height int) (int, int) {
@@ -497,5 +507,5 @@ func (g *Game) SetDimensions(a gamedata.Area) {
}
func (g *Game) SetEventHandler(e ScreenManagerEvent, f func()) {
g.events[e] = f
}