Skip to content

Commit c24b7e1

Browse files
committed
refactor: AutoObserve (#6787) [testmerge][2facb5a]
1 parent d5b9277 commit c24b7e1

File tree

23 files changed

+202
-139
lines changed

23 files changed

+202
-139
lines changed

code/__DEFINES/traits/declarations.dm

+4
Original file line numberDiff line numberDiff line change
@@ -308,3 +308,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
308308

309309
/// A trait gained by leaning against a wall
310310
#define TRAIT_LEANING "leaning"
311+
312+
/// used for dead mobs that are observing, but should not be afforded all the same platitudes as full ghosts.
313+
/// This is a mind trait because ghosts can be frequently deleted and we want to be sure this sticks.
314+
#define TRAIT_OBSERVING_INVENTORY "observe_inventory"

code/_onclick/hud/action_button.dm

+8-21
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
var/datum/keybinding/mob/trigger_action_button/linked_keybind
88

99
/atom/movable/screen/movable/action_button/MouseDrop(atom/over_object, src_location, over_location, src_control, over_control, params)
10-
if(!observer_check(usr))
10+
if(HAS_TRAIT(usr, TRAIT_OBSERVING_INVENTORY))
1111
return
1212

1313
if(locked && could_be_click_lag()) // in case something bad happend and game realised we dragged our ability instead of pressing it
@@ -37,7 +37,7 @@
3737

3838

3939
/atom/movable/screen/movable/action_button/Click(location,control,params)
40-
if(!observer_check(usr))
40+
if(HAS_TRAIT(usr, TRAIT_OBSERVING_INVENTORY))
4141
return
4242

4343
var/list/modifiers = params2list(params)
@@ -73,7 +73,7 @@
7373
return TRUE
7474

7575
/atom/movable/screen/movable/action_button/proc/set_to_keybind(mob/user)
76-
if(!observer_check(usr))
76+
if(HAS_TRAIT(usr, TRAIT_OBSERVING_INVENTORY))
7777
return
7878

7979
var/keybind_to_set_to = tgui_input_keycombo(user, "What keybind do you want to set this action button to?")
@@ -94,7 +94,7 @@
9494

9595

9696
/atom/movable/screen/movable/action_button/click_alt(mob/user)
97-
if(!observer_check(usr))
97+
if(HAS_TRAIT(usr, TRAIT_OBSERVING_INVENTORY))
9898
return
9999

100100
linked_action.AltTrigger()
@@ -103,7 +103,7 @@
103103

104104
/atom/movable/screen/movable/action_button/proc/clean_up_keybinds(mob/owner)
105105
if(linked_keybind)
106-
if(!observer_check(usr))
106+
if(HAS_TRAIT(usr, TRAIT_OBSERVING_INVENTORY))
107107
return
108108

109109
owner.client.active_keybindings[linked_keybind.binded_to] -= (linked_keybind)
@@ -133,10 +133,8 @@
133133

134134

135135
/atom/movable/screen/movable/action_button/hide_toggle/Click(location,control,params)
136-
if(isobserver(usr))
137-
var/mob/dead/observer/dead_mob = usr
138-
if(dead_mob.orbiting)
139-
return FALSE
136+
if(HAS_TRAIT(usr, TRAIT_OBSERVING_INVENTORY))
137+
return
140138

141139
if(usr.next_click > world.time)
142140
return FALSE
@@ -158,7 +156,7 @@
158156

159157

160158
/atom/movable/screen/movable/action_button/hide_toggle/click_alt(mob/user)
161-
if(!observer_check(usr))
159+
if(HAS_TRAIT(usr, TRAIT_OBSERVING_INVENTORY))
162160
return
163161

164162
for(var/datum/action/action as anything in user.actions)
@@ -197,9 +195,6 @@
197195

198196

199197
/atom/movable/screen/movable/action_button/MouseEntered(location, control, params)
200-
if(!observer_check(usr))
201-
return
202-
203198
if(!QDELETED(src))
204199
if(!linked_keybind)
205200
openToolTip(usr, src, params, title = name, content = desc, theme = actiontooltipstyle)
@@ -214,14 +209,6 @@
214209
/atom/movable/screen/movable/action_button/MouseExited()
215210
closeToolTip(usr)
216211

217-
// We don't want give permit to use buttons
218-
/atom/movable/screen/movable/action_button/proc/observer_check(mob/user)
219-
if(isobserver(user))
220-
var/mob/dead/observer/dead_mob = user
221-
if(linked_action?.owner != user || dead_mob.orbiting)
222-
return FALSE
223-
return TRUE
224-
225212
/mob/proc/update_action_buttons_icon()
226213
for(var/datum/action/action as anything in actions)
227214
action.UpdateButtonIcon()

code/_onclick/hud/alert.dm

+37-7
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@
9191
if(client && hud_used)
9292
hud_used.reorganize_alerts()
9393
client.screen -= alert
94+
95+
for(var/mob/dead/observer/observe in inventory_observers)
96+
if(!observe.client)
97+
LAZYREMOVE(inventory_observers, observe)
98+
continue
99+
observe.client.screen -= alert
94100
qdel(alert)
95101

96102
/atom/movable/screen/alert
@@ -329,6 +335,8 @@ or something covering your eyes."
329335
icon_state = "embeddedobject"
330336

331337
/atom/movable/screen/alert/embeddedobject/Click()
338+
if(!..())
339+
return
332340
if(isliving(usr))
333341
var/mob/living/carbon/human/M = usr
334342
return M.help_shake_act(M)
@@ -373,6 +381,9 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
373381

374382

375383
/atom/movable/screen/alert/fire/Click()
384+
if(!..())
385+
return
386+
376387
if(!isliving(usr))
377388
return FALSE
378389

@@ -394,6 +405,9 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
394405
icon_state = "direction_lock"
395406

396407
/atom/movable/screen/alert/direction_lock/Click()
408+
if(!..())
409+
return
410+
397411
if(isliving(usr))
398412
var/mob/living/L = usr
399413
return L.clear_forced_look()
@@ -452,7 +466,7 @@ Recharging stations are available in robotics, the dormitory bathrooms, and the
452466
desc = "You have merged with a diona gestalt and are now part of it's biomass. You can still wiggle yourself free though."
453467

454468
/atom/movable/screen/alert/nymph/Click()
455-
if(!usr || !usr.client)
469+
if(!usr || !usr.client || !..())
456470
return
457471
if(isnymph(usr))
458472
var/mob/living/simple_animal/diona/D = usr
@@ -491,7 +505,7 @@ so as to remain in compliance with the most up-to-date laws."
491505
return ..()
492506

493507
/atom/movable/screen/alert/hackingapc/Click()
494-
if(!usr || !usr.client)
508+
if(!usr || !usr.client || !..())
495509
return
496510
if(!target)
497511
return
@@ -517,7 +531,7 @@ so as to remain in compliance with the most up-to-date laws."
517531
return ..()
518532

519533
/atom/movable/screen/alert/mech_port_available/Click()
520-
if(!usr || !usr.client)
534+
if(!usr || !usr.client || !..())
521535
return
522536
if(!ismecha(usr.loc) || !target)
523537
return
@@ -533,7 +547,7 @@ so as to remain in compliance with the most up-to-date laws."
533547
icon_state = "mech_port_x"
534548

535549
/atom/movable/screen/alert/mech_port_disconnect/Click()
536-
if(!usr || !usr.client)
550+
if(!usr || !usr.client || !..())
537551
return
538552
if(!ismecha(usr.loc))
539553
return
@@ -823,11 +837,17 @@ so as to remain in compliance with the most up-to-date laws."
823837
desc = "You're legcuffed, which slows you down considerably. Click the alert to free yourself."
824838

825839
/atom/movable/screen/alert/restrained/Click()
840+
if(!..())
841+
return
842+
826843
if(isliving(usr))
827844
var/mob/living/L = usr
828845
return L.resist()
829846

830847
/atom/movable/screen/alert/restrained/buckled/Click()
848+
if(!..())
849+
return
850+
831851
var/mob/living/L = usr
832852
if(!istype(L) || !L.can_resist())
833853
return
@@ -846,6 +866,11 @@ so as to remain in compliance with the most up-to-date laws."
846866
if(!hud_shown)
847867
for(var/i in 1 to alerts.len)
848868
mymob.client.screen -= alerts[alerts[i]]
869+
for(var/mob/dead/observer/observe in mymob.inventory_observers)
870+
if(!observe.client)
871+
LAZYREMOVE(mymob.inventory_observers, observe)
872+
continue
873+
observe.client.screen -= alerts[alerts[i]]
849874
return TRUE
850875
for(var/i in 1 to alerts.len)
851876
var/atom/movable/screen/alert/alert = alerts[alerts[i]]
@@ -868,17 +893,22 @@ so as to remain in compliance with the most up-to-date laws."
868893
. = ""
869894
alert.screen_loc = .
870895
mymob.client.screen |= alert
896+
for(var/mob/dead/observer/observe in mymob.inventory_observers)
897+
if(!observe.client)
898+
LAZYREMOVE(mymob.inventory_observers, observe)
899+
continue
900+
observe.client.screen |= alert
871901
return TRUE
872902

873903
/atom/movable/screen/alert/Click(location, control, params)
874-
if(!usr || !usr.client)
904+
if(!usr || !usr.client || HAS_TRAIT(usr, TRAIT_OBSERVING_INVENTORY))
875905
return FALSE
876906

877907
var/paramslist = params2list(params)
878908
if(paramslist["shift"]) // screen objects don't do the normal Click() stuff so we'll cheat
879909
to_chat(usr, "<span class='boldnotice'>[name]</span> - <span class='info'>[desc]</span>")
880910
return FALSE
881-
911+
882912
if(master)
883913
return usr.client.Click(master, location, control, params)
884914

@@ -897,7 +927,7 @@ so as to remain in compliance with the most up-to-date laws."
897927
icon_state = "succumb"
898928

899929
/atom/movable/screen/alert/succumb/Click()
900-
if(!usr || !usr.client)
930+
if(!usr || !usr.client || !..())
901931
return
902932
var/mob/living/living_owner = usr
903933
if(!istype(usr))

code/_onclick/hud/fullscreen.dm

+18-13
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
if(client && screen.should_show_to(src))
1717
screen.update_for_view(client.view)
1818
client.screen += screen
19-
for(var/mob/dead/observer/observe in orbiters)
20-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
21-
LAZYREMOVE(orbiters, observe)
19+
for(var/mob/dead/observer/observe in inventory_observers)
20+
if(!observe.client)
21+
LAZYREMOVE(inventory_observers, observe)
2222
continue
2323
observe.client.screen += screen
2424

@@ -34,8 +34,9 @@
3434
return
3535

3636
screens -= category
37-
for(var/mob/dead/observer/observe in orbiters)
38-
if(!istype(observe) || !observe.client)
37+
for(var/mob/dead/observer/observe in inventory_observers)
38+
if(!observe.client)
39+
LAZYREMOVE(inventory_observers, observe)
3940
continue
4041
observe.screens -= category
4142

@@ -46,8 +47,9 @@
4647
if(client)
4748
client.screen -= screen
4849

49-
for(var/mob/dead/observer/observe in orbiters)
50-
if(!istype(observe) || !observe.client)
50+
for(var/mob/dead/observer/observe in inventory_observers)
51+
if(!observe.client)
52+
LAZYREMOVE(inventory_observers, observe)
5153
continue
5254
observe.client.screen -= screen
5355
qdel(screen)
@@ -56,8 +58,9 @@
5658
/mob/proc/clear_fullscreen_after_animate(atom/movable/screen/fullscreen/screen)
5759
if(client)
5860
client.screen -= screen
59-
for(var/mob/dead/observer/observe in orbiters)
60-
if(!istype(observe) || !observe.client)
61+
for(var/mob/dead/observer/observe in inventory_observers)
62+
if(!observe.client)
63+
LAZYREMOVE(inventory_observers, observe)
6164
continue
6265
observe.client.screen -= screen
6366
qdel(screen)
@@ -78,15 +81,17 @@
7881
screen.update_for_view(mymob.client.view)
7982
mymob.client.screen |= screen
8083

81-
for(var/mob/dead/observer/observe in mymob.orbiters)
82-
if(!istype(observe) || !observe.client)
84+
for(var/mob/dead/observer/observe in mymob.inventory_observers)
85+
if(!observe.client)
86+
LAZYREMOVE(mymob.inventory_observers, observe)
8387
continue
8488
observe.client.screen |= screen
8589
else
8690
mymob.client.screen -= screen
8791

88-
for(var/mob/dead/observer/observe in mymob.orbiters)
89-
if(!istype(observe) || !observe.client)
92+
for(var/mob/dead/observer/observe in mymob.inventory_observers)
93+
if(!observe.client)
94+
LAZYREMOVE(mymob.inventory_observers, observe)
9095
continue
9196
observe.client.screen -= screen
9297

code/datums/action.dm

+6-6
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@
4646
if(owner.client)
4747
owner.client.screen += button
4848

49-
for(var/mob/dead/observer/observe in user.orbiters)
50-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
51-
LAZYREMOVE(user.orbiters, observe)
49+
for(var/mob/dead/observer/observe in user.inventory_observers)
50+
if(!observe.client)
51+
LAZYREMOVE(user.inventory_observers, observe)
5252
continue
5353
observe.client.screen += button
5454

@@ -76,9 +76,9 @@
7676
if(user.client)
7777
user.client.screen -= button
7878

79-
for(var/mob/dead/observer/observe in user.orbiters)
80-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
81-
LAZYREMOVE(user.orbiters, observe)
79+
for(var/mob/dead/observer/observe in user.inventory_observers)
80+
if(!observe.client)
81+
LAZYREMOVE(user.inventory_observers, observe)
8282
continue
8383
observe.client.screen -= button
8484

code/datums/diseases/viruses/babylon_fever.dm

+2
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@
8787
stored_languages ^= translator.given_languages // you can't forget it, because it's on the chip in translator
8888

8989
for(var/datum/language/lan as anything in stored_languages)
90+
if(lan.flags & NOBABEL)
91+
continue
9092
affected_mob.remove_language(lan.name)
9193

9294

code/datums/progressbar.dm

+3-2
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,9 @@
5757
user_client = user.client
5858
add_prog_bar_image_to_client()
5959
// Ghosts wants to see a do_afters too!
60-
for(var/mob/dead/observer/observe in user.orbiters)
61-
if(!istype(observe) || !observe.client)
60+
for(var/mob/dead/observer/observe in user.inventory_observers)
61+
if(!observe.client)
62+
LAZYREMOVE(user.inventory_observers, observe)
6263
continue
6364
user_client = observe.client
6465
add_prog_bar_image_to_client()

code/datums/spells/bloodcrawl.dm

+1-1
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@
252252
var/turf/tele_loc = isturf(enter_point) ? enter_point : enter_point.loc
253253
var/holder = user.loc
254254
user.forceMove(tele_loc)
255-
user.client.eye = user
255+
user.client.set_eye(user)
256256

257257
rise_animation(tele_loc, user, enter_point)
258258

code/datums/status_effects/debuffs.dm

+6-6
Original file line numberDiff line numberDiff line change
@@ -944,9 +944,9 @@
944944
game_plane_master_controller.remove_filter("eye_blur")
945945

946946
// Maybe this should be bad for server perfomance, but i dont test it on production server
947-
for(var/mob/dead/observer/observe in owner.orbiters)
948-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
949-
LAZYREMOVE(owner.orbiters, observe)
947+
for(var/mob/dead/observer/observe in owner.inventory_observers)
948+
if(!observe.client)
949+
LAZYREMOVE(owner.inventory_observers, observe)
950950
continue
951951
game_plane_master_controller = observe.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
952952
game_plane_master_controller.remove_filter("eye_blur")
@@ -965,9 +965,9 @@
965965
game_plane_master_controller.add_filter("eye_blur", 1, gauss_blur_filter(amount_of_blur))
966966

967967
// Maybe this should be bad for server perfomance, but i dont test it on production server
968-
for(var/mob/dead/observer/observe in owner.orbiters)
969-
if(!istype(observe) || !observe.client || !observe.orbit_menu?.auto_observe)
970-
LAZYREMOVE(owner.orbiters, observe)
968+
for(var/mob/dead/observer/observe in owner.inventory_observers)
969+
if(!observe.client)
970+
LAZYREMOVE(owner.inventory_observers, observe)
971971
continue
972972
game_plane_master_controller = observe.hud_used.plane_master_controllers[PLANE_MASTERS_GAME]
973973
game_plane_master_controller.add_filter("eye_blur", 1, gauss_blur_filter(amount_of_blur))

0 commit comments

Comments
 (0)