From 275f6eb32f38d08d8f871de7f1fb5fdc66595cfd Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 18 Nov 2021 14:47:33 -0500 Subject: [PATCH] Overflow duct --- .../distribution/ducts/overflow-duct-top.png | Bin 0 -> 164 bytes .../distribution/ducts/overflow-duct.png | Bin 0 -> 377 bytes core/assets-raw/sprites/units/emanate.png | Bin 4216 -> 4251 bytes core/assets/icons/icons.properties | 2 + core/assets/logicids.dat | Bin 3338 -> 3372 bytes core/src/mindustry/content/Blocks.java | 25 +++- .../entities/comp/BlockUnitComp.java | 7 + .../world/blocks/distribution/DuctRouter.java | 6 +- .../blocks/distribution/OverflowDuct.java | 137 ++++++++++++++++++ gradle.properties | 2 +- 10 files changed, 174 insertions(+), 5 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct-top.png create mode 100644 core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct.png create mode 100644 core/src/mindustry/world/blocks/distribution/OverflowDuct.java diff --git a/core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct-top.png b/core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct-top.png new file mode 100644 index 0000000000000000000000000000000000000000..7a6637d7a93903ffd2001607dca25f462f48aee9 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V2JZ{ zaSVxQeS1Zb?|_1U%f*Gy*W_6Q1>ddSHtm6gTEf5L4%Pc_ycinJb{Uu0zrVikb!pUp zk4q2vw*6Z0l+jplBZIk;)B~3z%x*`S-9XGW$vOx2vQBK6>CD1#;~o3<-y$MsV)pAW QFfcH9y85}Sb4q9e04ZBM3IG5A literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct.png b/core/assets-raw/sprites/blocks/distribution/ducts/overflow-duct.png new file mode 100644 index 0000000000000000000000000000000000000000..8bbb599c9acbd19844a858067f568735178ea071 GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>U^Mo0 zaSVxQeLLNjugO86HNDsUVB3-Ij7)Fe6+P|`IF6l)xE=M%)g$A^?u0~@-^Rw)EvcCm zqB=V7lgrX1MFe))&)aK#ZQHC}cZ24o--`$p-!ktYqcAVi1 zpH`pbIh^$ED(2eE+sRjbu*U)ZLo|9 zZ!ue1%#mHPdQ(7L^gOOZS*L@Y@2uPUKiP;a$&2}O<^C7(#+)u0&5smfiiH}QCcNvD fU`gX+_`u4b*4L_|&m_mdz`)??>gTe~DWM4fZ0nct literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/emanate.png b/core/assets-raw/sprites/units/emanate.png index 95fa1a83d8bc8615759c507ee804002e06b8b1be..f297430956d5ba8acfcd57f9160faec24e29f733 100644 GIT binary patch delta 4200 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 delta 4162 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 diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 0f7352074c..660fea210b 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -447,3 +447,5 @@ 63259=oxidation-chamber|block-oxidation-chamber-ui 63258=surge-crucible|block-surge-crucible-ui 63257=emanate|unit-emanate-ui +63256=overflow-duct|block-overflow-duct-ui +63255=large-plasma-bore|block-large-plasma-bore-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index e06c76e3d906cfbc97af1954494290552c7a35ba..54817c3f97f03c4ca4d6745d7a09d61f731522eb 100644 GIT binary patch delta 49 zcmeB@S|i28uxlgJYAyxd{Ib-dw4D5M-IUVg5(dGX#G>?6-GZFN;@m{tr2L}ItGVKt E0H1LY4FCWD delta 16 XcmZ1@)g{Hmuwx_BYOc-axnh|BFGB@* diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index a271ef0b55..3e8c4a8f96 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -77,7 +77,7 @@ public class Blocks implements ContentList{ overflowGate, underflowGate, massDriver, //transport - alternate - duct, ductRouter, ductBridge, ductUnloader, + duct, ductRouter, overflowDuct, ductBridge, ductUnloader, surgeConveyor, surgeRouter, //liquid @@ -94,7 +94,7 @@ public class Blocks implements ContentList{ //production mechanicalDrill, pneumaticDrill, laserDrill, blastDrill, waterExtractor, oilExtractor, cultivator, - cliffCrusher, plasmaBore, impactDrill, + cliffCrusher, plasmaBore, largePlasmaBore, impactDrill, //storage coreShard, coreFoundation, coreNucleus, vault, container, unloader, @@ -1430,6 +1430,11 @@ public class Blocks implements ContentList{ speed = 4f; }}; + overflowDuct = new OverflowDuct("overflow-duct"){{ + requirements(Category.distribution, with(Items.graphite, 10)); + speed = 4f; + }}; + ductBridge = new DuctBridge("duct-bridge"){{ requirements(Category.distribution, with(Items.graphite, 20)); speed = 4f; @@ -1908,13 +1913,27 @@ public class Blocks implements ContentList{ }}; plasmaBore = new BeamDrill("plasma-bore"){{ - requirements(Category.production, with(Items.graphite, 20, Items.beryllium, 10, Items.lead, 20)); + requirements(Category.production, with(Items.graphite, 20, Items.beryllium, 10)); consumes.power(0.2f); + drillTime = 200f; tier = 4; size = 2; range = 2; }}; + //TODO awful name + largePlasmaBore = new BeamDrill("large-plasma-bore"){{ + //TODO requirements + //TODO require hydrogen? optional for all drills? + requirements(Category.production, with(Items.graphite, 30, Items.beryllium, 20, Items.carbide, 30)); + consumes.power(0.6f); + drillTime = 170f; + tier = 5; + size = 3; + range = 6; + laserWidth = 0.7f; + }}; + //endregion //region storage diff --git a/core/src/mindustry/entities/comp/BlockUnitComp.java b/core/src/mindustry/entities/comp/BlockUnitComp.java index 39adf5c891..a01be90c4f 100644 --- a/core/src/mindustry/entities/comp/BlockUnitComp.java +++ b/core/src/mindustry/entities/comp/BlockUnitComp.java @@ -23,6 +23,13 @@ abstract class BlockUnitComp implements Unitc{ set(tile); } + @Override + public void add(){ + if(tile == null){ + throw new RuntimeException("Do not add BlockUnit entities to the game, they will simply crash. Internal use only."); + } + } + @Override public void update(){ if(tile != null){ diff --git a/core/src/mindustry/world/blocks/distribution/DuctRouter.java b/core/src/mindustry/world/blocks/distribution/DuctRouter.java index b04f75afbe..0e2b7be04f 100644 --- a/core/src/mindustry/world/blocks/distribution/DuctRouter.java +++ b/core/src/mindustry/world/blocks/distribution/DuctRouter.java @@ -27,7 +27,6 @@ public class DuctRouter extends Block{ update = true; solid = false; hasItems = true; - conveyorPlacement = true; unloadable = false; itemCapacity = 1; noUpdateDisabled = true; @@ -58,6 +57,11 @@ public class DuctRouter extends Block{ Draw.rect(topRegion, plan.drawx(), plan.drawy(), plan.rotation * 90); } + @Override + public boolean rotatedOutput(int x, int y){ + return false; + } + public class DuctRouterBuild extends Building{ public @Nullable Item sortItem; diff --git a/core/src/mindustry/world/blocks/distribution/OverflowDuct.java b/core/src/mindustry/world/blocks/distribution/OverflowDuct.java new file mode 100644 index 0000000000..b59dc5c7b9 --- /dev/null +++ b/core/src/mindustry/world/blocks/distribution/OverflowDuct.java @@ -0,0 +1,137 @@ +package mindustry.world.blocks.distribution; + +import arc.graphics.g2d.*; +import arc.math.*; +import arc.util.*; +import mindustry.annotations.Annotations.*; +import mindustry.entities.units.*; +import mindustry.gen.*; +import mindustry.type.*; +import mindustry.world.*; +import mindustry.world.meta.*; + +public class OverflowDuct extends Block{ + public float speed = 5f; + + public @Load(value = "@-top") TextureRegion topRegion; + + public OverflowDuct(String name){ + super(name); + + group = BlockGroup.transportation; + update = true; + solid = false; + hasItems = true; + conveyorPlacement = true; + unloadable = false; + itemCapacity = 1; + noUpdateDisabled = true; + rotate = true; + envEnabled = Env.space | Env.terrestrial | Env.underwater; + } + + @Override + public void setStats(){ + super.setStats(); + + stats.add(Stat.itemsMoved, 60f / speed, StatUnit.itemsSecond); + } + + @Override + public TextureRegion[] icons(){ + return new TextureRegion[]{region, topRegion}; + } + + @Override + public void drawRequestRegion(BuildPlan plan, Eachable list){ + Draw.rect(region, plan.drawx(), plan.drawy()); + Draw.rect(topRegion, plan.drawx(), plan.drawy(), plan.rotation * 90); + } + + @Override + public boolean rotatedOutput(int x, int y){ + return false; + } + + public class DuctRouterBuild extends Building{ + public float progress; + public @Nullable Item current; + + @Override + public void draw(){ + Draw.rect(region, x, y); + Draw.rect(topRegion, x, y, rotdeg()); + } + + @Override + public void updateTile(){ + progress += edelta() / speed * 2f; + + if(current != null){ + if(progress >= (1f - 1f/speed)){ + var target = target(); + if(target != null){ + target.handleItem(this, current); + cdump = (byte)(cdump == 0 ? 2 : 0); + items.remove(current, 1); + current = null; + progress %= (1f - 1f/speed); + } + } + }else{ + progress = 0; + } + + if(current == null && items.total() > 0){ + current = items.first(); + } + } + + @Nullable + public Building target(){ + if(current == null) return null; + + Building front = front(); + if(front != null && front.team == team && front.acceptItem(this, current)){ + return front; + } + + for(int i = -1; i <= 1; i++){ + int dir = Mathf.mod(rotation + (((i + cdump + 1) % 3) - 1), 4); + if(dir == rotation) continue; + Building other = nearby(dir); + if(other != null && other.team == team && other.acceptItem(this, current)){ + return other; + } + } + return null; + } + + @Override + public boolean acceptItem(Building source, Item item){ + return current == null && items.total() == 0 && + (Edges.getFacingEdge(source.tile(), tile).relativeTo(tile) == rotation); + } + + @Override + public int removeStack(Item item, int amount){ + int removed = super.removeStack(item, amount); + if(item == current) current = null; + return removed; + } + + @Override + public void handleStack(Item item, int amount, Teamc source){ + super.handleStack(item, amount, source); + current = item; + } + + @Override + public void handleItem(Building source, Item item){ + current = item; + progress = -1f; + items.add(item, 1); + noSleep(); + } + } +} diff --git a/gradle.properties b/gradle.properties index 47efdec8d7..8c9c4e6695 100644 --- a/gradle.properties +++ b/gradle.properties @@ -24,4 +24,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works org.gradle.internal.http.socketTimeout=100000 org.gradle.internal.http.connectionTimeout=100000 -archash=430f9146f3c9c34db1f9ad9a8784e71c322246f2 +archash=5952043ab3a6de8f254dd038ea7ac4cab1b8a852