From 2bb5d418369677f549e437d4874572c2e648ad3a Mon Sep 17 00:00:00 2001 From: Regalis11 Date: Wed, 14 Oct 2015 22:10:37 +0300 Subject: [PATCH] Further lighting optimization, fixed (railgun) controller movement, physicsbody collisioncategory changes, command room reactor controls in Vellamo --- .../Farseer Physics MonoGame.csproj | 4 +- .../Content/Items/Electricity/lights.xml | 4 +- Subsurface/Content/Items/Weapons/railgun.xml | 2 +- Subsurface/Data/SavedSubs/Aegir Mark II.gz | Bin 10500 -> 10498 bytes Subsurface/Data/SavedSubs/Vellamo.gz | Bin 6844 -> 7252 bytes Subsurface/Source/Characters/Ragdoll.cs | 40 ++++++++++++------ Subsurface/Source/GUI/GUI.cs | 30 +++---------- .../Items/Components/Machines/Controller.cs | 32 ++++++-------- .../Items/Components/Power/PowerTransfer.cs | 3 +- .../Source/Items/Components/Power/Powered.cs | 2 +- .../Source/Items/Components/Projectile.cs | 4 +- .../Items/Components/Signal/Connection.cs | 8 ++++ .../Items/Components/Signal/LightComponent.cs | 24 +++++++++-- .../Source/Items/Components/Signal/Wire.cs | 2 +- Subsurface/Source/Items/Inventory.cs | 6 +-- Subsurface/Source/Items/Item.cs | 2 +- Subsurface/Source/Map/Levels/Level.cs | 4 +- Subsurface/Source/Map/Lights/LightManager.cs | 31 ++++++++++---- Subsurface/Source/Map/Lights/LightSource.cs | 2 +- Subsurface/Source/Networking/GameClient.cs | 2 +- Subsurface/Source/Networking/GameServer.cs | 8 ++-- Subsurface/Source/Physics/PhysicsBody.cs | 8 ++-- Subsurface/Source/Program.cs | 6 +-- Subsurface/Source/Screens/GameScreen.cs | 21 +++------ Subsurface/Source/Screens/MainMenuScreen.cs | 6 +-- Subsurface/Source/Screens/ServerListScreen.cs | 4 +- Subsurface/readme.txt | 6 +-- 27 files changed, 135 insertions(+), 126 deletions(-) diff --git a/Farseer Physics Engine 3.5/Farseer Physics MonoGame.csproj b/Farseer Physics Engine 3.5/Farseer Physics MonoGame.csproj index 9e4d977f5..aa064cac7 100644 --- a/Farseer Physics Engine 3.5/Farseer Physics MonoGame.csproj +++ b/Farseer Physics Engine 3.5/Farseer Physics MonoGame.csproj @@ -26,9 +26,9 @@ x86 true full - false + true bin\WindowsGL\Debug\ - DEBUG;TRACE;WINDOWS + TRACE;DEBUG;WINDOWS prompt 4 diff --git a/Subsurface/Content/Items/Electricity/lights.xml b/Subsurface/Content/Items/Electricity/lights.xml index 021b3179e..34d48a133 100644 --- a/Subsurface/Content/Items/Electricity/lights.xml +++ b/Subsurface/Content/Items/Electricity/lights.xml @@ -7,9 +7,9 @@ Tags="smallitem" pickdistance="150"> - + - + diff --git a/Subsurface/Content/Items/Weapons/railgun.xml b/Subsurface/Content/Items/Weapons/railgun.xml index 474b461c4..6adadcea7 100644 --- a/Subsurface/Content/Items/Weapons/railgun.xml +++ b/Subsurface/Content/Items/Weapons/railgun.xml @@ -32,7 +32,7 @@ - + diff --git a/Subsurface/Data/SavedSubs/Aegir Mark II.gz b/Subsurface/Data/SavedSubs/Aegir Mark II.gz index 615518a1cf29099d942d80cc5040c6105da03151..5daf6ece2b6b437adc9bf8ff7cd1251b29515133 100644 GIT binary patch literal 10498 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 Gs{sHk*>{Qn diff --git a/Subsurface/Data/SavedSubs/Vellamo.gz b/Subsurface/Data/SavedSubs/Vellamo.gz index 64666757dee3a5eb8432445872d457926c7cc8f4..c7013624d5a680c5c0e644af356c1cc983a5240e 100644 GIT binary patch literal 7252 zcmV-a9IN9WiwFP!000040PS5{kK4#{eh-lUAWVQfY1Zs3n;825yWZWi8+dmO+b0Hc z!2zw|&M4MU6N>UBLH>KHnwM^hY~Do8Xk@{bM;?jAV%67G)z#J2&);r8+=a<9j%IOq z7rnUn6s=a_-TGp7cP(zi&FzZ|MktkxGoSrHe8$*I?`MyB!B2`xA~+)#fBDCMn9ZKQ zO_S{+-6jR0O&TtfO|rbXO)qA@{`lfTT+EVak-oUN6r9fkIj2I-8TBq^&zdQGxVaDG zXtl{MXH=F1BwXoJZ%#c0|4{BEu~H6M08n>>ecr7ra2H$s&8)|g7AU>1(fx9ice9JE*IhI^D@3(f6l4+B^Aj%1lJs? zwc)*yjH-~~l6R7+2_&cpWQ32cazW{zh8yvpX=l6oV?jP~QFGWh-K*ayK9u#atH zzmW|yfQbOpHINDJRk=XLbg|I@5@s9)+AnS5`2ag=Wa)z))0g|LX0(9^ZajmaeSq3T z!>`a7H)6P|5W%PEAW{(qDW8KtFrj%sOVlEaUF#vtkPXm1_Ao$Iw<1b?5RQ%-UL6*> z`UIllmNceVKzqAIUb&nMyqfxz%Qcufu20t6n_D|(5e7>X>@T_##M797MfeqU0vQFe z922bw)hL%1Qnlxj_Hf5&5LA-`y=P!4jro)y8ML01AWT~Ov_(t9w>=ODtM06(r3h!ljAtu;D8>J*_ z4gFVtLbRY%GKCSFQl6&72e4F7GC>nXfMYZ|l&OMJX@)7rJ$)%PX^of|ihEu@N9pZR zd=nazAR8eFq230y>X0($u3f^A5wC)ZQ_`+gjKeUYtj-Y|IUs;ST{^0DK3R2kY}dYb z2?w0@YQ6aQD*O-?^K9EJdpdLqf;n;9HPq9R#BIW*J9OvW#ykk7D8n4G}a^f(?2U%YTD=(G=Pr zrKS^NVnLNZOuJ5MJd}V(^Vltnnlwd;iXaC?JAo!ps0t69cVVKMo-hFi5#S;;ESOJP zV<~s|VkJ9xHj~8XY8hv>R1yg+?dopXHmP=&82l1k6l>0e$DVSh|5D>)}3MM~*N*zO?I@1_Kp)@);$r(eSghYQa z8qa8qCWA{cf5+L7sYZ!uost-Qd5J||=Bdo~srSz128Regef#$8;m-Bt_$G>H+1(*w zfe8eum*1YYPgHlN5+*{{5hz|vMNkbTe@&yi{OX^yx5#h4lQ{(naNEs&vP`4JdbLjA zndbUWmT(73+2ynQ_2($Lj}nMX77`)9Qe?KT$0MxWN=`(lCwOpwk~~h*$$)fE8$x zzLhLe>In*;R0l@o6ME#rC&mEdn&c%${ZC8yQaXk29lP*}iAudAm%Z!b$B`VfCRd(1 zi*A7EtP~KMTP~lRxi!gv+9%@3M?A0kI^TP8!uOTa+y=)k{Gehqo}lnW;6y$-a^YKf zO8PXdj_(A%f9$fiawq|PlEQaQZ-{^FCSUT3)p?4-_ncPesHQhocxcss62+h3oRSjP zw1!f37@;@bO!4Z?DmkBS?fkM`t+It(FhO7RiXVXKYgWJXd3l}QqICik-A1^kg=K*7 z`Db7WbY#-=h78TfU{!*qqia$MLMWNOghWP&Dz(cGAy@*{myXnQ6y~$5WTZEM8(&kw zg`!X5K}}8rnZ> z({vr@>)<9^hs7Y5fotwJOT(KDAp9;|t#H6zSi?I_)~i*Nw2tgwf1JGxlQKj6db#*m zj_JSs{{7$H{qo0~U;pi=A7|gceEHMcw>ws=dWQ$g3U8J-akz4)g?E!8Jq9%DbiKL` zKdhozn5N<47PGG1DfahC6fbT&pWykkf_j^Aw-G=*6VTvd-WdXeARy%_K)_04(7cN4 z41wNOfSv*btb#`-&kz_0fwtAWCjtRsmDNda&eRzJL;S!=7y)Z~jr*w15Eul3lZXaI z#R^F0Wd96-CJ3B>A0VErSb;MH20=gsrvQO+NjM13eqd-Y=$`@tOdY#A2ZKZ1z)2v$ z)XVE4<1+*XL4ZAd2-tf+s5&EHpc@b;fB;cR44y;5VF*x99|6QFYR#Jwogpv)0;ez= zFr~HH3Y`7Gut?wp`~Wd6r?eF~Ltq#Lh8KPu9R#Rn*8x%QyhJnz1GP${r-=cpg%-{B zx1TZ49|PnBiUp`=Z}2-~U?>LE2_y!nl^fD6{hV8d&JbvT!0v|frw9RN+LC20@1$$9 z`56Lr2r&PNMue}oclX7VzyLt^gK*Xj7B|3aXLrl^(|QGv0Ak*EKtk`lU##N|e2Nc@ zeGHDiC4}m~8@9*3#q3F2zp}ZHkmr_fq}T;0T}7Xwm4oN0normmC^N)@w3UvYA_V$x z5<40Q_=kW%nIdMVi-3+zCy%aKN?Q!lXw8~B5D)i-PpjMG8qKo*e%r^;`M5n?Z^Gs3 zW?QE4%DFpsM-A|#0epN6A_z8jYE|vKZIVRkELo=^-g>pXTc#WB2qE(Gnv{Hy#!mD1 z@Y%%Oot%5ac>fJ~_v_6PAI9x1cz=8)%bS}v$J4S&a}Ri!2KZF_avc2zA6=cK9Qe4z zMtx5jAC$YciBr*kt8y1UsF(~NRJ6c$3_fPB*5P$jbXhTN;B=c$Tn#Kyf)=I~B}lxn z>y*`Ts=Mh_GhgNu3GC>nlTrr0-h(n`rkw?Iro#%+Jr6tBF$5lYL^$WSC7_*a9<7^Q zcgYo)c2gU^h&EJ7rhT41?Lu#cJ#{VB?9N_Vs+pegTKa7nFMkX3NK~4!ORhzVb5BO+ zrgtRKM~a+~&Yg`7ofd#dw{2*fPw#<-#+wnR!y;{^i^l*cbEc*S)G39iZa@XjpoF@E z68B=qft<}ysI~2vI0~qd3e--?Upej2&gy7oZtR>-@76~g5>PvZ4HY(=h$n8dJLI&F z#{i)@!ijo#`0okXJLLpni@kFl8L^W~tpr*lbUYfK>dD$Wy5m}9=c>q)ff{A5`21kb z@R*`-Y8qJsK2K_fPMI@%#~<7vJf6JUc=cejo*b| zG8WPG9L-vqqjJMNz6T$fHAuu|-5efEampfgr%ZRsswNgOHK)z$+Vk$p#3w7_7K_DO zY8EFDv8h?{{nHk)+g-GkcnxUS?#pURa=QsQ9wgeox4EhkvOBi-A!Kjn2~+s+YjN_i zb*crPY5YSFG-KC+3$ES^iX>cLlcPN}2X8J-N2Zy&;xjVq()k zh)=X>&~Jv1G;;_&usSDnViZ`GOVBHbm9Dfe&fa944`Wzb3`<~`)OVxoFHb%2M)GH^ zXZyHMz^hM|_G8ckc*219fHx2++JlnkVXP`EohyJoAFTI>oDS6K6o-A7{Zo&hW zCmv10ml?-s114eEDz6UYoHa}q_F|ZNifPwN3CUb9<+%^Wty@>jtY7tHIItpfa0{fK z37#re089w8Sl5rez--L$B!y6B>d}>3(JMm1>T5B2;1aSonWzUbOsN$nGeVnkCkKyD zsa=2vJV-XRQu8QpoM)$|?u(*`7@yb>nL$$Ol6gFT!{p#WLam~u00L^==Y3KXDuT0D z^q2|)5bZ4k>g8{|;SnpfOBIBGFl4G}l09xD;p4&(YR=B)jL(%fF?Rs?JhnpvuVXrl z^YWj*RHI@$Y8^Vwi2_?W@g$(m_GJ;1jvHtue?c(q(zMLCr^janZv7w+_moom;I*ex>n+o`ywPmy?+h!HW$A*+*Djzb4iPF!47<~->r#7?3F`z#H%?nxn z7y{QHR@Z-_UDjctT1|<>BH+v4*favcM~kraJY{QElYqW68XDf*WMgnQiuhRLrkoW;m|A+ z%D|iJRf>r@1Sgkqh^dtk99oAt_`zJSY)#A|VsIZ0&6w7PkTuO<*@r_bXjcG4F})0ResR1>^i6yY2E3tx+}<4SpS!K`Y(_Vi zb5@&D?C%M^+(wQZ-liNu%3vfvf^M2W<8tcNa?$6cq&gX!vTh_qGoxaltnN5pNitl9) zl$qXp5)VF^+z%9MHr6T*=641xKkV>KiB%wju7U8~4B7;)0oO{hY6LCtq3(+kdy!ns zb&s@(;ZUyY^jp=fai}Wp>i{9Z;DzTJi`L4sI7l#BUq{g{Hha@6?Z3;jX*8K-8V@Sf zA{q#?pFtKb4CS~SPm~8_&T8E-Cm2qqq{lA$DRZT)ETAY$DnzmN8^|GRzqN<6>Kh^Y z0b?<_I|RZW-^*B-{2P@NCpEQG==KLX^)by#1g^he4@tcukgpF=t%jjYTR96E9K?WJ z0@Uf1Mvlw?0`DLc9wA|FB-_q+LGl z2My~KQ!q(Y&ZO`PBoww{?5I=L3=?KrhXJs~_&6q|J<7Z}nLe(xAs{e^naw(J#AWZs zj5y|7%Z21HiED-REXcYVlXPWPmIlHzaD2f5;z*8FmU{G~*V7IUth>tJ0q0oKF9wF~ z%%pE%0)Vv-lPAFnnSyZnh~xF81VDOJ(lIm&QquVoMM<7qFbXzv_lIHQb7 zPdA)Kd(>}YVQc=*3{z_?VV$me$5<@MSJG3JdpQ!?77F@(F84jeEE74#k0Rgag>Cn zr(a-Y>-9ji4?d()%&AoHqVV$I#o$HeRNygk^?jn%R#Dj<%NsTyqSdBDK8Hi-u^%Kv>t3>b2A#axtx5EXa_HnZEc^ z&@mVD>czv@7S)S;$jcrc+5%PTM~G$P1lYKSZU^7-z$1Yq6YYNV)D`b6`mAxvgtb!4 zxtERMNm(7rkhQ*!jjWmuQ+im2tV#vp==S`O4C#ov2!AAQUY?qtT1OoZSM@s=a~n9d z_Jvb0@AN>NUh47=taI(x#j1f*JEZg))}5!6X;ywoJ>5_VJ!k#~q>Q*-(-$bo>d zsh?Xujg-sg7AWp9oSM^QF9i{E*|7XF9j7A5IhCTTNUecWViId~u6u+XjL}M0C@d$} zKe64#h#|-9yaWLeH?)PC49HoZ3*2`ga{P{xHM17FIgGsnv1~f-1ZpIHxy32CCjXGI z(D*IeTm)*Qa7*Jr2)Ot9F4hNjUZxK?)8}S3G>kcnoy7sBfAT)MuLSs+m9_doK@{LT z9=I>VeQ(T+#4aJoRr5<7T|Ugc&2~DlMRd;Ucprb`GWh0sAfCMp1Rx=PI33!1-bCR5};t@y5nf`w%w+*@x#iDCkt>R{BAv zyw&&d^{h<(74^<`2M`H}sO?7Sv{XRWq!de^QrfRDO~b`4K7&p)wPuIjCsDk(?Mw_k ze^yX`jKpJpj>Ykd9Sv^t_K{iL-S*Cw2t-Eh?rw>eEe1WsW|V$ zudmljP;W*o(8MrC#pRJ~_8WeVUtIjMy$j=u*?+A+fH>ouWgMBB;vFJEwkoAt6t+C#}CJp1%MJ8XV3RLz?`8tD5XL-E{lk02@ybSMg1+gS% z3a@V0Ytw} zhw7PYZ~VMXqi8jI8Ge8#C`DxDM{wDx^SCFcKqw8&8ayLn&OB-V!iQfdcrkdj>&{MB@t$7mWTmOz=oLI99q41cl@u(32 zb|u5}PYS_Ge0eRJum=b0I^Cv`e=84&Eo1lKpW-f8jxXIT5nDRWDZ|agnCiiw@PC0# z!aUqyjOib27?ure9JH*jBJ!f6cVYZ7e+>JuG?J$?hsCY0my3_xdGLlioBWc(LVM@2 zz|-H^1nUZh%!oSU(RVfxgRl7Eq@6qC-@;9KXKqOwp1I+ahK@TQAXu>ZlSj^OYw_g)bK~bw}id2Yd zJQ`vm$v5BKl=o$KKh(JUA&jp>b5~;S%Do4>tJO;hw>~sfDNi%T^7MFiQ@i&VPOyge zujqHzmzR9@!)m=KMzlFMjR@w=gT4l39(}oAtvBF#22Kig889bIJrV=vXtoDp;KwLk z$7Zt)vyNKB6vXiL&3fd}!}HD_cAZ5>DdYDk?aItL>`g)-dzM*azGxfI{t8wmye@1T zH^uNW7#07&yG_=gdlVct+`C$+bhvx}k<^x}tL1We3E;4s|B;+mtH-ZaH|fNx?D7c& z6~lwcvrhKW$*b@~R7_vF74&!tx9-mIDDSRHMWm+5%+lyfiigF4%~~h3fBvU0-(UR! zGQ5pKU=KeuT@$nF?~eH2ux6ds6hQ1h32Sd}x9Rozb3BGM4CCuy=9N&j-Yv2d%X>}s zPq#j!_x|Vd^O-5R(0x%|%A4rsr!TXgmkp&*RspWkC$bGzy(W&djrt+BOrp(3 z?}z?(|3ClZ`hVH~eG~d_ugB3{geR)UsexmBHR=21pUXNfWW}V8zy*>ukigOz;N!)G z6yF#U#?}kh&@#1#{fcLrP{Z=9;hq}iht;rE9>B(xxt>+LuZr1WRcuxLa}0f_Q}MTE ir<>K+-s@)HDb4d|Z?_-r!ekjofBAobI=!nt9RUFP^CS`g literal 6844 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 10.0f) + Vector2 diff = new Vector2(item.Rect.X + UserPos - torsoX, 0.0f); + + if (diff!= Vector2.Zero && diff.Length() > 10.0f) { character.AnimController.Anim = AnimController.Animation.None; - character.AnimController.TargetMovement = - new Vector2( - Math.Min(Math.Max(item.Rect.X + userPos - torsoX, -1.0f), 1.0f), - 0.0f); - character.AnimController.TargetDir = (Math.Sign(torsoX - item.Rect.X + userPos) == 1) ? Direction.Right : Direction.Left; + character.AnimController.TargetMovement = new Vector2(Math.Sign(diff.X), 0.0f); + character.AnimController.TargetDir = (Math.Sign(diff.X) == 1) ? Direction.Right : Direction.Left; return; } } + ApplyStatusEffects(ActionType.OnActive, deltaTime, character); + if (limbPositions.Count == 0) return; character.AnimController.Anim = AnimController.Animation.UsingConstruction; @@ -118,20 +117,13 @@ namespace Subsurface.Items.Components fmj.Enabled = true; fmj.WorldAnchorB = position; } - - //foreach (MapEntity e in item.linkedTo) - //{ - // Item linkedItem = e as Item; - // if (linkedItem == null) continue; - // linkedItem.Update(cam, deltaTime); - //} - + item.SendSignal(ToolBox.Vector2ToString(character.CursorPosition), "position_out"); } public override bool Use(float deltaTime, Character activator = null) { - if (character==null || activator!=character || character.SelectedConstruction != item) + if (character == null || activator != character || character.SelectedConstruction != item) { character = null; return false; diff --git a/Subsurface/Source/Items/Components/Power/PowerTransfer.cs b/Subsurface/Source/Items/Components/Power/PowerTransfer.cs index 1661d73b5..ccb6c0afa 100644 --- a/Subsurface/Source/Items/Components/Power/PowerTransfer.cs +++ b/Subsurface/Source/Items/Components/Power/PowerTransfer.cs @@ -101,9 +101,10 @@ namespace Subsurface.Items.Components foreach (Connection c in connections) { + if (!c.IsPower) continue; foreach (Connection recipient in c.Recipients) { - if (recipient == null) continue; + if (recipient == null || !recipient.IsPower) continue; Item it = recipient.Item; if (it == null) continue; diff --git a/Subsurface/Source/Items/Components/Power/Powered.cs b/Subsurface/Source/Items/Components/Power/Powered.cs index 22ff97bc9..999480755 100644 --- a/Subsurface/Source/Items/Components/Power/Powered.cs +++ b/Subsurface/Source/Items/Components/Power/Powered.cs @@ -88,7 +88,7 @@ namespace Subsurface.Items.Components public override void ReceiveSignal(string signal, Connection connection, Item sender, float power) { if (currPowerConsumption == 0.0f) voltage = 0.0f; - if (connection.Name == "power_in" || connection.Name == "power") voltage = power; + if (connection.IsPower) voltage = power; } public override void Update(float deltaTime, Camera cam) diff --git a/Subsurface/Source/Items/Components/Projectile.cs b/Subsurface/Source/Items/Components/Projectile.cs index 80197fed8..f1e2b5f17 100644 --- a/Subsurface/Source/Items/Components/Projectile.cs +++ b/Subsurface/Source/Items/Components/Projectile.cs @@ -97,7 +97,7 @@ namespace Subsurface.Items.Components item.body.FarseerBody.IsBullet = true; item.body.CollisionCategories = Physics.CollisionProjectile; - item.body.CollidesWith = Physics.CollisionCharacter | Physics.CollisionWall; + item.body.CollidesWith = Physics.CollisionCharacter | Physics.CollisionWall | Physics.CollisionLevel; item.Drop(); @@ -155,7 +155,7 @@ namespace Subsurface.Items.Components item.body.FarseerBody.IsBullet = false; item.body.CollisionCategories = Physics.CollisionMisc; - item.body.CollidesWith = Physics.CollisionWall; + item.body.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel; ignoredBodies.Clear(); diff --git a/Subsurface/Source/Items/Components/Signal/Connection.cs b/Subsurface/Source/Items/Components/Signal/Connection.cs index fadfa4262..c0b47827c 100644 --- a/Subsurface/Source/Items/Components/Signal/Connection.cs +++ b/Subsurface/Source/Items/Components/Signal/Connection.cs @@ -30,6 +30,12 @@ namespace Subsurface.Items.Components public readonly int[] wireId; + public bool IsPower + { + get; + private set; + } + public List Recipients { get @@ -69,6 +75,8 @@ namespace Subsurface.Items.Components IsOutput = (element.Name.ToString() == "output"); Name = ToolBox.GetAttributeString(element, "name", (IsOutput) ? "output" : "input"); + IsPower = Name == "power_in" || Name == "power" || Name == "power_out"; + effects = new List(); wireId = new int[MaxLinked]; diff --git a/Subsurface/Source/Items/Components/Signal/LightComponent.cs b/Subsurface/Source/Items/Components/Signal/LightComponent.cs index d9e790142..46ac7e32d 100644 --- a/Subsurface/Source/Items/Components/Signal/LightComponent.cs +++ b/Subsurface/Source/Items/Components/Signal/LightComponent.cs @@ -63,6 +63,21 @@ namespace Subsurface.Items.Components light.Position += amount; } + public override bool IsActive + { + get + { + return base.IsActive; + } + + set + { + if (base.IsActive == value) return; + base.IsActive = value; + light.Color = value ? lightColor : Color.Transparent; + } + } + public LightComponent(Item item, XElement element) : base (item, element) { @@ -122,10 +137,11 @@ namespace Subsurface.Items.Components public override void Draw(SpriteBatch spriteBatch, bool editing) { - if (!IsActive) - { - light.Color = Color.Transparent; - } + if (!editing) return; + + //Vector2 center = new Vector2(item.Rect.Center.X, -item.Rect.Y + item.Rect.Height/2.0f); + + //GUI.DrawLine(spriteBatch, center - Vector2.One * range, center + Vector2.One * range, lightColor); } public override void Remove() diff --git a/Subsurface/Source/Items/Components/Signal/Wire.cs b/Subsurface/Source/Items/Components/Signal/Wire.cs index f5e36e768..7e62b0a16 100644 --- a/Subsurface/Source/Items/Components/Signal/Wire.cs +++ b/Subsurface/Source/Items/Components/Signal/Wire.cs @@ -304,7 +304,7 @@ namespace Subsurface.Items.Components GUI.DrawRectangle(spriteBatch, new Rectangle((int)Nodes[i].X - 3, (int)-Nodes[i].Y - 3, 6, 6), Color.Red, true, 0.0f); if (GUIComponent.MouseOn != null || - Vector2.Distance(GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition), Nodes[i]) > 20.0f) + Vector2.Distance(GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition), Nodes[i]) > 10.0f) { continue; } diff --git a/Subsurface/Source/Items/Inventory.cs b/Subsurface/Source/Items/Inventory.cs index 9acced92c..17057458b 100644 --- a/Subsurface/Source/Items/Inventory.cs +++ b/Subsurface/Source/Items/Inventory.cs @@ -252,7 +252,7 @@ namespace Subsurface protected void DrawSlot(SpriteBatch spriteBatch, Rectangle rect, Item item, bool isHighLighted, bool isSubSlot) { - GUI.DrawRectangle(spriteBatch, rect, (isHighLighted ? Color.Red : Color.White)*((isSubSlot) ? 0.1f : 0.3f), true); + GUI.DrawRectangle(spriteBatch, rect, (isHighLighted ? Color.Red : Color.White) * ((isSubSlot) ? 0.1f : 0.3f), true); if (item == null) return; @@ -263,8 +263,8 @@ namespace Subsurface Vector2 pos = new Vector2(rect.X + rect.Width / 2, rect.Y - rect.Height + 20) - GUI.Font.MeasureString(item.Name) * 0.5f; pos.X = (int)pos.X; pos.Y = (int)pos.Y; - spriteBatch.DrawString(GUI.Font, item.Name + " - " + item.ID, pos - new Vector2(1.0f, 1.0f), Color.Black); - spriteBatch.DrawString(GUI.Font, item.Name + " - " + item.ID, pos, Color.White); + spriteBatch.DrawString(GUI.Font, item.Name, pos - new Vector2(1.0f, 1.0f), Color.Black); + spriteBatch.DrawString(GUI.Font, item.Name, pos, Color.White); } if (item.Condition < 100.0f) diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index d12a04d76..6145af8b5 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -587,7 +587,7 @@ namespace Subsurface foreach (ItemComponent component in components) component.Draw(spriteBatch, editing); - if (!editing || (body!=null && !body.Enabled)) + if (!editing || (body != null && !body.Enabled)) { isHighlighted = false; return; diff --git a/Subsurface/Source/Map/Levels/Level.cs b/Subsurface/Source/Map/Levels/Level.cs index 36df15671..03ce14e27 100644 --- a/Subsurface/Source/Map/Levels/Level.cs +++ b/Subsurface/Source/Map/Levels/Level.cs @@ -664,7 +664,7 @@ int currentTargetIndex = 1; edgeBody.UserData = cell; edgeBody.SleepingAllowed = false; edgeBody.BodyType = BodyType.Kinematic; - edgeBody.CollisionCategories = Physics.CollisionWall | Physics.CollisionLevel; + edgeBody.CollisionCategories = Physics.CollisionLevel; cell.body = edgeBody; bodies.Add(edgeBody); @@ -674,7 +674,7 @@ int currentTargetIndex = 1; { Body shaftBody = BodyFactory.CreateRectangle(GameMain.World, 100.0f, 10.0f, 5.0f); shaftBody.BodyType = BodyType.Kinematic; - shaftBody.CollisionCategories = Physics.CollisionWall | Physics.CollisionLevel; + shaftBody.CollisionCategories = Physics.CollisionLevel; shaftBody.SetTransform(ConvertUnits.ToSimUnits((i==0) ? startPosition : endPosition), 0.0f); shaftBody.SleepingAllowed = false; bodies.Add(shaftBody); diff --git a/Subsurface/Source/Map/Lights/LightManager.cs b/Subsurface/Source/Map/Lights/LightManager.cs index b6d3d57e9..ec7d06687 100644 --- a/Subsurface/Source/Map/Lights/LightManager.cs +++ b/Subsurface/Source/Map/Lights/LightManager.cs @@ -12,7 +12,7 @@ namespace Subsurface.Lights public Color AmbientLight; RenderTarget2D lightMap; - + private static Texture2D alphaClearTexture; private List lights; @@ -21,10 +21,10 @@ namespace Subsurface.Lights public bool LightingEnabled = true; - public RenderTarget2D LightMap - { - get { return lightMap; } - } + //public RenderTarget2D LightMap + //{ + // get { return lightMap; } + //} public LightManager(GraphicsDevice graphics) { @@ -34,7 +34,8 @@ namespace Subsurface.Lights var pp = graphics.PresentationParameters; - lightMap = new RenderTarget2D(graphics, GameMain.GraphicsWidth, GameMain.GraphicsHeight, false, + lightMap = new RenderTarget2D(graphics, + GameMain.GraphicsWidth, GameMain.GraphicsHeight, false, pp.BackBufferFormat, pp.DepthStencilFormat, pp.MultiSampleCount, RenderTargetUsage.DiscardContents); @@ -81,8 +82,10 @@ namespace Subsurface.Lights } } - public void DrawLightmap(GraphicsDevice graphics, SpriteBatch spriteBatch, Camera cam) + public void UpdateLightMap(GraphicsDevice graphics, SpriteBatch spriteBatch, Camera cam) { + if (!LightingEnabled) return; + Matrix shadowTransform = cam.ShaderTransform * Matrix.CreateOrthographic(GameMain.GraphicsWidth, GameMain.GraphicsHeight, -1, 1) * 0.5f; @@ -96,7 +99,7 @@ namespace Subsurface.Lights foreach (LightSource light in lights) { - if (light.Color.A < 0.01f || light.Range < 0.01f || light.hullsInRange.Count == 0) continue; + if (light.hullsInRange.Count == 0 || light.Color.A < 0.01f || light.Range < 1.0f) continue; if (!MathUtils.CircleIntersectsRectangle(light.Position, light.Range, viewRect)) continue; //clear alpha to 1 @@ -126,7 +129,7 @@ namespace Subsurface.Lights //foreach (LightSource light in lights) //{ - // if (light.Color.A < 0.01f || light.Range < 0.01f || light.hullsInRange.Count > 0) continue; + // if (light.hullsInRange.Count > 0 || light.Color.A < 0.01f || light.Range < 1.0f) continue; // if (!MathUtils.CircleIntersectsRectangle(light.Position, light.Range, viewRect)) continue; // light.Draw(spriteBatch); @@ -145,6 +148,16 @@ namespace Subsurface.Lights spriteBatch.Draw(alphaClearTexture, new Rectangle(0, 0,graphics.Viewport.Width, graphics.Viewport.Height), Color.White); spriteBatch.End(); } + + public void DrawLightMap(SpriteBatch spriteBatch, Camera cam) + { + if (!LightingEnabled) return; + + //multiply scene with lightmap + spriteBatch.Begin(SpriteSortMode.Immediate, CustomBlendStates.Multiplicative); + spriteBatch.Draw(lightMap, Vector2.Zero, Color.White); + spriteBatch.End(); + } } diff --git a/Subsurface/Source/Map/Lights/LightSource.cs b/Subsurface/Source/Map/Lights/LightSource.cs index d96b532c9..0ed505b0f 100644 --- a/Subsurface/Source/Map/Lights/LightSource.cs +++ b/Subsurface/Source/Map/Lights/LightSource.cs @@ -72,7 +72,7 @@ namespace Subsurface.Lights public void UpdateHullsInRange() { hullsInRange.Clear(); - if (range < 1.0f) return; + if (range < 1.0f || color.A < 0.01f) return; foreach (ConvexHull ch in ConvexHull.list) { diff --git a/Subsurface/Source/Networking/GameClient.cs b/Subsurface/Source/Networking/GameClient.cs index 10ea40173..e03f4b567 100644 --- a/Subsurface/Source/Networking/GameClient.cs +++ b/Subsurface/Source/Networking/GameClient.cs @@ -58,7 +58,7 @@ namespace Subsurface.Networking myCharacter = Character.Controlled; // Create new instance of configs. Parameter is "application Id". It has to be same on client and server. - NetPeerConfiguration config = new NetPeerConfiguration("subsurface"); + NetPeerConfiguration config = new NetPeerConfiguration("barotrauma"); #if DEBUG config.SimulatedLoss = 0.1f; diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index c23846ece..b611b4d6b 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -42,7 +42,7 @@ namespace Subsurface.Networking this.name = name; this.password = password; - config = new NetPeerConfiguration("subsurface"); + config = new NetPeerConfiguration("barotrauma"); #if DEBUG config.SimulatedLoss = 0.2f; @@ -82,7 +82,7 @@ namespace Subsurface.Networking if (config.EnableUPnP) { - server.UPnP.ForwardPort(config.Port, "subsurface"); + server.UPnP.ForwardPort(config.Port, "barotrauma"); GUIMessageBox upnpBox = new GUIMessageBox("Please wait...", "Attempting UPnP port forwarding", new string[] {"Cancel"} ); upnpBox.Buttons[0].OnClicked = upnpBox.Close; @@ -304,7 +304,7 @@ namespace Subsurface.Networking if (sender.version != GameMain.Version.ToString()) { DisconnectClient(sender, sender.name+" was unable to connect to the server (nonmatching game version)", - "Subsurface version " + GameMain.Version + " required to connect to the server (Your version: " + sender.version + ")"); + "Version " + GameMain.Version + " required to connect to the server (Your version: " + sender.version + ")"); } else if (connectedClients.Find(x => x.name == sender.name && x != sender)!=null) { @@ -460,7 +460,7 @@ namespace Subsurface.Networking } else if (version != GameMain.Version.ToString()) { - inc.SenderConnection.Deny("Subsurface version " + GameMain.Version + " required to connect to the server (Your version: " + version + ")"); + inc.SenderConnection.Deny("Version " + GameMain.Version + " required to connect to the server (Your version: " + version + ")"); DebugConsole.NewMessage(name + " couldn't join the server (wrong game version)", Color.Red); return; } diff --git a/Subsurface/Source/Physics/PhysicsBody.cs b/Subsurface/Source/Physics/PhysicsBody.cs index acb4e5834..f97ee93b6 100644 --- a/Subsurface/Source/Physics/PhysicsBody.cs +++ b/Subsurface/Source/Physics/PhysicsBody.cs @@ -220,15 +220,13 @@ namespace Subsurface this.radius = radius; dir = 1.0f; - - //items only collide with the map + body.CollisionCategories = Physics.CollisionMisc; - body.CollidesWith = Physics.CollisionWall; + body.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel; body.Friction = ToolBox.GetAttributeFloat(element, "friction", 0.3f); body.Restitution = 0.05f; - - + body.BodyType = BodyType.Dynamic; //body.AngularDamping = Limb.LimbAngularDamping; diff --git a/Subsurface/Source/Program.cs b/Subsurface/Source/Program.cs index 0b6a9b028..dca120a86 100644 --- a/Subsurface/Source/Program.cs +++ b/Subsurface/Source/Program.cs @@ -49,12 +49,12 @@ namespace Subsurface StreamWriter sw = new StreamWriter(filePath); StringBuilder sb = new StringBuilder(); - sb.AppendLine("Subsurface crash report (generated on " + DateTime.Now + ")"); + sb.AppendLine("Barotrauma crash report (generated on " + DateTime.Now + ")"); sb.AppendLine("\n"); - sb.AppendLine("Subsurface seems to have crashed. Sorry for the inconvenience! "); + sb.AppendLine("Barotrauma seems to have crashed. Sorry for the inconvenience! "); sb.AppendLine("If you'd like to help fix the bug that caused the crash, please send this file to the developers on the Undertow Games forums."); sb.AppendLine("\n"); - sb.AppendLine("Subsurface version " + GameMain.Version); + sb.AppendLine("Game version " + GameMain.Version); sb.AppendLine("Selected content package: " + GameMain.SelectedPackage.Name); sb.AppendLine("Level seed: "+ ((Level.Loaded == null) ? "no level loaded" : Level.Loaded.Seed)); sb.AppendLine("Loaded submarine: " + ((Submarine.Loaded == null) ? "none" : Submarine.Loaded.Name +" ("+Submarine.Loaded.MD5Hash+")")); diff --git a/Subsurface/Source/Screens/GameScreen.cs b/Subsurface/Source/Screens/GameScreen.cs index 113a25503..1069506b6 100644 --- a/Subsurface/Source/Screens/GameScreen.cs +++ b/Subsurface/Source/Screens/GameScreen.cs @@ -158,7 +158,8 @@ namespace Subsurface public void DrawMap(GraphicsDevice graphics, SpriteBatch spriteBatch) { - if (GameMain.LightManager.LightingEnabled) GameMain.LightManager.DrawLightmap(graphics, spriteBatch, cam); + + GameMain.LightManager.UpdateLightMap(graphics, spriteBatch, cam); //---------------------------------------------------------------------------------------- //1. draw the background, characters and the parts of the submarine that are behind them @@ -167,7 +168,6 @@ namespace Subsurface graphics.SetRenderTarget(renderTarget); graphics.Clear(new Color(11, 18, 26, 255)); - spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque, SamplerState.LinearWrap, DepthStencilState.Default, RasterizerState.CullNone); Vector2 backgroundPos = cam.Position; @@ -274,14 +274,7 @@ namespace Subsurface GameMain.GameSession.Level.SetObserverPosition(cam.WorldViewCenter); } - if (GameMain.LightManager.LightingEnabled) - { - //multiply scene with lightmap - spriteBatch.Begin(SpriteSortMode.Immediate, CustomBlendStates.Multiplicative); - spriteBatch.Draw(GameMain.LightManager.LightMap, Vector2.Zero, Color.White); - spriteBatch.End(); - } - + GameMain.LightManager.DrawLightMap(spriteBatch, cam); //---------------------------------------------------------------------------------------- //3. draw the sections of the map that are on top of the water //---------------------------------------------------------------------------------------- @@ -294,12 +287,8 @@ namespace Subsurface foreach (Character c in Character.CharacterList) c.DrawFront(spriteBatch); Submarine.DrawFront(spriteBatch); - - if (GameMain.GameSession != null && GameMain.GameSession.Level != null) - { - GameMain.GameSession.Level.Draw(spriteBatch); - //Game1.GameSession.Level.SetObserverPosition(cam.WorldViewCenter); - } + + GameMain.GameSession?.Level?.Draw(spriteBatch); spriteBatch.End(); diff --git a/Subsurface/Source/Screens/MainMenuScreen.cs b/Subsurface/Source/Screens/MainMenuScreen.cs index e9661fb7d..ed7e51ae3 100644 --- a/Subsurface/Source/Screens/MainMenuScreen.cs +++ b/Subsurface/Source/Screens/MainMenuScreen.cs @@ -2,9 +2,7 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Subsurface.Networking; -using System.IO; using System.Xml.Linq; -using System.Collections.Generic; namespace Subsurface { @@ -385,7 +383,7 @@ namespace Subsurface GUI.Draw((float)deltaTime, spriteBatch, null); - spriteBatch.DrawString(GUI.Font, "Subsurface v"+GameMain.Version, new Vector2(10, GameMain.GraphicsHeight-20), Color.White); + spriteBatch.DrawString(GUI.Font, "Barotrauma v"+GameMain.Version, new Vector2(10, GameMain.GraphicsHeight-20), Color.White); spriteBatch.End(); } @@ -410,7 +408,7 @@ namespace Subsurface GameMain.LobbyScreen.Select(); - new GUIMessageBox("Welcome to Subsurface!", "Please note that the single player mode is very unfinished at the moment; "+ + new GUIMessageBox("Welcome to Barotrauma!", "Please note that the single player mode is very unfinished at the moment; "+ "for example, the NPCs don't have an AI yet and there are only a couple of different quests to complete. The multiplayer "+ "mode should be much more enjoyable to play at the moment, so my recommendation is to try out and get a hang of the game mechanics "+ "in the single player mode and then move on to multiplayer. Have fun!\n - Regalis, the main dev of Subsurface", 400, 350); diff --git a/Subsurface/Source/Screens/ServerListScreen.cs b/Subsurface/Source/Screens/ServerListScreen.cs index 66b287a9d..d1a691daa 100644 --- a/Subsurface/Source/Screens/ServerListScreen.cs +++ b/Subsurface/Source/Screens/ServerListScreen.cs @@ -208,7 +208,7 @@ namespace Subsurface var request = new RestRequest("masterserver.php", Method.GET); - request.AddParameter("gamename", "subsurface"); // adds to POST or URL querystring based on Method + request.AddParameter("gamename", "barotrauma"); // adds to POST or URL querystring based on Method request.AddParameter("action", "listservers"); // adds to POST or URL querystring based on Method @@ -327,8 +327,6 @@ namespace Subsurface public override void Update(double deltaTime) { - - menu.Update((float)deltaTime); GUI.Update((float)deltaTime); diff --git a/Subsurface/readme.txt b/Subsurface/readme.txt index d3d4f6d62..c30bff76f 100644 --- a/Subsurface/readme.txt +++ b/Subsurface/readme.txt @@ -1,4 +1,4 @@ -SUBSURFACE +BAROTRAUMA www.undertowgames.com/subsurface Copyright © Undertow Games 2015 @@ -29,9 +29,9 @@ guide for your particular router/application on portforward.com or by practicing your google-fu skills. These are the values that you should use when forwarding a port to your -Subsurface server: +Barotrauma server: -Service/Application: subsurface +Service/Application: barotrauma External Port: The port you have selected for your server (14242 by default) Internal Port: The port you have selected for your server (14242 by default) Protocol: UDP