private void HpScriptOnHpImpactReceived(object sender, ImpactEventArgs impactEventArgs)
    {
        var iterations     = Mathf.CeilToInt(impactEventArgs.Damage * PercentAmountOfParticles);
        var amountToPickup = Mathf.RoundToInt(iterations * _probabilityOfPickup);

        for (int i = 0; i < iterations; i++)
        {
            var calculatedOffset = impactEventArgs.PointOfCollision;

            if (impactEventArgs.type == DamageType.Melee)
            {
                if (calculatedOffset.x < transform.position.x)
                {
                    calculatedOffset.x += _meleeOffset;
                }
                else if (calculatedOffset.x > transform.position.x)
                {
                    calculatedOffset.x -= _meleeOffset;
                }
            }

            var singleParticle = Instantiate(SingleParticle, calculatedOffset, Quaternion.identity) as GameObject;
            var spriteRenderer = singleParticle.GetComponent <SpriteRenderer>();
            spriteRenderer.color = impactEventArgs.color;
            var particleScript = singleParticle.GetComponent <PhysicsSingleParticle>();

            if (_isLegacyCode)
            {
                if (_overrideProbabilityToParticles)
                {
                    particleScript.ProbabilityOfHealthPickup = _probabilityOfPickup;
                }
                if (_overrideHealthAmountPerParticle)
                {
                    particleScript.HpRecovered = _healthRecoveredPerParticle;
                }
            }
            else
            {
                if (i < amountToPickup)
                {
                    particleScript.ProbabilityOfHealthPickup = 1f;
                }
                else
                {
                    particleScript.ProbabilityOfHealthPickup = 0f;
                }

                if (_overrideHealthAmountPerParticle)
                {
                    particleScript.HpRecovered = _healthRecoveredPerParticle;
                }
            }

            var particleRigidBody = particleScript.gameObject.GetComponent <Rigidbody2D>();
            var forceDirection    = new Vector2((Mathf.Abs(RandomXSpeed) * Mathf.Sign(calculatedOffset.x - transform.position.x)), RandomYSpeed);
            particleRigidBody.AddForce(forceDirection, ForceMode2D.Impulse);
        }
    }
Exemplo n.º 2
0
 protected virtual void OnHpImpactReceived(ImpactEventArgs e)
 {
     try
     {
         EventHandler <ImpactEventArgs> handler = HpImpactReceived;
         if (handler != null)
         {
             handler(this, e);
         }
     }
     catch (Exception ex)
     {
         ex.Log();
         throw;
     }
 }
    private void HpScriptOnHpImpactReceived(object sender, ImpactEventArgs impactEventArgs)
    {
        var iterations = Mathf.CeilToInt(impactEventArgs.Damage *  PercentAmountOfParticles);
        var amountToPickup = Mathf.RoundToInt(iterations * _probabilityOfPickup);
        for (int i = 0; i < iterations; i++)
        {
            var calculatedOffset = impactEventArgs.PointOfCollision;

            if(impactEventArgs.type == DamageType.Melee)
            {
                if (calculatedOffset.x < transform.position.x)
                    calculatedOffset.x += _meleeOffset;
                else if (calculatedOffset.x > transform.position.x)
                    calculatedOffset.x -= _meleeOffset;
            }

            var singleParticle = Instantiate(SingleParticle, calculatedOffset, Quaternion.identity) as GameObject;
            var spriteRenderer = singleParticle.GetComponent<SpriteRenderer>();
            spriteRenderer.color = impactEventArgs.color;
            var particleScript = singleParticle.GetComponent<PhysicsSingleParticle>();

            if (_isLegacyCode)
            {
                if (_overrideProbabilityToParticles) particleScript.ProbabilityOfHealthPickup = _probabilityOfPickup;
                if (_overrideHealthAmountPerParticle) particleScript.HpRecovered = _healthRecoveredPerParticle;
            }
            else
            {
                if (i < amountToPickup)
                {
                    particleScript.ProbabilityOfHealthPickup = 1f;
                }
                else
                {
                    particleScript.ProbabilityOfHealthPickup = 0f;
                }

                if (_overrideHealthAmountPerParticle) particleScript.HpRecovered = _healthRecoveredPerParticle;
            }

            var particleRigidBody = particleScript.gameObject.GetComponent<Rigidbody2D>();
            var forceDirection = new Vector2((Mathf.Abs(RandomXSpeed)*Mathf.Sign(calculatedOffset.x - transform.position.x)), RandomYSpeed);
            particleRigidBody.AddForce(forceDirection, ForceMode2D.Impulse);
        }
    }
