Exemplo n.º 1
0
    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);
                        }
                    }
                }
            }
        }
    }
Exemplo n.º 2
0
    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;
            //    }
            //}
        }
    }