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 = 25 var max_capacity: Num = 25 var reload_rate: Num = 0.5 var depressurize_rate: Num = 0.2 #hidden var current_ammo: Num = 0 #hidden var current_pressure: Num = 0 } #api #display = "Weapon: Water Pistol" #desc = "**Weapon**. Handles behaviour for the water pistol" #icon = "luxe: image/modifier/modifier.svg" class WeaponWaterPistol is API { //add public facing API here } #system #phase(on, tick) class System is Modifier { //required atm construct new(world: World) { super(world) } init(world: World) { Log.print("init `%(This)` in world `%(world)`") } #hidden attach(entity: Entity, data: Data) { data.current_ammo = data.starting_ammo } #hidden detach(entity: Entity, data: Data) { Log.print("detached from `%(Strings.get(Entity.get_name(entity)))` `%(entity)` - `%(This)`") } #hidden tick(delta: Num) { 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)") } } } } }