mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-03-13 19:39:04 +07:00
Bugfixes
This commit is contained in:
parent
73ca6eeb74
commit
909da9de3c
@ -68,6 +68,8 @@ public class Vars implements Loadable{
|
|||||||
public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?labels=bug&template=bug_report.md";
|
public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?labels=bug&template=bug_report.md";
|
||||||
/** list of built-in servers.*/
|
/** list of built-in servers.*/
|
||||||
public static final Seq<String> defaultServers = Seq.with();
|
public static final Seq<String> defaultServers = Seq.with();
|
||||||
|
/** whether multi-tile mining is enabled */
|
||||||
|
public static final boolean multimine = false;
|
||||||
/** maximum distance between mine and core that supports automatic transferring */
|
/** maximum distance between mine and core that supports automatic transferring */
|
||||||
public static final float mineTransferRange = 220f;
|
public static final float mineTransferRange = 220f;
|
||||||
/** max chat message length */
|
/** max chat message length */
|
||||||
|
@ -314,6 +314,7 @@ public class BlockIndexer{
|
|||||||
|
|
||||||
/** Find the closest ore block relative to a position. */
|
/** Find the closest ore block relative to a position. */
|
||||||
public Tile findClosestOre(Unit unit, Item item){
|
public Tile findClosestOre(Unit unit, Item item){
|
||||||
|
if(multimine) return findClosestOre(unit.x, unit.y, item);
|
||||||
if(!(unit instanceof Minerc miner)) return null;
|
if(!(unit instanceof Minerc miner)) return null;
|
||||||
|
|
||||||
TileArray arr = getOrePositions(item);
|
TileArray arr = getOrePositions(item);
|
||||||
|
@ -2,14 +2,19 @@ package mindustry.ai.types;
|
|||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.ai.formations.*;
|
import mindustry.ai.formations.*;
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
|
import mindustry.world.*;
|
||||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
import mindustry.world.blocks.storage.CoreBlock.*;
|
||||||
|
|
||||||
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public class FormationAI extends AIController implements FormationMember{
|
public class FormationAI extends AIController implements FormationMember{
|
||||||
|
private static Seq<Tile> tiles = new Seq<>();
|
||||||
public Unit leader;
|
public Unit leader;
|
||||||
|
|
||||||
private Vec3 target = new Vec3();
|
private Vec3 target = new Vec3();
|
||||||
@ -51,19 +56,33 @@ public class FormationAI extends AIController implements FormationMember{
|
|||||||
|
|
||||||
Vec2 realtarget = vec.set(target);
|
Vec2 realtarget = vec.set(target);
|
||||||
|
|
||||||
float margin = 3f;
|
float margin = 4f;
|
||||||
|
|
||||||
float speed = unit.realSpeed();
|
float speed = unit.realSpeed();
|
||||||
|
|
||||||
if(unit.dst(realtarget) <= margin){
|
if(unit.dst(realtarget) <= margin){
|
||||||
unit.vel.approachDelta(Vec2.ZERO, speed * type.accel / 2f);
|
//unit.vel.approachDelta(Vec2.ZERO, speed * type.accel / 2f);
|
||||||
}else{
|
}else{
|
||||||
unit.moveAt(realtarget.sub(unit).limit(speed));
|
unit.moveAt(realtarget.sub(unit).limit(speed));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unit instanceof Minerc mine && leader instanceof Minerc com){
|
if(unit instanceof Minerc mine && leader instanceof Minerc com){
|
||||||
if(mine.validMine(com.mineTile())){
|
if(com.mineTile() != null){
|
||||||
mine.mineTile(com.mineTile());
|
if(multimine){
|
||||||
|
mine.mineTile(mine.validMine(com.mineTile()) ? com.mineTile() : null);
|
||||||
|
}else{
|
||||||
|
if(mine.mineTile() == null){
|
||||||
|
tiles.clear();
|
||||||
|
com.mineTile().circle(6, (cx, cy) -> {
|
||||||
|
Tile tile = world.tile(cx, cy);
|
||||||
|
if(mine.validMine(tile) && tile.drop() == com.mineTile().drop() && tile != com.mineTile()){
|
||||||
|
tiles.add(tile);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Tile min = tiles.min(t -> t.dst2(com.mineTile()));
|
||||||
|
mine.mineTile(min);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CoreBuild core = unit.team.core();
|
CoreBuild core = unit.team.core();
|
||||||
|
|
||||||
@ -77,7 +96,6 @@ public class FormationAI extends AIController implements FormationMember{
|
|||||||
}else{
|
}else{
|
||||||
mine.mineTile(null);
|
mine.mineTile(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unit instanceof Builderc build && leader instanceof Builderc com && com.activelyBuilding()){
|
if(unit instanceof Builderc build && leader instanceof Builderc com && com.activelyBuilding()){
|
||||||
|
@ -474,7 +474,7 @@ public class Bullets implements ContentList{
|
|||||||
drag = 0.001f;
|
drag = 0.001f;
|
||||||
ammoMultiplier = 2f;
|
ammoMultiplier = 2f;
|
||||||
statusDuration = 60f * 4f;
|
statusDuration = 60f * 4f;
|
||||||
damage = 0.1f;
|
damage = 0.2f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
heavyCryoShot = new LiquidBulletType(Liquids.cryofluid){{
|
heavyCryoShot = new LiquidBulletType(Liquids.cryofluid){{
|
||||||
@ -485,7 +485,7 @@ public class Bullets implements ContentList{
|
|||||||
drag = 0.001f;
|
drag = 0.001f;
|
||||||
ammoMultiplier = 2f;
|
ammoMultiplier = 2f;
|
||||||
statusDuration = 60f * 4f;
|
statusDuration = 60f * 4f;
|
||||||
damage = 0.1f;
|
damage = 0.2f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
heavySlagShot = new LiquidBulletType(Liquids.slag){{
|
heavySlagShot = new LiquidBulletType(Liquids.slag){{
|
||||||
@ -507,7 +507,7 @@ public class Bullets implements ContentList{
|
|||||||
drag = 0.001f;
|
drag = 0.001f;
|
||||||
ammoMultiplier = 2f;
|
ammoMultiplier = 2f;
|
||||||
statusDuration = 60f * 4f;
|
statusDuration = 60f * 4f;
|
||||||
damage = 0.1f;
|
damage = 0.2f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
driverBolt = new MassDriverBolt();
|
driverBolt = new MassDriverBolt();
|
||||||
|
@ -37,7 +37,7 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{
|
|||||||
|
|
||||||
public boolean validMine(Tile tile, boolean checkDst){
|
public boolean validMine(Tile tile, boolean checkDst){
|
||||||
return !(tile == null || tile.block() != Blocks.air || (!within(tile.worldx(), tile.worldy(), miningRange) && checkDst)
|
return !(tile == null || tile.block() != Blocks.air || (!within(tile.worldx(), tile.worldy(), miningRange) && checkDst)
|
||||||
|| tile.drop() == null || !canMine(tile.drop())) && state.teams.canMine(self(), tile);
|
|| tile.drop() == null || !canMine(tile.drop())) && state.teams.isValidMine(self(), tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean validMine(Tile tile){
|
public boolean validMine(Tile tile){
|
||||||
@ -105,7 +105,7 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{
|
|||||||
float ex = mineTile.worldx() + Mathf.sin(Time.time() + 48, swingScl, swingMag);
|
float ex = mineTile.worldx() + Mathf.sin(Time.time() + 48, swingScl, swingMag);
|
||||||
float ey = mineTile.worldy() + Mathf.sin(Time.time() + 48, swingScl + 2f, swingMag);
|
float ey = mineTile.worldy() + Mathf.sin(Time.time() + 48, swingScl + 2f, swingMag);
|
||||||
|
|
||||||
Draw.z(Layer.flyingUnit - 0.1f);
|
Draw.z(Layer.flyingUnitLow - 0.1f);
|
||||||
|
|
||||||
Draw.color(Color.lightGray, Color.white, 1f - flashScl + Mathf.absin(Time.time(), 0.5f, flashScl));
|
Draw.color(Color.lightGray, Color.white, 1f - flashScl + Mathf.absin(Time.time(), 0.5f, flashScl));
|
||||||
|
|
||||||
|
@ -145,15 +145,16 @@ public class Teams{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return whether this ore is taken. */
|
/** @return whether this ore is not taken. */
|
||||||
public boolean canMine(Unit unit, Tile tile){
|
public boolean isValidMine(Unit unit, Tile tile){
|
||||||
|
if(multimine) return true;
|
||||||
if(tile == null) return false;
|
if(tile == null) return false;
|
||||||
Unit u = mined.get(tile.pos());
|
Unit u = mined.get(tile.pos());
|
||||||
return u == unit || u == null;
|
return u == unit || u == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerMined(Tile tile, Unit unit){
|
public void registerMined(Tile tile, Unit unit){
|
||||||
if(tile == null || unit == null) return;
|
if(tile == null || unit == null || multimine) return;
|
||||||
mined.put(tile.pos(), unit);
|
mined.put(tile.pos(), unit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user