92 lines
1.7 KiB
Go
92 lines
1.7 KiB
Go
//go:build linux
|
|
|
|
package main
|
|
|
|
import (
|
|
"time"
|
|
|
|
rl "github.com/gen2brain/raylib-go/raylib"
|
|
|
|
"symph/audio"
|
|
"symph/game"
|
|
"symph/input"
|
|
raylibrender "symph/render/raylib"
|
|
)
|
|
|
|
const (
|
|
defaultScreenW = 800
|
|
defaultScreenH = 600
|
|
)
|
|
|
|
func main() {
|
|
rl.SetConfigFlags(rl.FlagWindowResizable | rl.FlagVsyncHint)
|
|
rl.InitWindow(defaultScreenW, defaultScreenH, "Symph")
|
|
defer rl.CloseWindow()
|
|
|
|
rl.SetTargetFPS(60)
|
|
|
|
state := game.New()
|
|
sfx := audio.NewMuter(audio.NewEngine())
|
|
defer sfx.Close()
|
|
renderer := raylibrender.NewRenderer(state)
|
|
|
|
for !rl.WindowShouldClose() {
|
|
now := time.Now()
|
|
|
|
// Modifier state is polled, not queued
|
|
ctrl := rl.IsKeyDown(rl.KeyLeftControl) || rl.IsKeyDown(rl.KeyRightControl)
|
|
|
|
for {
|
|
k := rl.GetKeyPressed()
|
|
if k == 0 {
|
|
break
|
|
}
|
|
if k == rl.KeyS && ctrl {
|
|
renderer.Muted = sfx.Toggle()
|
|
continue
|
|
}
|
|
if ik := keyFromRaylib(k); ik != input.KeyNone {
|
|
state.Dispatch(input.Translate(ik), now)
|
|
}
|
|
}
|
|
|
|
state.Update(now)
|
|
for _, ge := range state.DrainEvents() {
|
|
sfx.Play(audio.MapGameEvent(ge))
|
|
}
|
|
|
|
rl.BeginDrawing()
|
|
renderer.Draw(int32(rl.GetScreenWidth()), int32(rl.GetScreenHeight()), now)
|
|
rl.EndDrawing()
|
|
}
|
|
}
|
|
|
|
// keyFromRaylib translates a raylib keycode to a platform-neutral input.Key
|
|
func keyFromRaylib(k int32) input.Key {
|
|
switch k {
|
|
case rl.KeyH:
|
|
return input.KeyH
|
|
case rl.KeyJ:
|
|
return input.KeyJ
|
|
case rl.KeyK:
|
|
return input.KeyK
|
|
case rl.KeyL:
|
|
return input.KeyL
|
|
case rl.KeySemicolon:
|
|
return input.KeySemicolon
|
|
case rl.KeyA:
|
|
return input.KeyA
|
|
case rl.KeyS:
|
|
return input.KeyS
|
|
case rl.KeyD:
|
|
return input.KeyD
|
|
case rl.KeyF:
|
|
return input.KeyF
|
|
case rl.KeySpace:
|
|
return input.KeySpace
|
|
case rl.KeyEnter, rl.KeyKpEnter:
|
|
return input.KeyEnter
|
|
}
|
|
return input.KeyNone
|
|
}
|