This is GameManager.h in view mode; [Download] [Up]
// // $Id: GameManager.h,v 1.12 1997/10/31 05:44:21 nygard Exp $ // // // This file is a part of Empire, a game of exploration and conquest. // Copyright (C) 1996 Steve Nygard // // 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 2 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, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // // You may contact the author by: // e-mail: nygard@telusplanet.net // #import <AppKit/AppKit.h> #import <Foundation/NSConnection.h> #import "Empire.h" #import "EmpireProtocols.h" @class City; @class EmPlayer; @class Human; @class Map; @class ShipReportController; @class StatusController; @class Unit; @class WarReportController; @class World; typedef enum _GameState { gs_no_game, gs_establishing_game, gs_client_active, gs_player1_turn, gs_player2_turn, gs_player3_turn, gs_game_over } GameState; #define ADJ_PLAYER1 0x01 #define ADJ_PLAYER2 0x02 #define ADJ_PLAYER3 0x04 NSString *NSStringFromGameState (GameState state); #define AGSReason(state1) [NSString stringWithFormat:@"Current game state is (%@). Expected game state to be %@.", NSStringFromGameState (gameState), NSStringFromGameState (state1)] #define AssertGameState(state1) NSAssert1 (gameState == state1, @"%@", AGSReason (state1)) #define AssertNotGameState(state1) NSAssert1 (gameState != state1, @"%@", AGSReason (state1)) //====================================================================== @interface GameManager : NSObject { //---------------------------------------- // General window management/user interface stuff. //---------------------------------------- StatusController *gameStatusController; WarReportController *warReportController; ShipReportController *shipReportController; //IBOutlet NSWindow *wizardWindow; //id wizardController; BOOL berserk; //---------------------------------------- // World information (part of establishing a game) //---------------------------------------- World *world; //---------------------------------------- // Game Establishment: //---------------------------------------- int activePlayerCount; EmPlayer *players[4]; BOOL playersActive[4]; // Only master game manager should use this. //---------------------------------------- // Game state: //---------------------------------------- int currentTurn; GameState gameState; //---------------------------------------- // Revised turn handling: //---------------------------------------- NSNumber *awaitingCookie; //---------------------------------------- // Combat //---------------------------------------- Unit *attackingUnit; Unit *defendingUnit; City *defendingCity; // By storing them here, it is independent of releasing the finished players... // In distributed games, only used by the server. Map *finalMaps[4]; } + (void) initialize; - init; - (void) dealloc; //====================================================================== // Interface Managment //====================================================================== - (void) showWarReport:sender forPlayer:(EmPlayer *)player; - (void) showShipReport:sender forPlayer:(EmPlayer *)player; //====================================================================== // Debugging //====================================================================== - (void) showCrystalBall:sender; - (void) removeCrystalBall:sender; - (void) setBerserk:(BOOL)flag; - (BOOL) isBerserk; - (void) toggleBerserk:sender; //====================================================================== // Menu Actions //====================================================================== //====================================================================== // World Information //====================================================================== - (int) worldCityCount; - (City *) randomNeutralCity; //====================================================================== // Establish Game //====================================================================== - (void) startGameWithMapNamed:(NSString *)mapName; - (BOOL) addPlayer:(Player)number name:(NSString *)name type:(NSString *)playerType withEfficiencies:(int)pe:(int)ce; - (void) beginGame; - (void) tryToStart; - (void) stopGame; - (void) gameHasStopped:(Player)number activePlayers:(int)activePlayers; - (void) gameOver; //====================================================================== // Game State //====================================================================== - (int) turnNumber; - (BOOL) gameInProgress; //====================================================================== // Turn Handling //====================================================================== - (Player) nextPlayerTurn; - (void) turnDone:(NSNumber *)aCookie; //====================================================================== // Movement and combat //====================================================================== - (MoveResult) moveUnit:(Unit *)thisUnit inDirection:(Direction)dir; //====================================================================== // Map access/management //====================================================================== // Methods to be overridden in subclasses (DGM) - (Map *) mapForPlayer:(Player)number; - (Map *) fetchMapForPlayer:(Player)number; - (void) set3x3Tokens:(MapToken *)tokens aroundLocation:(EMMapLocation)target forPlayer:(Player)number; - (void) remove:(Icon)icon atLocation:(EMMapLocation)target forPlayer:(Player)number; - (void) put:(Icon)icon atLocation:(EMMapLocation)target forPlayer:(Player)number; - (void) setCityAtLocation:(EMMapLocation)target toPlayer:(Player)newCityPlayer forPlayer:(Player)number; //====================================================================== // Etc. //====================================================================== - (MapToken) canonTokenAtLocation:(EMMapLocation)target; - (int) playersAdjacentToLocation:(EMMapLocation)target; - (void) explorePlayer:(Player)number around3x3Location:(EMMapLocation)target updateOtherPlayers:(BOOL)flag; - (void) get3x3flags:(int *)flags forPlayer:(Player)number aroundLocation:(EMMapLocation)target; //====================================================================== // Combating... //====================================================================== - (MoveResult) unit:(Unit *)attacker attacksPlayer:(Player)cityPlayer cityAtLocation:(EMMapLocation)target; - (MoveResult) unitWithCombatProfile:(CombatProfile)attackerProfile attacksPlayer:(Player)cityPlayer cityAtLocation:(EMMapLocation)target playersAdjacentToDefender:(int)adjacentPlayers; - (MoveResult) unit:(Unit *)attacker attacksPlayer:(Player)defender unitAtLocation:(EMMapLocation)target withBombardment:(BOOL)bombarding; - (MoveResult) unitWithCombatProfile:(CombatProfile)attackerProfile attacksPlayer:(Player)defender unitAtLocation:(EMMapLocation)target withBombardment:(BOOL)bombarding playersAdjacentToDefender:(int)adjacentPlayers; - (MoveResult) attackerWithCombatProfile:(CombatProfile)attackerProfile attacksDefenderWithCombatProfile:(CombatProfile)defenderProfile; - (CombatProfile) readyDefendingCityAtLocation:(EMMapLocation)target forPlayer:(Player)number; - (CombatProfile) readyDefendingUnitAtLocation:(EMMapLocation)target forPlayer:(Player)number againstBombardment:(BOOL)bombarding; - (void) showExplosions:(int)count atLocation:(EMMapLocation)target toPlayers:(int)playerMask; - (void) showExplosions:(int)count forPlayer:(Player)number atLocation:(EMMapLocation)target; - (void) hitDefendingUnit:(Player)number withDamage:(int)damage; - (City *) lostDefendingCityOfPlayer:(Player)number; - (void) hitAttacker:(Player)number withDamage:(int)damage; - (void) player:(Player)number hasCapturedCity:(City *)capturedCity; - (void) finishedCombatForPlayer:(Player)number; - (BOOL) checkForEndOfPlayer:(Player)number; - (BOOL) hasPlayerLost:(Player)number; - (void) playerHasLost:(Player)number activePlayers:(int)activePlayers; - (BOOL) playerHasWon:(Player)number activePlayers:(int)activePlayers; - (void) resignPlayerFromGame:(Player)number; - (int) activePlayers; - (void) notifyPlayer:(Player)number aPlayerHasResigned:(Player)resignedPlayer; - (Player) activePlayer; //Needed? Yes. - (NSArray *) remainingCitiesForPlayer:(Player)number; - (void) deactivatePlayer:(Player)number; - (void) playerHasResigned:(Player)number activePlayers:(int)activePlayers; - (void) storeFinalMapForPlayer:(Player)number; - (Map *) finalMapForPlayer:(Player)number; - (void) logStatus; - (void) theGameIsOver; //---------------------------------------------------------------------- // Game Status support //---------------------------------------------------------------------- - (NSString *) gameStatus; - (NSDictionary *) playerStatus:(Player)number; - (void) setGameState:(GameState)gameState; - (BOOL) validateMenuItem:(NSMenuItem *)menuCell; @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.