From 7139367e0dba52bf3708e19f535bdcbc41b6fc93 Mon Sep 17 00:00:00 2001 From: Holoo <38228316+Holoo-1@users.noreply.github.com> Date: Thu, 20 Mar 2025 16:30:27 +0200 Subject: [PATCH] Separate windows for AI multicam (#90119) ## About The Pull Request Adds a button to create popup window out of multicam cameras https://github.com/user-attachments/assets/b4efef52-af53-4058-83eb-a5bd5e134b85 ## Why It's Good For The Game AI is always watching you ## Changelog :cl: add: AIs now can create a popup window via multicam /:cl: --- code/_onclick/hud/picture_in_picture.dm | 39 ++++++++++++++++++++++++ icons/hud/pic_in_pic.dmi | Bin 3370 -> 2639 bytes 2 files changed, 39 insertions(+) diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm index f2cf8f4b210..0af9bfe2f43 100644 --- a/code/_onclick/hud/picture_in_picture.dm +++ b/code/_onclick/hud/picture_in_picture.dm @@ -11,6 +11,8 @@ var/atom/movable/screen/component_button/button_x var/atom/movable/screen/component_button/button_expand var/atom/movable/screen/component_button/button_shrink + var/atom/movable/screen/component_button/button_pop + var/atom/movable/screen/map_view/popup_screen var/mutable_appearance/standard_background @@ -19,6 +21,8 @@ make_backgrounds() RegisterSignal(SSmapping, COMSIG_PLANE_OFFSET_INCREASE, PROC_REF(multiz_offset_increase)) multiz_offset_increase(SSmapping) + popup_screen = new + popup_screen.generate_view("camera-[REF(src)]_map") /atom/movable/screen/movable/pic_in_pic/proc/multiz_offset_increase(datum/source) SIGNAL_HANDLER @@ -30,15 +34,20 @@ QDEL_NULL(button_x) QDEL_NULL(button_shrink) QDEL_NULL(button_expand) + QDEL_NULL(button_pop) + QDEL_NULL(popup_screen) return ..() /atom/movable/screen/movable/pic_in_pic/component_click(atom/movable/screen/component_button/component, params) if(component == button_x) + usr.client?.close_popup("camera-[REF(src)]") qdel(src) else if(component == button_expand) set_view_size(width+1, height+1) else if(component == button_shrink) set_view_size(width-1, height-1) + else if(component == button_pop) + pop_to_screen() /atom/movable/screen/movable/pic_in_pic/proc/make_backgrounds() standard_background = new /mutable_appearance() @@ -99,6 +108,19 @@ button_shrink.transform = M vis_contents += button_shrink + if(!button_pop) + button_pop = new /atom/movable/screen/component_button(null, src) + var/mutable_appearance/MA = new /mutable_appearance() + MA.name = "pop" + MA.icon = 'icons/hud/pic_in_pic.dmi' + MA.icon_state = "pop" + MA.plane = HUD_PLANE + button_pop.appearance = MA + M = matrix() + M.Translate((max(4, width) - 0.75) * ICON_SIZE_X, (height + 0.25) * ICON_SIZE_Y + 16) + button_pop.transform = M + vis_contents += button_pop + /atom/movable/screen/movable/pic_in_pic/proc/add_background() if((width > 0) && (height > 0)) var/matrix/M = matrix() @@ -134,6 +156,9 @@ return viewing_turfs = get_visible_turfs() vis_contents += viewing_turfs + if (popup_screen) + popup_screen.vis_contents.Cut() + popup_screen.vis_contents += viewing_turfs /atom/movable/screen/movable/pic_in_pic/proc/get_visible_turfs() var/turf/T = get_turf(center) @@ -152,3 +177,17 @@ if(C) shown_to -= C C.screen -= src + +/atom/movable/screen/movable/pic_in_pic/proc/pop_to_screen() + if(usr.client.screen_maps["camera-[REF(src)]_map"]) + return + usr.client.setup_popup("camera-[REF(src)]", width, height, 2, "1984") + popup_screen.display_to(usr) + RegisterSignal(usr.client, COMSIG_POPUP_CLEARED, PROC_REF(on_popup_clear)) + +/atom/movable/screen/movable/pic_in_pic/proc/on_popup_clear(client/source, window) + SIGNAL_HANDLER + if (window == "camera-[REF(src)]") + UnregisterSignal(usr.client, COMSIG_POPUP_CLEARED) + popup_screen.hide_from(usr) + diff --git a/icons/hud/pic_in_pic.dmi b/icons/hud/pic_in_pic.dmi index 9c550f3c25ecdf6817afd63dc0843875e245dfaa..516b933125dedca31d7109a072ad640e15e071c8 100644 GIT binary patch literal 2639 zcma)8c{tQtA3wkO$qbr7qPa2|ig<~#R7fUEwz5UGCetEIG-B-AFVt0pY*_|FxuH99 zZ_Ld;xE0wMN#2_l*@s?x4D(LUectDN-v8d`Ip=)8=lgs=&-tG3cFtWp8*{9vtSA5g zYiVKXAfSvN6C*5GlX|@l2}nbPqYKT{Gw4d7PXNt_dINwk=>CIF(bmHfX2TuM2_b5q z#b{qnyFC`$6jQ3XBDG;*d6^lzKv4*mQd9^)F+Do!8oNFnky+@7}_K2Nl@x&|6?N4wj4v($VuaA_2dXK?z~_AV}BLH%mH6Nl8S}2s-$o4J}X=~ zX2_ZWNiQ%|ZqFX{-8vd-RUS>MWGB2^5n7*3pT9?{gr)^NL zNo@|#9YcRD-MqFIX|TD;4-Hw%XAaEYR({PIft(8L&djOH2RhJntO@o`HK@Hu`(**BvdH$3B==Z{isyGTGL3&uwHFI@Pp9P<%6*R=h12-v>IdD1c zW5!7a<0#-%ds7Pa4i5pwqCC4>9RMLxKaX%z`U0)WokqeUKxH2W0BdrsG(m23kqB&B z4tdmO{bV<)kAat1KkT1){~3V;X{r3?i~V0X7XbX-SAJy7jxRMfB8 zO_(F)eXJAKw_Um9ML>B8R##VbBO*f7?z*_Vc#@qxktKc$oB(#Pz1e}Km%srh?QKZe z$+&ZAtZC~NPCwSmc&mx88~k-_50mhH`+01+^9_DQ&zzyJpSD4y`%67tB-7-!8WId{ zjI#DGy(VACb&R);_WfEKzQVm_GLwW()gFzm4oZqxc$@it!|PcEwdmZFKX6xB?iXWR zFl;TWM{*S=GZ0zMuHH@P?H26oIn2bgR!h}YtIi?=KoL3m7Op$~Q9slg$QTrJ>$^W9 z7{>h-r1Az9wc?TL3Dto*FN%_9%W1i)GkE?%O_2leCq)|DOh^tLm z+tBwjxG57Ng1gDC7E^|3H;ppj32p-x_oi6?#lEUC_?OqW^zS9}X;<}#U+pf5GSc8{ zWbTYg;ErD(CBhE4nvPkBOy~2Z236-fX+aW zK>RO~fY-&K82cmyn4EeCHKQ&TK}ezyl-)T6N?ObkMI(1A7ZfE)2(ir)x#s(UhA}=~ z0bz+C0ufObBm(+IDOr%~i%Fu0rRDgZ?%u}-z%tC%f`{+#vn2v$CHwRgz=NyKC|V6j zf{b(tWKEzhL?Qpj2St{afTWuoMg-uotdPKrM8Pe($mLn`*G6$Dj4g0%BZ7Vb%X&bU=XU`QQJpRdEDh1Zn}$Po!{3hiVE52(NbQS7-n?zJ8~rkn?+B#}`TH?b-IdzjV|o4|`=PlHKja|7?N6#IB={r=pd z2vREG;Ames2@w;0+PUcY726Mi`t0VY)hiQ=2hZ7Z9(0-q5x(&XM1rp^^kZ*p)OPdr z7>h(>Y0`VBCUWQ^v)qj-1AUo^_@!@jkaSEIJG9P}^zWTO_BbmKeZ0_Iv3B<9pu2k~ z!8{^A7nd{q{pj&Bw7Mq9fPL3L+j8AJTdNQ4K_}nx84`KU%9=(v@SB7VNIWX6Z2F=n z{cz(v^Vt)+T;KQ)#rwuM3qwle4oV<9tl=T;i1WcNH}h06L4{9TG#Yd1qP=>--D_TV zfA-ZSIoLtmr4jfEddzdho;~LFXr0=3^4h7|gqiE zHxbKY+O>Jsd*%9qz|wr%2)!!NI=faJU!RA|hx3|xgGn>cRtUSgvvfg3`E^*h{h!cE zjwazK`i%JrWm+Jq1LFkDnM?lYya;v_^i4e{g4Eyl-6Jr?}+NB#~ zk!X&;yU5^C$gXA_iCkT-2%7BC<;SkhxdyMzM}7LT&=D_duhW@<42vU%pprW-*`o)G*qBzOXs6A&-s{Wu!=W zblWeVr0|v>wP%RC^S=l}_Y^08(PsSRb4tfr+jLr&{IJkJZhiZ-;#VhQ_dA~tmsBPw UiUhEkf*&HVG_x_SG^WJ;8xkRym;e9( literal 3370 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 E2DHmSY5)KL