public override void InitializeVariable(Dictionary <string, string> variables) { string value; if (variables.TryGetValue("count", out value)) { m_count = int.Parse(value); m_modefier_configs = new AttributeModifierConfig[m_count]; Prepare(m_count); } for (int i = 0; i < m_count; ++i) { AttributeModifierConfig modifier = RecyclableObject.Create <AttributeModifierConfig>(); m_modefier_configs[i] = modifier; if (variables.TryGetValue(m_attribute_name_key[i], out value)) { modifier.m_attribute_id = (int)CRC.Calculate(value); } if (variables.TryGetValue(m_attribute_category_key[i], out value)) { modifier.m_attribute_category = (int)CRC.Calculate(value); } if (variables.TryGetValue(m_value_key[i], out value)) { modifier.m_value.Compile(value); } } }
public override void Apply() { if (m_modefier_configs == null || m_modefier_configs.Length == 0) { return; } m_modifier_ids = new int[m_modefier_configs.Length]; for (int i = 0; i < m_modefier_configs.Length; ++i) { AttributeModifierConfig modifier_config = m_modefier_configs[i]; FixPoint formula_value = modifier_config.m_value.Evaluate(this); m_modifier_ids[i] = AddModifier(modifier_config, formula_value); } }
int AddModifier(AttributeModifierConfig modifier_config, FixPoint modifier_value) { AttributeModifier attribute_modifier = RecyclableObject.Create <AttributeModifier>(); attribute_modifier.Construct(GetLogicWorld().GetAttributeModifierIDGenerator().GenID(), modifier_config.m_attribute_category, modifier_value); EffectDefinitionComponent definition_component = ((Effect)ParentObject).GetDefinitionComponent(); EntityManager entity_manager = GetLogicWorld().GetEntityManager(); Entity owner_entity = entity_manager.GetObject(definition_component.TargetEntityID); Attribute attribute = EntityUtil.GetAttribute(owner_entity, modifier_config.m_attribute_id); if (attribute == null) { return(0); } attribute.AddModifier(attribute_modifier); return(attribute_modifier.ID); }