project-ely/main.go

145 lines
2.8 KiB
Go

package main
import (
"fmt"
"log"
"os"
"runtime"
"gitea.wisellama.rocks/Project-Ely/project-ely/config"
"gitea.wisellama.rocks/Wisellama/gosimpleconf"
"github.com/veandco/go-sdl2/sdl"
)
func main() {
var err error
configMap, err := config.Configure("game.conf")
if err != nil {
log.Printf("error during configure: %v\n", err)
os.Exit(1)
}
err = run(configMap)
if err != nil {
log.Fatal(err)
}
}
func run(configMap gosimpleconf.ConfigMap) error {
runtime.LockOSThread()
err := sdl.Init(config.SDL_INIT_FLAGS)
if err != nil {
err = fmt.Errorf("failed initializing SDL: %w", err)
return err
}
defer sdl.Quit()
err = config.SdlSettings()
if err != nil {
err = fmt.Errorf("failed in SDL settings: %w", err)
return err
}
gameWindow, err := createWindow(configMap["game.title"])
if err != nil {
err = fmt.Errorf("failed creating SDL window: %w", err)
return err
}
defer gameWindow.Destroy()
renderer, err := sdl.CreateRenderer(gameWindow, -1, sdl.RENDERER_ACCELERATED)
if err != nil {
err = fmt.Errorf("failed creating SDL renderer: %w", err)
return err
}
defer renderer.Destroy()
var rect *sdl.Rect
var x int32 = 0
var y int32 = 0
keystates := make(map[sdl.Keycode]bool)
running := true
for running {
for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
switch e := event.(type) {
case *sdl.QuitEvent:
running = false
case *sdl.KeyboardEvent:
if e.Keysym.Sym == sdl.K_ESCAPE {
log.Println("Esc quitting")
running = false
}
// Key states (just set a boolean whether the key is actively being pressed)
if e.Type == sdl.KEYDOWN {
keystates[e.Keysym.Sym] = true
} else if e.Type == sdl.KEYUP {
keystates[e.Keysym.Sym] = false
}
}
}
if keystates[sdl.K_a] {
x -= 1
if x < 0 {
x = 0
}
}
if keystates[sdl.K_d] {
x += 1
w, _ := gameWindow.GetSize()
if x+rect.W > w {
x = w - rect.W
}
}
// Y is inverted, positive Y moves downward
if keystates[sdl.K_w] {
y -= 1
if y < 0 {
y = 0
}
}
if keystates[sdl.K_s] {
y += 1
_, h := gameWindow.GetSize()
if y+rect.H > h {
y = h - rect.H
}
}
// Black background
renderer.SetDrawColor(0, 0, 0, 255)
renderer.Clear()
// Blue square
renderer.SetDrawColor(0, 0, 255, 255)
rect = &sdl.Rect{X: x, Y: y, W: 200, H: 200}
renderer.DrawRect(rect)
renderer.FillRect(rect)
renderer.Present()
sdl.Delay(16)
}
return nil
}
func createWindow(title string) (*sdl.Window, error) {
window, err := sdl.CreateWindow(
title,
sdl.WINDOWPOS_UNDEFINED,
sdl.WINDOWPOS_UNDEFINED,
config.SDL_WINDOW_WIDTH,
config.SDL_WINDOW_HEIGHT,
config.SDL_WINDOW_FLAGS)
if err != nil {
log.Println("Failed creating SDL window")
return nil, err
}
return window, nil
}