first commit
This commit is contained in:
50
NitroxClient/GameLogic/MobileVehicleBay.cs
Normal file
50
NitroxClient/GameLogic/MobileVehicleBay.cs
Normal file
@@ -0,0 +1,50 @@
|
||||
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)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user