basic projectiles tracked in WSA - generated (WeaponFire), queued, and marked as resolved through any of four packets (RequestDestroy, Hit, Splash, and Lash)

This commit is contained in:
FateJH 2018-06-13 07:34:31 -04:00
parent 1bceb35226
commit c57999d676
11 changed files with 115 additions and 15 deletions

View file

@ -14,6 +14,7 @@ import net.psforever.objects.serverobject.pad.VehicleSpawnPadDefinition
import net.psforever.objects.serverobject.terminals._
import net.psforever.objects.serverobject.tube.SpawnTubeDefinition
import net.psforever.objects.serverobject.resourcesilo.ResourceSiloDefinition
import net.psforever.objects.ballistics.{DamageType, Projectiles}
import net.psforever.objects.vehicles.{SeatArmorRestriction, UtilityType}
import net.psforever.types.PlanetSideEmpire

View file

@ -0,0 +1,42 @@
// Copyright (c) 2017 PSForever
package net.psforever.objects
import net.psforever.objects.definition.{ProjectileDefinition, ToolDefinition}
import net.psforever.objects.entity.SimpleWorldEntity
import net.psforever.objects.ballistics.ProjectileResolution
import net.psforever.types.Vector3
final case class Projectile(profile : ProjectileDefinition,
tool_def : ToolDefinition,
pos : Vector3,
orient : Vector3,
resolution : ProjectileResolution.Value,
fire_time : Long = System.nanoTime,
hit_time : Long = 0) {
val current : SimpleWorldEntity = new SimpleWorldEntity()
def Resolve(hitPos : Vector3, hitAng : Vector3, hitVel : Vector3, resolution : ProjectileResolution.Value) : Projectile = {
val obj = Resolve(resolution)
obj.current.Position = hitPos
obj.current.Orientation = hitAng
obj.current.Velocity = hitVel
obj
}
def Resolve(resolution : ProjectileResolution.Value) : Projectile = {
resolution match {
case ProjectileResolution.Unresolved =>
this
case _ =>
Projectile(profile, tool_def, pos, orient, resolution, fire_time, System.nanoTime)
}
}
}
object Projectile {
final val BaseUID : Int = 40100
def apply(profile : ProjectileDefinition, tool_def : ToolDefinition, pos : Vector3, orient : Vector3) : Projectile = {
Projectile(profile, tool_def, pos, orient, ProjectileResolution.Unresolved)
}
}

View file

@ -3,6 +3,7 @@ package net.psforever.objects
import net.psforever.objects.definition.{AmmoBoxDefinition, ProjectileDefinition, ToolDefinition}
import net.psforever.objects.equipment._
import net.psforever.objects.ballistics.Projectiles
import scala.annotation.tailrec

View file

@ -1,5 +1,5 @@
// Copyright (c) 2017 PSForever
package net.psforever.objects.equipment
package net.psforever.objects.ballistics
trait DamageProfile {
def Damage0 : Int

View file

@ -1,5 +1,5 @@
// Copyright (c) 2017 PSForever
package net.psforever.objects.equipment
package net.psforever.objects.ballistics
/**
* An `Enumeration` of the damage type.

View file

@ -0,0 +1,13 @@
// Copyright (c) 2017 PSForever
package net.psforever.objects.ballistics
object ProjectileResolution extends Enumeration {
type Type = Value
val
Unresolved,
MissedShot,
Target,
Obstacle
= Value
}

View file

@ -1,5 +1,5 @@
// Copyright (c) 2017 PSForever
package net.psforever.objects.equipment
package net.psforever.objects.ballistics
/**
* An `Enumeration` of all the projectile types in the game, paired with their object id as the `Value`.

View file

@ -1,7 +1,7 @@
// Copyright (c) 2017 PSForever
package net.psforever.objects.definition
import net.psforever.objects.equipment.{DamageProfile, DamageType, Projectiles}
import net.psforever.objects.ballistics.{DamageProfile, DamageType, Projectiles}
class ProjectileDefinition(objectId : Int) extends ObjectDefinition(objectId) with DamageProfile {
private val projectileType : Projectiles.Value = Projectiles(objectId) //let throw NoSuchElementException

View file

@ -4,8 +4,8 @@ package net.psforever.objects.entity
import net.psforever.types.Vector3
class SimpleWorldEntity extends WorldEntity {
private var coords : Vector3 = Vector3(0f, 0f, 0f)
private var orient : Vector3 = Vector3(0f, 0f, 0f)
private var coords : Vector3 = Vector3.Zero
private var orient : Vector3 = Vector3.Zero
private var vel : Option[Vector3] = None
def Position : Vector3 = coords

View file

@ -2,6 +2,7 @@
package net.psforever.objects.equipment
import net.psforever.objects.Tool
import net.psforever.objects.ballistics.DamageProfile
import scala.collection.mutable