weapon recoil

This commit is contained in:
wooshings
2026-09-28 17:43:25 -07:00
parent f453d0b1bf
commit 2648fa1316
4 changed files with 20 additions and 7 deletions
+6
View File
@@ -5,3 +5,9 @@ import rl "vendor:raylib"
Transform :: struct { Transform :: struct {
position: rl.Vector2, position: rl.Vector2,
} }
Weapon :: struct {
dmg: i32,
rpm: f32,
cooldown: bool,
}
+1
View File
@@ -11,6 +11,7 @@ Player :: struct {
transform: Transform, transform: Transform,
sprite: rl.Texture2D, sprite: rl.Texture2D,
camera: rl.Camera2D, camera: rl.Camera2D,
weapon: Weapon,
} }
Enemy :: struct { Enemy :: struct {
+2 -1
View File
@@ -21,6 +21,7 @@ main :: proc() {
player = Player { player = Player {
transform = Transform{position = {4, 8}}, transform = Transform{position = {4, 8}},
camera = rl.Camera2D{target = {0, 0}, zoom = 1.5}, camera = rl.Camera2D{target = {0, 0}, zoom = 1.5},
weapon = Weapon{dmg = 1, rpm = 450, cooldown = false},
} }
world.entities[player.transform.position] = player world.entities[player.transform.position] = player
enemy = Enemy { enemy = Enemy {
@@ -88,7 +89,7 @@ draw :: proc() {
} }
} }
if rl.IsMouseButtonPressed(rl.MouseButton.LEFT) { if rl.IsMouseButtonDown(rl.MouseButton.LEFT) {
pos := rl.GetScreenToWorld2D(rl.GetMousePosition(), player.camera) pos := rl.GetScreenToWorld2D(rl.GetMousePosition(), player.camera)
pos_x := int(pos.x / CELL_SIZE) * CELL_SIZE pos_x := int(pos.x / CELL_SIZE) * CELL_SIZE
pos_y := int(pos.y / CELL_SIZE) * CELL_SIZE pos_y := int(pos.y / CELL_SIZE) * CELL_SIZE
+11 -6
View File
@@ -1,6 +1,8 @@
package main package main
import "core:fmt" import "core:fmt"
import "core:math"
import "core:math/rand"
import rl "vendor:raylib" import rl "vendor:raylib"
move :: proc(t: ^Transform, x, y: f32) { move :: proc(t: ^Transform, x, y: f32) {
@@ -17,18 +19,21 @@ move :: proc(t: ^Transform, x, y: f32) {
shoot :: proc(t: Transform, pos: rl.Vector2) { shoot :: proc(t: Transform, pos: rl.Vector2) {
pos_centered := center_to_grid(pos) pos_centered := center_to_grid(pos)
t_centered := center_to_grid(t.position) t_centered := center_to_grid(t.position)
spray: rl.Vector2 = {
pos.x + rand.float32_range(0, CELL_SIZE),
pos.y + rand.float32_range(0, CELL_SIZE),
}
line_particle := LineParticle { line_particle := LineParticle {
pos1 = t.position * CELL_SIZE + 10, pos1 = t.position * CELL_SIZE + 10,
pos2 = pos + 10, pos2 = spray,
tint = rl.WHITE, tint = rl.WHITE,
lifetime = 0.2, lifetime = 0.2,
} }
spawn_particle(line_particle)
start_timer(1, test_timer_callback)
}
test_timer_callback :: proc() { if player.weapon.cooldown == true {return}
fmt.println("timer finished") player.weapon.cooldown = true
start_timer(60 / player.weapon.rpm, proc() {player.weapon.cooldown = false})
spawn_particle(line_particle)
} }
center_to_grid :: proc(pos: rl.Vector2) -> rl.Vector2 { center_to_grid :: proc(pos: rl.Vector2) -> rl.Vector2 {