1 /* 2 3 dsh-piccolo-sprite Piccolo2D sprite nodes and supporting classes. 4 Copyright (c) 2006-2013 held jointly by the individual authors. 5 6 This library is free software; you can redistribute it and/or modify it 7 under the terms of the GNU Lesser General Public License as published 8 by the Free Software Foundation; either version 3 of the License, or (at 9 your option) any later version. 10 11 This library is distributed in the hope that it will be useful, but WITHOUT 12 ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 14 License for more details. 15 16 You should have received a copy of the GNU Lesser General Public License 17 along with this library; if not, write to the Free Software Foundation, 18 Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 19 20 > http://www.fsf.org/licensing/licenses/lgpl.html 21 > http://www.opensource.org/licenses/lgpl-license.php 22 23 */ 24 package org.dishevelled.piccolo.sprite; 25 26 import java.awt.Image; 27 28 import java.util.List; 29 import java.util.ArrayList; 30 31 /** 32 * Multiple frames animation. 33 * 34 * @author Michael Heuer 35 * @version $Revision$ $Date$ 36 */ 37 public final class MultipleFramesAnimation 38 implements Animation 39 { 40 /** Index to current frame. */ 41 private int index; 42 43 /** List of frames. */ 44 private List<Image> frames; 45 46 47 /** 48 * Create a new multiple frames animation with the specified list of frames. 49 * 50 * <p> 51 * The specified list of frames must contain at least one frame. 52 * The frames in <code>frames</code> are copied defensively into this class. 53 * </p> 54 * 55 * @param frames list of frames, must not be null and must 56 * contain at least one frame 57 * 58 * @throws IllegalArgumentException if <code>frames.size() < 1</code> 59 */ 60 public MultipleFramesAnimation(final List<Image> frames) 61 { 62 if (frames == null) 63 { 64 throw new IllegalArgumentException("frames must not be null"); 65 } 66 if (frames.size() < 1) 67 { 68 throw new IllegalArgumentException("frames must contain at least one frame"); 69 } 70 index = 0; 71 this.frames = new ArrayList<Image>(frames); 72 } 73 74 75 /** 76 * Reset this multiple frames animation. 77 */ 78 public void reset() 79 { 80 index = 0; 81 } 82 83 @Override 84 public boolean advance() 85 { 86 index = Math.min(index + 1, frames.size() - 1); 87 return true; 88 } 89 90 @Override 91 public Image getCurrentFrame() 92 { 93 return frames.get(index); 94 } 95 }