diff --git a/core/src/mindustry/ai/types/CommandAI.java b/core/src/mindustry/ai/types/CommandAI.java index 15861014b8..c0250899af 100644 --- a/core/src/mindustry/ai/types/CommandAI.java +++ b/core/src/mindustry/ai/types/CommandAI.java @@ -119,11 +119,21 @@ public class CommandAI extends AIController{ } } + boolean noBoost = true; + if(targetPos != null){ boolean move = true; vecOut.set(targetPos); - if(unit.isGrounded()){ + //boosting units with RTS controls are incredibly buggy and hard to use. there's no clear way for units to know where to land to approach or attack something + boolean tryBoosting = false;//unit.type.canBoost && (attackTarget == null || !unit.within(attackTarget, unit.type.range)); + //noBoost = false; + + if(tryBoosting){ + unit.updateBoosting(true); + } + + if(unit.isGrounded() && !tryBoosting){ move = Vars.controlPath.getPathPosition(unit, pathId, targetPos, vecOut); } @@ -175,6 +185,10 @@ public class CommandAI extends AIController{ }else if(target != null){ faceTarget(); } + + if(noBoost){ + unit.updateBoosting(false); + } } @Override diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 078bd625b0..545e0c1477 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -5801,7 +5801,7 @@ public class Blocks{ }}; canvas = new CanvasBlock("canvas"){{ - requirements(Category.logic, BuildVisibility.debugOnly, with(Items.silicon, 50)); + requirements(Category.logic, BuildVisibility.shown, with(Items.silicon, 40, Items.graphite, 10)); canvasSize = 12; padding = 7f / 4f * 2f; diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 6d538cf7d8..d0b2bc2679 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -63,6 +63,10 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I } + public void updateBoosting(boolean boost){ + elevation = Mathf.approachDelta(elevation, type.canBoost ? Mathf.num(boost || onSolid() || (isFlying() && !canLand())) : 0f, type.riseSpeed); + } + /** Move based on preferred unit movement type. */ public void movePref(Vec2 movement){ if(type.omniMovement){ diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 72c3495a97..9a2d758e64 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -80,6 +80,7 @@ public class ContentParser{ put(Blending.class, (type, data) -> field(Blending.class, data)); put(CacheLayer.class, (type, data) -> field(CacheLayer.class, data)); put(Attribute.class, (type, data) -> Attribute.get(data.asString())); + put(BuildVisibility.class, (type, data) -> field(BuildVisibility.class, data)); put(Schematic.class, (type, data) -> { Object result = fieldOpt(Loadouts.class, data); if(result != null){ diff --git a/core/src/mindustry/world/blocks/logic/CanvasBlock.java b/core/src/mindustry/world/blocks/logic/CanvasBlock.java index feb17ccfa0..e30ff4dc57 100644 --- a/core/src/mindustry/world/blocks/logic/CanvasBlock.java +++ b/core/src/mindustry/world/blocks/logic/CanvasBlock.java @@ -21,7 +21,7 @@ import static mindustry.Vars.*; public class CanvasBlock extends Block{ public float padding = 0f; public int canvasSize = 8; - public int[] palette = {0x634b7dff, 0xc45d9f_ff, 0xe39aac_ff, 0xf0dab1_ff, 0x6461c2_ff, 0x2ba9b4_ff, 0x93d4b5_ff, 0xf0f6e8_ff}; + public int[] palette = {0x634b7d_ff, 0xc45d9f_ff, 0xe39aac_ff, 0xf0dab1_ff, 0x6461c2_ff, 0x2ba9b4_ff, 0x93d4b5_ff, 0xf0f6e8_ff}; public int bitsPerPixel; public IntIntMap colorToIndex = new IntIntMap(); diff --git a/core/src/mindustry/world/meta/BuildVisibility.java b/core/src/mindustry/world/meta/BuildVisibility.java index d09940abe3..10396f5312 100644 --- a/core/src/mindustry/world/meta/BuildVisibility.java +++ b/core/src/mindustry/world/meta/BuildVisibility.java @@ -4,17 +4,19 @@ import arc.func.*; import mindustry.*; import mindustry.content.*; -public enum BuildVisibility{ - hidden(() -> false), - shown(() -> true), - debugOnly(() -> false), - editorOnly(() -> Vars.state.rules.editor), - sandboxOnly(() -> Vars.state == null || Vars.state.rules.infiniteResources), - campaignOnly(() -> Vars.state == null || Vars.state.isCampaign()), - lightingOnly(() -> Vars.state == null || Vars.state.rules.lighting || Vars.state.isCampaign()), - berylliumOnly(() -> !Vars.state.rules.hiddenBuildItems.contains(Items.beryllium)), - ammoOnly(() -> Vars.state == null || Vars.state.rules.unitAmmo), - fogOnly(() -> Vars.state == null || Vars.state.rules.fog || Vars.state.rules.editor); +public class BuildVisibility{ + public static final BuildVisibility + + hidden = new BuildVisibility(() -> false), + shown = new BuildVisibility(() -> true), + debugOnly = new BuildVisibility(() -> false), + editorOnly = new BuildVisibility(() -> Vars.state.rules.editor), + sandboxOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.infiniteResources), + campaignOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.isCampaign()), + lightingOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.lighting || Vars.state.isCampaign()), + berylliumOnly = new BuildVisibility(() -> !Vars.state.rules.hiddenBuildItems.contains(Items.beryllium)), + ammoOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.unitAmmo), + fogOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.fog || Vars.state.rules.editor); private final Boolp visible; @@ -22,7 +24,7 @@ public enum BuildVisibility{ return visible.get(); } - BuildVisibility(Boolp visible){ + public BuildVisibility(Boolp visible){ this.visible = visible; } }