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