Пример #1
0
	/// <summary>
	/// Metodo responsavel por gerenciar a adicao de modificadores de atributos ao personagem
	/// </summary>
	/// <param name="attributeModifier_">Attribute modifier.</param>
	public static void AddAttributeModifier(ref AttributeModifier[] attributeModifiers_, AttributeModifier attributeModifier_)
	{
		bool _canBeAdded = true; // Variavel para controle se o atributo pode ser adicionao na tabela, parte do principio que sempre pode.

		// Percorre a tabela de atributos do personagem
		for (int i = 0; i < attributeModifiers_.Length; i++)
		{
			// Se o espaco estiver vazio e pode ser adicionado inclui. Para a execucao do for
			if (attributeModifiers_[i] == null && _canBeAdded){
				attributeModifiers_[i] = attributeModifier_;
				attributeModifiers_[i].InitialTime = Time.time;
				attributeModifiers_[i].ExpireTime = Time.time + attributeModifier_.TimeInSeconds;
				attributeModifiers_[i].Consumed = false;
				break;
			}

			// Verifica se o atributo existe na tabela e inicia os testes
			if (attributeModifiers_[i] != null)
			{
				// Se estiver aplicando o mesmo atributo somente atualiza na tabela
				if (attributeModifiers_[i].AttributeType == attributeModifier_.AttributeType &&
					attributeModifiers_[i].OriginID == attributeModifier_.OriginID &&
					attributeModifiers_[i].ModifierType == attributeModifier_.ModifierType)
				{
					attributeModifiers_[i] = attributeModifier_;
					attributeModifiers_[i].InitialTime = Time.time;
					attributeModifiers_[i].ExpireTime = Time.time + attributeModifier_.TimeInSeconds;
					attributeModifiers_[i].Consumed = false;
					break;					
				}
			}
		}
	}
Пример #2
0
        /// <summary>
        /// The AttributeModifier auto updater has been enabled or disabled.
        /// </summary>
        /// <param name="attributeModifier">The modifier that has been enabled or disabled.</param>
        /// <param name="enable">True if the modifier has been enabled.</param>
        private void ModifierAutoUpdateEnabled(AttributeModifier attributeModifier, bool enable)
        {
            if (enable)
            {
                return;
            }

            EventHandler.UnregisterEvent <AttributeModifier, bool>(attributeModifier, "OnAttributeModifierAutoUpdateEnable", ModifierAutoUpdateEnabled);
            GenericObjectPool.Return(attributeModifier);
        }
Пример #3
0
 private void InitializeModifiers()
 {
     if (!modifiersInitialized)
     {
         modifiersInitialized = true;
         AttributeModifier modifier  = new AttributeModifier(overheatTemp.Id, baseOverheatTemp, UI.TOOLTIPS.BASE_VALUE, false, false, true);
         AttributeModifier modifier2 = new AttributeModifier(fatalTemp.Id, baseFatalTemp, UI.TOOLTIPS.BASE_VALUE, false, false, true);
         this.GetAttributes().Add(modifier);
         this.GetAttributes().Add(modifier2);
     }
 }
Пример #4
0
        public static void OnLoad()
        {
            // Defined in Edible
            const float BASE_EAT_RATE = 50000.0f;

            ImaginationLoader.Init(typeof(TraitReworkPatches));
            InitStrings();
            // Create modifier for "Eating in lit area"
            EAT_LIT_MODIFIER = new AttributeModifier("CaloriesDelta", BASE_EAT_RATE * (1.0f /
                                                                                       (1.0f - TraitTuning.EAT_SPEED_BUFF) - 1.0f), TraitStrings.EATING_LIT);
        }
Пример #5
0
    public void AddModifier(AttributeModifier modifier)
    {
        int old = Value;

        modifiers.Add(modifier);
        CalculateValue();

        if (onValueChange != null)
        {
            onValueChange(Value, old);
        }
    }
Пример #6
0
 protected virtual int CompareModifierOrder(AttributeModifier a, AttributeModifier b)
 {
     if (a.Order < b.Order)
     {
         return(-1);
     }
     else if (a.Order > b.Order)
     {
         return(1);
     }
     return(0); // if (a.Order == b.Order)
 }
 public AttributeModifierExpectation(string id, string name, string description, AttributeModifier modifier, Sprite icon)
     : base(id, name, description, delegate(MinionResume resume)
 {
     resume.GetAttributes().Get(modifier.AttributeId).Add(modifier);
 }, delegate(MinionResume resume)
 {
     resume.GetAttributes().Get(modifier.AttributeId).Remove(modifier);
 })
 {
     this.modifier = modifier;
     this.icon     = icon;
 }
        public override string GetFormattedModifier(AttributeModifier modifier, GameObject parent_instance)
        {
            float num = modifier.Value;

            GameUtil.TimeSlice timeSlice = base.DeltaTimeSlice;
            if (modifier.IsMultiplier)
            {
                num      *= 100f;
                timeSlice = GameUtil.TimeSlice.None;
            }
            return(GetFormattedValue(num, timeSlice, parent_instance));
        }
