diff --git a/core/assets-raw/sprites/units/precept-treads.png b/core/assets-raw/sprites/units/precept-treads.png index 913546e376..916cd739e5 100644 Binary files a/core/assets-raw/sprites/units/precept-treads.png and b/core/assets-raw/sprites/units/precept-treads.png differ diff --git a/core/assets-raw/sprites/units/precept.png b/core/assets-raw/sprites/units/precept.png index 683a19acee..58f5f586e7 100644 Binary files a/core/assets-raw/sprites/units/precept.png and b/core/assets-raw/sprites/units/precept.png differ diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index e8f1d4d792..58390ecb37 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2568,14 +2568,6 @@ public class UnitTypes{ Lines.line(e.x, e.y, v.x, v.y); }); }); - - pointEffectSpace = 8f; - - if(false) - pointEffect = new Effect(20, e -> { - color(e.color); - Fill.poly(e.x, e.y, 3, 4f * e.fout(), e.rotation); - }).layer(Layer.bullet - 0.001f); }}; }}); }}; @@ -2588,7 +2580,7 @@ public class UnitTypes{ health = 4500; armor = 10f; itemCapacity = 0; - treadRects = new Rect[]{new Rect(16 - 60f, 38 - 60f, 30, 75), new Rect(44 - 60f, 7 - 60f, 17, 60)}; + treadRects = new Rect[]{new Rect(16 - 60f, 48 - 70f, 30, 75), new Rect(44 - 60f, 17 - 70f, 17, 60)}; researchCostMultiplier = 0f; weapons.add(new Weapon("precept-weapon"){{ diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index d425f8e580..04d8467e8d 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -63,7 +63,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, transient Tile tile; transient Block block; transient Seq proximity = new Seq<>(6); - transient byte cdump; + transient int cdump; transient int rotation; transient float payloadRotation; transient String lastAccessed; @@ -992,7 +992,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } public void incrementDump(int prox){ - cdump = (byte)((cdump + 1) % prox); + cdump = ((cdump + 1) % prox); } /** Used for dumping items. */ diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index eea8429354..cf2aeca15a 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -448,6 +448,7 @@ public class Block extends UnlockableContent implements Senseable{ /** Drawn when placing and when hovering over. */ public void drawOverlay(float x, float y, int rotation){ } + public float sumAttribute(@Nullable Attribute attr, int x, int y){ if(attr == null) return 0; Tile tile = world.tile(x, y); diff --git a/core/src/mindustry/world/blocks/distribution/DuctRouter.java b/core/src/mindustry/world/blocks/distribution/DuctRouter.java index ff2d65ae34..d16ac68342 100644 --- a/core/src/mindustry/world/blocks/distribution/DuctRouter.java +++ b/core/src/mindustry/world/blocks/distribution/DuctRouter.java @@ -47,7 +47,7 @@ public class DuctRouter extends Block{ public void setStats(){ super.setStats(); - stats.add(Stat.itemsMoved, 60f / speed, StatUnit.itemsSecond); + stats.add(Stat.itemsMoved, 60f / speed * itemCapacity, StatUnit.itemsSecond); } @Override @@ -78,6 +78,8 @@ public class DuctRouter extends Block{ public float progress; public @Nullable Item current; + protected int acceptors; + @Override public void draw(){ Draw.rect(region, x, y); @@ -99,8 +101,7 @@ public class DuctRouter extends Block{ var target = target(); if(target != null){ target.handleItem(this, current); - int mod = sortItem != null && current != sortItem ? 2 : 3; - cdump = (byte)((cdump + 1) % mod); + cdump = ((cdump + 1) % acceptors); items.remove(current, 1); current = null; progress %= (1f - 1f/speed); @@ -124,6 +125,18 @@ public class DuctRouter extends Block{ public Building target(){ if(current == null) return null; + acceptors = 0; + + //TODO this is horrible. + for(int i = -1; i <= 1; i++){ + int dir = Mathf.mod(rotation + i, 4); + if(sortItem != null && (current == sortItem) != (dir == rotation)) continue; + Building other = nearby(dir); + if(other != null && other.team == team && other.acceptItem(this, current)){ + acceptors ++; + } + } + for(int i = -1; i <= 1; i++){ int dir = Mathf.mod(rotation + (((i + cdump + 1) % 3) - 1), 4); if(sortItem != null && (current == sortItem) != (dir == rotation)) continue;