mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-10 10:01:40 +00:00
* Kills obj/item/projectile in favour of obj/projectile * Resolves conflicts properly * fixes that one map * it lives
38 lines
1.5 KiB
Plaintext
38 lines
1.5 KiB
Plaintext
/datum/component/shrapnel
|
|
var/projectile_type
|
|
var/radius // shoots a projectile for every turf on this radius from the hit target
|
|
var/override_projectile_range
|
|
|
|
/datum/component/shrapnel/Initialize(projectile_type, radius=1, override_projectile_range)
|
|
if(!isgun(parent) && !ismachinery(parent) && !isstructure(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
|
|
src.projectile_type = projectile_type
|
|
src.radius = radius
|
|
src.override_projectile_range = override_projectile_range
|
|
|
|
/datum/component/shrapnel/RegisterWithParent()
|
|
if(ismachinery(parent) || isstructure(parent) || isgun(parent)) // turrets, etc
|
|
RegisterSignal(parent, COMSIG_PROJECTILE_ON_HIT, .proc/projectile_hit)
|
|
|
|
/datum/component/shrapnel/UnregisterFromParent()
|
|
UnregisterSignal(parent, list(COMSIG_PROJECTILE_ON_HIT))
|
|
|
|
/datum/component/shrapnel/proc/projectile_hit(atom/fired_from, atom/movable/firer, atom/target, Angle)
|
|
do_shrapnel(firer, target)
|
|
|
|
/datum/component/shrapnel/proc/do_shrapnel(mob/firer, atom/target)
|
|
if(radius < 1)
|
|
return
|
|
var/turf/target_turf = get_turf(target)
|
|
for(var/turf/shootat_turf in RANGE_TURFS(radius, target) - RANGE_TURFS(radius-1, target))
|
|
var/obj/projectile/P = new projectile_type(target_turf)
|
|
|
|
//Shooting Code:
|
|
P.range = radius+1
|
|
if(override_projectile_range)
|
|
P.range = override_projectile_range
|
|
P.preparePixelProjectile(shootat_turf, target)
|
|
P.firer = firer // don't hit ourself that would be really annoying
|
|
P.permutated += target // don't hit the target we hit already with the flak
|
|
P.fire() |