Exemple #1
0
 public void AddElement(Element name, int count)
 {
     if (!composition.ContainsKey(name))
     {
         composition[name] = 0;
     }
     composition[name] = Math.Max(composition[name] + count, 0);
 }
Exemple #2
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);
    }