protected IEnumerator CoroutineRotation(Vector3 targetPos) { Vector3 previousPos = transform.position; float stopDistance = 0.12f; if (_targetInteractable) { stopDistance = 0.125f; } if (_targetItemPickUp) { stopDistance = 0.05f; } SetAnimation(true); _isTapMoving = true; while (Vector3.Distance(transform.position, targetPos) > stopDistance) { Vector3 midPos = ((transform.position + targetPos) / 2f); Vector3 snapMidPos = midPos.normalized * transform.position.magnitude; ECollision lCollision = CanMoveForward(playerAsset.transform.forward); if (lCollision == ECollision.NONE) { previousPos = transform.position; transform.position += (snapMidPos - transform.position).normalized * Time.deltaTime / 3f; if (previousPos == transform.position) { _isTapMoving = false; break; } _targetRotation = Quaternion.LookRotation(transform.position - previousPos, transform.position); playerAsset.transform.rotation = Quaternion.Lerp(playerAsset.transform.rotation, _targetRotation, Time.deltaTime * 10); transform.position = SnapToPlanet(transform.position); Reoriente(); UpdateCells(true); if (posCallBack != Vector3.zero) { if (Vector3.Distance(transform.position, posCallBack) <= 0.2f) { vCallBack(); posCallBack = Vector3.zero; vCallBack = null; } } } else { _targetItemPickUp = null; _isTapMoving = false; StopMove(); break; } DoEmitter(); yield return(null); } transform.position = SnapToPlanet(transform.position); SetAnimation(false); _isTapMoving = false; if (!_targetInteractable && !_targetItemPickUp) { yield break; } if (_targetItemPickUp) { if (PlayerManager.Instance.playerType != EPlayer.ECO) { CancelMove(); yield break; } _targetItemPickUp.GetComponent <ItemPickup>().PickUp(); StopMove(); yield break; } if (Vector3.Distance(transform.position, targetPos) <= stopDistance) { InteractablePNJ lPnj = _targetInteractable as InteractablePNJ; NPCGender genderComponent = lPnj.GetComponent <NPCGender>(); if (PlayerManager.Instance.playerType == EPlayer.NGO) { if (lPnj && lPnj.CanTalkTo(EPlayer.NGO)) { playerAsset.transform.rotation = Quaternion.LookRotation(lPnj.transform.position - transform.position, transform.up); UIManager.instance.PNJState.Active(false); PointingBubble.instance.Show(true); PointingBubble.instance.SetProperties(lPnj); QuestManager.Instance.NGOTalkTo(lPnj.IDname); lPnj = null; CancelMove(); if (genderComponent) { Events.Instance.Raise(new OnNPCDialogueSFX(genderComponent.gender)); } } else { lPnj = null; CancelMove(); } } else if (lPnj && PlayerManager.Instance.playerType == EPlayer.GOV) { playerAsset.transform.rotation = Quaternion.LookRotation(lPnj.transform.position - transform.position, transform.up); if (lPnj.CanTalkTo(EPlayer.GOV)) { Events.Instance.Raise(new OnPopupBuilding(lPnj.budgetComponent, lPnj)); } lPnj = null; CancelMove(); if (genderComponent) { Events.Instance.Raise(new OnNPCDialogueSFX(genderComponent.gender)); } } else if (lPnj && PlayerManager.Instance.playerType == EPlayer.ECO) { playerAsset.transform.rotation = Quaternion.LookRotation(lPnj.transform.position - transform.position, transform.up); if (lPnj.CanTalkTo(EPlayer.ECO)) { InventoryScreen.Instance.HandleActiveFromNPC(lPnj); QuestManager.Instance.EcoTalkTo(lPnj.budgetComponent.type); } lPnj = null; CancelMove(); if (genderComponent) { Events.Instance.Raise(new OnNPCDialogueSFX(genderComponent.gender)); } } } else { StopMove(); } yield break; }