Store vehicle spawn location in vehicle list

This commit is contained in:
Subsonic154 2026-05-04 11:07:49 -04:00
parent 0d2625d538
commit 1f193a2ab0
2 changed files with 13 additions and 12 deletions

View file

@ -20,7 +20,7 @@ import scala.util.Random
object ShootingRangeTargetSpawner {
final case class InfantryTargetReleased(bot: AvatarBot)
final case class VehicleTargetDeconstructed(vehicle: Vehicle, position: Vector3)
final case class VehicleTargetDeconstructed(vehicle: Vehicle)
}
class ShootingRangeTargetSpawnerActor(zone: Zone) extends Actor {
@ -94,7 +94,7 @@ class ShootingRangeTargetSpawnerActor(zone: Zone) extends Actor {
)
private val activeInfantryTargets = ListBuffer[AvatarBot]()
private val activeVehicleTargets = ListBuffer[Vehicle]()
private val activeVehicleTargets = ListBuffer[(Vehicle, Vector3)]()
private var botNamesInUse = List[String]()
override def preStart() = {
@ -113,7 +113,7 @@ class ShootingRangeTargetSpawnerActor(zone: Zone) extends Actor {
}
activeInfantryTargets.clear()
botNamesInUse = List[String]()
activeVehicleTargets.foreach{ target =>
activeVehicleTargets.foreach{ case (target, pos) =>
if (target.Actor != Default.Actor) {
target.Actor ! Vehicle.Deconstruct(None)
}
@ -125,8 +125,8 @@ class ShootingRangeTargetSpawnerActor(zone: Zone) extends Actor {
case ShootingRangeTargetSpawner.InfantryTargetReleased(bot) =>
RemoveBot(bot)
case ShootingRangeTargetSpawner.VehicleTargetDeconstructed(vehicle, pos) =>
OnVehicleTargetDeconstructed(vehicle, pos)
case ShootingRangeTargetSpawner.VehicleTargetDeconstructed(vehicle) =>
OnVehicleTargetDeconstructed(vehicle)
case _ => ()
}
@ -357,7 +357,7 @@ class ShootingRangeTargetSpawnerActor(zone: Zone) extends Actor {
localVehicle.Definition.Packet.ConstructorData(localVehicle).get
)
)
activeVehicleTargets.addOne(localVehicle)
activeVehicleTargets.addOne((localVehicle, localVehicle.Position))
log.debug(s"Spawned a ${localVehicle.Faction} ${localVehicle.Definition.Name} in ${zone.id} at ${localVehicle.Position}")
Future(true)
}
@ -366,15 +366,16 @@ class ShootingRangeTargetSpawnerActor(zone: Zone) extends Actor {
)
}
private def OnVehicleTargetDeconstructed(vehicle: Vehicle, position: Vector3): Unit = {
activeVehicleTargets.indexOf(vehicle) match {
case -1 =>
case index =>
private def OnVehicleTargetDeconstructed(vehicle: Vehicle): Unit = {
activeVehicleTargets.find(_._1 == vehicle) match {
case Some((target, pos)) =>
val index = activeVehicleTargets.indexOf((target, pos))
activeVehicleTargets.remove(index)
context.system.scheduler.scheduleOnce(
5.seconds,
new Runnable() { override def run(): Unit = CreateVehicleTarget(position, vehicle.Orientation.z, GlobalDefinitions.isFlightVehicle(vehicle.Definition)) }
new Runnable() { override def run(): Unit = CreateVehicleTarget(pos, vehicle.Orientation.z, GlobalDefinitions.isFlightVehicle(vehicle.Definition)) }
)
case None =>
}
}
}

View file

@ -338,7 +338,7 @@ class VehicleControl(vehicle: Vehicle)
//notify target spawner that the vehicle has despawned if this is a VR Shooting Range zone
//todo: make this behavior cleaner
if (zone.id.startsWith("tzsh") && vehicle.OwnerGuid.isEmpty && zone.NPCPopulation != Default.Actor) {
zone.NPCPopulation.tell(ShootingRangeTargetSpawner.VehicleTargetDeconstructed(vehicle, vehicle.Position), zone.NPCPopulation)
zone.NPCPopulation.tell(ShootingRangeTargetSpawner.VehicleTargetDeconstructed(vehicle), zone.NPCPopulation)
}
//unregister
TaskWorkflow.execute(GUIDTask.unregisterVehicle(zone.GUID, vehicle))