101 lines
4.4 KiB
C
Raw Permalink Normal View History

/*
** Command & Conquer Generals(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) 2001-2003 Electronic Arts Inc. //
// //
////////////////////////////////////////////////////////////////////////////////
// FILE: Sqaud.h
/*---------------------------------------------------------------------------*/
/* EA Pacific */
/* Confidential Information */
/* Copyright (C) 2001 - All Rights Reserved */
/* DO NOT DISTRIBUTE */
/*---------------------------------------------------------------------------*/
/* Project: RTS3 */
/* File name: Sqaud.h */
/* Created: John K. McDonald, Jr., 4/19/2002 */
/* Desc: // @todo */
/* Revision History: */
/* 4/19/2002 : Initial creation */
/*---------------------------------------------------------------------------*/
#pragma once
#ifndef _H_SQAUD_
#define _H_SQAUD_
// INCLUDES ///////////////////////////////////////////////////////////////////
#include "Common/Snapshot.h"
#include "Common/GameMemory.h"
// DEFINES ////////////////////////////////////////////////////////////////////
// FORWARD DECLARATIONS ///////////////////////////////////////////////////////
class AIGroup;
class Object;
class Team;
// TYPE DEFINES ///////////////////////////////////////////////////////////////
typedef std::vector<ObjectID> VecObjectID;
typedef VecObjectID::iterator VecObjectIDIt;
typedef std::vector<Object*> VecObjectPtr;
typedef VecObjectPtr::iterator VecObjectPtrIt;
class Squad : public MemoryPoolObject, public Snapshot
{
MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE(Squad, "Squad")
protected:
// snapshot methods
virtual void crc( Xfer *xfer );
virtual void xfer( Xfer *xfer );
virtual void loadPostProcess( void );
VecObjectID m_objectIDs;
// this one is the last requested object stuff. Its used so that we can return a
// const& rather than making a copy and placing it on the stack.
VecObjectPtr m_objectsCached;
public:
void addObject(Object *objectToAdd); // add an object
void addObjectID(ObjectID objectID); // add an object ID
void removeObject(Object *objectToRemove); // remove an object
void clearSquad(); // remove all objects from this squad.
const VecObjectPtr& getAllObjects(void); // get all objects on the list that haven't been deleted
const VecObjectPtr& getLiveObjects(void); // get all objects that pass "isEffectivelyDead" test
Int getSizeOfGroup(void) const; // get the current number of objects, including dead objects
Bool isOnSquad(const Object *objToTest) const; // returns true if the object is on this squad, otherwise false
// convenience function to fill this squad with members of a team
// There SHOULD NOT be a TeamFromSquad Function. See comments in Squad.cpp for details
void squadFromTeam(const Team* fromTeam, Bool clearSquadFirst);
// convenience function to create a squad from an AIGroup, and an AIGroup from a team.
// When creating the AIGroup from the Squad, the old AIGroup affiliations are broken.
void squadFromAIGroup(const AIGroup* fromAIGroup, Bool clearSquadFirst);
void aiGroupFromSquad(AIGroup* aiGroupToFill);
};
EMPTY_DTOR(Squad)
#endif /* _H_SQAUD_ */