Exemplo n.º 4
0
    private void CheckForDamage(Collider2D collider, bool isBack)
    {
        var checkDamaging = collider.gameObject.GetComponent <IDamaging>();

        //If it is not damaging, dont bother with calculations
        if (checkDamaging != null && CheckIfIDamagableIsActive(checkDamaging))
        {
            Vector2 pointOfCollision = GetPointOfImpact(checkDamaging, collider, _centerOfReferenceForJuice, _raycastIterationsToFindTarget, _raycastVariationPerTry);
            float   damage;
            if (DamagingDoesDamage(checkDamaging, pointOfCollision, out damage))
            {
                float mulitpliedDmg = damage;
                if (isBack)
                {
                    mulitpliedDmg = Database.instance.BackDamageMultiplier * damage;
                }

                CurrentHp -= mulitpliedDmg;
                checkDamaging.Consumed();

                if (checkDamaging.AddImpactForce)
                {
                    checkDamaging.UpdateImpactForceSetting(GetDirectionFromImpact(collider,
                                                                                  checkDamaging.ImpactForceSettings));

                    _character.AddKnockBack(checkDamaging);
                }

                PlayRightSound(collider, isBack);

                var e = new ImpactEventArgs
                {
                    Damage           = damage,
                    type             = checkDamaging.TypeOfDamage,
                    PointOfCollision = pointOfCollision,
                    color            = _inputController.m_PlayerData.PlayerSponsor.SponsorColor
                };
                if (CurrentHp >= 0)
                {
                    OnHpImpactReceived(e);
                }
            }
        }
    }
Exemplo n.º 5
0
    private void CheckForDamage(Collider2D collider, bool isBack)
    {
        var checkDamaging = collider.gameObject.GetComponent<IDamaging>();

        //If it is not damaging, dont bother with calculations
        if (checkDamaging != null && CheckIfIDamagableIsActive(checkDamaging))
        {

            Vector2 pointOfCollision = GetPointOfImpact(checkDamaging, collider, _centerOfReferenceForJuice, _raycastIterationsToFindTarget, _raycastVariationPerTry);
            float damage;
            if (DamagingDoesDamage(checkDamaging, pointOfCollision, out damage))
            {
                float mulitpliedDmg = damage;
                if (isBack) mulitpliedDmg = Database.instance.BackDamageMultiplier * damage;

                CurrentHp -= mulitpliedDmg;
                checkDamaging.Consumed();

                if (checkDamaging.AddImpactForce)
                {
                    checkDamaging.UpdateImpactForceSetting(GetDirectionFromImpact(collider,
                        checkDamaging.ImpactForceSettings));

                    _character.AddKnockBack(checkDamaging);
                }

                PlayRightSound(collider, isBack);

                var e = new ImpactEventArgs
                {
                    Damage = damage,
                    type = checkDamaging.TypeOfDamage,
                    PointOfCollision = pointOfCollision,
                    color = _inputController.m_PlayerData.PlayerSponsor.SponsorColor
                };
                if(CurrentHp >= 0)
                    OnHpImpactReceived(e);
            }
        }
    }
Exemplo n.º 6
0
 protected virtual void OnHpImpactReceived(ImpactEventArgs e)
 {
     try
     {
         EventHandler<ImpactEventArgs> handler = HpImpactReceived;
         if (handler != null) handler(this, e);
     }
     catch (Exception ex)
     {
         ex.Log();
         throw;
     }
 }
Exemplo n.º 7
0
 private void ComponentToListenToHpImpactReceived(object sender, ImpactEventArgs e)
 {
     _cameraShaker.DoShake(_impactShakeSettings);
 }