Пример #9
0
        private static int CompareModifierOrder(AttributeModifier x, AttributeModifier y)
        {
            if (x.Order < y.Order)
            {
                return(-1);
            }
            else if (x.Order > y.Order)
            {
                return(1);
            }

            return(0);
        }
Пример #10
0
            internal static void Postfix(AmountInstance ___rotAmountInstance,
                                         AttributeModifier ___refrigeratedModifier,
                                         AttributeModifier ___frozenModifier)
            {
                var delta = ___rotAmountInstance.deltaAttribute;

                if (delta.GetTotalValue() > 0.0f)
                {
                    // Cannot allow food to gain freshness!
                    delta.Remove(___refrigeratedModifier);
                    delta.Remove(___frozenModifier);
                }
            }
Пример #11
0
        public override object VisitAttributeLine([NotNull] classlist_langParser.AttributeLineContext context)
        {
            //add attribute modif

            AttributeModifier modif = new AttributeModifier();

            modif.Option        = (context.attributeOption().GetText() == "set" ? AttributeModifier.AttributeModifierOptions.SET : AttributeModifier.AttributeModifierOptions.FORBID);
            modif.AttributeName = context.attribute().GetText();

            currentClass.Modifiers.Add(modif);

            return(base.VisitAttributeLine(context));
        }
Пример #12
0
        protected override void Serialize(IntermediateWriter output, AttributeModifier <TAttribute> value, ContentSerializerAttribute format)
        {
            switch (value.ComputationType)
            {
            case AttributeComputationType.Additive:
                output.Xml.WriteValue(string.Format(CultureInfo.InvariantCulture, "{0}", value.Value) + " " + Enum.GetName(typeof(TAttribute), value.Type));
                break;

            case AttributeComputationType.Multiplicative:
                output.Xml.WriteValue(string.Format(CultureInfo.InvariantCulture, "{0}", ((value.Value - 1) * 100)) + "% " + Enum.GetName(typeof(TAttribute), value.Type));
                break;
            }
        }
Пример #13
0
    protected override void OnSpawn()
    {
        base.OnSpawn();
        if (radius == 0 || noise == 0)
        {
            Debug.LogWarning("Noisepollutor::OnSpawn [" + GetName() + "] noise: [" + noise + "] radius: [" + radius + "]");
            UnityEngine.Object.Destroy(this);
        }
        else
        {
            ResetCells();
            Operational component = GetComponent <Operational>();
            if ((UnityEngine.Object)component != (UnityEngine.Object)null)
            {
                Subscribe(824508782, OnActiveChangedDelegate);
            }
            refreshCallback          = Refresh;
            refreshPartionerCallback = delegate
            {
                Refresh();
            };
            onCollectNoisePollutersCallback = OnCollectNoisePolluters;
            Attributes attributes = this.GetAttributes();
            Db         db         = Db.Get();
            dB       = attributes.Add(db.BuildingAttributes.NoisePollution);
            dBRadius = attributes.Add(db.BuildingAttributes.NoisePollutionRadius);
            if (noise != 0 && radius != 0)
            {
                AttributeModifier modifier  = new AttributeModifier(db.BuildingAttributes.NoisePollution.Id, (float)noise, UI.TOOLTIPS.BASE_VALUE, false, false, true);
                AttributeModifier modifier2 = new AttributeModifier(db.BuildingAttributes.NoisePollutionRadius.Id, (float)radius, UI.TOOLTIPS.BASE_VALUE, false, false, true);
                attributes.Add(modifier);
                attributes.Add(modifier2);
            }
            else
            {
                Debug.LogWarning("Noisepollutor::OnSpawn [" + GetName() + "] radius: [" + radius + "] noise: [" + noise + "]");
            }
            KBatchedAnimController component2 = GetComponent <KBatchedAnimController>();
            isMovable = ((UnityEngine.Object)component2 != (UnityEngine.Object)null && component2.isMovable);
            Singleton <CellChangeMonitor> .Instance.RegisterCellChangedHandler(base.transform, OnCellChange, "NoisePolluter.OnSpawn");

            AttributeInstance attributeInstance = dB;
            attributeInstance.OnDirty = (System.Action)Delegate.Combine(attributeInstance.OnDirty, refreshCallback);
            AttributeInstance attributeInstance2 = dBRadius;
            attributeInstance2.OnDirty = (System.Action)Delegate.Combine(attributeInstance2.OnDirty, refreshCallback);
            if ((UnityEngine.Object)component != (UnityEngine.Object)null)
            {
                OnActiveChanged(component.IsActive);
            }
        }
    }
 public override object Clone()
 {
     AttributeModifier clone = new AttributeModifier(this.AttributeAlias, this.valueChange, this.ChangeType, this.Name);
     constraints.ForEach(
         constraint => {
             ICloneable cloneable = constraint as ICloneable;
             if (cloneable != null)
                 clone.AddConstraint((IConstraint)(cloneable.Clone())); //try to make a deep copy of the constraint list
             else
                 clone.AddConstraint(constraint); //fallback, if the ICloneable interface is not implemented by the constraint
             }
         );
     return clone;
 }
Пример #15
0
	void Start()
	{
		_activationCollider	= GetComponent<BoxCollider>();
		_activationCollider.isTrigger = true;

		Modifier = new AttributeModifier();
		Modifier.OriginID = this.gameObject.GetInstanceID();
		Modifier.ModifierType = ModifierType;
		Modifier.AttributeType = (int)AttributeType;
		Modifier.CalcType = CalcType;
		Modifier.ApplyTo = ApplyTo;
		Modifier.Value = Value;
		Modifier.TimeInSeconds = TimeInSeconds;
	}
    public virtual string GetTooltip(Amount master, AmountInstance instance)
    {
        string str = string.Format(master.description, formatter.GetFormattedValue(instance.value, GameUtil.TimeSlice.None, null));

        str += "\n\n";
        str  = ((formatter.DeltaTimeSlice != GameUtil.TimeSlice.PerCycle) ? (str + string.Format(UI.CHANGEPERSECOND, formatter.GetFormattedValue(ToPercent(instance.deltaAttribute.GetTotalDisplayValue(), instance), GameUtil.TimeSlice.PerSecond, null))) : (str + string.Format(UI.CHANGEPERCYCLE, formatter.GetFormattedValue(ToPercent(instance.deltaAttribute.GetTotalDisplayValue(), instance), GameUtil.TimeSlice.PerCycle, null))));
        for (int i = 0; i != instance.deltaAttribute.Modifiers.Count; i++)
        {
            AttributeModifier attributeModifier    = instance.deltaAttribute.Modifiers[i];
            float             modifierContribution = instance.deltaAttribute.GetModifierContribution(attributeModifier);
            str = str + "\n" + string.Format(UI.MODIFIER_ITEM_TEMPLATE, attributeModifier.GetDescription(), formatter.GetFormattedValue(ToPercent(modifierContribution, instance), formatter.DeltaTimeSlice, null));
        }
        return(str);
    }
    private void SetupDependentAttribute(Klei.AI.Attribute targetAttribute, AttributeConverter attributeConverter)
    {
        Klei.AI.Attribute attribute         = attributeConverter.attribute;
        AttributeInstance attributeInstance = attribute.Lookup(this);
        AttributeModifier target_modifier   = new AttributeModifier(targetAttribute.Id, attributeConverter.Lookup(this).Evaluate(), attribute.Name, false, false, false);

        this.GetAttributes().Add(target_modifier);
        AttributeInstance attributeInstance2 = attributeInstance;

        attributeInstance2.OnDirty = (System.Action)Delegate.Combine(attributeInstance2.OnDirty, (System.Action) delegate
        {
            target_modifier.SetValue(attributeConverter.Lookup(this).Evaluate());
        });
    }
    protected override void OnPrefabInit()
    {
        Amounts amounts = base.gameObject.GetAmounts();

        maturity        = amounts.Add(new AmountInstance(Db.Get().Amounts.Maturity, base.gameObject));
        baseMaturityMax = new AttributeModifier(maturity.maxAttribute.Id, growthTime / 600f, null, false, false, true);
        maturity.maxAttribute.Add(baseMaturityMax);
        oldAge = amounts.Add(new AmountInstance(Db.Get().Amounts.OldAge, base.gameObject));
        oldAge.maxAttribute.ClearModifiers();
        oldAge.maxAttribute.Add(new AttributeModifier(Db.Get().Amounts.OldAge.maxAttribute.Id, maxAge, null, false, false, true));
        base.OnPrefabInit();
        Subscribe(1119167081, OnNewGameSpawnDelegate);
        Subscribe(1272413801, ResetGrowthDelegate);
    }
 protected override void OnPrefabInit()
 {
     base.OnPrefabInit();
     decorProvider = GetComponent <DecorProvider>();
     if (decorModifier == null)
     {
         decorModifier = new AttributeModifier("Decor", 0f, DUPLICANTS.MODIFIERS.CLOTHING.NAME, false, false, false);
     }
     if (conductivityModifier == null)
     {
         AttributeInstance attributeInstance = base.gameObject.GetAttributes().Get("ThermalConductivityBarrier");
         conductivityModifier = new AttributeModifier("ThermalConductivityBarrier", ClothingInfo.BASIC_CLOTHING.conductivityMod, DUPLICANTS.MODIFIERS.CLOTHING.NAME, false, false, false);
         attributeInstance.Add(conductivityModifier);
     }
 }
    protected override void OnPrefabInit()
    {
        primaryElement = GetComponent <PrimaryElement>();
        average_kilowatts_exchanged = new RunningWeightedAverage(-10f, 10f, 20, true);
        surfaceArea         = 1f;
        thickness           = 0.002f;
        groundTransferScale = 0f;
        Attributes        attributes        = base.gameObject.GetAttributes();
        AttributeInstance attributeInstance = attributes.Add(Db.Get().Attributes.ThermalConductivityBarrier);
        AttributeModifier modifier          = new AttributeModifier(Db.Get().Attributes.ThermalConductivityBarrier.Id, thickness, DUPLICANTS.MODIFIERS.BASEDUPLICANT.NAME, false, false, true);

        attributeInstance.Add(modifier);
        averageTemperatureTransferPerSecond = new AttributeModifier("TemperatureDelta", 0f, DUPLICANTS.MODIFIERS.TEMPEXCHANGE.NAME, false, true, false);
        this.GetAttributes().Add(averageTemperatureTransferPerSecond);
        base.OnPrefabInit();
    }
Пример #21
0
        private static void InitDb()
        {
            var db = Db.Get();

            // тюнингуем и актифируем комнату
            // подхватывать максимальный размер комнаты из тюнинга
            int maxRoomSize = TuningData <RoomProber.Tuning> .Get().maxRoomSize;

            RoomConstraints.Constraint MAXIMUM_SIZE_MAX = new RoomConstraints.Constraint(
                building_criteria: null,
                room_criteria: (Room room) => room.cavity.numCells <= maxRoomSize,
                times_required: 1,
                name: string.Format(ROOMS.CRITERIA.MAXIMUM_SIZE.NAME, maxRoomSize),
                description: string.Format(ROOMS.CRITERIA.MAXIMUM_SIZE.DESCRIPTION, maxRoomSize),
                stomp_in_conflict: null);

            var additional_constraints = db.RoomTypes.MachineShop.additional_constraints;

            for (int i = 0; i < additional_constraints.Length; i++)
            {
                if (additional_constraints[i] == RoomConstraints.MAXIMUM_SIZE_96)
                {
                    additional_constraints[i] = MAXIMUM_SIZE_MAX;
                    break;
                }
            }

            db.RoomTypes.Add(db.RoomTypes.MachineShop);

            // добавляем перк для работы на станции
            CanMachineTinker = db.SkillPerks.Add(new SimpleSkillPerk(REQUIRED_ROLE_PERK, STRINGS.PERK_CAN_MACHINE_TINKER.DESCRIPTION));
            db.Skills.Technicals1.perks.Add(CanMachineTinker);

            // добавляем модификаторы и эффекты
            string text        = DUPLICANTS.MODIFIERS.MACHINETINKER.NAME;
            string description = STRINGS.DUPLICANTS.MODIFIERS.MACHINETINKER.TOOLTIP;

            CraftingSpeed = db.Attributes.Add(new Attribute(CRAFTING_SPEED_MODIFIER_NAME, false, Attribute.Display.General, false, BASE_SPEED_VALUE));
            CraftingSpeed.SetFormatter(new PercentAttributeFormatter());

            MachinerySpeedModifier = new AttributeModifier(MACHINERY_SPEED_MODIFIER_NAME, MACHINERY_SPEED_MODIFIER, text);
            CraftingSpeedModifier  = new AttributeModifier(CRAFTING_SPEED_MODIFIER_NAME, CRAFTING_SPEED_MODIFIER, text);

            MachineTinkerEffect = db.effects.Add(new Effect(MACHINE_TINKER_EFFECT_NAME, text, description, MACHINE_TINKER_EFFECT_DURATION * Constants.SECONDS_PER_CYCLE, true, true, false));
            MachineTinkerEffect.Add(MachinerySpeedModifier);
            MachineTinkerEffect.Add(CraftingSpeedModifier);
        }
Пример #22
0
        private void Clear()
        {
            currentItem     = null;
            currentModifier = null;
            imagePicker.ResetGid();

            var allTextBoxes = Utils.GetChildControls <TextBox>(this);

            foreach (TextBox tb in allTextBoxes)
            {
                tb.Text = "";
            }

            ClearModifier();
            modList.Items.Clear();
            modifiers.Clear();
        }
Пример #23
0
        public void calculates_added_modifier()
        {
            // Arange
            IAttribute        attr = new Attribute();
            AttributeModifier mod  = new AttributeModifier(1f, AttrModType.Flat);

            // Act
            float actualBaseValue = attr.BaseValue;

            AttrProcessor.AddModifier(ref attr, mod);

            float actualValue = attr.Value;

            // Assert
            Assert.AreEqual(0f, actualBaseValue);
            Assert.AreEqual(1f, actualValue);
        }
Пример #24
0
        private void OnStorageChanged(object data)
        {
            // inefficient - set the status of every symbol based on its presence
            foreach (Tag tag in ArtifactsFilterTagList)
            {
                anim.SetSymbolVisiblity(tag.ToString(), false);
            }
            foreach (Tag tag in storage.GetAllTagsInStorage())
            {
                anim.SetSymbolVisiblity(tag.ToString(), true);
            }
            // determine appropriate decor amount
            Attributes attributes = this.GetAttributes();

            if (decorModifier.Count > 0)
            {
                foreach (AttributeModifier attr in decorModifier.Values)
                {
                    attributes.Remove(attr);
                }
                decorModifier.Clear();
            }
            // probably need a hashmap from the tag of the artifact to the decor modifier and decor radius modifier for it so I can properly remove
            // and add the components
            foreach (GameObject go in storage.items)
            {
                if (go.GetComponent <DecorProvider>() != null)
                {
                    float  decorValue  = go.GetComponent <PrimaryElement>().Units *Mathf.Max(Db.Get().BuildingAttributes.Decor.Lookup(go).GetTotalValue() * STORED_DECOR_MODIFIER, MINIMUM_DECOR_PER_ITEM);
                    string description = string.Format(STRINGS.BUILDINGS.PREFABS.ITEMPEDESTAL.DISPLAYED_ITEM_FMT, go.GetComponent <KPrefabID>().PrefabTag.ProperName());
                    Tag    prefabTag   = go.GetComponent <KPrefabID>().PrefabTag;
                    if (decorModifier.ContainsKey(prefabTag))
                    {
                        decorModifier[prefabTag].SetValue(decorModifier[prefabTag].Value + decorValue);
                    }
                    else
                    {
                        decorModifier[prefabTag] = new AttributeModifier(Db.Get().BuildingAttributes.Decor.Id, decorValue, description, false, false, true);
                    }
                }
            }
            foreach (AttributeModifier attr in decorModifier.Values)
            {
                attributes.Add(attr);
            }
        }
Пример #25
0
 internal static void Postfix(AttributeModifier ___unrefrigeratedModifier,
                              AttributeModifier ___refrigeratedModifier,
                              AttributeModifier ___frozenModifier,
                              AttributeModifier ___contaminatedAtmosphereModifier,
                              AttributeModifier ___normalAtmosphereModifier,
                              AttributeModifier ___sterileAtmosphereModifier)
 {
     // Modifiers were initialized by the constructor
     // Normal: -0.5, Sterile: x0, Contaminated: -1
     // Refrigerated/Frozen: +0.5, Unrefrigerated: +0
     ___unrefrigeratedModifier.SetValue(0.0f);
     ___refrigeratedModifier.SetValue(0.5f);
     ___frozenModifier.SetValue(0.5f);
     ___normalAtmosphereModifier.SetValue(-0.5f);
     ___contaminatedAtmosphereModifier.SetValue(-1.0f);
     // IsReadonly is dead code, thankfully
     ___sterileAtmosphereModifier.SetValue(0.0f);
 }
Пример #26
0
        public void correctly_sorts_and_calculates_multiple_modifier_types()
        {
            // Arrange
            IAttribute        attr           = new Attribute(10);
            AttributeModifier modFlat        = new AttributeModifier(100f, AttrModType.Flat);
            AttributeModifier modPercentAdd1 = new AttributeModifier(0.025f, AttrModType.PercentAdd);
            AttributeModifier modPercentAdd2 = new AttributeModifier(0.025f, AttrModType.PercentAdd);
            AttributeModifier modPercentMult = new AttributeModifier(0.05f, AttrModType.PercentMult);

            // Act
            AttrProcessor.AddModifier(ref attr, modFlat);
            AttrProcessor.AddModifier(ref attr, modPercentAdd1);
            AttrProcessor.AddModifier(ref attr, modPercentAdd2);
            AttrProcessor.AddModifier(ref attr, modPercentMult);
            float actualValue = attr.Value;

            // Assert
            Assert.AreEqual(121f, Mathf.Round(actualValue));
        }
Пример #27
0
        private static void AddBuildingAndEffects()
        {
            Utils.AddBuildingToPlanScreen("Furniture", CarouselCentrifugeConfig.ID, EspressoMachineConfig.ID);
#if VANILLA
            const string requiredTech = "ArtificialFriends";
#elif EXPANSION1
            const string requiredTech = "SpaceProgram";
#endif
            Utils.AddBuildingToTechnology(requiredTech, CarouselCentrifugeConfig.ID);

            moraleModifier = new AttributeModifier(
                attribute_id: "QualityOfLife",
                value: CarouselCentrifugeOptions.Instance.MoraleBonus,
                description: STRINGS.DUPLICANTS.MODIFIERS.RIDEONCAROUSEL.NAME,
                is_multiplier: false,
                uiOnly: false,
                is_readonly: false
                );

            specificEffect = new Effect(
                id: CarouselCentrifugeWorkable.specificEffectName,
                name: STRINGS.DUPLICANTS.MODIFIERS.RIDEONCAROUSEL.NAME,
                description: STRINGS.DUPLICANTS.MODIFIERS.RIDEONCAROUSEL.TOOLTIP,
                duration: (CarouselCentrifugeOptions.Instance.SpecificEffectDuration - 0.05f) * Constants.SECONDS_PER_CYCLE,
                show_in_ui: false,
                trigger_floating_text: true,
                is_bad: false
                );
            specificEffect.Add(moraleModifier);

            trackingEffect = new Effect(
                id: CarouselCentrifugeWorkable.trackingEffectName,
                name: "",
                description: "",
                duration: CarouselCentrifugeOptions.Instance.TrackingEffectDuration * Constants.SECONDS_PER_CYCLE,
                show_in_ui: false,
                trigger_floating_text: false,
                is_bad: false
                );

            Db.Get().effects.Add(specificEffect);
            Db.Get().effects.Add(trackingEffect);
        }
        private static void AfterDbInit()
        {
            var db = Db.Get();
            var effectFarmTinker = db.effects.Get(TinkerableEffectMonitor.FARMTINKEREFFECTID);

            ColdBreatherThroughput = new Attribute(nameof(ColdBreatherThroughput), false, Attribute.Display.General, false, THROUGHPUT_BASE_VALUE);
            ColdBreatherThroughput.SetFormatter(new PercentAttributeFormatter());
            db.Attributes.Add(ColdBreatherThroughput);

            ColdBreatherThroughputModifier = new AttributeModifier(ColdBreatherThroughput.Id, THROUGHPUT_MULTIPLIER - THROUGHPUT_BASE_VALUE);
            effectFarmTinker.Add(ColdBreatherThroughputModifier);

            OxyfernThroughput = new Attribute(nameof(OxyfernThroughput), false, Attribute.Display.General, false, THROUGHPUT_BASE_VALUE);
            OxyfernThroughput.SetFormatter(new PercentAttributeFormatter());
            db.Attributes.Add(OxyfernThroughput);

            OxyfernThroughputModifier = new AttributeModifier(OxyfernThroughput.Id, THROUGHPUT_MULTIPLIER - THROUGHPUT_BASE_VALUE);
            effectFarmTinker.Add(OxyfernThroughputModifier);
        }
Пример #29
0
    private void UpdateBaseDecorModifiers()
    {
        Attributes attributes = this.GetAttributes();

        if (baseDecorModifier != null)
        {
            attributes.Remove(baseDecorModifier);
            attributes.Remove(baseDecorRadiusModifier);
            baseDecorModifier       = null;
            baseDecorRadiusModifier = null;
        }
        if (baseDecor != 0f)
        {
            baseDecorModifier       = new AttributeModifier(Db.Get().BuildingAttributes.Decor.Id, baseDecor, UI.TOOLTIPS.BASE_VALUE, false, false, true);
            baseDecorRadiusModifier = new AttributeModifier(Db.Get().BuildingAttributes.DecorRadius.Id, baseRadius, UI.TOOLTIPS.BASE_VALUE, false, false, true);
            attributes.Add(baseDecorModifier);
            attributes.Add(baseDecorRadiusModifier);
        }
    }
Пример #30
0
        private void modEditButton_Click(object sender, EventArgs e)
        {
            if (currentModifier != null)
            {
                modifiers.Remove(currentModifier);
            }
            else
            {
                currentModifier = new AttributeModifier();
            }

            currentModifier.Attribute = (CharacterAttribute)Enum.Parse(typeof(CharacterAttribute), modAttribute.Text);
            currentModifier.Type      = (ModifierType)Enum.Parse(typeof(ModifierType), modType.Text);
            currentModifier.Value     = int.Parse(modValue.Text);

            modifiers.Add(currentModifier);

            LoadModifiers();
        }
Пример #31
0
        public Instance(IStateMachineTarget master, Def def)
            : base(master, def)
        {
            pickupable = base.gameObject.RequireComponent <Pickupable>();
            base.master.Subscribe(-2064133523, OnAbsorb);
            base.master.Subscribe(1335436905, OnSplitFromChunk);
            primaryElement = base.gameObject.GetComponent <PrimaryElement>();
            Amounts amounts = master.gameObject.GetAmounts();

            RotAmountInstance = amounts.Add(new AmountInstance(Db.Get().Amounts.Rot, master.gameObject));
            RotAmountInstance.maxAttribute.ClearModifiers();
            RotAmountInstance.maxAttribute.Add(new AttributeModifier("Rot", def.spoilTime, null, false, false, true));
            RotAmountInstance.SetValue(def.spoilTime);
            base.sm.rotParameter.Set(RotAmountInstance.value, base.smi);
            UnrefrigeratedModifier = new AttributeModifier("Rot", 0f, DUPLICANTS.MODIFIERS.ROTTEMPERATURE.NAME, false, false, false);
            ContaminatedAtmosphere = new AttributeModifier("Rot", 0f, DUPLICANTS.MODIFIERS.ROTATMOSPHERE.NAME, false, false, false);
            RotAmountInstance.deltaAttribute.Add(UnrefrigeratedModifier);
            RotAmountInstance.deltaAttribute.Add(ContaminatedAtmosphere);
            RefreshModifiers(0f);
        }
Пример #32
0
        public void RemoveModifiers(int itemId)
        {
            AttributeSheet    sheet = Global.Player.Attributes;
            AttributeModifier mod   = null;

            foreach (AttributeModifier att in sheet.Modifiers)
            {
                if (att.ItemId == itemId)
                {
                    mod = att;
                    break;
                }
            }

            if (mod != null)
            {
                sheet.Modifiers.Remove(mod);
                sheet.Recalculate();
            }
        }
Пример #33
0
        public void removed_modifier_successfully()
        {
            // Arrange
            IAttribute        attr = new Attribute();
            AttributeModifier mod  = new AttributeModifier(10f, AttrModType.Flat);

            // Act
            float actualBaseValue = attr.BaseValue;

            AttrProcessor.AddModifier(ref attr, mod);
            float actualValueWithModifier = attr.Value;

            AttrProcessor.RemoveModifier(ref attr, mod);
            float actualValue = attr.Value;

            // Assert
            Assert.AreEqual(0f, actualBaseValue);
            Assert.AreEqual(10f, actualValueWithModifier);
            Assert.AreEqual(0f, actualValue);
        }
Пример #34
0
		/// <summary>
		/// Remove os modificadores de atributo da lista
		/// </summary>
		/// <param name="attributeModifiers_">Attribute modifiers.</param>
	public static void CheckAttributeModifiers(ref AttributeModifier[] attributeModifiers_, Effects effects_)
	{
		bool _needToReorder = false;

		for(int i = 0; i < attributeModifiers_.Length; i++)
		{
			if (attributeModifiers_[i] != null)
			{
				// Modificador de atributo por Tempo e Expirou o Tempo = Remove da Tabela de Modificadores e marca que precisa reorganizar a tabela
				if (attributeModifiers_[i].ModifierType == ENUMERATORS.Attribute.AttributeModifierTypeEnum.Time &&
					attributeModifiers_[i].ExpireTime < Time.time)
				{
					//Remove os efeitos associados ao modificador
					RemoveEffect(effects_, attributeModifiers_[i]);

					attributeModifiers_[i] = null;
					_needToReorder = true;

					continue;
				}

				// Se for modificador para ser usado uma unica vez e esta marcado como consumido exclui da tabela
				if (attributeModifiers_[i].ModifierType == ENUMERATORS.Attribute.AttributeModifierTypeEnum.OneTimeOnly &&
					attributeModifiers_[i].Consumed)
				{
					//Remove os efeitos associados ao modificador
					RemoveEffect(effects_, attributeModifiers_[i]);

					attributeModifiers_[i] = null;
					_needToReorder = true;
					continue;					
				}
			}
			else
				break;
		}

		// Reorganiza a tabela se algum modificador foi removido
		if (_needToReorder)
		{
			Helper.ReorderArray<AttributeModifier>(attributeModifiers_);
		}	
	}
