Areabound component & mapping helper (#51605)

* Adds areabound component and mapping helper.

* desc

* Delete multi-use one.

* doesn't really matter for this but sure
This commit is contained in:
AnturK
2020-06-15 21:36:00 +02:00
committed by GitHub
parent c164d9922f
commit d12722e56c
4 changed files with 39 additions and 3 deletions
+25
View File
@@ -0,0 +1,25 @@
/// Movables with this component will automatically return to their original turf if moved outside their initial area
/datum/component/areabound
var/area/bound_area
var/turf/reset_turf
var/datum/movement_detector/move_tracker
/datum/component/areabound/Initialize()
if(!ismovable(parent))
return COMPONENT_INCOMPATIBLE
bound_area = get_area(parent)
reset_turf = get_turf(parent)
move_tracker = new(parent,CALLBACK(src,.proc/check_bounds))
/datum/component/areabound/proc/check_bounds()
var/atom/movable/AM = parent
var/area/current = get_area(AM)
if(current != bound_area)
if(!reset_turf || reset_turf.loc != bound_area)
stack_trace("Invalid areabound configuration") //qdel(src)
return
AM.forceMove(reset_turf)
/datum/component/areabound/Destroy(force, silent)
QDEL_NULL(move_tracker)
. = ..()
+13 -3
View File
@@ -170,8 +170,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava)
/obj/effect/mapping_helpers/component_injector
name = "Component Injector"
late = TRUE
var/target_type
var/target_name
var/all = FALSE //Will inject into all fitting the criteria if true, otherwise first found
var/target_type //Will inject into atoms of this type
var/target_name //Will inject into atoms with this name
var/component_type
//Late init so everything is likely ready and loaded (no warranty)
@@ -188,8 +189,11 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava)
continue
var/cargs = build_args()
A._AddComponent(cargs)
if(!all)
qdel(src)
return
if(all)
qdel(src)
return
/obj/effect/mapping_helpers/component_injector/proc/build_args()
return list(component_type)
@@ -206,6 +210,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava)
var/datum/disease/D = new disease_type()
return list(component_type,D)
/obj/effect/mapping_helpers/component_injector/areabound
name = "Areabound Injector"
icon_state = "component_areabound"
component_type = /datum/component/areabound
target_type = /atom/movable
/obj/effect/mapping_helpers/dead_body_placer
name = "Dead Body placer"
late = TRUE
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

+1
View File
@@ -377,6 +377,7 @@
#include "code\datums\brain_damage\split_personality.dm"
#include "code\datums\components\_component.dm"
#include "code\datums\components\anti_magic.dm"
#include "code\datums\components\areabound.dm"
#include "code\datums\components\armor_plate.dm"
#include "code\datums\components\art.dm"
#include "code\datums\components\bane.dm"