Files
Nitrox/NitroxClient/GameLogic/MobileVehicleBay.cs
2025-07-06 00:23:46 +02:00

51 lines
2.1 KiB
C#

using NitroxClient.Communication.Abstract;
using NitroxClient.MonoBehaviours;
using NitroxModel.DataStructures;
using NitroxModel.DataStructures.GameLogic.Entities;
using NitroxModel.Packets;
using UnityEngine;
namespace NitroxClient.GameLogic;
public class MobileVehicleBay
{
public static bool TransmitLocalSpawns { get; set; } = true;
public static GameObject MostRecentlyCrafted { get; set; }
private readonly IPacketSender packetSender;
private readonly Vehicles vehicles;
public MobileVehicleBay(IPacketSender packetSender, Vehicles vehicles)
{
this.packetSender = packetSender;
this.vehicles = vehicles;
}
public void BeginCrafting(ConstructorInput constructor, GameObject constructedObject, TechType techType, float duration)
{
MostRecentlyCrafted = constructedObject;
// Sometimes build templates, such as the cyclops, are already tagged with IDs. Remove any that exist to retag.
// TODO: this seems to happen because various patches execute when the cyclops template loads (on game load).
// This will leave vehicles with NitroxEntity but an empty NitroxId. We need to chase these down and only call
// the code paths when the owner has a simulation lock.
Vehicles.RemoveNitroxEntitiesTagging(constructedObject);
if (!TransmitLocalSpawns)
{
return;
}
constructor.constructor.TryGetIdOrWarn(out NitroxId constructorId);
NitroxId constructedObjectId = NitroxEntity.GenerateNewId(constructedObject);
VehicleWorldEntity vehicleEntity = Vehicles.BuildVehicleWorldEntity(constructedObject, constructedObjectId, techType, constructorId);
packetSender.Send(new EntitySpawnedByClient(vehicleEntity));
// TODO: Fix remote players treating the SimulationOwnership change on the vehicle (they can't find it) even tho they're still in the
// process of spawning the said vehicle because it's done over multiple frames, while the SimulationOwnership packet is received
// right after the spawning started (so the processor won't find its target)
}
}