package net.sf.openrocket.appearance.defaults; import java.util.HashMap; import net.sf.openrocket.appearance.Appearance; import net.sf.openrocket.appearance.Decal; import net.sf.openrocket.appearance.Decal.EdgeMode; import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.ThrustCurveMotor; import net.sf.openrocket.rocketcomponent.BodyTube; import net.sf.openrocket.rocketcomponent.EngineBlock; import net.sf.openrocket.rocketcomponent.FinSet; import net.sf.openrocket.rocketcomponent.InnerTube; import net.sf.openrocket.rocketcomponent.LaunchLug; import net.sf.openrocket.rocketcomponent.MassObject; import net.sf.openrocket.rocketcomponent.Parachute; import net.sf.openrocket.rocketcomponent.RadiusRingComponent; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.Transition; import net.sf.openrocket.rocketcomponent.TubeCoupler; import net.sf.openrocket.rocketcomponent.TubeFinSet; import net.sf.openrocket.util.Color; import net.sf.openrocket.util.Coordinate; public class DefaultAppearance { private static Appearance simple(String resource) { return new Appearance( new Color(1, 1, 1), 0, new Decal( new Coordinate(0, 0), new Coordinate(0, 0), new Coordinate(1, 1), 0, new ResourceDecalImage(resource), EdgeMode.REPEAT)); }; private static Appearance simpleAlpha(Color base, float shine, String resource) { return new Appearance( base, shine, new Decal( new Coordinate(0, 0), new Coordinate(0, 0), new Coordinate(1, 1), 0, new ResourceDecalImage(resource), EdgeMode.REPEAT)); }; private static Appearance BALSA = simple("/datafiles/textures/balsa.jpg"); private static Appearance WOOD = simple("/datafiles/textures/wood.jpg"); @SuppressWarnings("unused") private static Appearance CARDBOARD = simple("/datafiles/textures/cardboard.jpg"); private static Appearance HARDBOARD = simple("/datafiles/textures/hardboard.jpg"); private static Appearance WADDING = simple("/datafiles/textures/wadding.png"); private static Appearance CHUTE = simple("/datafiles/textures/chute.jpg"); private static final Appearance ESTES_BT = simpleAlpha(new Color(212, 185, 145), .3f, "/datafiles/textures/spiral-wound-alpha.png"); private static final Appearance ESTES_IT = simpleAlpha(new Color(168, 146, 116), .1f, "/datafiles/textures/spiral-wound-alpha.png"); private static final Appearance WHITE_BT = simpleAlpha(new Color(240, 240, 240), .3f, "/datafiles/textures/spiral-wound-alpha.png"); private static Appearance ESTES_MOTOR = simple("/datafiles/textures/motors/estes.jpg"); private static Appearance AEROTECH_MOTOR = simple("/datafiles/textures/motors/aerotech.png"); private static Appearance KLIMA_MOTOR = simple("/datafiles/textures/motors/klima.jpg"); private static Appearance REUSABLE_MOTOR = simpleAlpha(new Color(195, 60, 50), .6f, "/datafiles/textures/motors/reusable.png"); private static HashMap<Color, Appearance> plastics = new HashMap<Color, Appearance>(); private static Appearance getPlastic(Color c) { if (!plastics.containsKey(c)) { plastics.put(c, new Appearance(c, .3)); } return plastics.get(c); } public static Appearance getDefaultAppearance(RocketComponent c) { if (c instanceof BodyTube) return ESTES_BT; if (c instanceof InnerTube || c instanceof TubeCoupler || c instanceof TubeFinSet) return ESTES_IT; if (c instanceof FinSet) return BALSA; if (c instanceof LaunchLug) return WHITE_BT; if (c instanceof Transition) return getPlastic(new Color(255, 255, 255)); if (c instanceof RadiusRingComponent) return WOOD; if (c instanceof Parachute) return CHUTE; if (c instanceof EngineBlock) return HARDBOARD; if (c instanceof MassObject) return WADDING; return Appearance.MISSING; } public static Appearance getDefaultAppearance(Motor m) { if (m instanceof ThrustCurveMotor) { ThrustCurveMotor tcm = (ThrustCurveMotor) m; if ("Estes".equals(tcm.getManufacturer().getSimpleName())) { return ESTES_MOTOR; } if ("AeroTech".equals(tcm.getManufacturer().getSimpleName())) { return AEROTECH_MOTOR; } if ("Klima".equals(tcm.getManufacturer().getSimpleName())) { return KLIMA_MOTOR; } } return REUSABLE_MOTOR; } }