Files
Mindustry/core/src/mindustry/game/Team.java
2022-04-10 17:12:49 -04:00

140 lines
4.2 KiB
Java

package mindustry.game;
import arc.*;
import arc.graphics.*;
import arc.math.*;
import arc.struct.*;
import arc.util.*;
import mindustry.game.Rules.*;
import mindustry.game.Teams.*;
import mindustry.graphics.*;
import mindustry.world.blocks.storage.CoreBlock.*;
import mindustry.world.modules.*;
import static mindustry.Vars.*;
public class Team implements Comparable<Team>{
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;
/** All 256 registered teams. */
public static final Team[] all = new Team[256];
/** The 6 base teams used in the editor. */
public static final Team[] baseTeams = new Team[6];
public final static Team
derelict = new Team(0, "derelict", Color.valueOf("4d4e58")),
sharded = new Team(1, "sharded", Pal.accent.cpy(),
Color.valueOf("ffd37f"), Color.valueOf("eab678"), Color.valueOf("d4816b")),
malis = new Team(2, "malis", Color.valueOf("f25555"),
Color.valueOf("fc8e6c"), Color.valueOf("f25555"), Color.valueOf("a04553")),
crux = new Team(3, "crux", Color.valueOf("6c87fd"), Color.valueOf("85caf9"), Color.valueOf("6c87fd"), Color.valueOf("3b3392")),
green = new Team(4, "green", Color.valueOf("54d67d"), Color.valueOf("96f58c"), Color.valueOf("54d67d"), Color.valueOf("28785c")),
purple = new Team(5, "purple", Color.valueOf("995bb0"), Color.valueOf("f08dd5"), Color.valueOf("995bb0"), Color.valueOf("312c63"));
static{
Mathf.rand.setSeed(8);
//create the whole 256 placeholder teams
for(int i = 6; i < all.length; i++){
new Team(i, "team#" + i, Color.HSVtoRGB(360f * Mathf.random(), 100f * Mathf.random(0.6f, 1f), 100f * Mathf.random(0.8f, 1f), 1f));
}
Mathf.rand.setSeed(new Rand().nextLong());
}
public static Team get(int id){
return all[((byte)id) & 0xff];
}
protected Team(int id, String name, Color color){
this.name = name;
this.color = color;
this.id = id;
if(id < 6) baseTeams[id] = this;
all[id] = this;
palette = new Color[3];
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. */
protected Team(int id, String name, Color color, Color pal1, Color pal2, Color pal3){
this(id, name, color);
palette[0] = pal1;
palette[1] = pal2;
palette[2] = pal3;
for(int i = 0; i < 3; i++){
palettei[i] = palette[i].rgba();
}
hasPalette = true;
}
/** @return the core items for this team, or an empty item module.
* Never add to the resulting item module, as it is mutable. */
public ItemModule items(){
return core() == null ? ItemModule.empty : core().items;
}
/** @return the team-specific rules. */
public TeamRule rules(){
return state.rules.teams.get(this);
}
public TeamData data(){
return state.teams.get(this);
}
@Nullable
public CoreBuild core(){
return data().core();
}
public boolean active(){
return state.teams.isActive(this);
}
/** @return whether this team is solely comprised of AI, with no players. */
public boolean isAI(){
return (state.rules.waves || state.rules.attackMode) && this == state.rules.waveTeam;
}
/** @return whether this team needs a flow field for "dumb" wave pathfinding. */
public boolean needsFlowField(){
return isAI() && !rules().rtsAi;
}
public boolean isEnemy(Team other){
return this != other;
}
public Seq<CoreBuild> cores(){
return state.teams.cores(this);
}
public String localized(){
return Core.bundle.get("team." + name + ".name", name);
}
@Override
public int compareTo(Team team){
return Integer.compare(id, team.id);
}
@Override
public String toString(){
return name;
}
}