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}