Bazaar developer reference

CvCity::CreateProject(ProjectTypes)

Defined in
CvCity.cpp, line 13696
Class
CvCity
Hook name
CivHooks::CvCity_CreateProject

Hooks

static bool BeforeCvCity_CreateProject(CvCity* self, ProjectTypes eProjectType, bool& result);static void AfterCvCity_CreateProject(CvCity* self, ProjectTypes eProjectType, bool& result);static bool ReplaceCvCity_CreateProject(bool (*original)(CvCity*, ProjectTypes), CvCity* self, ProjectTypes eProjectType);CivRegisterBefore<CivHooks::CvCity_CreateProject>(host, &BeforeCvCity_CreateProject);CivRegisterAfter<CivHooks::CvCity_CreateProject>(host, &AfterCvCity_CreateProject);CivRegisterReplace<CivHooks::CvCity_CreateProject>(host, &ReplaceCvCity_CreateProject);

Code

13696bool CvCity::CreateProject(ProjectTypes eProjectType)13697{13698	VALIDATE_OBJECT1369913700	CvPlayer& thisPlayer = GET_PLAYER(getOwner());13701	CvTeam& thisTeam = GET_TEAM(getTeam());13702	thisTeam.changeProjectCount(eProjectType, 1);1370313704	ProjectTypes ApolloProgram = (ProjectTypes) GC.getSPACE_RACE_TRIGGER_PROJECT();13705	ProjectTypes capsuleID = (ProjectTypes) GC.getSPACESHIP_CAPSULE();13706	ProjectTypes boosterID = (ProjectTypes) GC.getSPACESHIP_BOOSTER();13707	ProjectTypes stasisID = (ProjectTypes) GC.getSPACESHIP_STASIS();13708	ProjectTypes engineID = (ProjectTypes) GC.getSPACESHIP_ENGINE();1370913710	enum eSpaceshipState13711	{13712	    eUnderConstruction	= 0x0000,13713	    eFrame				= 0x0001,13714	    eCapsule			= 0x0002,13715	    eStasis_Chamber		= 0x0004,13716	    eEngine				= 0x0008,13717	    eBooster1			= 0x0010,13718	    eBooster2			= 0x0020,13719	    eBooster3			= 0x0040,13720	    eConstructed		= 0x0080,13721	};1372213723	if(eProjectType == ApolloProgram)13724	{13725		CvCity* theCapital = thisPlayer.getCapitalCity();13726		if(theCapital)13727		{13728			auto_ptr<ICvPlot1> pDllPlot(new CvDllPlot(theCapital->plot()));13729			gDLL->GameplaySpaceshipRemoved(pDllPlot.get());13730			gDLL->GameplaySpaceshipCreated(pDllPlot.get(), eUnderConstruction + eFrame);13731		}13732	}13733	else if(GC.getProjectInfo(eProjectType)->IsSpaceship())13734	{13735		VictoryTypes eVictory = (VictoryTypes)GC.getProjectInfo(eProjectType)->GetVictoryPrereq();1373613737		if(NO_VICTORY != eVictory && GET_TEAM(getTeam()).canLaunch(eVictory))13738		{13739			auto_ptr<ICvPlot1> pDllPlot(new CvDllPlot(plot()));13740			gDLL->GameplaySpaceshipEdited(pDllPlot.get(), eConstructed);13741			gDLL->sendLaunch(getOwner(), eVictory);13742		}13743		else13744		{13745			//show the spaceship progress1374613747			// this section is kind of hard-coded but it is completely hard-coded on the engine-side so I have to give it the numbers it expects13748			int spaceshipState = eFrame;1374913750			if((thisTeam.getProjectCount((ProjectTypes)capsuleID)) == 1)13751			{13752				spaceshipState += eCapsule;13753			}1375413755			if((thisTeam.getProjectCount((ProjectTypes)stasisID)) == 1)13756			{13757				spaceshipState += eStasis_Chamber;13758			}1375913760			if((thisTeam.getProjectCount((ProjectTypes)engineID)) == 1)13761			{13762				spaceshipState += eEngine;13763			}1376413765			if((thisTeam.getProjectCount((ProjectTypes)boosterID)) >= 1)13766			{13767				spaceshipState += eBooster1;13768			}1376913770			if((thisTeam.getProjectCount((ProjectTypes)boosterID)) >= 2)13771			{13772				spaceshipState += eBooster2;13773			}1377413775			if((thisTeam.getProjectCount((ProjectTypes)boosterID)) == 3)13776			{13777				spaceshipState += eBooster3;13778			}1377913780			auto_ptr<ICvPlot1> pDllPlot(new CvDllPlot(plot()));13781			gDLL->GameplaySpaceshipEdited(pDllPlot.get(), spaceshipState);13782		}13783	}1378413785	return true;13786}

Calls

Called by