introduction of aggravated damage properties and modification of damage pathways such that 'aggravated' is treated as a unique damage type

This commit is contained in:
FateJH 2020-07-10 00:26:30 -04:00
parent cf9e4ea194
commit e5d0690c42
20 changed files with 696 additions and 371 deletions

View file

@ -0,0 +1,37 @@
// Copyright (c) 2017 PSForever
package net.psforever.objects.ballistics
import net.psforever.objects.vital.DamageType
object AggravatedEffect extends Enumeration {
type Type = Value
val Comet, Fire, Plasma, Napalm, None = Value
}
final case class AggravatedInfo(damage_type : DamageType.Value,
degradation_percentage : Float,
infliction_rate : Long) {
assert(damage_type == DamageType.Direct || damage_type == DamageType.Splash, s"aggravated damage is an unsupported type - $damage_type")
}
final case class AggravatedDamage(info : List[AggravatedInfo],
effect_type : AggravatedEffect.Value,
duration : Long,
max_factor : Float,
cumulative_damage_degrade : Boolean,
vanu_aggravated : Boolean)
object AggravatedDamage {
def apply(info : AggravatedInfo,
effect_type : AggravatedEffect.Value,
duration : Long,
max_factor : Float) : AggravatedDamage =
AggravatedDamage(List(info), effect_type, duration, max_factor, cumulative_damage_degrade = true, vanu_aggravated = false)
def apply(info : AggravatedInfo,
effect_type : AggravatedEffect.Value,
duration : Long,
max_factor : Float,
vanu_aggravated : Boolean) : AggravatedDamage =
AggravatedDamage(List(info), effect_type, duration, max_factor, cumulative_damage_degrade = true, vanu_aggravated)
}

View file

