//To shoot a pattern, we use trigonometry and a for loop to make bullets shoot //at different ways based on the number of bullets in the volley. private void Shoot(BulletPatterns pattern) { GameObject bulletToShoot; Rigidbody2D bulletToShootRB; Vector2 directionFire; float stepAngle = (pattern.angleOne - pattern.angleTwo) / pattern.numShots; float dirAngle = pattern.angleOne; float fireX; float fireY; for (int x = 0; x < pattern.numShots; x++) { //Grab bullet, set it at the FP. bulletToShoot = EnemyBulletPool.Instance.GetFromPool(); bulletToShootRB = bulletToShoot.GetComponent <Rigidbody2D>(); bulletToShoot.transform.position = FPM.position; //Get direction to shoot at. fireX = Mathf.Cos((dirAngle * Mathf.PI) / 180f); fireY = Mathf.Sin((dirAngle * Mathf.PI) / 180f); directionFire = new Vector2(fireX, fireY); bulletToShootRB.AddForce((directionFire * bulletPower), ForceMode2D.Impulse); dirAngle += stepAngle; } }
//If the pattern is a burst fire, it will shoot the same pattern a number of times //Before shooting the next volley. private IEnumerator BurstFire(BulletPatterns pattern) { int x = 0; while (x < pattern.burstAmount) { Shoot(pattern); yield return(new WaitForSeconds(pattern.burstFireDelay)); x++; } }
// Update is called once per frame void Update() { if (isActivated) { transform.Translate(new Vector3(xDir, yDir) * movementSpeed * Time.deltaTime); if (transform.position.x < -10 || transform.position.x > 10 || transform.position.y < -10 || transform.position.y > 10) { Destroy(gameObject); } if (Random.Range(0, 200) == 1 /*splitTimer >= 1.2f*/) { if (boolet.name.Equals("Bullet")) { //isActivated = false; BulletPatterns.spawnBullet(xDir, yDir, boolet, transform.position); BulletPatterns.spawnBullet(-1 * xDir, yDir, boolet, transform.position); BulletPatterns.spawnBullet(-1 * xDir, -1 * yDir, boolet, transform.position); BulletPatterns.spawnBullet(xDir, -1 * yDir, boolet, transform.position); //Destroy(boolet); Destroy(gameObject); } else { BulletPatterns.spawnSplitterBullet(xDir, yDir, boolet, transform.position); BulletPatterns.spawnSplitterBullet(-1 * xDir, yDir, boolet, transform.position); BulletPatterns.spawnSplitterBullet(-1 * xDir, -1 * yDir, boolet, transform.position); BulletPatterns.spawnSplitterBullet(xDir, -1 * yDir, boolet, transform.position); Destroy(gameObject); } } //if(Random.Range(0, 2) == 1) //splitTimer += (Time.deltaTime /* *Random.Range(5, 20)*/); } }
void Update(){ laserTimer += Time.deltaTime; MIDI = input.FrequencyToMIDI(input.Analyze()); //if(!canFire && MIDI != previousMIDI && analysisWait > 0.33f) { // canFire = true; //} healthBar.transform.localScale = new Vector3(1f, (1f / maxHealth) * currentHealth, 1f); if (canFire){ if (Input.GetKey (KeyCode.E)) BulletPatterns.SplitterPattern1 (); int temp = MIDI % 12; previousMIDI = MIDI; switch (temp) { case 0: label.text = "" + MIDI + ": C"; BulletPatterns.TargetedPattern3 (); effectiveWait = min + 0.6f; canFire = false; break; case 1: label.text = "" + MIDI + ": Db/C#"; BulletPatterns.SplitterPattern1(); effectiveWait = min + 1.2f; canFire = false; break; case 2: label.text = "" + MIDI + ": D"; BulletPatterns.SerpentinePattern1(); effectiveWait = min + 1.2f; canFire = false; break; case 3: label.text = "" + MIDI + ": Eb/D#"; BulletPatterns.CirclePattern1 (); effectiveWait = min + 0.6f; canFire = false; break; case 4: label.text = "" + MIDI + ": E"; BulletPatterns.CirclePattern1 (); effectiveWait = min + 0.6f; canFire = false; break; case 5: label.text = "" + MIDI + ": F"; BulletPatterns.SerpentinePattern2 (); effectiveWait = min + 0.6f; canFire = false; break; case 6: label.text = "" + MIDI + ": Gb/F#"; BulletPatterns.CirclePattern2 (); effectiveWait = min + 0.6f; canFire = false; break; case 7: label.text = "" + MIDI + ": G"; if(!charging && !firing && laserTimer > 10f) ChargeLaser (); BulletPatterns.CirclePattern2 (); effectiveWait = min + 0.6f; canFire = false; break; case 8: label.text = "" + MIDI + ": Ab/G#"; BulletPatterns.TargetedPattern1 (); effectiveWait = min + 0.3f; canFire = false; break; case 9: label.text = "" + MIDI + ": A"; BulletPatterns.PulsingBulletPattern2 (); effectiveWait = min + 0.6f; canFire = false; break; case 10: label.text = "" + MIDI + ": Bb/A#"; BulletPatterns.PulsingBulletPattern1 (); effectiveWait = min + 0.3f; canFire = false; break; case 11: label.text = "" + MIDI + ": B"; BulletPatterns.TargetedPattern2 (); effectiveWait = min + 0.3f; canFire = false; break; default: label.text = "Unrecognized"; break; } } else{ analysisWait += Time.deltaTime; if(analysisWait >= effectiveWait){ analysisWait = 0; canFire = true; } } if(charging){ timerChar += Time.deltaTime; if(timerChar > timerMax){ FireLaser(); } } else if(firing){ if(posDir){ transform.Translate(Vector3.right * speed); charger.transform.Translate(Vector3.right * speed); laser.transform.Translate(Vector3.right * speed); if(transform.position.x > consMax){ posDir = false; calc++; } } else{ transform.Translate(Vector3.left * speed); charger.transform.Translate(Vector3.left * speed); laser.transform.Translate(Vector3.left * speed); if(transform.position.x < consMin){ posDir = true; calc++; } } if(calc >= 2 && transform.position.x > -0.1){ EndLaser(); } } }