From d39915a042a784501471b24f1e372ea24edaeda5 Mon Sep 17 00:00:00 2001 From: jxnshi Date: Tue, 11 Mar 2025 15:29:43 +0100 Subject: [PATCH] First commit --- assets/assets.go | 6 ++++ assets/player.png | Bin 0 -> 4187 bytes entity.go | 47 ++++++++++++++++++++++++ go.mod | 10 ++++++ go.sum | 8 +++++ main.go | 90 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 161 insertions(+) create mode 100644 assets/assets.go create mode 100644 assets/player.png create mode 100644 entity.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/assets/assets.go b/assets/assets.go new file mode 100644 index 0000000..66ad5a2 --- /dev/null +++ b/assets/assets.go @@ -0,0 +1,6 @@ +package assets + +import _ "embed" + +//go:embed player.png +var Player []byte diff --git a/assets/player.png b/assets/player.png new file mode 100644 index 0000000000000000000000000000000000000000..518a87a2b5a606602b32be439e98ae3af7690a68 GIT binary patch literal 4187 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 ATL1t6 literal 0 HcmV?d00001 diff --git a/entity.go b/entity.go new file mode 100644 index 0000000..665ae45 --- /dev/null +++ b/entity.go @@ -0,0 +1,47 @@ +package main + +import rl "github.com/gen2brain/raylib-go/raylib" + +type Entity struct { + Texture rl.Texture2D + Position rl.Vector2 + Size rl.Vector2 + Flip bool +} + +func NewEntity( + texture rl.Texture2D, + position rl.Vector2, + size rl.Vector2, +) Entity { + return Entity{ + Texture: texture, + Position: position, + Size: size, + } +} + +func DrawEntity(entity Entity) { + srcRect := rl.Rectangle{ + Width: entity.Size.X, + Height: entity.Size.Y, + } + + if entity.Flip { + srcRect.Width = -srcRect.Width + } + + dstRect := rl.Rectangle{ + X: entity.Position.X, + Y: entity.Position.Y, + Width: entity.Size.X, + Height: entity.Size.Y, + } + + origin := rl.Vector2{ + X: entity.Size.X / 2, + Y: entity.Size.Y, + } + + rl.DrawTexturePro(entity.Texture, srcRect, dstRect, origin, 0, rl.RayWhite) +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4a16dda --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module they-gone + +go 1.24.0 + +require ( + github.com/ebitengine/purego v0.8.2 // indirect + github.com/gen2brain/raylib-go/raylib v0.0.0-20250215042252-db8e47f0e5c5 // indirect + golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect + golang.org/x/sys v0.31.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..2d289cc --- /dev/null +++ b/go.sum @@ -0,0 +1,8 @@ +github.com/ebitengine/purego v0.8.2 h1:jPPGWs2sZ1UgOSgD2bClL0MJIqu58nOmIcBuXr62z1I= +github.com/ebitengine/purego v0.8.2/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/gen2brain/raylib-go/raylib v0.0.0-20250215042252-db8e47f0e5c5 h1:k8ZAxLgb/p5TvCi5VHFHM8JdnjwShNK4A0bLIwbktAU= +github.com/gen2brain/raylib-go/raylib v0.0.0-20250215042252-db8e47f0e5c5/go.mod h1:BaY76bZk7nw1/kVOSQObPY1v1iwVE1KHAGMfvI6oK1Q= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= diff --git a/main.go b/main.go new file mode 100644 index 0000000..f6fb20b --- /dev/null +++ b/main.go @@ -0,0 +1,90 @@ +package main + +import ( + rl "github.com/gen2brain/raylib-go/raylib" + + "they-gone/assets" +) + +const mapSize = 100 + +type Tile uint8 + +type App struct { + Camera rl.Camera2D + Entities []Entity +} + +func moveVector() rl.Vector2 { + var vector rl.Vector2 + + if rl.IsKeyDown(rl.KeyA) { vector.X -= 1 } + if rl.IsKeyDown(rl.KeyD) { vector.X += 1 } + + if rl.IsKeyDown(rl.KeyW) { vector.Y -= 1 } + if rl.IsKeyDown(rl.KeyS) { vector.Y += 1 } + + return vector +} + +func main() { + const windowWidth int = 800 + const windowHeight int = 600 + + const playerSpeed float32 = 3 + + rl.InitWindow(int32(windowWidth), int32(windowHeight), "They left.") + defer rl.CloseWindow() + + rl.SetTargetFPS(30) + + playerImage := rl.LoadImageFromMemory(".png", assets.Player, int32(len(assets.Player))) + + playerTexture := rl.LoadTextureFromImage(playerImage) + defer rl.UnloadTexture(playerTexture) + + rl.UnloadImage(playerImage) + + playerSize := rl.Vector2{ 300, 300 } + + app := App{ + Camera: rl.Camera2D{ + Offset: rl.Vector2{ float32(windowWidth) / 2, float32(windowHeight) - playerSize.Y / 2 }, + Zoom: 1, + }, + Entities: make([]Entity, 0), + } + + { + player := NewEntity(playerTexture, rl.Vector2{}, playerSize) + app.Entities = append(app.Entities, player) + } + + player := &app.Entities[0] + + for !rl.WindowShouldClose() { + moveVec := moveVector() + + if moveVec.X > 0 { player.Flip = false } + if moveVec.X < 0 { player.Flip = true } + + player.Position.X += playerSpeed * moveVec.X + player.Position.Y += playerSpeed * moveVec.Y + + rl.BeginDrawing() + + rl.ClearBackground(rl.Black) + + { + rl.BeginMode2D(app.Camera) + + for _, entity := range app.Entities { + DrawEntity(entity) + } + + rl.EndMode2D() + } + + rl.EndDrawing() + } +} -- 2.49.0