Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   Related Pages  

ControllerC.h

00001 //-------------------------------------------------------------------------
00002 //
00003 // File:        ControllerC.h
00004 // Desc:        Parameter value controller class.
00005 // Author:      memon <memon@inside.org>
00006 //
00007 //-------------------------------------------------------------------------
00008 //  Copyright (c) 2000-2002 Moppi Productions. All Rights Reserved.
00009 //  This file is part of Moppi Demopaja SDK. For conditions of 
00010 //  distribution and use, see the accompanying license.txt file.
00011 //  http://moppi.inside.org/demopaja/
00012 //-------------------------------------------------------------------------
00013 
00014 #ifndef __DEMOPAJA_CONTROLLERC_H__
00015 #define __DEMOPAJA_CONTROLLERC_H__
00016 
00017 
00018 #include "PajaTypes.h"
00019 #include "DataBlockI.h"
00020 #include "EditableI.h"
00021 #include "UndoC.h"
00022 #include "KeyC.h"
00023 #include "ColorC.h"
00024 #include "Vector2C.h"
00025 #include "Vector3C.h"
00026 #include "FileIO.h"
00027 
00028 
00029 namespace Composition {
00030 
00032     enum ControllerOrtE {
00033         CONT_ORT_NONE = 0,
00034         CONT_ORT_CONSTANT,  
00035         CONT_ORT_REPEAT,    
00036         CONT_ORT_LOOP,      
00037     };
00038 
00040     enum ControllerTypeE {
00041         CONT_TYPE_NONE = 0,
00042         CONT_TYPE_INT,      
00043         CONT_TYPE_FLOAT,    
00044         CONT_TYPE_VECTOR2,  
00045         CONT_TYPE_VECTOR3,  
00046         CONT_TYPE_COLOR,    
00047         CONT_TYPE_FILE,     
00048     };
00049 
00050 
00052 
00062     class ControllerC : public Edit::EditableI
00063     {
00064     public:
00066 
00071         static ControllerC*         create_new( ControllerTypeE eType );
00072 
00074 
00077         virtual Edit::DataBlockI*   create();
00079         virtual Edit::DataBlockI*   create( Edit::EditableI* pOriginal );
00081         virtual void                copy( Edit::EditableI* pEditable );
00083         virtual void                restore( Edit::EditableI* pEditable );
00084 
00085 
00087         virtual PajaTypes::int32    get_key_count();
00088 
00090         virtual KeyC*               get_key( PajaTypes::int32 i32Index );
00091 
00093         virtual void                del_key( PajaTypes::int32 i32Index );
00094 
00096         virtual KeyC*               get_key_at_time( PajaTypes::int32 i32Time );
00097 
00099         virtual KeyC*               add_key_at_time( PajaTypes::int32 i32Time );
00100 
00102         virtual void                set_start_ort( PajaTypes::uint32 ui32Ort );
00103 
00105         virtual void                set_end_ort( PajaTypes::uint32 ui32Ort );
00106 
00108         virtual PajaTypes::uint32   get_start_ort();
00109 
00111         virtual PajaTypes::uint32   get_end_ort();
00112 
00114 
00117         virtual void                sort_keys();
00118 
00120 
00126         virtual void                prepare();
00127 
00129 
00138         virtual void                get_value( PajaTypes::float32* pValues, PajaTypes::int32 i32Time );
00139 
00141         virtual void                get_value( PajaTypes::int32& i32Val, PajaTypes::int32 i32Time );
00143         virtual void                get_value( PajaTypes::float32& f32Val, PajaTypes::int32 i32Time );
00145         virtual void                get_value( PajaTypes::Vector2C& rVal, PajaTypes::int32 i32Time );
00147         virtual void                get_value( PajaTypes::Vector3C& rVal, PajaTypes::int32 i32Time );
00149         virtual void                get_value( PajaTypes::ColorC& rVal, PajaTypes::int32 i32Time );
00150 
00152 
00155         virtual void                get_value( Import::FileHandleC*& pHandle, PajaTypes::int32& i32FileTime, PajaTypes::int32 i32Time );
00156 
00158         virtual PajaTypes::int32    get_min_time();
00159 
00161         virtual PajaTypes::int32    get_max_time();
00162 
00164         virtual PajaTypes::uint32   get_type();
00165 
00167 
00171         virtual void                set_type( PajaTypes::uint32 ui32Type );
00172 
00174 
00176         virtual PajaTypes::uint32   get_num_channels();
00177 
00178         // Serialize editable to a Demopaja output stream.
00179         virtual PajaTypes::uint32   save( FileIO::SaveC* pSave );
00180         // Serialize editable from a Demopaja input stream.
00181         virtual PajaTypes::uint32   load( FileIO::LoadC* pLoad );
00182 
00183     protected:
00185         ControllerC( ControllerTypeE eType );
00187         ControllerC( Edit::EditableI* pOriginal );
00189         ~ControllerC();
00190 
00191     private:
00192 
00193         // Tool methods used internally by the controller class. Standard stuff.
00194         void                        compute_hermite_basis( PajaTypes::float32 f32U, PajaTypes::float32* pV );
00195         PajaTypes::float32          ease( PajaTypes::float32 f32U, PajaTypes::float32 f32A, PajaTypes::float32 f32B );
00196         void                        comp_first_deriv( PajaTypes::uint32 ui32CurIndex, PajaTypes::uint32 ui32NextIndex );
00197         void                        comp_last_deriv( PajaTypes::uint32 ui32CurIndex, PajaTypes::uint32 ui32NextIndex );
00198         void                        comp_2key_deriv( PajaTypes::uint32 ui32CurIndex, PajaTypes::uint32 ui32NextIndex );
00199         void                        comp_middle_deriv( PajaTypes::uint32 ui32PrevIndex, PajaTypes::uint32 ui32Index, PajaTypes::uint32 ui32NextIndex );
00200         void                        copy_value( PajaTypes::float32* pOut, PajaTypes::float32* pIn, PajaTypes::uint32 ui32NumCh );
00201 
00202         // Member variables
00203         std::vector<KeyC*>          m_rKeys;
00204         PajaTypes::uint32           m_ui32StartOrt;
00205         PajaTypes::uint32           m_ui32EndOrt;
00206         PajaTypes::uint32           m_ui32NumChannels;
00207         PajaTypes::uint32           m_ui32Type;
00208     };
00209 
00210 }; // namespace
00211 
00212 #endif  // __DEMOPAJA_CONTROLLERC_H__

Moppi Demopaja SDK Documentation -- Copyright © 2000-2002 Moppi Productions