package net.fe; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import net.fe.fightStage.FightUnit; import net.fe.unit.Unit; import org.lwjgl.opengl.GL13; import org.newdawn.slick.opengl.Texture; import chu.engine.anim.ShaderArgs; public class PaletteSwapper { public static Map<String, List<String>> lookup; public static Map<String, Texture> palettes; static { String[] p = new String[] {"overworld", "general", "assassin", "berserker", "hero", "paladin", "sagem", "sagef", "sniperm", "sniperf", "sorcerer", "swordmasterm", "swordmasterf", "valkyrie", "falconknight"}; palettes = new HashMap<String, Texture>(); lookup = new HashMap<String, List<String>>(); lookup.put("general", Arrays.asList(new String[] {"Wallace", "Oswin", "Amelia", "Gilliam"})); lookup.put("assassin", Arrays.asList(new String[] {"Jaffar", "Matthew", "Marisa"})); lookup.put("berserker", Arrays.asList(new String[] {"Dart", "Ross"})); lookup.put("hero", Arrays.asList(new String[] {"Harken", "Garcia", "Gerik", "Raven"})); lookup.put("paladin", Arrays.asList(new String[] {"Cameron", "Sain", "Franz", "Forde", "Kyle", "Kent", "Lowen", "Marcus"})); lookup.put("sagem", Arrays.asList(new String[] {"Erk", "Lucius", "Artur"})); lookup.put("sagef", Arrays.asList(new String[]{"Lute"})); lookup.put("sniperm", Arrays.asList(new String[] {"Innes", "Wil"})); lookup.put("sniperf", Arrays.asList(new String[]{"Neimi", "Rebecca"})); lookup.put("sorcerer", Arrays.asList(new String[]{"Knoll", "Ewan", "Canas"})); lookup.put("swordmasterm", Arrays.asList(new String[]{"Karel", "Guy", "Joshua", "Edward"})); lookup.put("swordmasterf", Arrays.asList(new String[]{"NOTMIA", "Mia"})); lookup.put("valkyrie", Arrays.asList(new String[]{"Priscilla", "L'Arachel", "Natasha"})); lookup.put("falconknight", Arrays.asList(new String[]{"???", "Vanessa", "Tana", "Florina"})); for(String s : p) { palettes.put(s, FEResources.getTexture("palette_"+s)); } } public static ShaderArgs setup(FightUnit u) { Unit unit = u.getUnit(); ShaderArgs args = new ShaderArgs(); if(unit.getTheClass().name.equals("Lord")) return args; String c = unit.functionalClassName(); Texture t = palettes.get(c); if(t == null) return args; if(lookup.get(c) == null) return args; int offset = lookup.get(c).indexOf(unit.name); if(offset < 0) return args; args.programName = "paletteSwap"; args.args = new float[] {t.getTextureWidth(), t.getTextureHeight(), offset, t.getImageWidth()}; GL13.glActiveTexture(GL13.GL_TEXTURE8); t.bind(); GL13.glActiveTexture(GL13.GL_TEXTURE0); return args; } public static ShaderArgs setup(Unit u) { ShaderArgs args = new ShaderArgs(); int offset = u.getPartyColor().equals(Party.TEAM_BLUE) ? 0 : 1; if(offset == 0) return args; Texture t = palettes.get("overworld"); args.programName = "paletteSwap"; args.args = new float[] {t.getTextureWidth(), t.getTextureHeight(), offset, t.getImageWidth()}; GL13.glActiveTexture(GL13.GL_TEXTURE8); t.bind(); GL13.glActiveTexture(GL13.GL_TEXTURE0); return args; } }