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); }
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; } }
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); }