Player movement and camera

This commit is contained in:
2026-02-15 14:19:30 -06:00
parent b2e276c676
commit f8335f6e1d
2 changed files with 89 additions and 0 deletions

View File

@@ -3,6 +3,7 @@ package main
import "core:fmt"
import "vendor:raylib"
player: Player
main :: proc() {
fmt.println("Brackey's Game Jam 2026 :) ")
@@ -10,15 +11,43 @@ main :: proc() {
raylib.InitWindow(1920, 1080, "Game")
raylib.SetTargetFPS(60)
player = {
position = {0, 0},
camera = {
zoom = 2,
offset = {f32(raylib.GetScreenWidth()) / 2, f32(raylib.GetScreenHeight()) / 2},
target = {player.position.x + (32 / 2), player.position.y + (32 / 2)},
},
}
for (!raylib.WindowShouldClose()) {
delta := raylib.GetFrameTime()
raylib.BeginDrawing()
raylib.ClearBackground(raylib.DARKBLUE)
raylib.BeginMode2D(player.camera)
raylib.DrawText("Ur mom", 100, 100, 50, raylib.BLACK)
draw()
raylib.EndMode2D()
raylib.EndDrawing()
update(delta)
}
raylib.CloseWindow()
}
@(private = "file")
update :: proc(delta: f32) {
update_player(&player, delta)
}
@(private = "file")
draw :: proc() {
draw_player(&player)
}

60
src/player.odin Normal file
View File

@@ -0,0 +1,60 @@
package main
import "core:fmt"
import "vendor:raylib"
PLAYER_SPEED :: 5
Player :: struct {
health: int,
current_world: string,
camera: raylib.Camera2D,
position: raylib.Vector2,
}
@(private = "file")
handle_player_camera :: proc(p: ^Player, delta: f32) {
player_center := raylib.Vector2{p.position.x + 16, p.position.y + 16}
smooth_speed :: 10.0
p.camera.target.x += (player_center.x - p.camera.target.x) * smooth_speed * delta
p.camera.target.y += (player_center.y - p.camera.target.y) * smooth_speed * delta
if (raylib.IsWindowResized()) {
p.camera.offset = {f32(raylib.GetScreenWidth()) * 0.5, f32(raylib.GetScreenHeight()) * 0.5}
}
// p.camera.target = {p.position.x + (32 / 2), p.position.y + (32 / 2)}
// if raylib.IsWindowResized() {
// p.camera.offset = {f32(raylib.GetScreenWidth()) / 2, f32(raylib.GetScreenHeight()) / 2}
// }
}
@(private = "file")
handle_player_input :: proc(p: ^Player, delta: f32) {
dir: raylib.Vector2 = {0, 0}
if raylib.IsKeyDown(.W) do dir.y -= 1
if raylib.IsKeyDown(.S) do dir.y += 1
if raylib.IsKeyDown(.A) do dir.x -= 1
if raylib.IsKeyDown(.D) do dir.x += 1
if dir.x != 0 || dir.y != 0 {
dir = raylib.Vector2Normalize(dir)
dir = dir * PLAYER_SPEED
p.position = p.position + dir
}
}
draw_player :: proc(p: ^Player) {
raylib.DrawRectangle(i32(p.position.x), i32(p.position.y), 32, 32, raylib.BLACK)
}
update_player :: proc(p: ^Player, delta: f32) {
handle_player_input(p, delta)
handle_player_camera(p, delta)
// fmt.println(p.position)
}