Exemplo n.º 1
0
    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();
    }
Exemplo n.º 2
0
 public void RemoveTargetFromList(iTarget target)
 {
     allTargetableObjects.Remove(target);
     targetableAllies.Remove(target);
     targetableEnemies.Remove(target);
     targetableProps.Remove(target);
 }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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);
    }
Exemplo n.º 5
0
    //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);
        }
    }
Exemplo n.º 6
0
    //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();
    }
Exemplo n.º 7
0
    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();
        }
    }