Пример #1
0
    // Shotgun firing
    public void FireShotgun(int shots, float spread, GameObject ship, int powerLevel, bool grow)
    {
        if (grow)
        {
            kShotgunDisplacement = 28f;
        }
        else
        {
            kShotgunDisplacement = kDefaultShotgunDisplacement;
        }

        for (int i = 0; i <= shots; i++)
        {
            GameObject           e            = Instantiate(mShotgunProjectile[i]) as GameObject;
            ShotgunBlastBehavior shotgunBlast = e.GetComponent <ShotgunBlastBehavior>();

            if (null != shotgunBlast)
            {
                if (powerLevel > 1)
                {
                    shotgunBlast.SetPowerLevel(powerLevel);
                }
                e.transform.position = ship.transform.position + ship.transform.up * kShotgunDisplacement;                 //displacement, was 14f
                e.transform.up       = ship.transform.up;
                if (grow)
                {
                    e.transform.localScale += new Vector3(60.0f, 60.0f, 0.0f);
                }
                shotgunBlast.AddShotgunSpeed(rigidbody2D.velocity.magnitude);
                shotgunBlast.SetForwardDirection(e.transform.up);
                float shotPer = (float)(i) / shots;
                e.transform.Rotate(Vector3.forward, -(spread / 2f) + spread * shotPer);
                //e.transform.Rotate(Vector3.forward, spread + (i * shots * 1.5f));
            }
        }
        Play(mGunShot2, 1f, 1);
    }
Пример #2
0
    private void smash(float minSize, float maxSize, int pieces, GameObject other)
    {
        // get a new mass for the object
        // This is a steaming mess that I need to clean up somehow

        float newMass = rigidbody2D.mass / pieces;

        for (int i = 0; i < pieces; ++i)
        {
            GameObject e = (GameObject)Instantiate(mObject);
            e.GetComponent <OrbBehavior>().mObject = mObject;
            e.rigidbody2D.mass = newMass;            // change mass

            float rotatepiece = -90 + (180 * i) / pieces;
            // the orbs each get an equal portion of a 180 arc the direction of the exploding orb

            e.transform.up = rigidbody2D.velocity;             // Calculate new velocity
            e.transform.up.Normalize();
            e.transform.Rotate(0, 0, rotatepiece + Random.Range(0f, 180f / pieces));

            ShotgunBlastBehavior shot = other.GetComponent <ShotgunBlastBehavior>();
            e.transform.position    = transform.position + e.transform.up * Mathf.Sqrt(newMass) / kScale;
            e.rigidbody2D.velocity  = (Vector2)(e.transform.up * kExplodeForce) + rigidbody2D.velocity;
            e.rigidbody2D.velocity += (Vector2)shot.transform.up * 30.0f;
            e.transform.up          = rigidbody2D.velocity.normalized;


            e.rigidbody2D.AddForce(shot.transform.up * 1000.0f);

            e.transform.localScale = Vector2.one * newMass;
        }

        float random = Random.Range(0.0f, 1.0f);

        if (random <= powerUpDroprate)
        {
            float powerupSelect = Random.Range(0.0f, 1.0f);

            if (powerupSelect > 0.0f && powerupSelect <= 0.25f)
            {
                GameObject powerUp = (GameObject)Instantiate(mPowerUp);
                powerUp.transform.position = transform.position;
            }
            else if (powerupSelect > 0.25f && powerupSelect <= 0.50f)
            {
                GameObject speedUp = (GameObject)Instantiate(mSpeedUp);
                speedUp.transform.position = transform.position;
            }
            else if (powerupSelect > 0.50f && powerupSelect <= 0.75f)
            {
                GameObject growUp = (GameObject)Instantiate(mGrowUp);
                growUp.transform.position = transform.position;
            }
            else
            {
                GameObject spikeUp = (GameObject)Instantiate(mSpikeUp);
                spikeUp.transform.position = transform.position;
            }
        }

        mWorld.Orbs--;
        Destroy(this.gameObject);
    }