From 23c5d14420a6327318434b24343bb5f9b97677cd Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Tue, 1 Dec 2020 20:43:25 +0100 Subject: [PATCH] Added func_monitor and point_camera. Along with a test_monitor map to showcases rendertargets working. --- .../test_maps.pk3dir/maps/test_monitor.bsp | Bin 0 -> 1607620 bytes .../test_maps.pk3dir/maps/test_monitor.map | 251 +++++++++++++ .../textures/measure/rtsurface.mat | 8 + .../textures/measure/rtsurface.tga | Bin 0 -> 78219 bytes src/client/entry.c | 9 + src/gs-entbase/server.src | 1 + src/gs-entbase/server/point_camera.cpp | 123 +++++++ src/gs-entbase/shared.src | 1 + src/gs-entbase/shared/func_monitor.cpp | 347 ++++++++++++++++++ src/shared/entities.h | 1 + 10 files changed, 741 insertions(+) create mode 100644 platform/test_maps.pk3dir/maps/test_monitor.bsp create mode 100644 platform/test_maps.pk3dir/maps/test_monitor.map create mode 100644 platform/test_maps.pk3dir/textures/measure/rtsurface.mat create mode 100644 platform/test_maps.pk3dir/textures/measure/rtsurface.tga create mode 100644 src/gs-entbase/server/point_camera.cpp create mode 100644 src/gs-entbase/shared/func_monitor.cpp diff --git a/platform/test_maps.pk3dir/maps/test_monitor.bsp b/platform/test_maps.pk3dir/maps/test_monitor.bsp new file mode 100644 index 0000000000000000000000000000000000000000..b0811906e82fda0c88bc3f0d16341ba666a7520c GIT binary patch literal 1607620 zcmeFa2b`S6mABg_t&PEpGY)H_Ln-90nXjPJtUfBmL=I#gFzJ#W?j zoH|wS+q(=pVBgPFDwUfqU$ZiMMgH^nAG~n=3YE&uD^)6Me2LforBdm|ZQ-hw${XL| zHQxWnT9wM${9kjOO63ARGx8giN*n)A{${1p%IB`<^|iOERF1!D&B`&nZvQRaeQ>4n z&KE0{zNgr;HTlo$|5~a1_GJI=z89=nIsWsN%J)yW;QQyEeZo0goPNTvb9k`D@h6;f z8lO0x+s@q1;P!oPR*e1s0k;FVoy+ZPZkDKCeL2USdF~nCKOtl}hxga!wpn(giIp?C z+4r2l%~Hd1&L8&O@AmG~?<7jvf;?6S%Wq}cu~6YHA%wPnwoJpThG&Ja6TX_bj#SnhmQz#>U zZe@_)QYycAKbB$N7vBr{ct5@uo)@2wb&T~3?@_+hFQ!mV%+HIV94oJAo8`ONo)>Kk z&&i+OZ{>Y^p1)82_}!MjmG{H{B2R38EW^sr-?#Ge&-WT!`+lznc{|pxmG;>4?E70{ z{vuB(&x$Pag!aVG^ZL!D&)>}FQ~A6x$2(`q_9al5w!{nt%W9 zrO)qP`h2A{zAKcMe}3Q6=lA9F`TMP<_ghQvTh;R8Q)%_e=4I66Dc%pSWgJtU?0tK! zld+W6PX&61V9a(I-L&+|6BQNdWBB1`yZ`5Vfe)6=C-}1%$t@flytMlKA z;V`BY^GDFFykqUOa=*aMQn^0%nw4*#ZM7#wviw$l%3tJZut;-xZUU zY58M)?Dfxavpj3q6H+Rl$Hpg?Z=VeriaX0+Q=cM#=|u7})8=pMC z)yLkmWS?yfkNj>+{#kw-&mr-?YcdPf7zfpZ+ z`7Nc-Fx6|AKk~Pd<7e&h*4*;r^^gC{k7=vD$+5HJmGkf4Ab;$WF@N~1eV(*EH>`jK zNzvZ)c^(Wb@-r0<-_u&u{|)0_)Zg;kxH66{+$@=XS-oy9^2hS+yX>d4}-5^~Gcpcw8>W z`p?IdZ^t}Od3~%dn6#zV?mWdjt-NU8Lsgg3HLBy3*DOyP|693PG8P|YdGh+$`}SQN z+NDW%d2anCewXF3@A^Ny_K&Qbn5WG$kgV-Cwyk}Zaz6I_YHs%4-zme!v?a@9|Lwah zSstsejo}Z9_sV%%dC%(eA@BdK$kS3P$MRURvG;yf&V4+N-(~OHcUk{ll;w%-viB|7 zcP-)l#YGyv}QuH`ckF z$LjkUd0s8P%jyvFWIm#`%lyxmiab2@Jp7NW>?>d4{g*9|-5TVvW4boC^|)Dmtgps) z*-KY*vtzoD*VnNZiaho(Cd>0#ZtHS;-oB?no>tzoIxpb;7m7SB_CHIl#pCt)|7?+` zTp!C~-(|k#U$Q)bkG)wW`>wz8{&Phh`>t{x>+@!N%}>g8)#@Mn>JZ-BklUt39{weJ z6Z6=y+=$x~e20}|c|yv{F^13Z{>J>bJn%@5;+* zZCIWdpb z$C7=I`3Q5#llu_X_L!$9??1--=5yzMNuI~pJxU()vm52HF>c4|5&oO6oaec@@INe% z9n1OrpU177r-eFO9y{(c`9Fi3wLSGi>daeVT-g6r?2csr?Pg6j+Yld{rpCv{Gd?zM z_SkHw_4oML+8FZ~*Z4U45LW*7+3SO{$5!W9&feMM1B=II`w!0^+i^u&LbC6*$9A*6 zWB={DjHf-e&&Kz87<>`?zY@1~xLICH>vFTamh69g-TI_Gw)UEDVV|>P<03vTmlHp0 z_QoDt+l*Cw-O7oNjd^@*8f=g4{dKd~O_yUHI~MVAvvTtK*zvObpXIi!<*dbLqOWB7 zA0Jye@v+q>J~o?gkIkR4cE#71wH#|#{45W{<5l@@K4NUU_0M>`%pS+rt)2GR{2?nR z9;5ttmCK2rZB!0L1Yah8SAM*jl@t4qK7l!*R9?0b$e{wtZh-_ET0`0`@9{e{5|_zd@tsU<=N}8JnQGNy!hXam6aEt zePOGog-Rd0w+hZ#~=CO9R_nws<^BS9&*FG1&%j#r#?EB;Y z_&Iyc>S28CyX|I=?eq57l0CPwV;+0Yj+Y%nUwaJeqYqTVI;*WEw(Ml@7+*`4w^Fe+ zGFwNpwM1KQTY-G7Q!S5`ZF#KR0neTG;QaIMvd>SeRCa&xrokIpzCm^@tR429mXDni zlws?JwwBg1WreWbwb~9mx9;2|)vR%u&yd}$JX^=K@@^jJ^ZvYO>F_Dl@;d4-iD9XJ zvH!JAwesk9MSGXGJlj)qb74O!ZRpm(O6x0(}q)x zvxSsr_g3EE4vufL`o;E!^4daqp}k!xuNQi6dQk9d`*LU6J0*N~9Y3p|m6z2ol-FVX znv`e9BbC<@zO!x1&hYD?ywG0CqrZgmIy}DZlo$I;8+j)1JzXp>@(bm)d3k1&I!cY|XU8{{*GB!gS$n%up0(GGN8~q)y0v#aV!d0f-<0^p z`la%ypOx3C`ZXxej)%23l-J_zJ)yJhZBkxpua(Em%3I#{wmv`^+^l}lesslNwsI^| zdDPAHpgYQ|P;Q0tNL?$hXm2R5t((fDZW+IpuGrsjJglvD^ZIqIJj!W_<+V^IPrFpV zqP);v%H#NUy}SpUU)vP#FI};hty%p{@2&rJM|pNUtUOZJ%cH%aJlfmk@+d2gw}M|w zSL|=-f3@}NdU>$R_;pKp*8hs*+x7B__D1`0QfKwlj^EPSTj+nWycUiPw=S1g@N2d5 z+PYXCb!&;`QC7E+}XsADLvWxH5``u`o(&*INk zp0(G?v-U1;c^1PimDhGbN9FN;N=tc^-KsHhUMC;*Yx@EJ+pQn(r<9dt<;L=|;}Obh z_xN^DUX0%xzc%V;?OopTV*d-rce1zlBFby8z1G%rjA>(;UpyWaKfY}jcSCuBU(sGG zuf6uRSHIZaP#*0ye%9Wul(#}0Z(d%@g`FvnJRvRRKD*WQ7jJJ%r|Q>1dExj{9(^X1 z*WvMPQeM=TtiOczE^m3|_EsiWS~}{_1-XXv-&ntRe7mE(INm6WrLnHn&)S>H<9Kwn zyx87&Jg8&ac^tc&+tKI5&yMlZ+FLvxvAw{aLdhVp1t{rZ5v$Qn7opJn09N)XmzER#WAFK_;NM?cv6 zntO`!)(&}YdT>s=3;lVZ z_vhy2eWB>jjp~>6XUYrxd7$^_=H*#`Uf6Mew)R?o9_anKd3l}e&sLtLf!?2+m)E)e zT(S8j$E>yJ&&~C|bNX!M9TUp){@lF0&grw2*AmL}{@lF0&h=+2Z|zW?_vhy2W%^vF ze^q_9@+zS`@6XN4>zqDYdDfp>i~iiayiA|#>_@dfTY1)>TZ{hOx^2s67P0^9ihIU> zt1|Bo=Up~wr%kVZ?!oITH+D{+LwiGc-k)2y{n-USym!=ZuYT!)vnrHx#hcR(uKeLw zmtXd5=lXLf4}`5ne{S8jzGjyUyZY%tdv(;GeJ@pLZ#W*qZg|q_>HDRAv~;)1510O# zGiln^xpKtME~qTMyuEd8UHI_7bBHIP&-;u%ZAwc6 zdv5*tbIO1Q z{*d+Od!GMJQC{rN3)?Mk3Hto>=lV6QpZgo%j_tK_(C3%hE$pPQE#`*Wl6s{Pr@v;JH`pRGSPFVFh(GadHl(B4p<_vhy2 zy-t6=wZr}#%CjaE{keI0o$SwpivG-e(E4-p`CupeGv$T;T=D+gyu42KXUYrxx#In~ zd3l}e&y*MXbH)2}^YZSk>T{hvuj;eSe?xx;qxI+J<#kS^&HXjri`rsepJ|mnw(`~}>_^L1Ufx69P@c87#ZEWm>#e-z?d`aJ3&VWc z+Uw<6dzZI7yC#&ESA6f3O3R6q+irROz2VEt{H#3VXYCF3qr5Y^p}eX;>E*S1d^@P0 zwKtSECDbvrcX`W;{jb`eD{bHJpuGkz^}(e)$!_`aa6PEBSgfnPXXNqOb=!nwuDTWLA>uf_Vs<4bvMXLYf>INt1dp$Vb9j*dsjJB9nD zwYNAv;_;=t(B9=OFSa)xUu&=FRj2rouTlM?{Qu)n_9r`! z^Pj^htex7Ix0BG7BCWvxSf{V>xO+L-e%zbQpIatQd7bPW((bQQufd(DQ_a}R>tyG- zc5j_*pK(W=YWp`;sN{88yW8v3nPXS&M^+z8b{=f(PwVrzdpX5ARm{ijAXRzgb=r_m z{d4NnQ6IPJR(a*eZqshBQ``sIQJt#wvD)Qz>h;g5Q)jfG>A2%$&Tc+-t<)#(zcm7l zQneq&cXLktc(Hr?Q)iA{?Qyeu<$c^1i~l)wTK;j@@=vQ%M}3?x&c@w}Jd64?xZCR# z_qViXgX{ZKUZ){Nox0DbtJ$+e>5Wo-f6D8$Cm*r?)O~g83@58+Evvjv`xbTTKA$e` z#cJ=^g*qkQ$)4qPIs?g$&{U>1+Mi>k*|kB8QC_F>dEVW1ifhHb z&gScOzJ_OOzFCZ<)Qh3t0hx=)`v%gO3lWtG?I zwxUkmr%$m?wd2cbP@k%-jETiA?y}0Y^MBv}s(ruwy!`q2e%=3xUe3OME&dnfx-!{o zUXi|i`);+>R$FhgO}~Eq`uE><+ikboZoBP0@t-HW#2edevklp{+;Yp_y?cMAHhKB& z-`9TPGb@I)Qb;SWyfWX;7wx#?j=S!<>)w0sO;M|@w%Y2eul|KEeBob1T4Rkhz8KP% zzVxLphxC=NeC4ZO{p#03`uf+uzUG>1e&ZY8_-07o`qsC;{q1l6TS(stX|0gfj%l5k z;tTfQ^LTzfN(m&2qDV?6@fCcLeWr34bCQ6|aT#dndsUEVS(L-L9h_o0onHNEJ0oI_FPSZ#_WQ9fV9m+_5RwXNpV zibM@bUSaCK>86`*w%KNzZ@&2!TWrxQBsxHz{6*d+4>`$CkD{OS>C=a7y?XWLWAWY1 zDT@r7@VCh(8*glX^_lsmqNqG`$WJ99mRQjo4o9LytDO&2IF1}p4l9Rx-F4SpZ@u-_ zUw{3cJ$r7j!3G;{xZy^mjV)0P>J!ptRyY6KG^?b2@5W^3Q+$>Zdi3Z)Q4~nA6z)BT zuk$`b1-!$g-eSzZ`c)1s)u!@3OyKNoDINV~Z4s48jq+xB!?Jc+<7j07PD3`P@gM*M zpIpC354eB_NF6og>#+9zlN#bZmKRBWApBSqoi_AB?~s06=%t~Z+edNj$B%(n>3=xZ(;S@p#1* z`Ln0H?Y7(g`|m$==up1ySkiIFap&2%4{~dF>8rgTa_^##;13uuVBo-(9e3Pu5NW5K z>~GLcJZWj!ap1s#JM6FnmZ4w2{#$Lmbt)u1NToG=ng@6Wdn9z1xD zJ@z=@fCDIm=KB~)!^B5Qy+}fvln%7_v2=(zWPSu0t(F+Kb;;jh2$0hbaj*s9`2HLH zl>$Q#G%LUtnJ5Pcoy>(HaI>tUngM#TfMW0z~Exr|b!#-n$5S`Rpl19;Wsk{#mAUktw&X)?) z?=2$#vb8AaezazVJ&Wx!OBxzdm}cI_=$RGRaHC|-%ml30852;5ZE8q53NE?cX~S5o zdSWHzkNvk%4-TT5GPqXL?MW0uGQ%3d`bgw^Nj?&(6(s2v2ruuNB2>lS3JC>T@jhng z9^OMZg02AJem$26?h%XZ^}-e)Cwz*|MIjW$L8n-&VH$3+hOQDI;)s{juQN|=0QwmG zd`bUTM)TbSthmz3!33C^?!No(D5vZH8E0BLUAZNq=)!X_CxFkmm}zU?;?N>crr&W_;UV~cS+>* zBc2Ae9pb79uyIYlN`0>#6F}u@h3h|u(v!Ey8^ypcjr|SlYFaAXe5;j z$-kG^ypl|Qm=|CLqH@|qz?^3@0mUo;V^iBzI?(@SeSo7=>eY0=ygw&%mL@W37DJ1| zL@k)I(57@pBMW0{X4K{aOn+=5u)&5tqlvQs>p$ot-)WlGa4r+(j~oTMcRmse@sFw- zreeihH3+Y@!W+WT@dLznm6E^3y=Ug$KN~6&>yrtrYpe}J{zAp9S47{*jgZSiQh)yn z`(7U~#prR7@cZ?lVSnqHAb1Mqz_R*>_;l4v%q5}`F+i2nuQN|k409au|38oOU-kc2 zT6vYE|Moae0doJJZ|rtFxv%t7*$Jb%}JCKnhW><&|yBaS$Nk0U{h5mFlRB{!)wOqwY_s-A|w z4;d!%rNrx`WD$}fsLE-6h_mh&wA4FZG5us*Bq600egr!s{yy+&RB~F{X^}U|Emykd zMH1cBd#QC%cTuYL%ZwMkQFYXKEC~INCIH?r2R_Mrp!@vDIQooAhcF@PUQOXeQ}1L2 zw%>kxriz)c6FID%4rGR)apt~-$*{RYmU)dYdhjPW%wMgU>H9Q4S4%iR112v19P~me zvv8K_J>NmXfMtp2yvCat1{2TCw?JD_P69@zoFNtzOn?E$eO!C(b)0sX0yGK%Mbtht z@{a8;4f0hl{@w>D+2yLXITpe4d5r6RVakFDD;gDA76FEaY(Yad-*nT>3KI}!0l6(p z4S^)`ZF8A#lpP)_%&dimc%98+CCSYql~msA?_ypRUK-==aWT#A`F4M^aIj+srZN;& z^|8NEV_vgi_+|7zRmS2^sDI`by6d05-2^@J55oXzde^ z-$?)e#oYcCE#`y%uVjxc1myi{Iqp$igc16KAL|# zIsAwt4mtEt>;cAMPqP9;`08af0emD+$i63>f6{;f1F$Rp^z`_c1DiE%_CLm1atXmq{k-L2Ir@9s+kCaOYezk$HvOXB~9e{C?G z$vr5avzBy>!I7Gi3|X*Wp-J&ByiyKOFOx0-nS}8IJ1OYDnE+JX#J^Y`vh^Vn^EDFx zc+5+L@305af$uwDfJF;gJR)PX0=!#TfnX+LT&PbUGH+kaOgYR2VrHy>%`EyBYTTy} zHEgFRB(+K1fIa{;j5~Zd#2ojkRJ!n+=2IhUW1e^(>WLL#!K)9BH0o*-fvR$be$sh9J%H*AGH!?sOUysB}ZWsH*>ArH?rr z5=vWAb2>Tdy*b`PX$u}K3RY?hbxsK(Nc9i%dYjH5e$b$&)8oUW-bVB{n|O3Z&7%qM zI#caR0*nayR%uJXSFayC%A=n5H3R%dA zRF}E1CMk20Vlua*|D~Q#j}GyN5{DZx4_?0sziB>o!Z;PlDoNsbsA{qT7L20LxCyXX zz(yO}Dr(OSI64S3Uk7CCA+`z-BNfqeM%mL6u#X73L9?EaPXN(9%5Dr0VOp{8zWZWgjz9i*T7iQ^YBokVzCcbrt(jWdkgpjgg^v`b z#nn4r4Gx}9^WDeWbfb+oK}dUUupu2_z4d$0U+FhCE^0%gaa`B{Pea2UX<8A)zr5zl z*lFnUd2`Z`r>D{1=#Yi)8XAJ>it^?4w-HSWO)!B%-^fVAQ3(VpOznd@dF6vT0j_=H z1$N+L0;oD-n2EosK9e;P3hxhiC0K#5Pb`Q$I|m374s2;5gTHIxAm2sCG@+1I;zcG( zMdpE)IhzQuf)FMGwV9jgf9ed09wW3~Fo6R;Sh-l5^n3Hz15qTbPcT3=1}iLN*C?m2 z1=td5K{$BMX$lY`CyhM>AEE7ZY!^~jt%e;N7bWy+b7N=>N8c@(sXfiH!{x~)Q#`Wy zRKSR}BPaPY6JQN-haq+qn*tDifh4j?pG;~NyxFg%PEJEyY{P1+x&P@Xd^Az|C)u2 zT)}+!gx*>-haT?!3Eh+ahJgEEry?;ksZi$A!6R-*Ub zKB~XHZFu&oZWlsZ{SB{GmGukuG9~3?IoLMR*g`;@0$5nUm8$*jLEk2|qyI^_Tt7K# zbOwZ~+7|N!svW!N5}`+!5wqrywhPfYZ$;R@Z2>wO5^Y(p-W0(M!a7N8NSFe|31eLI zqCR;)|H@asn*9H~1C!14wo$O1Cb;$o(e>82>i2N@rK|J69cEJfMpkX938$6t3VkedKZNMWItMgQFpxRy zp+nLOy&*yQw`Am^SJWPvN>Yp%oBS5R7K^v{>(`%QPLr{DSb<>0HX(FG2WEUR?{y#5 zOh5<(0W^-Cda%dUe5y9o%YPW8$r zpz7Nb_hSbFJB>pih*>~fJBTJASU1xy4r0`QCR>f8@>fj&^=VgT z6J#DFj9wpF;g-}Z!(npq_ex~iUzL5vOZY2Z!40D$VIjzzYG~D4H_TA1Vj;fDasRi% zGjwI}S^+Bg|LH+9*-x*d{3Y=x_!IQMi2p?Ww~d`V_I~v#y+=t({yzhRR6pKvMcmQw z!^$!B1Ilr!4))AjMl=c!mLU;E%yq2rT?_FH?rZ;T8AvR41}o4PD?q$plg&0~BCuhN z30Q~DO$B_6Q>E1Xq9biPDmfPDCtfs(w&b3Fk}q!#gN82ZZK3ni&6vV4$H#;rI4D0& zU}U4fh^_C`MPo@o z`3u#i_LxXhlO1+Q;y)-Ps^Jefc5VX5gZhx4D($?>E<2g34~nX8qM96gY(!9XWOW-F zvGdL`v!7|=fgmf&mKE~M_5Gn_K+zo3#s@eU8NdxDP@ut*2E*n}bJIoxLzl=*YHSfE zAj|@MdS!-{*+ke8>QjJlB2{(qv>Z91d)N{{h@ATfE%k?7NL{sDvRpa6OLWi{^9zC% zqcN6<&XognI1gZ_^&t>cJ5Su$mou{E?6sWxAXZmlp$Sad-V(K5A|L}Fl1_B=vqpmIy z9P>AG6TlHECMi`DU=`!*AdqB%nlQfxRFeJl;4>X92n6xB$UmB&(*IQbM?g?BcAuvB ze`$aqnCZy+00DIx?78@RsDwGb%cjd09)SNVM z7&Sg*XbXm{B>uDl`$ZF|Kb5D>Lw4JZjktU7y*Fzmgv<8de}C?Hy!Sr)?78P&yY03+ zc7Zk`WHbcT!fWl_hbHv0iHw=BI130-EJ&uI4dL8)VXmk%Ccr&P2Z+==L%t#rh<|wir8gBT$VF4;eycrU2P|A)5lw_MrbZUm$b6{sX_{ z54iq&mtgP){kL^e!eZVl3i00-Lfdo1gX*_nr}7l)T&!QXQ47i$riXpD>_zaTh!Do$ zxhOU20sQ(y(mxyKRo^);Q!NU5dmb4{XfHo4TD%Nm?dwSj)wR{8|+ClIY1mX z-w{#x%>DZpKJ$*%v)fRc-9z%T+jz)%6Xrs@1P$7W6QI!qw4q=BZMWLG-cb{r7!isq@uLK{r|izyz9+zFU8wJ=b;zn;?LY1u|laB*9>NqpL)Uv z!9Uoy=^n|>T-&G1-H}HgdD!8HAAHCmoVda6EY8|PezA3E8@6ogt+(m3WnVV|HjC-G z0j|qB>#U0_#pw3geUm6qq5rtuqrU>C}bu4;+vA)QG>UYP|O_3xb@2?O{=%B(qqhd>bA+8Q7k>CiS2)1O=Pbr(XZ5 ziP@jZzxGmvs8+-0}FNlTJGBxZ^l$De}q`hA39Vr33XylFtD2 z#Ii_wkqjOPqI!Ikmc+W1D+VsNm>f+%^iA|XDShJy=s%9XsXzZ>;$b}J7x$m@z3F=nx8|z_$QFEO(G{!G!H9wdr3%;*jAQF*NY;=-#Ln!+}A75TX3&CsL2|eBgnc z<%XwBI+Pm^4?5@|+-APl&T-zu&vD+xoM$ru1Kb1<2->1|AC`kR-efaeXto2@OaXj? zoHA4^PwEY$9WkAKDVcA5%t`4+d;7P4HF>=Cxn~in$C^0L%u<8GYI6 zV6iL@0o59^;Q!Mz>7PmeQM0^<(2(2&`%&;&m>c58&VSJNDEB6+DQ#%0u9lJsFpXW7 zNDI}=^uIyyp9AFj?`Fuq&MHs{eWCpMKYxcDH{_TFu`-FGH_veRIn1+eF)uZd^h&3pA`E!d_2 z8~PNWx(e{kcv4kqfF%7-!bNj@)TEJ4=W*wsp2h&jgyCe;1f#o24=Rg1XFMe?&_t#&4{k7Nr`0~qtbkRi@pMB0boVYja*kg$Z z?YI8{yYI0l%0@$Q6#H(qb+29ovI-Ms+gWWDqjm~VS_O#LtNes?Auy%@S`wdn{jb+d zcMM{{By49ghuM99l#)d6tEOZEP)_p2g(0>FcnHWBPa8!}{A{~I2eQrcUn_P9JIU0& zy*Zt1OCJ2eLm-kvKPjAlDjL<_S`$++WYt+1lOEOz=nQ~uzR_vt@JB*oj4 z@1K-EJ#Z6{!Yt-#|C9CKzuHAUm;LlO%>oMj_q{+JRV;*6i>cr8jU80q)F1u->}R9< zZ!?1BEA12hDLi(%F}@4FI$k=p^#PIwyPI_%=?(RN<(2I`ViJP_cZjiocoI;;?I)&0 zK9UJMZNyJ#n;-j~>nATW-1Krkj5Kv!DG8>u~-B7o2|j8C(F?Ou&Bo z@3#9M*fLf+S=0^-0nB1HEv5jaRe&%B2pjyWCjxw;dQLuvN@g_azfbcqrtoa$Gv}I_ zoPWg9q#xoT@rdVP{W>UTH3Vdl6Txdj0n$fFeen)`rY;w&=92ushEV^}k_T zlKy9bEMLM76B!P(o3d!jXckT5#V`f1y|@hx87BhRK4G88^t2rUga>g;Lf^K%tZ57A z*S=P?f&)QAlG(zU2}dEh|II=!)sTDc`6vB%jSX&gb-yJZJI6G-*;Xrev#A(gntR$+ z|36F#Q*C1WC-eSeMeM7C`X|BXga~$a*?mlI9ct>l9J{ZG|@ z`g58B5UYV010)Uhe57+sgUna&-2X@aSBeSoq|akY5P!lu$RMu1h0RYq@sv|eK}!jn zlep(0ubgyGi(78_{oP~6Oqw+5 z;fEidH*ek}k37Qt!!u?~o;-QXn6bYfG2+G>Z@luVtA6l<3uzs*00Ke#?6WU>EOB+2 z__KV;j!?FIGx~7ISiNGPTKz)^$Yd(IshpzBrFPa>qqtu2^7Y|v|5WM{ZbqrFE02$K z8|E~rPX7sU_~LKLXGZ@$Tv99lyJ85i1}JCP8)nx(AHXW`_B(8Ar&rkKnIdv-OTg(Y z0Cvu#C1BePLY4B!34OSk{-?I&v8+aINsGVnWDtV?A^78gtk@QB4K3IOJK*}yTTBla z7q~{mix_J*k)a{BmTjkv7w3s^!h6tv7`pz`MO|j88?;j^n(99vpz($LR~LV=$UQ^C zE+g-jOnDn5f0Jw|G@syuQU9ruUuVz4YmT>x{<|@%jsJv>k%B)_{;d{e=O6L+zpm*& zJ=4$rSiVu<`cLpD`Tzfe^}ilbvw#W59jUKRpZSdarVJKVTT3{{8Roy!-Bg1q^h3gN^f8#6EDoqJX zUI9k|&BROm|3LqlqxtD|n^jM;ju(O`Mb4vPHRb%8?G12xx&NQ^-)$Ls+psN-7qT%+ z7^m>F9bM6X3>kqA)DU4z3mNFR_wD2!G|~UU`>zpP+xTCj|JC@9OMCo)OP2dTng}b65qoiz=*J8Y8a% zKGGZNzqKW7VWnrHS9myddyo9P^H2RTUQ`~lg|)iuvdi%N5&tPurab-h)9=6k{>L9L zt^ZrJXwfszJk!?Jh6%Xw#$OT$I_I446Xs(2!-*BxGDL#NQeUiCuU<@V>Hq7q3S5MM zY{hELu*W;!!t@E(fA1Bj6TKn~^I|_RNExJ1#i{}}`TtuJ$jf5p4dXwB^S_J7e{6SC z?lxEb|LPV{-#OX%QcJbU*@6Dk9P%gqFU@6g{pSR(`ne2MO#z^tiTvz>^Pk6m{Bj)T z|I-cPLPnkczd?2iKx6%{p2&u{;WIEYskYUd!@!m@j)eLD)ib}`>-HId32&SNnB3PU z3{VI9A5H{j#PLnJ%=+Afp_l68)iM3AtBLD>vO)zzlU%MA{}(lLB#wC`{4N_{)qeq7yRJjOD<_`ZADQpyZmzQcznqvmtYZ? z4qyT>6BrA;ZgvL|Imc~A4SW@VskUvQ@emODzp zBa?;Mi*5EcJ#4Q3wFV&f|M4_P9GBpEM+1PKX8KOA~>1P{3X@X5* z>_mWk3BdIq?4SJjk9m68tk9iK%o(H72Y9aks2o9i*MFkl_`qnUht1ty*cH!*y-)ny{xEuX3jhg z#0rw7ApY$C^b_>*bJ^@F5ao@mA^wx}pZ;mB2+KpM75RlMlK&qk0A>LAh#w2re~ZW2 zrpsgi$`&B#aN+iwgYDv9jj?n}W?ld3x7I6a!coOi1johek=vod{*)&Gg#pOLAO2Ri z2EiXY|BIHw$`3jO(!_+ifT;V$@&5-UE|dNf_P6NIXDt4Mqf7Gh2v`8c`Ny$8@4WLa zzW5TvpTPLFKmIWuHCtu4|M8E1eAQJ~V*)O@k zCImz{5?jtz&ScJPM&lcSuxXaK53R5zY;*qO;;%=sSjAvkM8{*}0VPvD?l@hdr2kpp zuC@aAfU%aUP0x4BmFs_80Vsqw7yw@cC`>?H38ryHa)AY=dH(z*AG^B$r-96ZH`o7E znUW={)qkr4-|F*^dJEuTA71wi}x6|eLM(KaISf}OIf40q#h@TvB#1RB@ zPCe~3oPXT=;lo?6xZ+Co$)o)LPP*X+?tXUNb(jEV0j;e+WG#Rg5vNeG3c!UG2myst zsP-fpz|^|Xf7?IfCxZDBaHjv^G|AKt>*N1P|LLE22uc6xT8us%)D-+@@dN^aimVkqs7xdpE6&}C(Wa>Y?0txgQ-_M*)`fth^Po8zK-YXa&DgM(?|M?&mgyZ7o z3>kE#!ZBqzgL#KdXEJkUQK0S9^?%$5m|3$w^ZZKXI%9n&UOaY1$uV@QL#}5$DVk%r~f9e@b{FDBh%-X~XCT?5#mgHtP z(EqR&QL08m{dWuC`fvBa_jmDUf*job;Q9NkB-E@ER;k#S+Lir3-J+tO-a>q&C(Yy# zBTzmr>f=8vW&XeGKPP+<{716Af^T^ z39|~o&Uw~M`R&U?4m}Lbv?YLDc18b-U7+>)Py8hK|MW)WsEhhfP-2%|c46Bpm1o=M zC6`=s!wo;b^Ugcx&YSnQYUDq6`_p58VE3#7%%4A>a|1X#?9$=GX%WrY|9}H`+iiCm zLddu;vlv#fHwpT`ez66J1w226;ZvdiaHdO`{%0dS=|3YBC1LO~plf|*Vjft4Vinjl zGnfGLn}g?!T9U8_JjG$=aIjKn&LmMQNFO^9iycG zJT2+J`v%_6UH?(7)EvaA)EwrF*t7m&7Ess#TMa1eT4+|h_)iB7NxuSMs~CK#>woIo znS1bcD$VdjTT*P+4RM1hK%4_mU^=81AR(YK!lR{1M&Hsph12?-~{~3%h zY^eV!5JeB+z>)GPfSG`hO3F{>s#T&|HK!yrt`$tE7$)-5E5iScHSZ4nAL_w>_Ia|^ z2ZcxHQF~l}#Gifg+%pScI&jT3*RUMSYU#P>o_qQkXPkKANvxR?f#LkwJ@(uyECJ{G zAFiTMYyq`1Wzrboh_|Ev40azcKE~;s=oKA_9+>=pMlS2u1h0k;9cuc2>7^JdPV!=( z|40A$NA&+2#C)>1K4w$sqmMpz_uXS|{N*o)x3T$!PVVoqXnO7f@jWJaU4<2gw|O18qT)5KQMl z@BjnBVsRn<+oWrz*)?;b&m1qC)-%aw;iIBHR18UU9iU?X*25+YD*}V`aGuudKOafj zMGtY|^yZ*UsX5r7w5W|m^FR=_b!%mfDwc7bz>B(y3;;y1&5%d z|M{_?@~QqD5t@K0A(;utZ2;fol3IJut0w*R;=fKK=f4&&6{BNN)tsSqi_8o$;zIHE zt+dx|fSUljPvTz${4I-Hr4*0K#J|y$r0$^qH>&8T_p7@@|Bqzy)lYuX-2cDG z{r}TT{y!%IyZ?{ZXj?#=#ec#@KT7)V=YRP~Px{Ybamiv})a!rl|Fc`^h8u1$|9@`s z|C7Vt)C%DLvjkl4|8quLWB=c;0ulFkAXE7%z@OeOq?(I>2z*KjG}C`P)%N2*VfoiK z{}=K9Q%_|V%>@?!AI>SXTsa4apAZnU0Pfi&8RP%0#Q)hXlj8peTl{}NuAdX)|7rc# z^q*6}?B@VFvHqLR|HaeG9asF5w9-nRJop-K_|Bod8|8`CMza;*-QTW*7 z|C|NTIR4+io%sJZ{6f%Fl?rnRK56T}pVH2(YKwpfEE56unSFMQQ;pA@=5+1rKbt>y z4_AIT?6AXz4I7s2|GC&Uf3pAQ+G|+_UR}7&IO)4dCD!f*!~~R0zN6*|HGEY_V@o#J@fyg z{_`s^%XHL~Sp-Bt1iDTj*Z-uM9yV!T|2cVz#QC%A|3B)eqgVnUkna2c5qV4ivj7%? zN!(p=<&~FR#{U0HnIN!C%r$c?_bc~dTdF%B*O=nVD_=xL2aY%xWtS7QNg;4XLxc?vHg*~FeT>0VdyYHSm zckX-d`I)~i_}u%0G#9X^zW;xW?f?IEr}qEb{?+OwfT&*D;Qhrfa{Zq*x_&5Cf(VF! z2rLr;*Z(|b!mSUX<-!MAzjzmY+E zlmDNaGi-#lCG7EIU5wQz)}7eb$Bw>!{ra;6iT&~=U_bwtH4859dH?gWGfF9F9&81{>mQz}E1{B#vJUUvPr zFWOH)F4Iv{W)Tnp5$HOBr2if>DKxVa`X5ew*@-9+63P^SjWnDEKokfQz%1b0^Ug!< zFT9WqK^Jkyc>%;&2>T=cM1EK=W~=0(haHCVzqg(IyZc~%LaTc6SMB0&IC<7L&tRC) zPyGKPeiF`~1;Q7;@P+&oFxFLxuB5i4C4jUA$d>>-1VrVjIg1xqD|P{m966Hf|6l^% zYjXXc_upTH_{Z!2+(=LhlXt=in)&}+1&9*?@TJ-I%q)N?I%feK8ZQCIEPykiI2V{-Q9&4S z__@O(oO$M1>=EK5S;U{~MI3(k;aq!RpM8V#zw40d#eXdL!ZY0A>N~ z1>#&_P6y*!K>zs1Ke*>wpbHi(m^Uw6|8vwGzxvfpEOUhGf1Y|&>H43vB3=K}PX4X_ z1WX>hN{hep|Cgid>LVf`0$n74{^Nooq^|!-GaKr^TLi@4lj}e0z-*);3WNz@7C<0~ zwE*OlpbCQTiL--IepXtKJ@#0nGKfDHf8Kx3J@?vm2v`1z&c9v!GyHxcp0i*4(=YyG zzyDJG3B}xhMnWNw^gnNow}p5ShJ)Bk9s*)Vx1R;f6o3#GmI#x?`UTgfzyvT0AP~gH z{`%|xPx9;k|Ni%!*l^{QT>t+EcK!chcK!do)Aj$^`Op4UOqeyH!S(-($xB@PrOwj- zE_P#mTm(d5IS9C5`V;{FA8GQi3CpY{|9_QLR>}3BGhEn3i3`mt0DD0(0n7r3rLY#j zaxhkapbD-&wtzbxBa&z=o;D|Z9eB_|g#G!M`0(Q|cG(9a|NXb!-d29?vdL-ZCl~+U zApU-05j;u3pCW!9PLMC@Kg~(g8RiSvvJ?XHT|mAH%;}u00#JWn#XjbkV=w{C0tf`L zX9@S79YG^Ujk@zr`~5F|1&m8W|1SLg7gseR>~sG47a;yDWE^(b;n*^^FtLP9LpVvu zul&PVM4b0xKVe*R@#mUf_wdDECNIlz?DP>45CIYB3V~ez(M;EW4*`|*KRw0y$A2b- z&Mq3x-(({V63SjsRCK@n_Q#iIB7ldF)H59zI@Esrm&aTi4dp-h;Dh%+-~cX?hUZW0 zg=@Zr$PbtOu*5~-xGqq-iUq#~%%)bZV#lHeu`MoP zhfzcPX*E~FV-_=Dz(D&6Gc#fC{1;dLBj5#49>sp{PCSL<(;2Y8wsW1tFOL# zX$p`cTBTKBKM{ac04^+m6{8893*aUI`$e5GRm@fhUSS283$TREc2;(-a);~_AYxsE z1&->)>-ODmcP?Iv`19lM{^JGV%;oBps|)8p?EDEU*JlXw zHvuUGlvaU#@f6RQODGULVcC~!VwT@Q9du@ElWx z!uyZs!l7RO^X7P4(kg&8WWx0wN#+ohMMz z|1c9dd=;QH1wjAP6d;)Z;wP8@{AaF? zhzVdVfaPE$)U5#ff>;!=69mxHka)-o$UbioBM5=V$W` zH|7UlHnPZ%Et~o|v*pOYJO8=Iyg7W95>i`yI^zvt7C|DdvU^YA^vv4ub;C}T=1XB)mP(>y5^C8>P%YJ1E>5VAOa%L zMFOt>^-&Ei{A%_wL=te%E``&1|=4QUCSX@VVAnT&*ZB zTf`HV-FUHVQPO{E-o@jnkBfi^h`_QE!1HWp3Xt4pobb{tAgu-PQyIP-;8p+$bwhwH zU{a70&v=Em$iS}zhM)G>0_7)Qg4=Iy^9CET+uy<_wc?-e`E>ov#s6QU{><%IkR7r_vyuw?& zPc9s0KEWnQl%JENaQoNq(UViX%ySOElY)5S`J4FHI?qA;Yy4**eE##FNB@%v@aB{z zHECTVnSiveK~O8V0?C{eO~7J>gsV?;ycMAd{FZn8U8){E`OPIJM{M=y_o=a!=@)53 z*uT7Hy~Y}L&M)=+`XrgY!?#X>UpY z8?@*v)eBtYlNw9_-)Iwou))=>Kx_*&wW&>NN>+dW#cF;{n;-JCUnFE6VQzo;g?AJG z@FQicIGFfb*xz=m)?2Q?KIs2yt1Z(}Q)Uqm0TJjrfz{)gQ@II1sYq%6q(@GC{nSl> z%cidgGZAnrz+3=5bn$dsfH_DB+rWz$2{Mq4yr!Hzdbryh#nU|J z|JyeK4V%M6AT@`!xD~MGP%}$Z(|@*F0TB>^Wg_7EpB&~=%%t7~c<`h&5x{vyHq(zz2k{K*X$o3R{yIK3 z;TB8=pWuT@Jh3UA5&wMU)Z-_#chyx_O(uXAd82rj)UZX#qUFs=My+ZHsHG*UY>EH= zyr?+iFJeB$Ny;^5t9HYGiu{0`s)oRo^naPUtul*%2y_F16f;jIfGCg$g4}0r z-vqd3ve7a5&xI{0tbyxgagTv8Gm&I}okBbtDZia6RU@HawwQmt_@kdt$o1b_)XW4l zn+UMhkmdq-@+50gm=s_RLNZh3iPw3XJhA2$?f2D+Mst?j^RG@@T>M@CF<#wpELDUE zh=2$z3xQ^8*^UWF`$Cgu+8JUYkRBw{0x2nB4m_n-JdcTIRX-8WZ*!&r-gvH`r9CrA z{7e2b&HdcxKGzu&kT)u=ZeV5d7F8P+PJ9b33vG)P<`vp&Q#ju4T23XozZNiB1qIjsmI)T9(YapxITbip(S zx=}(&Jwpif#87{({P{lr>ar=<$t*6FSrUKj7a&~!o0$Mx-VTAFJQifj8`+|8vI5>H zZx^<}9eY}rCwo2AxiDDYuyfOFwo+C8wBTEvv&5Pgdwu{;BQ22#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%) zfCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P 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

)9 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 z2ww+~y&!Tf=*xR_5HSQG009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_ z009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz z00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_< z0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb z2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$## zAOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U< z00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV= z5P$##AOHafKmY;|fB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHaf zKmY;|fB*y_009U<00Izz00bZa0SG_<0uX?}|KD!CG{<#R0RTQpc*PJN0TVFB9t6Y? z{E!q&i2-AtiDhJB1SA0iVl0hifixp##xf!VXHQjDY$#SN*5yy@l8#Sxw z>7*GkGc%J#pPU^vBj)GlN6jjC_S~qsPwrwGEyjHzjTUoWPNPM=tu%V*P*VP&-bd4D zG45k&^z7NQqh^&mlUZH9d^wArJU(hhY;JCjnpN)cOrywM8r>XGjGNV4%y})%E$ZD! zqeqS$88rtQ509GrtkENBw3u@ydF$4#(aqJ9AJ43+jx2gK(zhT3dTXOuFpAupX}lOWixzXvqD8$~w6OYjI&R_o zuQXb$(Ld8@vA%yxqeZ=cPNPNcAJS+s?r+m*G3Qs)Xi@KP(rED>Wfc|g;6Kvb;{DC) zE#~}}G`CpaOrywsEzK>)&8&(!|1Qlf>dhpJZ|vXG+~WJ3)mx1F*EF|Squ0}Dv7a-I zBKJ>eZZYm3(`Yg0%&MsO_i65U^x5QyDNopiqiOE=tS;1^u#2;4?zqO{ximViu~>V; zUZ_1`7nai}7xmVju;;ULp{Td^guR$qjqmnLwI}RSrcvZBr4^08DHpSPi#gYxu;;V$ zX#A_PP08 z+7tGCCRu!AYfspPtlnbW+7ov1^|Yd5KW7@n`qrMX7iv$~h0Lm`H#=b;h)MsYwM?4x zK$@$FceDC;}%-S}QSA1}m<@%{KgT%IWFhw-EM zaV*DAq8V3WB~~ZOYQ@!9i)*nSKaHQoMr=-$)s9YV#m}P~z39jF*q$isM*Jdn;+OGK z{3>3KU&qafvhKAq`^8^6FtxJL?Dg8s&DK<7>PDx#vD({e-e^x9c=b7$c}_P5QyhwTBmnvd%d^bY4=WUZ*OLko}V6S78lihsp?j@v$ecOySMnyJokJx&ip_s zTfxnp<&|o`beri=#q%4(p7DV?>+SyC2kh>$yT~VIre}w%-k6)YyDLu2%m>?|i~{|2|Y*4}J$fgZ^P` Xc;6s4xE}lt?;FOduHBzO&LH+5g9iXo literal 0 HcmV?d00001 diff --git a/platform/test_maps.pk3dir/maps/test_monitor.map b/platform/test_maps.pk3dir/maps/test_monitor.map new file mode 100644 index 00000000..70c10504 --- /dev/null +++ b/platform/test_maps.pk3dir/maps/test_monitor.map @@ -0,0 +1,251 @@ + +// entity 0 +{ +"classname" "worldspawn" +// brush 0 +{ +( 248 192 -64 ) ( 248 -192 -64 ) ( -264 192 -64 ) measure/floor [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 256 192 8 ) ( -256 192 8 ) ( 256 192 0 ) measure/floor [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 256 192 8 ) ( 256 192 0 ) ( 256 -192 8 ) measure/floor [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -256 -192 -128 ) ( 256 -192 -128 ) ( -256 192 -128 ) measure/floor [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -256 -192 0 ) ( -256 -192 8 ) ( 256 -192 0 ) measure/floor [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -256 -192 0 ) ( -256 192 0 ) ( -256 -192 8 ) measure/floor [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 1 +{ +( 248 192 192 ) ( 248 -192 192 ) ( -264 192 192 ) measure/floor [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 256 192 264 ) ( -256 192 264 ) ( 256 192 256 ) measure/floor [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 256 192 264 ) ( 256 192 256 ) ( 256 -192 264 ) measure/floor [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -256 -192 128 ) ( 256 -192 128 ) ( -256 192 128 ) measure/floor [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -256 -192 256 ) ( -256 -192 264 ) ( 256 -192 256 ) measure/floor [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -256 -192 256 ) ( -256 192 256 ) ( -256 -192 264 ) measure/floor [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 2 +{ +( 184 192 192 ) ( 184 -192 192 ) ( -328 192 192 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 192 192 264 ) ( -320 192 264 ) ( 192 192 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -256 192 8 ) ( -256 192 0 ) ( -256 -192 8 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -768 -192 -128 ) ( -256 -192 -128 ) ( -768 192 -128 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -320 -192 256 ) ( -320 -192 264 ) ( 192 -192 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -320 -192 256 ) ( -320 192 256 ) ( -320 -192 264 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 3 +{ +( 760 192 192 ) ( 760 -192 192 ) ( 248 192 192 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 768 192 264 ) ( 256 192 264 ) ( 768 192 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 320 192 8 ) ( 320 192 0 ) ( 320 -192 8 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -192 -192 -128 ) ( 320 -192 -128 ) ( -192 192 -128 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 256 -192 256 ) ( 256 -192 264 ) ( 768 -192 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 256 -192 256 ) ( 256 192 256 ) ( 256 -192 264 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 4 +{ +( 184 256 192 ) ( 184 -128 192 ) ( -328 256 192 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 192 256 264 ) ( -320 256 264 ) ( 192 256 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 320 544 8 ) ( 320 544 0 ) ( 320 160 8 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -768 -128 -128 ) ( -256 -128 -128 ) ( -768 256 -128 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 272 192 256 ) ( 272 192 264 ) ( 784 192 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -320 -128 256 ) ( -320 256 256 ) ( -320 -128 264 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 5 +{ +( 184 -192 192 ) ( 184 -576 192 ) ( -328 -192 192 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 320 96 8 ) ( 320 96 0 ) ( 320 -288 8 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 272 -320 256 ) ( 272 -320 264 ) ( 784 -320 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -56 -104 128 ) ( 80 -472 128 ) ( 80 -104 128 ) measure/wall64a [ 1 0 0 48 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +} +// brush 6 +{ +( 192 -192 264 ) ( -320 -192 264 ) ( 192 -192 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 272 -320 256 ) ( 272 -320 264 ) ( 784 -320 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -320 -576 256 ) ( -320 -192 256 ) ( -320 -576 264 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( 80 -104 128 ) ( 80 -472 128 ) ( -56 -104 128 ) NULL [ 1 0 0 48 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -72 -472 -128 ) ( 64 -472 -128 ) ( -72 -104 -128 ) NULL [ 1 0 0 16 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( 320 -464 192 ) ( 320 -96 -128 ) ( 320 -464 -128 ) measure/wall64a [ 0 1 0 112 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 7 +{ +( -776 704 -64 ) ( -776 320 -64 ) ( -1288 704 -64 ) measure/floor [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -768 704 8 ) ( -1280 704 8 ) ( -768 704 0 ) measure/floor [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -768 704 8 ) ( -768 704 0 ) ( -768 320 8 ) measure/floor [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1280 320 -128 ) ( -768 320 -128 ) ( -1280 704 -128 ) measure/floor [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -1280 320 0 ) ( -1280 320 8 ) ( -768 320 0 ) measure/floor [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1280 320 0 ) ( -1280 704 0 ) ( -1280 320 8 ) measure/floor [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 8 +{ +( -776 704 192 ) ( -776 320 192 ) ( -1288 704 192 ) measure/floor [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -768 704 264 ) ( -1280 704 264 ) ( -768 704 256 ) measure/floor [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -768 704 264 ) ( -768 704 256 ) ( -768 320 264 ) measure/floor [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1280 320 128 ) ( -768 320 128 ) ( -1280 704 128 ) measure/floor [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -1280 320 256 ) ( -1280 320 264 ) ( -768 320 256 ) measure/floor [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1280 320 256 ) ( -1280 704 256 ) ( -1280 320 264 ) measure/floor [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 9 +{ +( -840 704 192 ) ( -840 320 192 ) ( -1352 704 192 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -832 704 264 ) ( -1344 704 264 ) ( -832 704 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1280 704 8 ) ( -1280 704 0 ) ( -1280 320 8 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1792 320 -128 ) ( -1280 320 -128 ) ( -1792 704 -128 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -1344 320 256 ) ( -1344 320 264 ) ( -832 320 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1344 320 256 ) ( -1344 704 256 ) ( -1344 320 264 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 10 +{ +( -264 704 192 ) ( -264 320 192 ) ( -776 704 192 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -256 704 264 ) ( -768 704 264 ) ( -256 704 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -704 704 8 ) ( -704 704 0 ) ( -704 320 8 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1216 320 -128 ) ( -704 320 -128 ) ( -1216 704 -128 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -768 320 256 ) ( -768 320 264 ) ( -256 320 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -768 320 256 ) ( -768 704 256 ) ( -768 320 264 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 11 +{ +( -840 768 192 ) ( -840 384 192 ) ( -1352 768 192 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -832 768 264 ) ( -1344 768 264 ) ( -832 768 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -704 1056 8 ) ( -704 1056 0 ) ( -704 672 8 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1792 384 -128 ) ( -1280 384 -128 ) ( -1792 768 -128 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -752 704 256 ) ( -752 704 264 ) ( -240 704 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1344 384 256 ) ( -1344 768 256 ) ( -1344 384 264 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 12 +{ +( -832 320 264 ) ( -1344 320 264 ) ( -832 320 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -752 192 256 ) ( -752 192 264 ) ( -240 192 256 ) measure/wall128gr [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1344 -64 256 ) ( -1344 320 256 ) ( -1344 -64 264 ) measure/wall128gr [ 0 1 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -944 408 128 ) ( -944 40 128 ) ( -1080 408 128 ) NULL [ 1 0 0 48 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -1096 40 -128 ) ( -960 40 -128 ) ( -1096 408 -128 ) NULL [ 1 0 0 16 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -704 48 192 ) ( -704 416 -128 ) ( -704 48 -128 ) measure/wall64a [ 0 1 0 112 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +// brush 13 +{ +( -1096 520 -24 ) ( -1096 504 -24 ) ( -1112 520 -24 ) measure/desk [ -0.0000000437 1 0 127.9999847412 ] [ 1 0.0000000437 0 24.0000305176 ] -90 0.5 0.4999999702 0 0 0 +( -1128 576 -56 ) ( -1144 576 -56 ) ( -1128 576 -64 ) measure/counter [ 1 0 0 32 ] [ -0 -0 -1 32 ] -0 0.5 0.4999999702 0 0 0 +( -1120 504 -56 ) ( -1120 504 -64 ) ( -1120 488 -56 ) measure/counter [ 0 1 0 32 ] [ -0 -0 -1 32 ] -0 0.5 0.4999999702 0 0 0 +( -1120 504 -64 ) ( -1104 504 -64 ) ( -1120 520 -64 ) measure/counter [ 1 0 0 32 ] [ -0 -1 -0 32 ] -0 0.5 0.4999999702 0 0 0 +( -1136 448 -64 ) ( -1136 448 -56 ) ( -1120 448 -64 ) measure/counter [ 1 0 0 32 ] [ -0 -0 -1 32 ] -0 0.5 0.4999999702 0 0 0 +( -1152 464 -64 ) ( -1152 480 -64 ) ( -1152 464 -56 ) measure/counter [ 0 1 0 32 ] [ -0 -0 -1 32 ] -0 0.5 0.4999999702 0 0 0 +} +} +// entity 1 +{ +"classname" "dynamic_light" +"origin" "192.000000 128.000000 64.000000" +"targetname" "foobar1" +"style" "1" +"_light" "255 255 255" +"brightness" "250" +"ignorepvs" "1" +} +// entity 2 +{ +"classname" "dynamic_light" +"origin" "192.000000 -128.000000 64.000000" +"targetname" "foobar2" +"style" "2" +"_light" "255 0 0" +"brightness" "250" +"ignorepvs" "1" +} +// entity 3 +{ +"classname" "prop_dynamic" +"origin" "160.000000 0.000000 0.000000" +"model" "models/logos/visions.vvm" +"angles" "0 -90 0" +"avelocity" "0 90 0" +"shadows" "1" +"ignorepvs" "1" +} +// entity 4 +{ +"classname" "point_camera" +"origin" "0.000000 0.000000 0.000000" +"targetname" "my_camera" +"FOV" "60" +} +// entity 5 +{ +"classname" "light" +"origin" "-1024.000000 512.000000 64.000000" +"light" "300" +} +// entity 6 +{ +"classname" "info_player_start" +"origin" "-1024.000000 512.000000 -16.000000" +} +// entity 7 +{ +"classname" "info_player_deathmatch" +"origin" "-1024.000000 512.000000 -16.000000" +} +// entity 8 +{ +"classname" "func_button" +"target" "monitor_one" +// brush 0 +{ +( -1128 520 -16 ) ( -1128 504 -16 ) ( -1144 520 -16 ) measure/wall64a [ 1 0 0 96 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -1128 520 -16 ) ( -1144 520 -16 ) ( -1128 520 -56 ) measure/wall64a [ 1 0 0 96 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1128 520 -16 ) ( -1128 520 -56 ) ( -1128 504 -16 ) measure/wall64a [ 0 1 0 48 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1144 504 -24 ) ( -1128 504 -24 ) ( -1144 520 -24 ) measure/wall64a [ 1 0 0 96 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -1144 504 -56 ) ( -1144 504 -16 ) ( -1128 504 -56 ) measure/wall64a [ 1 0 0 96 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -1144 504 -56 ) ( -1144 520 -56 ) ( -1144 504 -16 ) measure/wall64a [ 0 1 0 48 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +} +} +// entity 9 +{ +"classname" "func_monitor" +"targetname" "monitor_one" +"target" "my_camera" +// brush 0 +{ +( -800 576 64 ) ( -800 448 64 ) ( -824 576 64 ) measure/wall64a [ 1 0 0 48 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -808 576 -8 ) ( -832 576 -8 ) ( -808 576 -16 ) measure/wall64a [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -808 576 -40 ) ( -808 576 -48 ) ( -808 448 -40 ) measure/wall64a [ 0 1 0 0 ] [ -0 -0 -1 64 ] -0 0.5 0.5 0 0 0 +( -832 448 -32 ) ( -808 448 -32 ) ( -832 576 -32 ) measure/wall64a [ 1 0 0 0 ] [ -0 -1 -0 0 ] -0 0.5 0.5 0 0 0 +( -832 448 -16 ) ( -832 448 -8 ) ( -808 448 -16 ) measure/wall64a [ 1 0 0 0 ] [ -0 -0 -1 0 ] -0 0.5 0.5 0 0 0 +( -832 448 -16 ) ( -832 576 -16 ) ( -832 448 -8 ) measure/rtsurface [ 0 1 0 160.0002441406 ] [ -0 -0 -1 159.9999847412 ] -0 -0.400000006 0.4000000358 0 0 0 +} +// brush 1 +{ +patchDef3 +{ +measure/rtsurface +( 9 3 0 0 0 0 0 ) +( +( ( -943.4256591797 673.0717773438 -32 -0 1 ) ( -943.4256591797 673.0717773438 16 -0 0.5 ) ( -943.4256591797 673.0717773438 64 -0 0 ) ) +( ( -925.5692138672 672 -32 -0.125 1 ) ( -925.5692138672 672 16 -0.125 0.5 ) ( -925.5692138672 672 64 -0.125 0 ) ) +( ( -909.7128295898 667.4641113281 -32 -0.25 1 ) ( -909.7128295898 667.4641113281 16 -0.25 0.5 ) ( -909.7128295898 667.4641113281 64 -0.25 0 ) ) +( ( -893.8563842773 662.9282226562 -32 -0.375 1 ) ( -893.8563842773 662.9282226562 16 -0.375 0.5 ) ( -893.8563842773 662.9282226562 64 -0.375 0 ) ) +( ( -880 654.9282226562 -32 -0.5 1 ) ( -880 654.9282226562 16 -0.5 0.5 ) ( -880 654.9282226562 64 -0.5 0 ) ) +( ( -866.1436157227 646.9282226562 -32 -0.625 1 ) ( -866.1436157227 646.9282226562 16 -0.625 0.5 ) ( -866.1436157227 646.9282226562 64 -0.625 0 ) ) +( ( -854.2871704102 635.4641113281 -32 -0.75 1 ) ( -854.2871704102 635.4641113281 16 -0.75 0.5 ) ( -854.2871704102 635.4641113281 64 -0.75 0 ) ) +( ( -842.4307861328 624 -32 -0.875 1 ) ( -842.4307861328 624 16 -0.875 0.5 ) ( -842.4307861328 624 64 -0.875 0 ) ) +( ( -832.5744018555 609.0717773438 -32 -1 1 ) ( -832.5744018555 609.0717773438 16 -1 0.5 ) ( -832.5744018555 609.0717773438 64 -1 0 ) ) +) +} +} +// brush 2 +{ +patchDef3 +{ +measure/rtsurface +( 9 3 0 0 0 0 0 ) +( +( ( -943.4256591797 350.9281921387 64 -0 0 ) ( -943.4256591797 350.9281921387 16 -0 0.5 ) ( -943.4256591797 350.9281921387 -32 -0 1 ) ) +( ( -925.5692138672 352 64 -0.125 0 ) ( -925.5692138672 352 16 -0.125 0.5 ) ( -925.5692138672 352 -32 -0.125 1 ) ) +( ( -909.7128295898 356.5358886719 64 -0.25 0 ) ( -909.7128295898 356.5358886719 16 -0.25 0.5 ) ( -909.7128295898 356.5358886719 -32 -0.25 1 ) ) +( ( -893.8563842773 361.0718078613 64 -0.375 0 ) ( -893.8563842773 361.0718078613 16 -0.375 0.5 ) ( -893.8563842773 361.0718078613 -32 -0.375 1 ) ) +( ( -880 369.0718078613 64 -0.5 0 ) ( -880 369.0718078613 16 -0.5 0.5 ) ( -880 369.0718078613 -32 -0.5 1 ) ) +( ( -866.1436157227 377.0718078613 64 -0.625 0 ) ( -866.1436157227 377.0718078613 16 -0.625 0.5 ) ( -866.1436157227 377.0718078613 -32 -0.625 1 ) ) +( ( -854.2871704102 388.5358886719 64 -0.75 0 ) ( -854.2871704102 388.5358886719 16 -0.75 0.5 ) ( -854.2871704102 388.5358886719 -32 -0.75 1 ) ) +( ( -842.4307861328 400 64 -0.875 0 ) ( -842.4307861328 400 16 -0.875 0.5 ) ( -842.4307861328 400 -32 -0.875 1 ) ) +( ( -832.5744018555 414.9281921387 64 -1 0 ) ( -832.5744018555 414.9281921387 16 -1 0.5 ) ( -832.5744018555 414.9281921387 -32 -1 1 ) ) +) +} +} +} diff --git a/platform/test_maps.pk3dir/textures/measure/rtsurface.mat b/platform/test_maps.pk3dir/textures/measure/rtsurface.mat new file mode 100644 index 00000000..45aa5606 --- /dev/null +++ b/platform/test_maps.pk3dir/textures/measure/rtsurface.mat @@ -0,0 +1,8 @@ +// Vera Visions Material +{ + qer_editorimage "textures/measure/rtsurface.tga" + + { + map $rt:base + } +} diff --git a/platform/test_maps.pk3dir/textures/measure/rtsurface.tga b/platform/test_maps.pk3dir/textures/measure/rtsurface.tga new file mode 100644 index 0000000000000000000000000000000000000000..9214fb5a88b3f58102ca78c18f7ebc335d08eced GIT binary patch literal 78219 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 + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/*QUAKED point_camera (1 0 0) (-8 -8 -8) (8 8 8) PCAMFL_STARTOFF +"targetname" Name +"FOV" Field of view in degrees +"UseScreenAspectRatio" Forces the aspect ratio to be the same as the game (?) +"fogEnable" Enable fog in the camera's view +"fogColor" Color of the fog in RGB255 +"fogStart" Near fog plane +"fogEnd" Far fog plane + +Inputs: +"ChangeFOV" Change the camera's field of view +"SetOnAndTurnOthersOff" Turn this camera on while deactivating all others +"SetOn" Turn this camera on +"SetOff" Turn this camera off + +A virtual camera of which its output can be displayed on a rendertarget. +This plays well with the func_monitor entity. + +Trivia: +This entity was introduced in Half-Life 2 (2004). +*/ + +class point_camera:CBaseTrigger +{ + float m_flFOV; + int m_iUseSAR; + int m_iUseFog; + vector m_vecFogColor; + float m_flFogStart; + float m_flFogEnd; + + void(void) point_camera; + + virtual void(entity,string,string) Input; + virtual void(string,string) SpawnKey; + virtual void(void) Respawn; +}; + +void +point_camera::Input(entity eAct, string strInput, string strData) +{ + switch (strInput) { + case "ChangeFOV": + m_flFOV = stof(strInput); + break; + case "SetOnAndTurnOthersOff": + for (point_camera e = world; e = find(e, ::classname, "point_camera");) + e.m_iValue = FALSE; + + m_iValue = TRUE; + break; + case "SetOn": + m_iValue = TRUE; + break; + case "SetOff": + m_iValue = FALSE; + break; + default: + CBaseTrigger::Input(eAct, strInput, strData); + } +} + +void +point_camera::SpawnKey(string strKey, string strValue) +{ + switch (strKey) { + case "FOV": + m_flFOV = stof(strValue); + break; + case "UseScreenAspectRatio": + m_iUseSAR = stoi(strValue); + break; + case "fogEnable": + m_iUseFog = stoi(strValue); + break; + case "fogColor": + m_vecFogColor = stov(strValue); + break; + case "fogStart": + m_flFogStart = stof(strValue); + break; + case "fogEnd": + m_flFogEnd = stof(strValue); + break; + default: + CBaseTrigger::SpawnKey(strKey, strValue); + } +} + +void +point_camera::Respawn(void) +{ + SetModelindex(0); + SetSolid(SOLID_NOT); + SetSize([-16,-16,-16], [16,16,16]); + SetOrigin(m_oldOrigin); + SetAngles(m_oldAngle); + m_iValue = TRUE; +} + +void +point_camera::point_camera(void) +{ + m_flFOV = 90; + + CBaseTrigger::CBaseTrigger(); +} diff --git a/src/gs-entbase/shared.src b/src/gs-entbase/shared.src index d822a133..9f47e09f 100644 --- a/src/gs-entbase/shared.src +++ b/src/gs-entbase/shared.src @@ -8,6 +8,7 @@ shared/spraylogo.cpp shared/func_friction.cpp shared/env_projectedtexture.cpp shared/light_dynamic.cpp +shared/func_monitor.cpp shared/trigger_camera.cpp shared/trigger_gravity.cpp shared/info_particle_system.cpp diff --git a/src/gs-entbase/shared/func_monitor.cpp b/src/gs-entbase/shared/func_monitor.cpp new file mode 100644 index 00000000..16a32b6d --- /dev/null +++ b/src/gs-entbase/shared/func_monitor.cpp @@ -0,0 +1,347 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/*QUAKED func_monitor (0 .5 .8) ? +"targetname" Name +"target" Camera it's linked to + +Inputs: +"Enable" Turns the monitor on +"Disable" Turns the monitor on. +"Toggle" Toggles the state of the monitor between on and off + +A monitor that renders the view of a linked point_camera entity. + +Trivia: +This entity was introduced in Half-Life 2 (2004). +*/ + +#ifdef CLIENT +int g_iRenderTargetActive; +float g_flRenderTargetFOV; +vector g_iRenderTargetSize; +vector g_vecRenderTargetPos; +vector g_vecRenderTargetAngles; + +void +RenderTarget_Monitor_Update(void) +{ + if (!g_iRenderTargetActive) { + return; + } + + clearscene(); + setviewprop(VF_RT_DESTCOLOUR, "base", 1, g_iRenderTargetSize); + setviewprop(VF_SIZE, g_iRenderTargetSize); + setviewprop(VF_DRAWENGINESBAR, 0); + setviewprop(VF_ORIGIN, g_vecRenderTargetPos); + setviewprop(VF_ANGLES, g_vecRenderTargetAngles); + setviewprop(VF_AFOV, g_flRenderTargetFOV); + + /* TODO: This is ideally where fog parms should be set... :/ */ + + addentities(MASK_ENGINE); + renderscene(); + setviewprop(VF_RT_DESTCOLOUR, __NULL__); +} +#endif + +enumflags +{ + MONITORFL_CHANGED_BASE, + MONITORFL_CHANGED_ORIGIN, + MONITORFL_CHANGED_ANGLES, + MONITORFL_CHANGED_FOV, + MONITORFL_CHANGED_ASPECT, + MONITORFL_CHANGED_FOGCOLOR, + MONITORFL_CHANGED_FOGSTART, + MONITORFL_CHANGED_FOGEND, + MONITORFL_CHANGED_STATUS +}; + +#ifdef CLIENT +class func_monitor +#else +class func_monitor:CBaseTrigger +#endif +{ + /* these mirror the fields of a point_camera */ + vector m_vecCamOrigin; + vector m_vecCamAngles; + int m_iCamValue; + float m_flFOV; + int m_iUseSAR; + int m_iUseFog; + vector m_vecFogColor; + float m_flFogStart; + float m_flFogEnd; + + void(void) func_monitor; + +#ifdef CLIENT + int m_iValue; + + virtual void(float) ReceiveEntity; +#else + virtual void(void) Respawn; + virtual void(void) ParentUpdate; + virtual float(entity, float) SendEntity; + virtual void(string, string) SpawnKey; + virtual void(entity, int) Trigger; + virtual void(entity, string, string) Input; +#endif +}; + +#ifdef CLIENT +void +func_monitor::ReceiveEntity(float flFlags) +{ + if (flFlags & MONITORFL_CHANGED_ORIGIN) { + modelindex = readfloat(); + origin[0] = readcoord(); + origin[1] = readcoord(); + origin[2] = readcoord(); + } + + if (flFlags & MONITORFL_CHANGED_ORIGIN) { + m_vecCamOrigin[0] = readcoord(); + m_vecCamOrigin[1] = readcoord(); + m_vecCamOrigin[2] = readcoord(); + } + + if (flFlags & MONITORFL_CHANGED_ANGLES) { + m_vecCamAngles[0] = readfloat(); + m_vecCamAngles[1] = readfloat(); + m_vecCamAngles[2] = readfloat(); + } + + if (flFlags & MONITORFL_CHANGED_FOV) + m_flFOV = readbyte(); + + if (flFlags & MONITORFL_CHANGED_ASPECT) + m_iUseSAR = readbyte(); + + if (flFlags & MONITORFL_CHANGED_FOGCOLOR) { + m_vecFogColor[0] = readbyte(); + m_vecFogColor[1] = readbyte(); + m_vecFogColor[2] = readbyte(); + } + + if (flFlags & MONITORFL_CHANGED_FOGSTART) + m_flFogStart = readshort(); + + if (flFlags & MONITORFL_CHANGED_FOGEND) + m_flFogEnd = readshort(); + + if (flFlags & MONITORFL_CHANGED_STATUS) + m_iValue = readbyte(); + + classname = "func_monitor"; + + solid = SOLID_BSP; + movetype = MOVETYPE_NONE; + setorigin(this, origin); + setsize(this, mins, maxs); + + g_iRenderTargetActive = m_iValue; + + if (!m_iValue) { + return; + } + + g_flRenderTargetFOV = m_flFOV; + g_iRenderTargetSize = [320, 240]; + g_vecRenderTargetPos = m_vecCamOrigin; + g_vecRenderTargetAngles = m_vecCamAngles; +} +#else +float +func_monitor::SendEntity(entity ePVSEnt, float flFlags) +{ + WriteByte(MSG_ENTITY, ENT_MONITOR); + WriteFloat(MSG_ENTITY, flFlags); + + if (flFlags & MONITORFL_CHANGED_BASE) { + WriteFloat(MSG_ENTITY, modelindex); + WriteCoord(MSG_ENTITY, origin[0]); + WriteCoord(MSG_ENTITY, origin[0]); + WriteCoord(MSG_ENTITY, origin[0]); + } + + if (flFlags & MONITORFL_CHANGED_ORIGIN) { + WriteCoord(MSG_ENTITY, m_vecCamOrigin[0]); + WriteCoord(MSG_ENTITY, m_vecCamOrigin[1]); + WriteCoord(MSG_ENTITY, m_vecCamOrigin[2]); + } + + if (flFlags & MONITORFL_CHANGED_ANGLES) { + WriteFloat(MSG_ENTITY, m_vecCamAngles[0]); + WriteFloat(MSG_ENTITY, m_vecCamAngles[1]); + WriteFloat(MSG_ENTITY, m_vecCamAngles[2]); + } + + if (flFlags & MONITORFL_CHANGED_FOV) + WriteByte(MSG_ENTITY, m_flFOV); + + if (flFlags & MONITORFL_CHANGED_ASPECT) + WriteByte(MSG_ENTITY, m_iUseSAR); + + if (flFlags & MONITORFL_CHANGED_FOGCOLOR) { + WriteByte(MSG_ENTITY, m_vecFogColor[0]); + WriteByte(MSG_ENTITY, m_vecFogColor[1]); + WriteByte(MSG_ENTITY, m_vecFogColor[2]); + } + + if (flFlags & MONITORFL_CHANGED_FOGSTART) + WriteShort(MSG_ENTITY, m_flFogStart); + + if (flFlags & MONITORFL_CHANGED_FOGEND) + WriteShort(MSG_ENTITY, m_flFogEnd); + + if (flFlags & MONITORFL_CHANGED_STATUS) + WriteByte(MSG_ENTITY, m_iValue); + + return TRUE; +} + +void +func_monitor::ParentUpdate(void) +{ + if (net_origin != origin) { + net_origin = origin; + SendFlags |= MONITORFL_CHANGED_BASE; + } + + if (m_parent) { + entity p = find(world, ::targetname, m_parent); + + if (p) + SetOrigin(p.origin); + } + + /* this monitor is disabled */ + if (!m_iValue) + return; + + point_camera viewer; + viewer = (point_camera)find(world, ::targetname, target); + + if (!viewer) + return; + + /* camera is disabled */ + if (!viewer.m_iValue) + return; + + if (m_vecCamOrigin != viewer.origin) { + m_vecCamOrigin = viewer.origin; + SendFlags |= MONITORFL_CHANGED_ORIGIN; + } + if (m_vecCamAngles != viewer.angles) { + m_vecCamAngles = viewer.angles; + SendFlags |= MONITORFL_CHANGED_ANGLES; + } + if (m_flFOV != viewer.m_flFOV) { + m_flFOV = viewer.m_flFOV; + SendFlags |= MONITORFL_CHANGED_FOV; + } + if (m_iUseSAR != viewer.m_iUseSAR) { + m_iUseSAR = viewer.m_iUseSAR; + SendFlags |= MONITORFL_CHANGED_ASPECT; + } + if (m_vecFogColor != viewer.m_vecFogColor) { + m_vecFogColor = viewer.m_vecFogColor; + SendFlags |= MONITORFL_CHANGED_FOGCOLOR; + } + if (m_flFogStart != viewer.m_flFogStart) { + m_flFogStart = viewer.m_flFogStart; + SendFlags |= MONITORFL_CHANGED_FOGSTART; + } + if (m_flFogEnd != viewer.m_flFogEnd) { + m_flFogEnd = viewer.m_flFogEnd; + SendFlags |= MONITORFL_CHANGED_FOGEND; + } + if (m_flFogEnd != viewer.m_flFogEnd) { + m_flFogEnd = viewer.m_flFogEnd; + SendFlags |= MONITORFL_CHANGED_STATUS; + } +} + +void +func_monitor::Trigger(entity act, int state) +{ + switch (state) { + case TRIG_OFF: + m_iValue = 0; + break; + case TRIG_ON: + m_iValue = 1; + break; + default: + m_iValue = 1 - m_iValue; + } + + SendFlags |= MONITORFL_CHANGED_STATUS; +} + +void +func_monitor::Input(entity eAct, string strInput, string strData) +{ + switch (strInput) { + case "Enable": + Trigger(eAct, TRIG_ON); + break; + case "Disable": + Trigger(eAct, TRIG_OFF); + break; + case "Toggle": + Trigger(eAct, TRIG_TOGGLE); + break; + default: + CBaseTrigger::Input(eAct, strInput, strData); + } +} + +void +func_monitor::SpawnKey(string strKey, string strValue) +{ + switch (strKey) { + default: + CBaseTrigger::SpawnKey(strKey, strValue); + } +} + +void +func_monitor::Respawn(void) +{ + SetSolid(SOLID_BSP); + SetMovetype(MOVETYPE_NONE); + SetOrigin(m_oldOrigin); + SetAngles(m_oldAngle); + SetModel(m_oldModel); + m_iValue = TRUE; +} +#endif + +void +func_monitor::func_monitor(void) +{ +#ifdef CLIENT + drawmask = MASK_ENGINE; +#elif SERVER + CBaseTrigger::CBaseTrigger(); +#endif +} diff --git a/src/shared/entities.h b/src/shared/entities.h index a937436b..10f3f895 100644 --- a/src/shared/entities.h +++ b/src/shared/entities.h @@ -28,6 +28,7 @@ enum ENT_SPRAY, ENT_DECAL, ENT_OLDCAMERA, + ENT_MONITOR, ENT_SEPARATOR };