Turning a few components into elements. (#12325)
* Turning a few components into elements. * eh
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
/datum/element/empprotection
|
||||
element_flags = ELEMENT_DETACH | ELEMENT_BESPOKE
|
||||
id_arg_index = 2
|
||||
var/flags = NONE
|
||||
|
||||
/datum/element/empprotection/Attach(datum/target, _flags)
|
||||
. = ..()
|
||||
if(. == ELEMENT_INCOMPATIBLE || !isatom(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
flags = _flags
|
||||
RegisterSignal(target, COMSIG_ATOM_EMP_ACT, .proc/getEmpFlags)
|
||||
|
||||
/datum/element/empprotection/Detach(atom/target)
|
||||
UnregisterSignal(target, COMSIG_ATOM_EMP_ACT)
|
||||
return ..()
|
||||
|
||||
/datum/element/empprotection/proc/getEmpFlags(datum/source, severity)
|
||||
return flags
|
||||
@@ -0,0 +1,30 @@
|
||||
/datum/element/forced_gravity
|
||||
element_flags = ELEMENT_BESPOKE
|
||||
id_arg_index = 2
|
||||
var/gravity
|
||||
var/ignore_space
|
||||
|
||||
/datum/element/forced_gravity/Attach(datum/target, gravity=1, ignore_space=FALSE)
|
||||
. = ..()
|
||||
if(!isatom(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
|
||||
src.gravity = gravity
|
||||
src.ignore_space = ignore_space
|
||||
|
||||
RegisterSignal(target, COMSIG_ATOM_HAS_GRAVITY, .proc/gravity_check)
|
||||
if(isturf(target))
|
||||
RegisterSignal(target, COMSIG_TURF_HAS_GRAVITY, .proc/turf_gravity_check)
|
||||
|
||||
/datum/element/forced_gravity/Detach(datum/source, force)
|
||||
. = ..()
|
||||
var/static/list/signals_b_gone = list(COMSIG_ATOM_HAS_GRAVITY, COMSIG_TURF_HAS_GRAVITY)
|
||||
UnregisterSignal(source, signals_b_gone)
|
||||
|
||||
/datum/element/forced_gravity/proc/gravity_check(datum/source, turf/location, list/gravs)
|
||||
if(!ignore_space && isspaceturf(location))
|
||||
return
|
||||
gravs += gravity
|
||||
|
||||
/datum/element/forced_gravity/proc/turf_gravity_check(datum/source, atom/checker, list/gravs)
|
||||
return gravity_check(null, source, gravs)
|
||||
@@ -0,0 +1,37 @@
|
||||
/datum/element/tactical
|
||||
element_flags = ELEMENT_BESPOKE|ELEMENT_DETACH
|
||||
id_arg_index = 2
|
||||
var/allowed_slot
|
||||
|
||||
/datum/element/tactical/Attach(datum/target, allowed_slot)
|
||||
. = ..()
|
||||
if(. == ELEMENT_INCOMPATIBLE || !isitem(target))
|
||||
return ELEMENT_INCOMPATIBLE
|
||||
|
||||
src.allowed_slot = allowed_slot
|
||||
RegisterSignal(target, COMSIG_ITEM_EQUIPPED, .proc/modify)
|
||||
RegisterSignal(target, COMSIG_ITEM_DROPPED, .proc/unmodify)
|
||||
|
||||
/datum/element/tactical/Detach(datum/target)
|
||||
UnregisterSignal(target, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED))
|
||||
unmodify()
|
||||
return ..()
|
||||
|
||||
/datum/element/tactical/proc/modify(obj/item/source, mob/user, slot)
|
||||
if(allowed_slot && slot != allowed_slot)
|
||||
unmodify()
|
||||
return
|
||||
|
||||
var/image/I = image(icon = source.icon, icon_state = source.icon_state, loc = user)
|
||||
I.copy_overlays(source)
|
||||
I.override = TRUE
|
||||
source.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "sneaking_mission", I)
|
||||
I.layer = ABOVE_MOB_LAYER
|
||||
|
||||
/datum/element/tactical/proc/unmodify(obj/item/source, mob/user)
|
||||
if(!user)
|
||||
if(!ismob(source.loc))
|
||||
return
|
||||
user = source.loc
|
||||
|
||||
user.remove_alt_appearance("sneaking_mission")
|
||||
Reference in New Issue
Block a user