From 52e5cb558b20403e23c0f7e3814513559bd04dc2 Mon Sep 17 00:00:00 2001 From: Fate-JH Date: Tue, 2 Apr 2024 12:49:43 -0400 Subject: [PATCH] sent deployment requests to a centralized pipeline for interference testing; swapped out math.pow(a,2) for a * a --- .../serverobject/deploy/Interference.scala | 8 ++++---- .../net/psforever/objects/zones/Zone.scala | 4 ++++ .../objects/zones/ZoneVehicleActor.scala | 20 ++++++++++++++----- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/scala/net/psforever/objects/serverobject/deploy/Interference.scala b/src/main/scala/net/psforever/objects/serverobject/deploy/Interference.scala index 2c3ffc18f..d10f7df8a 100644 --- a/src/main/scala/net/psforever/objects/serverobject/deploy/Interference.scala +++ b/src/main/scala/net/psforever/objects/serverobject/deploy/Interference.scala @@ -85,10 +85,10 @@ object Interference { val pDefinition = p.Definition val otherInterference = pDefinition.interference (otherInterference ne Interference.AllowAll) && { - lazy val distanceSq = Vector3.DistanceSquared(position, p.Position).toDouble - (pDefinition == objectDefinition && distanceSq < math.pow(otherInterference.main.toDouble, 2)) || - (inAGroup && sharedGroupId == otherInterference.sharedGroupId && distanceSq < math.pow(otherInterference.shared.toDouble, 2)) || - distanceSq < math.pow(otherInterference.deployables.toDouble, 2) + lazy val distanceSq = Vector3.DistanceSquared(position, p.Position) + (pDefinition == objectDefinition && distanceSq < otherInterference.main * otherInterference.main) || + (inAGroup && sharedGroupId == otherInterference.sharedGroupId && distanceSq < otherInterference.shared * otherInterference.shared) || + distanceSq < otherInterference.deployables * otherInterference.deployables } } } diff --git a/src/main/scala/net/psforever/objects/zones/Zone.scala b/src/main/scala/net/psforever/objects/zones/Zone.scala index 6e6d7aef2..3f71a937f 100644 --- a/src/main/scala/net/psforever/objects/zones/Zone.scala +++ b/src/main/scala/net/psforever/objects/zones/Zone.scala @@ -1317,6 +1317,10 @@ object Zone { final case class CanNotSpawn(zone: Zone, vehicle: Vehicle, reason: String) final case class CanNotDespawn(zone: Zone, vehicle: Vehicle, reason: String) + + final case class TryDeploymentChange(vehicle: Vehicle, toDeployState: DriveState.Value) + + final case class CanNotDeploy(zone: Zone, vehicle: Vehicle, toDeployState: DriveState.Value, reason: String) } object HotSpot { diff --git a/src/main/scala/net/psforever/objects/zones/ZoneVehicleActor.scala b/src/main/scala/net/psforever/objects/zones/ZoneVehicleActor.scala index ebabcc10d..fd243cdcd 100644 --- a/src/main/scala/net/psforever/objects/zones/ZoneVehicleActor.scala +++ b/src/main/scala/net/psforever/objects/zones/ZoneVehicleActor.scala @@ -3,9 +3,10 @@ package net.psforever.objects.zones import akka.actor.Actor import net.psforever.actors.zone.ZoneActor +import net.psforever.objects.serverobject.deploy.{Deployment, Interference} import net.psforever.objects.vital.InGameHistory import net.psforever.objects.{Default, Vehicle} -import net.psforever.types.Vector3 +import net.psforever.types.{DriveState, Vector3} import scala.annotation.tailrec import scala.collection.mutable @@ -73,15 +74,24 @@ class ZoneVehicleActor( vehicle.ClearHistory() zone.actor ! ZoneActor.RemoveFromBlockMap(vehicle) sender() ! Zone.Vehicle.HasDespawned(zone, vehicle) - case None => ; + case None => sender() ! Zone.Vehicle.CanNotDespawn(zone, vehicle, "can not find") } - case Zone.Vehicle.HasDespawned(_, _) => ; + case Zone.Vehicle.TryDeploymentChange(vehicle, toDeployState) + if toDeployState > DriveState.Undeploying && Interference.Test(zone, vehicle).nonEmpty => + sender() ! Zone.Vehicle.CanNotDeploy(zone, vehicle, toDeployState, "blocked by a nearby entity") - case Zone.Vehicle.CanNotDespawn(_, _, _) => ; + case Zone.Vehicle.TryDeploymentChange(vehicle, toDeployState) => + vehicle.Actor.tell(Deployment.TryDeploymentChange(toDeployState), sender()) - case _ => ; + case Zone.Vehicle.HasDespawned(_, _) => () + + case Zone.Vehicle.CanNotDespawn(_, _, _) => () + + case Zone.Vehicle.CanNotDeploy(_, _, _, _) => () + + case _ => () } }