Fixing client eye (#18577)

* signal foundation

* reset_perspective implemented

* you too

* setting mob

* no

* fix

* tweak

* remote view element

* these too

* use element

* cleanup more manual code

* fix element

* mutation signal

* handle being dropped from holders, and fix pai hud

* handle qdel

* it's a component now

* ugly holder fix

* another fix

* follow view target

* item remote view

* doc update

* unneeded

* this needs a recode to work better

* many fixes

* these are all unneeded

* almost working viewerlist remotes

* this uses component too

* this needs to die to it's item

* don't allow spamming tgui menus

* tg style args

* fixing behaviors

* fuk

* working view release from holders

* only final matters

* comment order and disposal fix

* cryotube loc fix

* no mob should reset its view every life tick

* major improvements

* still forbid z level change even if we allow moving

* this too

* don't doubledip

* qdel on self is unneeded

* wipe remote views on logout

* vore bellies need to manually clear views

* fixAI hud

* belly release fixes

* cannot use binoculars in a vore belly

* pai card can be picked up and dropped correctly

* ventcrawl fix and distracted fix

* this is better

* forcemove

* vr console fix

* use flag for this

* belly stuff

* various cleanups

* oops

* fixes statue spell

* unneeded perspective clear

* automatic instead

* continued cleanup

* that was dumb

* needed

* none of this works

* are these even needed

* lets lock down to these

* lets try to make this work

* extremely close to working

* needs to solve final pai issues

* mob eye change signal

* Revert "mob eye change signal"

This reverts commit eedd5da934.

* significant progress

* safety

* expected to be not null

* likely not needed

* don't spam component changes

* endview on logout

* accessors

* egg fixing

* Revert "egg fixing"

This reverts commit 6a54049c69.

* getting closer

* even closer

* needs type

* close...

* extremely close to working

* fixing pai stuff

* this too

* promising fixes

* docs

* this is recursive move's responsibility tbh

* unneeded now

* oops

* better decouple

* topmost check

* cleanup

* holder released from egg fix

* pai fix for reset view

* debug info

* some better pai ejection code

* better way

* unneeded

* needs to be null

* better vision restore

* use correct handling

* no longer needed

* required

* handle decouple on mecha too

* name clarity

* do not allow double dipping zoom items

* ethereal jaunt needs a full cleanup later

* fix blackscreen flicker

* remove set machine from pda

* Update code/game/objects/items.dm

* Update code/game/objects/items.dm

* Update code/game/objects/items.dm

* Update code/game/objects/items.dm

---------

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
Will
2025-10-12 22:18:08 -04:00
committed by GitHub
co-authored by Cameron Lennox
parent 994be6bf05
commit 2194b87de0
95 changed files with 762 additions and 710 deletions
+17 -42
View File
@@ -73,19 +73,18 @@
if(current_uav.check_eye(ui.user) < 0)
to_chat(ui.user,span_warning("The screen freezes for a moment, before returning to the UAV selection menu. It's not able to connect to that UAV."))
else
viewing_uav(ui.user) ? unlook(ui.user) : look(ui.user)
if(!viewing_uav(ui.user))
if(!viewers) viewers = list() // List must exist for pass by reference to work
start_coordinated_remoteview(ui.user, current_uav, viewers)
else
ui.user.reset_perspective()
return TRUE
if("power_uav")
if(!current_uav)
return FALSE
else if(current_uav.toggle_power())
//Clean up viewers faster
if(LAZYLEN(viewers))
for(var/datum/weakref/W in viewers)
var/M = W.resolve()
if(M)
unlook(M)
SEND_SIGNAL(src,COMSIG_REMOTE_VIEW_CLEAR)
return TRUE
/datum/tgui_module/uav/proc/set_current(var/obj/item/uav/U)
@@ -95,12 +94,7 @@
signal_strength = 0
current_uav = U
RegisterSignal(U, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(current_uav_changed_z))
if(LAZYLEN(viewers))
for(var/datum/weakref/W in viewers)
var/M = W.resolve()
if(M)
look(M)
SEND_SIGNAL(src,COMSIG_REMOTE_VIEW_CLEAR)
/datum/tgui_module/uav/proc/clear_current()
if(!current_uav)
@@ -109,13 +103,7 @@
UnregisterSignal(current_uav, COMSIG_MOVABLE_Z_CHANGED)
signal_strength = 0
current_uav = null
if(LAZYLEN(viewers))
for(var/datum/weakref/W in viewers)
var/M = W.resolve()
if(M)
to_chat(M, span_warning("You're disconnected from the UAV's camera!"))
unlook(M)
SEND_SIGNAL(src,COMSIG_REMOTE_VIEW_CLEAR)
/datum/tgui_module/uav/proc/current_uav_changed_z(old_z, new_z)
SIGNAL_HANDLER
@@ -170,31 +158,16 @@
else
return max(our_signal, their_signal)
/* All handling viewers */
/datum/tgui_module/uav/Destroy()
if(LAZYLEN(viewers))
for(var/datum/weakref/W in viewers)
var/M = W.resolve()
if(M)
unlook(M)
. = ..()
/datum/tgui_module/uav/tgui_status(mob/user)
. = ..()
if(. > STATUS_DISABLED)
if(viewing_uav(user))
look(user)
return
unlook(user)
/datum/tgui_module/uav/tgui_close(mob/user)
. = ..()
unlook(user)
user.reset_perspective()
/datum/tgui_module/uav/proc/viewing_uav(mob/user)
return (WEAKREF(user) in viewers)
/datum/tgui_module/uav/proc/look(mob/user)
/datum/tgui_module/uav/look(mob/user)
if(issilicon(user)) //Too complicated for me to want to mess with at the moment
to_chat(user, span_warning("Regulations prevent you from controlling several corporeal forms at the same time!"))
return
@@ -204,25 +177,27 @@
if(user.machine != tgui_host())
user.set_machine(tgui_host())
user.reset_view(current_uav)
current_uav.add_master(user)
LAZYDISTINCTADD(viewers, WEAKREF(user))
/datum/tgui_module/uav/proc/unlook(mob/user)
/datum/tgui_module/uav/unlook(mob/user)
user.unset_machine()
user.reset_view()
if(current_uav)
current_uav.remove_master(user)
LAZYREMOVE(viewers, WEAKREF(user))
/datum/tgui_module/uav/tgui_close(mob/user)
. = ..()
user.reset_perspective()
/datum/tgui_module/uav/check_eye(mob/user)
if(get_dist(user, tgui_host()) > 1 || user.blinded || !current_uav)
unlook(user)
user.reset_perspective()
return -1
var/viewflag = current_uav.check_eye(user)
if(viewflag < 0) //camera doesn't work
unlook(user)
user.reset_perspective()
return -1
return viewflag
+16 -31
View File
@@ -10,14 +10,6 @@
if(linked)
name = "[linked.name] [name]"
/datum/tgui_module/ship/Destroy()
if(LAZYLEN(viewers))
for(var/datum/weakref/W in viewers)
var/M = W.resolve()
if(M)
unlook(M)
. = ..()
/datum/tgui_module/ship/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
@@ -39,19 +31,14 @@
/datum/tgui_module/ship/tgui_status(mob/user)
. = ..()
if(. > STATUS_DISABLED)
if(viewing_overmap(user))
look(user)
return
unlook(user)
if(viewing_overmap(user) && (user.machine != src))
user.reset_perspective()
/datum/tgui_module/ship/tgui_close(mob/user)
. = ..()
user.unset_machine()
unlook(user)
// Unregister map objects
user.client?.clear_map(linked?.map_name)
user.reset_perspective()
/datum/tgui_module/ship/proc/sync_linked()
var/obj/effect/overmap/visitable/ship/sector = get_overmap_sector(get_z(tgui_host()))
@@ -73,32 +60,22 @@
linked = sector
return 1
/datum/tgui_module/ship/proc/look(var/mob/user)
if(linked)
user.set_machine(src)
user.reset_view(linked)
/datum/tgui_module/ship/look(var/mob/user)
user.set_viewsize(world.view + extra_view)
user.AddComponent(/datum/component/recursive_move)
if(!map_view_used)
RegisterSignal(user, COMSIG_OBSERVER_MOVED, /datum/tgui_module/ship/proc/unlook)
map_view_used = TRUE
LAZYDISTINCTADD(viewers, WEAKREF(user))
/datum/tgui_module/ship/proc/unlook(var/mob/user)
SIGNAL_HANDLER
user.reset_view()
/datum/tgui_module/ship/unlook(var/mob/user)
user.set_viewsize() // reset to default
if(map_view_used)
UnregisterSignal(user, COMSIG_OBSERVER_MOVED)
map_view_used = FALSE
LAZYREMOVE(viewers, WEAKREF(user))
/datum/tgui_module/ship/proc/viewing_overmap(mob/user)
return (WEAKREF(user) in viewers)
/datum/tgui_module/ship/check_eye(var/mob/user)
if(!get_dist(user, tgui_host()) > 1 || user.blinded || !linked)
unlook(user)
user.reset_perspective()
return -1
else
return 0
@@ -159,7 +136,11 @@
return FALSE
if(action == "viewing")
viewing_overmap(ui.user) ? unlook(ui.user) : look(ui.user)
if(!viewing_overmap(ui.user))
if(!viewers) viewers = list() // List must exist for pass by reference to work
start_coordinated_remoteview(ui.user, linked, viewers)
else
ui.user.reset_perspective()
return TRUE
/datum/tgui_module/ship/nav/ntos
@@ -419,7 +400,11 @@
. = TRUE
if("manual")
viewing_overmap(ui.user) ? unlook(ui.user) : look(ui.user)
if(!viewing_overmap(ui.user))
if(!viewers) viewers = list()
start_coordinated_remoteview(ui.user, linked, viewers)
else
ui.user.reset_perspective()
. = TRUE
/* END HELM */
/* ENGINES */