Add employee name prompt

This commit is contained in:
Trevor Slocum 2023-02-16 21:50:14 -08:00
parent 66e1fc7c77
commit e18fa170f1
12 changed files with 195 additions and 11 deletions

View File

@ -27,8 +27,9 @@ var (
const sampleRate = 44100
var (
audioContext = audio.NewContext(sampleRate)
SoundChime = LoadOGG(audioContext, "sound/chime.ogg", false)
audioContext = audio.NewContext(sampleRate)
SoundChime = LoadOGG(audioContext, "sound/chime.ogg", false)
SoundHelloAndWelcome = LoadOGG(audioContext, "sound/hello-and-welcome.ogg", false)
)
func interiorImage() *ebiten.Image {

Binary file not shown.

23
flags.go Normal file
View File

@ -0,0 +1,23 @@
//go:build !js || !wasm
// +build !js !wasm
package main
import (
"flag"
"code.rocketnine.space/tslocum/gas-station-sim/world"
)
func parseFlags() {
var (
skipIntro bool
)
flag.BoolVar(&world.Fullscreen, "fullscreen", true, "run in fullscreen mode")
flag.BoolVar(&skipIntro, "skip-intro", false, "skip intro screen")
flag.Parse()
if skipIntro {
world.GameStarted = true
}
}

12
flags_web.go Normal file
View File

@ -0,0 +1,12 @@
//go:build js && wasm
// +build js,wasm
package main
import (
"code.rocketnine.space/tslocum/gas-station-sim/world"
)
func parseFlags() {
world.DisableEsc = true
}

View File

@ -2,6 +2,7 @@ package game
import (
"log"
"os"
"code.rocketnine.space/tslocum/gas-station-sim/asset"
"code.rocketnine.space/tslocum/gas-station-sim/entity"
@ -58,7 +59,9 @@ type Game struct {
func NewGame() *Game {
entity.NewOnceEntity()
gohan.AddSystem(&system.Render{})
gohan.AddSystem(&system.NewEmployee{})
gohan.AddSystem(&system.RenderBackground{})
gohan.AddSystem(&system.RenderUI{})
s, err := ebiten.NewShader([]byte(shaderSrc))
if err != nil {
@ -90,16 +93,30 @@ func (g *Game) handleTransition() error {
world.GameStarted = true
}
}
return nil
}
func (g *Game) Update() error {
if !world.DisableEsc && ebiten.IsKeyPressed(ebiten.KeyEscape) {
os.Exit(0)
return nil
}
if (inpututil.IsKeyJustPressed(ebiten.KeyEnter) || inpututil.IsKeyJustPressed(ebiten.KeyKPEnter)) && ebiten.IsKeyPressed(ebiten.KeyAlt) {
world.Fullscreen = !world.Fullscreen
ebiten.SetFullscreen(world.Fullscreen)
return nil
}
err := g.handleTransition()
if err != nil {
return err
}
if world.GameStarted {
world.Ticks++
}
return gohan.Update()
}
@ -111,7 +128,7 @@ func (g *Game) Draw(screen *ebiten.Image) {
log.Fatal(err)
}
// Render target on screen using dither shader.
// NewEmployee target on screen using dither shader.
op := &ebiten.DrawRectShaderOptions{}
op.Images[0] = g.target
screen.DrawRectShader(world.ScreenWidth, world.ScreenHeight, g.shader, op)

1
go.mod
View File

@ -11,6 +11,7 @@ require (
github.com/ebitengine/purego v0.1.1 // indirect
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect
github.com/hajimehoshi/file2byteslice v1.0.0 // indirect
github.com/hajimehoshi/go-mp3 v0.3.3 // indirect
github.com/hajimehoshi/oto/v2 v2.3.1 // indirect
github.com/jezek/xgb v1.1.0 // indirect
github.com/jfreymuth/oggvorbis v1.0.4 // indirect

1
go.sum
View File

@ -13,6 +13,7 @@ github.com/hajimehoshi/ebiten/v2 v2.4.16/go.mod h1:BZcqCU4XHmScUi+lsKexocWcf4off
github.com/hajimehoshi/file2byteslice v0.0.0-20210813153925-5340248a8f41/go.mod h1:CqqAHp7Dk/AqQiwuhV1yT2334qbA/tFWQW0MD2dGqUE=
github.com/hajimehoshi/file2byteslice v1.0.0 h1:ljd5KTennqyJ4vG9i/5jS8MD1prof97vlH5JOdtw3WU=
github.com/hajimehoshi/file2byteslice v1.0.0/go.mod h1:CqqAHp7Dk/AqQiwuhV1yT2334qbA/tFWQW0MD2dGqUE=
github.com/hajimehoshi/go-mp3 v0.3.3 h1:cWnfRdpye2m9ElSoVqneYRcpt/l3ijttgjMeQh+r+FE=
github.com/hajimehoshi/go-mp3 v0.3.3/go.mod h1:qMJj/CSDxx6CGHiZeCgbiq2DSUkbK0UbtXShQcnfyMM=
github.com/hajimehoshi/oto v0.6.1/go.mod h1:0QXGEkbuJRohbJaxr7ZQSxnju7hEhseiPx2hrh6raOI=
github.com/hajimehoshi/oto/v2 v2.3.1 h1:qrLKpNus2UfD674oxckKjNJmesp9hMh7u7QCrStB3Rc=

View File

@ -14,7 +14,12 @@ func main() {
ebiten.SetWindowSize(world.ScreenWidth, world.ScreenHeight)
ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled)
ebiten.SetCursorMode(ebiten.CursorModeHidden)
ebiten.SetFullscreen(true)
parseFlags()
if world.Fullscreen {
ebiten.SetFullscreen(true)
}
g := game.NewGame()

46
system/newemployee.go Normal file
View File

@ -0,0 +1,46 @@
package system
import (
"code.rocketnine.space/tslocum/gas-station-sim/asset"
"code.rocketnine.space/tslocum/gas-station-sim/world"
"code.rocketnine.space/tslocum/gohan"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/inpututil"
)
type NewEmployee struct {
confirmTicks int
}
func (r *NewEmployee) Update(_ gohan.Entity) error {
if !world.GameStarted {
return nil
}
if r.confirmTicks != 0 {
r.confirmTicks--
if r.confirmTicks == world.TPS*2.25 {
asset.SoundHelloAndWelcome.Play()
} else if r.confirmTicks == 0 {
world.Name = world.NameInput
world.NameInput = ""
}
return nil
}
if world.Name == "" {
if world.NameInput == "" {
world.NameInput = "Test"
}
if inpututil.IsKeyJustPressed(ebiten.KeyEnter) || inpututil.IsKeyJustPressed(ebiten.KeyKPEnter) {
r.confirmTicks = world.TPS * 2.75
}
}
return nil
}
func (r *NewEmployee) Draw(_ gohan.Entity, screen *ebiten.Image) error {
return nil
}

View File

@ -14,21 +14,21 @@ const (
introTextHeight = 50
)
type Render struct {
type RenderBackground struct {
x, y float64
dx, dy float64
img *ebiten.Image
tick int
}
func (r *Render) drawGame(screen *ebiten.Image) error {
func (r *RenderBackground) drawGame(screen *ebiten.Image) error {
// Draw background.
screen.DrawImage(asset.ImageInterior, nil)
return nil
}
func (r *Render) drawIntro(screen *ebiten.Image) error {
func (r *RenderBackground) drawIntro(screen *ebiten.Image) error {
if world.GameStarting != 0 {
return nil
}
@ -48,7 +48,7 @@ func (r *Render) drawIntro(screen *ebiten.Image) error {
return nil
}
func (r *Render) Update(_ gohan.Entity) error {
func (r *RenderBackground) Update(_ gohan.Entity) error {
if r.img == nil {
img := ebiten.NewImage(introTextWidth, introTextHeight)
for i := 0; i < 4; i++ { // Draw four times to increase shadow effect
@ -82,7 +82,7 @@ func (r *Render) Update(_ gohan.Entity) error {
return nil
}
func (r *Render) Draw(_ gohan.Entity, screen *ebiten.Image) error {
func (r *RenderBackground) Draw(_ gohan.Entity, screen *ebiten.Image) error {
if !world.GameStarted {
return r.drawIntro(screen)
}

69
system/renderui.go Normal file
View File

@ -0,0 +1,69 @@
package system
import (
"fmt"
"image"
"image/color"
"code.rocketnine.space/tslocum/gas-station-sim/world"
"code.rocketnine.space/tslocum/gohan"
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/ebitenutil"
)
type RenderUI struct {
img *ebiten.Image
}
func (r *RenderUI) Update(_ gohan.Entity) error {
if r.img == nil {
r.img = ebiten.NewImage(world.ScreenWidth, world.ScreenHeight)
}
if !world.GameStarted {
return nil
}
if world.Name == "" {
}
return nil
}
func (r *RenderUI) Draw(_ gohan.Entity, screen *ebiten.Image) error {
if !world.GameStarted {
return nil
}
if world.Name == "" {
if world.Ticks > 6 {
r.drawText(screen, 2, 32, 64, true, "What is your name?")
if world.Ticks > 8 {
r.drawText(screen, 2, 64, 128, true, fmt.Sprintf("%s", world.NameInput))
}
}
}
return nil
}
func (r *RenderUI) drawText(screen *ebiten.Image, scale int, x int, y int, fill bool, text string) {
const (
paddingW = 6
paddingH = 4
)
l := len(text)
textW, textH := 6*l+paddingW, 12+paddingH
rect := image.Rect(x, y, x+textW*scale, y+textH*scale)
screen.SubImage(rect).(*ebiten.Image).Fill(color.White)
screen.SubImage(rect.Inset(1)).(*ebiten.Image).Fill(color.Black)
r.img.Clear()
ebitenutil.DebugPrintAt(r.img, text, 2+x/scale, y/scale)
op := &ebiten.DrawImageOptions{}
op.GeoM.Scale(float64(scale), float64(scale))
//op.ColorM.ChangeHSV(0, 0, 0.8)
screen.DrawImage(r.img, op)
}

View File

@ -9,4 +9,13 @@ const (
var (
GameStarting int
GameStarted bool
Ticks int
Name string
NameInput string
Fullscreen = true
DisableEsc bool
)