mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-04-28 16:30:59 -07:00
Fixed #3045
This commit is contained in:
parent
82fe66b931
commit
30abfc0619
28 changed files with 53 additions and 19 deletions
2
core/assets/baseparts/1603214918168.msch
Normal file
2
core/assets/baseparts/1603214918168.msch
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
mschxœ5<C593>Ë
|
||||
!E¯Ïy-J·ý‡ù(q¤£Gú÷<C3BA>„ââä&'›„Î.<Zl.Çž®Vª{lG¸|<7C>ŸK4ÌíúÙðü{»/ùßR±ÅÒ~•^=ÝùäГkÑïG<C3AF>ç àzRPm!&ÆÌX+ ÉÓ†4©¨²¼H}E“y$9’À˜’¢XQÜÔü‰æd8ZQŠ¡†acf,Œê˜ã"
|
||||
2
core/assets/baseparts/1603214945791.msch
Normal file
2
core/assets/baseparts/1603214945791.msch
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
mschxœ5<C593>A E¿JkêÊStã<74><08>˜I
|
||||
4”šx{¡ðòÿ¼¸vÐѽpq‘<71>°—”Ý›^˜Ú}æpŠ€ÆÄ…¼§#{Âã¯Ï>Å}SÆm‹tWØÏKæuÅXGÅq¤àY¬z\P?E½:<18>ÅYŽ
ªÍΤÅÔ¢h)<29>(¦%UDK½”½(¶.©%Ð#èV0F¨N#Ô
|
||||
1
core/assets/baseparts/1603214967392.msch
Normal file
1
core/assets/baseparts/1603214967392.msch
Normal file
|
|
@ -0,0 +1 @@
|
|||
mschxœ%ÍAƒ …á§€ÖZc\ô.z$ƒÓdƒÐ¤·/täƒ?“3†ÚoŽ`Þù¢Æ<>.ùL< ±$N›çìVü‡¾!b>=e·%¶ëù80r"·^!GKÐu€g9耦Ð×{S_@+±•¨$jÁ<08>ÐWê\oJSÀMú Ü…±¢0ý?ÂCâTŠªhÁÔqW
|
||||
3
core/assets/baseparts/1603214996033.msch
Normal file
3
core/assets/baseparts/1603214996033.msch
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
mschxœ%<25>Á
|
||||
à ƒÓªmic×½C/{£bU‡ÕÁÞ~¦ÿA>“ˆ·:nÁÁ¼ëé^XvwÚì?ŧ<Š/[ô5¬6ůû¥Œû'º¶âíºgX|qa=SÍÖAsCNµ¸àÙNÛA×0ðÞQ½˜=Mb‚¢9óMID‰Ò’ÔÑb‰Q§ÆÆAјٟZ¯}<ò™ê
|
||||
sFŠ£†‘©U.Œ‚ÖüBIÙ
|
||||
BIN
core/assets/baseparts/1603215024189.msch
Normal file
BIN
core/assets/baseparts/1603215024189.msch
Normal file
Binary file not shown.
2
core/assets/baseparts/1603215113546.msch
Normal file
2
core/assets/baseparts/1603215113546.msch
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
mschx°%п[nц пЬAв}╗Й"Ры
t'▒C$╓ь▌┬]╘╩ОВц
лcП┘яю.≈9бщЖgЭF╦фГ■сcKК8Xщф╦╔М╡╓}>OКРЪж÷в}▀цc┴Ш|ырt╬Фt©#╓-нГГ╨Г)ЬД┐▒еd╘qPр▓▌r$╫b╓@Й*bые2r║ТtрЁRZр▒@▌╓W<╩x╘⌠ф^oWй╣5оj=+Sjт0Ёяq∙@й─╜╕Xа:ю≈█Rз╠╢⌠?╗■
|
||||
∙,#G<╘ICZр▒@▌╓''%HЁРZ┘·°х@^ТеG<╘ICZми+y#ОДC>СrА#Ё
|
||||
2
core/assets/baseparts/1603215171294.msch
Normal file
2
core/assets/baseparts/1603215171294.msch
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
mschx<>%<25>с<EFBFBD><D181> <10>AБњЃiп<69><D0BF>тpяBЂ`лјюMЎЛ
|
||||
!п0;060Щ/ћЛoфKР8бJ\kЬ шa|Tk~Sq)O-Щћ<D0A9>h_|<7C>СM%Ю35V<35>тОИ<D09E>г<EFBFBD><D0B3>\№иђь<D192>[}ЂйБњ#<23>БвтЖМ<D096>@0ђ-<2D>'hhХ0Н<30>њџ@С <13>Wн@<40>JаCi4bj<62>лpД<70>2gу<67>На_И]фЁ<D184>EгБА-ЮK+О<19>ўЗ.щ
|
||||
1
core/assets/baseparts/1603215272794.msch
Normal file
1
core/assets/baseparts/1603215272794.msch
Normal file
|
|
@ -0,0 +1 @@
|
|||
mschxśM<C59B>KnÄ DŚ1±ŁÉ̲ćPČ&#$¶ó9yv™tCYŔë_Ń%đŚ«„Jnő<6E>ŢÎÝo®Äč>1-~źKŘŽ<C598>đ„i?ËÝŰ#řBIŽ®ŘÍ%q;ÂáR8W;çôîżrÁË–üąş#Ěv)!F\7ÖŮ”oIy÷¸ý{âŻ4…ĂŻvĎg™=›<>!;®ú^é`4čEťä`¨–ő
şah¨:I:!ę¬<C499>Ňu0hRFCĺÇ7†Ç˝¨:«T›W0t<30>á=÷z*] %wX ›#ÝéćH7Gşé4}mWWłŔ0¸3őÄ®§ćbŔČ6
eňŔ>
|
||||
4
core/assets/baseparts/1603215345320.msch
Normal file
4
core/assets/baseparts/1603215345320.msch
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
mschxśEĎën‚@ŕĂĹ\EíŐôřŰ÷!şdͲ´éĂ:ĂiŇ<69>řqvfÇاȇöćP^¦Ń]|<7C>°g7žBwŹť€
|
||||
ąVp<EFBFBD>]l‡nş5'?|ą`»čnÍč§pr°};şĐśC×÷0ÁOŃěďţ[vM߆«Ś˝Ľ4÷vpýß‘'ˇ‰Ú*áżŕHäY~2dJNVÄ(©<>¦BµL¦r +bHˇčw-cKM™¤52e«ó*ţWĹR!K˛L–{XÝ#SAJR‘5±dC¶¤V6r]m`Ët~Ěóü<C3B3>ťŚ´ÔHÁ覵Rv™ľÓX
|
||||
2H©ÉNk{Ţ8<C5A2>'ňL^Č+y#ď
|
||||
p”U%%%JAJ$żć?M
|
||||
2
core/assets/baseparts/1603215415778.msch
Normal file
2
core/assets/baseparts/1603215415778.msch
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
mschxœ-‹k
|
||||
1„ÇMÅîуôPÅ
²PÛÒ®èÕEdM¬?’o2“Á€cý<>1e_BðÏš‚/g®—²äuI08åôàâbšÙI~eŒõ.p«ú°RöÚÆù×wÙGÿO`<60>ÁÁîÑmȾadh{ÑN²Þ‚:õŒ‚Ä'Õ"IZ}ä°í²z}‰o)"
|
||||
BIN
core/assets/baseparts/1603215454977.msch
Normal file
BIN
core/assets/baseparts/1603215454977.msch
Normal file
Binary file not shown.
2
core/assets/baseparts/1603215491407.msch
Normal file
2
core/assets/baseparts/1603215491407.msch
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
mschxœ5Ïኃ0à1µµmjï9äàÞ(h~ÔHŒÂ½ýeÁ<>ufCÄn
|
||||
Õj‡Ç¶ÍÅÝÎgøA7¹}Œ~K>¬@
}ÚcNè“OvõÇ2Œa=ÝoˆÐ×Úc<C39A>ƒ<EFBFBD>\Dç“[†=qt0ÛêŽÅ&?Sôóà(Ð (p=òR¤$Ñ‚’ôJ T&ge¦Öù âªJ¬IM¡Ê´Ò*´ü~#÷”d÷|ÚEE4©I#t¹©„Fxpzpzʤ3% hù¹'³›/™4ol¸`¸`¸`¸ðæÂ›SÏfÏfÏfÏìÃæG¦?J
(,
|
||||
BIN
core/assets/baseparts/1603215563717.msch
Normal file
BIN
core/assets/baseparts/1603215563717.msch
Normal file
Binary file not shown.
BIN
core/assets/baseparts/1603215697527.msch
Normal file
BIN
core/assets/baseparts/1603215697527.msch
Normal file
Binary file not shown.
BIN
core/assets/baseparts/1603215771822.msch
Normal file
BIN
core/assets/baseparts/1603215771822.msch
Normal file
Binary file not shown.
1
core/assets/baseparts/1603215801163.msch
Normal file
1
core/assets/baseparts/1603215801163.msch
Normal file
|
|
@ -0,0 +1 @@
|
|||
mschxœ-Œ[ƒ D<>J¬JŸaQ¤’ÆÄMÓµ÷£½<C2A3>~<7E>¹g&—3—åíÓ1å°ÚdS²oôìò=-q[‚‡Ž[íL´ÞFÒÃq<C383>áå’ñav£ó.0[ñÀ
š”äŠSA/ÿ¤é‡†îû‘é<E28098>ciFÑ(ädPD~Ã+ï
|
||||
BIN
core/assets/baseparts/1603216038407.msch
Normal file
BIN
core/assets/baseparts/1603216038407.msch
Normal file
Binary file not shown.
1
core/assets/baseparts/1603216102310.msch
Normal file
1
core/assets/baseparts/1603216102310.msch
Normal file
|
|
@ -0,0 +1 @@
|
|||
mschxœ%Ž[jÄ0EoœØ“©K¡]†e2¢58Ö ;SºûJI]¡">¶–OÂ}ü°ô\_Œø ~HyŽÂ
¸!öK¾)
þ%QÁ5KzæF±æN’RªŠ2èL<C3A8>/9Ÿ£ŒÜÊu¦ƒÛ‹þX„¯¡ü¼|iÀíX˜9u+8¬–¬ØpózÝàÁà&Ö‰mÂOh!¼>àt^m1ì÷‰·‰ˆ%(ÞMí6´A—ýÖe)“
|
||||
3
core/assets/baseparts/1603216240041.msch
Normal file
3
core/assets/baseparts/1603216240041.msch
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
mschxœM‘IRÃ0E¿åÙJâk.àcp—£
|
||||
*<aK¡85;lB·:Råzý{øRZxÂA!™ºÑ ÚœéÆeþ4+ôÙlýjgç ØAo~½˜Ö…b=šþ›lß
íâÇûÅ›iûy:{ëÐlóÐíÒMfh)ºƒm;ÍgsÏèÁ~x{n]7½£êýàìµsóŠý½°ÎÞÑa<C391>³ÔbýÈöWóõ¯c›ýÚd÷Î:Ü¿½˜É¬Á x¥e¡n7h¼ Œ"DœRALAJ*Ir <09>F<EFBFBD><46>c®ÆR<C386>¹Jˤ‚Œ‘’KŪ@”JD9[#œ@¾ŒX@As<73>–Bæ
|
||||
žã8ÔJ®q*¨ŠUIP)ÝŠò•äµti¾/ƒŽa‚RP 4bE<62>v< °µuuU‹ªEEE5¢^NE ±J³ÊDåüoj£_ƒ½Ãïí›Þâ™Ø@h±ŒD<C592> èú ¡*¢Û
(<Ê¢Nüp9!¬ôÄ+e•ˆJEe¢rQ´Ù?Ç]
|
||||
BIN
core/assets/baseparts/1603216539888.msch
Normal file
BIN
core/assets/baseparts/1603216539888.msch
Normal file
Binary file not shown.
|
|
@ -1652,7 +1652,7 @@ public class Blocks implements ContentList{
|
|||
}},
|
||||
Items.titanium, new ShrapnelBulletType(){{
|
||||
length = brange;
|
||||
damage = 65f;
|
||||
damage = 66f;
|
||||
ammoMultiplier = 4f;
|
||||
width = 17f;
|
||||
reloadMultiplier = 1.3f;
|
||||
|
|
|
|||
|
|
@ -911,7 +911,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||
/** Called when arbitrary configuration is applied to a tile. */
|
||||
public void configured(@Nullable Unit builder, @Nullable Object value){
|
||||
//null is of type void.class; anonymous classes use their superclass.
|
||||
Class<?> type = value == null ? void.class : value.getClass().isAnonymousClass() ? value.getClass().getSuperclass() : value.getClass();
|
||||
Class<?> type = value == null ? void.class : value.getClass().isAnonymousClass() || value.getClass().getSimpleName().startsWith("adapter") ? value.getClass().getSuperclass() : value.getClass();
|
||||
|
||||
if(builder != null && builder.isPlayer()){
|
||||
lastAccessed = builder.getPlayer().name;
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ public class LExecutor{
|
|||
public LongSeq graphicsBuffer = new LongSeq();
|
||||
public StringBuilder textBuffer = new StringBuilder();
|
||||
public Building[] links = {};
|
||||
public IntSet linkIds = new IntSet();
|
||||
public Team team = Team.derelict;
|
||||
|
||||
public boolean initialized(){
|
||||
|
|
@ -212,9 +213,9 @@ public class LExecutor{
|
|||
public LLocate locate = LLocate.building;
|
||||
public BlockFlag flag = BlockFlag.core;
|
||||
public int enemy, ore;
|
||||
public int outX, outY, outFound;
|
||||
public int outX, outY, outFound, outBuild;
|
||||
|
||||
public UnitLocateI(LLocate locate, BlockFlag flag, int enemy, int ore, int outX, int outY, int outFound){
|
||||
public UnitLocateI(LLocate locate, BlockFlag flag, int enemy, int ore, int outX, int outY, int outFound, int outBuild){
|
||||
this.locate = locate;
|
||||
this.flag = flag;
|
||||
this.enemy = enemy;
|
||||
|
|
@ -271,6 +272,7 @@ public class LExecutor{
|
|||
cache.found = false;
|
||||
exec.setnum(outFound, 0);
|
||||
}
|
||||
exec.setobj(outFound, res != null && res.build != null && res.build.team == exec.team ? res.build : null);
|
||||
}else{
|
||||
exec.setbool(outFound, cache.found);
|
||||
exec.setnum(outX, cache.x);
|
||||
|
|
@ -446,13 +448,13 @@ public class LExecutor{
|
|||
float range = Math.max(unit.range(), buildingRange);
|
||||
if(!unit.within(x1, y1, range)){
|
||||
exec.setobj(p3, null);
|
||||
exec.setnum(p4, 0);
|
||||
exec.setobj(p4, null);
|
||||
}else{
|
||||
Tile tile = world.tileWorld(x1, y1);
|
||||
//any environmental solid block is returned as StoneWall, aka "@solid"
|
||||
Block block = tile == null ? null : !tile.synthetic() ? (tile.solid() ? Blocks.stoneWall : Blocks.air) : tile.block();
|
||||
exec.setobj(p3, block);
|
||||
exec.setnum(p4, tile != null && tile.build != null ? tile.build.rotation : 0);
|
||||
exec.setobj(p4, tile != null && tile.build != null ? tile.build : null);
|
||||
}
|
||||
}
|
||||
case itemDrop -> {
|
||||
|
|
@ -510,11 +512,11 @@ public class LExecutor{
|
|||
@Override
|
||||
public void run(LExecutor exec){
|
||||
Object obj = exec.obj(target);
|
||||
if(obj instanceof Controllable cont && cont.team() == exec.team){
|
||||
if(obj instanceof Building b && b.team == exec.team && exec.linkIds.contains(b.id)){
|
||||
if(type.isObj){
|
||||
cont.control(type, exec.obj(p1), exec.num(p2), exec.num(p3), exec.num(p4));
|
||||
b.control(type, exec.obj(p1), exec.num(p2), exec.num(p3), exec.num(p4));
|
||||
}else{
|
||||
cont.control(type, exec.num(p1), exec.num(p2), exec.num(p3), exec.num(p4));
|
||||
b.control(type, exec.num(p1), exec.num(p2), exec.num(p3), exec.num(p4));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -607,6 +609,7 @@ public class LExecutor{
|
|||
Object target = exec.obj(from);
|
||||
Object sense = exec.obj(type);
|
||||
|
||||
//TODO should remote enemy buildings be senseable?
|
||||
if(target instanceof Senseable se){
|
||||
if(sense instanceof Content){
|
||||
exec.setnum(to, se.sense(((Content)sense)));
|
||||
|
|
|
|||
|
|
@ -819,7 +819,7 @@ public class LStatements{
|
|||
public LLocate locate = LLocate.building;
|
||||
public BlockFlag flag = BlockFlag.core;
|
||||
public String enemy = "true", ore = "@copper";
|
||||
public String outX = "outx", outY = "outy", outFound = "found";
|
||||
public String outX = "outx", outY = "outy", outFound = "found", outBuild = "building";
|
||||
|
||||
@Override
|
||||
public void build(Table table){
|
||||
|
|
@ -905,6 +905,8 @@ public class LStatements{
|
|||
table.add(" found ").left();
|
||||
fields(table, outFound, str -> outFound = str);
|
||||
|
||||
table.add(" building ").left();
|
||||
fields(table, outBuild, str -> outBuild = str);
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -915,7 +917,7 @@ public class LStatements{
|
|||
|
||||
@Override
|
||||
public LInstruction build(LAssembler builder){
|
||||
return new UnitLocateI(locate, flag, builder.var(enemy), builder.var(ore), builder.var(outX), builder.var(outY), builder.var(outFound));
|
||||
return new UnitLocateI(locate, flag, builder.var(enemy), builder.var(ore), builder.var(outX), builder.var(outY), builder.var(outFound), builder.var(outBuild));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ public enum LUnitControl{
|
|||
mine("x", "y"),
|
||||
flag("value"),
|
||||
build("x", "y", "block", "rotation"),
|
||||
getBlock("x", "y", "result", "resRot"),
|
||||
getBlock("x", "y", "type", "building"),
|
||||
within("x", "y", "radius", "result");
|
||||
|
||||
public final String[] params;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,10 @@ public class LiquidTurret extends Turret{
|
|||
super.setStats();
|
||||
|
||||
stats.add(Stat.ammo, new AmmoListValue<>(ammoTypes));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(){
|
||||
consumes.add(new ConsumeLiquidFilter(i -> ammoTypes.containsKey(i), 1f){
|
||||
@Override
|
||||
public boolean valid(Building entity){
|
||||
|
|
@ -53,6 +57,8 @@ public class LiquidTurret extends Turret{
|
|||
|
||||
}
|
||||
});
|
||||
|
||||
super.init();
|
||||
}
|
||||
|
||||
public class LiquidTurretBuild extends TurretBuild{
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ import mindustry.type.*;
|
|||
import mindustry.world.blocks.*;
|
||||
import mindustry.world.consumers.*;
|
||||
import mindustry.world.meta.*;
|
||||
import mindustry.world.meta.values.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
|
|
@ -60,7 +59,6 @@ public abstract class Turret extends ReloadTurret{
|
|||
public boolean alternate = false;
|
||||
public boolean targetAir = true;
|
||||
public boolean targetGround = true;
|
||||
public boolean acceptCoolant = true;
|
||||
|
||||
public Sortf unitSort = Unit::dst2;
|
||||
|
||||
|
|
@ -105,10 +103,6 @@ public abstract class Turret extends ReloadTurret{
|
|||
stats.add(Stat.reload, 60f / reloadTime * shots, StatUnit.none);
|
||||
stats.add(Stat.targetsAir, targetAir);
|
||||
stats.add(Stat.targetsGround, targetGround);
|
||||
|
||||
if(acceptCoolant){
|
||||
stats.add(Stat.booster, new BoosterListValue(reloadTime, consumes.<ConsumeLiquidBase>get(ConsumeType.liquid).amount, coolantMultiplier, true, l -> consumes.liquidfilters.get(l.id)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -279,10 +279,13 @@ public class LogicBlock extends Block{
|
|||
|
||||
//store link objects
|
||||
executor.links = new Building[links.count(l -> l.valid && l.active)];
|
||||
executor.linkIds.clear();
|
||||
int index = 0;
|
||||
for(LogicLink link : links){
|
||||
if(link.active && link.valid){
|
||||
executor.links[index ++] = world.build(link.x, link.y);
|
||||
Building build = world.build(link.x, link.y);
|
||||
executor.links[index ++] = build;
|
||||
if(build != null) executor.linkIds.add(build.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue