//a method that upgrades a faction entity instance locally public void UpgradeInstance(FactionEntity instance, FactionEntity target, int factionID, EffectObj upgradeEffect) { switch (instance.Type) { case EntityTypes.building: Building currBuilding = instance as Building; Unit[] currBuilders = currBuilding.WorkerMgr.GetAll(); //get the current builders of this building if there are any foreach (Unit unit in currBuilders) //and make them stop building the instance of the building since it will be destroyed. { unit.BuilderComp.Stop(); } //create upgraded instance of the building Building upgradedBuilding = gameMgr.BuildingMgr.CreatePlacedInstanceLocal( (Building)target, instance.transform.position, target.transform.rotation.eulerAngles.y, ((Building)instance).CurrentCenter, factionID, currBuilding.IsBuilt, //depends on the current state of the instance to destroy ((Building)instance).FactionCapital); foreach (Unit unit in currBuilders) { unit.BuilderComp.SetTarget(upgradedBuilding); } CustomEvents.OnBuildingInstanceUpgraded((Building)instance); //trigger custom event break; case EntityTypes.unit: //create upgraded instance of the unit gameMgr.UnitMgr.CreateUnit( (Unit)target, instance.transform.position, instance.transform.rotation, instance.transform.position, factionID, null); CustomEvents.OnUnitInstanceUpgraded((Unit)instance); //trigger custom event break; } //if there's a valid upgrade effect assigned: if (upgradeEffect != null) { //show the upgrade effect for the player: gameMgr.EffectPool.SpawnEffectObj(upgradeEffect, instance.transform.position, upgradeEffect.transform.rotation); } instance.EntityHealthComp.DestroyFactionEntity(true); //destroy the instance }
//a method that upgrades a faction entity instance locally public void UpgradeInstance(FactionEntity instance, FactionEntity target, int factionID, EffectObj upgradeEffect) { switch (instance.Type) { case EntityTypes.building: //create upgraded instance of the building gameMgr.BuildingMgr.CreatePlacedInstance( (Building)target, instance.transform.position, target.transform.rotation.eulerAngles.y, ((Building)instance).CurrentCenter, factionID, true, ((Building)instance).FactionCapital); CustomEvents.OnBuildingInstanceUpgraded((Building)instance); //trigger custom event break; case EntityTypes.unit: //create upgraded instance of the unit gameMgr.UnitMgr.CreateUnit( (Unit)target, instance.transform.position, instance.transform.rotation, instance.transform.position, factionID, null); CustomEvents.OnUnitInstanceUpgraded((Unit)instance); //trigger custom event break; } //if there's a valid upgrade effect assigned: if (upgradeEffect != null) { //show the upgrade effect for the player: gameMgr.EffectPool.SpawnEffectObj(upgradeEffect, instance.transform.position, upgradeEffect.transform.rotation); } instance.EntityHealthComp.DestroyFactionEntity(true); //destroy the instance }