Пример #35
0
	public static void ApplyAttributesModifiers(ref AttributeBase[] attributes, ref AttributeModifier[] attributeModifiers_, Effects effects_)
	{
		int _attributeTypeIndex;

		for (int i = 0; i < attributeModifiers_.Length; i++)
		{
			if (attributeModifiers_[i] != null)
			{
				_attributeTypeIndex = (int)attributeModifiers_[i].AttributeType;

				switch(attributeModifiers_[i].CalcType)
				{
				case ENUMERATORS.Attribute.AttributeModifierCalcTypeEnum.Percent:

					switch(attributeModifiers_[i].ApplyTo)
					{
					case ENUMERATORS.Attribute.AttributeModifierApplyToEnum.Max:

						switch (attributeModifiers_[i].ApplyAs)
						{
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Temporary:
							attributes[_attributeTypeIndex].MaxModifiers += (attributes[_attributeTypeIndex].Max * attributeModifiers_[i].Value / 100);
							break;
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Constant:
							attributes[_attributeTypeIndex].Max += (attributes[_attributeTypeIndex].Max * attributeModifiers_[i].Value / 100);

							break;
						}
						break;
					case ENUMERATORS.Attribute.AttributeModifierApplyToEnum.Current:

						switch (attributeModifiers_[i].ApplyAs)
						{
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Temporary:
							attributes[_attributeTypeIndex].CurrentModifiers += (attributes[_attributeTypeIndex].Current * attributeModifiers_[i].Value / 100);							
							break;
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Constant:
							attributes[_attributeTypeIndex].Current += (attributes[_attributeTypeIndex].Current * attributeModifiers_[i].Value / 100);		// PERCENTUAL SEMPRE EM CIMA DO MAXIMO
							break;							
						}

						break;
					case ENUMERATORS.Attribute.AttributeModifierApplyToEnum.Both:

						switch (attributeModifiers_[i].ApplyAs)
						{
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Temporary:
							attributes[_attributeTypeIndex].MaxModifiers += (attributes[_attributeTypeIndex].Max * attributeModifiers_[i].Value / 100);
							attributes[_attributeTypeIndex].CurrentModifiers += (attributes[_attributeTypeIndex].Current * attributeModifiers_[i].Value / 100);
							break;
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Constant:
							attributes[_attributeTypeIndex].Max += (attributes[_attributeTypeIndex].Max * attributeModifiers_[i].Value / 100);
							attributes[_attributeTypeIndex].Current += (attributes[_attributeTypeIndex].Max * attributeModifiers_[i].Value / 100);	// PERCENTUAL SEMPRE EM CIMA DO MAXIMO
							break;
						}
						break;
					}

					break;
				case ENUMERATORS.Attribute.AttributeModifierCalcTypeEnum.Value:

					switch(attributeModifiers_[i].ApplyTo)
					{
					case ENUMERATORS.Attribute.AttributeModifierApplyToEnum.Max:

						switch(attributeModifiers_[i].ApplyAs)
						{
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Temporary:
							attributes[_attributeTypeIndex].MaxModifiers += attributeModifiers_[i].Value;
							break;
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Constant:
							attributes[_attributeTypeIndex].Max += attributeModifiers_[i].Value;
							break;
						}

						break;
					case ENUMERATORS.Attribute.AttributeModifierApplyToEnum.Current:

						switch(attributeModifiers_[i].ApplyAs)
						{
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Temporary:
							attributes[_attributeTypeIndex].CurrentModifiers += attributeModifiers_[i].Value;
							break;
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Constant:
							attributes[_attributeTypeIndex].Current += attributeModifiers_[i].Value;
							break;
						}

						break;
					case ENUMERATORS.Attribute.AttributeModifierApplyToEnum.Both:

						switch(attributeModifiers_[i].ApplyAs)
						{
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Temporary:
							attributes[_attributeTypeIndex].MaxModifiers += attributeModifiers_[i].Value;
							attributes[_attributeTypeIndex].CurrentModifiers += attributeModifiers_[i].Value;
							break;
						case ENUMERATORS.Attribute.AttributeModifierApplyAsEnum.Constant:
							attributes[_attributeTypeIndex].Max += attributeModifiers_[i].Value;
							attributes[_attributeTypeIndex].Current += attributeModifiers_[i].Value;							
							break;
						}

						break;
					}

					break;
				}

				// Marca o atributo como consumido
				attributeModifiers_[i].Consumed = true;

				// Aplica os valores maximos caso o modificador de atributo esteja configurado para nao exceder
				if (!attributeModifiers_[i].CanSetToCurrentExceedMax && 
					attributes[(int)attributeModifiers_[i].AttributeType].Current > attributes[(int)attributeModifiers_[i].AttributeType].Max)
				{
					attributes[(int)attributeModifiers_[i].AttributeType].Current = attributes[(int)attributeModifiers_[i].AttributeType].Max;
				}

				// Aplica os efeitos atrelados ao modificador
				ApplyEffect(effects_, attributeModifiers_[i]);
			}
		}
	}
Пример #36
0
    private static AttributeModifier[] InitializeAttributesModifiers()
    {
        AttributeModifier[] _tempModifier = new AttributeModifier[CONSTANTS.ATTRIBUTES.ATTRIBUTE_MODIFIERS_COUNT];
        for (int i = 0; i < _tempModifier.Length; i++)
        {
            _tempModifier[i] = null;
        }

        return _tempModifier;
    }
Пример #37
0
	/// <summary>
	/// Aplica os efeitos utilizando as operacoes BitWise
	/// </summary>
	/// <param name="effects_">Effects.</param>
	/// <param name="modifier_">Modifier.</param>
	private static void ApplyEffect(Effects effects_,  AttributeModifier modifier_)
	{
		if (effects_ != null)
		{
			if (modifier_.HasSkillEffect && 
			   (( effects_.SkillEffects & modifier_.SkillEffects ) == 0))
			{
				effects_.SkillEffects = effects_.SkillEffects | modifier_.SkillEffects;
			}			
		}
	}
Пример #38
0
	/// <summary>
	/// Remove os efeitos associados a um modificador utilizando as operacoes BitWise
	/// </summary>
	/// <param name="effects_">Effects.</param>
	/// <param name="modifier_">Modifier.</param>
	private static void RemoveEffect(Effects effects_, AttributeModifier modifier_)
	{
		if (effects_ != null)
		{
			if (modifier_.HasSkillEffect &&
				(( effects_.SkillEffects & modifier_.SkillEffects ) != 0))
			{
				effects_.SkillEffects &= ~modifier_.SkillEffects;
			}
		}
	}
Пример #39
0
	/// <summary>
	/// Metodo responsavel por gerenciar a adicao de modificadores de atributos ao personagem
	/// </summary>
	/// <param name="attributeModifier_">Lista de Attribute modifier.</param>
	public static void AddAttributeModifier(ref AttributeModifier[] attributeModifiers_, AttributeModifier[] attributeModifierList_)
	{
		if (attributeModifierList_ != null){
			for(int i = 0; i < attributeModifierList_.Length; i++)
			{
				AttributeModifier.AddAttributeModifier(ref attributeModifiers_, attributeModifierList_[i]);
			}
		}
	}