| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- /*
- ** 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 <http://www.gnu.org/licenses/>.
- */
- ////////////////////////////////////////////////////////////////////////////////
- // //
- // (c) 2001-2003 Electronic Arts Inc. //
- // //
- ////////////////////////////////////////////////////////////////////////////////
- // FILE: ScriptConditions.h ///////////////////////////////////////////////////////////////////////////
- // Script conditions evaluator for the scripting engine.
- // Author: John Ahlquist, Nov 2001
- ///////////////////////////////////////////////////////////////////////////////////////////////////
- #pragma once
- #ifndef __SCRIPTCONDITIONS_H_
- #define __SCRIPTCONDITIONS_H_
- class Condition;
- class ObjectTypes;
- class Parameter;
- class Player;
- //-----------------------------------------------------------------------------
- // ScriptConditionsInterface
- //-----------------------------------------------------------------------------
- /** Pure virtual class for Script Conditions interface format */
- //-----------------------------------------------------------------------------
- class ScriptConditionsInterface : public SubsystemInterface
- {
- public:
- virtual ~ScriptConditionsInterface() { };
- virtual void init( void ) = 0; ///< Init
- virtual void reset( void ) = 0; ///< Reset
- virtual void update( void ) = 0; ///< Update
- virtual Bool evaluateCondition( Condition *pCondition ) = 0; ///< evaluate a a script condition.
- virtual Bool evaluateSkirmishCommandButtonIsReady( Parameter *pSkirmishPlayerParm, Parameter *pTeamParm, Parameter *pCommandButtonParm, Bool allReady ) = 0;
- virtual Bool evaluateTeamIsContained(Parameter *pTeamParm, Bool allContained) = 0;
- }; // end class ScriptConditionsInterface
- extern ScriptConditionsInterface *TheScriptConditions; ///< singleton definition
- //-----------------------------------------------------------------------------
- // ScriptConditions
- //-----------------------------------------------------------------------------
- /** Implementation for the Script Conditions singleton */
- //-----------------------------------------------------------------------------
- class ScriptConditions : public ScriptConditionsInterface
- {
- public:
- ScriptConditions();
- ~ScriptConditions();
- public:
- virtual void init( void ); ///< Init
- virtual void reset( void ); ///< Reset
- virtual void update( void ); ///< Update
- Bool evaluateCondition( Condition *pCondition );
- protected:
- Player *playerFromParam(Parameter *pSideParm); // Gets a player from a parameter.
- void objectTypesFromParam(Parameter *pTypeParm, ObjectTypes *outObjectTypes); // Must pass in a valid objectTypes for outObjectTypes
- Bool evaluateAllDestroyed(Parameter *pSideParm);
- Bool evaluateAllBuildFacilitiesDestroyed(Parameter *pSideParm);
- Bool evaluateIsDestroyed(Parameter *pTeamParm);
- Bool evaluateBridgeBroken(Parameter *pBridgeParm);
- Bool evaluateBridgeRepaired(Parameter *pBridgeParm);
- Bool evaluateNamedUnitDestroyed(Parameter *pUnitParm);
- Bool evaluateNamedUnitExists(Parameter *pUnitParm);
- Bool evaluateNamedUnitDying(Parameter *pUnitParm);
- Bool evaluateNamedUnitTotallyDead(Parameter *pUnitParm);
- Bool evaluateHasUnits(Parameter *pTeamParm);
-
- Bool evaluateTeamEnteredAreaEntirely(Parameter *pTeamParm, Parameter *pTriggerParm, Parameter *pTypeParm);
- Bool evaluateTeamEnteredAreaPartially(Parameter *pTeamParm, Parameter *pTriggerParm, Parameter *pTypeParm);
- Bool evaluateTeamExitedAreaEntirely(Parameter *pTeamParm, Parameter *pTriggerParm, Parameter *pTypeParm);
- Bool evaluateTeamExitedAreaPartially(Parameter *pTeamParm, Parameter *pTriggerParm, Parameter *pTypeParm);
- Bool evaluateTeamInsideAreaEntirely(Parameter *pTeamParm, Parameter *pTriggerParm, Parameter *pTypeParm);
- Bool evaluateTeamInsideAreaPartially(Parameter *pUnitParm, Parameter *pTriggerParm, Parameter *pTypeParm);
- Bool evaluateTeamOutsideAreaEntirely(Parameter *pTeamParm, Parameter *pTriggerParm, Parameter *pTypeParm);
- Bool evaluateNamedEnteredArea(Parameter *pUnitParm, Parameter *pTriggerParm);
- Bool evaluateNamedExitedArea(Parameter *pUnitParm, Parameter *pTriggerParm);
- Bool evaluateNamedInsideArea(Parameter *pUnitParm, Parameter *pTriggerParm);
- Bool evaluateNamedOutsideArea(Parameter *pUnitParm, Parameter *pTriggerParm);
-
- Bool evaluateTeamStateIs(Parameter *pTeamParm, Parameter *pStateParm);
- Bool evaluateTeamStateIsNot(Parameter *pTeamParm, Parameter *pStateParm);
- Bool evaluatePlayerHasCredits(Parameter *pCreditsParm, Parameter* pComparisonParm, Parameter *pPlayerParm);
- Bool evaluateNamedCreated(Parameter* pUnitParm); ///< Implemented as evaluateNamedExists(...)
- Bool evaluateTeamCreated(Parameter* pTeamParm); ///< Implemented as evaluateTeamExists(...)
- Bool evaluateNamedOwnedByPlayer(Parameter *pUnitParm, Parameter *pPlayerParm);
- Bool evaluateTeamOwnedByPlayer(Parameter *pTeamParm, Parameter *pPlayerParm);
- Bool evaluateMultiplayerAlliedVictory(void);
- Bool evaluateMultiplayerAlliedDefeat(void);
- Bool evaluateMultiplayerPlayerDefeat(void);
- Bool evaluateNamedAttackedByType(Parameter *pUnitParm, Parameter *pTypeParm);
- Bool evaluateTeamAttackedByType(Parameter *pTeamParm, Parameter *pTypeParm);
- Bool evaluateNamedAttackedByPlayer(Parameter *pUnitParm, Parameter *pPlayerParm);
- Bool evaluateTeamAttackedByPlayer(Parameter *pTeamParm, Parameter *pPlayerParm);
- Bool evaluateBuiltByPlayer(Condition *pCondition, Parameter* pTypeParm, Parameter* pPlayerParm);
- Bool evaluatePlayerHasNOrFewerBuildings(Parameter *pBuildingCountParm, Parameter *pPlayerParm);
- Bool evaluatePlayerHasNOrFewerFactionBuildings(Parameter *pBuildingCountParm, Parameter *pPlayerParm);
- Bool evaluatePlayerHasPower(Parameter *pPlayerParm);
- Bool evaluateNamedReachedWaypointsEnd(Parameter *pUnitParm, Parameter* pWaypointPathParm);
- Bool evaluateTeamReachedWaypointsEnd(Parameter *pTeamParm, Parameter* pWaypointPathParm);
- Bool evaluateNamedSelected(Condition *pCondition, Parameter *pUnitParm);
- Bool evaluateVideoHasCompleted(Parameter *pVideoParm);
- Bool evaluateSpeechHasCompleted(Parameter *pSpeechParm);
- Bool evaluateAudioHasCompleted(Parameter *pAudioParm);
- Bool evaluateNamedDiscovered(Parameter *pItemParm, Parameter* pPlayerParm);
- Bool evaluateTeamDiscovered(Parameter *pTeamParm, Parameter *pPlayerParm);
- Bool evaluateBuildingEntered(Parameter *pItemParm, Parameter *pUnitParm );
- Bool evaluateIsBuildingEmpty(Parameter *pItemParm);
- Bool evaluateEnemySighted(Parameter *pItemParm, Parameter *pAllianceParm, Parameter* pPlayerParm);
- Bool evaluateTypeSighted(Parameter *pItemParm, Parameter *pTypeParm, Parameter* pPlayerParm);
- Bool evaluateUnitHealth(Parameter *pItemParm, Parameter* pComparisonParm, Parameter *pHealthPercent);
- Bool evaluatePlayerUnitCondition(Condition *pCondition, Parameter *pPlayerParm, Parameter *pComparisonParm, Parameter *pCountParm, Parameter *pUnitTypeParm);
- Bool evaluatePlayerSpecialPowerFromUnitTriggered(Parameter *pPlayerParm, Parameter *pSpecialPowerParm, Parameter* pUnitParm);
- Bool evaluatePlayerSpecialPowerFromUnitMidway (Parameter *pPlayerParm, Parameter *pSpecialPowerParm, Parameter* pUnitParm);
- Bool evaluatePlayerSpecialPowerFromUnitComplete (Parameter *pPlayerParm, Parameter *pSpecialPowerParm, Parameter* pUnitParm);
- Bool evaluateUpgradeFromUnitComplete (Parameter *pPlayerParm, Parameter *pUpgradeParm, Parameter* pUnitParm);
- Bool evaluateScienceAcquired (Parameter *pPlayerParm, Parameter *pScienceParm);
- Bool evaluateCanPurchaseScience (Parameter *pPlayerParm, Parameter *pScienceParm);
- Bool evaluateSciencePurchasePoints (Parameter *pPlayerParm, Parameter *pSciencePointParm);
- Bool evaluateNamedHasFreeContainerSlots(Parameter *pUnitParm);
- Bool evaluatePlayerDestroyedNOrMoreBuildings(Parameter *pPlayerParm, Parameter *pNumParm, Parameter *pOppenentParm);
- Bool evaluateUnitHasObjectStatus(Parameter *pUnitParm, Parameter *pObjectStatus);
- Bool evaluateTeamHasObjectStatus(Parameter *pTeamParm, Parameter *pObjectStatus, Bool entireTeam);
- Bool evaluatePlayerHasComparisonPercentPower(Parameter *pPlayerParm, Parameter *pComparisonParm, Parameter *pPercent);
- Bool evaluatePlayerHasComparisonValueExcessPower(Parameter *pPlayerParm, Parameter *pComparisonParm, Parameter *pKWHParm);
- Bool evaluatePlayerHasUnitTypeInArea(Condition *pCondition, Parameter *pPlayerParm, Parameter *pComparisonParm, Parameter *pCountParm, Parameter *pTypeParm, Parameter *pTriggerParm);
- Bool evaluatePlayerHasUnitKindInArea(Condition *pCondition, Parameter *pPlayerParm, Parameter *pComparisonParm, Parameter *pCountParm,Parameter *pKindParm, Parameter *pTriggerParm);
- Bool evaluateUnitHasEmptied(Parameter *pUnitParm);
- Bool evaluateTeamIsContained(Parameter *pTeamParm, Bool allContained);
- Bool evaluateMusicHasCompleted(Parameter *pMusicParm, Parameter *pIntParm);
- Bool evaluatePlayerLostObjectType(Parameter *pPlayerParm, Parameter *pTypeParm);
- // Skirmish Scripts. Please note that ALL Skirmish conditions should first pass a pSkirmishPlayerParm to
- // prevent the necessity of having to write additional scripts for other players / skirmish types later.
- Bool evaluateSkirmishSpecialPowerIsReady(Parameter *pSkirmishPlayerParm, Parameter *pPower);
- Bool evaluateSkirmishValueInArea(Condition *pCondition, Parameter *pSkirmishPlayerParm, Parameter *pComparisonParm, Parameter *pMoneyParm, Parameter *pTriggerParm);
- Bool evaluateSkirmishPlayerIsFaction(Parameter *pSkirmishPlayerParm, Parameter *pFactionParm);
- Bool evaluateSkirmishSuppliesWithinDistancePerimeter(Parameter *pSkirmishPlayerParm, Parameter *pDistanceParm, Parameter *pLocationParm, Parameter *pValueParm);
- Bool evaluateSkirmishPlayerTechBuildingWithinDistancePerimeter(Condition *pCondition, Parameter *pSkirmishPlayerParm, Parameter *pDistanceParm, Parameter *pLocationParm);
- Bool evaluateSkirmishCommandButtonIsReady( Parameter *pSkirmishPlayerParm, Parameter *pTeamParm, Parameter *pCommandButtonParm, Bool allReady );
- Bool evaluateSkirmishUnownedFactionUnitComparison( Parameter *pSkirmishPlayerParm, Parameter *pComparisonParm, Parameter *pCountParm );
- Bool evaluateSkirmishPlayerHasPrereqsToBuild( Parameter *pSkirmishPlayerParm, Parameter *pObjectTypeParm );
- Bool evaluateSkirmishPlayerHasComparisonGarrisoned(Parameter *pSkirmishPlayerParm, Parameter *pComparisonParm, Parameter *pCountParm );
- Bool evaluateSkirmishPlayerHasComparisonCapturedUnits(Parameter *pSkirmishPlayerParm, Parameter *pComparisonParm, Parameter *pCountParm );
- Bool evaluateSkirmishNamedAreaExists(Parameter *pSkirmishPlayerParm, Parameter *pTriggerParm);
- Bool evaluateSkirmishPlayerHasUnitsInArea(Condition *pCondition, Parameter *pSkirmishPlayerParm, Parameter *pTriggerParm );
- Bool evaluateSkirmishPlayerHasBeenAttackedByPlayer(Parameter *pSkirmishPlayerParm, Parameter *pAttackedByParm );
- Bool evaluateSkirmishPlayerIsOutsideArea(Condition *pCondition, Parameter *pSkirmishPlayerParm, Parameter *pTriggerParm );
- Bool evaluateSkirmishPlayerHasDiscoveredPlayer(Parameter *pSkirmishPlayerParm, Parameter *pDiscoveredByParm );
- Bool evaluateSkirmishSupplySourceSafe(Condition *pCondition, Parameter *pSkirmishPlayerParm, Parameter *pMinAmountOfSupplies );
- Bool evaluateSkirmishSupplySourceAttacked(Parameter *pSkirmishPlayerParm );
- Bool evaluateSkirmishStartPosition(Parameter *pSkirmishPlayerParm, Parameter *startNdx );
-
- // Stubs
- Bool evaluateMissionAttempts(Parameter *pPlayerParm, Parameter *pComparisonParm, Parameter *pAttemptsParm);
- }; // end class ScriptConditions
- #endif // end __SCRIPTCONDITIONS_H_
|