00001 // 00002 // SpriteAnimation.java 00003 // CGP-2D-Engine 00004 // 00005 // Created by Ryan Ruff on 3/11/09. 00006 // Copyright 2009 ClassroomGamingProject.org. All rights reserved. 00007 // 00008 // This program is free software: you can redistribute it and/or modify 00009 // it under the terms of the GNU General Public License as published by 00010 // the Free Software Foundation, either version 3 of the License, or 00011 // (at your option) any later version. 00012 // 00013 // This program is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 // GNU General Public License for more details. 00017 // 00018 // You should have received a copy of the GNU General Public License 00019 // along with this program. If not, see <http://www.gnu.org/licenses/>. 00020 package org.classroomgaming.cgp; 00021 00022 import org.classroomgaming.cgp.SpriteAnimationFrame; 00023 00029 public class SpriteAnimation { 00030 00031 public enum Style { 00032 00033 FORWARD_STICKY, FORWARD_LOOP, PING_PONG, BACKWARD_LOOP, BACKWARD_STICKY 00034 } 00035 private String name; 00036 private SpriteAnimationFrame frames[]; 00037 float frameTime; 00038 int frame; 00039 boolean done; 00040 boolean forwards; 00041 00042 public SpriteAnimation(String n, SpriteAnimationFrame f[]) { 00043 name = n; 00044 frames = f; 00045 frameTime = 0; 00046 frame = 0; 00047 } 00048 00049 public String getName() { 00050 return name; 00051 } 00052 00053 public int getNumFrames() { 00054 return frames.length; 00055 } 00056 00057 public int getImageID() { 00058 return frames[frame].imageID; 00059 } 00060 00061 public void set(int f, float t) { 00062 frame = f; 00063 frameTime = t; 00064 done = false; 00065 forwards = true; 00066 } 00067 00068 public boolean update(float t, Style style) { 00069 frameTime += t; 00070 if (frameTime > frames[frame].duration) { 00071 frameTime -= frames[frame].duration; 00072 switch (style) { 00073 00074 case FORWARD_STICKY: 00075 ++frame; 00076 if (frame >= frames.length) { 00077 frame = frames.length - 1; 00078 done = true; 00079 } 00080 break; 00081 case BACKWARD_LOOP: 00082 --frame; 00083 if (frame < 0) { 00084 frame = frames.length - 1; 00085 } 00086 break; 00087 case BACKWARD_STICKY: 00088 --frame; 00089 if (frame < 0) { 00090 frame = 0; 00091 done = true; 00092 } 00093 break; 00094 case PING_PONG: 00095 if (forwards) { 00096 ++frame; 00097 if (frame >= frames.length) { 00098 frame = frames.length - 1; 00099 forwards = false; 00100 } 00101 } else { 00102 --frame; 00103 if (frame < 0) { 00104 frame = 0; 00105 forwards = true; 00106 } 00107 } 00108 break; 00109 case FORWARD_LOOP: 00110 00111 ++frame; 00112 if (frame >= frames.length) { 00113 frame = 0; 00114 } 00115 break; 00116 default: 00117 } 00118 } 00119 return done; 00120 } 00121 }
1.5.8