From 82bcf5966ebffbe6a8ba47b2928f5fe17ee2bdf0 Mon Sep 17 00:00:00 2001 From: TripleToxic <84622061+TripleToxic@users.noreply.github.com> Date: Sun, 7 Jul 2024 11:28:19 -0400 Subject: [PATCH] Sensors, SetProp, and SetRule (#9943) * some fun things for world proc only * fix the format artifact * SetProp and reformating * Wildcard imports * Wildcard imports * velocity conversion * compacting description Co-authored-by: Anuken * Update core/src/mindustry/world/blocks/defense/turrets/Turret.java --------- Co-authored-by: Anuken --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/entities/comp/UnitComp.java | 4 ++++ core/src/mindustry/logic/LAccess.java | 6 ++++-- core/src/mindustry/logic/LExecutor.java | 1 + core/src/mindustry/logic/LogicRule.java | 1 + .../blocks/defense/turrets/ContinuousLiquidTurret.java | 9 +++++++++ .../world/blocks/defense/turrets/ItemTurret.java | 9 +++++++++ .../world/blocks/defense/turrets/LiquidTurret.java | 9 +++++++++ 8 files changed, 38 insertions(+), 2 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index f58a7d3d7b..fd1b5e118d 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -2438,6 +2438,7 @@ lenum.shootp = Shoot at a unit/building with velocity prediction. lenum.config = Building configuration, e.g. sorter item. lenum.enabled = Whether the block is enabled. +laccess.currentammotype = Current ammo item/liquid of a turret. laccess.color = Illuminator color. laccess.controller = Unit controller. If processor controlled, returns processor.\nOtherwise, returns the unit itself. laccess.dead = Whether a unit/building is dead or no longer valid. diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 1b4e095909..63f30a4fc8 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -214,6 +214,8 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I case ammoCapacity -> type.ammoCapacity; case x -> World.conv(x); case y -> World.conv(y); + case velocityX -> vel.x * 60f / tilesize; + case velocityY -> vel.y * 60f / tilesize; case dead -> dead || !isAdded() ? 1 : 0; case team -> team.id; case shooting -> isShooting() ? 1 : 0; @@ -282,6 +284,8 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I y = World.unconv((float)value); if(!isLocal()) snapInterpolation(); } + case velocityX -> vel.x = (float)(value * tilesize / 60d); + case velocityY -> vel.y = (float)(value * tilesize / 60d); case rotation -> rotation = (float)value; case team -> { if(!net.client()){ diff --git a/core/src/mindustry/logic/LAccess.java b/core/src/mindustry/logic/LAccess.java index 46044562d6..a4d242e27c 100644 --- a/core/src/mindustry/logic/LAccess.java +++ b/core/src/mindustry/logic/LAccess.java @@ -17,6 +17,7 @@ public enum LAccess{ powerNetOut, ammo, ammoCapacity, + currentAmmoType, health, maxHealth, heat, @@ -28,6 +29,8 @@ public enum LAccess{ rotation, x, y, + velocityX, + velocityY, shootX, shootY, cameraX, @@ -68,7 +71,7 @@ public enum LAccess{ all = values(), senseable = Seq.select(all, t -> t.params.length <= 1).toArray(LAccess.class), controls = Seq.select(all, t -> t.params.length > 0).toArray(LAccess.class), - settable = {x, y, rotation, speed, armor, health, shield, team, flag, totalPower, payloadType}; + settable = {x, y, velocityX, velocityY, rotation, speed, armor, health, shield, team, flag, totalPower, payloadType}; LAccess(String... params){ this.params = params; @@ -79,5 +82,4 @@ public enum LAccess{ this.params = params; isObj = obj; } - } diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index f06cac9e1e..8ccfd4627f 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1497,6 +1497,7 @@ public class LExecutor{ } case ambientLight -> state.rules.ambientLight.fromDouble(value.num()); case solarMultiplier -> state.rules.solarMultiplier = Math.max(value.numf(), 0f); + case dragMultiplier -> state.rules.dragMultiplier = Math.max(value.numf(), 0f); case ban -> { Object cont = value.obj(); if(cont instanceof Block b){ diff --git a/core/src/mindustry/logic/LogicRule.java b/core/src/mindustry/logic/LogicRule.java index 0c05fcd033..6ce8de4b35 100644 --- a/core/src/mindustry/logic/LogicRule.java +++ b/core/src/mindustry/logic/LogicRule.java @@ -15,6 +15,7 @@ public enum LogicRule{ lighting, ambientLight, solarMultiplier, + dragMultiplier, ban, unban, diff --git a/core/src/mindustry/world/blocks/defense/turrets/ContinuousLiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ContinuousLiquidTurret.java index a843a3e985..ffd50d5b3d 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ContinuousLiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ContinuousLiquidTurret.java @@ -4,6 +4,7 @@ import arc.struct.*; import mindustry.content.*; import mindustry.entities.bullet.*; import mindustry.gen.*; +import mindustry.logic.*; import mindustry.type.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; @@ -77,6 +78,14 @@ public class ContinuousLiquidTurret extends ContinuousTurret{ super.updateTile(); } + @Override + public Object senseObject(LAccess sensor){ + return switch(sensor){ + case currentAmmoType -> liquids.current(); + default -> super.senseObject(sensor); + }; + } + @Override public boolean canConsume(){ return hasCorrectAmmo() && super.canConsume(); diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index 93a77b644f..51c07de96f 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -11,6 +11,7 @@ import mindustry.entities.bullet.*; import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.logic.*; import mindustry.type.*; import mindustry.ui.*; import mindustry.world.consumers.*; @@ -107,6 +108,14 @@ public class ItemTurret extends Turret{ } } + @Override + public Object senseObject(LAccess sensor){ + return switch(sensor){ + case currentAmmoType -> ammo.size > 0 ? ((ItemEntry)ammo.peek()).item : null; + default -> super.senseObject(sensor); + }; + } + @Override public void updateTile(){ unit.ammo((float)unit.type().ammoCapacity * totalAmmo / maxAmmo); diff --git a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java index c0087eee5f..82a9cf6d9e 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LiquidTurret.java @@ -6,6 +6,7 @@ import mindustry.core.*; import mindustry.entities.*; import mindustry.entities.bullet.*; import mindustry.gen.*; +import mindustry.logic.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.consumers.*; @@ -72,6 +73,14 @@ public class LiquidTurret extends Turret{ super.updateTile(); } + @Override + public Object senseObject(LAccess sensor){ + return switch(sensor){ + case currentAmmoType -> liquids.current(); + default -> super.senseObject(sensor); + }; + } + @Override protected void findTarget(){ if(extinguish && liquids.current().canExtinguish()){