From c357d93c7330d9a7ebcf9cda6f85f8aadb206518 Mon Sep 17 00:00:00 2001 From: Brody Brooks Date: Sun, 20 Jul 2025 16:28:05 -0700 Subject: [PATCH] Added basic logic for water pistol firing --- _ArtSource/folder.meta.lx | 2 ++ outline/inputs.input.lx | 7 ++++- system/player_input.modifier.wren | 1 - system/wpn_waterpistol.modifier.api.wren | 12 ++++++-- system/wpn_waterpistol.modifier.wren | 39 +++++++++++++++++++----- 5 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 _ArtSource/folder.meta.lx diff --git a/_ArtSource/folder.meta.lx b/_ArtSource/folder.meta.lx new file mode 100644 index 0000000..61785ca --- /dev/null +++ b/_ArtSource/folder.meta.lx @@ -0,0 +1,2 @@ +tags = [] +uuid = "fe296fd5-18af-4772-b6a2-cf0fe00619d4" diff --git a/outline/inputs.input.lx b/outline/inputs.input.lx index 714516e..34bd499 100644 --- a/outline/inputs.input.lx +++ b/outline/inputs.input.lx @@ -5,7 +5,12 @@ input = { ] map = { - + fire_primary = { + mouse = ["left"] + } + + reload = { keys = ["key_r"] } + left = { keys = ["key_a", "left"] } right = { keys = ["key_d", "right"] } up = { keys = ["key_w", "up"] } diff --git a/system/player_input.modifier.wren b/system/player_input.modifier.wren index 618e6d2..dfd47fd 100644 --- a/system/player_input.modifier.wren +++ b/system/player_input.modifier.wren @@ -90,7 +90,6 @@ class System is Modifier { data.input_target = Math.normalized(Math.mult(Transform.local_dir_to_world(_camera, right + left, 0, fore + back), [1, 0, 1])) data.input_target = move_toward_vec(Character3D.get.input(player), data.input_target, data, delta) - var sprint: Bool = Character3D.set.speed(player, Input.event_active("run", "game") ? data.speed_run : data.speed_walk) if (Input.event_began("jump", "game") && data.is_grounded) { diff --git a/system/wpn_waterpistol.modifier.api.wren b/system/wpn_waterpistol.modifier.api.wren index b47009f..c7b9473 100644 --- a/system/wpn_waterpistol.modifier.api.wren +++ b/system/wpn_waterpistol.modifier.api.wren @@ -67,8 +67,10 @@ class API { class Fields { static starting_ammo : String { "starting_ammo" } static max_capacity : String { "max_capacity" } - static trigger_held : String { "trigger_held" } + static reload_rate : String { "reload_rate" } + static depressurize_rate : String { "depressurize_rate" } static current_ammo : String { "current_ammo" } + static current_pressure : String { "current_pressure" } } import "luxe: world/states" for AState, States, Op @@ -90,16 +92,20 @@ class APIGet { construct new() {} starting_ammo(entity: Entity) : Num { Modifier.get(entity).starting_ammo } max_capacity(entity: Entity) : Num { Modifier.get(entity).max_capacity } - trigger_held(entity: Entity) : Bool { Modifier.get(entity).trigger_held } + reload_rate(entity: Entity) : Num { Modifier.get(entity).reload_rate } + depressurize_rate(entity: Entity) : Num { Modifier.get(entity).depressurize_rate } current_ammo(entity: Entity) : Num { Modifier.get(entity).current_ammo } + current_pressure(entity: Entity) : Num { Modifier.get(entity).current_pressure } } class APISet { construct new() {} starting_ammo(entity: Entity, value: Num) { Modifier.get(entity).starting_ammo = value } max_capacity(entity: Entity, value: Num) { Modifier.get(entity).max_capacity = value } - trigger_held(entity: Entity, value: Bool) { Modifier.get(entity).trigger_held = value } + reload_rate(entity: Entity, value: Num) { Modifier.get(entity).reload_rate = value } + depressurize_rate(entity: Entity, value: Num) { Modifier.get(entity).depressurize_rate = value } current_ammo(entity: Entity, value: Num) { Modifier.get(entity).current_ammo = value } + current_pressure(entity: Entity, value: Num) { Modifier.get(entity).current_pressure = value } } var APIGetter = APIGet.new() diff --git a/system/wpn_waterpistol.modifier.wren b/system/wpn_waterpistol.modifier.wren index 8f39446..e857852 100644 --- a/system/wpn_waterpistol.modifier.wren +++ b/system/wpn_waterpistol.modifier.wren @@ -1,19 +1,22 @@ import "system/wpn_waterpistol.modifier.api" for API, Modifier, APIGet, APISet, Wire, Fields, State, Op import "luxe: io" for IO import "luxe: assets" for Strings +import "luxe: input" for Input import "luxe: world" for Entity, World import "luxe.project/asset" for Asset #block = data class Data { - var starting_ammo: Num = 200 - var max_capacity: Num = 200 + var starting_ammo: Num = 25 + var max_capacity: Num = 25 + var reload_rate: Num = 0.5 + var depressurize_rate: Num = 0.2 #hidden - var trigger_held: Bool = false + var current_ammo: Num = 0 #hidden - var current_ammo: Num = 200 + var current_pressure: Num = 0 } #api @@ -37,18 +40,38 @@ class System is Modifier { #hidden attach(entity: Entity, data: Data) { - Log.print("attached to `%(Strings.get(Entity.get_name(entity)))` `%(entity)` - `%(This)`") + data.current_ammo = data.starting_ammo } #hidden detach(entity: Entity, data: Data) { - Log.print("detached from `%(Strings.get(Entity.get_name(entity)))` `%(entity)` - `%(This)`") + Log.print("detached from `%(Strings.get(Entity.get_name(entity)))` `%(entity)` - `%(This)`") } #hidden tick(delta: Num) { - // each {|entity: Entity, data: Data| - // } + each {|entity: Entity, data: Data| + if (Input.event_active("reload") && data.current_pressure < 1) { + data.current_pressure = (data.current_pressure + (data.reload_rate * delta)).min(1) + Log.print("Pumping Pressure: %(data.current_pressure)") + } else if (Input.event_active("fire_primary")) { + if (data.current_pressure > 0 && data.current_ammo > 0) { + data.current_pressure = data.current_pressure - (data.depressurize_rate * delta) + if (data.current_pressure < 0) { + data.current_pressure = 0 + return + } + + data.current_ammo = data.current_ammo - delta + if (data.current_ammo < 0) { + data.current_ammo = 0 + return + } + + Log.print("Fire! / Pressure: %(data.current_pressure) / Ammo: %(data.current_ammo)") + } + } + } } } \ No newline at end of file