Ejemplo n.º 1
0
        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;
            }
        }