예제 #1
0
    //점프 코루틴
    IEnumerator Jump()
    {
        bool goBreak = false;

        if (jumpCount > 2)
        {
            jumpCount = 0;
            goBreak   = true;
        }
        SetIsClimbing(false);

        float jumpTimer = 0;
        float factor;

        float currentHeight = originObj.transform.position.y;

        effects[0].Play();
        sm.playEffect(1);
        while (true)
        {
            if (goBreak || isClimbing)
            {
                break;
            }
            yield return(new WaitForFixedUpdate());

            if (status.Equals(CHARACTERSTATUS.ATTACK))
            {
                break;
            }

            status     = CHARACTERSTATUS.JUMP;
            isGrounded = false;

            factor = Mathf.PI * (jumpTimer / jumpTime) * 0.5f;

            originObj.transform.position = new Vector3(originObj.transform.position.x,
                                                       currentHeight + jumpHeight * Mathf.Sin(factor), originObj.transform.position.z);

            if (jumpTimer >= jumpTime)
            {
                changingGravity = defaultGravity;
                break;
            }
            if (isUpBlocked == true)
            {
                changingGravity = defaultGravity;
                break;
            }
            jumpTimer += Time.deltaTime;
        }

        status = CHARACTERSTATUS.NONE;
    }
예제 #2
0
    // 대쉬 코루틴
    IEnumerator Dash()
    {
        yield return(null);

        status = CHARACTERSTATUS.DASH;
        float DashTimer = 0;
        float factor    = 0;

        //이펙트
        //effects[6].transform.localPosition = new Vector3(-47, 46.2f, 0);
        effects[6].Play();
        effects[7].Play();

        while (true)
        {
            yield return(new WaitForFixedUpdate());

            factor = Mathf.PI * (DashTimer / dashTime);

            if (charDir.Equals(CHARDIRECTION.RIGHT) || charDir.Equals(CHARDIRECTION.LEFT))
            {
                curMoveSpeed = maxMoveSpeed + dashMoveSpeed * Mathf.Sin(factor);
            }
            else
            {
                curMoveSpeed = dashMoveSpeed * Mathf.Sin(factor);
            }

            if (curMoveSpeed > dashMoveSpeed)
            {
                curMoveSpeed = dashMoveSpeed;
            }

            DashTimer += Time.deltaTime;

            if (DashTimer > dashTime)
            {
                if (charDir.Equals(CHARDIRECTION.RIGHT) || charDir.Equals(CHARDIRECTION.LEFT))
                {
                    curMoveSpeed = maxMoveSpeed;
                }
                else
                {
                    curMoveSpeed = 0;
                }
                break;
            }
        }

        status = CHARACTERSTATUS.NONE;
    }
예제 #3
0
 public virtual void Init(string pNickName, cProperty pDamage, float pMaxMoveSpeed, cProperty pMaxHp, cProperty pCurHp)
 {
     nickName          = pNickName;
     damage            = new cProperty(pDamage);
     damage_crit       = new cProperty(pDamage);
     damage_crit.value = (long)(damage.value * 1.5f);
     maxMoveSpeed      = pMaxMoveSpeed;
     curMoveSpeed      = 0;
     maxHp             = new cProperty(pMaxHp);
     curHp             = new cProperty(pCurHp);
     jumpHeight        = 200.0f;
     SetHp();
     dir            = Vector3.right;
     attackBoxPos   = new Vector3[4];
     status         = CHARACTERSTATUS.NONE;
     defaultGravity = 500;
 }
예제 #4
0
 public void SetStatus(CHARACTERSTATUS pCs)
 {
     status = pCs;
 }