diff --git a/annotations/src/main/resources/classids.properties b/annotations/src/main/resources/classids.properties new file mode 100644 index 0000000000..5f5e95830e --- /dev/null +++ b/annotations/src/main/resources/classids.properties @@ -0,0 +1,21 @@ +#Maps entity names to IDs. Autogenerated. + +alpha=0 +block=1 +cix=2 +draug=3 +mindustry.entities.comp.BulletComp=4 +mindustry.entities.comp.DecalComp=5 +mindustry.entities.comp.EffectComp=6 +mindustry.entities.comp.FireComp=7 +mindustry.entities.comp.PlayerComp=8 +mindustry.entities.comp.PuddleComp=9 +mindustry.entities.comp.TileComp=10 +mindustry.type.Weather.WeatherComp=11 +mindustry.world.blocks.storage.LaunchPad.LaunchPayloadComp=12 +oculon=13 +phantom=14 +titan=15 +trident=18 +vanguard=16 +wraith=17 \ 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..ea9b0f0abe --- /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: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/BuilderMechUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderMechUnitEntity/0.json new file mode 100644 index 0000000000..53a405df99 --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderMechUnitEntity/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/BuilderMinerPayloadUnitEntity/0.json b/annotations/src/main/resources/revisions/BuilderMinerPayloadUnitEntity/0.json new file mode 100644 index 0000000000..093aff894e --- /dev/null +++ b/annotations/src/main/resources/revisions/BuilderMinerPayloadUnitEntity/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:payloads,type:arc.struct.Array,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..ea9b0f0abe --- /dev/null +++ b/annotations/src/main/resources/revisions/LegsUnitEntity/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/MechUnitEntity/0.json b/annotations/src/main/resources/revisions/MechUnitEntity/0.json new file mode 100644 index 0000000000..5250c9eaa5 --- /dev/null +++ b/annotations/src/main/resources/revisions/MechUnitEntity/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/PuddleEntity/1.json b/annotations/src/main/resources/revisions/PuddleEntity/1.json new file mode 100644 index 0000000000..c7b6265b14 --- /dev/null +++ b/annotations/src/main/resources/revisions/PuddleEntity/1.json @@ -0,0 +1 @@ +{version:1,fields:[{name:amount,type:float,size:4},{name:generation,type:int,size:4},{name:liquid,type:mindustry.type.Liquid,size:-1},{name:tile,type:mindustry.world.Tile,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/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/src/mindustry/entities/comp/PayloadComp.java b/core/src/mindustry/entities/comp/PayloadComp.java index d047f7a63a..fc808441a8 100644 --- a/core/src/mindustry/entities/comp/PayloadComp.java +++ b/core/src/mindustry/entities/comp/PayloadComp.java @@ -3,6 +3,7 @@ package mindustry.entities.comp; import arc.math.*; import arc.struct.*; import arc.util.*; +import mindustry.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.gen.*; @@ -12,6 +13,8 @@ import mindustry.world.blocks.payloads.*; /** An entity that holds a payload. */ @Component abstract class PayloadComp implements Posc, Rotc{ + @Import float x, y; + Array payloads = new Array<>(); boolean hasPayload(){ @@ -76,11 +79,11 @@ abstract class PayloadComp implements Posc, Rotc{ /** @return whether the tile has been successfully placed. */ boolean dropBlock(BlockPayload payload){ Tilec tile = payload.entity; - int tx = tileX(), ty = tileY(); - Tile on = tileOn(); - if(Build.validPlace(tile.team(), tx, ty, tile.block(), tile.rotation())){ + int tx = Vars.world.toTile(x - tile.block().offset()), ty = Vars.world.toTile(y - tile.block().offset()); + Tile on = Vars.world.tile(tx, ty); + if(on != null && Build.validPlace(tile.team(), tx, ty, tile.block(), tile.rotation())){ int rot = (int)((rotation() + 45f) / 90f) % 4; - payload.place(tileOn(), rot); + payload.place(on, rot); Fx.unitDrop.at(tile); Fx.placeBlock.at(on.drawx(), on.drawy(), on.block().size); diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index b76844708a..e4a6df80d0 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -25,6 +25,7 @@ import mindustry.gen.*; import mindustry.graphics.*; import mindustry.ui.*; import mindustry.world.*; +import mindustry.world.meta.*; import static arc.Core.scene; import static mindustry.Vars.*; @@ -617,7 +618,7 @@ public class DesktopInput extends InputHandler{ pay.pickup(target); }else if(!pay.hasPayload()){ Tilec tile = world.entWorld(pay.x(), pay.y()); - if(tile != null && tile.team() == unit.team()){ + if(tile != null && tile.team() == unit.team() && tile.block().synthetic() && tile.block().buildVisibility != BuildVisibility.hidden && tile.block().size <= 3){ pay.pickup(tile); } }