@ -0,0 +1,176 @@
// Copyright (c) 2017 PSForever
//package net.psforever.objects.vital
//
//import net.psforever.objects.vital.StandardAmenityDamage.None
//import net.psforever.objects.vital.StandardDeployableDamage.None
//import net.psforever.objects.vital.damage._
//import net.psforever.objects.vital.damage.DamageCalculations._
//import net.psforever.objects.vital.projectile.ProjectileCalculations
//
///**
// * A protected super class for calculating "no damage."
// * Used for `NoDamage` but also for the base of `*LashDamage` calculation objects
// * to maintain the polymorphic identity of `DamageCalculations`.
// */
//protected class NoDamageBase
// extends DamageCalculations(
// DamageCalculations.NoDamage,
// DamageWithModifiers(NoDamageAgainst),
// TooFar
// )
//
//object NoDamage extends NoDamageBase
//
//object InfantryHitDamage
// extends DamageCalculations(
// DirectHitDamageWithDegrade,
// DamageWithModifiers(DamageAgainstExoSuit),
// DistanceBetweenTargetandSource
// )
//
//object MaxHitDamage
// extends DamageCalculations(
// DirectHitDamageWithDegrade,
// DamageWithModifiers(DamageAgainstMaxSuit),
// DistanceBetweenTargetandSource
// )
//
//object VehicleHitDamage
// extends DamageCalculations(
// DirectHitDamageWithDegrade,
// DamageWithModifiers(DamageAgainstVehicle),
// DistanceBetweenTargetandSource
// )
//
//object AircraftHitDamage
// extends DamageCalculations(
// DirectHitDamageWithDegrade,
// DamageWithModifiers(DamageAgainstAircraft),
// DistanceBetweenTargetandSource
// )
//
//object InfantrySplashDamage
// extends DamageCalculations(
// SplashDamageWithRadialDegrade,
// DamageWithModifiers(DamageAgainstExoSuit),
// DistanceFromExplosionToTarget
// )
//
//object MaxSplashDamage
// extends DamageCalculations(
// SplashDamageWithRadialDegrade,
// DamageWithModifiers(DamageAgainstMaxSuit),
// DistanceFromExplosionToTarget
// )
//
//object VehicleSplashDamage
// extends DamageCalculations(
// SplashDamageWithRadialDegrade,
// DamageWithModifiers(DamageAgainstVehicle),
// DistanceFromExplosionToTarget
// )
//
//object AircraftSplashDamage
// extends DamageCalculations(
// SplashDamageWithRadialDegrade,
// DamageWithModifiers(DamageAgainstAircraft),
// DistanceFromExplosionToTarget
// )
//
//object InfantrySplashDamageDirect
// extends DamageCalculations(
// SplashDamageWithRadialDegrade,
// DamageWithModifiers(DamageAgainstAircraft),
// NoDistance
// )
//
//object InfantryLashDamage
// extends DamageCalculations(
// LashDamage,
// DamageWithModifiers(DamageAgainstExoSuit),
// DistanceBetweenTargetandSource
// )
//
//object MaxLashDamage
// extends DamageCalculations(
// LashDamage,
// DamageWithModifiers(DamageAgainstMaxSuit),
// DistanceBetweenTargetandSource
// )
//
//object VehicleLashDamage
// extends DamageCalculations(
// LashDamage,
// DamageWithModifiers(DamageAgainstVehicle),
// DistanceBetweenTargetandSource
// )
//
//object AircraftLashDamage
// extends DamageCalculations(
// LashDamage,
// DamageWithModifiers(DamageAgainstAircraft),
// DistanceBetweenTargetandSource
// )
//
//object AmenityHitDamage
// extends DamageCalculations(
// DirectHitDamageWithDegrade,
// DamageWithModifiers(DamageAgainstVehicle),
// DistanceBetweenTargetandSource
// )
//
//object AmenitySplashDamage
// extends DamageCalculations(
// SplashDamageWithRadialDegrade,
// DamageWithModifiers(DamageAgainstVehicle),
// DistanceFromExplosionToTarget
// )
//
//object NoDamageSelection extends DamageSelection {
// def Direct = None
// def Splash = None
// def Lash = None
// def Aggravated : ProjectileCalculations.Form = None
//}
//
//object StandardInfantryDamage extends DamageSelection {
// def Direct : ProjectileCalculations.Form = InfantryHitDamage.Calculate
// def Splash : ProjectileCalculations.Form = InfantrySplashDamage.Calculate
// def Lash : ProjectileCalculations.Form = InfantryLashDamage.Calculate
// def Aggravated : ProjectileCalculations.Form = InfantrySplashDamage.Calculate
//}
//
//object StandardMaxDamage extends DamageSelection {
// def Direct : ProjectileCalculations.Form = MaxHitDamage.Calculate
// def Splash : ProjectileCalculations.Form = MaxSplashDamage.Calculate
// def Lash : ProjectileCalculations.Form = MaxLashDamage.Calculate
// def Aggravated : ProjectileCalculations.Form = None
//}
//
//object StandardVehicleDamage extends DamageSelection {
// def Direct : ProjectileCalculations.Form = VehicleHitDamage.Calculate
// def Splash : ProjectileCalculations.Form = VehicleSplashDamage.Calculate
// def Lash : ProjectileCalculations.Form = VehicleLashDamage.Calculate
// def Aggravated : ProjectileCalculations.Form = None
//}
//
//object StandardAircraftDamage extends DamageSelection {
// def Direct : ProjectileCalculations.Form = AircraftHitDamage.Calculate
// def Splash : ProjectileCalculations.Form = AircraftSplashDamage.Calculate
// def Lash : ProjectileCalculations.Form = AircraftLashDamage.Calculate
// def Aggravated : ProjectileCalculations.Form = None
//}
//
//object StandardDeployableDamage extends DamageSelection {
// def Direct : ProjectileCalculations.Form = VehicleHitDamage.Calculate
// def Splash : ProjectileCalculations.Form = VehicleSplashDamage.Calculate
// def Lash : ProjectileCalculations.Form = NoDamage.Calculate
// def Aggravated : ProjectileCalculations.Form = None
//}
//
//object StandardAmenityDamage extends DamageSelection {
// def Direct : ProjectileCalculations.Form = AmenityHitDamage.Calculate
// def Splash : ProjectileCalculations.Form = AmenitySplashDamage.Calculate
// def Lash : ProjectileCalculations.Form = NoDamage.Calculate
// def Aggravated : ProjectileCalculations.Form = None
//}

View file

@ -0,0 +1,35 @@
// Copyright (c) 2017 PSForever
//package net.psforever.objects.vital.damage
//
//import net.psforever.objects.ballistics.ResolvedProjectile
//import net.psforever.objects.vital.{DamageType, NoDamage}
//import net.psforever.objects.vital.projectile.ProjectileCalculations
//
///**
// * Maintain information about three primary forms of damage calculation
// * and a means to test which calculation is valid in a given situation.
// */
//trait DamageSelection {
// final def None: ProjectileCalculations.Form = NoDamage
//
// def Direct : ProjectileCalculations.Form
// def Splash : ProjectileCalculations.Form
// def Lash : ProjectileCalculations.Form
// def Aggravated : ProjectileCalculations.Form
//
// def apply(data : ResolvedProjectile) : ProjectileCalculations.Form = data.projectile.profile.ProjectileDamageType match {
// case DamageType.Direct => Direct
// case DamageType.Splash => Splash
// case DamageType.Lash => Lash
// case DamageType.Aggravated => Aggravated
// case _ => None
// }
//
// def apply(res : DamageType.Value) : ProjectileCalculations.Form = res match {
// case DamageType.Direct => Direct
// case DamageType.Splash => Splash
// case DamageType.Lash => Lash
// case DamageType.Aggravated => Aggravated
// case _ => None
// }
//}