Files
2026-07-15 01:28:56 -04:00

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
}