Ejemplo n.º 1
0
    public override void Die()
    {
        Destroy(gameObject, 0);

        if (chunk != null)
        {
            if (!flagged)
            {
                chunk.FlagAsteroid(this);
                flagged = true;
            }

            chunk.RemoveAsteroid(this);
        }

        if (sizeClass > 0 && gen != null)
        {
            if (chunk != null)
            {
                Random.seed = chunk.chunkSeed + id;
            }
            float numAsteroids = Random.Range(sizeClass, sizeClass + 3);

            float angleStep  = 360 / numAsteroids;
            float startAngle = Random.Range(0, 360);

            for (int i = 0; i < numAsteroids; i++)
            {
                gen.transform.position = transform.position + (Vector3) new Vector2(Mathf.Cos(Mathf.Deg2Rad * (startAngle + angleStep * i)),
                                                                                    Mathf.Sin(Mathf.Deg2Rad * (startAngle + angleStep * i))) * (sizeClass + 1) * 2;
                Asteroid clone = gen.GenerateAsteroid(mineral, sizeClass - 1, Random.Range(int.MinValue, int.MaxValue) + id);

                clone.chunk = chunk;

                if (chunk != null)
                {
                    chunk.AddAsteroid(clone);
                }
                else
                {
                    clone.gameObject.SetActive(true);
                }

                clone.rigidbody2D.AddForce(((Vector2)gen.transform.position - lastColPoint).normalized * 10 * sizeClass, ForceMode2D.Impulse);
            }
        }

        if (mineral != MineralType.Blank)
        {
            Mineral drop = gen.GenerateMineral(mineral);
            drop.transform.position = transform.position;
        }

        if (deathFX.Length > 0)
        {
            Instantiate(deathFX[(int)Mathf.Clamp(sizeClass, 0, deathFX.Length - 1)], transform.position + new Vector3(0, 0, -5), transform.rotation);
        }
    }