public void HeavyPass(iTarget target, float momentum) { //Conditions MonoBehaviour targetScript = target as MonoBehaviour; if (targetScript == this) { Debug.LogWarning("Can't pass ball to yourself"); return; } if (possessedBall == null) { return; } if (targetScript.GetType() == typeof(PlayerController)) { possessedBall.triggerEnabled = true; } //Function GameManager.i.comboManager.AddCoup(Coup.HeavyPass); float speedCoef = heavyPassSpeedCoef; float damageCoef = heavyPassDamageCoef; if (GameManager.i.comboManager.hyperHeavyAttackReady == true) { //PLAYER DID A COMBO, so his attack is boosted speedCoef *= GameManager.i.comboManager.comboSpeedModifier; damageCoef *= GameManager.i.comboManager.comboDamageModifier; } StartCoroutine(PassBall_C(possessedBall, target, momentum, speedCoef)); possessedBall.damageModifier = damageCoef; DropBall(); }
public void RemoveTargetFromList(iTarget target) { allTargetableObjects.Remove(target); targetableAllies.Remove(target); targetableEnemies.Remove(target); targetableProps.Remove(target); }
private iTarget GetNearestEnemy(float radius) { iTarget closestTarget = null; //Search for the target foreach (iTarget target in GameManager.i.levelManager.GetTargetableEnemies()) { float range = Vector3.Distance(target.targetedTransform.position, this.transform.position); if (range < radius) { closestTarget = target; radius = range; } } return(closestTarget); }
IEnumerator PassBall_C(Ball ball, iTarget target, float momentum, float speedCoef) { target.OnTargetedBySomeone(self.transform); doingHandoff = true; Vector3 startPosition = ball.transform.position; Vector3 endPosition = target.targetedTransform.position; handoffTarget = target.targetedTransform; GameManager.i.soundManager.PlayRandomSound(GameManager.i.soundManager.whoosh, true); //Rotate players towards target and play particles self.rotation = Quaternion.LookRotation(handoffTarget.position - self.position); for (int i = 0; i < handoffEffects.Length; i++) { handoffEffects[i].Play(); } float passSpeed = GameManager.i.ballManager.GetPassSpeed(); float passTime = Vector3.Distance(startPosition, endPosition) / (passSpeed * speedCoef); AnimationCurve speedCurve = GameManager.i.ballManager.passMovementCurve; AnimationCurve angleCurve = GameManager.i.ballManager.passAngleCurve; ball.direction = endPosition - startPosition; for (float i = 0; i < passTime; i += Time.deltaTime) { yield return(new WaitForEndOfFrame()); //Apply speed curve ball.transform.position = Vector3.Lerp(startPosition, target.targetedTransform.position, speedCurve.Evaluate(i / passTime)); //Apply angle curve ball.transform.position = new Vector3( ball.transform.position.x, ball.transform.position.y + (angleCurve.Evaluate(i / passTime) * GameManager.i.ballManager.GetPassHeight()), ball.transform.position.z ); } ball.transform.position = target.targetedTransform.position; ball.triggerEnabled = false; target.OnBallReceived(ball); ball.direction = Vector3.zero; CancelHandoff(); yield return(null); }
//Returns the nearest object to the mouse position public iTarget GetTargetedObject(List <iTarget> potentialTargets) { if (HasGamepad() && GetMouseDirection().magnitude == 0) { return(null); } Vector2 positionVec2 = new Vector2(self.position.x, self.position.z); float mouseAngle = GetAngle(positionVec2, positionVec2 + GetMouseDirection()); List <iTarget> acceptedTargets = new List <iTarget>(); //Get the targets in the correct direction foreach (iTarget target in potentialTargets) { Vector2 targetPositionVec2 = new Vector2(target.targetedTransform.position.x, target.targetedTransform.position.z); float targetAngle = GetAngle(positionVec2, targetPositionVec2); float angleDifference = Mathf.Abs(Mathf.DeltaAngle(targetAngle, mouseAngle)); if (angleDifference <= targetAngleTreshold) { acceptedTargets.Add(target); } } //Get the nearest target between all the correct targets if (acceptedTargets.Count > 0) { iTarget nearestTarget = acceptedTargets[0]; float nearestDistance = Vector3.Distance(nearestTarget.targetedTransform.position, self.transform.position); foreach (iTarget acceptedTarget in acceptedTargets) { if (Vector3.Distance(acceptedTarget.targetedTransform.position, self.transform.position) < nearestDistance) { nearestTarget = acceptedTarget; nearestDistance = Vector3.Distance(acceptedTarget.targetedTransform.position, self.transform.position); } } return(nearestTarget); } else { return(null); } }
//Pass the ball to a specific player public void LightPass(iTarget target, float momentum) { //Conditions MonoBehaviour targetScript = target as MonoBehaviour; if (targetScript == this) { Debug.LogWarning("Can't pass ball to yourself"); return; } if (possessedBall == null) { return; } if (targetScript.GetType() == typeof(PlayerController)) { possessedBall.triggerEnabled = true; } //Function GameManager.i.comboManager.AddCoup(Coup.LightPass); StartCoroutine(PassBall_C(possessedBall, target, momentum, 1)); possessedBall.damageModifier = 1; DropBall(); }
void GeneralInput() { if (isJumping) { return; } if (Input.GetButtonDown("Dunk_" + inputIndex.ToString()) && dunkJumpCoroutine == null) { StartDunk(); } if (Input.GetButtonDown("Jump_" + inputIndex.ToString())) { StartCoroutine(self.GetComponent <PlayerJump>().Jump()); } // PASSE DU JOUEUR if (possessedBall != null) { if (Input.GetAxis("Pass_" + inputIndex.ToString()) != 0) { isTriggerPressed = true; if (chargingPassFX == null) { chargingPassFX = Instantiate(GameManager.i.library.chargingPassFX, possessedBall.transform, false); chargingPassFX.transform.localPosition = Vector3.zero; } passCharge += Time.deltaTime; //FX pour indiquer le joueur a chargé assez la balle pour faire une heavy pass if (passCharge >= heavyPassTime && heavyPassChargedFX == null) { Destroy(chargingPassFX); heavyPassChargedFX = Instantiate(GameManager.i.library.heavyChargeReadyFX, possessedBall.transform, false); heavyPassChargedFX.transform.localPosition = Vector3.zero; } if (!doingHandoff) { speedModificator = passSlowing; doingHandoff = true; List <iTarget> ally = new List <iTarget>(); foreach (iTarget target in GameManager.i.levelManager.GetTargetableAllies()) { ally.Add(target); } ally.Remove(this); target = ally[0]; handoffTarget = target.targetedTransform; } } else { if (doingHandoff) { if (heavyPassChargedFX != null) { Destroy(heavyPassChargedFX); } if (chargingPassFX != null) { Destroy(chargingPassFX); } doingHandoff = false; speedModificator = 1; playerAnim.SetTrigger("HandoffTrigger"); List <iTarget> ally = new List <iTarget>(); foreach (iTarget target in GameManager.i.levelManager.GetTargetableAllies()) { ally.Add(target); } ally.Remove(this); target = ally[0]; if (passCharge >= heavyPassTime) { HeavyPass(target, GameManager.i.momentumManager.momentum); } else { LightPass(target, GameManager.i.momentumManager.momentum); } target = null; passCharge = 0; } } } // HEAL if (Input.GetButtonDown("Healing_" + inputIndex.ToString())) { if (possessedBall != null) { Heal(); } } if (Input.GetMouseButtonDown(1)) { TakeBall(GameManager.i.levelManager.activeBall, 0.1f); } if (Input.GetButtonDown("Dash_" + inputIndex.ToString())) { PrepareDash(); } if (Input.GetButtonUp("Dash_" + inputIndex.ToString())) { ReleaseDash(); } if (Input.GetKeyDown(KeyCode.V)) { PrepareDash(); } if (Input.GetKeyUp(KeyCode.V)) { ReleaseDash(); } }