private void Update() { // Charging if (mPlayerMovement.GetState() == PlayerMovement.State.Locomotion) { // Resetting target before checking for new ones if (mChargeTimer == 0) { mTarget = null; } if (!mPlayerMovement.GetImmobile()) { if (mInputManager.GetTriggers().y != 0.0f) { // Charge timer if (mChargeTimer == 0) { // Animation and movement mAnimationController.Animation_IsStartingToShoot(); mPlayerMovement.SetMovementSpeedMax(mMovementSpeedAiming); if (mCurrentSnowball != null) { mCurrentSnowball.transform.GetChild(1).GetComponent <MeshRenderer>().materials[0].SetFloat("_OpacityMask", 0f); mCurrentSnowball.transform.GetChild(1).GetChild(0).GetComponent <MeshRenderer>().materials[0].SetFloat("_OpacityMask", 0f); mCurrentSnowball.transform.GetChild(1).GetChild(1).GetComponent <MeshRenderer>().materials[0].SetFloat("_OpacityMask", 0f); mCurrentSnowball.transform.GetChild(1).GetComponent <MeshRenderer>().materials[0].SetColor("_ReadyColor", Color.blue); mCurrentSnowball.transform.GetChild(1).GetChild(0).GetComponent <MeshRenderer>().materials[0].SetColor("_ReadyColor", Color.blue); mCurrentSnowball.transform.GetChild(1).GetChild(1).GetComponent <MeshRenderer>().materials[0].SetColor("_ReadyColor", Color.blue); } mChargeTimer += Time.deltaTime; } if (mChargeTimer < mChargeMax) { mChargeTimer += Time.deltaTime; if (mCurrentSnowball != null && (mChargeTimer / mChargeDuration) < 1f) { if (!mCurrentSnowball.transform.GetChild(1).gameObject.activeSelf) { mCurrentSnowball.transform.GetChild(1).gameObject.SetActive(true); } mCurrentSnowball.transform.GetChild(1).GetComponent <MeshRenderer>().materials[0].SetFloat("_OpacityMask", (mChargeTimer / mChargeDuration)); mCurrentSnowball.transform.GetChild(1).GetChild(0).GetComponent <MeshRenderer>().materials[0].SetFloat("_OpacityMask", (mChargeTimer / mChargeDuration)); mCurrentSnowball.transform.GetChild(1).GetChild(1).GetComponent <MeshRenderer>().materials[0].SetFloat("_OpacityMask", (mChargeTimer / mChargeDuration)); } if (mCurrentSnowball != null && (mChargeTimer / mChargeDuration) >= 1f && !mCurrentSnowball.transform.GetChild(2).gameObject.activeSelf) { mCurrentSnowball.transform.GetChild(1).GetComponent <MeshRenderer>().materials[0].SetFloat("_ReadyStrenght", 0.5f); mCurrentSnowball.transform.GetChild(2).gameObject.SetActive(true); transform.GetChild(0).GetComponent <AudioAvatar>().Play_snowballThrowChargeReadyCue(); } } // Enabling snowball if (mCurrentSnowball == null) { SpawnSnowball(); } // Enabling reticle if (!mTargetIndicator.activeSelf) { mTargetIndicator.SetActive(true); } // Getting nearby enemies GetNearbyEnemies(mTargetDistanceFar); // Selecting target float ruler = mTargetDistanceFar * mTargetDistanceFar; foreach (KeyValuePair <Transform, Vector3> kvp in mTargetDictionary) { float sqrMag = kvp.Value.sqrMagnitude; if (sqrMag < ruler && Vector3.Dot(kvp.Key.position - transform.position, Camera.main.transform.forward) > 0f) { ruler = sqrMag; mTarget = kvp.Key; } } // Removing target if you walk away after having targeted enemy if ((mTarget.transform.position - transform.position).magnitude >= mTargetDistanceFar) { mTarget = null; } // Target indicator if (mTarget != null) { mTargetIndicator.SetActive(true); mTargetIndicator.transform.position = mTarget.transform.position + mTargetIndicatorOffset; mTargetIndicator.transform.rotation = Quaternion.LookRotation(Camera.main.transform.position - mTargetIndicator.transform.position); } else { mTargetIndicator.SetActive(true); Ray ray = new Ray(transform.position + transform.forward * mTargetDistanceFar + Vector3.up * 6f, Vector3.down); RaycastHit hit; if (Physics.Raycast(ray, out hit, 12f)) { mTargetIndicator.transform.position = hit.point; mTargetIndicator.transform.forward = hit.normal; } } } // Throwing else { if (mCurrentSnowball != null) { mCurrentSnowball.transform.GetChild(1).GetComponent <MeshRenderer>().materials[0].SetColor("_ReadyColor", Color.white); mCurrentSnowball.transform.GetChild(1).GetComponent <MeshRenderer>().materials[0].SetFloat("_ReadyStrenght", 0f); mCurrentSnowball.transform.GetChild(1).GetChild(0).GetComponent <MeshRenderer>().materials[0].SetFloat("_ReadyStrenght", 0f); mCurrentSnowball.transform.GetChild(1).GetChild(1).GetComponent <MeshRenderer>().materials[0].SetFloat("_ReadyStrenght", 0f); } // Resetting reticle if (mTargetIndicator.activeSelf) { mTargetIndicator.SetActive(false); } // Resetting movement speed mPlayerMovement.SetMovementSpeedMax(mMovementSpeedInitial); // If elgible to throw... if (mChargeTimer >= mChargeDuration) { // Debug if (mDebug) { print("BUTTON RELEASE: \t RT"); } //SpawnSnowball(); if (mTarget != null) { mAnimationController.Animation_ThrowSnowball(); mCurrentSnowball.SetTargetPositionAndChangeState(mTarget.position); } else { mAnimationController.Animation_ThrowSnowball(); mCurrentSnowball.SetTargetPositionAndChangeState(transform.position + transform.forward * mTargetDistanceFar); } // Resetting variables mChargeTimer = 0f; mCurrentSnowball = null; // Debug if (mDebug) { print("Aimed Throw!"); mTargetDictionary.Clear(); mTargetDictionaryCopy.Clear(); } } // Else abort charge else if (mChargeTimer > 0f) { mAnimationController.Animation_CancelShooting(); mTargetIndicator.SetActive(false); if (mCurrentSnowball != null) { mCurrentSnowball.transform.GetChild(1).gameObject.SetActive(false); } transform.GetChild(0).GetComponent <AudioAvatar>().Play_snowballNotReady(); mCurrentSnowball.DropSnowball(); mCurrentSnowball = null; mChargeTimer = 0f; mPlayerMovement.SetMovementSpeedInfluence(0f, 0f, false); } } } } // If not in Locomotion state else { // Despawn snowball if (mCurrentSnowball != null) { Destroy(mCurrentSnowball.gameObject); } mChargeTimer = 0f; } // Debugging VisualDebug(); }