コード例 #1
0
    // 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++;
        }
    }
コード例 #2
0
    // 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++;
        }
    }