mirror of
https://github.com/2revoemag/PSF-BotServer.git
synced 2026-04-20 11:25:18 +00:00
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:
parent
1bceb35226
commit
c57999d676
11 changed files with 115 additions and 15 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
42
common/src/main/scala/net/psforever/objects/Projectile.scala
Normal file
42
common/src/main/scala/net/psforever/objects/Projectile.scala
Normal 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)
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package net.psforever.objects.equipment
|
||||
package net.psforever.objects.ballistics
|
||||
|
||||
trait DamageProfile {
|
||||
def Damage0 : Int
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
// Copyright (c) 2017 PSForever
|
||||
package net.psforever.objects.equipment
|
||||
package net.psforever.objects.ballistics
|
||||
|
||||
/**
|
||||
* An `Enumeration` of the damage type.
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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`.
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
package net.psforever.objects.equipment
|
||||
|
||||
import net.psforever.objects.Tool
|
||||
import net.psforever.objects.ballistics.DamageProfile
|
||||
|
||||
import scala.collection.mutable
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue