void APAmmoOnHit() { RaycastHit hit; if (IsHitted) { return; } if (RayHitDetect(out hit)) { float Degree = Vector3.Angle(transform.forward * -1, hit.normal * 1); //Normalize Degree = Mathf.Clamp(Degree, 0, Degree - shellNormalizationAngle - (float)Caliber / 100); int Penetration = 0; switch (bulletType) { case BulletType.ApAmmo: Penetration = APPenetration; PenetrationDamper *= 1.2f; break; case BulletType.APCRAmmo: Penetration = ApcrPenration; PenetrationDamper *= 2; break; } float Distance = Vector3.Distance(transform.position, P0); Penetration = Mathf.RoundToInt(Random.Range(0.95f, 1.05f) * Penetration * EnergyDamper - Distance * 0.1f * PenetrationDamper); int Damage = Mathf.RoundToInt(Random.Range(0.95f, 1.05f) * APDamage * EnergyDamper); if (hit.collider.gameObject.layer == LayerMask.NameToLayer("HitBox")) { HitBox _hitBox = hit.collider.GetComponent <HitBox>(); if (_hitBox == null) { return; } if (Degree > 65) { transform.position = hit.point; transform.LookAt(Vector3.Reflect(transform.forward * 1, hit.normal) + hit.point); EnergyDamper *= 0.4f; _hitBox.ApplyRicochet(fireOwner); Debug.DrawRay(transform.position, hit.normal); if (!GameDataManager.OfflineMode) { CreateFireExplosionHitOnArmor(hit.point, transform.forward, "BulletReflectionEffect"); } return; } _hitBox.ApplyDamage(Penetration, Damage, Degree, fireOwner, bulletType, fireStartPosition, hit.point, Caliber); CreateFireExplosionHitOnArmor(hit.point, hit.normal, FireExplosionHitOnArmor); } else if (hit.collider.gameObject.layer == LayerMask.NameToLayer("Terrian")) { CreateFireExplosionHitOnArmor(hit.point, hit.normal, FireExplosionHitOnGround); if (!isMachineAmmo) { hit.collider.GetComponent <TerrainManager>().DestroyTerrain(hit.point, 2); } } else { CreateFireExplosionHitOnArmor(hit.point, hit.normal, FireExplosionHitOnGround); if (hit.collider.transform.GetComponentInParent <Building>() != null) { hit.collider.transform.GetComponentInParent <Building>().ApplyAmmoHit(APDamage); } } IsHitted = true; if (!isMachineAmmo) { PoolManagerSpawnModule.CreateObject(ammoAudio.ammoExplAudio.ToString(), transform.position, transform.eulerAngles); } Explode(); } }