From bc9ff320236255b50e5087457ec0780f06a43133 Mon Sep 17 00:00:00 2001 From: Regalis Date: Mon, 4 Jan 2016 01:03:37 +0200 Subject: [PATCH] New pump & railguncont sprites, saving fixes (disappearing items fixed?), moving LightManager.ViewPos to railgun when aiming, generating waypoints outside sub, easier wire node editing, characters stand when using a controller, shiftsummary crew status scrolling, stuff --- Subsurface/Content/Items/Pump/pump.png | Bin 13480 -> 16417 bytes Subsurface/Content/Items/Weapons/railgun.xml | 8 +-- .../Items/Weapons/railguncontroller.png | Bin 1308 -> 8923 bytes Subsurface/Content/UI/style.xml | 2 +- Subsurface/Source/Characters/AI/PathFinder.cs | 2 +- .../Animation/HumanoidAnimController.cs | 1 + Subsurface/Source/Characters/Character.cs | 36 +++++++++--- Subsurface/Source/GUI/GUI.cs | 7 +++ Subsurface/Source/GUI/GUIListBox.cs | 43 ++++++++++----- Subsurface/Source/GameSession/ShiftSummary.cs | 43 ++++++++------- .../Items/Components/Machines/Controller.cs | 19 +++++-- .../Source/Items/Components/Machines/Radar.cs | 2 +- .../Source/Items/Components/Signal/Wire.cs | 33 +++++++---- Subsurface/Source/Items/Components/Turret.cs | 2 +- Subsurface/Source/Map/Lights/LightManager.cs | 15 +++-- Subsurface/Source/Map/MapEntity.cs | 17 +++--- Subsurface/Source/Map/SubmarineBody.cs | 2 +- Subsurface/Source/Map/WayPoint.cs | 52 +++++++++++++++++- Subsurface/Source/PlayerInput.cs | 5 ++ Subsurface/Source/Screens/EditMapScreen.cs | 21 +++++-- Subsurface/Source/Screens/GameScreen.cs | 16 +++--- Subsurface/Source/Screens/LobbyScreen.cs | 2 +- Subsurface/Source/Screens/MainMenuScreen.cs | 10 ++++ Subsurface/Source/Screens/NetLobbyScreen.cs | 4 +- Subsurface/Source/Sounds/Sound.cs | 4 +- Subsurface/Source/Sounds/SoundPlayer.cs | 15 +---- Subsurface/Source/Utils/SaveUtil.cs | 42 ++++++++++---- Subsurface/readme.txt | 2 +- Subsurface_Solution.v12.suo | Bin 819200 -> 819200 bytes 29 files changed, 279 insertions(+), 126 deletions(-) diff --git a/Subsurface/Content/Items/Pump/pump.png b/Subsurface/Content/Items/Pump/pump.png index 8fe06b478739b199df3eabcb2df54063a0f479a6..8e7280aa3ca17f2656ad3b3e8f84132c4b1f5747 100644 GIT binary patch literal 16417 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 vwimHh)88{BP!@_p6OQZEx( literal 13480 zcmV;ZG*`=sP)(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd zMgRabE=fc|RCwC#eM^s}Ns`que|+~wW>wdtySl3S1rq!V!~y{lJH&cmxj{;NjyP{wQC^ixQF8pAZqGl;Bs*`v3lS|9Afy z|GrWRdhhZ7FZfx=Ib)0gA_6lb=L``6Gso*Q^9x_+dGA3)=wSoA!N-rj|0#$FfG%Xt z2}B9Z137095DP_#u+?e{IFM38vc;;kfKmdF5gW%B+!qZXq?{qb=zV}d*xL@G1R{W0 zz$_pFF8dCE009OMFf*71AONBp=>Puo=MPuFn|}DhQc9pib_xedDf+CTr=JM1*etB4 zkoC`P+W;aEfKrNm{XCeZR^(EUl5QL#0*?WKpw7|!7#Mx%sU|(;9tDU9qjx|A0$}uk z);a*#bpRxL554#J*?RK*I+)i2+oCh`LlSsTc>n+)XFa)N=!0d^KT9qU5wyL5i1fdd zVgY;;q@3Z0-tTd?2$3kE+a|~*Lzt0EK`j-+64!-p8rY`l`foHhlHdJADe{4b4e*8^ zqYqmI1_;PGf$f1OTWCGidJW_yF%%I%1f^uKC3meg4ez$7zL}~;kTsF>s{{ag@0M&@ zf|xW{@M}qgArNGHPw!d;ps(Y;yRHJ(?E86t_h{jNdiL%ay`OkkF5v$!%ZBo--xI{N zL=*q}db-!|U;oYD2QxoZ0dMm0H~+?8LrMv?7W}vW{=f0}{_fwgM2@g+o1I+2fBNJ9 zjDPZv{{c$LNGYR~jP0}m0Jd$zzx{Xr0srb>{xh7m%@$d3KA&*8?C`igc;H|En}3gg z@z4J$SoAcv-ZA>X7>qtT{^KA0G5*m%{QKy=0RUR-=)Gf%f&cPf{|El|-}>ti77S+m z&;Rv*9Iz;B_27p|OmSRKzG+eiR*V9adebGw*)6T(_6dh3BEjxkVj)^*JZ z!@_&YIVu9*agM#>2Qp+{Dq;LEc<{N5Uv8MSC6 z00H~HN20evx4wDCP$V!ViqbGyB=Lli?6i-;@tz0-5j>MDK5T&B_Zk4e5&BbrE&gzO zZ?nD^Mxr$o3kHwK(#gI*5goC8EA4vMs(>tt^wE)0MsFP~0_JhZ@_pg`YS1cS0HpcE zyHpB(eNeE4SCB83o;ETrEh7{`t=(%NvqK zp`5bcQF;a0Yx%~=OX>Kq0p2hP45DYb+mkIoDH#c~=6875PkL|N?(+%yz`!BD^Ghia z`g2b4b6f9VmdN~_C0xNH!Awg1eJ%;i!v?sI4`$XVkZ1T7$KZJ`q!T=T(gm6m^f6GY zRtvcl6oZr<+U=I{`w7*l&G=N&og)D589=HMMJn&1^WTXW7|+<_q%e9mWdF7#mFd1$VE30 zkD+AJA@f(D>0txh69A<5@CwN;Kns!9@kB^bpU;x5lpG6GPgRo&!Xc!yX##RiQTKyH z2`C~AOa8J^$%9Aa6Ji9CZ`gpPfrkxn9}ysXc*k6HS~7Ue-n;%?^whdYWQ;M%qNFu_ zA3bQ~loDEN5aR|MY+~WaGg>pCNfa2GxruHL2Y!H~5{VwzzV$GTB+$!Kl2GEFi4RTo%FIb`gw0R5R5G?Eic#Xtx_vOC8*bpa zfs#xKiIQ;-6D6#rf^rH-*rNs;Wc{w)|6eZ<#0K`HN$9wcQw5r{cIRQ7fkC#Ov3pp~ zB~Oi@T`{$4Vo0{p6dR}kCy&T2aL@*@fl#3}SVDfc4g0VG?x6}ucG6@KZ}?)Ak|QVZ zQ&@{Kd|Encg6L#WK)PK+erpZAcWkE(+qOZ(D+|O)E&=e&bIq;z#cYk7{m|8`i#-c8 zr;lCO;h@mk43dZ-(RCyiJvL(qIfR}LJf%b-Oi`HFu8yqqaOe*nHo%)jfO)6dsXH`@ zN|bv3k#jbQmJ�m4Rq?r;0=@M+mxk96=kB`SWwm5Ox7bAitA3UKB_1K8d1x>0txh zLlg*3-cP6Z3E&9E_=f4$tRb*W-9vsG0WI(Q9!z40O^nuUy}`*Jy%I7YlZKu@R3i6q zjKCw&%e)94Ho$8_!NP)-ZVgk2oDR8yCugOqk3jDOt@j{-C~4SFl!6edwT9NfPrR0O zssN&-sv_+#T(AQXSC>UHsoH=NpMSUl?&F260pnV8AN_yA0pYrA%T++0^c6Ra5Ix;2 z9QC|6mYhzf<@IxzN(i&v^%CV?DFtNW5it$IDoGO@0@K3=cyk;8QTlnd9YB$}cc|vC zTJlGzTaCryF|6Su*+xl`0DAt=S_8pK!!b||+<|Q%BtoqdNmK}0W}@jpkVueA4>`bn zYyiu$amct4bnxLJi$FjaqoeH&DW?eAUaE<;a(TF4IsRd#pe*;lvxLqMh;7KUY{Zn) z6$LEMG^adlfZy{YTWFoF-XpL8FS&xl*8>~1zJoSi8hRsXUpji%X46t@5JWJIVM_YC z{@4G!Gl#&B_3^VhJH=0rwFRVO97z>*op)9@;CwSEoH&i`W>$ z^n?vx3 z*tN1+QI0BH9l)?CNmOpkfW5*?*oXi~WkwXuudl zEc8oU5B?ru{J=v5c*70g8oju)Q$ool9()dto=wDwaP`zXzRVI3)66kv)eNSTu$?ws zE|<{uv3U$l|6e+`m@C$^^eASetE~UQD)t_)0bU*?FN<4BRR=FxY+Z~u2))1I2>N-e z*-aJ}J%wZH1rGj$0J156DJjAjqSSz&i&iLhRe{nwCkY4c(I_(KEUUlHwf#GwZQyJi z{#w$lMvn43RJp6G$o0SDD)C%@#`<-uk3x`6_~Z}VD7v+7LeLS{jb9bX zj3rkYTQ}75%b$Psa0R^T1_;~M1zU&AnjesG@zT)F@%M1(@Y2xAy4HF?y3YUCTJ@^1 zbJ<(Re%TL}vAwsWHqp!{N-pu9l$XfiAEZz+;?H;CI=I&yASho!2tDLEVVaGhQ>&M@ zY#`JACpCxYt)tX}-WB`zb}tb@Yi(W$S+Rn)??|?&fcO7T<*{!Bx1C>m1e{oM>e^e^ z9yY*hBz=MXi;6p3YV8PI5HIHLp|yMsN6=a;dha^z!>)(XXT#>On!WcP3Za-uFy^Qj zR|xx13ccScGW=;duhqkG`Up%O{%$0L_lyI`)ak`(!ZH~o$D(LAkM#uF2JksSez%w6 z6Fn#tK4PJ}_ilNF3P)hG1A@{O9~IMe<5)S##z!PdK!WuKm_3XDoqKHLhb!PUbAUO> zffj#W3jAL%@8nz*s~2|Lwr(Mr!X&ac^$+&4&(%e%S>!P7pwA}qrc*KOK}{gkc&d~M z7R3fNOkmjiaQ`BAGySG-g4ZqsQ%dp->bG10*Z+V0ZwEh~tN8%__v_ECCEBZ&jMwky zx(r;qgV(tQYYF+HcCqDa>7BR&h)Dc_eD>+L)qaIt=54inNzo1LOk6d$k3isz`>$0` zVaY{Fo1#sd&KJ~LF~-2QY4?vKh&uJdt{I*KBtUKwp$uV8SslV6lXs~X%&Oj?W;d=j z1+j`!M|c&sU8Uzbi)c2urUdYi7>r??g1&JPz<)k9kVm$K z@`dk46t#UfDY#O|(SEilkW{J$+hk1#RgDp^=lX$e&**1A|LU#U1kc?7L?oYn^075* zQY2>_7Vz`;BOnr{VysYHLwBirJ68@FfsQ#mA2;;mNk#Wr2s z<%SlnFtJ8~g4TAFQn0sXPUZ-6>J^*V_lv%N6SN4Mk(6k{nG#{&J8~wpHev$^rZ3VL zU;gr~*#z{QBuPH|^xKDI=h{XEw&*44-Ceg5z4_TTgBv?#gMyiD3Mi$RBC4z$A(uH% z&<&q*Dah6!(^Lf*9E}w3U3{clfSjVf1FGB{LF$ zKCHFeq~-2fKE^;MLL1|NI=)Sj;IILRNWS;^Cl*E>E=|#&Uuy+Hz~Y#`E;{)_nqb51 z0j8IaS+Kg0Q-z&5!nVGyYW7n}W+&%;IutyCYx{K&#Pkm;rRpNu*R%b+b?O)(F?mFr zO?`M&3$sd>vGoOIY$iir%_iMs0wNf~7;PLY3&R)QhD}hePyTA0w6=F=Q{mKF!kkGL zKcUuTIHPp~)mj35J8d;iD7-~`@d7M4Dz`i$}PN&H9QzD$t zC-l|>e`vkO^`rwSGD?{;^R#VIPL45j!b!?VgHf_3ySt61$!1Nf4&#i=rCIYTK{|je zmT!#U5kv%*L&;y{O;BD`77iB1 zx4eZ5NKP50%&8zbCk$q6HZkn+<3~C-$lAa>^qx*9FnA7#@HR5Lg1p@HT;g)Mpw_ya zUa_tuHIlAto|6cz>xL_~8AlAdMpQ$2X?(?703sbWKq7)Thdwx{TrbOX(K7&!tKnp7 zUZ;GMS+hBtr_ipOJK=y5y1Hi__~3bimX=kMHcH4zOEez}eLkNT!6}DdV1}SIm5M1` zTrtLuS_=9Y$eAFbdCKXu9W;p`K>|U@M5;*_RShI9df2mKnHvv@z}>Eeu)}#f$fUyt z&=G9oIPWjHR@X|j0+8f*Aik*DZeENTQBPX{J=(rH*`!TEHysbkY4kW9~2%w^ocquxiDMNYtm@%Zs$tJjS* zS`a-RI=s5^9s(0b`btjN_a0Z4Y73`vWelT)`wK|0hdC1z9TvRF+=+G3-+S*-7;E_Z zp=733gf~Vb4;#Q2-)rrLrf!IB(nRu-myf0r- zJp+gUYv{0uFet{%&QnhzF4<0}1N&D>LTk!8dI;X^I%=jRNR*Unw(BhCGkWhholoek zL9zrI=O5|SY2|L#XYs)Y z@0;qG;`?7`BOErs7>rUC-Ytt`hOV7{&gcIMBb+`?r;0Ij*Pl)&vwKfr#;90A4pePB zodQ51N*4ANh;dVh?WFI+a}j@?-aF3cv;N#|3-PD|M$_)aDP+&~MW%_A{%&j$0p>wm z^hzWkS}59n_N12Ln7})`4$?u%0ta<8>DQOew3sTDE=D6>x>)ItVCwWd*}k8TlBOUuT}D{yPmV3MaB3IU+-Ap-vD zU-`=i7xZ;9nZwu7x^7jHnq~D>hoOmQ*NEC$$B%#VMSTAA&p$=ZX0uN@e3CsHyl4}Y zE3t+_EL-q?LoU zcR7MLx}NM97cVfoSnCcp@4%QM#*E%oN8nz-r4oj@(zUkZd~?><6TyY|AeCqUcdaeG z0s0=jL%G(nbSJ3>A&(Sd*1-eW@&RO++c^dJ#e?;VB#O$Vl%l1jRX2WpUC&gcMB!%Q z6+zA!f9Xd*FxL~opZv*B007_p?zb&p5#&P8^iRAz2XH(-k@o7EeVS|Oirq14)TG(z z>AV>!gGfx0*}W!G&tEbxfMPPR>EEy8UtP(YQw}`=Gvnsw#-hSz@NzX$24NQM_<({$ zQ|{Fa7EVMMAiHjIU<`@^mN;p`Q=`y(N6tw@xmnIM=@IICYk@(y^qqW8!5D#VcJnTJ zbaNBhLqBLPZ>v&mV=+#r%{U1a%W7iY1EvN6sZ$VGj~?BGsP#ub{63f&Kl$mG`24f) zBBj~$@X?1Kyf6xstBfSnJ3|Iewd&oMeQb*+Pi(4N#n}a5ZQ|gtiMP_Fde^Tzb&*c( zw3hE-l(3_R?h%|z4lKgW8@8>Q@;3z;sjaVs{Ol$!_7YD4_cVPfh?LF%pJkw?-`{Q2n*_|8U|6Lt$RCFD^Y8J zO-d{Kw6LL3A|Xs4a>__GnfXLPYvW){xmwO&_B|>S5ysw{5kNh%>@heJydFa)X2f#g z>b^JBT5!3v$O3)Toy*?O=aWU$5`G5GksK^>Y;;aF4&(%2zg*A()M~njI|daBJjH*g zU+1+H-2^Y-B@P=v*oHRi1%?P~A+DO$MVfGiXaln4*#3>uWZ0r$p(Mb3yM6 zV1%Kh4~*zt(MXqyr<~9`<8-Q#SSoDGfhKz5x*L4k`>;j082gw(G;rEBbRH;%=mqRd zgmONCTEpla)i8i<+i-Vx3lW<_YP>;B6_;_DPA5j6vkj}zhyfjhU}Bg@kIo=U5pk|3 zm8_=O6W*St+K!kK5sG;tdXhZGK;ncZIy>QqKlmPg{F5*6{qKE-ee5=ZZ{WiZzx7NM zxWWOjv}Ud9Tg3fb>QwZWtn{e!>!;Jndig0>wwen{)-dioc`>%IlsX~cAb>Lc?t-(~ z>W;ytd z*((LP6zrFa!O+TMbaM#Frg03$&xj-c+~u-IHlB#E`*br_yhIbu1hTT(g|pf2`1js> ztWj~RA$;^XM_%Qua}$VEATz8d;^wBBTy2lx7LOj?VBZ@?*M&csSAw#l7f5F(2o4+c zrHvt~`en=1llAAzlvA;rFmtG9y?J8x{uj%B$nH=Mdsl~K>$X`~rkL#Ir~h<1#l|be z{eiMVqA4Bxh1EN-1Zd4RN?zLOq0`^#qmMo~08{D61t`GdmMkgd=+ATY4;!lHhD^*OoIC?#@7)BT z6dNQhxPm8gUi+p*#?@!Fbqj=zrXne4Y?de`+ws1zu0DcCqphl-!vr9@Aj3AYo(N&V zX7~hI``IdVIi2**7Got#E+Il;5wzYyQLNCp>H>Nsld{Z3Q0Fo&^K@0V(}wf;2B-5W ze2)OaqenO9iM(OkDsFDh0ixB#5j8JOusM5~TLX9lfFJ$n`}p$9Uj!icyoqRs4N&b~ z>#YYa%~q-nw%+?C;Sp=Q^68sC>~X7A6|{!$y9m?Uw1$;Hy{lQ2f;U^7Xa`<&u_*>k z4w*?Gv#3v?m64A4dDDnTo1Aq(v~%<-^hn`fq!<9lSetH}cknQUGnq12VmPG_rVNLY zWmX|Af)MXzaNNZ8kK0xcUEFQDDhNkI1Jo4jA60F%|ri0OtkWF zQby%uIqu?I7EfRsBj*AT-z+I*tse66&Lr#q7tE9FBWOjm0pxPo_4o4`1=gVI230xb z=rHbkiynvMSDIlaIi>J6@+;u!)7xlGYi(xaKJU=S;oaTd;d0rnMZU$o?(Qa~Wb8&x zt&>ysy@v*2^-lI^?~%s+5nn6_N!H+DPTM|b*Zb|sgb|9w0Sq>xW=uqDun8*|o84Qo zm_+WEJ@ABN4{LLuKq3qP`{fQdH=5--e&9WMurRuE4msrzZKOolTQ?wQj+%kN+$=Lf zc;s?GM}(KfpMHWglFchj$XPI0%UbP2Ob`sSyX{k(VA=uS82jBFurPKW{rVElJ%4!m z^cJNQJbn5!7QVF|d+X6CU+g8YmTfL9)8rr;hFJHDr@bx|O32|AqnO@}QqQ zd7|JCkAo$B&KXahJi)frg#^;vV2rL&$;RXQz|5z2cVT(&HaHMq?=93$cxLpCw#IoB zdMOkf?b0lV9(ncfrwFMWchGeFR+nze>YLK9dWy4=797&a|J0+FeJHEi;MitXl6)JG40BX>1V$&^ET z3-U;>3j&n_v7d8ydkZAO`E-isx#mB=`OW1pylQ0xn@vzxqYdL>jg%Ta^0G<;r`$ctyR)V@axQjhU%nc-5?k;gpE7&rY zg-+;=!%NU>?bh35FiEhR*`@z1UpQ9+&7@GD>+RiLB)Y0`lzC_86ewVD6>OVv*$8fY z<&ma$RW~Uawa2FN->WY`Q0NYb@aMn&4PFQZ^Uy&Ho{f_bIyyFkb-_U1iitOAgZG`^t<&dpKI76FHmKz*hUN~J%bk{( zM&;@ToRplOEHcc24MO!hx%H;(*@C+VRlFpFJ(@{f2f(vO(JCJ03{qs+o zDW?Kby;}6=-t9YzFWSDF5-4MgyKp^gO<6^M?aO`_O{_kQqgyr9M~|MxpZ)BY_|CUK zj?lllu)HJ*v^iQdNgHNH-O6%;XUo?Z+C8)4*dEqB`6K8oU*=>D9@+E+284vNXbL@g z(>wKYxx@)}NxF1%AERg@w{R?g^%Gw1E(a_^4W#ZswiwO$eSdh4ALvz~r|$Od)~sp! zY=ALona@7zO;6qMaW_65m(n5Iy6n3VN)#HyyNg(b#U?<>hZzaIYu=%L1pOHv$4_>Y z#=~bc4E*93U*Y4AKeUp5L@(yAufqRx%fN|kbI_k6FuN2LV&s!)_sNVO1xTk7D3ebM zX*IOGl^8SCCj8^@VNrH;_mLw-d-_|V1OIP zcv<)NDK*=3a7&jSy#xD2^Mkv~MX6pLT7cH3KY-64ROHa6iC7noR|I=ARL@noChG78 zQWbe{3^VTLW+Kv~e(!z6^mNz!iD2|pgxLs!J`Y(T_wzeOB_`V(B zsbc=^Z=d3KO2Ry#_HHG|VAMQYzq>VEGLOjqc`%rc2%an`odPKogh%fKsir6$9TC*e zbt8mqL`+Ji{GD2Ub>c7~Nl|=%Z3Vx*y^D&*AFz7>3>g>=mW+wDjwwmh_C3bVg;ias zmJPu(TsJ~VpxM)0psl)*A)V~Dh9!Pk6K zuYs?=`g45v;rp5&44JPXz;B;C#Ve_TLze8^xLd9)lCaiVGN}4%hU|YBB$Paa0KpO z>>JgaMjZNWqs0kMq=T$nA|B?{3lSD`3b6F=nKp67Sps7~52dxft|EMHb)(UA;`t+H zDHCKg{OO7Dd`1;K&7JK*K;=}zN_(cPAjo#!!av8a2wp5? zoEg*-kU&Vm;9c%^$fnICFtxB|-WeiBJQ+%;k}Ss!TEMmY-j~|kI(Lb1dwXYGLqkgX z{mDoYZy=v#+JK`-2bO z52jKRMmpU0B7!GRZ}G~FA*=pxr4zL#rfIukZRAM0h~CQOCnex3APO{0tJPwQe$Pn+rcEenIyLlGZ`Bge#c)^lddAWXle`tfo$P zcXz0z;_1_;sCBai_9l=%$Icml;0+&6)QrIxEB7D56jL%;nduU>v232+6%KZH5RW4M zbNw!Edk;e?eXg3=iOInvqNE5@Z zW^`j~V{<|#2o@GA1?PC1RTtne^Q(M_2t|AN`;Q~it)`TOxfTkW*aon*e)9CyPW?-9 z0Eaf+EJ8$`Ke!K2*1)7%yS$h{PcC{ZB}TD;FwGTR_g8Cx9qt0^4|U)7KoVWs=J|zY z(=CJ;t{e1(N&yxLb*#UK+q>Jq;Y%$F%2+g5d4mDA>%qhuq~%|TOk~#obJQH7k;6A) z@=3v7$32fI> zkSwNn^(o-qY|(qiW}Uo)84OJf=jjv>NrdT;I+G88VpQ`E_7mxOfa?^!?9<3%Tt1X% z*Kx5XlY-i~_!TivE?ei4!rmOjlcJbpe1B{TR^^gf=+3L+_jMXy7xE8k5tHbcy^6TR z84#HWl|JM?ojHuS@eDLsUf^~87z10`;?%UgAs3tC**KETlnA$Xvt4^Ld)UE@#x0`4 z-Z&Y=^DMUxZ?UV_rn0MK0svh!h?8Vo@}Dc%Cr zBS|ZzpzS+|5}rQ2jV@U?i|pp|O{t#5CisvjQ(3o*ingKtP# z`G#a)7o31)`kwfuC6^Ex(I^@i`{3n0N!Z!MXq>mrC(z$Ciy&bd6gir-TCI0xB#3d> zYOv79K;p&IKNm>r(H8EdmnWB(eaC6rLflbm!R_4zC$p6k2#VL!1oIy-Mvc_zOYi4_ zr%$`l&#Yr)WGZoef~ZTl9N-y(=+F21d-QJV;bhpuoGH|e*B1h~PcVs1_!^wP3s&B? z2;kR141ctyie&B9bZ`{Yc>vP251)56jqYZZ3IcMGMG+)XYW1$&LG03RVMt2ocNc7R z!|m-IPNyy4)nba7yUPxWd4kFKd+k*6+(cNgk3H<%-SvZ+(G4#cCg$+ZIXlNolu*Kj zq2=|of^*JYWon|x-(e8dG|hY)M$kSt2XIEu1)JfKlcs%p?>Z=9G(`p}Axg5eTpwO{ zqt5}5#iY=R=Ji=hCBoj6l)1gVHTs!@>GKoD`>sC1fU0f%`w25Kw8jnQfs|@=*$N9d zH1bnb>xw9~t(lyAfLTVjYLaWVu>?q>LwB!>LR~QO7yaW|xA4!t6WW7hWtT?-pC91= z=99m@(W8_ENHQ-w3(+F#t?NyZwS@EL)DC3r9A+ORshzyuH|T2Q)sx^jf)>FRI?)uQ zh>eMH%UjnKx>6{N9#gVzrZoEu+$PrYfVOz{c%I<-fV+pS%<7jv`_eK88nCOR}{ zvh@YLEh9soJ22wY?|wXY$TF3~#h)(8ni6!oGO`*s1iecs6e)9n;~Xa+{c5HZQf03k z%pb}8eWRt^!nfD@PKLO}oI7d3+T5r5mjkbNQHN_D#%k{DEo_DhD8e`GX#3EwNzrk6 zRNQ#<`S~yZ^z9oMalHw=p>mi@*jg8dTzPR94ReW?o)fqZ&1+pJyTbJ=;ADl6vsDh+ge0zgcmCg%Z7zc*Q|`Ko$0=rY?=0vh zqxJz#Yz-K0+wQu4#0&#jhE$I*Z_35pKxo$U%Z8w3T8X2B!pBWdwD zLGS(`8{m2)eEP}9C^a7jNUes*9(IXlznwd6C$mIh?Nj(lNoaXT@vw%<*t9RW3N6`tD`yA3^5oE0 zu{(XX!|1uMbD&MVbm9eZoY_4c?O45+;03RH{q^hhv3}q6>#RTbnfGc}#{W;e{tsFO zyzJxs_a4QAaZzW=$=pPaV`8-ZtHd-=ci-SeI}qXC!n_+G`6O`{hI-4{YK$-^l5;GS z`U#BZv{cPDa>pXVLEKsE!4kAN9AEW$C9-~9F|-sX?j8Xi6CT$%m$D=*Fx z+<1zIJWrOFU2eK?@YQi;ajB@*a_+)Xr)r&_2zLyk=wNF5)K9N$rZ2wRxwy_=-^ZBd z&&%()j>=o3R)AtM{e#~2kJpU$amQg$|KZ3^P=mgx5LasM;xPkTkK(BzfX9_0P*`g;O)2lqrCQa@T7?d6W7?_Lf*M#f)oThe-|I97swL!kg z7WtN1wYjf9PcNMW5YLlOiBxuF1dqQ*0li}pz>bBt8pnY#mF*nKj;P^RKfuuV+4lsH zV<3j%B*QnCL<7qEmu zc}`OM4qO2gP9d`Fee3)(S%|F%e-FU5SsKWoZatX2Y@_m`{{2@ZQ4rc z3XktoafBKYF&@e)re&tV=);geqkGMvGqez%V9JEZ=M{IXINsKeR~jGxyz=OZL|SOy zXUoCW5###%)+BQMzV&-NPgq|g`Vj02@UG;wC2fVE*MB>Vd0i4dzS8l%=)HcEO2Xfn z1Kga|w$%|ZANouNhIm#!jT%!RgZ}UHAxjt}i>T4GYX9dP0&mEywT7{wXYRQa2=ihR zrN#*gE0<^?W5fOX=wS=zjvua7TuV70A3rQX6pKu2_;;Sc-L_T{sS9WBto8dFbp;#< zPRGh+QmylZAt2MBim{$rw!u#+613i1%;#H;52F>@Pbh2wN2l32I^0000 - + - - - + + + diff --git a/Subsurface/Content/Items/Weapons/railguncontroller.png b/Subsurface/Content/Items/Weapons/railguncontroller.png index c28517160ac065c86e96b1e0e52e7eee84464431..72505134715e3ee5ec3de48625c8c6ceda421bfb 100644 GIT binary patch literal 8923 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 J)=FE3{~v>7PUips delta 1259 zcmccZI)_WKGr-TCmrII^fq{Y7)59eQNVfv1#T^vIyZoQd% z+eE9Ft(&;bZhF{z9S58eYNVp5oHzrbNai z3?Rtcx=ehgPutAbO->8z9hNX$Vpm{Az=&4iuinpNRC&eMO=5bf!sNOTVuBexKWOt^47toG;kcdn(s51c4#g9M|p4lU_`Y-u~XB{(r+Q zLytuVSr_xmomzc8|NQ@Z5z!O9cB-_q|90VOv3Okn^GlD9kDXd=hOcCJ>x$1`ZkhyT zEU8auaCGQ$%UZsihbhRUsHR3mI$N8ECCDU5b9&0>+q1HNPk+j<(t_weDILGHM^pI;v+7Tk4mlFvnnPY zV)fnQ@v!roTHLfHavAwRwGDk92S4wbcu4iop+ioGt9Qoq&Ag`KYAoqcxWs{t%h#dn z*~(^(Mv*lJD>ORYo-R^%U-jd;9MH(=##60!m8Ghm$`grTGbU+AY}-*b(>5 z-o!>tIr;It_jmW2znH|Tsify3z|-5aZG~~$ghOnvoLD~Yj+%9;`D^R4_$eGpsWHp0 zYCU$i_<5)BHn)xi^`-Cqm+G{$SI>KYHETIA^d>k-Z@sm0P3=FGS2-X5*LntHwL zQoB&uHtkOz|60$i`QkF^yqI(lo}A2%2uD+r19yRiIEmV7KY{7NoE!JQPduA8d*A%?&o??Wi>!6|@LQ+pNI;igO2)VUx1M?^ zxa|1t)Fr{uC}HR!|JG+-yj8~6{Wo*MQnhw&%zLLWE2k+Y(&Tpdlp`OqHZ7dJ`>f}i z5~bO-anV|xcTcX4>&rT_A%bf^CzsNh;&o0c4=wsWR%MDTx_-#SY;}KqiPhaL7CgH; z7`rdK$BOOuxO7tcR4Gg5lEbr<=K6KVt6c1A6PdK3*6EPVqOES+zcd*%7xZ3r-x%>` zRo;yGbF*F-2Uc2fmngIv9$UFyKtt=HP3@KQt|Hy8ZY+9PTz)}~=?gP^3Kz-f?wQt+ zIM4jTt&GP}wJxze8eJ>XJhLWC)ZePsTJOsBiu>-O$nsCGtn{+uk3X$kvf;%GHPJ{d z*NEKWZ6@!Pj+%Bh3W!J4-gmc~|9$S6vUh@SpU#_T@woba`(uk`b-F4&PctX*hx4xH z>sTak=X+uEWOr-1Bn6k4EUx`0-*M>R&nHiqX{wb_C TPw_gi{9^EQ^>bP0l+XkKS`s%w diff --git a/Subsurface/Content/UI/style.xml b/Subsurface/Content/UI/style.xml index 278857a32..52dcfec9d 100644 --- a/Subsurface/Content/UI/style.xml +++ b/Subsurface/Content/UI/style.xml @@ -28,7 +28,7 @@ diff --git a/Subsurface/Source/Characters/AI/PathFinder.cs b/Subsurface/Source/Characters/AI/PathFinder.cs index d6ccf8b9e..8b3ab05c3 100644 --- a/Subsurface/Source/Characters/AI/PathFinder.cs +++ b/Subsurface/Source/Characters/AI/PathFinder.cs @@ -117,7 +117,7 @@ namespace Barotrauma DebugConsole.ThrowError("Pathfinding error, couldn't find a start node"); return new SteeringPath(); } - + closestDist = 0.0f; PathNode endNode = null; foreach (PathNode node in nodes) diff --git a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs index 061e02b30..9454cdb4f 100644 --- a/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Subsurface/Source/Characters/Animation/HumanoidAnimController.cs @@ -151,6 +151,7 @@ namespace Barotrauma UpdateClimbing(); break; case Animation.UsingConstruction: + UpdateStanding(); break; default: if (inWater) diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index 75dae6eb8..7989068f0 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -412,6 +412,12 @@ namespace Barotrauma if (Info.PickedItemIDs[i] == 0) continue; Item item = FindEntityByID(Info.PickedItemIDs[i]) as Item; + + if (item==null) + { + int a = 1; + } + System.Diagnostics.Debug.Assert(item != null); if (item == null) continue; @@ -891,6 +897,7 @@ namespace Barotrauma if (controlled == this) { + Lights.LightManager.ViewTarget = this; CharacterHUD.Update(deltaTime,this); ControlLocalPlayer(deltaTime, cam); } @@ -1276,15 +1283,18 @@ namespace Barotrauma if (secondaryHeld) { - Vector2 relativeCursorPosition = cursorPosition - Position; + Vector2 relativeCursorPosition = cursorPosition; + relativeCursorPosition -= Lights.LightManager.ViewTarget == null ? Position : Lights.LightManager.ViewTarget.Position; - if (relativeCursorPosition.Length()>4950.0f) + if (relativeCursorPosition.Length()>500.0f) { - relativeCursorPosition = Vector2.Normalize(relativeCursorPosition) * 4950.0f; + relativeCursorPosition = Vector2.Normalize(relativeCursorPosition) * 495.0f; } - message.WriteRangedSingle(relativeCursorPosition.X, -5000.0f, 5000.0f, 16); - message.WriteRangedSingle(relativeCursorPosition.Y, -5000.0f, 5000.0f, 16); + message.Write(Lights.LightManager.ViewTarget == null ? (ushort)0 : Lights.LightManager.ViewTarget.ID); + + message.WriteRangedSingle(relativeCursorPosition.X, -500.0f, 500.0f, 8); + message.WriteRangedSingle(relativeCursorPosition.Y, -500.0f, 500.0f, 8); } else { @@ -1443,13 +1453,17 @@ namespace Barotrauma float dir = 1.0f; Vector2 pos = Vector2.Zero; + ushort viewTargetId = 0; + try { if (secondaryKeyState) { + viewTargetId = message.ReadUInt16(); + relativeCursorPos = new Vector2( - message.ReadRangedSingle(-5000.0f, 5000.0f, 16), - message.ReadRangedSingle(-5000.0f, 5000.0f, 16)); + message.ReadRangedSingle(-500.0f, 500.0f, 8), + message.ReadRangedSingle(-500.0f, 500.0f, 8)); } else { @@ -1481,8 +1495,12 @@ namespace Barotrauma if (secondaryKeyState) { - cursorPosition = MathUtils.IsValid(relativeCursorPos) ? - ConvertUnits.ToDisplayUnits(pos)+relativeCursorPos : Vector2.Zero; + + cursorPosition = MathUtils.IsValid(relativeCursorPos) ? relativeCursorPos : Vector2.Zero; + Entity viewTarget = viewTargetId == 0 ? this : Entity.FindEntityByID(viewTargetId); + if (viewTarget == null) viewTarget = this; + + cursorPosition += viewTarget.Position; } else { diff --git a/Subsurface/Source/GUI/GUI.cs b/Subsurface/Source/GUI/GUI.cs index cfa5ea8c8..9d9b66a5b 100644 --- a/Subsurface/Source/GUI/GUI.cs +++ b/Subsurface/Source/GUI/GUI.cs @@ -425,11 +425,18 @@ namespace Barotrauma msg.Pos = MathUtils.SmoothStep(msg.Pos, currPos, deltaTime*20.0f); + spriteBatch.DrawString(Font, msg.Text, + new Vector2((int)msg.Pos.X - 1, (int)msg.Pos.Y - 1), + Color.Black * alpha*0.5f, 0.0f, + new Vector2((int)(0.5f * msg.Size.X), (int)(0.5f * msg.Size.Y)), 1.0f, SpriteEffects.None, 0.0f); + spriteBatch.DrawString(Font, msg.Text, new Vector2((int)msg.Pos.X, (int)msg.Pos.Y), msg.Color * alpha, 0.0f, new Vector2((int)(0.5f * msg.Size.X), (int)(0.5f * msg.Size.Y)), 1.0f, SpriteEffects.None, 0.0f); + + currPos.Y += 30.0f; messages[0].LifeTime -= deltaTime/i; diff --git a/Subsurface/Source/GUI/GUIListBox.cs b/Subsurface/Source/GUI/GUIListBox.cs index 7401f7bcf..d269010a5 100644 --- a/Subsurface/Source/GUI/GUIListBox.cs +++ b/Subsurface/Source/GUI/GUIListBox.cs @@ -158,13 +158,13 @@ namespace Barotrauma scrollBar.BarScroll = 0.0f; } - public void Select(object selection) + public void Select(object selection, bool force = false) { for (int i = 0; i < children.Count; i++) { if (children[i].UserData != selection) continue; - Select(i); + Select(i, force); //if (OnSelected != null) OnSelected(Selected, Selected.UserData); if (!SelectMultiple) return; @@ -185,12 +185,13 @@ namespace Barotrauma } } - public void Select(int childIndex) + public void Select(int childIndex, bool force = false) { if (childIndex >= children.Count || childIndex < 0) return; bool wasSelected = true; - if (OnSelected != null) wasSelected = OnSelected(children[childIndex], children[childIndex].UserData); + if (OnSelected != null) wasSelected = OnSelected(children[childIndex], children[childIndex].UserData) || force; + if (!wasSelected) return; @@ -270,14 +271,14 @@ namespace Barotrauma private void ShowScrollBar() { - if (scrollBarHidden) Rect = new Rectangle(rect.X, rect.Y, rect.Width - scrollBar.Rect.Width, rect.Height); + if (scrollBarHidden && !scrollBar.IsHorizontal) Rect = new Rectangle(rect.X, rect.Y, rect.Width - scrollBar.Rect.Width, rect.Height); scrollBarHidden = false; } private void HideScrollBar() { - if (!scrollBarHidden) Rect = new Rectangle(rect.X, rect.Y, rect.Width + scrollBar.Rect.Width, rect.Height); + if (!scrollBarHidden && !scrollBar.IsHorizontal) Rect = new Rectangle(rect.X, rect.Y, rect.Width + scrollBar.Rect.Width, rect.Height); scrollBarHidden = true; } @@ -297,7 +298,7 @@ namespace Barotrauma scrollBar.Draw(spriteBatch); if (scrollBar.IsHorizontal) { - x -= (int)((totalSize - rect.Height) * scrollBar.BarScroll); + x -= (int)((totalSize - rect.Width) * scrollBar.BarScroll); } else { @@ -322,14 +323,30 @@ namespace Barotrauma child.Visible = false; - if (child.Rect.Y + child.Rect.Height < rect.Y) continue; - if (child.Rect.Y + child.Rect.Height > rect.Y + rect.Height) break; - - if (child.Rect.Y < rect.Y && child.Rect.Y + child.Rect.Height >= rect.Y) + if (scrollBar.IsHorizontal) { - y = rect.Y; - continue; + if (child.Rect.Right < rect.X) continue; + if (child.Rect.Right > rect.Right) break; + + if (child.Rect.X < rect.X && child.Rect.Right >= rect.X) + { + x = rect.X; + continue; + } } + else + { + if (child.Rect.Y + child.Rect.Height < rect.Y) continue; + if (child.Rect.Y + child.Rect.Height > rect.Y + rect.Height) break; + + if (child.Rect.Y < rect.Y && child.Rect.Y + child.Rect.Height >= rect.Y) + { + y = rect.Y; + continue; + } + } + + child.Visible = true; diff --git a/Subsurface/Source/GameSession/ShiftSummary.cs b/Subsurface/Source/GameSession/ShiftSummary.cs index 42f4ff93f..7788aeb6f 100644 --- a/Subsurface/Source/GameSession/ShiftSummary.cs +++ b/Subsurface/Source/GameSession/ShiftSummary.cs @@ -64,26 +64,31 @@ namespace Barotrauma GUIFrame frame = new GUIFrame(new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight), Color.Black * 0.8f); - int width = 700, height = 400; - GUIFrame innerFrame = new GUIFrame(new Rectangle(0,0,width,height), null, Alignment.Center, GUI.Style, frame); + + int width = 760, height = 400; + GUIFrame innerFrame = new GUIFrame(new Rectangle(0, 0, width, height), null, Alignment.Center, GUI.Style, frame); + int y = 0; string summaryText = InfoTextManager.GetInfoText(gameOver ? "gameover" : (progress ? "progress" : "return")); - var infoText = new GUITextBlock(new Rectangle(0,y,0,50), summaryText, GUI.Style, innerFrame, true); + var infoText = new GUITextBlock(new Rectangle(0, y, 0, 50), summaryText, GUI.Style, innerFrame, true); y += infoText.Rect.Height; - new GUITextBlock(new Rectangle(0,y,0,20), "Crew status:", GUI.Style, innerFrame, GUI.LargeFont); + new GUITextBlock(new Rectangle(0, y, 0, 20), "Crew status:", GUI.Style, innerFrame, GUI.LargeFont); y += 30; + GUIListBox listBox = new GUIListBox(new Rectangle(0,y,0,90), null, Alignment.TopLeft, GUI.Style, innerFrame, true); + int x = 0; foreach (Character character in gameSession.CrewManager.characters) { - var characterFrame = new GUIFrame(new Rectangle(x,y,170,70), character.IsDead ? Color.DarkRed*0.7f : Color.Transparent, GUI.Style, innerFrame); - characterFrame.Padding = new Vector4(5.0f,5.0f,5.0f,5.0f); - character.Info.CreateCharacterFrame(characterFrame, - character.Info.Job!=null ? (character.Info.Name + '\n'+"("+character.Info.Job.Name+")") : character.Info.Name, null); + var characterFrame = new GUIFrame(new Rectangle(x, y, 170, 70), character.IsDead ? Color.DarkRed * 0.7f : Color.Transparent, GUI.Style, listBox); + characterFrame.OutlineColor = Color.Transparent; + characterFrame.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f); + character.Info.CreateCharacterFrame(characterFrame, + character.Info.Job != null ? (character.Info.Name + '\n' + "(" + character.Info.Job.Name + ")") : character.Info.Name, null); string statusText; Color statusColor; @@ -100,30 +105,28 @@ namespace Barotrauma statusText = (character.Health / character.MaxHealth > 0.8f) ? "OK" : "Injured"; statusColor = Color.DarkGreen; } - - new GUITextBlock(new Rectangle(0,0,0,20), statusText, - GUI.Style, Alignment.BottomLeft, Alignment.TopCenter, characterFrame, true, GUI.SmallFont).Color = statusColor*0.7f; - - + + new GUITextBlock(new Rectangle(0, 0, 0, 20), statusText, + GUI.Style, Alignment.BottomLeft, Alignment.TopCenter, characterFrame, true, GUI.SmallFont).Color = statusColor * 0.7f; + x += characterFrame.Rect.Width + 10; } - y += 80; + y += 120; if (GameMain.GameSession.Mission != null) { - new GUITextBlock(new Rectangle(0, y, 0, 20), "Mission: "+GameMain.GameSession.Mission.Name, GUI.Style, innerFrame, GUI.LargeFont); + new GUITextBlock(new Rectangle(0, y, 0, 20), "Mission: " + GameMain.GameSession.Mission.Name, GUI.Style, innerFrame, GUI.LargeFont); y += 30; - - new GUITextBlock(new Rectangle(0,y,0,30), + + new GUITextBlock(new Rectangle(0, y, 0, 30), (GameMain.GameSession.Mission.Completed) ? GameMain.GameSession.Mission.SuccessMessage : GameMain.GameSession.Mission.FailureMessage, GUI.Style, innerFrame); if (GameMain.GameSession.Mission.Completed) { - new GUITextBlock(new Rectangle(0, y+40, 0, 30), "Reward: "+GameMain.GameSession.Mission.Reward, GUI.Style, innerFrame); - } - + new GUITextBlock(new Rectangle(0, y + 40, 0, 30), "Reward: " + GameMain.GameSession.Mission.Reward, GUI.Style, innerFrame); + } } return frame; diff --git a/Subsurface/Source/Items/Components/Machines/Controller.cs b/Subsurface/Source/Items/Components/Machines/Controller.cs index 0e8716283..14120a924 100644 --- a/Subsurface/Source/Items/Components/Machines/Controller.cs +++ b/Subsurface/Source/Items/Components/Machines/Controller.cs @@ -81,7 +81,9 @@ namespace Barotrauma.Items.Components return; } - if (userPos != 0.0f && character.AnimController.Anim != AnimController.Animation.UsingConstruction) + character.AnimController.Anim = AnimController.Animation.UsingConstruction; + + if (userPos != 0.0f) { float torsoX = ConvertUnits.ToDisplayUnits(character.AnimController.RefLimb.SimPosition.X); @@ -89,12 +91,16 @@ namespace Barotrauma.Items.Components if (diff!= Vector2.Zero && diff.Length() > 10.0f) { - character.AnimController.Anim = AnimController.Animation.None; + //character.AnimController.Anim = AnimController.Animation.None; character.AnimController.TargetMovement = new Vector2(Math.Sign(diff.X), 0.0f); character.AnimController.TargetDir = (Math.Sign(diff.X) == 1) ? Direction.Right : Direction.Left; return; } + else + { + character.AnimController.TargetMovement = Vector2.Zero; + } } ApplyStatusEffects(ActionType.OnActive, deltaTime, character); @@ -103,6 +109,7 @@ namespace Barotrauma.Items.Components character.AnimController.Anim = AnimController.Animation.UsingConstruction; character.AnimController.ResetPullJoints(); + if (dir != 0) character.AnimController.TargetDir = dir; foreach (LimbPos lb in limbPositions) @@ -110,6 +117,8 @@ namespace Barotrauma.Items.Components Limb limb = character.AnimController.GetLimb(lb.limbType); if (limb == null) continue; + limb.Disabled = true; + FixedMouseJoint fmj = limb.pullJoint; if (fmj == null) continue; @@ -138,7 +147,7 @@ namespace Barotrauma.Items.Components public override void SecondaryUse(float deltaTime, Character character = null) { - if (this.character == null || this.character!=character || this.character.SelectedConstruction!=item) + if (this.character == null || this.character != character || this.character.SelectedConstruction != item) { character = null; return; @@ -150,13 +159,13 @@ namespace Barotrauma.Items.Components foreach (Connection c2 in c.Recipients) { - if (c2 == null || c2.Item==null || !c2.Item.Prefab.FocusOnSelected) continue; + if (c2 == null || c2.Item == null || !c2.Item.Prefab.FocusOnSelected) continue; Vector2 centerPos = c2.Item.WorldPosition; if (character == Character.Controlled && cam != null) { - Lights.LightManager.ViewPos = centerPos; + Lights.LightManager.ViewTarget = c2.Item; cam.TargetPos = c2.Item.WorldPosition; } diff --git a/Subsurface/Source/Items/Components/Machines/Radar.cs b/Subsurface/Source/Items/Components/Machines/Radar.cs index d137a7f97..2a6798ae7 100644 --- a/Subsurface/Source/Items/Components/Machines/Radar.cs +++ b/Subsurface/Source/Items/Components/Machines/Radar.cs @@ -74,7 +74,7 @@ namespace Barotrauma.Items.Components pingState = 0.0f; } - voltage = 0.0f; + voltage -= deltaTime; } public override bool Use(float deltaTime, Character character = null) diff --git a/Subsurface/Source/Items/Components/Signal/Wire.cs b/Subsurface/Source/Items/Components/Signal/Wire.cs index 4236a6f7d..5d1c2b33c 100644 --- a/Subsurface/Source/Items/Components/Signal/Wire.cs +++ b/Subsurface/Source/Items/Components/Signal/Wire.cs @@ -21,6 +21,7 @@ namespace Barotrauma.Items.Components private Vector2 newNodePos; + private static Wire draggingWire; private static int? selectedNodeIndex; public Wire(Item item, XElement element) @@ -310,31 +311,34 @@ namespace Barotrauma.Items.Components //nodes.Add(newNodePos); } - if (!editing) return; + if (!editing || !PlayerInput.MouseInsideWindow) return; - for (int i = 1; i < Nodes.Count; i++) + for (int i = 0; i < Nodes.Count; i++) { Vector2 worldPos = Nodes[i]; - if (item.Submarine != null) worldPos += item.Submarine.Position; + if (item.Submarine != null) worldPos += item.Submarine.Position + Submarine.HiddenSubPosition; worldPos.Y = -worldPos.Y; - GUI.DrawRectangle(spriteBatch, worldPos+new Vector2(-3,-3), new Vector2(6, 6), Color.Red, true, 0.0f); + GUI.DrawRectangle(spriteBatch, worldPos + new Vector2(-3, -3), new Vector2(6, 6), item.Color, true, 0.0f); if (GUIComponent.MouseOn != null || - Vector2.Distance(GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition), Nodes[i]) > 10.0f) + Vector2.Distance(GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition), new Vector2(worldPos.X, -worldPos.Y)) > 10.0f) { continue; } + + MapEntity.DisableSelect = true; GUI.DrawRectangle(spriteBatch, worldPos + new Vector2(-10, -10), new Vector2(20, 20), Color.Red, false, 0.0f); - if (selectedNodeIndex == null && !MapEntity.SelectedAny) + if (selectedNodeIndex == null && draggingWire == null)// && !MapEntity.SelectedAny) { if (PlayerInput.LeftButtonDown() && PlayerInput.GetOldMouseState.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Released) { MapEntity.SelectEntity(item); + draggingWire = this; selectedNodeIndex = i; - MapEntity.DisableSelect = true; + break; } else if (PlayerInput.RightButtonClicked()) { @@ -346,22 +350,27 @@ namespace Barotrauma.Items.Components if (PlayerInput.LeftButtonDown()) { - if (selectedNodeIndex != null && item.IsSelected) + if (selectedNodeIndex != null && draggingWire == this) { MapEntity.DisableSelect = true; - Nodes[(int)selectedNodeIndex] = GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition); + //Nodes[(int)selectedNodeIndex] = GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition)-Submarine.HiddenSubPosition+Submarine.Loaded.Position; - Vector2 nodeWorldPos = Nodes[(int)selectedNodeIndex]; + Vector2 nodeWorldPos = GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition) - Submarine.HiddenSubPosition - Submarine.Loaded.Position;// Nodes[(int)selectedNodeIndex]; - if (item.Submarine != null) nodeWorldPos += item.Submarine.Position; + nodeWorldPos.X = MathUtils.Round(nodeWorldPos.X, Submarine.GridSize.X/2.0f); + nodeWorldPos.Y = MathUtils.Round(nodeWorldPos.Y, Submarine.GridSize.Y/2.0f); + + //if (item.Submarine != null) nodeWorldPos += item.Submarine.Position; + + Nodes[(int)selectedNodeIndex] = nodeWorldPos; - Nodes[(int)selectedNodeIndex] = RoundNode(Nodes[(int)selectedNodeIndex], Hull.FindHull(nodeWorldPos)); MapEntity.SelectEntity(item); } } else { selectedNodeIndex = null; + draggingWire = null; } } diff --git a/Subsurface/Source/Items/Components/Turret.cs b/Subsurface/Source/Items/Components/Turret.cs index 3515b3062..c1e69f169 100644 --- a/Subsurface/Source/Items/Components/Turret.cs +++ b/Subsurface/Source/Items/Components/Turret.cs @@ -134,7 +134,7 @@ namespace Barotrauma.Items.Components var projectiles = GetLoadedProjectiles(true); if (projectiles.Count == 0) return false; - if (GetAvailablePower() < currPowerConsumption) return false; + if (GetAvailablePower() < powerConsumption) return false; var batteries = item.GetConnectedComponents(); diff --git a/Subsurface/Source/Map/Lights/LightManager.cs b/Subsurface/Source/Map/Lights/LightManager.cs index e2d905acf..93eeba402 100644 --- a/Subsurface/Source/Map/Lights/LightManager.cs +++ b/Subsurface/Source/Map/Lights/LightManager.cs @@ -7,7 +7,8 @@ namespace Barotrauma.Lights { class LightManager { - public static Vector2 ViewPos; + //public static Vector2 ViewPos; + public static Entity ViewTarget; public Color AmbientLight; @@ -58,9 +59,11 @@ namespace Barotrauma.Lights lights.Remove(light); } - public void DrawLOS(GraphicsDevice graphics, SpriteBatch spriteBatch, Camera cam, Vector2 pos) + public void DrawLOS(GraphicsDevice graphics, SpriteBatch spriteBatch, Camera cam) { - if (!LosEnabled) return; + if (!LosEnabled || ViewTarget==null) return; + + Vector2 pos = ViewTarget.WorldPosition; Rectangle camView = new Rectangle(cam.WorldView.X, cam.WorldView.Y - cam.WorldView.Height, cam.WorldView.Width, cam.WorldView.Height); @@ -167,13 +170,13 @@ namespace Barotrauma.Lights spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, cam.Transform); - Vector2 diff = lookAtPosition - ViewPos; + Vector2 diff = lookAtPosition - ViewTarget.WorldPosition; diff.Y = -diff.Y; float rotation = MathUtils.VectorToAngle(diff); Vector2 scale = new Vector2(MathHelper.Clamp(diff.Length()/256.0f, 2.0f, 5.0f), 2.0f); - - spriteBatch.Draw(visionCircle, new Vector2(ViewPos.X, -ViewPos.Y), null, Color.White, rotation, + + spriteBatch.Draw(visionCircle, new Vector2(ViewTarget.WorldPosition.X, -ViewTarget.WorldPosition.Y), null, Color.White, rotation, new Vector2(LightSource.LightTexture.Width*0.2f, LightSource.LightTexture.Height/2), scale, SpriteEffects.None, 0.0f); spriteBatch.End(); diff --git a/Subsurface/Source/Map/MapEntity.cs b/Subsurface/Source/Map/MapEntity.cs index 9877f463b..0808d1021 100644 --- a/Subsurface/Source/Map/MapEntity.cs +++ b/Subsurface/Source/Map/MapEntity.cs @@ -232,21 +232,19 @@ namespace Barotrauma /// public static void UpdateSelecting(Camera cam) { - if (DisableSelect) - { - DisableSelect = false; - return; - } - foreach (MapEntity e in mapEntityList) { e.isHighlighted = false; e.isSelected = false; } - if (GUIComponent.MouseOn != null) return; - + if (DisableSelect) + { + DisableSelect = false; + return; + } + if (GUIComponent.MouseOn != null || !PlayerInput.MouseInsideWindow) return; if (MapEntityPrefab.Selected != null) { @@ -261,8 +259,7 @@ namespace Barotrauma selectedList.Clear(); } - Vector2 position = new Vector2(PlayerInput.GetMouseState.X, PlayerInput.GetMouseState.Y); - position = cam.ScreenToWorld(position); + Vector2 position = cam.ScreenToWorld(PlayerInput.MousePosition); MapEntity highLightedEntity = null; diff --git a/Subsurface/Source/Map/SubmarineBody.cs b/Subsurface/Source/Map/SubmarineBody.cs index 7eba2e664..62efe1c17 100644 --- a/Subsurface/Source/Map/SubmarineBody.cs +++ b/Subsurface/Source/Map/SubmarineBody.cs @@ -312,11 +312,11 @@ namespace Barotrauma (Rand.Int(2) == 0) ? Borders.Y : Borders.Y - Borders.Height); } + damagePos += submarine.Position + Submarine.HiddenSubPosition; SoundPlayer.PlayDamageSound(DamageSoundType.Pressure, 50.0f, damagePos, 10000.0f); GameMain.GameScreen.Cam.Shake = depth * PressureDamageMultiplier * 0.1f; - damagePos += submarine.Position + Submarine.HiddenSubPosition; Explosion.RangedStructureDamage(damagePos, depth * PressureDamageMultiplier * 50.0f, depth * PressureDamageMultiplier); //SoundPlayer.PlayDamageSound(DamageSoundType.StructureBlunt, Rand.Range(0.0f, 100.0f), damagePos, 5000.0f); diff --git a/Subsurface/Source/Map/WayPoint.cs b/Subsurface/Source/Map/WayPoint.cs index 772f6641b..96518f06a 100644 --- a/Subsurface/Source/Map/WayPoint.cs +++ b/Subsurface/Source/Map/WayPoint.cs @@ -249,6 +249,56 @@ namespace Barotrauma } } + float outSideWaypointInterval = 200.0f; + int outsideWaypointDist = 100; + + Rectangle borders = new Rectangle(Submarine.Borders.X - outsideWaypointDist, Submarine.Borders.Y + outsideWaypointDist, + Submarine.Borders.Width + outsideWaypointDist*2, Submarine.Borders.Height+outsideWaypointDist*2); + + WayPoint[,] cornerWaypoint = new WayPoint[2,2]; + for (int i = 0; i<2; i++) + { + for (float x = borders.X + outSideWaypointInterval; x < borders.Right - outSideWaypointInterval; x += outSideWaypointInterval) + { + var wayPoint = new WayPoint( + new Vector2(x, borders.Y - borders.Height * i) + Submarine.HiddenSubPosition, + SpawnType.Path, Submarine.Loaded); + if (x == borders.X + outSideWaypointInterval) + { + cornerWaypoint[i, 0] = wayPoint; + } + else + { + wayPoint.ConnectTo(WayPoint.WayPointList[WayPointList.Count-2]); + } + } + + cornerWaypoint[i, 1] = WayPoint.WayPointList[WayPointList.Count - 1]; + } + + for (int i = 0; i < 2; i++) + { + WayPoint wayPoint = null; + for (float y = borders.Y - borders.Height; y < borders.Y; y += outSideWaypointInterval) + { + wayPoint = new WayPoint( + new Vector2(borders.X + borders.Width * i, y) + Submarine.HiddenSubPosition, + SpawnType.Path, Submarine.Loaded); + if (y == borders.Y - borders.Height) + { + wayPoint.ConnectTo(cornerWaypoint[1, i]); + } + else + { + wayPoint.ConnectTo(WayPoint.WayPointList[WayPointList.Count - 2]); + + } + + } + + wayPoint.ConnectTo(cornerWaypoint[0, i]); + } + List stairList = new List(); foreach (MapEntity me in MapEntity.mapEntityList) { @@ -292,7 +342,7 @@ namespace Barotrauma for (int dir = -1; dir <= 1; dir += 2) { - WayPoint closest = wayPoint.FindClosest(dir, true, 30.0f); + WayPoint closest = wayPoint.FindClosest(dir, true, gap.IsRoomToRoom ? 30.0f : outSideWaypointInterval/2.0f); if (closest == null) continue; wayPoint.ConnectTo(closest); } diff --git a/Subsurface/Source/PlayerInput.cs b/Subsurface/Source/PlayerInput.cs index 3d0eb8d1f..c545b22ca 100644 --- a/Subsurface/Source/PlayerInput.cs +++ b/Subsurface/Source/PlayerInput.cs @@ -222,6 +222,11 @@ namespace Barotrauma get { return oldMouseState; } } + public static bool MouseInsideWindow + { + get { return new Rectangle(0, 0, GameMain.GraphicsWidth, GameMain.GraphicsHeight).Contains(MousePosition); } + } + public static Vector2 MouseSpeed { get diff --git a/Subsurface/Source/Screens/EditMapScreen.cs b/Subsurface/Source/Screens/EditMapScreen.cs index 37fc2371d..4ee8a0fe2 100644 --- a/Subsurface/Source/Screens/EditMapScreen.cs +++ b/Subsurface/Source/Screens/EditMapScreen.cs @@ -26,10 +26,10 @@ namespace Barotrauma get { return cam; } } - public string GetSubName() - { - return ((Submarine.Loaded == null) ? "" : Submarine.Loaded.Name); - } + //public string GetSubName() + //{ + // return ((Submarine.Loaded == null) ? "" : Submarine.Loaded.Name); + //} private string GetItemCount() { @@ -64,6 +64,7 @@ namespace Barotrauma new GUITextBlock(new Rectangle(0, 20, 0, 20), "Submarine:", GUI.Style, GUIpanel); nameBox = new GUITextBox(new Rectangle(0, 40, 0, 20), GUI.Style, GUIpanel); + nameBox.OnEnterPressed = ChangeSubName; //nameBlock.TextGetter = GetSubName; GUIButton button = new GUIButton(new Rectangle(0,70,0,20), "Save", GUI.Style, GUIpanel); @@ -227,6 +228,8 @@ namespace Barotrauma } Submarine.SaveCurrent(nameBox.Text + ".sub"); + + GUI.AddMessage("Submarine saved to " + Submarine.Loaded.FilePath, Color.DarkGreen, 3.0f); return false; @@ -271,6 +274,16 @@ namespace Barotrauma return true; } + private bool ChangeSubName(GUITextBox textBox, string text) + { + if (Submarine.Loaded != null) Submarine.Loaded.Name = text; + textBox.Deselect(); + + textBox.Text = text; + + return true; + } + private bool SelectPrefab(GUIComponent component, object obj) { MapEntityPrefab.SelectPrefab(obj); diff --git a/Subsurface/Source/Screens/GameScreen.cs b/Subsurface/Source/Screens/GameScreen.cs index 3e2649c02..91e3c8d71 100644 --- a/Subsurface/Source/Screens/GameScreen.cs +++ b/Subsurface/Source/Screens/GameScreen.cs @@ -135,10 +135,10 @@ namespace Barotrauma while (Physics.accumulator >= Physics.step) { cam.MoveCamera((float)Physics.step); - if (Character.Controlled != null) + if (Character.Controlled != null && Lights.LightManager.ViewTarget != null) { - cam.TargetPos = Character.Controlled.WorldPosition; - Lights.LightManager.ViewPos = Character.Controlled.WorldPosition; + cam.TargetPos = Lights.LightManager.ViewTarget.WorldPosition; + //Lights.LightManager.ViewPos = Character.Controlled.WorldPosition; } if (Submarine.Loaded != null) Submarine.Loaded.SetPrevTransform(Submarine.Loaded.Position); @@ -213,9 +213,11 @@ namespace Barotrauma GameMain.LightManager.ObstructVision = Character.Controlled != null && Character.Controlled.ObstructVision; GameMain.LightManager.UpdateLightMap(graphics, spriteBatch, cam); - GameMain.LightManager.UpdateObstructVision(graphics, spriteBatch, cam, - Character.Controlled==null ? LightManager.ViewPos : Character.Controlled.CursorWorldPosition); - + if (Character.Controlled!=null) + { + GameMain.LightManager.UpdateObstructVision(graphics, spriteBatch, cam, Character.Controlled.CursorWorldPosition); + } + //---------------------------------------------------------------------------------------- //1. draw the background, characters and the parts of the submarine that are behind them @@ -335,7 +337,7 @@ namespace Barotrauma spriteBatch.End(); - GameMain.LightManager.DrawLOS(graphics, spriteBatch, cam, LightManager.ViewPos); + GameMain.LightManager.DrawLOS(graphics, spriteBatch, cam); } } } diff --git a/Subsurface/Source/Screens/LobbyScreen.cs b/Subsurface/Source/Screens/LobbyScreen.cs index 8c115b1c7..d00e4e90c 100644 --- a/Subsurface/Source/Screens/LobbyScreen.cs +++ b/Subsurface/Source/Screens/LobbyScreen.cs @@ -537,7 +537,7 @@ namespace Barotrauma private IEnumerable ShiftLoading() { - GameMain.GameSession.StartShift(selectedLevel, false); + GameMain.GameSession.StartShift(selectedLevel, true); GameMain.GameScreen.Select(); yield return CoroutineStatus.Success; diff --git a/Subsurface/Source/Screens/MainMenuScreen.cs b/Subsurface/Source/Screens/MainMenuScreen.cs index 4ae9d7206..06eeff66c 100644 --- a/Subsurface/Source/Screens/MainMenuScreen.cs +++ b/Subsurface/Source/Screens/MainMenuScreen.cs @@ -3,6 +3,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Barotrauma.Networking; using System.Xml.Linq; +using System.IO; namespace Barotrauma { @@ -474,6 +475,15 @@ namespace Barotrauma Submarine selectedSub = mapList.SelectedData as Submarine; if (selectedSub == null) return false; + if (!Directory.Exists(SaveUtil.TempPath)) + { + Directory.CreateDirectory(SaveUtil.TempPath); + } + + File.Copy(selectedSub.FilePath, Path.Combine(SaveUtil.TempPath, "map.sub"), true); + + selectedSub = new Submarine(Path.Combine(SaveUtil.TempPath, "map.sub"), ""); + GameMain.GameSession = new GameSession(selectedSub, saveNameBox.Text, GameModePreset.list.Find(gm => gm.Name == "Single Player")); (GameMain.GameSession.gameMode as SinglePlayerMode).GenerateMap(seedBox.Text); diff --git a/Subsurface/Source/Screens/NetLobbyScreen.cs b/Subsurface/Source/Screens/NetLobbyScreen.cs index 4a6958866..32f10f94a 100644 --- a/Subsurface/Source/Screens/NetLobbyScreen.cs +++ b/Subsurface/Source/Screens/NetLobbyScreen.cs @@ -859,7 +859,7 @@ namespace Barotrauma } else { - subList.Select(sub); + subList.Select(sub, true); //map.Load(); return true; } @@ -950,7 +950,7 @@ namespace Barotrauma if (!string.IsNullOrWhiteSpace(mapName) && !GameMain.NetworkMember.Voting.AllowSubVoting) TrySelectSub(mapName, md5Hash); - if (!GameMain.NetworkMember.Voting.AllowModeVoting) modeList.Select(modeIndex); + if (!GameMain.NetworkMember.Voting.AllowModeVoting) modeList.Select(modeIndex, true); autoRestartBox.Selected = autoRestart; autoRestartTimer = restartTimer; diff --git a/Subsurface/Source/Sounds/Sound.cs b/Subsurface/Source/Sounds/Sound.cs index 694d053c0..6ae2bb627 100644 --- a/Subsurface/Source/Sounds/Sound.cs +++ b/Subsurface/Source/Sounds/Sound.cs @@ -65,7 +65,7 @@ namespace Barotrauma public int AlBufferId { - get { return oggSound.AlBufferId; } + get { return oggSound==null ? -1 : oggSound.AlBufferId; } } public static void Init() @@ -260,7 +260,7 @@ namespace Barotrauma //System.Diagnostics.Debug.WriteLine("Removing sound " + filePath + " (buffer id" + AlBufferId + ")"); SoundManager.ClearAlSource(AlBufferId); - oggSound.Dispose(); + if (oggSound!=null) oggSound.Dispose(); } diff --git a/Subsurface/Source/Sounds/SoundPlayer.cs b/Subsurface/Source/Sounds/SoundPlayer.cs index 69502c446..bc9d7529f 100644 --- a/Subsurface/Source/Sounds/SoundPlayer.cs +++ b/Subsurface/Source/Sounds/SoundPlayer.cs @@ -240,7 +240,7 @@ namespace Barotrauma { suitableMusic = musicClips.Where(x => x != null && x.type == OverrideMusicType).ToList(); } - else if (Submarine.Loaded!=null && Submarine.Loaded.Position.Y x != null && x.type == "deep").ToList(); } @@ -302,17 +302,8 @@ namespace Barotrauma int selectedSound = Rand.Int(sounds.Count()); - int i = 0; - foreach (var s in sounds) - { - if (i == selectedSound) - { - s.sound.Play(1.0f, range, position); - Debug.WriteLine("playing: " + s.sound); - return; - } - i++; - } + sounds[selectedSound].sound.Play(1.0f, range, position); + Debug.WriteLine("playing: " + sounds[selectedSound].sound); } } diff --git a/Subsurface/Source/Utils/SaveUtil.cs b/Subsurface/Source/Utils/SaveUtil.cs index abfd0e901..8140c3ed8 100644 --- a/Subsurface/Source/Utils/SaveUtil.cs +++ b/Subsurface/Source/Utils/SaveUtil.cs @@ -14,18 +14,34 @@ namespace Barotrauma public delegate void ProgressDelegate(string sMessage); + public static string TempPath + { + get { return Path.Combine(SaveFolder, "temp"); } + } + public static void SaveGame(string fileName) { fileName = Path.Combine(SaveFolder, fileName); string tempPath = Path.Combine(SaveFolder, "temp"); - if (Directory.Exists(tempPath)) + //if (Directory.Exists(tempPath)) + //{ + // Directory.Delete(tempPath, true); + //} + + if (!Directory.Exists(tempPath)) { - Directory.Delete(tempPath, true); + // DecompressToDirectory(fileName, tempPath, null); + //} + //else + //{ + Directory.CreateDirectory(tempPath); } - Directory.CreateDirectory(tempPath); + + + // //Directory.CreateDirectory(Path.GetDirectoryName(filePath) + "\\temp"); try @@ -34,10 +50,6 @@ namespace Barotrauma { Submarine.Loaded.SaveAs(Path.Combine(tempPath, "map.sub")); } - else - { - File.Copy(GameMain.GameSession.Submarine.FilePath, Path.Combine(tempPath, "map.sub")); - } } catch (Exception e) { @@ -68,12 +80,11 @@ namespace Barotrauma public static void LoadGame(string fileName) { string filePath = Path.Combine(SaveFolder, fileName+".save"); - string tempPath = Path.Combine(SaveFolder, "temp"); - DecompressToDirectory(filePath, tempPath, null); + DecompressToDirectory(filePath, TempPath, null); - Submarine selectedMap = new Submarine(Path.Combine(tempPath, "map.sub"), "");// Submarine.Load(); - GameMain.GameSession = new GameSession(selectedMap, fileName, Path.Combine(tempPath, "gamesession.xml")); + Submarine selectedMap = new Submarine(Path.Combine(TempPath, "map.sub"), "");// Submarine.Load(); + GameMain.GameSession = new GameSession(selectedMap, fileName, Path.Combine(TempPath, "gamesession.xml")); //Directory.Delete(tempPath, true); } @@ -84,7 +95,14 @@ namespace Barotrauma string tempPath = Path.Combine(SaveFolder, "temp"); - DecompressToDirectory(filePath, tempPath, null); + try + { + DecompressToDirectory(filePath, tempPath, null); + } + catch + { + return null; + } return ToolBox.TryLoadXml(Path.Combine(tempPath, "gamesession.xml")); } diff --git a/Subsurface/readme.txt b/Subsurface/readme.txt index c30bff76f..87ad82f09 100644 --- a/Subsurface/readme.txt +++ b/Subsurface/readme.txt @@ -47,7 +47,7 @@ Graphics - James Bear ("Moonsaber99") ------------------------------------------------------------------------ -"Enter the Maze", "Simplex", "Unseen Horrors" +"The Descent", "Enter the Maze", "Road to Hell", "Simplex", "Unseen Horrors" Kevin MacLeod (incompetech.com) Licensed under Creative Commons: By Attribution 3.0 http://creativecommons.org/licenses/by/3.0/ diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index 01a0438d82b67d745acb7ce89f29fea93dded080..807cd1d1bc3db50ea6d5c2192c18859b4f5bcd9c 100644 GIT binary patch delta 17959 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 GZ~i}(;anjA delta 18645 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 b0$Jqd(}Pw@nqao0rx(HLYs7(tSn~cCq;nJr