weapon recoil
This commit is contained in:
@@ -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,
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user