Exemplo n.º 8
0
 private void _hpScript_HpImpactReceived(object sender, ImpactEventArgs e)
 {
     _playerVibrator.Vibrate(_impactVibrationSettings);
 }
Exemplo n.º 9
0
        static LocalVehicle()
        {
            Screen = new Screen();
            HUD    = new HUD();

            Events.Car.PreExplode.SubscribeAll((sender, data) =>
            {
                BeforeExploded?.Invoke(null, System.EventArgs.Empty);
            });

            Events.Car.PreSplit.SubscribeAll((sender, data) =>
            {
                BeforeSplit?.Invoke(null, System.EventArgs.Empty);
            });

            Events.Car.CheckpointHit.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    var eventArgs = new CheckpointHitEventArgs(data.checkpointIndex_, data.trackT_);
                    CheckpointPassed?.Invoke(null, eventArgs);
                }
            });

            Events.Car.Death.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    var eventArgs = new DestroyedEventArgs((DestructionCause)data.causeOfDeath);
                    Destroyed?.Invoke(null, eventArgs);
                }
            });

            Events.Car.Explode.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    var eventArgs = new DestroyedEventArgs((DestructionCause)data.causeOfDeath);
                    Exploded?.Invoke(null, eventArgs);
                }
            });

            Events.RaceEnd.LocalCarHitFinish.Subscribe(data =>
            {
                BeforeFinished?.Invoke(null, System.EventArgs.Empty);
            });

            Events.Player.Finished.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>() != null)
                {
                    var eventArgs = new FinishedEventArgs((RaceEndType)data.finishType_, data.finishData_);
                    Finished?.Invoke(null, eventArgs);
                }
            });

            Events.Car.Horn.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    var eventArgs = new HonkEventArgs(data.hornPercent_, new Position(data.position_.x, data.position_.y, data.position_.z));
                    Honked?.Invoke(null, eventArgs);
                }
            });

            Events.Car.Impact.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    var eventArgs = new ImpactEventArgs(data.speed_, new Position(data.pos_.x, data.pos_.y, data.pos_.z), data.impactedCollider_.name);
                    Collided?.Invoke(null, eventArgs);
                }
            });

            Events.Car.Jump.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    Jumped?.Invoke(null, System.EventArgs.Empty);
                }
            });

            Events.Car.ModeSpecial.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    SpecialModeEvent?.Invoke(null, System.EventArgs.Empty);
                }
            });

            Events.Player.CarRespawn.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>() != null)
                {
                    var pos       = new Position(data.position_.x, data.position_.y, data.position_.z);
                    var rot       = new Rotation(data.rotation_.x, data.rotation_.y, data.rotation_.z);
                    var eventArgs = new RespawnEventArgs(pos, rot, data.fastRespawn_);

                    Respawned?.Invoke(null, eventArgs);
                }
            });

            Events.Car.Split.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    var eventArgs = new SplitEventArgs(data.penetration, data.separationSpeed);
                    Split?.Invoke(null, eventArgs);
                }
            });

            Events.Car.TrickComplete.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    var eventArgs = new TrickCompleteEventArgs(data.cooldownAmount_, data.points_, data.wallRideMeters_, data.ceilingRideMeters_, data.grindMeters_);
                    TrickCompleted?.Invoke(null, eventArgs);
                }
            });

            Events.Car.WingsStateChange.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    if (data.open_)
                    {
                        WingsOpened?.Invoke(null, System.EventArgs.Empty);
                    }
                    else
                    {
                        WingsClosed?.Invoke(null, System.EventArgs.Empty);
                    }
                }
            });

            Events.Car.WingsAbilityStateChanged.SubscribeAll((sender, data) =>
            {
                if (sender.GetComponent <PlayerDataLocal>())
                {
                    if (data.enabled_)
                    {
                        WingsEnabled?.Invoke(null, System.EventArgs.Empty);
                    }
                    else
                    {
                        WingsDisabled?.Invoke(null, System.EventArgs.Empty);
                    }
                }
            });
        }