mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-20 04:17:33 +01:00
e4192f9b8f
we have a gorillion hard deletions and it turns out half of them are because we set the "ALWAYS HARD DELETE THIS" flag rather than just like. fixing the hard delete. cool
85 lines
2.8 KiB
Plaintext
85 lines
2.8 KiB
Plaintext
/datum/component/eye
|
|
///The actual eye mob linked to the component
|
|
var/mob/abstract/eye/component_eye
|
|
///What type of /mob/abstract/eye is used
|
|
var/eye_type = /mob/abstract/eye
|
|
///The mob currently looking through the eye
|
|
var/mob/current_looker
|
|
|
|
///Actions used to pass commands from the eye to the holder. Must be subtypes of /datum/action/eye
|
|
///Base type of the action, all subtypes of this are added to actions.
|
|
var/action_type
|
|
///The actions available to the eye
|
|
var/list/actions = list()
|
|
|
|
/datum/component/eye/Destroy()
|
|
unlook()
|
|
QDEL_LIST(actions)
|
|
. = ..()
|
|
|
|
/datum/component/eye/proc/look(mob/new_looker, list/eye_args)
|
|
if(new_looker.eyeobj || current_looker)
|
|
return FALSE
|
|
LAZYINSERT(eye_args, get_turf(current_looker), 1) //Make sure that a loc is provided to the eye
|
|
if(!component_eye)
|
|
component_eye = new eye_type(arglist(eye_args))
|
|
current_looker = new_looker
|
|
component_eye.possess(current_looker)
|
|
|
|
if(action_type)
|
|
for(var/atype in subtypesof(action_type))
|
|
var/datum/action/eye/action = new atype(src)
|
|
actions += action
|
|
action.Grant(current_looker)
|
|
|
|
//Manual unlooking for the looker
|
|
var/datum/action/eye/unlook/unlook_action = new(src)
|
|
actions += unlook_action
|
|
unlook_action.Grant(current_looker)
|
|
|
|
//Checks for removing the user from the eye outside of unlook actions.
|
|
RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(unlook))
|
|
RegisterSignal(current_looker, COMSIG_MOVABLE_MOVED, PROC_REF(unlook))
|
|
|
|
RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(unlook))
|
|
RegisterSignal(current_looker, COMSIG_QDELETING, PROC_REF(unlook))
|
|
RegisterSignal(component_eye, COMSIG_QDELETING, PROC_REF(unlook))
|
|
|
|
RegisterSignal(current_looker, COMSIG_MOB_LOGOUT, PROC_REF(unlook))
|
|
RegisterSignal(SSdcs, COMSIG_GLOB_MOB_DEATH, PROC_REF(unlook))
|
|
|
|
return TRUE
|
|
|
|
/datum/component/eye/proc/unlook()
|
|
if(!isnull(parent))
|
|
UnregisterSignal(parent, COMSIG_QDELETING)
|
|
UnregisterSignal(parent, COMSIG_MOVABLE_MOVED)
|
|
|
|
if(!isnull(component_eye))
|
|
UnregisterSignal(component_eye, COMSIG_QDELETING)
|
|
component_eye.release(current_looker)
|
|
|
|
if(!isnull(current_looker))
|
|
UnregisterSignal(current_looker, COMSIG_MOVABLE_MOVED)
|
|
UnregisterSignal(current_looker, COMSIG_QDELETING)
|
|
UnregisterSignal(current_looker, COMSIG_MOB_LOGOUT)
|
|
UnregisterSignal(SSdcs, COMSIG_GLOB_MOB_DEATH)
|
|
if(current_looker.client)
|
|
current_looker.client.eye = current_looker
|
|
current_looker.eyeobj = null
|
|
QDEL_NULL(component_eye)
|
|
if(current_looker)
|
|
for(var/datum/action/A in actions)
|
|
A.Remove(current_looker)
|
|
current_looker = null
|
|
|
|
/datum/component/eye/proc/get_eye_turf()
|
|
return get_turf(component_eye)
|
|
|
|
//Every eye created using a subtype of this extension will have this action added for manual unlooking.
|
|
/datum/action/eye/unlook
|
|
name = "Stop looking"
|
|
procname = "unlook"
|
|
button_icon_state = "cancel"
|
|
target_type = COMPONENT_TARGET
|