/* ** 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: ProductionPrerequisite.h ////////////////////////////////////////////////////// //----------------------------------------------------------------------------- // // Westwood Studios Pacific. // // Confidential Information // Copyright (C) 2001 - All Rights Reserved // //----------------------------------------------------------------------------- // // Project: RTS3 // // File name: ProductionPrerequisite.h // // Created: Steven Johnson, October 2001 // //----------------------------------------------------------------------------- #pragma once #ifndef __ProductionPrerequisite_H_ #define __ProductionPrerequisite_H_ //----------------------------------------------------------------------------- // Includes //----------------------------------------------------------------------------- #include "Common/GameMemory.h" #include "Common/GameCommon.h" #include "Common/Science.h" //#include "GameClient/ControlBar.h" //----------------------------------------------------------------------------- class ThingTemplate; class Player; //----------------------------------------------------------------------------- class ProductionPrerequisite { public: ProductionPrerequisite(); ~ProductionPrerequisite(); /// init to safe default values. void init(); void resetSciences( void ) { m_prereqSciences.clear(); } void addSciencePrereq( ScienceType science ) { m_prereqSciences.push_back(science); } void resetUnits( void ) { m_prereqUnits.clear(); } void addUnitPrereq( AsciiString units, Bool orUnitWithPrevious ); void addUnitPrereq( const std::vector& units ); /// called after all ThingTemplates have been loaded. void resolveNames(); /// returns an asciistring which is a list of all the prerequisites /// not satisfied yet UnicodeString getRequiresList(const Player *player) const; /// return true iff the player satisfies our set of prerequisites Bool isSatisfied(const Player *player) const; /** return the BuildFacilityTemplate, if any. if this template needs no build facility, null is returned. if the template needs a build facility but the given player doesn't have any in existence, null will be returned. you may not pass 'null' for player. */ const ThingTemplate *getExistingBuildFacilityTemplate( const Player *player ) const; Int getAllPossibleBuildFacilityTemplates(const ThingTemplate* tmpls[], Int maxtmpls) const; private: enum { UNIT_OR_WITH_PREV = 0x01 // if set, unit is "or-ed" with prev unit, so that either one's presence satisfies }; struct PrereqUnitRec { const ThingTemplate* unit; Int flags; AsciiString name; }; enum { MAX_PREREQ = 32 }; Int calcNumPrereqUnitsOwned(const Player *player, Int counts[MAX_PREREQ]) const; std::vector m_prereqUnits; ScienceVec m_prereqSciences; }; //----------------------------------------------------------------------------- #endif