private void DisplayModifier(float indent, SimulationModifierProvider provider, SimulationObject context) { string text = string.Empty; if (provider.ModifierDescriptor is SingleSimulationModifierDescriptor) { SingleSimulationModifierDescriptor singleSimulationModifierDescriptor = provider.ModifierDescriptor as SingleSimulationModifierDescriptor; text = text + provider.ModifierDescriptor.Operation.ToString() + " "; text += singleSimulationModifierDescriptor.Value; } else if (provider.ModifierDescriptor is BinarySimulationModifierDescriptor) { BinarySimulationModifierDescriptor binarySimulationModifierDescriptor = provider.ModifierDescriptor as BinarySimulationModifierDescriptor; text += string.Format("{0} ({1} {2} {3})", new object[] { provider.ModifierDescriptor.Operation.ToString(), binarySimulationModifierDescriptor.Left, binarySimulationModifierDescriptor.BinaryOperation.ToString(), binarySimulationModifierDescriptor.Right }); } else if (provider.ModifierDescriptor is CountSimulationModifierDescriptor) { CountSimulationModifierDescriptor countSimulationModifierDescriptor = provider.ModifierDescriptor as CountSimulationModifierDescriptor; text += string.Format("{0} ({1} {2})", provider.ModifierDescriptor.Operation.ToString(), countSimulationModifierDescriptor.Value, countSimulationModifierDescriptor.XmlSerializableCountPath); } provider.DisplayContent = this.IndentedToggle(indent, provider.DisplayContent, text, new object[0]); if (provider.DisplayContent) { indent += 20f; this.IndentedLabel(indent, "Target:", " <b>{0}</b>", new object[] { provider.ModifierDescriptor.TargetPropertyName }); this.IndentedLabel(indent, "Operation:", " <b>{0}</b>", new object[] { provider.ModifierDescriptor.Operation.ToString() }); this.IndentedLabel(indent, "Value:", " <b>{0}</b>", new object[] { provider.ModifierDescriptor.ComputeValue(context, provider.DescriptorHolder.Context, SimulationPropertyRefreshContext.GetContext(-1)).ToString() }); this.IndentedLabel(indent, "Path:", " <b>{0}</b>", new object[] { provider.ModifierDescriptor.Path.ToString() }); this.IndentedLabel(indent, "Source:", " <b>{0} ({1})</b>", new object[] { provider.DescriptorHolder.Context.Name, provider.DescriptorHolder.Descriptor.Name }); indent -= 20f; } }
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); }