void FixedUpdate()
    {
        for (int i = 0; i < pawnTrapped.Count; i++)
        {
            PawnController item = pawnTrapped[i];
            if (item.GetHealth() < 1)
            {
                pawnTrapped.Remove(item);
            }
        }
        waitTimeBeforeNextDamage -= Time.deltaTime;

        if (waitTimeBeforeNextDamage < 0 && !isActivated && !shutDown)
        {
            waitTimeBeforeNextDamage = puzzleData.timeCheckingDamageEletricPlate;
            foreach (PawnController item in pawnTrapped)
            {
                if (item.GetComponent <EnemyBehaviour>())
                {
                    item.Damage(puzzleData.DamageEletricPlateEnnemies);
                }
                else
                {
                    item.Damage(puzzleData.DamageEletricPlate);
                }
                Analytics.CustomEvent("ElectricalPlateDamage", new Dictionary <string, object> {
                    { "Zone", GameManager.GetCurrentZoneName() },
                });
                item.AddSpeedModifier(new SpeedCoef(speedModifier, puzzleData.timeCheckingDamageEletricPlate, SpeedMultiplierReason.Freeze, false));

                FeedbackManager.SendFeedback("event.PuzzleElectricPlateDamage", item);
            }
        }
    }
Esempio n. 2
0
 IEnumerator FadePlayerSpeed()
 {
     for (float i = 0; i < dashFadeDuration; i += Time.deltaTime)
     {
         linkedPawn.AddSpeedModifier(new SpeedCoef(1 + dashFadeCurve.Evaluate(i / dashFadeDuration), Time.deltaTime, SpeedMultiplierReason.Dash, false));
         yield return(null);
     }
 }
    private void OnTriggerEnter(Collider _other)
    {
        if (_other.gameObject.GetComponent <PawnController>())
        {
            PawnController _pawn = _other.gameObject.GetComponent <PawnController>();
            if (_pawn.ignoreEletricPlates == false)
            {
                pawnTrapped.Add(_pawn);
            }

            if (!isActivated)
            {
                _pawn.AddSpeedModifier(new SpeedCoef(0.5f, puzzleData.timeCheckingDamageEletricPlate, SpeedMultiplierReason.Freeze, false));
            }
        }
    }
Esempio n. 4
0
    private void UpdateLink()
    {
        if (linkGameObject != null)
        {
            if (firstPawn.moveState == MoveState.Dead || secondPawn.moveState == MoveState.Dead)
            {
                lineRenderer.positionCount = 0; WarningPanel.ClosePanelInstantly(); linkIsBroke = false; return;
            }
            float i_linkLength = Vector3.Distance(firstPawn.transform.position, secondPawn.transform.position);
            if (!linkIsBroke)
            {
                linkMaterial.SetFloat("_CurrentEnergyAmout", EnergyManager.GetEnergy());
                if (i_linkLength < maxDistanceBeforeBreaking)
                {
                    //Hide link
                    lineRenderer.positionCount = 2;
                    lineRenderer.SetPosition(0, firstPawn.GetCenterPosition());
                    lineRenderer.SetPosition(1, secondPawn.GetCenterPosition());
                    linkMaterial.SetFloat("_BreakingLinkProgression", 0);
                    ChangeLinkState(LinkState.Hidden);
                }
                if (i_linkLength >= maxDistanceBeforeShowing && i_linkLength < maxDistanceBeforeSlowing)
                {
                    //Show link
                    lineRenderer.positionCount = 2;
                    lineRenderer.SetPosition(0, firstPawn.GetCenterPosition());
                    lineRenderer.SetPosition(1, secondPawn.GetCenterPosition());
                    float lerpValue = (maxDistanceBeforeSlowing - i_linkLength) / (maxDistanceBeforeSlowing - maxDistanceBeforeShowing);
                    lerpValue = 1f - slowCoefCurve.Evaluate(lerpValue);
                    linkMaterial.SetFloat("_BreakingLinkProgression", 0);
                    ChangeLinkState(LinkState.Showing);
                }
                if (i_linkLength >= maxDistanceBeforeSlowing && i_linkLength < maxDistanceBeforeBreaking)
                {
                    lineRenderer.positionCount = 2;
                    lineRenderer.SetPosition(0, firstPawn.GetCenterPosition());
                    lineRenderer.SetPosition(1, secondPawn.GetCenterPosition());
                    float lerpValue = (maxDistanceBeforeBreaking - i_linkLength) / (maxDistanceBeforeBreaking - maxDistanceBeforeSlowing);
                    lerpValue = 1f - slowCoefCurve.Evaluate(lerpValue);
                    linkMaterial.SetFloat("_BreakingLinkProgression", lerpValue);

                    float slowValue = Mathf.Lerp(1f, maxSlowCoef, lerpValue);

                    //Slow player 1
                    float FcDirectionAngle = Vector3.Angle(firstPawn.transform.forward, secondPawn.transform.position - firstPawn.transform.position);
                    float FcSlowValue      = Mathf.Lerp(1f, slowValue, FcDirectionAngle / 180f);
                    firstPawn.AddSpeedModifier(new SpeedCoef(FcSlowValue, Time.deltaTime, SpeedMultiplierReason.Link, false));

                    //Slow player 2
                    float FsDirectionAngle = Vector3.Angle(secondPawn.transform.forward, firstPawn.transform.position - secondPawn.transform.position);
                    float FsSlowValue      = Mathf.Lerp(1f, slowValue, FsDirectionAngle / 180f);
                    secondPawn.AddSpeedModifier(new SpeedCoef(FsSlowValue, Time.deltaTime, SpeedMultiplierReason.Link, false));
                    ChangeLinkState(LinkState.Slowing);
                }
                if (i_linkLength >= maxDistanceBeforeBreaking)
                {
                    //Break link
                    lineRenderer.positionCount = 0;
                    linkIsBroke = true;
                    ChangeLinkState(LinkState.Broken);
                }
            }
            else
            {
                if (i_linkLength <= distanceBeforeRebuilding)
                {
                    //Rebuild link
                    linkIsBroke = false;
                    ChangeLinkState(LinkState.Rebuilt);
                }
                else
                {
                    damageCount += damagesPerSecWithoutLink * Time.deltaTime;
                    if (damageCount >= 1)
                    {
                        firstPawn.Damage(Mathf.RoundToInt(damageCount));
                        secondPawn.Damage(Mathf.RoundToInt(damageCount));
                        damageCount = 0;
                    }
                }
            }
        }
    }