// 190318 LifeBalance // Launch Missile method private void ShotMissile() { if (missileLaunchStack >= missileSaveStack) { bossPatternState = BossPatternState.Cooldown; missileSideChase = false; missileLaunchStack = 0; missileSideLaunchStack = 0; missileEa = 1; missileRoopEa = 0; variableAngle = 0; return; } shotTimerCheck += Time.deltaTime; if (shotTimerCheck >= shotTimer) { Vector2 spawnPosition = this.transform.position; bool chaseMode = false; chaseSpeed = chaseStaticSpeed; switch (bossPatternName) { case BossPatternName.Normal: { bezierStart = bezierCenter = bezierEnd = this.gameObject.transform.position; bezierEnd.x += Random.Range(-1.0f, 1.0f); bezierEnd.y += Random.Range(0.1f, -0.3f); bezierCenter.x = (bezierEnd.x + bezierStart.x) * 0.5f; bezierCenter.y += Random.Range(0.2f, 0.5f); //ChaseTimer = Random.Range(ChaseTimerMin, ChaseTimerMax); chaseMode = false; targetPos = playerPos; soundSendClip = soundMissileNormal; soundSendSpeaker = SoundManager.Speaker.Center; break; } case BossPatternName.Side: { soundSendClip = soundMissileSide; // missile will going to out of screed both side bezierStart = bezierCenter = bezierEnd = this.gameObject.transform.position; targetPos = bezierEnd; chaseSpeed = missileSideSpeed; // Launch Mode if (missileSideChase == false) { // Launch Right side if (missileSideIsLeft == false) { targetPos.x += screenWidth * 2; } else { targetPos.x -= screenWidth * 2; } chaseMode = true; missileSideIsLeft = !missileSideIsLeft; soundSendSpeaker = SoundManager.Speaker.Center; direction = opCurves.SeekDirection(this.transform.position, targetPos); missileSideLaunchStack++; missileLaunchStack--; // Switch Attack Mode if (missileSideLaunchStack >= missileSaveStack) { missileSideChase = true; missileLaunchStack = 0; missileSideLaunchStack = 0; } } // Attack Mode else { // Attack from right side if (missileSideIsLeft == false) { spawnPosition = playerPos; spawnPosition.x = screenWidth + 0.5f; soundSendSpeaker = SoundManager.Speaker.Right; } // Attack from left side else { spawnPosition = playerPos; spawnPosition.x = -screenWidth - 0.5f; soundSendSpeaker = SoundManager.Speaker.Left; } chaseMode = true; missileSideIsLeft = !missileSideIsLeft; bezierStart = bezierCenter = bezierEnd = spawnPosition; direction = opCurves.SeekDirection(spawnPosition, playerPos); //targetPos = playerPos; } break; } case BossPatternName.BigLaser: { //Debug.Log("BigLaser is not finished, Change Cooldown"); bossPatternState = BossPatternState.Cooldown; return; //break; } case BossPatternName.Round: { missileEa = 10; missileAngle = missileFullAngle / missileEa; missileRoopEa = Random.Range(1, (int)(missileStackMax * 0.5f)); bezierStart = bezierCenter = bezierEnd = spawnPosition; targetPos.y = -(screenHeight * 2); //direction = opCurves.SeekDirectionToPlayer(this.transform.position, playerPos); direction = Vector2.down; chaseMode = true; soundSendClip = soundMissileRound; soundSendSpeaker = SoundManager.Speaker.Center; break; } case BossPatternName.RandomSpawn: { soundSendClip = soundMissileRandom; spawnPosition.x = (Random.Range(-screenWidth, screenWidth)) * 0.5f; spawnPosition.y = (Random.Range(-(screenHeight * 0.25f), screenHeight)); direction = opCurves.SeekDirection(spawnPosition, PublicValueStorage.Instance.GetPlayerPos()); chaseMode = true; break; } default: //Debug.Log("BossShotMissile Module Error!"); break; } // Missile display on Hierarchy Root //Debug.Log("in create"); for (int i = 0; i < missileEa; i++) { if (bossPatternName == BossPatternName.Round) { Quaternion v3Rotation = Quaternion.Euler(0f, 0, (missileAngle * i) + variableAngle); // 회전각 Vector3 v3Direction = Vector3.down; Vector3 v3RotatedDirection = v3Rotation * v3Direction; direction = v3RotatedDirection; } GameObject temp = Instantiate(bossMissile, spawnPosition, Quaternion.Euler(0, 0, 0)); BOSSMissile temp2 = temp.GetComponent <BOSSMissile>(); if (missileEa == 1) { SoundManager.Instance.ShortSpeaker(soundSendSpeaker, soundSendClip); } temp2.SetRoute(direction, bezierStart, bezierCenter, bezierEnd, chaseSpeed * PublicValueStorage.Instance.GetAddSpeedRivisionValue(), chaseMode, this.gameObject.transform.position, (int)bossPatternName); temp2.SetPlayerPosition(playerPos); } shotTimerCheck = 0; missileLaunchStack++; } }
// 190318 LifeBalance // Launch Missile method private void ShotMissile() { if (missileLaunchStack >= missileSaveStack) { //Debug.Log("Shuffle"); bossPatternState = BossPatternState.Cooldown; missileLaunchStack = 0; isLineFallAlive = false; isSRGAlive = false; return; } shotTimerCheck += Time.deltaTime; if (shotTimerCheck >= shotTimer) { Vector2 spawnPosition = this.transform.position; bool chaseMode = false; chaseSpeed = chaseStaticSpeed; //Debug.Log("missile : " + missileLaunchStack); switch (bossPatternName) { case BossPatternName.Vertical: { //bezierStart = bezierCenter = bezierEnd = this.gameObject.transform.position; //ChaseTimer = Random.Range(ChaseTimerMin, ChaseTimerMax); chaseMode = true; targetPos = playerPos; int missileStorage = spawnSpotTop.Count; for (int i = 0; i < missileStorage; i += 2) { //Debug.Log("Pattern num : " + verticalPattern); Vector2 target = spawnSpotTop[i]; target.y -= screenHeight + (term * 3); //target.x += gap * 2; direction = opCurves.SeekDirection(spawnSpotTop[i], target); spawnPosition = spawnSpotTop[i]; GameObject temp = Instantiate(lineFallMissile, spawnPosition, Quaternion.Euler(0, 0, 0)); LineFallMissile temp2 = temp.GetComponent <LineFallMissile>(); temp2.SetRoute(direction, bezierStart, bezierCenter, bezierEnd, chaseSpeed, chaseMode, this.gameObject.transform.position); temp2.SetPlayerPosition(playerPos); } SoundManager.Instance.ShortSpeaker(SoundManager.Speaker.Center, soundSideAndVertical); break; } case BossPatternName.Horizon: { // missile will going to out of screed both side bezierStart = bezierCenter = bezierEnd = this.gameObject.transform.position; targetPos = bezierEnd; chaseMode = true; int missileStorage = spawnSpotLeft.Count; for (int i = 0; i < missileStorage; i += 2) { if (verticalPattern == VerticalPattern.LeftToRight) { Vector2 target = spawnSpotRight[i]; //target.y -= term * 3; direction = opCurves.SeekDirection(spawnSpotLeft[i], target); spawnPosition = spawnSpotLeft[i]; soundSendClip = soundSideAndVertical; soundSpeaker = SoundManager.Speaker.Left; } if (verticalPattern == VerticalPattern.RightToLeft) { Vector2 target = spawnSpotLeft[i]; //target.y -= term * 3; direction = opCurves.SeekDirection(spawnSpotRight[i], target); spawnPosition = spawnSpotRight[i]; soundSendClip = soundSideAndVertical; soundSpeaker = SoundManager.Speaker.Right; } GameObject temp = Instantiate(lineFallMissile, spawnPosition, Quaternion.Euler(0, 0, 0)); LineFallMissile temp2 = temp.GetComponent <LineFallMissile>(); temp2.SetRoute(direction, bezierStart, bezierCenter, bezierEnd, chaseSpeed, chaseMode, this.gameObject.transform.position); temp2.SetPlayerPosition(playerPos); SoundManager.Instance.ShortSpeaker(soundSpeaker, soundSendClip); } break; } case BossPatternName.LineFall: { targetPos = spawnPosition; spawnPosition = playerPos; spawnPosition.y += screenHeight; //Debug.Log("H2 : " + screenHeight); chaseMode = true; direction = opCurves.SeekDirection(spawnPosition, targetPos); lineFallMissilePosition = CreateLineFallMissilePos(); GameObject temp = Instantiate(lineFallMissileSquare, spawnPosition, Quaternion.Euler(0, 0, 0)); LineFallMissileSquare temp2 = temp.GetComponent <LineFallMissileSquare>(); temp2.SetRoute(direction, (int)lineFallMissilePosition, speedLF * rivisionSpeed, this.gameObject.transform.position); temp2.SetPlayerPosition(playerPos); SoundManager.Instance.ShortSpeaker(SoundManager.Speaker.Center, soundLineFall); break; } case BossPatternName.SlowRailGun: { targetPos = spawnPosition; spawnPosition = playerPos; spawnPosition.y += screenHeight * 0.5f; direction = opCurves.SeekDirection(spawnPosition, targetPos); lineFallMissilePosition = CreateLineFallMissilePos(); GameObject temp = Instantiate(lineFallSlowRailGun, spawnPosition, Quaternion.Euler(0, 0, 0)); LineFallMissile temp2 = temp.GetComponent <LineFallMissile>(); //Debug.Log("Speed : " + speedSRG); temp2.SetRoute(direction, Vector2.zero, Vector2.zero, Vector2.zero, speedSRG * rivisionSpeed, true, this.gameObject.transform.position); temp2.SetPlayerPosition(playerPos); SoundManager.Instance.ShortSpeaker(SoundManager.Speaker.Center, soundSRG); break; } default: //Debug.Log("BossShotMissile Module Error!"); break; } shotTimerCheck = 0; missileLaunchStack++; } }