mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
108 lines
2.2 KiB
Plaintext
108 lines
2.2 KiB
Plaintext
|
|
/mob/aiEye
|
|
var/list/visibleCameraChunks = list()
|
|
var/mob/ai = null
|
|
density = 0
|
|
|
|
/mob/living/silicon/ai/var/mob/aiEye/eyeobj = new()
|
|
|
|
/mob/living/silicon/ai/New()
|
|
..()
|
|
eyeobj.ai = src
|
|
spawn(20)
|
|
freelook()
|
|
|
|
/mob/living/silicon/ai/death(gibbed)
|
|
if(client && client.eye == eyeobj)
|
|
for(var/datum/camerachunk/c in eyeobj.visibleCameraChunks)
|
|
c.remove(eyeobj)
|
|
client.eye = src
|
|
return ..(gibbed)
|
|
|
|
/mob/living/silicon/ai/verb/freelook()
|
|
set category = "AI Commands"
|
|
set name = "freelook"
|
|
current = null //cancel camera view first, it causes problems
|
|
cameraFollow = null
|
|
if(!eyeobj) //if it got deleted somehow (like an admin trying to fix things <.<')
|
|
eyeobj = new()
|
|
eyeobj.ai = src
|
|
client.eye = eyeobj
|
|
eyeobj.loc = loc
|
|
cameranet.visibility(eyeobj)
|
|
|
|
/mob/aiEye/Move()
|
|
. = ..()
|
|
if(.)
|
|
cameranet.visibility(src)
|
|
|
|
/client/AIMove(n, direct, var/mob/living/silicon/ai/user)
|
|
if(eye == user.eyeobj)
|
|
user.eyeobj.loc = get_step(user.eyeobj, direct)
|
|
cameranet.visibility(user.eyeobj)
|
|
|
|
else
|
|
return ..()
|
|
|
|
/turf/move_camera_by_click()
|
|
if(istype(usr, /mob/living/silicon/ai))
|
|
var/mob/living/silicon/ai/AI = usr
|
|
if(AI.client.eye == AI.eyeobj)
|
|
return
|
|
return ..()
|
|
|
|
/mob/living/silicon/ai/attack_ai(var/mob/user as mob)
|
|
if (user != src)
|
|
return
|
|
|
|
if (stat == 2)
|
|
return
|
|
|
|
var/list/L = list()
|
|
for (var/obj/machinery/camera/C in world)
|
|
L.Add(C)
|
|
|
|
camera_sort(L)
|
|
L = camera_network_sort(L)
|
|
|
|
var/list/D = list()
|
|
for (var/obj/machinery/camera/C in L)
|
|
if ( C.network in src.networks )
|
|
D[text("[]: [][]", C.network, C.c_tag, (C.status ? null : " (Deactivated)"))] = C
|
|
D["Cancel"] = "Cancel"
|
|
|
|
var/t = input(user, "Which camera should you change to?") as null|anything in D
|
|
|
|
if (!t || t == "Cancel")
|
|
return 0
|
|
|
|
var/obj/machinery/camera/C = D[t]
|
|
|
|
eyeobj.loc = C.loc
|
|
cameranet.visibility(eyeobj)
|
|
|
|
return
|
|
|
|
/mob/living/silicon/ai/cancel_camera()
|
|
set name = "Cancel Camera View"
|
|
set category = "OOC"
|
|
reset_view(null)
|
|
machine = null
|
|
|
|
/mob/living/silicon/ai/reset_view(atom/A)
|
|
if (client)
|
|
if(!eyeobj)
|
|
eyeobj = new()
|
|
eyeobj.ai = src
|
|
|
|
client.eye = eyeobj
|
|
client.perspective = EYE_PERSPECTIVE
|
|
|
|
if (istype(A, /atom/movable))
|
|
eyeobj.loc = locate(A.x, A.y, A.z)
|
|
|
|
else
|
|
eyeobj.loc = locate(src.x, src.y, src.z)
|
|
|
|
cameranet.visibility(eyeobj)
|