public void DetermineHeatLevel() { int MaxHeatDistance = 2; double BaseLightHeatScalar = 10.0; double OpenFireHeatScalar = 20.0; double ForgeHeatScalar = 30.0; double totalHeat = 0; if (RootParent == null) { IPooledEnumerable nearbyHeatSources = Map.GetItemsInRange(Location, MaxHeatDistance); foreach (Item item in nearbyHeatSources) { double itemHeat = 0; if (item.RootParent != null) { continue; } int distance = Utility.GetDistance(Location, item.Location); double heatScalar = ((double)MaxHeatDistance + 1) - (double)distance; if (Math.Abs(Location.Z - item.Location.Z) > 15) { continue; } //Organized by Ascending Priority if (item is BaseLight) { BaseLight baseLight = item as BaseLight; if (baseLight.Burning) { itemHeat = BaseLightHeatScalar * heatScalar; } } if (item is BaseEquipableLight) { BaseEquipableLight candle = item as BaseEquipableLight; if (candle.Burning) { itemHeat = BaseLightHeatScalar * heatScalar; } } if (item is Campfire) { Campfire campfire = item as Campfire; if (campfire.Status == CampfireStatus.Burning || campfire.Status == CampfireStatus.Extinguishing) { itemHeat = OpenFireHeatScalar * heatScalar; } } if (item is Brazier || item is BrazierTall) { BaseLight brazier = item as BaseLight; if (brazier.Burning) { itemHeat = OpenFireHeatScalar * heatScalar; } } if (item is Forge || item is LargeForgeEast || item is LargeForgeWest || item is ForgeComponent) { itemHeat = ForgeHeatScalar * heatScalar; } totalHeat += itemHeat; } nearbyHeatSources.Free(); } HeatValue = totalHeat; if (HeatValue > PlantPersistance.MaxHeat) { HeatValue = PlantPersistance.MaxHeat; } }