Support for schematic random rotation

This commit is contained in:
Anuken
2020-06-05 13:23:24 -04:00
parent d9e05907af
commit cf02a75846
11 changed files with 180 additions and 48 deletions

View File

@@ -8,12 +8,15 @@ import mindustry.game.*;
import mindustry.game.Schematic.*;
import mindustry.type.*;
import mindustry.world.*;
import mindustry.world.blocks.production.*;
import mindustry.world.blocks.sandbox.*;
import mindustry.world.blocks.storage.*;
import mindustry.world.meta.*;
import java.io.*;
import static mindustry.Vars.tilesize;
public class BaseRegistry{
public Array<BasePart> cores = new Array<>();
public Array<BasePart> parts = new Array<>();
@@ -35,6 +38,8 @@ public class BaseRegistry{
Schematic schem = Schematics.read(Core.files.internal("baseparts/" + name));
BasePart part = new BasePart(schem);
Tmp.v1.setZero();
int drills = 0;
for(Stile tile : schem.tiles){
//make note of occupied positions
@@ -56,6 +61,12 @@ public class BaseRegistry{
Liquid config = (Liquid)tile.config;
if(config != null) part.requiredLiquid = config;
}
//calculate averages
if(tile.block instanceof Drill){
Tmp.v1.add(tile.x*tilesize + tile.block.offset(), tile.y*tilesize + tile.block.offset());
drills ++;
}
}
schem.tiles.removeAll(s -> s.block.buildVisibility == BuildVisibility.sandboxOnly);
@@ -63,6 +74,15 @@ public class BaseRegistry{
(part.core != null ? cores : parts).add(part);
if(drills > 0){
Tmp.v1.scl(1f / drills).scl(1f / tilesize);
part.centerX = (int)Tmp.v1.x;
part.centerY = (int)Tmp.v1.y;
}else{
part.centerX = part.schematic.width/2;
part.centerY = part.schematic.height/2;
}
if(part.requiredItem != null){
itemParts.get(part.requiredItem, Array::new).add(part);
}
@@ -80,6 +100,9 @@ public class BaseRegistry{
public final Schematic schematic;
public final GridBits occupied;
//offsets for drills
public int centerX, centerY;
public @Nullable Liquid requiredLiquid;
public @Nullable Item requiredItem;
public @Nullable Block core;