mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-15 04:01:41 +00:00
Co-authored-by: AMonkeyThatCodes <20987591+AMonkeyThatCodes@users.noreply.github.com> Co-authored-by: Gandalf <jzo123@hotmail.com>
51 lines
1.8 KiB
Plaintext
51 lines
1.8 KiB
Plaintext
///This proc is used by basic mobs to give them a simple ranged attack! In theory this could be extended to
|
|
/datum/element/ranged_attacks
|
|
element_flags = ELEMENT_DETACH | ELEMENT_BESPOKE
|
|
id_arg_index = 2
|
|
var/casingtype = /obj/item/ammo_casing/glockroach
|
|
var/projectilesound = 'sound/weapons/gun/pistol/shot.ogg'
|
|
var/projectiletype
|
|
|
|
/datum/element/ranged_attacks/Attach(atom/movable/target, casingtype, projectilesound, projectiletype)
|
|
. = ..()
|
|
if(!isbasicmob(target))
|
|
return COMPONENT_INCOMPATIBLE
|
|
|
|
src.casingtype = casingtype
|
|
src.projectilesound = projectilesound
|
|
src.projectiletype = projectiletype
|
|
|
|
RegisterSignal(target, COMSIG_MOB_ATTACK_RANGED, .proc/fire_ranged_attack)
|
|
|
|
if(casingtype && projectiletype)
|
|
CRASH("Set both casing type and projectile type in [target]'s ranged attacks element! uhoh! stinky!")
|
|
|
|
/datum/element/ranged_attacks/Detach(datum/target)
|
|
UnregisterSignal(target, COMSIG_MOB_ATTACK_RANGED)
|
|
return ..()
|
|
|
|
/datum/element/ranged_attacks/proc/fire_ranged_attack(mob/living/basic/firer, atom/target, modifiers)
|
|
SIGNAL_HANDLER
|
|
INVOKE_ASYNC(src, .proc/async_fire_ranged_attack, firer, target, modifiers)
|
|
|
|
|
|
/datum/element/ranged_attacks/proc/async_fire_ranged_attack(mob/living/basic/firer, atom/target, modifiers)
|
|
var/turf/startloc = get_turf(firer)
|
|
|
|
if(casingtype)
|
|
var/obj/item/ammo_casing/casing = new casingtype(startloc)
|
|
playsound(firer, projectilesound, 100, TRUE)
|
|
casing.fire_casing(target, firer, null, null, null, ran_zone(), 0, firer)
|
|
|
|
else if(projectiletype)
|
|
var/obj/projectile/P = new projectiletype(startloc)
|
|
playsound(firer, projectilesound, 100, TRUE)
|
|
P.starting = startloc
|
|
P.firer = firer
|
|
P.fired_from = firer
|
|
P.yo = target.y - startloc.y
|
|
P.xo = target.x - startloc.x
|
|
P.original = target
|
|
P.preparePixelProjectile(target, firer)
|
|
P.fire()
|