From 0e59a22cbecf544205c5f9918e214086800c7f15 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 24 May 2020 22:27:14 -0400 Subject: [PATCH] Respawn key --- .../annotations/entity/EntityProcess.java | 19 ++++++++++++++++ .../src/main/resources/classids.properties | 19 ++++++++++++++++ .../revisions/BlockUnitUnitEntity/0.json | 1 + .../revisions/BuilderLegsUnitEntity/0.json | 1 + .../revisions/BuilderMinerUnitEntity/0.json | 1 + .../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 + .../revisions/LaunchPayloadEntity/0.json | 1 + .../resources/revisions/LegsUnitEntity/0.json | 1 + .../revisions/MinerUnitEntity/0.json | 1 + .../resources/revisions/PlayerEntity/0.json | 1 + .../resources/revisions/PuddleEntity/0.json | 1 + .../resources/revisions/TileEntity/0.json | 1 + .../resources/revisions/UnitEntity/0.json | 1 + .../resources/revisions/WeatherEntity/0.json | 1 + .../sprites/units/vanguard-cell.png | Bin 654 -> 611 bytes core/assets/bundles/bundle.properties | 3 +++ core/src/mindustry/content/Bullets.java | 16 +++++++------ .../mindustry/entities/comp/PayloadComp.java | 11 +++++---- core/src/mindustry/input/Binding.java | 5 +++-- core/src/mindustry/input/DesktopInput.java | 21 +++++++++++++++--- core/src/mindustry/input/InputHandler.java | 10 +++++++++ 26 files changed, 105 insertions(+), 16 deletions(-) create mode 100644 annotations/src/main/resources/classids.properties create mode 100644 annotations/src/main/resources/revisions/BlockUnitUnitEntity/0.json create mode 100644 annotations/src/main/resources/revisions/BuilderLegsUnitEntity/0.json create mode 100644 annotations/src/main/resources/revisions/BuilderMinerUnitEntity/0.json create mode 100644 annotations/src/main/resources/revisions/BuilderUnitEntity/0.json create mode 100644 annotations/src/main/resources/revisions/BulletEntity/0.json create mode 100644 annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json create mode 100644 annotations/src/main/resources/revisions/DecalEntity/0.json create mode 100644 annotations/src/main/resources/revisions/EffectEntity/0.json create mode 100644 annotations/src/main/resources/revisions/FireEntity/0.json create mode 100644 annotations/src/main/resources/revisions/LaunchPayloadEntity/0.json create mode 100644 annotations/src/main/resources/revisions/LegsUnitEntity/0.json create mode 100644 annotations/src/main/resources/revisions/MinerUnitEntity/0.json create mode 100644 annotations/src/main/resources/revisions/PlayerEntity/0.json create mode 100644 annotations/src/main/resources/revisions/PuddleEntity/0.json create mode 100644 annotations/src/main/resources/revisions/TileEntity/0.json create mode 100644 annotations/src/main/resources/revisions/UnitEntity/0.json create mode 100644 annotations/src/main/resources/revisions/WeatherEntity/0.json diff --git a/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java b/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java index fe8fae4437..bbdf73c19f 100644 --- a/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java +++ b/annotations/src/main/java/mindustry/annotations/entity/EntityProcess.java @@ -552,6 +552,9 @@ public class EntityProcess extends BaseProcessor{ idStore.addStatement("idMap[$L] = $L::new", def.classID, def.name); extraNames.get(def.base).each(extra -> { idStore.addStatement("nameMap.put($S, $L::new)", extra, def.name); + if(!camelToKebab(extra).equals(extra)){ + idStore.addStatement("nameMap.put($S, $L::new)", camelToKebab(extra), def.name); + } }); //return mapping @@ -744,6 +747,22 @@ public class EntityProcess extends BaseProcessor{ return comps.toString("", s -> s.name().replace("Comp", "")) + "Entity"; } + static String camelToKebab(String s){ + StringBuilder result = new StringBuilder(s.length() + 1); + + for(int i = 0; i < s.length(); i++){ + char c = s.charAt(i); + if(i > 0 && Character.isUpperCase(s.charAt(i))){ + result.append('-'); + } + + result.append(Character.toLowerCase(c)); + + } + + return result.toString(); + } + boolean isComponent(Stype type){ return type.annotation(Component.class) != null; } diff --git a/annotations/src/main/resources/classids.properties b/annotations/src/main/resources/classids.properties new file mode 100644 index 0000000000..42faa6493f --- /dev/null +++ b/annotations/src/main/resources/classids.properties @@ -0,0 +1,19 @@ +#Maps entity names to IDs. Autogenerated. + +alpha=0 +block=1 +draug=2 +mindustry.entities.comp.BulletComp=3 +mindustry.entities.comp.DecalComp=4 +mindustry.entities.comp.EffectComp=5 +mindustry.entities.comp.FireComp=6 +mindustry.entities.comp.PlayerComp=7 +mindustry.entities.comp.PuddleComp=8 +mindustry.entities.comp.TileComp=9 +mindustry.type.Weather.WeatherComp=10 +mindustry.world.blocks.storage.LaunchPad.LaunchPayloadComp=11 +oculon=12 +phantom=13 +titan=14 +vanguard=15 +wraith=16 \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/BlockUnitUnitEntity/0.json b/annotations/src/main/resources/revisions/BlockUnitUnitEntity/0.json new file mode 100644 index 0000000000..ce74af4bc8 --- /dev/null +++ b/annotations/src/main/resources/revisions/BlockUnitUnitEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:tile,type:Tilec,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/BuilderLegsUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderLegsUnitEntity/0.json new file mode 100644 index 0000000000..53a405df99 --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderLegsUnitEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:requests,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{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/BuilderMinerUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderMinerUnitEntity/0.json new file mode 100644 index 0000000000..5746932e54 --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderMinerUnitEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:requests,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{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/BuilderUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderUnitEntity/0.json new file mode 100644 index 0000000000..941ae5465e --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderUnitEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:requests,type:arc.struct.Queue,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{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 new file mode 100644 index 0000000000..4bc5456a6b --- /dev/null +++ b/annotations/src/main/resources/revisions/BulletEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:collided,type:arc.struct.IntArray,size:-1},{name:damage,type:float,size:4},{name:data,type:java.lang.Object,size:-1},{name:lifetime,type:float,size:4},{name:owner,type:Entityc,size:-1},{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 new file mode 100644 index 0000000000..ea9b0f0abe --- /dev/null +++ b/annotations/src/main/resources/revisions/CommanderUnitWaterMoveEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{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 new file mode 100644 index 0000000000..df78246160 --- /dev/null +++ b/annotations/src/main/resources/revisions/DecalEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:color,type:arc.graphics.Color,size:-1},{name:lifetime,type:float,size:4},{name:region,type:arc.graphics.g2d.TextureRegion,size:-1},{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 new file mode 100644 index 0000000000..5ce16bf09c --- /dev/null +++ b/annotations/src/main/resources/revisions/EffectEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:color,type:arc.graphics.Color,size:-1},{name:data,type:java.lang.Object,size:-1},{name:effect,type:mindustry.entities.Effect,size:-1},{name:lifetime,type:float,size:4},{name:offsetX,type:float,size:4},{name:offsetY,type:float,size:4},{name:parent,type:Posc,size:-1},{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 new file mode 100644 index 0000000000..a5423a835b --- /dev/null +++ b/annotations/src/main/resources/revisions/FireEntity/0.json @@ -0,0 +1 @@ +{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/LaunchPayloadEntity/0.json b/annotations/src/main/resources/revisions/LaunchPayloadEntity/0.json new file mode 100644 index 0000000000..13ca6b7f49 --- /dev/null +++ b/annotations/src/main/resources/revisions/LaunchPayloadEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:lifetime,type:float,size:4},{name:stacks,type:arc.struct.Array,size:-1},{name:team,type:mindustry.game.Team,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 new file mode 100644 index 0000000000..5250c9eaa5 --- /dev/null +++ b/annotations/src/main/resources/revisions/LegsUnitEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:baseRotation,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{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 new file mode 100644 index 0000000000..340e16cad4 --- /dev/null +++ b/annotations/src/main/resources/revisions/MinerUnitEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{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 new file mode 100644 index 0000000000..de2ce4432f --- /dev/null +++ b/annotations/src/main/resources/revisions/PlayerEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:admin,type:boolean,size:1},{name:boosting,type:boolean,size:1},{name:color,type:arc.graphics.Color,size:-1},{name:mouseX,type:float,size:4},{name:mouseY,type:float,size:4},{name:name,type:java.lang.String,size:-1},{name:shooting,type:boolean,size:1},{name:team,type:mindustry.game.Team,size:-1},{name:typing,type:boolean,size:1},{name:unit,type:Unitc,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 new file mode 100644 index 0000000000..09114ed8ea --- /dev/null +++ b/annotations/src/main/resources/revisions/PuddleEntity/0.json @@ -0,0 +1 @@ +{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 new file mode 100644 index 0000000000..c3a6d143c5 --- /dev/null +++ b/annotations/src/main/resources/revisions/TileEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:cons,type:mindustry.world.modules.ConsumeModule,size:-1},{name:health,type:float,size:4},{name:items,type:mindustry.world.modules.ItemModule,size:-1},{name:liquids,type:mindustry.world.modules.LiquidModule,size:-1},{name:power,type:mindustry.world.modules.PowerModule,size:-1},{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/UnitEntity/0.json b/annotations/src/main/resources/revisions/UnitEntity/0.json new file mode 100644 index 0000000000..ea9b0f0abe --- /dev/null +++ b/annotations/src/main/resources/revisions/UnitEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Array,size:-1},{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 new file mode 100644 index 0000000000..84ba06dbcd --- /dev/null +++ b/annotations/src/main/resources/revisions/WeatherEntity/0.json @@ -0,0 +1 @@ +{fields:[{name:intensity,type:float,size:4},{name:life,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-raw/sprites/units/vanguard-cell.png b/core/assets-raw/sprites/units/vanguard-cell.png index 0bfe167f48e4f9307c7813209218852afe2ecd7f..4366b2167b0e3e7259edb97f81f1340fbba5a701 100644 GIT binary patch delta 586 zcmeBUeatdJrM@N8**U<|*;yf=C_gPTCzXLgV`A+@TaUvIGDqWsU3I7Og$Wd%2$&ls zAX<1uOJt$b3el)igPmWvXPKyI>h(2cA3WH9bX9Zr=5>7QniPI8K6>Z2sJ-CE!FC^ZPM3A)zLKckcEH)+xbnfUJ? zK7Q3Zwt3I_zm~tQ&N<33-^1oK&tD=jN2zljbj*aGv>n`WN5Gga=|AYj*D4`mOL6!;+P&pYRqGaP)|3RNsAkcW?dN zy??8hUA@mA?^-n9qUT;I0|Ub>PZ!6KjK;Uu9Jv}41X>@amrVA1_*Z=1qRlr}aZFU0 zIlcQ|zADFKX>~YD})9Sl(9^NiBacA~VJS<)4 zyFmPk5$kRBEl=;nx)<9#IzHR);QAY8jn3;Y9LO;-kmlX;EvW6ATcp|r?pGZ8o~xIx vs%ebg(|GOg{r_k0X`E)Ma+H0@n6QtT$yK#)-TVm)LH2sO`njxgN@xNAqk9(Q delta 629 zcmaFN(#JYMrM@ZC**U<|*;yf=C_gPTCzXLg(u1%h?!l>(ao6}WankJE$oO})xYn(vpjo? zUYFI+tv>(qUa?}piCNR4?=nxDTP~CwsB3Aw`l_AqqKRp{R$Q<5H8+>(Kfc1kE^lSf zYv1js9@Q^a-1=fxz*0{BnU?DMdlYOoOgpc6Pqc4_ca_(VkR7Kda&z6+zN_)6`%%w% z#;KBp%Y>8<2`1_WA9ItO?cJw(NB_>eO*tp|Rl4T{?OAu@)Vf*r-$V3y^lx3B>^1%7 zF^R`M0`7+srlxLs@^ac$v7_~>ioY*%{R_J{pSmx_w_0K;1Dl6xj(4kVEM)EUQxdpP4W)hO!YJ_dr%`B zC0Dd-@$aC3G=;fs*M)yBlg!xFb|Gft_W8Aa?-RUsb;TaMXIGM@QoZlc?$@WPf7gHR zxi5b)Ki;)yKC7k383qOh&H|6fVg?31B@kv@_2}*-1_p*ro-U3d8P0EK9^`B=5MWun zHlp>f{hC8jizZfgc(LqE6--lb5lm5Me`eskcI%&+hR^OdHAu7EQFy?{XwI?2@c=JV zoFVdQ&MBb@07@_+S^xk5 diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index deeb42f65e..45ce5af170 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -272,6 +272,7 @@ quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial c loading = [accent]Loading... reloading = [accent]Reloading Mods... saving = [accent]Saving... +respawn = [accent][[{0}][] to respawn in core cancelbuilding = [accent][[{0}][] to clear plan selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building @@ -707,6 +708,8 @@ command.attack = Attack command.rally = Rally command.retreat = Retreat placement.blockselectkeys = \n[lightgray]Key: [{0}, +keybind.respawn.name = Respawn +keybind.control.name = Control Unit keybind.clear_building.name = Clear Building keybind.press = Press a key... keybind.press.axis = Press an axis or key... diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index 9ea1595a3d..1d0e8d7207 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -133,7 +133,7 @@ public class Bullets implements ContentList{ frontColor = Pal.bulletYellow; }}; - glassFrag = new BasicBulletType(3f, 6, "bullet"){{ + glassFrag = new BasicBulletType(3f, 5, "bullet"){{ bulletWidth = 5f; bulletHeight = 12f; bulletShrink = 1f; @@ -174,10 +174,10 @@ public class Bullets implements ContentList{ bulletWidth = 6f; bulletHeight = 8f; hitEffect = Fx.flakExplosion; - splashDamage = 30f; - splashDamageRadius = 26f; + splashDamage = 20f; + splashDamageRadius = 20f; fragBullet = glassFrag; - fragBullets = 6; + fragBullets = 5; }}; flakPlastic = new FlakBulletType(4f, 6){{ @@ -192,16 +192,18 @@ public class Bullets implements ContentList{ }}; flakExplosive = new FlakBulletType(4f, 5){{ - //default bullet type, no changes shootEffect = Fx.shootBig; ammoMultiplier = 4f; + splashDamage = 15f; + splashDamageRadius = 34f; status = StatusEffects.blasted; statusDuration = 60f; }}; - flakSurge = new FlakBulletType(4f, 7){{ - splashDamage = 33f; + flakSurge = new FlakBulletType(4.5f, 13){{ + splashDamage = 40f; + splashDamageRadius = 40f; lightining = 2; lightningLength = 12; shootEffect = Fx.shootBig; diff --git a/core/src/mindustry/entities/comp/PayloadComp.java b/core/src/mindustry/entities/comp/PayloadComp.java index 1c0f08b6b6..3313eb1a84 100644 --- a/core/src/mindustry/entities/comp/PayloadComp.java +++ b/core/src/mindustry/entities/comp/PayloadComp.java @@ -1,16 +1,19 @@ package mindustry.entities.comp; -import arc.util.ArcAnnotate.*; +import arc.struct.*; import mindustry.annotations.Annotations.*; import mindustry.world.blocks.payloads.*; /** An entity that holds a payload. */ @Component abstract class PayloadComp{ - //TODO multiple payloads? - @Nullable Payload payload; + Array payloads = new Array<>(); boolean hasPayload(){ - return payload != null; + return payloads.size > 0; + } + + void addPayload(Payload load){ + payloads.add(load); } } diff --git a/core/src/mindustry/input/Binding.java b/core/src/mindustry/input/Binding.java index cb66af4209..8952006df2 100644 --- a/core/src/mindustry/input/Binding.java +++ b/core/src/mindustry/input/Binding.java @@ -10,8 +10,9 @@ public enum Binding implements KeyBind{ move_x(new Axis(KeyCode.a, KeyCode.d), "general"), move_y(new Axis(KeyCode.s, KeyCode.w)), mouse_move(KeyCode.mouseBack), - boost(KeyCode.shiftLeft), //TODO rename - control(KeyCode.shiftLeft), + boost(KeyCode.shiftLeft), + control(KeyCode.controlLeft), + respawn(KeyCode.v), select(KeyCode.mouseLeft), deselect(KeyCode.mouseRight), break_block(KeyCode.mouseRight), diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 4d7849e908..e8074b01c9 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -64,7 +64,7 @@ public class DesktopInput extends InputHandler{ }); group.fill(t -> { - t.visible(() -> lastSchematic != null && !selectRequests.isEmpty()); + t.visible(() -> Core.settings.getBool("hints") && lastSchematic != null && !selectRequests.isEmpty()); t.bottom(); t.table(Styles.black6, b -> { b.defaults().left(); @@ -77,6 +77,15 @@ public class DesktopInput extends InputHandler{ }); }).margin(6f); }); + + group.fill(t -> { + t.visible(() -> Core.settings.getBool("hints") && !player.dead() && !player.unit().spawnedByCore()); + t.bottom(); + t.table(Styles.black6, b -> { + b.defaults().left(); + b.label(() -> Core.bundle.format("respawn", Core.keybinds.get(Binding.respawn).key.toString())).style(Styles.outlineLabel); + }).margin(6f); + }); } @Override @@ -197,6 +206,11 @@ public class DesktopInput extends InputHandler{ } } + if(Core.input.keyDown(Binding.respawn) && !player.dead() && !player.unit().spawnedByCore()){ + Call.onUnitClear(player); + controlledType = null; + } + //TODO this is for debugging, remove later if(Core.input.keyTap(KeyCode.g) && !player.dead() && player.unit() instanceof Commanderc){ Commanderc commander = (Commanderc)player.unit(); @@ -565,10 +579,11 @@ public class DesktopInput extends InputHandler{ float speed = unit.type().speed * Mathf.lerp(1f, unit.type().canBoost ? unit.type().boostMultiplier : 1f, unit.elevation()) * strafePenalty; float xa = Core.input.axis(Binding.move_x); float ya = Core.input.axis(Binding.move_y); + boolean boosted = (!unit.type().flying && unit.isFlying()); movement.set(xa, ya).nor().scl(speed); float mouseAngle = Angles.mouseAngle(unit.x(), unit.y()); - boolean aimCursor = omni && isShooting && unit.type().hasWeapons() && unit.type().faceTarget; + boolean aimCursor = omni && isShooting && unit.type().hasWeapons() && unit.type().faceTarget && !boosted; if(aimCursor){ unit.lookAt(mouseAngle); @@ -588,7 +603,7 @@ public class DesktopInput extends InputHandler{ } unit.aim(unit.type().faceTarget ? Core.input.mouseWorld() : Tmp.v1.trns(unit.rotation(), Core.input.mouseWorld().dst(unit)).add(unit.x(), unit.y())); - unit.controlWeapons(true, isShooting && !(!unit.type().flying && unit.isFlying())); + unit.controlWeapons(true, isShooting && !boosted); isBoosting = Core.input.keyDown(Binding.boost) && !movement.isZero(); player.boosting(isBoosting); diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 495edda0e9..99e6df7904 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -184,6 +184,16 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } } + @Remote(targets = Loc.both, called = Loc.server, forward = true) + public static void onUnitClear(Playerc player){ + //no free core teleports? + if(!player.dead() && player.unit().spawnedByCore()) return; + + Fx.spawn.at(player); + player.clearUnit(); + player.deathTimer(60f); //for instant respawn + } + public Eachable allRequests(){ return cons -> { for(BuildRequest request : player.builder().requests()) cons.get(request);