Logic sensor accesses more infos of payload (#8766)
* Added Logic Sense Payload * Update UnitComp.java --------- Co-authored-by: Anuken <arnukren@gmail.com>
This commit is contained in:
@@ -1988,6 +1988,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
public double sense(Content content){
|
public double sense(Content content){
|
||||||
if(content instanceof Item i && items != null) return items.get(i);
|
if(content instanceof Item i && items != null) return items.get(i);
|
||||||
if(content instanceof Liquid l && liquids != null) return liquids.get(l);
|
if(content instanceof Liquid l && liquids != null) return liquids.get(l);
|
||||||
|
if(getPayloads() != null){
|
||||||
|
if(content instanceof UnitType u) return getPayloads().get(u);
|
||||||
|
if(content instanceof Block b) return getPayloads().get(b);
|
||||||
|
}
|
||||||
return Float.NaN; //invalid sense
|
return Float.NaN; //invalid sense
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -241,6 +241,8 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
controller instanceof CommandAI command && command.hasCommand() ? ctrlCommand :
|
controller instanceof CommandAI command && command.hasCommand() ? ctrlCommand :
|
||||||
0;
|
0;
|
||||||
case payloadCount -> ((Object)this) instanceof Payloadc pay ? pay.payloads().size : 0;
|
case payloadCount -> ((Object)this) instanceof Payloadc pay ? pay.payloads().size : 0;
|
||||||
|
case totalPayload -> ((Object)this) instanceof Payloadc pay ? pay.payloadUsed() : 0;
|
||||||
|
case payloadCapacity -> type.payloadCapacity;
|
||||||
case size -> hitSize / tilesize;
|
case size -> hitSize / tilesize;
|
||||||
case color -> Color.toDoubleBits(team.color.r, team.color.g, team.color.b, 1f);
|
case color -> Color.toDoubleBits(team.color.r, team.color.g, team.color.b, 1f);
|
||||||
default -> Float.NaN;
|
default -> Float.NaN;
|
||||||
@@ -265,6 +267,16 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I
|
|||||||
@Override
|
@Override
|
||||||
public double sense(Content content){
|
public double sense(Content content){
|
||||||
if(content == stack().item) return stack().amount;
|
if(content == stack().item) return stack().amount;
|
||||||
|
if(content instanceof UnitType u){
|
||||||
|
return ((Object)this) instanceof Payloadc pay ?
|
||||||
|
(pay.payloads().isEmpty() ? 0 :
|
||||||
|
pay.payloads().count(p -> p instanceof UnitPayload up && up.unit.type == u)) : 0;
|
||||||
|
}
|
||||||
|
if(content instanceof Block b){
|
||||||
|
return ((Object)this) instanceof Payloadc pay ?
|
||||||
|
(pay.payloads().isEmpty() ? 0 :
|
||||||
|
pay.payloads().count(p -> p instanceof BuildPayload bp && bp.build.block == b)) : 0;
|
||||||
|
}
|
||||||
return Float.NaN;
|
return Float.NaN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,8 @@ public enum LAccess{
|
|||||||
name,
|
name,
|
||||||
payloadCount,
|
payloadCount,
|
||||||
payloadType,
|
payloadType,
|
||||||
|
totalPayload,
|
||||||
|
payloadCapacity,
|
||||||
id,
|
id,
|
||||||
|
|
||||||
//values with parameters are considered controllable
|
//values with parameters are considered controllable
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import mindustry.logic.LExecutor.*;
|
|||||||
import mindustry.logic.LogicFx.*;
|
import mindustry.logic.LogicFx.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
|
import mindustry.world.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
@@ -614,6 +615,29 @@ public class LStatements{
|
|||||||
if(++c % 6 == 0) i.row();
|
if(++c % 6 == 0) i.row();
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
new Table(i -> {
|
||||||
|
i.left();
|
||||||
|
int c = 0;
|
||||||
|
for(UnitType item : Vars.content.units()){
|
||||||
|
if(!item.unlockedNow() || item.hidden) continue;
|
||||||
|
i.button(new TextureRegionDrawable(item.uiIcon), Styles.flati, iconSmall, () -> {
|
||||||
|
stype("@" + item.name);
|
||||||
|
hide.run();
|
||||||
|
}).size(40f);
|
||||||
|
|
||||||
|
if(++c % 6 == 0) i.row();
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Block item : Vars.content.blocks()){
|
||||||
|
if(!item.unlockedNow() || item.isHidden()) continue;
|
||||||
|
i.button(new TextureRegionDrawable(item.uiIcon), Styles.flati, iconSmall, () -> {
|
||||||
|
stype("@" + item.name);
|
||||||
|
hide.run();
|
||||||
|
}).size(40f);
|
||||||
|
|
||||||
|
if(++c % 6 == 0) i.row();
|
||||||
|
}
|
||||||
|
}),
|
||||||
//sensors
|
//sensors
|
||||||
new Table(i -> {
|
new Table(i -> {
|
||||||
for(LAccess sensor : LAccess.senseable){
|
for(LAccess sensor : LAccess.senseable){
|
||||||
@@ -625,7 +649,7 @@ public class LStatements{
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
Drawable[] icons = {Icon.box, Icon.liquid, Icon.tree};
|
Drawable[] icons = {Icon.box, Icon.liquid, Icon.units, Icon.tree};
|
||||||
Stack stack = new Stack(tables[selected]);
|
Stack stack = new Stack(tables[selected]);
|
||||||
ButtonGroup<Button> group = new ButtonGroup<>();
|
ButtonGroup<Button> group = new ButtonGroup<>();
|
||||||
|
|
||||||
@@ -643,7 +667,7 @@ public class LStatements{
|
|||||||
}).height(50f).growX().checked(selected == fi).group(group);
|
}).height(50f).growX().checked(selected == fi).group(group);
|
||||||
}
|
}
|
||||||
t.row();
|
t.row();
|
||||||
t.add(stack).colspan(3).width(240f).left();
|
t.add(stack).colspan(4).width(240f).left();
|
||||||
}));
|
}));
|
||||||
}, Styles.logict, () -> {}).size(40f).padLeft(-1).color(table.color);
|
}, Styles.logict, () -> {}).size(40f).padLeft(-1).color(table.color);
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import arc.math.*;
|
|||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
|
import mindustry.ctype.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
@@ -251,6 +252,13 @@ public class PayloadBlock extends Block{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double sense(Content content){
|
||||||
|
if(payload instanceof UnitPayload up) return up.unit.type == content ? 1 : 0;
|
||||||
|
if(payload instanceof BuildPayload bp) return bp.build.block == content ? 1 : 0;
|
||||||
|
return super.sense(content);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(Writes write){
|
public void write(Writes write){
|
||||||
super.write(write);
|
super.write(write);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import arc.math.*;
|
|||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
|
import mindustry.ctype.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
@@ -201,6 +202,13 @@ public class PayloadDeconstructor extends PayloadBlock{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public double sense(Content content){
|
||||||
|
if(deconstructing instanceof UnitPayload up) return up.unit.type == content ? 1 : 0;
|
||||||
|
if(deconstructing instanceof BuildPayload bp) return bp.build.block == content ? 1 : 0;
|
||||||
|
return super.sense(content);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double sense(LAccess sensor){
|
public double sense(LAccess sensor){
|
||||||
if(sensor == LAccess.progress) return progress;
|
if(sensor == LAccess.progress) return progress;
|
||||||
|
|||||||
Reference in New Issue
Block a user