70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"git.solsynth.dev/highland/codingland/pkg/internal/entities"
 | |
| 	"git.solsynth.dev/highland/codingland/pkg/internal/land"
 | |
| 	"git.solsynth.dev/highland/codingland/pkg/internal/tiles"
 | |
| 	"log"
 | |
| 	"runtime"
 | |
| 	"time"
 | |
| 
 | |
| 	"github.com/veandco/go-sdl2/sdl"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	windowWidth  = 720
 | |
| 	windowHeight = 480
 | |
| )
 | |
| 
 | |
| func init() {
 | |
| 	runtime.LockOSThread()
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil {
 | |
| 		log.Fatalf("Failed to initialize SDL: %s", err)
 | |
| 	}
 | |
| 	defer sdl.Quit()
 | |
| 
 | |
| 	window, err := sdl.CreateWindow("CodingLand", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, windowWidth, windowHeight, sdl.WINDOW_SHOWN)
 | |
| 	if err != nil {
 | |
| 		log.Fatalf("Failed to create window: %s", err)
 | |
| 	}
 | |
| 	defer window.Destroy()
 | |
| 
 | |
| 	renderer, err := sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED|sdl.RENDERER_PRESENTVSYNC)
 | |
| 	if err != nil {
 | |
| 		log.Fatalf("Failed to create renderer: %s", err)
 | |
| 	}
 | |
| 	defer renderer.Destroy()
 | |
| 
 | |
| 	root := land.NewRootObject()
 | |
| 	root.AddChild(&entities.Player{
 | |
| 		Position: land.Vector2D{X: windowWidth/2 - 25, Y: windowHeight/2 - 25},
 | |
| 		Size:     land.Vector2D{X: 50, Y: 50},
 | |
| 	})
 | |
| 	root.AddChild(&tiles.Tile{
 | |
| 		Position: land.Vector2D{X: 50, Y: 50},
 | |
| 		Size:     land.Vector2D{X: 50, Y: 50},
 | |
| 	})
 | |
| 
 | |
| 	// 10ms delay use be 100tps average
 | |
| 	go root.RunEventLoop(10 * time.Millisecond)
 | |
| 
 | |
| 	running := true
 | |
| 	for running {
 | |
| 		for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {
 | |
| 			switch event.(type) {
 | |
| 			case *sdl.QuitEvent:
 | |
| 				running = false
 | |
| 			case *sdl.MouseButtonEvent:
 | |
| 				root.HandleUserEvent(event)
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		root.Draw(renderer)
 | |
| 
 | |
| 		renderer.Present()
 | |
| 	}
 | |
| }
 |