public void ProbeSurroundings() { var dirtsArray = FindObjectsOfType <Dirt>(); int numDirts = dirtsArray.Length; int neighbors = 0; if (numDirts > 0) { /// Get average of distance for all dirts... for (int i = 0; i < numDirts; i++) { if ((dirtsArray[i] != null) && (dirtsArray[i] != gameObject)) { Dirt ThisDirt = dirtsArray[i]; float distToDirt = Vector2.Distance(transform.position, ThisDirt.transform.position); if (distToDirt <= NeighborlyDistance) { neighbors++; } } } /// Compaction detonation if (bExplodes && (neighbors >= TooManyNeighbors)) { if (transform.localScale.magnitude >= 1.0f) { PuffOut(); /// Forces for (int i = 0; i < numDirts; i++) { if ((dirtsArray[i] != null) && (dirtsArray[i] != gameObject)) { Dirt ThisDirt = dirtsArray[i]; Vector2 ExplodeVector = ThisDirt.transform.position - transform.position; float ExplodeForce = ExplodeStrength * Mathf.Clamp((1.0f / ExplodeVector.magnitude), 1.0f, 100.0f); Vector2 Force = ExplodeVector.normalized * ExplodeForce; ThisDirt.GetComponent <Rigidbody2D>().AddForce(Force); } } } } } }
private void CalculateMeatball(MouseControl finger) { float r = finger.radius; Vector3 center = finger.transform.position; float rsquare = r * r; for (int n = 0; n < tiles.Length; n++) { Dirt target = tiles[n]; Vector3 tileCenter = target.transform.position; Vector3 posC = new Vector3(tileCenter.x - tileCenterOffset, tileCenter.y - tileCenterOffset, tileCenter.z); Vector3 posA = new Vector3(posC.x, posC.y + 1, tileCenter.z); Vector3 posB = new Vector3(posC.x + 1, posC.y + 1, tileCenter.z); Vector3 posD = new Vector3(posC.x + 1, posC.y, tileCenter.z); //Debug.LogFormat("A:{0} B:{1} C:{2} D:{3} M:{4}", posA, posB, posC, posD, center); float scoreA = CalcScoreFunc(rsquare, center, posA); float scoreB = CalcScoreFunc(rsquare, center, posB); float scoreC = CalcScoreFunc(rsquare, center, posC); float scoreD = CalcScoreFunc(rsquare, center, posD); if ((scoreA >= 1) || (scoreB >= 1) || (scoreC >= 1) || (scoreD >= 1)) { Debug.LogFormat("A:{0} B:{1} C:{2} D:{3} ", scoreA, scoreB, scoreC, scoreD); var rdr = target.GetComponent <Renderer>(); if (rdr != null) { rdr.material.color = Color.black; } } //if ((scoreA < 1) || (scoreB < 1) || (scoreC < 1) || (scoreD < 1)) //{ // var rdr = target.GetComponent<Renderer>(); // if (rdr != null) // { // rdr.material.color = Color.black; // } //} } }