v0.1.0 initial commit
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
//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
|
||||
}
|
||||
Reference in New Issue
Block a user