Exemple #1
0
    protected override IEnumerator OnShow(params object[] parameters)
    {
        IPropertyEffectFeatureProvider propertyEffectFeatureProvider = this.context as IPropertyEffectFeatureProvider;

        if (this.context is OrbCostTooltipData)
        {
            propertyEffectFeatureProvider = (this.context as OrbCostTooltipData).Context;
            this.Value.Text = string.Empty;
        }
        if (propertyEffectFeatureProvider != null)
        {
            SimulationObject         simulationObject = propertyEffectFeatureProvider.GetSimulationObject();
            float                    propertyValue    = simulationObject.GetPropertyValue("NumberOfPastWinters");
            float                    num  = simulationObject.GetPropertyValue("PrayerCostByTurnsSinceSeasonStart") * simulationObject.GetPropertyValue("NumberOfTurnsSinceSummerStart");
            List <EffectDescription> list = new List <EffectDescription>();
            if (propertyValue > 0f)
            {
                string toStringOverride = AgeLocalizer.Instance.LocalizeString("%FeatureOrbCostFromPastWinters").Replace("$Value", propertyValue.ToString());
                list.Add(new EffectDescription(toStringOverride));
            }
            if (num > 0f)
            {
                string toStringOverride2 = AgeLocalizer.Instance.LocalizeString("%FeatureOrbCostFromTurns").Replace("$Value", num.ToString());
                list.Add(new EffectDescription(toStringOverride2));
            }
            this.EffectMapper.LoadEffects(list, true);
            float        num2    = 0f;
            IGameService service = Services.GetService <IGameService>();
            if (service != null)
            {
                IPlayerControllerRepositoryService service2 = service.Game.Services.GetService <IPlayerControllerRepositoryService>();
                ISeasonService service3 = service.Game.Services.GetService <ISeasonService>();
                if (service3 != null && service2 != null)
                {
                    num2 = service3.ComputePrayerOrbCost(service2.ActivePlayerController.Empire as global::Empire);
                }
            }
            this.Value.Text = num2.ToString() + base.GuiService.FormatSymbol(DepartmentOfTheTreasury.Resources.Orb);
        }
        yield return(base.OnShow(parameters));

        yield break;
    }
    private void FillWorldPositionEffects(Amplitude.Unity.Game.Empire activeEmpire, WorldPosition worldPosition, bool showTerraformDescriptors = false)
    {
        SimulationObject simulationObject = null;

        if (this.worldPositionningService.IsExploitable(worldPosition, activeEmpire.Bits))
        {
            Region region = this.worldPositionningService.GetRegion(worldPosition);
            bool   flag   = region != null && region.BelongToEmpire(activeEmpire as global::Empire) && region.City != null;
            if (!region.IsOcean && !region.IsWasteland && simulationObject == null)
            {
                this.districtProxy.RemoveAllDescriptors_ModifierForwardType_ChildrenOnly();
                DepartmentOfTheInterior.ApplyDistrictProxyDescriptors(activeEmpire, this.districtProxy, worldPosition, DistrictType.Exploitation, true, showTerraformDescriptors);
                if (flag)
                {
                    if (this.districtProxy.Parent != region.City.SimulationObject)
                    {
                        region.City.SimulationObject.AddChild_ModifierForwardType_ChildrenOnly(this.districtProxy);
                    }
                    region.City.Refresh(true);
                }
                else
                {
                    if (this.districtProxy.Parent != this.cityProxy)
                    {
                        this.cityProxy.AddChild_ModifierForwardType_ChildrenOnly(this.districtProxy);
                    }
                    if (this.cityProxy.Parent != activeEmpire.SimulationObject)
                    {
                        activeEmpire.SimulationObject.AddChild(this.cityProxy);
                    }
                    this.cityProxy.Refresh();
                }
                simulationObject = this.districtProxy;
                simulationObject.Refresh();
            }
        }
        if (simulationObject != null)
        {
            for (int i = 0; i < this.properties.Count; i++)
            {
                this.propertyValues[i] += simulationObject.GetPropertyValue(this.properties[i]);
            }
        }
    }
 public int GetDistance(SimulationObject initiator)
 {
     if (this.preprocessedParameter is StaticString)
     {
         return((int)initiator.GetPropertyValue(this.preprocessedParameter as StaticString));
     }
     if (this.preprocessedParameter is float)
     {
         return((int)((float)this.preprocessedParameter));
     }
     if (this.preprocessedParameter is int)
     {
         return((int)this.preprocessedParameter);
     }
     Diagnostics.LogError("Parameter1 <{0}> is incorrect in battleEffectArea. It should be an integer!", new object[]
     {
         this.Parameter1
     });
     return(1);
 }
        protected EffectDescription ParseBinaryModifier(SimulationDescriptor simulationDescriptor, BinarySimulationModifierDescriptor modifierDescriptor, SimulationObject context = null, bool forcePercent = false)
        {
            EffectDescription effectDescription = new EffectDescription();
            bool   round        = false;
            string valueFormat  = string.Empty;
            string empty        = string.Empty;
            float  neutralValue = this.ComputeOperationTypeToken(modifierDescriptor.Operation, ref empty, ref valueFormat, ref round);

            effectDescription.Operator = empty;
            if (forcePercent)
            {
                valueFormat = "#####0%";
            }
            bool   flag   = false;
            string empty2 = string.Empty;
            string empty3 = string.Empty;
            float  num    = this.ComputeOperationTypeToken(modifierDescriptor.BinaryOperation, ref empty3, ref empty2, ref flag);
            object obj    = modifierDescriptor.LeftPrecomputedValue;
            object obj2   = modifierDescriptor.RightPrecomputedValue;

            if (context != null && !modifierDescriptor.IsBindOnSource)
            {
                if (obj is StaticString)
                {
                    obj = context.GetPropertyValue(obj as StaticString);
                }
                if (obj2 is StaticString)
                {
                    obj2 = context.GetPropertyValue(obj2 as StaticString);
                }
            }
            else if (simulationDescriptor.SimulationPropertyDescriptors != null)
            {
                StaticString staticString  = obj as StaticString;
                StaticString staticString2 = obj2 as StaticString;
                for (int i = 0; i < simulationDescriptor.SimulationPropertyDescriptors.Length; i++)
                {
                    if (staticString != null && simulationDescriptor.SimulationPropertyDescriptors[i].Name == staticString && simulationDescriptor.SimulationPropertyDescriptors[i].BaseValue != 0f)
                    {
                        obj          = simulationDescriptor.SimulationPropertyDescriptors[i].BaseValue;
                        staticString = null;
                    }
                    if (staticString2 != null && simulationDescriptor.SimulationPropertyDescriptors[i].Name == staticString2 && simulationDescriptor.SimulationPropertyDescriptors[i].BaseValue != 0f)
                    {
                        obj2          = simulationDescriptor.SimulationPropertyDescriptors[i].BaseValue;
                        staticString2 = null;
                    }
                }
            }
            if (context != null && modifierDescriptor.FindStringValueForParserCalculation)
            {
                if (obj is StaticString)
                {
                    obj = context.GetPropertyValue(obj as StaticString);
                }
                if (obj2 is StaticString)
                {
                    obj2 = context.GetPropertyValue(obj2 as StaticString);
                }
            }
            if (obj is float && obj2 is float)
            {
                float num2 = this.ExecuteOperation(modifierDescriptor.BinaryOperation, (float)obj, (float)obj2);
                if (num2 < 0f && (modifierDescriptor.Operation == SimulationModifierDescriptor.ModifierOperation.Addition || modifierDescriptor.Operation == SimulationModifierDescriptor.ModifierOperation.Percent))
                {
                    effectDescription.Operator = string.Empty;
                }
                effectDescription.ValueFloat  = num2;
                effectDescription.ValueFormat = valueFormat;
                effectDescription.Value       = this.ComputeReadableFloat(num2, round, valueFormat, neutralValue);
            }
            else if (modifierDescriptor.BinaryOperation == SimulationModifierDescriptor.ModifierOperation.Multiplication && (obj is StaticString || obj2 is StaticString))
            {
                if (obj is StaticString && obj2 is float)
                {
                    obj  = obj2;
                    obj2 = modifierDescriptor.LeftPrecomputedValue;
                }
                if (obj2 is StaticString)
                {
                    effectDescription.Per = this.ComputePropertySymbol(obj2 as StaticString);
                }
                if (obj is float)
                {
                    effectDescription.ValueFloat  = (float)obj;
                    effectDescription.ValueFormat = valueFormat;
                    effectDescription.Value       = this.ComputeReadableFloat((float)obj, round, valueFormat, neutralValue);
                }
                else if (obj is StaticString)
                {
                    effectDescription.Value = this.ComputePropertySymbol(obj as StaticString);
                }
            }
            else if (obj is float)
            {
                effectDescription.ValueFloat  = (float)obj;
                effectDescription.ValueFormat = valueFormat;
                effectDescription.Value       = this.ComputeReadableFloat((float)obj, round, valueFormat, neutralValue);
            }
            else
            {
                effectDescription.Value = string.Concat(new string[]
                {
                    obj.ToString(),
                    " ",
                    empty3,
                    " ",
                    obj2.ToString()
                });
            }
            if (string.IsNullOrEmpty(effectDescription.Value))
            {
                return(null);
            }
            return(effectDescription);
        }
        protected EffectDescription ParseCountModifier(SimulationDescriptor simulationDescriptor, CountSimulationModifierDescriptor modifierDescriptor, SimulationObject context = null, bool forcePercent = false)
        {
            EffectDescription effectDescription = new EffectDescription();
            bool   round        = false;
            string valueFormat  = string.Empty;
            string empty        = string.Empty;
            float  neutralValue = this.ComputeOperationTypeToken(modifierDescriptor.Operation, ref empty, ref valueFormat, ref round);

            effectDescription.Operator = empty;
            if (forcePercent)
            {
                valueFormat = "#####0%";
            }
            object obj = modifierDescriptor.PrecomputedValue;

            if (obj is float)
            {
                effectDescription.ValueFloat  = (float)obj;
                effectDescription.ValueFormat = valueFormat;
                effectDescription.Value       = this.ComputeReadableFloat((float)obj, round, valueFormat, neutralValue);
                if (string.IsNullOrEmpty(effectDescription.Value))
                {
                    return(null);
                }
                if ((float)obj < 0f && (modifierDescriptor.Operation == SimulationModifierDescriptor.ModifierOperation.Addition || modifierDescriptor.Operation == SimulationModifierDescriptor.ModifierOperation.Percent))
                {
                    effectDescription.Operator = string.Empty;
                }
            }
            else if (obj is StaticString)
            {
                if (context != null)
                {
                    obj = context.GetPropertyValue(obj as StaticString);
                }
                else if (simulationDescriptor.SimulationPropertyDescriptors != null)
                {
                    StaticString staticString = obj as StaticString;
                    for (int i = 0; i < simulationDescriptor.SimulationPropertyDescriptors.Length; i++)
                    {
                        if (staticString != null && simulationDescriptor.SimulationPropertyDescriptors[i].Name == staticString)
                        {
                            obj = simulationDescriptor.SimulationPropertyDescriptors[i].BaseValue;
                            break;
                        }
                    }
                }
                if (obj is StaticString)
                {
                    effectDescription.Value = this.ComputePropertySymbol(obj.ToString());
                }
                else
                {
                    effectDescription.ValueFloat  = (float)obj;
                    effectDescription.ValueFormat = valueFormat;
                    effectDescription.Value       = this.ComputeReadableFloat((float)obj, round, valueFormat, neutralValue);
                    if (string.IsNullOrEmpty(effectDescription.Value))
                    {
                        return(null);
                    }
                }
            }
            string empty2 = string.Empty;

            if (modifierDescriptor.CountPath != null && modifierDescriptor.CountPath.Length > 0 && modifierDescriptor.CountPath[0].Length > 0)
            {
                this.GetScope(modifierDescriptor.CountPath, out empty2);
            }
            effectDescription.By = empty2;
            return(effectDescription);
        }