mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-15 23:21:40 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
159
Code/Combat/buildingaggregate.h
Normal file
159
Code/Combat/buildingaggregate.h
Normal file
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
** 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
|
||||
|
||||
Reference in New Issue
Block a user