Bazaar developer reference

CvPlot::setFeatureType(FeatureTypes, int)

Defined in
CvPlot.cpp, line 6254
Class
CvPlot
Hook name
CivHooks::CvPlot_setFeatureType
Lua events
GameEvents.TerraformingPlot, GameEvents.TileFeatureChanged

Hooks

static bool BeforeCvPlot_setFeatureType(CvPlot* self, FeatureTypes eNewValue, int iVariety);static void AfterCvPlot_setFeatureType(CvPlot* self, FeatureTypes eNewValue, int iVariety);static void ReplaceCvPlot_setFeatureType(void (*original)(CvPlot*, FeatureTypes, int), CvPlot* self, FeatureTypes eNewValue, int iVariety);CivRegisterBefore<CivHooks::CvPlot_setFeatureType>(host, &BeforeCvPlot_setFeatureType);CivRegisterAfter<CivHooks::CvPlot_setFeatureType>(host, &AfterCvPlot_setFeatureType);CivRegisterReplace<CivHooks::CvPlot_setFeatureType>(host, &ReplaceCvPlot_setFeatureType);

Code

6254void CvPlot::setFeatureType(FeatureTypes eNewValue, int iVariety)6255{6256	FeatureTypes eOldFeature;6257	bool bUpdateSight;62586259#if defined(MOD_BUGFIX_PLOT_VALIDATION)6260	if (eNewValue < NO_FEATURE) return;6261	if (eNewValue > NO_FEATURE && GC.getFeatureInfo(eNewValue) == NULL) return;6262#endif62636264	eOldFeature = getFeatureType();62656266	iVariety = 0;62676268	if((eOldFeature != eNewValue) || (m_iFeatureVariety != iVariety))6269	{6270		if((eOldFeature == NO_FEATURE) ||6271		        (eNewValue == NO_FEATURE) ||6272		        (GC.getFeatureInfo(eOldFeature)->getSeeThroughChange() != GC.getFeatureInfo(eNewValue)->getSeeThroughChange()))6273		{6274			bUpdateSight = true;6275		}6276		else6277		{6278			bUpdateSight = false;6279		}62806281		if(bUpdateSight)6282		{6283			updateSeeFromSight(false);6284		}62856286		auto_ptr<ICvPlot1> pDllPlot(new CvDllPlot(this));6287		gDLL->GameplayFeatureChanged(pDllPlot.get(), eNewValue);62886289#if defined(MOD_EVENTS_TERRAFORMING)6290		if (MOD_EVENTS_TERRAFORMING) {6291			GAMEEVENTINVOKE_HOOK(GAMEEVENT_TerraformingPlot, TERRAFORMINGEVENT_FEATURE, m_iX, m_iY, 0, eNewValue, m_eFeatureType, -1, -1);6292		}6293#endif62946295		m_eFeatureType = eNewValue;62966297		updateYield();6298		updateImpassable();62996300		if(bUpdateSight)6301		{6302			updateSeeFromSight(true);6303		}6304		m_iFeatureVariety = iVariety;63056306		// Rough feature?6307		bool bRough = false;6308		if(eNewValue != NO_FEATURE)6309			bRough = GC.getFeatureInfo(eNewValue)->IsRough();63106311		SetRoughFeature(bRough);63126313		if(eNewValue != NO_FEATURE)6314		{6315			// Now a Natural Wonder here6316			if((eOldFeature == NO_FEATURE || !GC.getFeatureInfo(eOldFeature)->IsNaturalWonder()) && GC.getFeatureInfo(eNewValue)->IsNaturalWonder())6317			{6318				GC.getMap().ChangeNumNaturalWonders(1);6319				GC.getMap().getArea(getArea())->ChangeNumNaturalWonders(1);6320			}6321		}6322		if(eOldFeature != NO_FEATURE)6323		{6324			// Was a Natural Wonder, isn't any more6325			if(GC.getFeatureInfo(eOldFeature)->IsNaturalWonder() && (eNewValue == NO_FEATURE || !GC.getFeatureInfo(eNewValue)->IsNaturalWonder()))6326			{6327				GC.getMap().ChangeNumNaturalWonders(-1);6328				GC.getMap().getArea(getArea())->ChangeNumNaturalWonders(-1);6329			}6330		}63316332		if(getFeatureType() == NO_FEATURE)6333		{6334			if(getImprovementType() != NO_IMPROVEMENT)6335			{6336				if(GC.getImprovementInfo(getImprovementType())->IsRequiresFeature())6337				{6338					setImprovementType(NO_IMPROVEMENT);6339				}6340			}6341		}63426343#if defined(MOD_EVENTS_TILE_IMPROVEMENTS)6344		if (MOD_EVENTS_TILE_IMPROVEMENTS) {6345			GAMEEVENTINVOKE_HOOK(GAMEEVENT_TileFeatureChanged, getX(), getY(), getOwner(), eOldFeature, eNewValue);6346		}6347#endif6348	}6349}

Calls

Called by