Add employee name prompt
This commit is contained in:
parent
66e1fc7c77
commit
e18fa170f1
|
@ -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.
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
23
game/game.go
23
game/game.go
|
@ -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
1
go.mod
|
@ -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
1
go.sum
|
@ -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=
|
||||
|
|
7
main.go
7
main.go
|
@ -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()
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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)
|
||||
}
|
|
@ -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)
|
||||
}
|
|
@ -9,4 +9,13 @@ const (
|
|||
var (
|
||||
GameStarting int
|
||||
GameStarted bool
|
||||
|
||||
Ticks int
|
||||
|
||||
Name string
|
||||
NameInput string
|
||||
|
||||
Fullscreen = true
|
||||
|
||||
DisableEsc bool
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue