Beispiel #1
0
    void OnMouseDown()
    {
        if (SpawnManager.Instance.tutorialPanel.eTutorialState == TutorialOrder.E_TUTORIAL_START_IMAGE01 || SpawnManager.Instance.tutorialPanel.eTutorialState == TutorialOrder.E_TUTORIAL_START_IMAGE02)
        {
            return;
        }

        if (Input.GetMouseButtonDown(0) && (E_STATE == ENORMAL_STATE.WAIT || WeaponBackground.activeSelf))
        {
            //onPointerDown 보다 먼저 호출
            //if (!EventSystem.current.IsPointerOverGameObject ()) {

            m_bIsRepair = true;

            //현재 아르바이트가 수리중인지 확인
            ArbaitBatch arbait = SpawnManager.Instance.OverlapArbaitData(gameObject);

            if (arbait != null)
            {
                arbait.ResetWeaponData();
            }

            RepairShowObject.GetWeapon(gameObject, weaponData, m_dComplate, m_fTemperator);

            backGround.sprite = PlayerRepairSpeech;
            //}
        }
    }
    public void RepairObjectInputWeapon()
    {
        m_bIsRepair  = true;
        m_bIsArrival = true;

        RepairShowObject.GetWeapon(gameObject, weaponData, m_fComplate, m_fTemperator);

        SpeechSelect((int)E_SPEECH.E_PLAYER);
    }
Beispiel #3
0
    protected override IEnumerator CharacterAction()
    {
        yield return(new WaitForSeconds(0.1f));

        switch (E_STATE)
        {
        case E_ArbaitState.E_WAIT:

            //대기중 수리 아이템이 있을 경우 수리로 바꿈
            if (AfootOjbect != null && bIsRepair == true)
            {
                CheckCharacterState(E_ArbaitState.E_REPAIR);
            }

            break;

        case E_ArbaitState.E_REPAIR:

            //수리
            fTime += Time.deltaTime;

            if (AfootOjbect == null || bIsRepair == false)
            {
                CheckCharacterState(E_ArbaitState.E_WAIT);
            }

            //수리 시간이 되면 0으로 초기화 하고 수리해줌
            if (fTime >= m_CharacterChangeData.fAttackSpeed)
            {
                fTime = 0.0f;

                Debug.Log(m_CharacterChangeData.fAttackSpeed);

                animator.SetTrigger("bIsRepair");

                //크리티컬 확률
                if (Random.Range(1, 100) <= Mathf.Round(m_CharacterChangeData.fAccuracyRate))
                {
                    m_fComplate += m_CharacterChangeData.fRepairPower * 1.5f * fRepairDownPercent;
                }
                else
                {
                    m_fComplate += m_CharacterChangeData.fRepairPower * fRepairDownPercent;
                }

                //완성 됐을 경우
                if (m_fComplate >= weaponData.fMaxComplate)
                {
                    ScoreManager.ScoreInstance.GoldPlus(100);

                    ComplateWeapon();
                }

                SpawnManager.Instance.CheckComplateWeapon(AfootOjbect, m_fComplate, m_fTemperator);
            }
            break;

        case E_ArbaitState.E_BOSSREPAIR:

            //수리
            fTime += Time.deltaTime;

            //수리 시간이 되면 0으로 초기화 하고 수리해줌
            if (fTime >= m_fRepairTime)
            {
                fTime = 0.0f;

                animator.SetTrigger("bIsRepair");

                RepairShowObject.SetCurCompletion(m_CharacterChangeData.fRepairPower);
            }

            break;
        }
    }
