Пример #1
0
        public static void InitProjectileBounceEffect(Projectiles.Projectile projectile)
        {
            GameObject eGO = Instantiate(Inst.projectileBouncePrefab, Inst.transform);

            eGO.name = "ProjectileBounceEffect";
            eGO.transform.position    = projectile.GetPreviousPosition();
            eGO.transform.rotation    = projectile.transform.rotation;
            eGO.transform.localScale *= projectile.FromTurret.GunsCaliber / Global.Effects.PROJECTILE_PEN_EFFECT_SIZEMOD_REFERENCE_CALIBER;
            Destroy(eGO, eGO.GetComponent <ParticleSystem>().main.duration);
        }
Пример #2
0
        public void Init(Projectiles.Projectile projectileParam,
                         Projectiles.ImpactEffect[] impactEffectsParam,
                         MetaData.PlayerMetaData senderParam)
        {
            hasHit        = false;
            sender        = senderParam;
            projectile    = projectileParam;
            impactEffects = impactEffectsParam;

            if (impactEffects.Length == 0)
            {
                print("<color=olive>Warning ! no impact effects found</color>\n" +
                      "Making no effort to collision check");
            }
        }
Пример #3
0
        public override void InflictDamage(DamageZone damageZone, Projectiles.Projectile projectile, DamageParams param = default)
        {
            if (PenetrationCheck(projectile, damageZone.Ship.HullArmor, Vector3.Angle(damageZone.Ship.transform.forward, projectile.transform.forward)))
            {
                // Penetration effects
                EffectManager.InitProjectilePenEffect(projectile);
                damageZone.Ship.Rigidbody.AddForceAtPosition(projectile.Velocity * projectile.FromTurret.GunsCaliber * damageZone.Ship.Armament.GunTurrets[0].ShipRecoil, projectile.GetPreviousPosition(), ForceMode.Impulse);

                // Add water ingress to ship
                damageZone.Ship.AddWaterIngress((byte)param.fparam[0]);
            }
            else
            {
                // Bounce effects
                EffectManager.InitProjectileBounceEffect(projectile);
            }
        }
Пример #4
0
        protected bool PenetrationCheck(Projectiles.Projectile projectile, ushort armorThickness, float angle)
        {
            float penetrationMM = ((projectile.Velocity.magnitude * Mathf.Sqrt(projectile.Mass)) / (SHELL_SHAPE_AND_ARMOR_QUALITY_K * Mathf.Sqrt((float)projectile.FromTurret.GunsCaliber / 100f))) * 100f;
            float varianceMM    = Mathf.Lerp(-Global.Penetration.PENETRATION_VARIANCE_MM, Global.Penetration.PENETRATION_VARIANCE_MM, SafeRandom.Range(0f, 1f));
            float angleImpact   = 1f - (Mathf.InverseLerp(0f, 90f, Mathf.Abs(90f - angle)) * Global.Penetration.MAX_PENETRATION_REDUCTION_FROM_ANGLE_PERCENTAGE);

            float appliedPenetrationMM = (penetrationMM + varianceMM) * angleImpact;

            if (appliedPenetrationMM > armorThickness)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Пример #5
0
        public override void InflictDamage(DamageZone damageZone, Projectiles.Projectile projectile, DamageParams param = default)
        {
            GunTurret turret = ((GameObject)param.oparam[0]).GetComponent <GunTurret>();

            if (PenetrationCheck(projectile, turret.TurretArmor, Vector3.Angle(damageZone.Ship.transform.forward, projectile.transform.forward)))
            {
                // Penetration effects
                EffectManager.InitProjectilePenEffect(projectile);
                damageZone.Ship.Rigidbody.AddForceAtPosition(projectile.Velocity * projectile.FromTurret.GunsCaliber * damageZone.Ship.Armament.GunTurrets[0].ShipRecoil, projectile.GetPreviousPosition(), ForceMode.Impulse);

                // Destroy Turret
                turret.Disable();
            }
            else
            {
                // Bounce effects
                EffectManager.InitProjectileBounceEffect(projectile);
            }
        }
Пример #6
0
 protected override void OnHit(RaycastHit hit, Projectiles.Projectile projectile, float damage)
 {
     Debug.Log("I took an arrow to the knee * " + damage);
 }
Пример #7
0
 public abstract void InflictDamage(
     DamageZone damageZone,
     Projectiles.Projectile projectile,
     DamageParams param = default
     );