From 95a1d84eb95c6e2e4fe7f2aa86c81bd37663a31f Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 8 May 2020 21:51:17 -0400 Subject: [PATCH] Support for weather in rules / Sector weather --- .../revisions/BuilderUnitEntity/0.json | 1 - .../resources/revisions/BulletEntity/0.json | 1 - .../CommanderUnitWaterMoveEntity/0.json | 1 - .../resources/revisions/DecalEntity/0.json | 1 - .../resources/revisions/EffectEntity/0.json | 1 - .../resources/revisions/FireEntity/0.json | 1 - .../resources/revisions/LegsUnitEntity/0.json | 1 - .../revisions/MinerUnitEntity/0.json | 1 - .../resources/revisions/PlayerEntity/0.json | 1 - .../resources/revisions/PlayerEntity/1.json | 1 - .../resources/revisions/PuddleEntity/0.json | 1 - .../resources/revisions/TileEntity/0.json | 1 - .../revisions/TrailUnitEntity/0.json | 1 - .../resources/revisions/UnitEntity/0.json | 1 - .../revisions/UnitWaterMoveEntity/0.json | 1 - .../resources/revisions/WeatherEntity/0.json | 1 - .../resources/revisions/WeatherEntity/1.json | 1 - .../resources/revisions/WeatherEntity/2.json | 1 - core/assets/planets/TODO.dat | Bin 22529 -> 22523 bytes core/src/mindustry/core/Logic.java | 18 +++++ core/src/mindustry/core/World.java | 20 +++++- .../entities/bullet/MissileBulletType.java | 4 +- core/src/mindustry/entities/def/DrawComp.java | 1 + core/src/mindustry/game/Rules.java | 3 + core/src/mindustry/game/Universe.java | 4 +- core/src/mindustry/io/JsonIO.java | 14 ++++ core/src/mindustry/io/SaveVersion.java | 2 +- core/src/mindustry/type/Sector.java | 6 +- core/src/mindustry/type/Weather.java | 68 ++++++++++++++++-- .../mindustry/tools/SectorDataGenerator.java | 12 ++++ 30 files changed, 141 insertions(+), 29 deletions(-) delete mode 100644 annotations/src/main/resources/revisions/BuilderUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/BulletEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/DecalEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/EffectEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/FireEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/LegsUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/MinerUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/PlayerEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/PlayerEntity/1.json delete mode 100644 annotations/src/main/resources/revisions/PuddleEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/TileEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/TrailUnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/UnitEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/UnitWaterMoveEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/WeatherEntity/0.json delete mode 100644 annotations/src/main/resources/revisions/WeatherEntity/1.json delete mode 100644 annotations/src/main/resources/revisions/WeatherEntity/2.json diff --git a/annotations/src/main/resources/revisions/BuilderUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderUnitEntity/0.json deleted file mode 100644 index 010ca755c5..0000000000 --- a/annotations/src/main/resources/revisions/BuilderUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BulletEntity/0.json b/annotations/src/main/resources/revisions/BulletEntity/0.json deleted file mode 100644 index 576dffb934..0000000000 --- a/annotations/src/main/resources/revisions/BulletEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:damage,type:float,size:4},{name:data,type:java.lang.Object,size:-1},{name:lifetime,type:float,size:4},{name:team,type:mindustry.game.Team,size:-1},{name:time,type:float,size:4},{name:type,type:mindustry.entities.bullet.BulletType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json b/annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json deleted file mode 100644 index 010ca755c5..0000000000 --- a/annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/DecalEntity/0.json b/annotations/src/main/resources/revisions/DecalEntity/0.json deleted file mode 100644 index b8d564d18c..0000000000 --- a/annotations/src/main/resources/revisions/DecalEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:color,type:arc.graphics.Color,size:-1},{name:lifetime,type:float,size:4},{name:rotation,type:float,size:4},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/EffectEntity/0.json b/annotations/src/main/resources/revisions/EffectEntity/0.json deleted file mode 100644 index 4e23d76400..0000000000 --- a/annotations/src/main/resources/revisions/EffectEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:color,type:arc.graphics.Color,size:-1},{name:data,type:java.lang.Object,size:-1},{name:lifetime,type:float,size:4},{name:offsetX,type:float,size:4},{name:offsetY,type:float,size:4},{name:rotation,type:float,size:4},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/FireEntity/0.json b/annotations/src/main/resources/revisions/FireEntity/0.json deleted file mode 100644 index a5423a835b..0000000000 --- a/annotations/src/main/resources/revisions/FireEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:baseFlammability,type:float,size:4},{name:block,type:mindustry.world.Block,size:-1},{name:lifetime,type:float,size:4},{name:puddleFlammability,type:float,size:4},{name:tile,type:mindustry.world.Tile,size:-1},{name:time,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/LegsUnitEntity/0.json b/annotations/src/main/resources/revisions/LegsUnitEntity/0.json deleted file mode 100644 index 40c3cdbcdf..0000000000 --- a/annotations/src/main/resources/revisions/LegsUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:baseRotation,type:float,size:4},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/MinerUnitEntity/0.json b/annotations/src/main/resources/revisions/MinerUnitEntity/0.json deleted file mode 100644 index 0f5535c862..0000000000 --- a/annotations/src/main/resources/revisions/MinerUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/PlayerEntity/0.json b/annotations/src/main/resources/revisions/PlayerEntity/0.json deleted file mode 100644 index 5b9d12787d..0000000000 --- a/annotations/src/main/resources/revisions/PlayerEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:admin,type:boolean,size:1},{name:color,type:arc.graphics.Color,size:-1},{name:lastText,type:java.lang.String,size:-1},{name:mouseX,type:float,size:4},{name:mouseY,type:float,size:4},{name:name,type:java.lang.String,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:textFadeTime,type:float,size:4},{name:typing,type:boolean,size:1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/PlayerEntity/1.json b/annotations/src/main/resources/revisions/PlayerEntity/1.json deleted file mode 100644 index ed43d8146e..0000000000 --- a/annotations/src/main/resources/revisions/PlayerEntity/1.json +++ /dev/null @@ -1 +0,0 @@ -{version:1,fields:[{name:admin,type:boolean,size:1},{name:color,type:arc.graphics.Color,size:-1},{name:deathTimer,type:float,size:4},{name:lastText,type:java.lang.String,size:-1},{name:mouseX,type:float,size:4},{name:mouseY,type:float,size:4},{name:name,type:java.lang.String,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:textFadeTime,type:float,size:4},{name:typing,type:boolean,size:1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/PuddleEntity/0.json b/annotations/src/main/resources/revisions/PuddleEntity/0.json deleted file mode 100644 index 09114ed8ea..0000000000 --- a/annotations/src/main/resources/revisions/PuddleEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:accepting,type:float,size:4},{name:amount,type:float,size:4},{name:generation,type:int,size:4},{name:lastRipple,type:float,size:4},{name:liquid,type:mindustry.type.Liquid,size:-1},{name:tile,type:mindustry.world.Tile,size:-1},{name:updateTime,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/TileEntity/0.json b/annotations/src/main/resources/revisions/TileEntity/0.json deleted file mode 100644 index 2e02b6b8d2..0000000000 --- a/annotations/src/main/resources/revisions/TileEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:health,type:float,size:4},{name:team,type:mindustry.game.Team,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/TrailUnitEntity/0.json b/annotations/src/main/resources/revisions/TrailUnitEntity/0.json deleted file mode 100644 index 010ca755c5..0000000000 --- a/annotations/src/main/resources/revisions/TrailUnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/UnitEntity/0.json b/annotations/src/main/resources/revisions/UnitEntity/0.json deleted file mode 100644 index 010ca755c5..0000000000 --- a/annotations/src/main/resources/revisions/UnitEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/UnitWaterMoveEntity/0.json b/annotations/src/main/resources/revisions/UnitWaterMoveEntity/0.json deleted file mode 100644 index 010ca755c5..0000000000 --- a/annotations/src/main/resources/revisions/UnitWaterMoveEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/WeatherEntity/0.json b/annotations/src/main/resources/revisions/WeatherEntity/0.json deleted file mode 100644 index 9a76fbe28e..0000000000 --- a/annotations/src/main/resources/revisions/WeatherEntity/0.json +++ /dev/null @@ -1 +0,0 @@ -{fields:[{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/WeatherEntity/1.json b/annotations/src/main/resources/revisions/WeatherEntity/1.json deleted file mode 100644 index f4e8c1ac58..0000000000 --- a/annotations/src/main/resources/revisions/WeatherEntity/1.json +++ /dev/null @@ -1 +0,0 @@ -{version:1,fields:[{name:intensity,type:float,size:4},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/WeatherEntity/2.json b/annotations/src/main/resources/revisions/WeatherEntity/2.json deleted file mode 100644 index 81211ecea6..0000000000 --- a/annotations/src/main/resources/revisions/WeatherEntity/2.json +++ /dev/null @@ -1 +0,0 @@ -{version:2,fields:[{name:intensity,type:float,size:4},{name:opacity,type:float,size:4},{name:weather,type:mindustry.type.Weather,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]} \ No newline at end of file diff --git a/core/assets/planets/TODO.dat b/core/assets/planets/TODO.dat index bf5839b3cb15c2790913da71e6e0ce64958cdb34..d2d0e1b30a964329867128e37311d542e2f7d18b 100644 GIT binary patch delta 7036 zcmZqN!1#MT;{@eY?cWTl3=I6b41Np@j2jsO85kIK8T=U-7!EMFGcYi$X7FHOU~pp) zVPIe|WME)mVqj(f0Y(M}77)$A2GXwmi$RfrL6r?;2$K*-0w zV#LTaxzJD8kOQPx#2BPe=p%y?0|VzI25|-k_9l>ahTkBK45vVbFdPPJcb)u!UBR3a zq|$FSgBSw?^A?6+1_q|73_%PGOd24Sj2l6E8E1j?GID@?0oB_x`Jji?n5W2@;&%nT>KG}{*lT{Jqv&jo}r6;#D`4}cLs53Aqy#>j$ZUULk z!~wF2@ejyc#%&-w7+!F^yCk$EWD>d=JASxOk!I#nUPIgG7_xY9prOHV~}}_ zf*>;(PER&ula;RnB?&nhP&kSyGpI2zaE3EzFfcIh1>0{vIhReG@!{lFHXZX;kQ+Jq zK<2P50-HGxti}~&CX*A$bxaB%w=*sV+0Muewq?&`LpJfr|Jm3Kzk|Xs9GnD&RX~ZG z=LlF2H^>ymyCBmUA<6L}Sm!=a5}X{yzDtz{qlo=f+7h20tuH*36b^`fJD-C2elO)KsjDaBg89hLDGTMS|I0Q10L1FSmR@up- zoJx$$;N%+2`HYbX9I^pippXTH@ocVG{Th&+tlvRyVciDuGov5KbcWj?(-}5{%w^~R zn;QU5+J%0?ldZTVlwX2e!n_V7&!`Vl%cug@X9)@eP^x2Kn*7mLa&jNH4Q>$&Fl6X5egCHUnh8?lX{^c|1WTFsFfB!Sn)TCQ}{Q{70a$U<9Xi#>s{{ z($<_HP4gFlyq<3dvQYge$O9sbAd5M_f(&4o05Xgr3uFvK7|0kvg}7eDj9r19-G|BE2Oy%DAafa`KxQ%Q1G`~2$PR`XVAXBl09E7@Q{@J! zc2fh{V3-LqTQnb(2-wzw5-nRD$P{MB$^Us}Cx6nGo@~yi2MJPbc91@ep2YaAEP74eT&#a1)@JYe6ZB zy=ZcYpgv>AmXT$0V6f!mOF|}KmbADX z1B0>=$RwF5AhWrcLFO_4oNOs9%WD8Kk6{v6ckbkkjPjG4ge}1OB(=f5)A<9^Bl891 z9@euUovh$8n#ms&GE5d=m)w~AUs#rLIw(vg+lnNZ9|8G9ffJ-tVj9TZ%&R~;nG-;6 zWxN2gld&5Vri>0?{mLM-7+y`zQIeSafrVr87ZEE^X)U5SIY2Z*m>cBw>|dbpmCpyM zXY!uBTU41>1?+0Dn;29l^V&#F{x8ZVxdLQ2zcI*e&beT_bHI8&OqLT9=MDwwVdP+7 zU|^Z-ASPp;4pJwc0&*P-J4iL-c93dDBe3fxKHV%9C43O1 zpZ6|EKbsRsCsWR31#xA@Ba;iQWhN(xa|!PNxnA%iIQ+ao>X>Ivt`(OChq0WL$sLe$ zWq*OBCHH`=V|oWRX4mA4;^KlSV5|RwE&U31^g>;+$@~&*<_|#@OS*sz=amE*%hCvP zAmeI~ZblxkzV9IO7`}kK#ZUz{BMMY_oAZHe)0YO>ta=k1tUo}evG{{>B=ZAME@a{d znaubFY}##*`HZJ0FOZOB?FG96RLI|u;Ni6dYOjGRg9K?d=Sq+X*5^Tb1)4!VXVCzuXF3n^ zKa)1tG#QZV825rr+W_({qXF2Zmq7M1=zyd3r1WKQxsmN5NS09vWC8;? zD>M88napruvZJgxYXmfer6*U&YC@`3Rd80+as|1V_X5a=TvtKy!=(v|D@Jg`g0W%p zU0HF?day~l3~G}NS>+~6%kfydfozrw0I8Qa19BtdPq2HRf!xlx6671kSs*tuI)UBZ z1va4t9Cx62u8;#&^&r*)R@TYeO1Z?|#P?}-f0Je8I$S;g)AeS&)1i6Z#9_)rpu0yxosbicxxj{jev48SBg|&tyApg6Z1cj==WspiXNK@km*d|C(eH(1XEF zui-+FA0#?JCUA;@%w&!Q>pcxJjnNCFm(dJlCc|~GX{jI+Cif_T>RM2!UR0`KWC8U$ zCMPO`8c@@eLsh{cs`ejbvH&;*vi%3e3e#GUX-wce&crlXKt-JMGuX__4E~b^trRB* zs>JfDfpn=GfWn03*yP}hd5%dN^nH;4Kau}#+SfoB*@+>G~ zxgUZY&bA6HZm=mEU%@^eG6>kDX`BKMdT)DYk_N!blKbVb5eILsM1_aCp`jO4|Ma6+tW)L5^if z1{FBWhe5V7m4i%z_Q0b+&SU^L4;U7MJjBoo_HOlLO=}q)hczH=@}EJG!Fd^^l&Kix zSf&WD5j#N|7$J?xQL63*ds$WXXFVFDUAPLYH|8NH>!VD2$mnC)XG&Gj0a8 zQYP;;j170`EXG=}X-pvV89sqr%5WT%ut8nbNr9}BXPAWwvw}1!1c8j< z3j=w8*?y9F4kUypH=8dNegkr;+8$6i%I^l*BPTc6+CrB1D@ZZJ1F+w`!42Jd3pPhz zkP6$?AVb;8Kzi7~eNtwK(cq3d({GSZnR-F)Vaf%$kVyn&3L`(*ZJHwAkRcoL|z+WqUMyAcW)`5(+As`dAXM=3w7XSqT*LskBY{?+|n2kU-F)M=I3CkOdyvsTm$K3xD3+Cum?1(H+i2e zq@B3iy$cj((jP#f#pwug5ywW5oy;~MJxsU2rnG@v#H0i=ixJ#iVE6!XDMJ^??F`o7 zko#yWH(Ag=!c-Du9tXH3$0z_+^%P_h!#$90h8&Pd3?U#>83I6lX7B~;-WUw-lo=fb zxj-Ntl&Lv;K)P9{PrhJZ2W?-00x-)#m~qMEItOW}*ainNMrLqZ;erwC@b18F9ko%kpK

(5#(zT8;~#9*+D9q4uNzrwS!F%2e}n8F2S&H zawC`g7x$Rz$VATzkYqZ-WMijxW4En<2J(#_-s3QHyfkWUyVfLy`o z4YHXb2h_a<4;}hAhw^5De9Z^R`*oAoIafepb+VO<2Go}UTx^r;UBFEM1!;>2W>6IC z+yFZOJeJEd735^*UU1<94sgbsAP+Hu>n}!iu+?gl8C{iB>^^~9V5kR@W~v8iV|)Yh zH3OtiwGEtH0~MqvC%H~y1P?5Ma;vc07h7q7@!RBo?w~RO)c9%f05vW^O```MAfpsTWaPn};baj|V94r#94Dd=GLP8+ zWCpYB+*#BUw8Rvn09tm;)Bcvw}8Bc)pl8@mqU#0AV)B~n=Ig$08XbbWWj@p4B$a;25_=t z*aKE$3m&cxRFE)NVqnm(2BkaI4v=S6LqYBn-UITozy`1f!8wTW0LZP3;Gu9vb_S2h ze4d(<-}%SdSpNb!OeqAUjZ+HbFeX<}C@?Mnd5Cc`$Oy)Eu;zTQuRees0O^`vbdr{} zV_>ja3<@TtB#=B?6G#Ws3XpE5p2_B|;I56- zZjcK&zJQ$1Vg`1B1IQ%CM3700;LbE7c$}EwCMZ2H%mulIVLI3y5g?B;_=8%l?%W`@ z=T(qte8C|9uxo+TGoJ;!MHOTkq+*ARWiu9n%wbdmn{xzYBSS2>$P5gYR<>hcNUsB# zB=sF6!>s`FAsZvuJaA5A)|~t*NS4tEJfWf#tOxGB#Dfd5F3}(c2F6HGQOg(!vXx;w z*xZ1S07jO{3qzEg&w@;r4h5Mh5ehP&c|OSZOn*VXhjy`Nf$V}b85kqLE)4{mwFvCq z$>8xb)lg7>CNNl9T#13fXd1}RTAU#BSgwHmoHuzwsHC7j0|Vnqkd2U3&TtVFT9dDb z&XaNy1_{e&fV8lKhaZ{x!5TRx_lJoyZUQSj5;hU!Z17kRtA$k*NDCV{RG9aHLY%n< v?CLGxR5K0aMn-Tk&sYw2HDpY*6f`r#Eylp$0dAW+FP?lkT$6Pos7M3=5YWpm delta 6947 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 sector.planet.generator.generate(tiles, sector)); } + private void setSectorRules(Sector sector){ + state.map = new Map(StringMap.of("name", sector.planet.localizedName + "; Sector " + sector.id)); + state.rules.sector = sector; + + if(sector.is(SectorAttribute.rainy)){ + state.rules.weather.add(new WeatherEntry(Weathers.rain)); + } + + if(sector.is(SectorAttribute.snowy)){ + state.rules.weather.add(new WeatherEntry(Weathers.snow)); + } + } + public void loadMap(Map map){ loadMap(map, new Rules()); } diff --git a/core/src/mindustry/entities/bullet/MissileBulletType.java b/core/src/mindustry/entities/bullet/MissileBulletType.java index 296509c9bf..c6da508c66 100644 --- a/core/src/mindustry/entities/bullet/MissileBulletType.java +++ b/core/src/mindustry/entities/bullet/MissileBulletType.java @@ -10,7 +10,7 @@ import mindustry.graphics.Pal; public class MissileBulletType extends BasicBulletType{ protected Color trailColor = Pal.missileYellowBack; - protected float weaveScale = 0f; + protected float weaveScale = 1f; protected float weaveMag = -1f; public MissileBulletType(float speed, float damage, String bulletSprite){ @@ -34,7 +34,7 @@ public class MissileBulletType extends BasicBulletType{ } if(weaveMag > 0){ - b.vel().rotate(Mathf.sin(Time.time() + b.id() * 442, weaveScale, weaveMag) * Time.delta()); + b.vel().rotate(Mathf.sin(Time.time() + b.id() * 3, weaveScale, weaveMag) * Time.delta()); } } } diff --git a/core/src/mindustry/entities/def/DrawComp.java b/core/src/mindustry/entities/def/DrawComp.java index d94de2d4df..fa5e06285b 100644 --- a/core/src/mindustry/entities/def/DrawComp.java +++ b/core/src/mindustry/entities/def/DrawComp.java @@ -5,6 +5,7 @@ import mindustry.gen.*; @Component abstract class DrawComp implements Posc{ + abstract float clipSize(); void draw(){ diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 2eee202e11..d00759cbd8 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -7,6 +7,7 @@ import arc.graphics.*; import mindustry.content.*; import mindustry.io.*; import mindustry.type.*; +import mindustry.type.Weather.*; import mindustry.world.*; /** @@ -82,6 +83,8 @@ public class Rules{ public boolean drawDarkness = true; /** Starting items put in cores */ public Array loadout = Array.with(ItemStack.with(Items.copper, 100)); + /** Weather events that occur here. */ + public Array weather = new Array<>(1); /** Blocks that cannot be placed. */ public ObjectSet bannedBlocks = new ObjectSet<>(); /** Whether everything is dark. Enables lights. Experimental. */ diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 94b0d2d99d..0cdec7b616 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -6,8 +6,9 @@ import arc.util.*; import mindustry.content.*; import mindustry.type.*; -import static mindustry.Vars.*; +import static mindustry.Vars.state; +/** Updates the campaign universe. Has no relevance to other gamemodes. */ public class Universe{ private long seconds; private float secondCounter; @@ -48,6 +49,7 @@ public class Universe{ //update sector light float light = state.getSector().getLight(); float alpha = Mathf.clamp(Mathf.map(light, 0f, 0.8f, 0.1f, 1f)); + //assign and map so darkness is not 100% dark state.rules.ambientLight.a = 1f - alpha; state.rules.lighting = !Mathf.equal(alpha, 1f); diff --git a/core/src/mindustry/io/JsonIO.java b/core/src/mindustry/io/JsonIO.java index 056d182812..9809effd95 100644 --- a/core/src/mindustry/io/JsonIO.java +++ b/core/src/mindustry/io/JsonIO.java @@ -68,6 +68,8 @@ public class JsonIO{ json.setElementType(Rules.class, "spawns", SpawnGroup.class); json.setElementType(Rules.class, "loadout", ItemStack.class); + //TODO this is terrible + json.setSerializer(Sector.class, new Serializer(){ @Override public void write(Json json, Sector object, Class knownType){ @@ -131,6 +133,18 @@ public class JsonIO{ } }); + json.setSerializer(Weather.class, new Serializer(){ + @Override + public void write(Json json, Weather object, Class knownType){ + json.writeValue(object.name); + } + + @Override + public Weather read(Json json, JsonValue jsonData, Class type){ + return Vars.content.getByName(ContentType.weather, jsonData.asString()); + } + }); + json.setSerializer(ItemStack.class, new Serializer(){ @Override public void write(Json json, ItemStack object, Class knownType){ diff --git a/core/src/mindustry/io/SaveVersion.java b/core/src/mindustry/io/SaveVersion.java index 8166af6feb..adacd2b333 100644 --- a/core/src/mindustry/io/SaveVersion.java +++ b/core/src/mindustry/io/SaveVersion.java @@ -241,7 +241,7 @@ public abstract class SaveVersion extends SaveFileReader{ Array data = state.teams.getActive(); stream.writeInt(data.size); for(TeamData team : data){ - stream.writeInt((int)team.team.id); + stream.writeInt(team.team.id); stream.writeInt(team.brokenBlocks.size); for(BrokenBlock block : team.brokenBlocks){ stream.writeShort(block.x); diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index 7f32f6d437..af90470e44 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -171,6 +171,10 @@ public class Sector{ public enum SectorAttribute{ /** Requires naval technology to land on, e.g. mostly water */ - naval + naval, + /** Has rain. */ + rainy, + /** Has snow. */ + snowy } } diff --git a/core/src/mindustry/type/Weather.java b/core/src/mindustry/type/Weather.java index 33e5d6f379..04aae8ec42 100644 --- a/core/src/mindustry/type/Weather.java +++ b/core/src/mindustry/type/Weather.java @@ -3,6 +3,7 @@ package mindustry.type; import arc.func.*; import arc.graphics.g2d.*; import arc.math.*; +import arc.util.*; import mindustry.annotations.Annotations.*; import mindustry.ctype.*; import mindustry.gen.*; @@ -11,7 +12,10 @@ import mindustry.graphics.*; import static mindustry.Vars.renderer; public abstract class Weather extends MappableContent{ - protected float duration = 100f; + /** Default duration of this weather event in ticks. */ + public float duration = 15f * Time.toMinutes; + + //internals protected Rand rand = new Rand(); protected Prov type = WeatherEntity::create; @@ -24,10 +28,25 @@ public abstract class Weather extends MappableContent{ super(name); } - public void create(){ + public Weatherc create(){ + return create(1f); + } + + public Weatherc create(float intensity){ + return create(intensity, duration); + } + + public Weatherc create(float intensity, float duration){ Weatherc entity = type.get(); + entity.intensity(intensity); entity.init(this); + entity.life(duration); entity.add(); + return entity; + } + + public boolean isActive(){ + return Groups.weather.find(w -> w.weather() == this) != null; } public void remove(){ @@ -48,11 +67,44 @@ public abstract class Weather extends MappableContent{ return ContentType.weather; } + public static class WeatherEntry{ + /** The type of weather used. */ + public Weather weather; + /** Minimum and maximum spacing between weather events. Does not include the time of the event itself. */ + public float minFrequency, maxFrequency, minDuration, maxDuration; + /** Cooldown time before the next weather event takes place. */ + public float cooldown; + /** Intensity of the weather produced. */ + public float intensity = 1f; + + /** Creates a weather entry with some approximate weather values. */ + public WeatherEntry(Weather weather){ + this(weather, weather.duration/2f, weather.duration * 1.5f, weather.duration/2f, weather.duration * 1.5f); + } + + public WeatherEntry(Weather weather, float minFrequency, float maxFrequency, float minDuration, float maxDuration){ + this.weather = weather; + this.minFrequency = minFrequency; + this.maxFrequency = maxFrequency; + this.minDuration = minDuration; + this.maxDuration = maxDuration; + //specifies cooldown to something random + this.cooldown = Mathf.random(minFrequency, maxFrequency); + } + + //mods + public WeatherEntry(){ + + } + } + @EntityDef(value = {Weatherc.class}, pooled = true, isFinal = false) @Component - abstract class WeatherComp implements Posc, Drawc{ + abstract class WeatherComp implements Drawc{ + private static final float fadeTime = 60 * 4; + Weather weather; - float intensity = 1f, opacity = 1f; + float intensity = 1f, opacity = 1f, life; void init(Weather weather){ this.weather = weather; @@ -60,6 +112,14 @@ public abstract class Weather extends MappableContent{ @Override public void update(){ + if(life < fadeTime){ + opacity = life / fadeTime; + }else{ + opacity = Mathf.lerpDelta(opacity, 1f, 0.02f); + } + + life -= Time.delta(); + weather.update((Weatherc)this); } diff --git a/tools/src/mindustry/tools/SectorDataGenerator.java b/tools/src/mindustry/tools/SectorDataGenerator.java index 59b6126ed6..144734f6b0 100644 --- a/tools/src/mindustry/tools/SectorDataGenerator.java +++ b/tools/src/mindustry/tools/SectorDataGenerator.java @@ -117,6 +117,18 @@ public class SectorDataGenerator{ data.floors[i] = entries.get(i).key; } + //TODO bad code + boolean hasSnow = data.floors[0].name.contains("ice") || data.floors[0].name.contains("snow"); + boolean hasRain = !hasSnow && data.floors[0].name.contains("water"); + + if(hasSnow){ + data.attributes |= (1 << SectorAttribute.snowy.ordinal()); + } + + if(hasRain){ + data.attributes |= (1 << SectorAttribute.rainy.ordinal()); + } + data.resources = content.asArray().sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id))).toArray(UnlockableContent.class); //50% water -> naval attribute