Beispiel #4
0
    protected override IEnumerator CharacterAction()
    {
        yield return(new WaitForSeconds(0.1f));

        if (m_CharacterChangeData.fAttackSpeed < 0.3)
        {
            fMinAttackSpeed = 0.3f;
        }

        else
        {
            fMinAttackSpeed = m_CharacterChangeData.fAttackSpeed;
        }

        switch (E_STATE)
        {
        case E_ArbaitState.E_WAIT:
            SpawnManager.Instance.InsertWeaponArbait(m_CharacterChangeData.index, nBatchIndex);

            //대기중 수리 아이템이 있을 경우 수리로 바꿈
            if (AfootOjbect != null && bIsRepair == true)
            {
                CheckCharacterState(E_ArbaitState.E_REPAIR);
            }

            break;

        case E_ArbaitState.E_REPAIR:

            //수리
            fTime += Time.deltaTime;

            if (AfootOjbect == null || bIsRepair == false)
            {
                CheckCharacterState(E_ArbaitState.E_WAIT);
            }

            if (AfootOjbect == RepairShowObject.AfootObject)
            {
                SpawnManager.Instance.InsertWeaponArbait(m_CharacterChangeData.index, nBatchIndex);
            }

            //수리 시간이 되면 0으로 초기화 하고 수리해줌
            if (fTime >= fMinAttackSpeed)
            {
                fTime           = 0.0f;
                m_dCalComaplete = 0;

                dDodomchitRepair = m_CharacterChangeData.dRepairPower * fDodomchitRepairPercent * 0.01f;

                if (playerData.AccessoryEquipmnet != null)
                {
                    if (playerData.AccessoryEquipmnet.nIndex == (int)E_BOSS_ITEM.DODOM_GLASS)
                    {
                        fBossRepairPercent   = playerData.AccessoryEquipmnet.fBossOptionValue;
                        fBossCriticalPercent = playerData.AccessoryEquipmnet.fBossOptionValue;
                    }
                    else
                    {
                        fBossRepairPercent   = 0;
                        fBossCriticalPercent = 0;
                    }
                }


                //크리티컬 확률
                if (UnityEngine.Random.Range(0, 100) <= Math.Round(m_CharacterChangeData.fCritical + fBossCriticalPercent))
                {
                    animator.SetTrigger("bIsCriticalRepair");
                    m_dCalComaplete += m_CharacterChangeData.dRepairPower * 1.5f + dDodomchitRepair;
                }
                else
                {
                    animator.SetTrigger("bIsNormalRepair");
                    m_dCalComaplete += m_CharacterChangeData.dRepairPower + dDodomchitRepair;
                }

                m_dCalComaplete += m_dCalComaplete * fBossRepairPercent * 0.01f;

                m_dCalComaplete += m_dCalComaplete * playerData.changeStats.fArbaitsPower * 0.01f;

                if (spawnManager.shopCash.isConumeBuff_Staff)
                {
                    m_dCalComaplete *= 2;
                }

                m_dComplate += m_dCalComaplete;

                //완성 됐을 경우
                if (m_dComplate >= weaponData.dMaxComplate)
                {
                    ScoreManager.ScoreInstance.GoldPlus(100);
                    SpawnManager.Instance.questManager.QuestSuccessCheck(QuestType.E_QUESTTYPE_ARBAITSUCCESS, 1);
                    ComplateWeapon();
                }

                SpawnManager.Instance.CheckComplateWeapon(AfootOjbect, m_dComplate, m_fTemperator);
            }
            break;

        case E_ArbaitState.E_BOSSREPAIR:

            //수리
            fTime += Time.deltaTime;

            //수리 시간이 되면 0으로 초기화 하고 수리해줌
            if (fTime >= fMinAttackSpeed)
            {
                fTime           = 0.0f;
                m_dCalComaplete = 0;

                dDodomchitRepair = m_CharacterChangeData.dRepairPower * fDodomchitRepairPercent * 0.01f;

                if (playerData.AccessoryEquipmnet != null)
                {
                    if (playerData.AccessoryEquipmnet.nIndex == (int)E_BOSS_ITEM.DODOM_GLASS)
                    {
                        fBossRepairPercent   = playerData.AccessoryEquipmnet.fBossOptionValue;
                        fBossCriticalPercent = playerData.AccessoryEquipmnet.fBossOptionValue;
                    }
                    else
                    {
                        fBossRepairPercent   = 0;
                        fBossCriticalPercent = 0;
                    }
                }


                //크리티컬 확률
                if (UnityEngine.Random.Range(0, 100) <= Math.Round(m_CharacterChangeData.fCritical + fBossCriticalPercent))
                {
                    animator.SetTrigger("bIsCriticalRepair");
                    m_dCalComaplete += m_CharacterChangeData.dRepairPower * 1.5f + dDodomchitRepair;
                }
                else
                {
                    animator.SetTrigger("bIsNormalRepair");
                    m_dCalComaplete += m_CharacterChangeData.dRepairPower + dDodomchitRepair;
                }

                m_dCalComaplete += m_dCalComaplete * fBossRepairPercent * 0.01f;

                m_dCalComaplete += m_dCalComaplete * playerData.changeStats.fArbaitsPower * 0.01f;

                if (spawnManager.shopCash.isConumeBuff_Staff)
                {
                    m_dCalComaplete *= 2;
                }

                RepairShowObject.SetCurCompletion(m_dCalComaplete);
            }

            break;
        }
    }
    IEnumerator CharacterAction()
    {
        switch (E_STATE)
        {
        case ENORMAL_STATE.WALK:

            m_anim.SetBool("bIsWalk", true);

            //Move 함수를 통해 지정된 위치로 자연스럽게 이동하기 위해 MoveTowards 함수를 사용
            transform.position = Vector3.MoveTowards(transform.position, m_VecMoveDistance, fSpeed * Time.deltaTime);

            //만약 도착했다면
            if ((transform.position.x == m_VecMoveDistance.x))
            {
                //처음일 경우 true로 바꿔주고 수리 할 수 있는 무기를 보여줌
                if (m_bIsFirst == false)
                {
                    m_bIsFirst = true;

                    WeaponBackground.SetActive(true);
                    TimerGameobject.SetActive(true);
                }

                //만약 수리중이라면 도착했다는것으로 간주하고 리턴
                if (m_bIsRepair)
                {
                    m_bIsArrival = true;
                    yield break;
                }

                //만약 현재 수리중인 오브젝트가 없을 경우
                //수리 중 및 도착한것으로 바꾸고 현재 무기를 넣어준다.
                if (RepairShowObject.AfootObject == null)
                {
                    m_bIsRepair  = true;
                    m_bIsArrival = true;

                    RepairShowObject.GetWeapon(gameObject, weaponData, m_fComplate, m_fTemperator);

                    SpeechSelect((int)E_SPEECH.E_PLAYER);
                    yield break;
                }

                //지정된 위치로 도착했다면
                if (m_bIsArrival == false)
                {
                    m_bIsArrival = true;

                    //수리할 수 있는 아르바이트가 있는지 체크한다.
                    m_nCheck = SpawnManager.Instance.InsertArbatiWeaponCheck(weaponData.nGrade);

                    if (m_nCheck != (int)E_CHECK.E_FAIL)
                    {
                        m_bIsRepair = true;

                        SpeechSelect(m_nCheck);

                        SpawnManager.Instance.InsertArbaitWeapon(m_nCheck, gameObject, weaponData, m_fComplate, m_fTemperator);
                    }
                }
            }
            break;

        case ENORMAL_STATE.WAIT:
            m_anim.SetBool("bIsWalk", false);
            break;

        case ENORMAL_STATE.BACK:

            //딱 한번만 호출 되야 하는 부분
            if (!m_bIsFirstBack)
            {
                m_bIsFirstBack = true;

                boxCollider.isTrigger = true;

                m_anim.SetBool("bIsWalk", true);

                //이미지 변경이나 효과 애니메이션 변경등을 진행
                mySprite.flipX = false;

                mySprite.sortingOrder = (int)E_SortingSprite.E_BACK;

                //현재 오브젝트를 보내서 있는지 확인
                RepairShowObject.CheckMyObject(gameObject);

                //현재 캐릭터를 지움
                SpawnManager.Instance.DeleteObject(gameObject);

                if (RepairShowObject.AfootObject == null && m_bIsAllBack == false)
                {
                    SpawnManager.Instance.AutoInputWeaponData();
                }

                //결과값 호출
                Complate(m_fComplate);

                //현재 아르바이트가 수리중인지 확인
                ArbaitBatch arbait = SpawnManager.Instance.OverlapArbaitData(gameObject);

                //수리 중 이였다면 아르바이트 초기화
                if (arbait != null)
                {
                    arbait.ResetWeaponData();
                }

                WeaponBackground.SetActive(false);
                TimerGameobject.SetActive(false);
            }

            transform.position = Vector3.MoveTowards(transform.position, m_VecStartPos, fSpeed * Time.deltaTime);

            if (Vector3.Distance(transform.position, m_VecStartPos) < 0.5f)
            {
                gameObject.SetActive(false);
            }
            break;

        default:
            break;
        }

        yield return(null);
    }