public void AddElement(Element name, int count) { if (!composition.ContainsKey(name)) { composition[name] = 0; } composition[name] = Math.Max(composition[name] + count, 0); }
// Update is called once per frame void FixedUpdate() { var numReactions = 0; tTime = Time.time + 1.0f; float fusionChance = 0.001f; var mass = GetTotalMass(); var deltas = new ElementInventory(); foreach (var comp in composition) { var element = comp.Key; var count = comp.Value; if (Elements.activations[element] < mass) { var selfFusionProduct = (int)element * 2; if (Enum.IsDefined(typeof(Element), selfFusionProduct) && UnityEngine.Random.value < fusionChance / Time.fixedDeltaTime) { var product = (Element)selfFusionProduct; var numToFuse = Mathf.CeilToInt(count * fusionChance); if (!deltas.ContainsKey(element)) { deltas[element] = 0; } if (!deltas.ContainsKey(product)) { deltas[product] = 0; } deltas[element] -= numToFuse * 2; deltas[product] += numToFuse; numReactions += numToFuse; } var hChance = 0.3f; var hFusionProduct = (int)element + 1; if (Enum.IsDefined(typeof(Element), hFusionProduct) && UnityEngine.Random.value < (fusionChance * hChance) / Time.fixedDeltaTime) { var product = (Element)hFusionProduct; var numToFuse = Mathf.CeilToInt(count * fusionChance); if (!deltas.ContainsKey(element)) { deltas[element] = 0; } if (!deltas.ContainsKey(product)) { deltas[product] = 0; } deltas[element] -= numToFuse * 2; deltas[product] += numToFuse; numReactions += numToFuse; } } } AddElements(deltas); reactionsLive += numReactions; var scale = mass / 1000.0f + ((numReactions * 50.0f) / (mass / 100.0f)); transform.localScale = Vector3.Lerp(transform.localScale, new Vector3(scale, scale, scale), Time.fixedDeltaTime); }