| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- /*
- ** Command & Conquer Renegade(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 <http://www.gnu.org/licenses/>.
- */
- /***********************************************************************************************
- *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
- ***********************************************************************************************
- * *
- * Project Name : Combat *
- * *
- * $Archive:: /Commando/Code/Combat/buildingaggregate.h $*
- * *
- * Original Author:: Greg Hjelstrom *
- * *
- * $Author:: Byon_g $*
- * *
- * $Modtime:: 11/21/01 2:47p $*
- * *
- * $Revision:: 8 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #if defined(_MSC_VER)
- #pragma once
- #endif
- #ifndef BUILDINGAGGREGATE_H
- #define BUILDINGAGGREGATE_H
- #include "always.h"
- #include "staticanimphys.h"
- #include "buildingstate.h"
- class BuildingAggregateDefClass;
- /**
- ** BuildingAggregateClass (BAG)
- ** This class implements the behavior of a "building aggregate". Building aggregates are animated
- ** static objects which display segments of their animation depending on the state of the building.
- */
- class BuildingAggregateClass : public StaticAnimPhysClass
- {
- public:
- // Constructor and Destructor
- BuildingAggregateClass( void );
- virtual ~BuildingAggregateClass( void );
- // Definitions
- void Init( const BuildingAggregateDefClass & definition );
- const BuildingAggregateDefClass * Get_BuildingAggregateDef( void ) const { WWASSERT( Definition ); return (BuildingAggregateDefClass *)Definition; }
- // State changing
- int Get_Current_State(void);
- void Set_Current_State(int new_state,bool force_update = false);
- bool Is_MCT(void);
- // Save / Load
- virtual bool Save( ChunkSaveClass & csave );
- virtual bool Load( ChunkLoadClass & cload );
- virtual void Save_State( ChunkSaveClass & csave );
- virtual void Load_State( ChunkLoadClass & cload );
- virtual void On_Post_Load( void );
- virtual const PersistFactoryClass & Get_Factory( void ) const;
- protected:
-
- bool Is_Power_On(int state);
- int CurrentState;
- };
- /**
- ** BuildingAggregateDefClass (BAGDef!)
- ** The data contained in this class defines the behavior of a "building aggregate". Building
- ** aggregates are animated static objects which display segments of their animation depending
- ** on the state of the building.
- ** Obviously, this is a very special case object; designed specifically to provide a set of
- ** features needed by the building logic in Renegade.
- */
- class BuildingAggregateDefClass : public StaticAnimPhysDefClass
- {
- public:
- BuildingAggregateDefClass(void);
-
- virtual uint32 Get_Class_ID( void ) const;
- virtual const char * Get_Type_Name(void) { return "BuildingAggregateDef"; }
- virtual bool Is_Type(const char *);
- virtual PersistClass * Create( void ) const ;
- virtual bool Save( ChunkSaveClass &csave );
- virtual bool Load( ChunkLoadClass &cload );
- virtual const PersistFactoryClass & Get_Factory( void ) const;
- DECLARE_EDITABLE( BuildingAggregateDefClass, StaticAnimPhysDefClass );
- protected:
- bool Save_State_Animation_Data(ChunkSaveClass & csave,int state_index);
- bool Load_State_Animation_Data(ChunkLoadClass & cload,int state_index);
- /*
- ** Animation Logic Setting
- ** ANIM_LOGIC_LINEAR - Frame0 is used for each state, if the damage state changes, the animation
- ** is played to the new state's Frame0. If the power state changes, we pop to the same relative
- ** position in the alternate power state.
- ** ANIM_LOGIC_LOOP - In this mode, each state has a pair of frames which it loops between. Whenever
- ** the state changes, we pop to the same relative position in the new loop. In addition, certain
- ** states can have animation disabled; this will cause the object to freeze on the appropriate frame
- ** right after the state change.
- */
- enum
- {
- ANIM_LOGIC_LINEAR = 0,
- ANIM_LOGIC_LOOP,
- ANIM_LOGIC_SEQUENCE,
- };
- int AnimLogicMode;
- bool IsMCT;
-
- /*
- ** Animation controls for each state. In LOOP mode, we use Frame0 and Frame1 to define a loop. In
- ** Linear mode, only Frame0 is used.
- */
- int Frame0[BuildingStateClass::STATE_COUNT];
- int Frame1[BuildingStateClass::STATE_COUNT];
- bool AnimationEnabled[BuildingStateClass::STATE_COUNT];
- friend class BuildingAggregateClass;
- };
- #endif //BUILDINGAGGREGATE_H
|