using System.Collections; using RootMotion.FinalIK; using UnityEngine; using UnityStandardAssets.Characters.FirstPerson; using UnityStandardAssets.CrossPlatformInput; using UnityStandardAssets.Utility; [RequireComponent(typeof(CharacterController))] [RequireComponent(typeof(AudioSource))] public class PlayerMain : MonoBehaviour { public enum Sex { Male = 0, Female = 1 } public enum CameraTypeView { FirstPerson = 0, ThirdPerson = 1, FishView = 2 } [SerializeField] private MouseLook m_MouseLook; [SerializeField] private float m_JumpSpeed; [SerializeField] private float m_StickToGroundForce; [SerializeField] private float m_GravityMultiplier; [SerializeField] private AudioClip[] m_FootstepSounds; [SerializeField] private AudioClip[] m_FootstepSoundsWater; [SerializeField] private AudioClip[] m_FootstepSoundsBridge; [SerializeField] private AudioClip[] m_FootstepSoundsStone; [SerializeField] private AudioClip m_JumpSound; [SerializeField] private AudioClip m_LandSound; private CharacterController characterController; [HideInInspector] public Animator animator; private AudioSource m_AudioSource; private Vector3 verticalVelocity; private bool m_Jump; [HideInInspector] public bool m_Jumping; private Vector3 mainCameraStartPosition; private float cameraFollowDistance = 2f; private string groundTypeTag = ""; [HideInInspector] public Camera currentCameraView; [HideInInspector] public GameObject underWaterCamera; [HideInInspector] public float m_underWaterlevel; public GameObject waterFXStepfootPrefab; public Camera m_Camera; public Sex sex; public CameraTypeView m_CameraTypeView; public Transform ThirdPersonCameraPoint; public Transform ThirdPersonCameraFishPoint; private float startCameraFieldOfView = 60f; private float zoomTargetCameraFieldOfView = 40f; private bool isZoomCamera; public GameObject currentRightHandObject; public Rod currentRod; public Podbierak podbierak; public Chwytak chwytak; public Transform interactiveObjects; private InteractionControl interactionControl; [HideInInspector] public Animator interactiveObjectsAnimator; public Transform leftHand; public Transform leftHandFishLinePoint; public Vector3 leftHandPodbierakDefinePosition; public Transform rightHandJointPoint; public HeadFlashlight headFlashlight; [HideInInspector] public float RodPullUp; private bool throwLocked; [HideInInspector] public bool isThrowStarted; [HideInInspector] public bool preCastNearFlag; [HideInInspector] public bool preCastFarFlag; private float upDownCameraPos = 0.5f; private float rotRodLeftRight = 0.5f; private bool throwTargeting; [HideInInspector] public bool isThrowStartTargeting; [HideInInspector] public bool isThrowStartFar; private float zoomTime; private Vector3 lastPositionOnTerrainTemp; private Vector3 lastPositionTemp; private void Start() { animator = GetComponent(); interactiveObjectsAnimator = interactiveObjects.GetComponent(); m_AudioSource = GetComponent(); characterController = GetComponent(); m_Camera = Camera.main; currentCameraView = m_Camera; startCameraFieldOfView = m_Camera.fieldOfView; mainCameraStartPosition = m_Camera.transform.localPosition; m_MouseLook.Init(base.transform, m_Camera.transform); m_Jumping = false; GameManager.Instance.SetMouseCurrsor(val: false); InputManager.isHeadFlashLight = false; SetCameraViewType(CameraTypeView.FirstPerson); } private void Update() { if (InputManager.isCastReset) { ResetCast(); } AutomaticCharacterController(); UnderWaterCameraControler(); CheckGround(); LeftRightRod(); PlayerFishAndPullUpRod(); ConnectingLineToHand(); CheckAndCatchFish(); CheckGetFishFromWater(); zoomInOutTargetCamera(isZoomCamera); PlayerThrowRodControl(); if ((bool)headFlashlight) { if (!headFlashlight.gameObject.activeSelf && InputManager.isHeadFlashLight) { headFlashlight.gameObject.SetActive(value: true); } else if (!InputManager.isHeadFlashLight) { headFlashlight.gameObject.SetActive(value: false); } } } private void FixedUpdate() { RotateView(); AutoJointRod(); if (!(currentRod != null)) { return; } if (interactiveObjectsAnimator.GetInteger("ThrowRod") == -1 && currentRod.fishingLine.ropeOut == 0f) { if (ScriptsHandler.Instance.m_InteractionControl.LeftHandInteractionWithReel) { ScriptsHandler.Instance.m_InteractionControl.StopReelInteractionWithLeftHand(); } } else if (interactiveObjectsAnimator.GetInteger("ThrowRod") == -1 && currentRod.fishingLine.ropeOut > 0f && !ScriptsHandler.Instance.m_InteractionControl.LeftHandInteractionWithReel) { ScriptsHandler.Instance.m_InteractionControl.StartReelInteractionWithLeftHand(); } if (!(currentRod != null)) { return; } if (currentRod.fishingLine.ropeOut == 0f) { if (isThrowStarted || throwTargeting) { Singleton.Instance.GetCurrentPlayerData().PlayerRods[currentRod.rodIndex].status = GameManager.PlayerData.CRods.Status.InUse; } else { Singleton.Instance.GetCurrentPlayerData().PlayerRods[currentRod.rodIndex].status = GameManager.PlayerData.CRods.Status.InHand; } } else { Singleton.Instance.GetCurrentPlayerData().PlayerRods[currentRod.rodIndex].status = GameManager.PlayerData.CRods.Status.InUse; } } private void LeftRightRod() { if (!(currentRod == null)) { Vector3 vector = currentRod.fishingLine.currentLineHandler.EndLineRigidbody_1.position - base.transform.position; float num = Vector3.Distance(currentRod.fishingLine.currentLineHandler.EndLineRigidbody_1.position, base.transform.position); float num2 = Mathf.Clamp(Vector3.SignedAngle(vector, base.transform.forward, Vector3.up) / 70f, -1f, 1f); if (num < 5f) { num2 = 0f; } rotRodLeftRight = Mathf.MoveTowards(rotRodLeftRight, num2, Time.deltaTime); if (num2 < 0f) { interactiveObjectsAnimator.Play("RodLeft", 5, Mathf.Abs(rotRodLeftRight)); } if (num2 > 0f) { interactiveObjectsAnimator.Play("RodRight", 5, Mathf.Abs(rotRodLeftRight)); } else { interactiveObjectsAnimator.Play("RodLeft", 5, Mathf.Abs(rotRodLeftRight)); } } } private void ResetRodPulls() { RodPullUp = 0f; rotRodLeftRight = 0f; } private void PlayerFishAndPullUpRod() { if (preCastNearFlag || preCastFarFlag || !(currentRod != null)) { return; } if (currentRod.isTrowing) { interactiveObjectsAnimator.Play("RodLeft", 5, 0f); interactiveObjectsAnimator.Play("RodRight", 5, 0f); interactiveObjectsAnimator.Play("PullUpRod", 3, 0f); return; } float num = 0f; if (currentRod.fishingLine.ropeOut > 2f) { if (InputManager.isPullUpRod) { num = currentRod.currentRodStrength; RodPullUp = Mathf.MoveTowards(RodPullUp, 0.95f, Time.deltaTime * (1.3f - currentRod.currentRodStrength)); throwLocked = true; } else { upDownCameraPos = 0f - (m_Camera.transform.localRotation.x - 0.3f); upDownCameraPos = Mathf.Clamp01(upDownCameraPos * 1.3f); upDownCameraPos = Mathf.Clamp(upDownCameraPos, 0f, 0.95f); RodPullUp = Mathf.MoveTowards(RodPullUp, upDownCameraPos, Time.deltaTime * 1.3f); } LeftRightRod(); } else { RodPullUp = Mathf.MoveTowards(RodPullUp, 0f, Time.deltaTime * 2f); if (RodPullUp == 0f) { throwLocked = false; } } if (RodPullUp != 0f) { interactiveObjectsAnimator.SetFloat("ShakeRod", num * 2f * RodPullUp); } else { interactiveObjectsAnimator.SetFloat("ShakeRod", 0f); } interactiveObjectsAnimator.Play("PullUpRod", 3, RodPullUp); } private void PlayerThrowRodControl() { if (!(currentRod != null) || currentRod.isDamage || throwLocked || currentRod.isTrowing || currentRod.fishingLine.ropeOut > 0f || (bool)currentRod.fishingLine.fishObject || (bool)ScriptsHandler.Instance.m_HudManager.fishCatchPanel || GameManager.Instance.addectiveSceneLoaded != "none" || Singleton.Instance.GetCurrentPlayerData().PlayerSlotsEquip[currentRod.indexOfslot].status != GameManager.PlayerData.CSlots.Status.Completed) { return; } float num = 0f; if (!isThrowStartTargeting && !isThrowStartFar && !isThrowStarted) { if (InputManager.isCastTargeting && !throwTargeting) { throwTargeting = true; interactiveObjectsAnimator.SetInteger("ThrowRod", 0); return; } if (InputManager.isCastTargeting && throwTargeting) { isThrowStarted = false; throwTargeting = false; preCastNearFlag = false; ScriptsHandler.Instance.m_CanvasManager.StopThrowingBar(); interactiveObjectsAnimator.SetInteger("ThrowRod", -1); isZoomCamera = false; currentRod.DestroyThrowtarget(); currentRod.fishingLine.reel.UnlockKablag(val: false); return; } if (throwTargeting) { num = 1f - m_Camera.transform.localRotation.x * 2f; num = Mathf.Clamp(num, 0.2f, 1f); if (!currentRod.SetThrowTarget(10f, num)) { isThrowStartTargeting = false; isZoomCamera = false; throwTargeting = false; preCastNearFlag = false; isThrowStarted = false; ScriptsHandler.Instance.m_CanvasManager.StopThrowingBar(); interactiveObjectsAnimator.SetInteger("ThrowRod", -1); currentRod.fishingLine.reel.UnlockKablag(val: false); GameManager.Instance.ShowMessagePopup(LanguageManager.Instance.GetText("WRONG_ROD_THROW"), ScriptsHandler.Instance.m_Canvas.transform); return; } interactiveObjectsAnimator.ResetTrigger("StopThrowing"); isZoomCamera = true; preCastNearFlag = true; if (preCastNearFlag) { ScriptsHandler.Instance.m_CanvasManager.ShowHideThrowingBar(visable: true, num); if (InputManager.isCastFar && throwTargeting) { interactiveObjectsAnimator.SetInteger("ThrowRod", 1); isThrowStartTargeting = true; throwTargeting = false; preCastNearFlag = false; isThrowStarted = true; currentRod.HideThrowTarget(); ScriptsHandler.Instance.m_CanvasManager.StopThrowingBar(); isZoomCamera = false; } } } } if (isThrowStartTargeting || isThrowStartFar || throwTargeting) { return; } float num2 = 0f; if (InputManager.isCastFar) { interactiveObjectsAnimator.SetInteger("ThrowRod", 2); preCastFarFlag = true; ScriptsHandler.Instance.m_CanvasManager.ShowHideThrowingBar(visable: true, 0f); isThrowStarted = true; } else if (preCastFarFlag) { num2 = ScriptsHandler.Instance.m_CanvasManager.StopThrowingBar(); currentRod.targetThrowPower = num2; Debug.Log("currentRod.targetThrowPower: " + currentRod.targetThrowPower); num = num2; num = Mathf.Clamp(num, 0.01f, 1f); if (currentRod.SetThrowTarget(currentRod.throwRange, num, visable: false)) { interactiveObjectsAnimator.ResetTrigger("StopThrowing"); isThrowStartFar = true; preCastFarFlag = false; interactiveObjectsAnimator.SetInteger("ThrowRod", 3); } else { isThrowStartFar = false; preCastFarFlag = false; isThrowStarted = false; interactiveObjectsAnimator.SetInteger("ThrowRod", -1); currentRod.HideThrowTarget(); ScriptsHandler.Instance.m_CanvasManager.StopThrowingBar(); GameManager.Instance.ShowMessagePopup(LanguageManager.Instance.GetText("WRONG_ROD_THROW"), ScriptsHandler.Instance.m_Canvas.transform); } } } public void ResetCast() { if (!(currentRod == null) && !(currentRod.fishingLine.fishObject != null) && !throwTargeting && !isThrowStarted && (!currentRod.fishingLine.lure || !currentRod.fishingLine.lure.takeFish) && (!currentRod.fishingLine.hook || !currentRod.fishingLine.hook.takeFish)) { currentRod.fishingLine.ropeOut = 0f; SetAnimationToIdleByLineOut(0f); } } private void zoomInOutTargetCamera(bool isIn) { if (isIn && m_Camera.fieldOfView == zoomTargetCameraFieldOfView) { zoomTime = 0f; return; } if (!isIn && m_Camera.fieldOfView == startCameraFieldOfView) { zoomTime = 0f; return; } zoomTime += Time.deltaTime; if (isIn) { m_Camera.fieldOfView = Mathf.Lerp(m_Camera.fieldOfView, zoomTargetCameraFieldOfView, zoomTime); } else { m_Camera.fieldOfView = Mathf.Lerp(m_Camera.fieldOfView, startCameraFieldOfView, zoomTime); } } public void SetAnimationToIdleByLineOut(float lineOut) { if (lineOut == 0f) { if (interactiveObjectsAnimator.GetInteger("ThrowRod") != -1) { interactiveObjectsAnimator.SetInteger("ThrowRod", -1); } interactiveObjectsAnimator.Play("PullUpRod", 3, 0f); interactiveObjectsAnimator.Play("RodRight", 5, 0f); interactiveObjectsAnimator.Play("RodLeft", 5, 0f); currentRod.fishingLine.reel.RebindAnim(); if (ScriptsHandler.Instance.m_InteractionControl.LeftHandInteractionWithReel) { ScriptsHandler.Instance.m_InteractionControl.StopReelInteractionWithLeftHand(); } } } public void ReelindAddactiveAnim(float speed) { interactiveObjectsAnimator.SetFloat("Reeling", speed); } public void CheckGetFishFromWater() { if (currentRod == null || currentRod.fishingLine.fishObject == null || ScriptsHandler.Instance.m_InteractionControl.leftHandPoster == InteractionControl.LeftHandPoster.HandFish || ScriptsHandler.Instance.m_InteractionControl.leftHandPoster == InteractionControl.LeftHandPoster.HandChwytak || (podbierak != null && podbierak.isDone) || currentRod.fishingLine.fishObject.stage == FishMovement.Stage.onPodbierak) { return; } Vector3 position = currentRod.fishingLine.toRodConnector.position; Vector3 position2 = currentRod.fishingLine.fishObject.transform.position; if (Vector3.Distance(new Vector3(position.x, 0f, position.z), new Vector3(position2.x, 0f, position2.z)) < 3.5f && currentRod.fishingLine.ropeOut < 3f) { currentRod.fishingLine.ropeOut = 0f; currentRod.fishingLine.fishObject.stage = FishMovement.Stage.getFish; if (ScriptsHandler.Instance.m_InteractionControl.LeftHandInteractionWithReel) { ScriptsHandler.Instance.m_InteractionControl.StopReelInteractionWithLeftHand(); } currentRod.fishingLine.handFishHandPoint.GetComponent().isKinematic = true; interactiveObjectsAnimator.SetInteger("ThrowRod", -3); if ((bool)currentRod.fishingLine.lure) { currentRod.fishingLine.lure.rigidbody.isKinematic = false; } else if ((bool)currentRod.fishingLine.hook) { currentRod.fishingLine.hook.rigidbody.isKinematic = false; } } if (!currentRod.fishingLine.handFishHandPoint.GetComponent().isKinematic) { return; } if (currentRod.fishingLine.fishObject.fishStats.current_weight < 1.5f) { currentRod.fishingLine.handFishHandPoint.transform.position = Vector3.MoveTowards(currentRod.fishingLine.handFishHandPoint.transform.position, ScriptsHandler.Instance.m_InteractionControl.LeftHandFish.transform.position, Time.deltaTime * 3f); if (currentRod.fishingLine.handFishHandPoint.transform.position == ScriptsHandler.Instance.m_InteractionControl.LeftHandFish.transform.position) { GetFishToHand(); } return; } if (!ScriptsHandler.Instance.m_InteractionControl.LeftHandInteractionWithReel) { ScriptsHandler.Instance.m_InteractionControl.leftHandPoster = InteractionControl.LeftHandPoster.HandPodbierak; } if (ScriptsHandler.Instance.m_InteractionControl.LeftHandInteractionWithPodbierak) { currentRod.fishingLine.handFishHandPoint.transform.position = Vector3.MoveTowards(currentRod.fishingLine.handFishHandPoint.transform.position, podbierak.fishPoint.transform.position, Time.deltaTime * 2f); if (currentRod.fishingLine.handFishHandPoint.transform.position == podbierak.fishPoint.transform.position && currentRod.fishingLine.fishObject.transform.parent != podbierak.fishPoint.transform) { currentRod.fishingLine.fishObject.transform.SetParent(podbierak.fishPoint.transform); interactiveObjectsAnimator.SetBool("isGetPodbierak", value: true); podbierak.animator.SetBool("GetPodbierak", value: true); currentRod.fishingLine.fishObject.stage = FishMovement.Stage.onPodbierak; currentRod.fishingLine.fishObject.GetComponent().isKinematic = true; currentRod.fishingLine.handFishHandPoint.GetComponent().isKinematic = false; podbierak.fish = currentRod.fishingLine.fishObject.transform; Debug.Log("Fish in podbierak"); } } } public void DestroyCurrentFish() { if (podbierak != null) { ScriptsHandler.Instance.m_InteractionControl.StopPodbierakInteractionWithLeftHand(); Object.Destroy(podbierak.gameObject); } if ((bool)chwytak) { CreateChwytak(destroy: true); } if (interactiveObjectsAnimator.GetInteger("ThrowRod") != -1) { currentRod.fishingLine.ropeOut = 0f; interactiveObjectsAnimator.SetInteger("ThrowRod", -1); } interactiveObjectsAnimator.SetBool("isFishHand", value: false); interactiveObjectsAnimator.SetBool("isFish", value: false); interactiveObjectsAnimator.Play("PullUpRod", 3, 0f); interactiveObjectsAnimator.Play("RodRight", 5, 0f); interactiveObjectsAnimator.Play("RodLeft", 5, 0f); currentRod.fishingLine.handFishHandPoint.GetComponent().isKinematic = false; currentRod.fishingLine.reel.RebindAnim(); ScriptsHandler.Instance.m_InteractionControl.leftHandPoster = InteractionControl.LeftHandPoster.None; Object.Destroy(currentRod.fishingLine.fishObject.gameObject); if ((bool)currentRod.fishingLine.lineHookHandHelper) { Object.Destroy(currentRod.fishingLine.lineHookHandHelper.gameObject); currentRod.fishingLine.lineHookHandHelper = null; } currentRod.fishingLine.fishObject = null; } public void ResetPodbierakFishing() { ScriptsHandler.Instance.m_InteractionControl.leftHandPoster = InteractionControl.LeftHandPoster.None; interactiveObjectsAnimator.SetBool("isFishHand", value: false); interactiveObjectsAnimator.SetBool("isFish", value: false); interactiveObjectsAnimator.Play("PullUpRod", 3, 0f); interactiveObjectsAnimator.Play("RodRight", 5, 0f); interactiveObjectsAnimator.Play("RodLeft", 5, 0f); currentRod.fishingLine.handFishHandPoint.GetComponent().isKinematic = false; currentRod.fishingLine.reel.RebindAnim(); currentRod.fishingLine.ropeOut = 0f; } public void CutLine() { Debug.Log("Cut line"); if (currentRod.fishingLine.fishObject != null) { if (currentRod.fishingLine.fishObject.stage == FishMovement.Stage.getFish || currentRod.fishingLine.fishObject.stage == FishMovement.Stage.onPodbierak) { return; } currentRod.fishingLine.fishObject.unHook(); currentRod.fishingLine.fishObject = null; interactiveObjectsAnimator.SetBool("isFish", value: false); currentRod.fishingLine.ropeOut = 0f; } if (InputManager.isUnderwaterCamera) { DestroyUnderwaterCamera(); } ScriptsHandler.Instance.m_InventoryManager.CutItems(); StartCoroutine(DoneCutLineAndMessageBox()); } public void RodDamage() { CutFish(); StartCoroutine(DoneDamageRodAndMessageBox()); } public void CutFish() { if (currentRod.fishingLine.fishObject != null && currentRod.fishingLine.fishObject.stage != FishMovement.Stage.getFish && currentRod.fishingLine.fishObject.stage != FishMovement.Stage.onPodbierak) { currentRod.fishingLine.fishObject.unHook(); currentRod.fishingLine.fishObject = null; interactiveObjectsAnimator.SetBool("isFish", value: false); currentRod.fishingLine.ropeOut = 0f; if (InputManager.isUnderwaterCamera) { DestroyUnderwaterCamera(); } GameManager.Instance.ShowMessagePopup(LanguageManager.Instance.GetText("CUT_FISH"), ScriptsHandler.Instance.m_Canvas.transform); } } private IEnumerator DoneCutLineAndMessageBox() { SetAnimationToIdleByLineOut(0f); yield return new WaitForSeconds(1f); ScriptsHandler.Instance.m_InventoryManager.HideRod(); yield return new WaitForSeconds(1f); GameManager.Instance.CreateMessageBox("CUT_LINE", ScriptsHandler.Instance.m_Canvas.transform, 2); } private IEnumerator DoneDamageRodAndMessageBox() { SetAnimationToIdleByLineOut(0f); yield return new WaitForSeconds(1f); ScriptsHandler.Instance.m_InventoryManager.HideRod(); yield return new WaitForSeconds(1f); GameManager.Instance.CreateMessageBox("ROD_DAMAGE_QUESTION", ScriptsHandler.Instance.m_Canvas.transform, 2); } public void GetFishToHand() { if (ScriptsHandler.Instance.m_InteractionControl.leftHandPoster != InteractionControl.LeftHandPoster.HandFish) { FishMovement fishObject = currentRod.fishingLine.fishObject; ScriptsHandler.Instance.m_InteractionControl.leftHandPoster = InteractionControl.LeftHandPoster.HandFish; interactiveObjectsAnimator.SetBool("isFishHand", value: true); fishObject.GetComponent().fishAnimator.SetBool("outhook", value: true); fishObject.GetComponent().fishAnimator.SetFloat("speed", 0f); fishObject.GetComponent().fishAnimator.SetBool("jump", value: false); currentRod.fishingLine.ropeOut = 1.5f; currentRod.fishingLine.AddLineHelperHand(); } } public void GetFishToChwytak() { if (ScriptsHandler.Instance.m_InteractionControl.leftHandPoster != InteractionControl.LeftHandPoster.HandChwytak) { if (podbierak != null) { currentRod.fishingLine.fishObject.transform.SetParent(null); ScriptsHandler.Instance.m_InteractionControl.StopPodbierakInteractionWithLeftHand(); Object.Destroy(podbierak.gameObject); ResetPodbierakFishing(); } FishMovement fishObject = currentRod.fishingLine.fishObject; ScriptsHandler.Instance.m_InteractionControl.leftHandPoster = InteractionControl.LeftHandPoster.HandChwytak; interactiveObjectsAnimator.SetBool("isFishHand", value: false); fishObject.GetComponent().fishAnimator.SetBool("outhook", value: true); fishObject.GetComponent().fishAnimator.SetFloat("speed", 0f); fishObject.GetComponent().fishAnimator.SetBool("jump", value: false); } } public void CreatePodbierak(bool destroy = false) { if (podbierak == null) { GameObject gameObject = Object.Instantiate(ScriptsHandler.Instance.PodbierakPrefab, leftHand.transform.position, Quaternion.identity); podbierak = gameObject.GetComponent(); gameObject.transform.SetParent(leftHand); gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localEulerAngles = Vector3.zero; interactiveObjectsAnimator.SetBool("isPutPodbierak", value: true); } else if (destroy) { ScriptsHandler.Instance.m_InteractionControl.StopPodbierakInteractionWithLeftHand(); Object.Destroy(podbierak.gameObject); } } public void CreateChwytak(bool destroy = false) { if (chwytak == null) { GameObject gameObject = Object.Instantiate(ScriptsHandler.Instance.ChwytakPrefab, leftHand.transform.position, Quaternion.identity); chwytak = gameObject.GetComponent(); chwytak.Setup(currentRod.fishingLine.fishObject.transform, leftHand); interactiveObjectsAnimator.SetBool("isFishChwytak", value: true); } else if (destroy) { ScriptsHandler.Instance.m_InteractionControl.StopChwytakInteractionWithLeftHand(); interactiveObjectsAnimator.SetBool("isFishChwytak", value: false); Object.Destroy(chwytak.gameObject); } } private void ConnectingLineToHand() { if (interactiveObjectsAnimator.GetBool("isFishHand")) { currentRod.fishingLine.handFishHandPoint.position = leftHandFishLinePoint.position; currentRod.fishingLine.handFishHandPoint.transform.localEulerAngles = Vector3.zero; } } private void CheckAndCatchFish() { if (currentRod == null || !InputManager.isCatch) { return; } Hook hook = currentRod.fishingLine.hook; Lure lure = currentRod.fishingLine.lure; FishMovement fishMovement = null; if (hook != null) { if (hook.takeFish != null) { fishMovement = hook.takeFish.GetComponent(); } } else if (lure != null && lure.takeFish != null) { fishMovement = lure.takeFish.GetComponent(); } if ((bool)fishMovement && fishMovement.stage == FishMovement.Stage.freeMove && currentRod.fishingLine.fishObject == null) { interactiveObjectsAnimator.SetTrigger("isTake"); fishMovement.SetIsCatch(); currentRod.fishingLine.fishObject = fishMovement; interactiveObjectsAnimator.SetBool("isFish", value: true); } } private void SetCameraViewTypeByInput() { if (InputManager.isCameraChange) { if (m_CameraTypeView == CameraTypeView.FishView) { SetCameraViewType(CameraTypeView.FirstPerson); } else if ((bool)ScriptsHandler.Instance.m_HudManager.fishCatchPanel && m_CameraTypeView == CameraTypeView.FirstPerson) { SetCameraViewType(CameraTypeView.FishView); } } } public void SetCameraViewType(CameraTypeView cameraTypeView) { m_CameraTypeView = cameraTypeView; upDownCameraPos = 0f; m_Camera.transform.localRotation = Quaternion.identity; switch (cameraTypeView) { case CameraTypeView.FirstPerson: m_Camera.GetComponent().enabled = false; m_Camera.transform.localPosition = mainCameraStartPosition; break; case CameraTypeView.ThirdPerson: m_Camera.GetComponent().enabled = true; m_Camera.GetComponent().target = ThirdPersonCameraPoint; m_Camera.GetComponent().target.transform.localEulerAngles = new Vector3(0f, 0f, 0f); m_Camera.GetComponent().viewMode = SmoothFollow.ViewMode.ThirdPerson; break; case CameraTypeView.FishView: m_Camera.GetComponent().enabled = true; m_Camera.GetComponent().target = ThirdPersonCameraFishPoint; m_Camera.GetComponent().viewMode = SmoothFollow.ViewMode.FishView; break; } } private void AutoJointRod() { if (rightHandJointPoint == null) { return; } if (currentRightHandObject != null) { if (!(currentRod != null) && currentRightHandObject.GetComponent().connectedBody == null) { rightHandJointPoint.gameObject.SetActive(value: true); currentRightHandObject.transform.SetParent(base.transform); currentRightHandObject.transform.position = rightHandJointPoint.position; currentRightHandObject.transform.rotation = rightHandJointPoint.rotation; currentRightHandObject.GetComponent().connectedBody = rightHandJointPoint.GetComponent(); rightHandJointPoint.parent.transform.GetComponent().poseRoot = currentRightHandObject.GetComponent().rHandPoser; rightHandJointPoint.parent.transform.GetComponent().weight = 1f; currentRightHandObject.GetComponent().isKinematic = false; currentRod = currentRightHandObject.GetComponent(); ScriptsHandler.Instance.m_InventoryManager.SetIndexSlotOfRod(currentRod.indexOfslot); if (currentRod.fishingLine.ropeOut > 0f) { ScriptsHandler.Instance.m_InteractionControl.StartReelInteractionWithLeftHand(); interactiveObjectsAnimator.SetInteger("ThrowRod", -2); } } } else if (!(currentRod == null)) { if ((bool)rightHandJointPoint.parent.transform.GetComponent().poseRoot) { rightHandJointPoint.parent.transform.GetComponent().poseRoot = null; } if (ScriptsHandler.Instance.m_InteractionControl.LeftHandInteractionWithReel) { ScriptsHandler.Instance.m_InteractionControl.StopReelInteractionWithLeftHand(); } rightHandJointPoint.gameObject.SetActive(value: false); currentRod = null; ScriptsHandler.Instance.m_InventoryManager.SetIndexSlotOfRod(-1); interactiveObjectsAnimator.SetInteger("ThrowRod", -1); } } private void CheckGround() { m_underWaterlevel = base.transform.position.y - ScriptsHandler.Instance.WaterObject.position.y; if (m_underWaterlevel > 0f) { m_underWaterlevel = 0f; } } private void AutomaticCharacterController() { if ((bool)underWaterCamera) { return; } if ((bool)ScriptsHandler.Instance.m_HudManager.fishCatchPanel) { animator.SetFloat("PlayerWalk", 0f); animator.SetFloat("PlayerStrafe", 0f); } else { if (m_CameraTypeView == CameraTypeView.FishView) { return; } bool flag = false; bool flag2 = false; bool flag3 = false; float num = 1f; float num2 = CrossPlatformInputManager.GetAxis("Horizontal"); float num3 = CrossPlatformInputManager.GetAxis("Vertical"); if (isThrowStarted) { num2 = 0f; num3 = 0f; } if (characterController.isGrounded) { verticalVelocity.y = 0f - m_StickToGroundForce; if (!flag3) { lastPositionOnTerrainTemp = base.transform.position; } } else { verticalVelocity = Physics.gravity * m_GravityMultiplier * Time.fixedDeltaTime; characterController.Move(verticalVelocity * Time.fixedDeltaTime); } flag3 = ((base.transform.position.y <= ScriptsHandler.Instance.WaterObject.position.y) ? true : false); if (base.transform.position.y <= ScriptsHandler.Instance.WaterObject.position.y - 1f) { characterController.enabled = false; if (CrossPlatformInputManager.GetButtonDown("Jump")) { base.transform.position = lastPositionOnTerrainTemp; } else { base.transform.position = Vector3.MoveTowards(base.transform.position, lastPositionTemp, Time.deltaTime * 0.01f); } flag2 = true; num3 = 0f; num2 = 0f; } else { flag2 = false; lastPositionTemp = base.transform.position; characterController.enabled = true; } animator.SetFloat("PlayerWalk", num3); animator.SetFloat("PlayerStrafe", num2); AnimatorClipInfo[] currentAnimatorClipInfo = animator.GetCurrentAnimatorClipInfo(0); num = ((!InputManager.isRunning || (bool)currentRod) ? 1f : 2f); if (CrossPlatformInputManager.GetButtonDown("Jump") && !flag3) { animator.SetTrigger("Jump"); } animator.SetFloat("WalkSpeed", num); if ((currentAnimatorClipInfo[0].clip.name == "WalkFwdCrossRightLoop" || currentAnimatorClipInfo[0].clip.name == "RunFwdLoop") && num2 > 0f) { characterController.Move((base.transform.forward + base.transform.right) * Time.deltaTime * num * 1.5f); flag = true; } if (m_Jumping && num2 > 0f) { characterController.Move(base.transform.forward * Time.deltaTime * num); flag = false; } if ((currentAnimatorClipInfo[0].clip.name == "WalkFwdCrossLeftLoop" || currentAnimatorClipInfo[0].clip.name == "RunFwdLoop") && num2 < 0f) { characterController.Move((base.transform.forward - base.transform.right) * Time.deltaTime * num * 1.5f); flag = true; } if (currentAnimatorClipInfo[0].clip.name == "WalkBwdCrossRightLoop" && num2 > 0f) { characterController.Move((-base.transform.forward + base.transform.right) * Time.deltaTime); flag = true; } if (currentAnimatorClipInfo[0].clip.name == "WalkBwdCrossLeftLoop" && num2 < 0f) { characterController.Move((-base.transform.forward - base.transform.right) * Time.deltaTime); flag = true; } if ((num3 == 0f && num2 == 0f) || flag || flag2) { if (m_Jumping) { animator.applyRootMotion = true; } else { animator.applyRootMotion = false; } } else { animator.applyRootMotion = true; } } } public void SpawnPlayer(Transform newPosition) { Debug.Log("Spawn to: " + newPosition.position.ToString()); base.transform.position = newPosition.position; lastPositionTemp = newPosition.position; lastPositionOnTerrainTemp = newPosition.position; base.transform.localEulerAngles = newPosition.localEulerAngles; } public void SetMouseCursor(bool visable) { m_MouseLook.SetCursorLock(visable); m_MouseLook.UpdateCursorLock(); } private void RotateView() { if (!underWaterCamera) { if ((bool)ScriptsHandler.Instance.m_HudManager.fishCatchPanel) { animator.SetFloat("PlayerRotate", 0f); } else if (m_CameraTypeView != CameraTypeView.FishView) { m_MouseLook.LookRotation(base.transform, m_Camera.transform); animator.SetFloat("PlayerRotate", m_MouseLook.RotYvalue); } } } public void setmJump() { if (!ScriptsHandler.Instance.m_HudManager.fishCatchPanel) { m_Jumping = true; } } public void unsetmJump() { m_Jumping = false; PlayFootStepAudio(); } public void PlayFootStepAudio() { if (m_underWaterlevel == 0f) { if (groundTypeTag == "Bridge") { int num = Random.Range(1, m_FootstepSoundsBridge.Length); m_AudioSource.clip = m_FootstepSoundsBridge[num]; m_AudioSource.PlayOneShot(m_AudioSource.clip, 0.3f); m_FootstepSoundsBridge[num] = m_FootstepSoundsBridge[0]; m_FootstepSoundsBridge[0] = m_AudioSource.clip; } else if (groundTypeTag == "Stone") { int num2 = Random.Range(1, m_FootstepSoundsStone.Length); m_AudioSource.clip = m_FootstepSoundsStone[num2]; m_AudioSource.PlayOneShot(m_AudioSource.clip, 0.3f); m_FootstepSoundsStone[num2] = m_FootstepSoundsStone[0]; m_FootstepSoundsStone[0] = m_AudioSource.clip; } else { int num3 = Random.Range(1, m_FootstepSounds.Length); m_AudioSource.clip = m_FootstepSounds[num3]; m_AudioSource.PlayOneShot(m_AudioSource.clip, 0.3f); m_FootstepSounds[num3] = m_FootstepSounds[0]; m_FootstepSounds[0] = m_AudioSource.clip; } } else { int num4 = Random.Range(1, m_FootstepSoundsWater.Length); m_AudioSource.clip = m_FootstepSoundsWater[num4]; m_AudioSource.PlayOneShot(m_AudioSource.clip, 0.3f); m_FootstepSoundsWater[num4] = m_FootstepSoundsWater[0]; m_FootstepSoundsWater[0] = m_AudioSource.clip; Debug.Log("m_underWaterlevel: " + m_underWaterlevel); PlayStepWaterEffect(); } } private void PlayStepWaterEffect() { GameObject obj = Object.Instantiate(waterFXStepfootPrefab); obj.transform.position = new Vector3(base.transform.position.x, ScriptsHandler.Instance.WaterObject.transform.position.y + 0.05f, base.transform.position.z); obj.transform.localEulerAngles = base.transform.localEulerAngles; } private void UnderWaterCameraControler() { if (currentRod == null || currentRod.isTrowing || (bool)ScriptsHandler.Instance.m_HudManager.fishCatchPanel || Singleton.Instance.GetCurrentPlayerData().GameMode == GameManager.PlayerData.CPlayer.GameMode.Realistic) { return; } if (currentRod.fishingLine.ropeOut < 5f) { if (underWaterCamera != null) { DestroyUnderwaterCamera(); } } else if (InputManager.isUnderwaterCamera) { if (underWaterCamera == null) { underWaterCamera = Object.Instantiate(ScriptsHandler.Instance.underWaterCameraPrefab, ScriptsHandler.Instance.transform); underWaterCamera.GetComponent().target = currentRod.fishingLine.lastPointDisplacement.transform; Camera camera = (currentCameraView = underWaterCamera.GetComponentInChildren()); camera.rect = new Rect(0f, 0f, 1f, 1f); m_Camera.gameObject.SetActive(value: false); camera.GetComponentInChildren().enabled = true; } } else if (underWaterCamera != null) { DestroyUnderwaterCamera(); } } private void DestroyUnderwaterCamera() { m_Camera.gameObject.SetActive(value: true); currentCameraView = m_Camera; Object.Destroy(underWaterCamera.gameObject); InputManager.isUnderwaterCamera = false; } private void OnControllerColliderHit(ControllerColliderHit hit) { groundTypeTag = hit.transform.tag; } }