public void SkillEvent(Skills skill) { connector.cleanCells(); connector.Skills(character, EventTypes.SKILL, SkillsCallBackParametrizedCallback(character, (character, selectedCell, result, targets) => { foreach (CharacterScript target in targets) { var f = FormulaScript.Create(""); foreach (Formula formula in skill.formulas) { f.formula = formula.formula; if (f.FormulaParser.IsValidExpression && target != null) { var r = f.FormulaParser.Evaluate(target.character.attributes); AttributeValue attrbValue = target.character.attributesWithFormulas.Find(x => x.attribute.id == formula.attributeID); if (attrbValue != null) { attrbValue.value += (int)r; if (attrbValue.value > attrbValue.maxValue) { attrbValue.value = attrbValue.maxValue; } } } } } objectCanvas.SetActive(false); Turn(); }), skill); }
public void calculateFormulas() { var f = FormulaScript.Create(""); // Copy attributes attributesWithFormulas = Extensions.Clone <AttributeValue>(attributes.Select(x => x.attribute).ToList()).ToList(); foreach (AttributeValue attrb in attributesWithFormulas) { attrb.value = attributes.Find(x => x.attribute == attrb.attribute).value; attrb.minValue = attributes.Find(x => x.attribute == attrb.attribute).minValue; attrb.maxValue = attributes.Find(x => x.attribute == attrb.attribute).maxValue; } // Formulas in slots foreach (Slot slot in Slots) { foreach (Formula formula in slot.modifier.formulas) { f.formula = formula.formula; if (f.FormulaParser.IsValidExpression) { var r = f.FormulaParser.Evaluate(attributes); AttributeValue attrbValue = attributesWithFormulas.Find(x => x.attribute.id == formula.attributeID); if (attrbValue != null) { attrbValue.value += (int)r; if (attrbValue.value > attrbValue.maxValue) { attrbValue.value = attrbValue.maxValue; } } } } } // Formulas in slots of specialized classes foreach (SpecializedClass specializedClass in specializedClasses) { foreach (Slot slot in specializedClass.slots) { foreach (Formula formula in slot.modifier.formulas) { if (f.FormulaParser.IsValidExpression) { f.formula = formula.formula; var r = f.FormulaParser.Evaluate(attributes); AttributeValue attrbValue = attributesWithFormulas.Find(x => x.attribute.id == formula.attributeID); attrbValue.value += (int)r; if (attrbValue.value > attrbValue.maxValue) { attrbValue.value = attrbValue.maxValue; } } } } } specializedClassesCount = specializedClasses.Count; }
private void OnEnable() { // Remove button removeTexture = (Texture2D)Resources.Load("Buttons/remove", typeof(Texture2D)); // Get Formulas listFormulas = new ReorderableList(serializedObject, serializedObject.FindProperty("_formulas"), true, true, true, true); // Draw formulas listFormulas.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => { //var element = listFormulas.serializedProperty.GetArrayElementAtIndex(index); var formula = item.formulas[index]; rect.y += 2; indexFormula = Database.Instance.attributes.IndexOf(Database.Instance.attributes.Find(x => x.id == formula.attributeID)); EditorGUI.BeginChangeCheck(); indexFormula = EditorGUI.Popup(new Rect(rect.x, rect.y, 50, EditorGUIUtility.singleLineHeight), indexFormula, Database.Instance.attributes.Select(x => x.id).ToArray()); EditorGUI.LabelField(new Rect(rect.x + 55, rect.y, 10, EditorGUIUtility.singleLineHeight), "=", EditorStyles.boldLabel); formula.formula = EditorGUI.TextField(new Rect(rect.x + 70, rect.y, rect.width - 98, EditorGUIUtility.singleLineHeight), formula.formula); bool removed = false; if (GUI.Button(new Rect(rect.width, rect.y, 16, 16), new GUIContent("", removeTexture), removeStyle)) { item.formulas.Remove(item.formulas[index]); removed = true; } var f = FormulaScript.Create(formula.formula); if (!removed && !f.FormulaParser.IsValidExpression) { EditorGUI.LabelField(new Rect(rect.x + 70, rect.y + EditorGUIUtility.singleLineHeight + 2.0f, rect.width, EditorGUIUtility.singleLineHeight), f.FormulaParser.Error); } if (!removed && EditorGUI.EndChangeCheck()) { formula.attributeID = Database.Instance.attributes[indexFormula].id; } }; listFormulas.elementHeight = (EditorGUIUtility.singleLineHeight * 2) + 4.0f; // listFormulas header listFormulas.drawHeaderCallback = (Rect rect) => { EditorGUI.LabelField(rect, "Formulas"); }; // Add formula listFormulas.onAddDropdownCallback = (Rect buttonRect, ReorderableList l) => { item.formulas.Add(new Formula()); serializedObject.ApplyModifiedProperties(); EditorUtility.SetDirty(target); }; // Remove formula listFormulas.onRemoveCallback = (ReorderableList l) => { item.formulas.Remove(item.formulas[l.index]); serializedObject.ApplyModifiedProperties(); }; }