public TimeEffect getEffect(int hours, int minutes, int seconds) { TimeEffect newEffect = new TimeEffect(hours, minutes); Bracket effects = getEffectBracket(hours, minutes); int minPrev = effects.prior.minutesSince(hours, minutes); minPrev *= 60; minPrev += seconds; int minNext = effects.next.minutesUntil(hours, minutes); minNext *= 60; minNext -= seconds; float percentComplete = (float) (minPrev / (double) (minPrev + minNext)); // System.out.println(minPrev + ":" + minNext + ":" + percentComplete); // set colors for (Integer cid : effects.prior.colors.keySet()) { Color newColor = getColor(effects.prior, effects.next, cid, percentComplete); newEffect.colors.put(cid, newColor); } // entropy newEffect.entropy = easingFunction.valueAt(percentComplete, effects.prior.entropy, effects.next.entropy); return newEffect; }
private Color getColor(TimeEffect prior, TimeEffect next, int cid, float percentComplete) { Color priorColor = prior.getColor(cid); Color nextColor = next.getColor(cid); float r1 = priorColor.getRed(); float r2 = nextColor.getRed(); float g1 = priorColor.getGreen(); float g2 = nextColor.getGreen(); float b1 = priorColor.getBlue(); float b2 = nextColor.getBlue(); float r3 = easingFunction.valueAt(percentComplete, r1, r2); float g3 = easingFunction.valueAt(percentComplete, g1, g2); float b3 = easingFunction.valueAt(percentComplete, b1, b2); return new Color((int) r3, (int) g3, (int) b3); }
// unit tests public static void main(String args[]) { System.out.println(TimeEffectSet.getTime(new Date())[0]); TimeEffectSet set = new TimeEffectSet(new Linear()); ElectrolandProperties ep = new ElectrolandProperties("Gotham-global.properties"); for (String name : ep.getObjectNames("west")) { if (name.startsWith("timeEffect")) { set.add(new TimeEffect(ep.getParams("west", name), null)); } } for (TimeEffect effect : set.effects) { System.out.println(effect); TimeEffect first = set.effects.get(0); System.out.println("effect is before first " + effect.isBefore(first.hours, first.minutes)); System.out.println("first is effect first " + first.isBefore(effect.hours, effect.minutes)); System.out.println(""); } for (int hour = 0; hour < 24; hour++) { int minutes = 25; Bracket b = set.getEffectBracket(hour, minutes); System.out.println("for " + hour + ":" + minutes + "..."); System.out.println("last: " + b.prior); System.out.println("next: " + b.next); // System.out.println("blended: " + set.getEffect(hour, minutes)); System.out.println(); } int[] now = TimeEffectSet.getTime(new Date()); System.out.println(set.getEffectBracket(now[0], now[1]).prior); System.out.println(set.getEffectBracket(now[0], now[1]).next); // get color }
private Bracket getEffectBracket(int hours, int minutes) { Bracket bracket = new Bracket(); for (TimeEffect effect : effects) { if (effect.isBefore(hours, minutes)) { bracket.prior = effect; } else { bracket.next = effect; break; } } TimeEffect first = effects.get(0); if (bracket.prior == null) { // prior effect was yesterday bracket.prior = effects.get(effects.size() - 1); } if (bracket.next == null) { // next effect is tomorrow bracket.next = first; } return bracket; }