Player movement and camera
This commit is contained in:
@@ -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
60
src/player.odin
Normal 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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user