push
This commit is contained in:
@@ -3,18 +3,23 @@
|
||||
desc = "Used to access the various cameras on the station."
|
||||
icon_screen = "cameras"
|
||||
icon_keyboard = "security_key"
|
||||
light_color = LIGHT_COLOR_RED
|
||||
|
||||
var/list/z_lock = list() // Lock use to these z levels
|
||||
var/lock_override = NONE
|
||||
var/mob/camera/aiEye/remote/eyeobj
|
||||
var/mob/living/current_user = null
|
||||
var/list/networks = list("ss13")
|
||||
var/datum/action/innate/camera_off/off_action = new
|
||||
var/datum/action/innate/camera_jump/jump_action = new
|
||||
var/list/actions = list()
|
||||
/// Should we suppress the user's view?
|
||||
var/should_supress_view_changes = TRUE
|
||||
/// Typepath of the action button we use as "off"
|
||||
/// It's a typepath so subtypes can give it fun new names
|
||||
var/datum/action/innate/camera_off/off_action = /datum/action/innate/camera_off
|
||||
/// Typepath for jumping
|
||||
var/datum/action/innate/camera_jump/jump_action = /datum/action/innate/camera_jump
|
||||
|
||||
light_color = LIGHT_COLOR_RED
|
||||
/// List of all actions to give to a user when they're well, granted actions
|
||||
var/list/actions = list()
|
||||
///Should we supress any view changes?
|
||||
var/should_supress_view_changes = TRUE
|
||||
|
||||
/obj/machinery/computer/camera_advanced/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -31,6 +36,11 @@
|
||||
if(lock_override & CAMERA_LOCK_REEBE)
|
||||
z_lock |= SSmapping.levels_by_trait(ZTRAIT_REEBE)
|
||||
|
||||
if(off_action)
|
||||
actions += new off_action(src)
|
||||
if(jump_action)
|
||||
actions += new jump_action(src)
|
||||
|
||||
/obj/machinery/computer/camera_advanced/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
|
||||
for(var/i in networks)
|
||||
networks -= i
|
||||
@@ -47,40 +57,30 @@
|
||||
eyeobj.origin = src
|
||||
|
||||
/obj/machinery/computer/camera_advanced/proc/GrantActions(mob/living/user)
|
||||
if(off_action)
|
||||
off_action.target = user
|
||||
off_action.Grant(user)
|
||||
actions += off_action
|
||||
|
||||
if(jump_action)
|
||||
jump_action.target = user
|
||||
jump_action.Grant(user)
|
||||
actions += jump_action
|
||||
for(var/datum/action/to_grant as anything in actions)
|
||||
to_grant.Grant(user)
|
||||
|
||||
/obj/machinery/proc/remove_eye_control(mob/living/user)
|
||||
CRASH("[type] does not implement ai eye handling")
|
||||
|
||||
/obj/machinery/computer/camera_advanced/remove_eye_control(mob/living/user)
|
||||
if(!user)
|
||||
if(isnull(user?.client))
|
||||
return
|
||||
for(var/V in actions)
|
||||
var/datum/action/A = V
|
||||
A.Remove(user)
|
||||
actions.Cut()
|
||||
for(var/V in eyeobj.visibleCameraChunks)
|
||||
var/datum/camerachunk/C = V
|
||||
C.remove(eyeobj)
|
||||
if(user.client)
|
||||
user.reset_perspective(null)
|
||||
if(eyeobj.visible_icon && user.client)
|
||||
user.client.images -= eyeobj.user_image
|
||||
|
||||
for(var/datum/action/actions_removed as anything in actions)
|
||||
actions_removed.Remove(user)
|
||||
for(var/datum/camerachunk/camerachunks_gone as anything in eyeobj.visibleCameraChunks)
|
||||
camerachunks_gone.remove(eyeobj)
|
||||
|
||||
user.reset_perspective(null)
|
||||
if(eyeobj.visible_icon)
|
||||
user.client.images -= eyeobj.user_image
|
||||
user.client.view_size.unsupress()
|
||||
|
||||
eyeobj.eye_user = null
|
||||
user.remote_control = null
|
||||
|
||||
current_user = null
|
||||
user.unset_machine()
|
||||
user.client.view_size.unsupress()
|
||||
playsound(src, 'sound/machines/terminal_off.ogg', 25, 0)
|
||||
playsound(src, 'sound/machines/terminal_off.ogg', 25, FALSE)
|
||||
|
||||
/obj/machinery/computer/camera_advanced/check_eye(mob/user)
|
||||
if( (stat & (NOPOWER|BROKEN)) || (!Adjacent(user) && hasSiliconAccessInArea(user)) || user.eye_blind || user.incapacitated() )
|
||||
@@ -89,9 +89,7 @@
|
||||
/obj/machinery/computer/camera_advanced/Destroy()
|
||||
if(current_user)
|
||||
current_user.unset_machine()
|
||||
if(eyeobj)
|
||||
qdel(eyeobj)
|
||||
QDEL_LIST(actions)
|
||||
QDEL_NULL(eyeobj)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/camera_advanced/on_unset_machine(mob/M)
|
||||
@@ -153,6 +151,8 @@
|
||||
return //AIs would need to disable their own camera procs to use the console safely. Bugs happen otherwise.
|
||||
|
||||
/obj/machinery/computer/camera_advanced/proc/give_eye_control(mob/user)
|
||||
if(isnull(user?.client))
|
||||
return
|
||||
GrantActions(user)
|
||||
current_user = user
|
||||
eyeobj.eye_user = user
|
||||
@@ -193,16 +193,19 @@
|
||||
return eye_user.client
|
||||
return null
|
||||
|
||||
/mob/camera/aiEye/remote/setLoc(T)
|
||||
/mob/camera/aiEye/remote/setLoc(destination)
|
||||
if(eye_user)
|
||||
T = get_turf(T)
|
||||
if (T)
|
||||
forceMove(T)
|
||||
destination = get_turf(destination)
|
||||
if (destination)
|
||||
abstract_move(destination)
|
||||
else
|
||||
moveToNullspace()
|
||||
|
||||
update_ai_detect_hud()
|
||||
|
||||
if(use_static != USE_STATIC_NONE)
|
||||
GLOB.cameranet.visibility(src, GetViewerClient(), null, use_static)
|
||||
|
||||
if(visible_icon)
|
||||
if(eye_user.client)
|
||||
eye_user.client.images -= user_image
|
||||
@@ -233,12 +236,11 @@
|
||||
button_icon_state = "camera_off"
|
||||
|
||||
/datum/action/innate/camera_off/Activate()
|
||||
if(!target || !isliving(target))
|
||||
if(!owner || !isliving(owner))
|
||||
return
|
||||
var/mob/living/C = target
|
||||
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
|
||||
var/mob/camera/aiEye/remote/remote_eye = owner.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/console = remote_eye.origin
|
||||
console.remove_eye_control(target)
|
||||
console.remove_eye_control(owner)
|
||||
|
||||
/datum/action/innate/camera_jump
|
||||
name = "Jump To Camera"
|
||||
@@ -246,16 +248,15 @@
|
||||
button_icon_state = "camera_jump"
|
||||
|
||||
/datum/action/innate/camera_jump/Activate()
|
||||
if(!target || !isliving(target))
|
||||
if(!owner || !isliving(owner))
|
||||
return
|
||||
var/mob/living/C = target
|
||||
var/mob/camera/aiEye/remote/remote_eye = C.remote_control
|
||||
var/mob/camera/aiEye/remote/remote_eye = owner.remote_control
|
||||
var/obj/machinery/computer/camera_advanced/origin = remote_eye.origin
|
||||
|
||||
var/list/L = list()
|
||||
|
||||
for (var/obj/machinery/camera/cam in GLOB.cameranet.cameras)
|
||||
if(origin.z_lock.len && !(cam.z in origin.z_lock))
|
||||
for (var/obj/machinery/camera/cam as anything in GLOB.cameranet.cameras)
|
||||
if(length(origin.z_lock) && !(cam.z in origin.z_lock))
|
||||
continue
|
||||
L.Add(cam)
|
||||
|
||||
@@ -265,17 +266,23 @@
|
||||
|
||||
for (var/obj/machinery/camera/netcam in L)
|
||||
var/list/tempnetwork = netcam.network & origin.networks
|
||||
if (tempnetwork.len)
|
||||
if (length(tempnetwork))
|
||||
if(!netcam.c_tag)
|
||||
continue
|
||||
T["[netcam.c_tag][netcam.can_use() ? null : " (Deactivated)"]"] = netcam
|
||||
|
||||
playsound(origin, 'sound/machines/terminal_prompt.ogg', 25, 0)
|
||||
playsound(origin, 'sound/machines/terminal_prompt.ogg', 25, FALSE)
|
||||
var/camera = input("Choose which camera you want to view", "Cameras") as null|anything in T
|
||||
if(isnull(camera))
|
||||
return
|
||||
if(isnull(T[camera]))
|
||||
return
|
||||
var/obj/machinery/camera/final = T[camera]
|
||||
playsound(src, "terminal_type", 25, 0)
|
||||
playsound(src, "terminal_type", 25, FALSE)
|
||||
if(final)
|
||||
playsound(origin, 'sound/machines/terminal_prompt_confirm.ogg', 25, 0)
|
||||
playsound(origin, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE)
|
||||
remote_eye.setLoc(get_turf(final))
|
||||
C.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/tiled/flash/static)
|
||||
C.clear_fullscreen("flash", 3) //Shorter flash than normal since it's an ~~advanced~~ console!
|
||||
owner.overlay_fullscreen("flash", /atom/movable/screen/fullscreen/tiled/flash/static)
|
||||
owner.clear_fullscreen("flash", 3) //Shorter flash than normal since it's an ~~advanced~~ console!
|
||||
else
|
||||
playsound(origin, 'sound/machines/terminal_prompt_deny.ogg', 25, 0)
|
||||
playsound(origin, 'sound/machines/terminal_prompt_deny.ogg', 25, FALSE)
|
||||
|
||||
Reference in New Issue
Block a user