/* ** Command & Conquer Generals Zero Hour(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program 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. ** ** This program 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 this program. If not, see . */ //////////////////////////////////////////////////////////////////////////////// // // // (c) 2001-2003 Electronic Arts Inc. // // // //////////////////////////////////////////////////////////////////////////////// // FILE: ProcessAnimateWindow.h ///////////////////////////////////////////////// //----------------------------------------------------------------------------- // // Electronic Arts Pacific. // // Confidential Information // Copyright (C) 2002 - All Rights Reserved // //----------------------------------------------------------------------------- // // created: Mar 2002 // // Filename: ProcessAnimateWindow.h // // author: Chris Huybregts // // purpose: If a new animation is wanted to be added for the windows, All you // have to do is create a new class derived from ProcessAnimateWindow. // Then setup each of the virtual classes to process an AnimateWindow // class. The Update adn reverse functions get called every frame // by the shell and will continue to process the AdminWin until the // isFinished flag on the adminWin is set to true. // //----------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////// #pragma once #ifndef __PROCESSANIMATEWINDOW_H_ #define __PROCESSANIMATEWINDOW_H_ //----------------------------------------------------------------------------- // SYSTEM INCLUDES //////////////////////////////////////////////////////////// //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // USER INCLUDES ////////////////////////////////////////////////////////////// //----------------------------------------------------------------------------- #include "Lib/BaseType.h" //----------------------------------------------------------------------------- // FORWARD REFERENCES ///////////////////////////////////////////////////////// //----------------------------------------------------------------------------- class AnimateWindow; class GameWindow; //----------------------------------------------------------------------------- // TYPE DEFINES /////////////////////////////////////////////////////////////// //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- class ProcessAnimateWindow { public: ProcessAnimateWindow( void ){}; virtual ~ProcessAnimateWindow( void ){}; virtual void initAnimateWindow( AnimateWindow *animWin ) = 0; virtual void initReverseAnimateWindow( AnimateWindow *animWin, UnsignedInt maxDelay = 0 ) = 0; virtual Bool updateAnimateWindow( AnimateWindow *animWin ) = 0; virtual Bool reverseAnimateWindow( AnimateWindow *animWin ) = 0; virtual void setMaxDuration(UnsignedInt maxDuration) { } }; //----------------------------------------------------------------------------- class ProcessAnimateWindowSlideFromRight : public ProcessAnimateWindow { public: ProcessAnimateWindowSlideFromRight( void ); virtual ~ProcessAnimateWindowSlideFromRight( void ); virtual void initAnimateWindow( AnimateWindow *animWin ); virtual void initReverseAnimateWindow( AnimateWindow *animWin, UnsignedInt maxDelay = 0 ); virtual Bool updateAnimateWindow( AnimateWindow *animWin ); virtual Bool reverseAnimateWindow( AnimateWindow *animWin ); private: Coord2D m_maxVel; // top speed windows travel in x and y Int m_slowDownThreshold; // when widnows get this close to their resting // positions they start to slow down Real m_slowDownRatio; // how fast the windows slow down (smaller slows quicker) Real m_speedUpRatio; // how fast the windows speed up }; //----------------------------------------------------------------------------- class ProcessAnimateWindowSlideFromLeft : public ProcessAnimateWindow { public: ProcessAnimateWindowSlideFromLeft( void ); virtual ~ProcessAnimateWindowSlideFromLeft( void ); virtual void initAnimateWindow( AnimateWindow *animWin ); virtual void initReverseAnimateWindow( AnimateWindow *animWin, UnsignedInt maxDelay = 0 ); virtual Bool updateAnimateWindow( AnimateWindow *animWin ); virtual Bool reverseAnimateWindow( AnimateWindow *animWin ); private: Coord2D m_maxVel; // top speed windows travel in x and y Int m_slowDownThreshold; // when widnows get this close to their resting // positions they start to slow down Real m_slowDownRatio; // how fast the windows slow down (smaller slows quicker) Real m_speedUpRatio; // how fast the windows speed up }; //----------------------------------------------------------------------------- class ProcessAnimateWindowSlideFromTop : public ProcessAnimateWindow { public: ProcessAnimateWindowSlideFromTop( void ); virtual ~ProcessAnimateWindowSlideFromTop( void ); virtual void initAnimateWindow( AnimateWindow *animWin ); virtual void initReverseAnimateWindow( AnimateWindow *animWin, UnsignedInt maxDelay = 0 ); virtual Bool updateAnimateWindow( AnimateWindow *animWin ); virtual Bool reverseAnimateWindow( AnimateWindow *animWin ); private: Coord2D m_maxVel; // top speed windows travel in x and y Int m_slowDownThreshold; // when widnows get this close to their resting // positions they start to slow down Real m_slowDownRatio; // how fast the windows slow down (smaller slows quicker) Real m_speedUpRatio; // how fast the windows speed up }; //----------------------------------------------------------------------------- class ProcessAnimateWindowSlideFromTopFast : public ProcessAnimateWindow { public: ProcessAnimateWindowSlideFromTopFast( void ); virtual ~ProcessAnimateWindowSlideFromTopFast( void ); virtual void initAnimateWindow( AnimateWindow *animWin ); virtual void initReverseAnimateWindow( AnimateWindow *animWin, UnsignedInt maxDelay = 0 ); virtual Bool updateAnimateWindow( AnimateWindow *animWin ); virtual Bool reverseAnimateWindow( AnimateWindow *animWin ); private: Coord2D m_maxVel; // top speed windows travel in x and y Int m_slowDownThreshold; // when widnows get this close to their resting // positions they start to slow down Real m_slowDownRatio; // how fast the windows slow down (smaller slows quicker) Real m_speedUpRatio; // how fast the windows speed up }; //----------------------------------------------------------------------------- class ProcessAnimateWindowSlideFromBottom : public ProcessAnimateWindow { public: ProcessAnimateWindowSlideFromBottom( void ); virtual ~ProcessAnimateWindowSlideFromBottom( void ); virtual void initAnimateWindow( AnimateWindow *animWin ); virtual void initReverseAnimateWindow( AnimateWindow *animWin, UnsignedInt maxDelay = 0 ); virtual Bool updateAnimateWindow( AnimateWindow *animWin ); virtual Bool reverseAnimateWindow( AnimateWindow *animWin ); private: Coord2D m_maxVel; // top speed windows travel in x and y Int m_slowDownThreshold; // when widnows get this close to their resting // positions they start to slow down Real m_slowDownRatio; // how fast the windows slow down (smaller slows quicker) Real m_speedUpRatio; // how fast the windows speed up }; //----------------------------------------------------------------------------- class ProcessAnimateWindowSpiral : public ProcessAnimateWindow { public: ProcessAnimateWindowSpiral( void ); virtual ~ProcessAnimateWindowSpiral( void ); virtual void initAnimateWindow( AnimateWindow *animWin ); virtual void initReverseAnimateWindow( AnimateWindow *animWin, UnsignedInt maxDelay = 0 ); virtual Bool updateAnimateWindow( AnimateWindow *animWin ); virtual Bool reverseAnimateWindow( AnimateWindow *animWin ); private: Real m_deltaTheta; Int m_maxR; }; //----------------------------------------------------------------------------- class ProcessAnimateWindowSlideFromBottomTimed : public ProcessAnimateWindow { public: ProcessAnimateWindowSlideFromBottomTimed( void ); virtual ~ProcessAnimateWindowSlideFromBottomTimed( void ); virtual void initAnimateWindow( AnimateWindow *animWin ); virtual void initReverseAnimateWindow( AnimateWindow *animWin, UnsignedInt maxDelay = 0 ); virtual Bool updateAnimateWindow( AnimateWindow *animWin ); virtual Bool reverseAnimateWindow( AnimateWindow *animWin ); virtual void setMaxDuration(UnsignedInt maxDuration) { m_maxDuration = maxDuration; } private: UnsignedInt m_maxDuration; }; class ProcessAnimateWindowSlideFromRightFast : public ProcessAnimateWindow { public: ProcessAnimateWindowSlideFromRightFast( void ); virtual ~ProcessAnimateWindowSlideFromRightFast( void ); virtual void initAnimateWindow( AnimateWindow *animWin ); virtual void initReverseAnimateWindow( AnimateWindow *animWin, UnsignedInt maxDelay = 0 ); virtual Bool updateAnimateWindow( AnimateWindow *animWin ); virtual Bool reverseAnimateWindow( AnimateWindow *animWin ); private: Coord2D m_maxVel; // top speed windows travel in x and y Int m_slowDownThreshold; // when widnows get this close to their resting // positions they start to slow down Real m_slowDownRatio; // how fast the windows slow down (smaller slows quicker) Real m_speedUpRatio; // how fast the windows speed up }; //----------------------------------------------------------------------------- // INLINING /////////////////////////////////////////////////////////////////// //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- // EXTERNALS ////////////////////////////////////////////////////////////////// //----------------------------------------------------------------------------- #endif // __PROCESSANIMATEWINDOW_H_