public void DealDamage(IDamageReceiver damageReceiver, DamagesParameters damagesParameters) { damageReceiver.ReceiveDamage(this, damagesParameters, relatedProjectile.GetProjectileSpecialParameters); if (relatedProjectile.GetProjectileSpecialParameters.GetPiercingParameters.GetNumberOfPiercing > 0) { relatedProjectile.GetProjectileSpecialParameters.GetPiercingParameters.DecreamentPiercing(); FeedbackObject woodProjection = GameManager.gameManager.PoolManager.GetFeedbackObject(FeedbackObjectPoolTag.WoodDestruction, PoolInteractionType.GetFromPool); if (woodProjection != null) { woodProjection.transform.position = transform.position; woodProjection.StartFeedback(2, 0.2f, specialSound); } } else if (relatedProjectile.GetProjectileSpecialParameters.GetSkeweringParameters.Skewering) { FeedbackObject woodProjection = GameManager.gameManager.PoolManager.GetFeedbackObject(FeedbackObjectPoolTag.WoodDestruction, PoolInteractionType.GetFromPool); if (woodProjection != null) { woodProjection.transform.position = transform.position; woodProjection.StartFeedback(2, 0.2f, specialSound); } } else { relatedProjectile.ExplodeOnContact(); } }
public void Die() { foreach (Transform pos in particlesPositions) { FeedbackObject onDestroyFeedbackObject = GameManager.gameManager.PoolManager.GetFeedbackObject(onDestroyParticleType, PoolInteractionType.GetFromPool); onDestroyFeedbackObject.gameObject.SetActive(true); onDestroyFeedbackObject.transform.position = pos.position; onDestroyFeedbackObject.StartFeedback(transform.localScale.x * particlesSize, soundVolume); } Destroy(gameObject); }
public void SetRammingKnockback(Collision collision, ICollisionReceiver hitCollisionReceiver) { #region Calculates Redirection and Knockback Vector3 knockbackVector = relatedShip.GetShipVelocity.normalized; Vector3 redirectionVector = hitCollisionReceiver.GetMovementDirection(); Vector3 hitObjectDirection = Quaternion.Euler(-collision.transform.rotation.eulerAngles) * hitCollisionReceiver.GetMovementDirection(); Vector3 hitNormal = new Vector3(); Vector3 hitPosition = new Vector3(); Vector3 worldHitPosition; int counter = 0; foreach (ContactPoint contact in collision.contacts) { hitNormal += contact.normal; hitPosition += contact.point; counter++; } #region V1 Vector3 hitObjectCenter = collision.collider.bounds.center; hitNormal /= counter; hitNormal = Quaternion.Euler(-collision.transform.rotation.eulerAngles) * hitNormal; hitPosition /= counter; worldHitPosition = hitPosition; hitPosition = Quaternion.Euler(-collision.transform.rotation.eulerAngles) * (hitPosition - hitObjectCenter); float semiLenght = collision.collider.bounds.extents.z; float semiWidht = collision.collider.bounds.extents.x; if (Mathf.Abs(Vector3.Dot(hitNormal, hitObjectDirection)) < 0.5f) { //latéral if (hitPosition.x > 0) { //par la droite if (hitPosition.z > 0) { //à l'avant if (Vector3.Dot(GetMovementDirection(), hitCollisionReceiver.GetMovementDirection()) > -0.45f) { knockbackVector = -hitCollisionReceiver.GetMovementDirection(); redirectionVector = ((-hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetLeftOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("pas exception"); } else if (Vector3.Dot(GetMovementDirection(), hitCollisionReceiver.GetMovementDirection()) < 0f) { knockbackVector = hitCollisionReceiver.GetMovementDirection().GetLeftOrthogonalVectorXZ(); redirectionVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetLeftOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("exception"); } //Debug.Log("latéral avant droit"); } else { //à l'arrière if (Vector3.Dot(GetMovementDirection(), hitCollisionReceiver.GetMovementDirection()) < 0.75f) { knockbackVector = hitCollisionReceiver.GetMovementDirection(); redirectionVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetRightOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("pas exception"); } else { knockbackVector = hitCollisionReceiver.GetMovementDirection().GetLeftOrthogonalVectorXZ(); redirectionVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetLeftOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("exception"); } //Debug.Log("latéral arrière droit"); } } else { //par la gauche if (hitPosition.z > 0) { //à l'avant if (Vector3.Dot(GetMovementDirection(), hitCollisionReceiver.GetMovementDirection()) > -0.45f) { knockbackVector = -hitCollisionReceiver.GetMovementDirection(); redirectionVector = ((-hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetRightOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("pas exception"); } else { knockbackVector = hitCollisionReceiver.GetMovementDirection().GetRightOrthogonalVectorXZ(); redirectionVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetRightOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("exception"); } //Debug.Log("latéral avant gauche"); } else { //à l'arrière if (Vector3.Dot(GetMovementDirection(), hitCollisionReceiver.GetMovementDirection()) < 0.75f) { knockbackVector = hitCollisionReceiver.GetMovementDirection(); redirectionVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetLeftOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("pas exception"); } else { knockbackVector = hitCollisionReceiver.GetMovementDirection().GetRightOrthogonalVectorXZ(); redirectionVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetRightOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("exception"); } //Debug.Log("latéral arrière gauche"); } } } else { //avant ou arrière if (hitPosition.x > 0) { // sur la droite //knockbackVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetLeftOrthogonalVectorXZ().normalized) / 2).normalized; knockbackVector = hitCollisionReceiver.GetMovementDirection().GetLeftOrthogonalVectorXZ().normalized; redirectionVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetLeftOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("frontal droite"); } else { // sur la gauche //knockbackVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetRightOrthogonalVectorXZ().normalized) / 2).normalized; knockbackVector = hitCollisionReceiver.GetMovementDirection().GetRightOrthogonalVectorXZ().normalized; redirectionVector = ((hitCollisionReceiver.GetMovementDirection().normalized + hitCollisionReceiver.GetMovementDirection().GetRightOrthogonalVectorXZ().normalized) / 2).normalized; //Debug.Log("frontal gauche"); } } #endregion #endregion DealKnockback(hitCollisionReceiver, relatedShip.ShipMvt.GetCurrentRammingParameters.GetInflictedKnockbackParameters, knockbackVector, redirectionVector); ReceiveKnockback(this, relatedShip.ShipMvt.GetCurrentRammingParameters.GetSustainedKnockbackParametersOnImpact, -relatedShip.GetShipVelocity.normalized, relatedShip.GetShipVelocity.normalized); #region Feedback if (waitBeforeRammingFeedback) { return; } if ((relatedShip as EnemyShip != null && collision.gameObject.GetComponent <PlayerShip>() != null) /* || (relatedShip as PlayerShip != null && collision.gameObject.GetComponent<EnemyShip>() != null)*/) { GameManager.gameManager.SlwMoManager.SetSlowMo(relatedShip.ShipMvt.GetCurrentRammingParameters.GetSlowMoParameters); } GameManager.gameManager.ScrshkManager.StartScreenshake(relatedShip.ShipMvt.GetCurrentRammingParameters.GetScreenshakeParameters); FeedbackObject woodProjection = GameManager.gameManager.PoolManager.GetFeedbackObject(FeedbackObjectPoolTag.WoodDestruction, PoolInteractionType.GetFromPool); if (woodProjection != null) { woodProjection.transform.position = worldHitPosition; woodProjection.StartFeedback(2, 0.2f); } StartCoroutine(WaitBeforeReplayRammingFeedback()); #endregion }
public void Die() { OnDeath?.Invoke(this); ArenaManager arenaManager = ArenaManager.arenaManager; EnemyLootCrate lootCrate = lootManager.GenerateEnemyLootCrate(); if (lootCrate != null) { lootCrate.transform.position = transform.position; lootCrate.SetUpFloatingMove(); if (arenaManager != null) { arenaManager.DropManager.AddDropCrate(lootCrate); } } if (objectCollider != null) { objectCollider.enabled = false; } else if (GetComponent <Collider>() != null) { GetComponent <Collider>().enabled = false; } if (particlesToPlay != null) { particlesToPlay.Play(); } foreach (Transform tr in woodProjectionPositions) { FeedbackObject woodProjection = GameManager.gameManager.PoolManager.GetFeedbackObject(FeedbackObjectPoolTag.WoodDestruction, PoolInteractionType.GetFromPool); if (woodProjection != null) { woodProjection.transform.position = tr.position; woodProjection.StartFeedback(2, 0.2f); } } if (particlesToPlay == null && woodProjectionPositions.Length == 0) { FeedbackObject woodProjection = GameManager.gameManager.PoolManager.GetFeedbackObject(FeedbackObjectPoolTag.WoodDestruction, PoolInteractionType.GetFromPool); if (woodProjection != null) { woodProjection.transform.position = transform.position; woodProjection.StartFeedback(2, 0.2f); } } if (targetAudioSource != null) { targetAudioSource.PlaySound(soundToPlayOnDestroy); } if (objectRenderer != null) { objectRenderer.enabled = false; } foreach (GameObject obj in objectRenderers) { obj.SetActive(false); } if (objectRenderer == null && objectRenderers.Length == 0) { Destroy(gameObject); } }