diff --git a/src/main/scala/net/psforever/objects/ce/TelepadLike.scala b/src/main/scala/net/psforever/objects/ce/TelepadLike.scala index 362a2985a..ad018f418 100644 --- a/src/main/scala/net/psforever/objects/ce/TelepadLike.scala +++ b/src/main/scala/net/psforever/objects/ce/TelepadLike.scala @@ -1,7 +1,7 @@ // Copyright (c) 2018 PSForever package net.psforever.objects.ce -import akka.actor.{ActorContext, Cancellable} +import akka.actor.ActorContext import net.psforever.objects.{Default, TelepadDeployable, Vehicle} import net.psforever.objects.serverobject.PlanetSideServerObject import net.psforever.objects.serverobject.structures.Amenity @@ -147,6 +147,12 @@ object TelepadLike { LocalAction.SendResponse(GenericObjectActionMessage(telepadGUID, 28)) ) } + + def InitializeTelepadDeployable(zone: Zone, internal: InternalTelepad, pad: TelepadDeployable): Unit = { + internal.Telepad = pad.GUID + TelepadLike.StartRouterInternalTelepad(zone, internal.Owner.GUID, internal) + pad.Actor ! TelepadLike.Activate(internal) + } } /** @@ -157,8 +163,6 @@ object TelepadLike { * @param obj an entity that extends `TelepadLike` */ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor { - var setup: Cancellable = Default.Cancellable - def receive: akka.actor.Actor.Receive = { case TelepadLike.Activate(o: InternalTelepad) if obj eq o => obj.Active = true @@ -166,11 +170,9 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor { case TelepadLike.Deactivate(o: InternalTelepad) if obj eq o => obj.Active = false val zone = obj.Zone - zone.GUID(obj.Telepad) match { - case Some(oldTpad: TelepadDeployable) - if !obj.Active && !setup.isCancelled => + zone.GUID(obj.Telepad).collect { + case oldTpad: TelepadDeployable if oldTpad.Active => oldTpad.Actor ! TelepadLike.SeverLink(obj) - case _ => ; } obj.Telepad = None zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.SendResponse(ObjectDeleteMessage(obj.GUID, 0))) @@ -178,15 +180,20 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor { case TelepadLike.RequestLink(tpad: TelepadDeployable) => val zone = obj.Zone if (obj.Active) { - zone.GUID(obj.Telepad) match { - case Some(oldTpad: TelepadDeployable) if !obj.Active && !setup.isCancelled => - oldTpad.Actor ! TelepadLike.SeverLink(obj) - case _ => ; - } - obj.Telepad = tpad.GUID - //zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.StartRouterInternalTelepad(obj.Owner.GUID, obj.GUID, obj)) - TelepadLike.StartRouterInternalTelepad(zone, obj.Owner.GUID, obj) - tpad.Actor ! TelepadLike.Activate(obj) + zone + .GUID(obj.Telepad) + .collect { + case oldTpad: TelepadDeployable if oldTpad eq tpad => + Some(oldTpad) + case oldTpad: TelepadDeployable if oldTpad.Active => + oldTpad.Actor ! TelepadLike.SeverLink(obj) + TelepadLike.InitializeTelepadDeployable(zone, obj, tpad) + Some(oldTpad) + } + .orElse { + TelepadLike.InitializeTelepadDeployable(zone, obj, tpad) + None + } } else { val channel = obj.Owner.asInstanceOf[Vehicle].OwnerName.getOrElse("") zone.LocalEvents ! LocalServiceMessage(channel, LocalAction.RouterTelepadMessage("@Teleport_NotDeployed")) @@ -200,6 +207,6 @@ class TelepadControl(obj: InternalTelepad) extends akka.actor.Actor { zone.LocalEvents ! LocalServiceMessage(zone.id, LocalAction.SendResponse(ObjectDeleteMessage(obj.GUID, 0))) } - case _ => ; + case _ => () } } diff --git a/src/main/scala/net/psforever/objects/vehicles/control/AntControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/AntControl.scala index 32cc6f0c1..d1f4dc932 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/AntControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/AntControl.scala @@ -19,7 +19,7 @@ import scala.concurrent.duration._ class AntControl(vehicle: Vehicle) extends DeployingVehicleControl(vehicle) with AntTransferBehavior { - def ChargeTransferObject = vehicle + def ChargeTransferObject: Vehicle = vehicle override def commonEnabledBehavior: Receive = super.commonEnabledBehavior.orElse(antBehavior) @@ -38,7 +38,7 @@ class AntControl(vehicle: Vehicle) vehicle.Actor, TransferBehavior.Charging(Ntu.Nanites) ) - case _ => ; + case _ => () } } @@ -51,7 +51,7 @@ class AntControl(vehicle: Vehicle) state match { case DriveState.Undeploying => TryStopChargingEvent(vehicle) - case _ => ; + case _ => () } } } diff --git a/src/main/scala/net/psforever/objects/vehicles/control/DeployingVehicleControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/DeployingVehicleControl.scala index 2a05d9ec7..445782021 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/DeployingVehicleControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/DeployingVehicleControl.scala @@ -20,7 +20,7 @@ import net.psforever.types._ class DeployingVehicleControl(vehicle: Vehicle) extends VehicleControl(vehicle) with DeploymentBehavior { - def DeploymentObject = vehicle + def DeploymentObject: Vehicle = vehicle override def commonEnabledBehavior : Receive = super.commonEnabledBehavior.orElse(deployBehavior) @@ -45,7 +45,7 @@ class DeployingVehicleControl(vehicle: Vehicle) override def commonDeleteBehavior : Receive = super.commonDeleteBehavior .orElse { - case msg : Deployment.TryUndeploy => + case msg: Deployment.TryUndeploy => deployBehavior.apply(msg) } @@ -53,7 +53,7 @@ class DeployingVehicleControl(vehicle: Vehicle) * Even when disabled, the vehicle can be made to undeploy. */ override def PrepareForDisabled(kickPassengers: Boolean) : Unit = { - vehicle.Actor ! Deployment.TryUndeploy(DriveState.Undeploying) + TryUndeployStateChange(DriveState.Undeploying) super.PrepareForDisabled(kickPassengers) } diff --git a/src/main/scala/net/psforever/objects/vehicles/control/RouterControl.scala b/src/main/scala/net/psforever/objects/vehicles/control/RouterControl.scala index 010a44ee0..7c8cf0238 100644 --- a/src/main/scala/net/psforever/objects/vehicles/control/RouterControl.scala +++ b/src/main/scala/net/psforever/objects/vehicles/control/RouterControl.scala @@ -24,11 +24,10 @@ class RouterControl(vehicle: Vehicle) override def specificResponseToDeployment(state: DriveState.Value): Unit = { state match { case DriveState.Deployed => - vehicle.Utility(UtilityType.internal_router_telepad_deployable) match { - case Some(util: Utility.InternalTelepad) => util.Actor ! TelepadLike.Activate(util) - case _ => ; + vehicle.Utility(UtilityType.internal_router_telepad_deployable).collect { + case util: Utility.InternalTelepad => util.Actor ! TelepadLike.Activate(util) } - case _ => ; + case _ => () } } @@ -40,11 +39,10 @@ class RouterControl(vehicle: Vehicle) override def specificResponseToUndeployment(state: DriveState.Value): Unit = { state match { case DriveState.Undeploying => - vehicle.Utility(UtilityType.internal_router_telepad_deployable) match { - case Some(util: Utility.InternalTelepad) => util.Actor ! TelepadLike.Deactivate(util) - case _ => ; + vehicle.Utility(UtilityType.internal_router_telepad_deployable).collect { + case util: Utility.InternalTelepad => util.Actor ! TelepadLike.Deactivate(util) } - case _ => ; + case _ => () } } }