Add minimap mode to other objective markers
This commit is contained in:
@@ -2462,3 +2462,4 @@ lenum.boost = Start/stop boosting.
|
|||||||
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nSecond and third arguments are additional suffixes added using "-" separator.\nIf additional arguments are not strings, nothing is added to first string.
|
lenum.texture = Texture name straight from game's texture atlas (using kebab-case naming style).\nSecond and third arguments are additional suffixes added using "-" separator.\nIf additional arguments are not strings, nothing is added to first string.
|
||||||
lenum.texturewidth = Width of texture in tiles. Zero value scales marker width to original texture's size.
|
lenum.texturewidth = Width of texture in tiles. Zero value scales marker width to original texture's size.
|
||||||
lenum.textureheight = Height of texture in tiles. Zero value scales marker height to original texture's size.
|
lenum.textureheight = Height of texture in tiles. Zero value scales marker height to original texture's size.
|
||||||
|
lenum.minimapautoscale = Whether to scale marker in minimap mode corresponding to player's zoom level.
|
||||||
|
|||||||
@@ -613,6 +613,10 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
public static abstract class ObjectiveMarker{
|
public static abstract class ObjectiveMarker{
|
||||||
/** Makes sure markers are only added once. */
|
/** Makes sure markers are only added once. */
|
||||||
public transient boolean wasAdded;
|
public transient boolean wasAdded;
|
||||||
|
/** Whether to display marker on minimap instead of world. {@link MinimapMarker} ignores this value. */
|
||||||
|
public boolean minimap = false;
|
||||||
|
/** Whether to scale marker in minimap mode corresponding to player's zoom level. {@link MinimapMarker} ignores this value. */
|
||||||
|
public boolean minimapAutoscale = false;
|
||||||
/** Hides the marker, used by world processors. */
|
/** Hides the marker, used by world processors. */
|
||||||
protected boolean hidden = false;
|
protected boolean hidden = false;
|
||||||
/** On which z-sorting layer is marker drawn. */
|
/** On which z-sorting layer is marker drawn. */
|
||||||
@@ -629,8 +633,10 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
/** Control marker with world processor code*/
|
/** Control marker with world processor code*/
|
||||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||||
switch(type){
|
switch(type){
|
||||||
case visibility -> hidden = ((Math.abs(p1) < 1e-5));
|
case visibility -> hidden = (Math.abs(p1) < 1e-5);
|
||||||
case drawLayer -> drawLayer = (float)p1;
|
case drawLayer -> drawLayer = (float)p1;
|
||||||
|
case minimap -> minimap = (Math.abs(p1) >= 1e-5);
|
||||||
|
case minimapAutoscale -> minimapAutoscale = (Math.abs(p1) >= 1e-5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void setText(String text, boolean fetch){}
|
public void setText(String text, boolean fetch){}
|
||||||
@@ -697,7 +703,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
if(hidden) return;
|
if(hidden || minimap) return;
|
||||||
|
|
||||||
//in case some idiot decides to make 9999999 sides and freeze the game
|
//in case some idiot decides to make 9999999 sides and freeze the game
|
||||||
int sides = Math.min(this.sides, 200);
|
int sides = Math.min(this.sides, 200);
|
||||||
@@ -707,7 +713,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
Lines.poly(pos.x, pos.y, sides, radius + 1f, rotation);
|
Lines.poly(pos.x, pos.y, sides, radius + 1f, rotation);
|
||||||
Lines.stroke(1f, color);
|
Lines.stroke(1f, color);
|
||||||
Lines.poly(pos.x, pos.y, sides, radius + 1f, rotation);
|
Lines.poly(pos.x, pos.y, sides, radius + 1f, rotation);
|
||||||
Draw.z(Layer.overlayUI);
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|
||||||
if(fetchedText == null){
|
if(fetchedText == null){
|
||||||
@@ -720,6 +725,34 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
WorldLabel.drawAt(fetchedText, pos.x, pos.y + radius + textHeight, drawLayer, flags, fontSize);
|
WorldLabel.drawAt(fetchedText, pos.x, pos.y + radius + textHeight, drawLayer, flags, fontSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawMinimap(MinimapRenderer minimap){
|
||||||
|
if(hidden || !this.minimap) return;
|
||||||
|
|
||||||
|
//in case some idiot decides to make 9999999 sides and freeze the game
|
||||||
|
int sides = Math.min(this.sides, 200);
|
||||||
|
|
||||||
|
minimap.transform(Tmp.v1.set(pos.x + 4f, pos.y + 4f));
|
||||||
|
|
||||||
|
float rad = minimap.scale(radius, minimapAutoscale);
|
||||||
|
|
||||||
|
Draw.z(drawLayer);
|
||||||
|
Lines.stroke(minimap.scale(3f, minimapAutoscale), Pal.gray);
|
||||||
|
Lines.poly(Tmp.v1.x, Tmp.v1.y, sides, rad + 1f, rotation);
|
||||||
|
Lines.stroke(minimap.scale(1f, minimapAutoscale), color);
|
||||||
|
Lines.poly(Tmp.v1.x, Tmp.v1.y, sides, rad + 1f, rotation);
|
||||||
|
Draw.reset();
|
||||||
|
|
||||||
|
if(fetchedText == null){
|
||||||
|
fetchedText = fetchText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
// font size cannot be 0
|
||||||
|
if(Math.abs(fontSize) < 1e-5) return;
|
||||||
|
|
||||||
|
WorldLabel.drawAt(fetchedText, Tmp.v1.x, Tmp.v1.y + rad + minimap.scale(textHeight, minimapAutoscale), drawLayer, flags, minimap.scale(fontSize, minimapAutoscale));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||||
switch(type){
|
switch(type){
|
||||||
@@ -802,7 +835,6 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
Lines.stroke(Scl.scl((1f - fin) * stroke + 0.1f), color);
|
Lines.stroke(Scl.scl((1f - fin) * stroke + 0.1f), color);
|
||||||
Lines.circle(Tmp.v1.x, Tmp.v1.y, rad * fin);
|
Lines.circle(Tmp.v1.x, Tmp.v1.y, rad * fin);
|
||||||
|
|
||||||
Draw.z(Layer.overlayUI);
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -842,7 +874,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
if(hidden) return;
|
if(hidden || minimap) return;
|
||||||
|
|
||||||
//in case some idiot decides to make 9999999 sides and freeze the game
|
//in case some idiot decides to make 9999999 sides and freeze the game
|
||||||
int sides = Math.min(this.sides, 200);
|
int sides = Math.min(this.sides, 200);
|
||||||
@@ -861,7 +893,34 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
Fill.poly(pos.x, pos.y, sides, radius, rotation);
|
Fill.poly(pos.x, pos.y, sides, radius, rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.z(Layer.overlayUI);
|
Draw.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawMinimap(MinimapRenderer minimap){
|
||||||
|
if(hidden || !this.minimap) return;
|
||||||
|
|
||||||
|
//in case some idiot decides to make 9999999 sides and freeze the game
|
||||||
|
int sides = Math.min(this.sides, 200);
|
||||||
|
|
||||||
|
minimap.transform(Tmp.v1.set(pos.x + 4f, pos.y + 4f));
|
||||||
|
|
||||||
|
float rad = minimap.scale(radius, minimapAutoscale);
|
||||||
|
|
||||||
|
Draw.z(drawLayer);
|
||||||
|
if(!fill){
|
||||||
|
if(outline){
|
||||||
|
Lines.stroke(minimap.scale(stroke + 2f, minimapAutoscale), Pal.gray);
|
||||||
|
Lines.poly(Tmp.v1.x, Tmp.v1.y, sides, minimap.scale(radius + 1f, minimapAutoscale), rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
Lines.stroke(stroke, color);
|
||||||
|
Lines.poly(Tmp.v1.x, Tmp.v1.y, sides, minimap.scale(radius + 1f, minimapAutoscale), rotation);
|
||||||
|
}else{
|
||||||
|
Draw.color(color);
|
||||||
|
Fill.poly(Tmp.v1.x, Tmp.v1.y, sides, minimap.scale(radius, minimapAutoscale), rotation);
|
||||||
|
}
|
||||||
|
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -914,7 +973,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
// font size cannot be 0
|
// font size cannot be 0
|
||||||
if(hidden || Math.abs(fontSize) < 1e-5) return;
|
if(hidden || Math.abs(fontSize) < 1e-5 || minimap) return;
|
||||||
|
|
||||||
if(fetchedText == null){
|
if(fetchedText == null){
|
||||||
fetchedText = fetchText(text);
|
fetchedText = fetchText(text);
|
||||||
@@ -923,6 +982,24 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
WorldLabel.drawAt(fetchedText, pos.x, pos.y, drawLayer, flags, fontSize);
|
WorldLabel.drawAt(fetchedText, pos.x, pos.y, drawLayer, flags, fontSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawMinimap(MinimapRenderer minimap){
|
||||||
|
if(hidden || !this.minimap) return;
|
||||||
|
|
||||||
|
float size = minimap.scale(fontSize, minimapAutoscale);
|
||||||
|
|
||||||
|
// font size cannot be 0
|
||||||
|
if(Math.abs(fontSize) < 1e-5) return;
|
||||||
|
|
||||||
|
minimap.transform(Tmp.v1.set(pos.x + 4f, pos.y + 4f));
|
||||||
|
|
||||||
|
if(fetchedText == null){
|
||||||
|
fetchedText = fetchText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
WorldLabel.drawAt(fetchedText, Tmp.v1.x, Tmp.v1.y, drawLayer, flags, size);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void control(LMarkerControl type, double p1, double p2, double p3){
|
public void control(LMarkerControl type, double p1, double p2, double p3){
|
||||||
switch(type){
|
switch(type){
|
||||||
@@ -1001,7 +1078,7 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
if(hidden) return;
|
if(hidden || minimap) return;
|
||||||
|
|
||||||
Draw.z(drawLayer);
|
Draw.z(drawLayer);
|
||||||
if(outline){
|
if(outline){
|
||||||
@@ -1012,6 +1089,23 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
Lines.stroke(stroke, color);
|
Lines.stroke(stroke, color);
|
||||||
Lines.line(pos1.x, pos1.y, pos2.x, pos2.y);
|
Lines.line(pos1.x, pos1.y, pos2.x, pos2.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawMinimap(MinimapRenderer minimap){
|
||||||
|
if(hidden || !this.minimap) return;
|
||||||
|
|
||||||
|
minimap.transform(Tmp.v1.set(pos1.x + 4f, pos1.y + 4f));
|
||||||
|
minimap.transform(Tmp.v2.set(pos2.x + 4f, pos2.y + 4f));
|
||||||
|
|
||||||
|
Draw.z(drawLayer);
|
||||||
|
if(outline){
|
||||||
|
Lines.stroke(minimap.scale(stroke + 2f, minimapAutoscale), Pal.gray);
|
||||||
|
Lines.line(Tmp.v1.x, Tmp.v1.y, Tmp.v2.x, Tmp.v2.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
Lines.stroke(minimap.scale(stroke, minimapAutoscale), color);
|
||||||
|
Lines.line(Tmp.v1.x, Tmp.v1.y, Tmp.v2.x, Tmp.v2.y);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Displays a texture with specified name. */
|
/** Displays a texture with specified name. */
|
||||||
@@ -1039,17 +1133,18 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
case rotation -> rotation = (float)p1;
|
case rotation -> rotation = (float)p1;
|
||||||
case textureWidth -> width = (float)p1 * tilesize;
|
case textureWidth -> width = (float)p1 * tilesize;
|
||||||
case textureHeight -> height = (float)p1 * tilesize;
|
case textureHeight -> height = (float)p1 * tilesize;
|
||||||
case color -> {
|
case textureSize -> {
|
||||||
Log.info("test");
|
width = (float)p1 * tilesize;
|
||||||
color.set(Tmp.c1.fromDouble(p1));
|
height = (float)p2 * tilesize;
|
||||||
}
|
}
|
||||||
|
case color -> color.set(Tmp.c1.fromDouble(p1));
|
||||||
default -> super.control(type, p1, p2, p3);
|
default -> super.control(type, p1, p2, p3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(){
|
public void draw(){
|
||||||
if(hidden || textureName.isEmpty()) return;
|
if(hidden || textureName.isEmpty() || minimap) return;
|
||||||
|
|
||||||
if(fetchedRegion == null) fetchedRegion = Core.atlas.find(textureName);
|
if(fetchedRegion == null) fetchedRegion = Core.atlas.find(textureName);
|
||||||
|
|
||||||
@@ -1065,8 +1160,28 @@ public class MapObjectives implements Iterable<MapObjective>, Eachable<MapObject
|
|||||||
Draw.color(Color.white);
|
Draw.color(Color.white);
|
||||||
Draw.rect("error", pos.x, pos.y, width, height, rotation);
|
Draw.rect("error", pos.x, pos.y, width, height, rotation);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Draw.z(Layer.overlayUI);
|
@Override
|
||||||
|
public void drawMinimap(MinimapRenderer minimap){
|
||||||
|
if(hidden || textureName.isEmpty() || !this.minimap) return;
|
||||||
|
|
||||||
|
if(fetchedRegion == null) fetchedRegion = Core.atlas.find(textureName);
|
||||||
|
|
||||||
|
// Zero width/height scales marker to original texture's size
|
||||||
|
if(width < 1e-5) width = fetchedRegion.width * fetchedRegion.scl() * Draw.xscl;
|
||||||
|
if(height < 1e-5) height = fetchedRegion.height * fetchedRegion.scl() * Draw.yscl;
|
||||||
|
|
||||||
|
minimap.transform(Tmp.v1.set(pos.x + 4f, pos.y + 4f));
|
||||||
|
|
||||||
|
Draw.z(drawLayer);
|
||||||
|
if(fetchedRegion.found()){
|
||||||
|
Draw.color(color);
|
||||||
|
Draw.rect(fetchedRegion, Tmp.v1.x, Tmp.v1.y, minimap.scale(width, minimapAutoscale), minimap.scale(height, minimapAutoscale), rotation);
|
||||||
|
}else{
|
||||||
|
Draw.color(Color.white);
|
||||||
|
Draw.rect("error", Tmp.v1.x, Tmp.v1.y, minimap.scale(width, minimapAutoscale), minimap.scale(height, minimapAutoscale), rotation);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -300,7 +300,14 @@ public class MinimapRenderer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public float scale(float radius){
|
public float scale(float radius){
|
||||||
return worldSpace ? (radius / (baseSize / 2f)) * 5f * lastScl : lastW / rect.width * radius;
|
return scale(radius, false);
|
||||||
|
}
|
||||||
|
public float scale(float radius, boolean zoomAutoScale){
|
||||||
|
if(!zoomAutoScale){
|
||||||
|
return worldSpace ? (radius / (baseSize / 2f)) * 5f * lastScl : lastW / rect.width * radius;
|
||||||
|
}else{
|
||||||
|
return worldSpace ? (radius / (baseSize / 2f)) * 5f : lastW / 256f * radius;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable TextureRegion getRegion(){
|
public @Nullable TextureRegion getRegion(){
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package mindustry.logic;
|
|||||||
public enum LMarkerControl{
|
public enum LMarkerControl{
|
||||||
remove,
|
remove,
|
||||||
visibility("true/false"),
|
visibility("true/false"),
|
||||||
|
minimap("true/false"),
|
||||||
|
minimapAutoscale("true/false"),
|
||||||
x("x"),
|
x("x"),
|
||||||
y("y"),
|
y("y"),
|
||||||
pos("x", "y"),
|
pos("x", "y"),
|
||||||
@@ -27,7 +29,8 @@ public enum LMarkerControl{
|
|||||||
labelFlags("background", "outline"),
|
labelFlags("background", "outline"),
|
||||||
texture("name", "-", "-"),
|
texture("name", "-", "-"),
|
||||||
textureWidth("width"),
|
textureWidth("width"),
|
||||||
textureHeight("height");
|
textureHeight("height"),
|
||||||
|
textureSize("width", "height");
|
||||||
|
|
||||||
public final String[] params;
|
public final String[] params;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user