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)); }
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(); } }
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); }
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(); }