From fc80c23ddeb3ea65a06b5aff2fd7a603d3429a29 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 31 Jul 2021 21:31:36 -0400 Subject: [PATCH] Auto-generate block paletted team regions for mods --- core/src/mindustry/game/Team.java | 8 ++++++ core/src/mindustry/world/Block.java | 30 +++++++++++++++++++++++ tools/src/mindustry/tools/Generators.java | 2 +- 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/game/Team.java b/core/src/mindustry/game/Team.java index 671b870f4d..53366df21b 100644 --- a/core/src/mindustry/game/Team.java +++ b/core/src/mindustry/game/Team.java @@ -17,6 +17,7 @@ public class Team implements Comparable{ public final int id; public final Color color; public final Color[] palette; + public final int[] palettei = new int[3]; public String emoji = ""; public boolean hasPalette; public String name; @@ -61,6 +62,10 @@ public class Team implements Comparable{ palette[0] = color; palette[1] = color.cpy().mul(0.75f); palette[2] = color.cpy().mul(0.5f); + + for(int i = 0; i < 3; i++){ + palettei[i] = palette[i].rgba(); + } } /** Specifies a 3-color team palette. */ @@ -70,6 +75,9 @@ public class Team implements Comparable{ palette[0] = pal1; palette[1] = pal2; palette[2] = pal3; + for(int i = 0; i < 3; i++){ + palettei[i] = palette[i].rgba(); + } hasPalette = true; } diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index ee354135ac..ff4bdf0356 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -886,6 +886,36 @@ public class Block extends UnlockableContent{ } } + //generate paletted team regions + if(teamRegion.found()){ + for(Team team : Team.all){ + //if there's an override, don't generate anything + if(team.hasPalette && !Core.atlas.has(name + "-team-" + team.name)){ + var base = Core.atlas.getPixmap(teamRegion); + Pixmap out = new Pixmap(base.width, base.height); + + for(int x = 0; x < base.width; x++){ + for(int y = 0; y < base.height; y++){ + int color = base.get(x, y); + int index = color == 0xffffffff ? 0 : color == 0xdcc6c6ff ? 1 : color == 0x9d7f7fff ? 2 : -1; + out.setRaw(x, y, index == -1 ? base.get(x, y) : team.palettei[index]); + } + } + + if(Core.settings.getBool("linear")){ + Pixmaps.bleed(out); + } + + packer.add(PageType.main, name + "-team-" + team.name, out); + } + } + + teamRegions = new TextureRegion[Team.all.length]; + for(Team team : Team.all){ + teamRegions[team.id] = teamRegion.found() && team.hasPalette ? Core.atlas.find(name + "-team-" + team.name, teamRegion) : teamRegion; + } + } + Pixmap last = null; var gen = icons(); diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index dd2867172a..b1468997f2 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -244,7 +244,7 @@ public class Generators{ teamr.each((x, y) -> { int color = teamr.getRaw(x, y); int index = color == 0xffffffff ? 0 : color == 0xdcc6c6ff ? 1 : color == 0x9d7f7fff ? 2 : -1; - out.setRaw(x, y, index == -1 ? teamr.getRaw(x, y) : team.palette[index].rgba()); + out.setRaw(x, y, index == -1 ? teamr.getRaw(x, y) : team.palettei[index]); }); save(out, block.name + "-team-" + team.name);