00001 /* 00002 * animation-state.h 00003 * 00004 * Copyright (C) 2010 Thomas A. Vaughan 00005 * All rights reserved. 00006 * 00007 * 00008 * Redistribution and use in source and binary forms, with or without 00009 * modification, are permitted provided that the following conditions are met: 00010 * * Redistributions of source code must retain the above copyright 00011 * notice, this list of conditions and the following disclaimer. 00012 * * Redistributions in binary form must reproduce the above copyright 00013 * notice, this list of conditions and the following disclaimer in the 00014 * documentation and/or other materials provided with the distribution. 00015 * * Neither the name of the <organization> nor the 00016 * names of its contributors may be used to endorse or promote products 00017 * derived from this software without specific prior written permission. 00018 * 00019 * THIS SOFTWARE IS PROVIDED BY THOMAS A. VAUGHAN ''AS IS'' AND ANY 00020 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00021 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00022 * DISCLAIMED. IN NO EVENT SHALL THOMAS A. VAUGHAN BE LIABLE FOR ANY 00023 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00025 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00026 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00028 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 * 00030 * 00031 */ 00032 00033 #ifndef WAVE_GLUT_ANIMATION_STATE_H__ 00034 #define WAVE_GLUT_ANIMATION_STATE_H__ 00035 00036 // includes -------------------------------------------------------------------- 00037 #include "util/stack_array.h" 00038 00039 00040 namespace glut { 00041 00042 //////////////////////////////////////////////////////////////////////////////// 00043 /// 00044 /// \ingroup glut_core 00045 /// \defgroup anim_state Animation State 00046 /// 00047 //////////////////////////////////////////////////////////////////////////////// 00048 /*@{*/ 00049 00050 00051 /// An object can have many animations going at once. This structure tracks 00052 /// the state of a single animation channel. 00053 struct anim_channel_state_t { 00054 // constructor, manipulators 00055 anim_channel_state_t(void) throw() { } 00056 void clear(void) throw() { 00057 animIndex = -1; // invalid 00058 msElapsed = 0; 00059 } 00060 void dump(IN const char * title) const throw() { 00061 DPRINTF("%s: index(%d) ms(%d)", 00062 title, animIndex, msElapsed); 00063 } 00064 00065 // data fields 00066 int16_t animIndex; ///< index of animation 00067 word_t unused; // for dword alignment 00068 int32_t msElapsed; ///< milliseconds since animation started 00069 }; 00070 00071 00072 // class exists only to define an enum: the maximum number of active animations 00073 // we allow at any one time (max per object). 00074 class MaxAnimations { 00075 public: 00076 enum eConstants { 00077 eMaxArraySize = 8 ///< max animations at once for an object 00078 }; 00079 }; 00080 00081 00082 00083 typedef stack_array<anim_channel_state_t, MaxAnimations> animation_list_t; 00084 00085 00086 00087 /// Simple class of fixed size to maintain per-object animation state 00088 class AnimationState : public animation_list_t { 00089 public: 00090 // constructor --------------------------------------------------------- 00091 AnimationState(void) throw(); 00092 00093 // AnimationState public class methods --------------------------------- 00094 00095 /// serialize current state out to a string 00096 void serialize(OUT std::string& state) const; 00097 00098 /// update our internal state based on passed-in animation state string. 00099 /// Returns false if deserialization fails (bad input string). 00100 bool deserialize(IN const char * state); 00101 00102 private: 00103 }; 00104 00105 00106 00107 }; // glut namespace 00108 00109 #endif // WAVE_GLUT_ANIMATION_STATE_H__ 00110