예제 #1
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    public IEnumerator Behave008(float x, float arrivalY, GameObject originalShot, float awayAngle = -90f, bool another = false)
    {
        transform.position = new Vector3(x, StgFrame.topS + BodyRadius);
        SetDestAtTime(x, arrivalY, 1);
        yield return(WaitForStop());

        Angle = Angle2Player;
        FireWay(originalShot, 3, 5, StgFrame.height / 1.8f, Angle);
        yield return(Yielder.WaitForFixedSeconds(0.5f));

        if (another)
        {
            yield return(Yielder.WaitForFixedSeconds(0.5f));
        }

        Acceleration = StgFrame.height / 2f;
        SpeedLimit   = StgFrame.height / 1f;
        Angle        = awayAngle;

        if (another)
        {
            for (var i = 0; i < 3; i++)
            {
                yield return(Yielder.WaitForFixedSeconds(0.3f));

                FireRoundWay(originalShot, 6, 2, 3f, StgFrame.height / 2.8f, Mathfd.RandomAngle());
            }
        }
    }
예제 #2
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    public IEnumerator Behave009(float x, float arrivalY, float sX, float t, GameObject originalShot)
    {
        transform.position = new Vector3(x, StgFrame.topS + BodyRadius);
        SetDestAtTime(this.X, arrivalY, t);

        {
            var curT = 0f;
            while (Speed != 0)
            {
                yield return(null);

                curT  += TimeManager.DeltaTime;
                this.X = x + sX / 2 + sX / 2 * Mathfd.Cos(-180f + 180f * curT / t);
            }
        }

        for (var i = 0; i < 3; i++)
        {
            Fire(originalShot, StgFrame.height / 1.8f, -90f);
            yield return(Yielder.WaitForFixedSeconds(0.25f));
        }

        Acceleration = StgFrame.height / 4;
        SpeedLimit   = StgFrame.height / 1;
    }
예제 #3
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    void Update()
    {
        var deltaTime = TimeManager.DeltaTime;

        Angle += AngleSpeed * deltaTime;
        //rb.velocity = Mathfd.Direction(angle) * speed;
        transform.position += (Vector3)(Mathfd.Direction(Angle) * Speed * deltaTime);

        if (MoveAngleLink)
        {
            BodyAngle = Angle;
        }

        // ★臨時回転処理
        //transform.rotation = Quaternion.Euler(0, 0, bodyAngle + 90);
        //rb.MoveRotation(angle + 90);

        if (Acceleration > 0 && Speed < SpeedLimit)
        {
            Speed = Mathf.Min(Speed + Acceleration * deltaTime, SpeedLimit);
        }
        else if (Acceleration < 0 && Speed > SpeedLimit)
        {
            Speed = Mathf.Max(Speed + Acceleration * deltaTime, SpeedLimit);
        }

        if (AngleAcceleration > 0 && AngleSpeed < AngleSpeedLimit)
        {
            AngleSpeed = Mathf.Min(AngleSpeed + AngleAcceleration * deltaTime, AngleSpeedLimit);
        }
        else if (AngleAcceleration < 0 && AngleSpeed > AngleSpeedLimit)
        {
            AngleSpeed = Mathf.Max(AngleSpeed + AngleAcceleration * deltaTime, AngleSpeedLimit);
        }
    }
예제 #4
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
 public IEnumerator Behave101(GameObject originalShot)
 {
     while (true)
     {
         FireRoundR210(originalShot, 5, Random.Range(0, StgFrame.halfWidth / 3), Mathfd.RandomAngle(), StgFrame.halfWidth / 40, StgFrame.height / 2, Mathfd.RandomAngle(), -StgFrame.height / 1, StgFrame.height / 2.5f);
         yield return(Yielder.WaitForFixedSeconds(0.2f));
     }
 }
예제 #5
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    public StgAct FireR2(GameObject original, float lR, float lAngle, float sR, float speed, float sAngle)
    {
        StgAct clone = StgAct.ApparentInstantiate(original);

        clone.transform.position = transform.position + (Vector3)(lR * Mathfd.Direction(lAngle) + sR * Mathfd.Direction(sAngle));
        clone.Speed = speed;
        clone.Angle = sAngle;

        return(clone);
    }
예제 #6
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    public StgAct FireR(GameObject original, float r, float speed, float angle)
    {
        StgAct clone = StgAct.ApparentInstantiate(original);

        clone.transform.position = transform.position + (Vector3)(r * new Vector2(Mathfd.Cos(angle), Mathfd.Sin(angle)));
        clone.Speed = speed;
        clone.Angle = angle;

        return(clone);
    }
예제 #7
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
 public IEnumerator FireBehave002(GameObject original, int roundN, int lineN, float speed, float lineIntervalT, int roundCount)
 {
     for (var i = 0; i < roundCount; i++)
     {
         float angle = Mathfd.RandomAngle();
         for (var j = 0; j < lineN; j++)
         {
             FireRound(original, roundN, speed, angle);
             yield return(Yielder.WaitForFixedSeconds(lineIntervalT));
         }
     }
 }
예제 #8
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    public IEnumerator Behave007(Vector2 position, float angle, GameObject originalShot)
    {
        transform.position = position;
        Speed      = StgFrame.height / 2f;
        this.Angle = angle;

        while (true)
        {
            yield return(Yielder.WaitForFixedSeconds(0.06f));

            Fire(originalShot, StgFrame.height / 1.5f, angle + 180f + Mathfd.Shake(30f));
        }
    }
예제 #9
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    public IEnumerator Behave001(float x, GameObject originalShot, float awayAngleSpeed)
    {
        transform.position = new Vector3(x, StgFrame.topS + BodyRadius);

        Speed = StgFrame.height / 2.7f;
        Angle = -90f;

        yield return(Yielder.WaitForFixedSeconds(1f));

        FireRound(originalShot, 14, StgFrame.height / 2f, Mathfd.RandomAngle());
        yield return(Yielder.WaitForFixedSeconds(0.4f));

        AngleSpeed = awayAngleSpeed;
    }
예제 #10
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    public IEnumerator Behave201(GameObject originalShot, float lr = 1, bool another = false)
    {
        float lAngle   = Mathfd.RandomAngle();
        var   sAngle   = 0f;
        var   num      = 4;
        var   t        = 1f;
        var   interval = t / 40;

        if (another)
        {
            sAngle = 360 / num / 2;
        }

        for (var i = 0; i < 30; i++)
        {
            FireRoundR2102Player(originalShot, num, StgFrame.halfWidth * 0.45f, lAngle, StgFrame.halfWidth * 0.05f, StgFrame.height / 10, sAngle, StgFrame.height / 0.8f, StgFrame.height / 1.5f);
            yield return(Yielder.WaitForFixedSeconds(interval));

            lAngle += 11 * lr;
            sAngle -= 360 / num / 3 * lr;
        }
    }
예제 #11
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    //public IEnumerator Behave010(float lr,float fromY,float toX,float toY,float t,bool another = false)
    //{
    //    transform.position = new Vector3(StgFrame.centerX + (StgFrame.halfWidth + StgFrame.shakeRange + bodyR) * lr, fromY);
    //    SetDestAtTime(toX, toY, t);
    //    //move
    //    while (speed != 0)
    //    {

    //    }
    //}

    public IEnumerator Behave200(GameObject originalShot)
    {
        var enemy = GetComponent <Enemy>();

        transform.position = new Vector3(StgFrame.centerX, StgFrame.topS + BodyRadius);
        SetDestAtTime(X, StgFrame.PY(0.7f), 1);
        yield return(WaitForStop());

        while (enemy.GetHPP() > 0.6f)
        {
            for (var lr = -1; lr <= 1; lr += 2)
            {
                for (var i = 0; i < 3; i++)
                {
                    FireWay(originalShot, 15, 1, StgFrame.height / 2.5f, Angle2Player);
                    yield return(Yielder.WaitForFixedSeconds(0.46f));
                }
                yield return(Behave201(originalShot, lr, true));

                yield return(Yielder.WaitForFixedSeconds(1));

                FireRound(originalShot, 30, StgFrame.height / 3.2f, Mathfd.RandomAngle());
                yield return(Yielder.WaitForFixedSeconds(0.8f));

                yield return(Behave201(originalShot, lr));

                yield return(Behave201(originalShot, -lr, true));

                yield return(Yielder.WaitForFixedSeconds(1));
            }
        }

        while (enemy.GetHPP() > 0f)
        {
            for (var lr = -1; lr <= 1 && enemy.GetHPP() > 0f; lr += 2)
            {
                for (var lr2 = -1; lr2 <= 1; lr2 += 2)
                {
                    SetDestAtTime(StgFrame.PX(Random.Range(0.4f, 0.7f) * lr * lr2), StgFrame.PY(Random.Range(0.7f, 0.8f)), 2);
                    for (var i = 0; i < 6; i++)
                    {
                        yield return(Yielder.WaitForFixedSeconds(0.2f));

                        FireRoundWay(originalShot, 3, 3, 3, StgFrame.height / 2.2f, Mathfd.RandomAngle());
                    }
                    yield return(WaitForStop());

                    SetDestAtTime(X, StgFrame.PY(-0.8f), 0.7f);
                    yield return(WaitForStop());

                    for (var i = 0; i < 2; i++)
                    {
                        CreateBehave007Actor(originalShot, transform, 90 + Mathfd.Shake(2), originalShot);
                        yield return(Yielder.WaitForFixedSeconds(0.5f));
                    }
                }

                SetDestAtTime(StgFrame.centerX, StgFrame.centerY, 3);
                yield return(WaitForStop());

                Angle = -90;

                {
                    float speed    = StgFrame.height * 0.8f;
                    float interval = 1.4f;
                    for (var i = 0; i < 20; i++)
                    {
                        for (var j = 0; j < 8; j++)
                        {
                            Fire(originalShot, Random.Range(speed, speed * 0.6f), Angle2Player + Mathfd.Shake(4));
                        }
                        yield return(Yielder.WaitForFixedSeconds(interval));

                        speed    = Mathf.Min(StgFrame.height * 1.4f, speed + StgFrame.height * 0.2f);
                        interval = Mathf.Max(0.2f, interval - 0.3f);
                    }
                }
                yield return(Yielder.WaitForFixedSeconds(1f));
            }
        }
    }
예제 #12
0
파일: StgAct.cs 프로젝트: KY00n/Scripts
    /// <summary>
    /// 横から出てきてFireRound
    /// </summary>
    /// <param name="originalEnemy"></param>
    /// <param name="lr"></param>
    /// <param name="y"></param>
    /// <param name="arrivalX"></param>
    /// <param name="originalShot"></param>
    /// <returns></returns>
    public static StgAct CreateBehave004EnemyB(GameObject originalEnemy, float lr, float y, float arrivalX, GameObject originalShot)
    {
        StgAct clone = StgAct.ApparentInstantiate(originalEnemy);

        clone.StartCoroutine(clone.Behave004(lr, y, arrivalX, 0.8f, clone.FireRoundBehave(originalShot, 10, StgFrame.height / 3f, Mathfd.RandomAngle()), 0.5f, StgFrame.height / 3, StgFrame.height / 2));

        return(clone);
    }