Polygonal protection bugfixes
This commit is contained in:
@@ -9,6 +9,7 @@ import mindustry.net.*;
|
|||||||
import mindustry.net.Packets.*;
|
import mindustry.net.Packets.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
import mindustry.world.blocks.storage.CoreBlock.*;
|
||||||
|
|
||||||
public class EventType{
|
public class EventType{
|
||||||
|
|
||||||
@@ -283,6 +284,15 @@ public class EventType{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Called when a core block is placed/removed or its team is changed. */
|
||||||
|
public static class CoreChangeEvent{
|
||||||
|
public CoreBuild core;
|
||||||
|
|
||||||
|
public CoreChangeEvent(CoreBuild core){
|
||||||
|
this.core = core;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static class StateChangeEvent{
|
public static class StateChangeEvent{
|
||||||
public final State from, to;
|
public final State from, to;
|
||||||
|
|
||||||
|
|||||||
@@ -28,22 +28,24 @@ public class OverlayRenderer{
|
|||||||
private float buildFade, unitFade;
|
private float buildFade, unitFade;
|
||||||
private Sized lastSelect;
|
private Sized lastSelect;
|
||||||
private Seq<CoreEdge> cedges = new Seq<>();
|
private Seq<CoreEdge> cedges = new Seq<>();
|
||||||
private int lastCores = -1;
|
private boolean updatedCores;
|
||||||
|
|
||||||
public OverlayRenderer(){
|
public OverlayRenderer(){
|
||||||
Events.on(WorldLoadEvent.class, e -> {
|
Events.on(WorldLoadEvent.class, e -> {
|
||||||
cedges.clear();
|
updatedCores = true;
|
||||||
lastCores = -1;
|
});
|
||||||
|
|
||||||
|
Events.on(CoreChangeEvent.class, e -> {
|
||||||
|
updatedCores = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateCoreEdges(){
|
private void updateCoreEdges(){
|
||||||
int count = state.teams.active.sum(t -> t.cores.size);
|
if(!updatedCores){
|
||||||
if(count == lastCores){
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastCores = count;
|
updatedCores = false;
|
||||||
cedges.clear();
|
cedges.clear();
|
||||||
|
|
||||||
Seq<Vec2> pos = new Seq<>();
|
Seq<Vec2> pos = new Seq<>();
|
||||||
@@ -55,6 +57,7 @@ public class OverlayRenderer{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//if this is laggy, it could be shoved in another thread.
|
||||||
var result = Voronoi.generate(pos.toArray(Vec2.class), 0, world.unitWidth(), 0, world.unitHeight());
|
var result = Voronoi.generate(pos.toArray(Vec2.class), 0, world.unitWidth(), 0, world.unitHeight());
|
||||||
for(var edge : result){
|
for(var edge : result){
|
||||||
cedges.add(new CoreEdge(edge.x1, edge.y1, edge.x2, edge.y2, teams.get(edge.site1).team, teams.get(edge.site2).team));
|
cedges.add(new CoreEdge(edge.x1, edge.y1, edge.x2, edge.y2, teams.get(edge.site1).team, teams.get(edge.site2).team));
|
||||||
|
|||||||
@@ -194,6 +194,20 @@ public class CoreBlock extends StorageBlock{
|
|||||||
super.damage(source, damage);
|
super.damage(source, damage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void created(){
|
||||||
|
super.created();
|
||||||
|
|
||||||
|
Events.fire(new CoreChangeEvent(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void changeTeam(Team next){
|
||||||
|
super.changeTeam(next);
|
||||||
|
|
||||||
|
Events.fire(new CoreChangeEvent(this));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double sense(LAccess sensor){
|
public double sense(LAccess sensor){
|
||||||
if(sensor == LAccess.itemCapacity) return storageCapacity;
|
if(sensor == LAccess.itemCapacity) return storageCapacity;
|
||||||
@@ -260,6 +274,8 @@ public class CoreBlock extends StorageBlock{
|
|||||||
spawner.getSpawns().add(tile);
|
spawner.getSpawns().add(tile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Events.fire(new CoreChangeEvent(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user