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); } }
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); } }
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); } } } }
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); } } }
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 ComponentToListenToHpImpactReceived(object sender, ImpactEventArgs e) { _cameraShaker.DoShake(_impactShakeSettings); }
private void _hpScript_HpImpactReceived(object sender, ImpactEventArgs e) { _playerVibrator.Vibrate(_impactVibrationSettings); }
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); } } }); }