/* * This file is part of HoloAPI. * * HoloAPI is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HoloAPI is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HoloAPI. If not, see <http://www.gnu.org/licenses/>. */ package com.dsh105.holoapi.image; import java.util.ArrayList; import java.util.Collections; /** * Represents a generator used to produce animated text frames */ public class AnimatedTextGenerator { private int maxHeight; private ArrayList<Frame> frames = new ArrayList<>(); private Frame largestFrame; /** * Constructs an AnimatedTextGenerator for use in an AnimatedHologram * * @param frames frames used to construct the generator with */ public AnimatedTextGenerator(Frame... frames) { this.largestFrame = frames[0]; Collections.addAll(this.frames, frames); this.calculateMaxHeight(); for (Frame f : this.frames) { int diff = this.maxHeight - f.getLines().length; if (diff > 0) { ArrayList<String> lines = new ArrayList<>(); Collections.addAll(lines, f.getLines()); for (int i = 0; i <= diff; i++) { lines.add(" "); } f.setLines(lines.toArray(new String[lines.size()])); } } } protected void calculateMaxHeight() { int maxHeight = 0; Frame largestFrame = this.frames.get(0); for (Frame frame : frames) { if (frame.getLines().length > maxHeight) { maxHeight = frame.getLines().length; largestFrame = frame; } } this.maxHeight = maxHeight; this.largestFrame = largestFrame; } /** * Gets the largest frame of the generator * * @return largest frame of the generator */ public Frame getLargestFrame() { return largestFrame; } /** * Gets the frames of the generator * * @return frames of the generator */ public ArrayList<Frame> getFrames() { return frames; } /** * Gets the maximum frame height * * @return maximum frame height */ public int getMaxHeight() { return maxHeight; } }