Esempio n. 1
0
    void ConjugateBack()
    {
        BacteryColony2D bC            = GetComponentInParent <BacteryColony2D> ();
        float           averageLength = bC.GetAverageLengthExcept();

        // times 2 because in the case of a perfect circle,
        //the average distance to center is half of the radius (at least i think)
        StartCoroutine(SendToDistance(averageLength * 2, BacteryState.normal));
    }
Esempio n. 2
0
    public void TestAndDivide(float number, BacteryColony2D colony, GameObject animation)
    {
        Transform colonyTransform = colony.GetComponent <Transform> ();

        if (number <= props.divisionFrequency / 60f)
        {
            GameObject newBactery = Divide(colonyTransform, animation);
            Bactery2D  newB       = newBactery.GetComponent <Bactery2D> ();
            newB.props = props.Clone();
            newB.UpdateProps();
            colony.Add(newBactery);
            UpdateBacteryCount();
        }
    }
Esempio n. 3
0
    int FindClosestBacteryIndex(BacteryColony2D colony)
    {
        float minDistance = float.MaxValue;
        int   index       = -1;

        for (int i = 0; i < colony.Bacteries.Count; i++)
        {
            Bactery2D b = colony.Bacteries [i].GetComponent <Bactery2D> ();
            float     d = Vector3.Distance(colony.Bacteries [i].transform.position, transform.position);
            if (d < minDistance && b.props.bacteryState == BacteryState.normal)
            {
                minDistance = d;
                index       = i;
            }
        }
        return(index);
    }
Esempio n. 4
0
    public IEnumerator SendToDistance(float distance, BacteryState bacteryState)
    {
        StopCoroutine("SendTo");
        Rigidbody2D rigidBody = GetComponent <Rigidbody2D> ();

        rigidBody.bodyType    = RigidbodyType2D.Dynamic;
        rigidBody.isKinematic = false;
        Color initial = props.colors [(int)bacteryState];
        Color final   = props.colors [(int)props.bacteryState];

        zVelocity = 0f;
        BacteryColony2D bC          = GetComponentInParent <BacteryColony2D> ();
        Vector3         destination = distance * Vector3.Normalize(bC.BaryCenter - transform.position) + bC.BaryCenter;
        float           d1          = Vector3.Distance(transform.position, destination);
        float           t           = 0;

        while (Vector3.Distance(bC.BaryCenter, transform.position) >= distance)
        {
            t          += Time.deltaTime;
            destination = distance * Vector3.Normalize(bC.BaryCenter - transform.position) + bC.BaryCenter;
            Vector3 direction = destination - transform.position;
            rigidBody.AddForce(direction);
            zVelocity += direction.z;
            zVelocity /= 30f;
            Vector3 newPos = transform.position + new Vector3(0f, 0f, zVelocity);
            transform.position = newPos;
            float d = Vector3.Distance(transform.position, destination);
            _renderer.GetPropertyBlock(_propBlock);
            _propBlock.SetColor("_EmissionColor", Color.Lerp(initial, final, d / d1));
            _renderer.SetPropertyBlock(_propBlock);
            t += Time.deltaTime;
            yield return(null);
        }
        rigidBody.drag       /= 2f;
        rigidBody.isKinematic = false;
        gameObject.layer      = 10;
        props.bacteryState    = bacteryState;
        UpdateProps();
    }