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";
|
||||
/** list of built-in servers.*/
|
||||
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 */
|
||||
public static final float mineTransferRange = 220f;
|
||||
/** max chat message length */
|
||||
|
@ -314,6 +314,7 @@ public class BlockIndexer{
|
||||
|
||||
/** Find the closest ore block relative to a position. */
|
||||
public Tile findClosestOre(Unit unit, Item item){
|
||||
if(multimine) return findClosestOre(unit.x, unit.y, item);
|
||||
if(!(unit instanceof Minerc miner)) return null;
|
||||
|
||||
TileArray arr = getOrePositions(item);
|
||||
|
@ -2,14 +2,19 @@ package mindustry.ai.types;
|
||||
|
||||
import arc.math.*;
|
||||
import arc.math.geom.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import mindustry.ai.formations.*;
|
||||
import mindustry.entities.units.*;
|
||||
import mindustry.gen.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.blocks.storage.CoreBlock.*;
|
||||
|
||||
import static mindustry.Vars.*;
|
||||
|
||||
public class FormationAI extends AIController implements FormationMember{
|
||||
private static Seq<Tile> tiles = new Seq<>();
|
||||
public Unit leader;
|
||||
|
||||
private Vec3 target = new Vec3();
|
||||
@ -51,19 +56,33 @@ public class FormationAI extends AIController implements FormationMember{
|
||||
|
||||
Vec2 realtarget = vec.set(target);
|
||||
|
||||
float margin = 3f;
|
||||
float margin = 4f;
|
||||
|
||||
float speed = unit.realSpeed();
|
||||
|
||||
if(unit.dst(realtarget) <= margin){
|
||||
unit.vel.approachDelta(Vec2.ZERO, speed * type.accel / 2f);
|
||||
//unit.vel.approachDelta(Vec2.ZERO, speed * type.accel / 2f);
|
||||
}else{
|
||||
unit.moveAt(realtarget.sub(unit).limit(speed));
|
||||
}
|
||||
|
||||
if(unit instanceof Minerc mine && leader instanceof Minerc com){
|
||||
if(mine.validMine(com.mineTile())){
|
||||
mine.mineTile(com.mineTile());
|
||||
if(com.mineTile() != null){
|
||||
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();
|
||||
|
||||
@ -77,7 +96,6 @@ public class FormationAI extends AIController implements FormationMember{
|
||||
}else{
|
||||
mine.mineTile(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(unit instanceof Builderc build && leader instanceof Builderc com && com.activelyBuilding()){
|
||||
|
@ -474,7 +474,7 @@ public class Bullets implements ContentList{
|
||||
drag = 0.001f;
|
||||
ammoMultiplier = 2f;
|
||||
statusDuration = 60f * 4f;
|
||||
damage = 0.1f;
|
||||
damage = 0.2f;
|
||||
}};
|
||||
|
||||
heavyCryoShot = new LiquidBulletType(Liquids.cryofluid){{
|
||||
@ -485,7 +485,7 @@ public class Bullets implements ContentList{
|
||||
drag = 0.001f;
|
||||
ammoMultiplier = 2f;
|
||||
statusDuration = 60f * 4f;
|
||||
damage = 0.1f;
|
||||
damage = 0.2f;
|
||||
}};
|
||||
|
||||
heavySlagShot = new LiquidBulletType(Liquids.slag){{
|
||||
@ -507,7 +507,7 @@ public class Bullets implements ContentList{
|
||||
drag = 0.001f;
|
||||
ammoMultiplier = 2f;
|
||||
statusDuration = 60f * 4f;
|
||||
damage = 0.1f;
|
||||
damage = 0.2f;
|
||||
}};
|
||||
|
||||
driverBolt = new MassDriverBolt();
|
||||
|
@ -37,7 +37,7 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{
|
||||
|
||||
public boolean validMine(Tile tile, boolean 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){
|
||||
@ -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 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));
|
||||
|
||||
|
@ -145,15 +145,16 @@ public class Teams{
|
||||
}
|
||||
}
|
||||
|
||||
/** @return whether this ore is taken. */
|
||||
public boolean canMine(Unit unit, Tile tile){
|
||||
/** @return whether this ore is not taken. */
|
||||
public boolean isValidMine(Unit unit, Tile tile){
|
||||
if(multimine) return true;
|
||||
if(tile == null) return false;
|
||||
Unit u = mined.get(tile.pos());
|
||||
return u == unit || u == null;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user