first commit
This commit is contained in:
54
NitroxPatcher/Patches/Dynamic/IncubatorEgg_HatchNow_Patch.cs
Normal file
54
NitroxPatcher/Patches/Dynamic/IncubatorEgg_HatchNow_Patch.cs
Normal file
@@ -0,0 +1,54 @@
|
||||
using System.Reflection;
|
||||
using NitroxClient.GameLogic;
|
||||
using NitroxClient.MonoBehaviours;
|
||||
using NitroxModel.Core;
|
||||
using NitroxModel.DataStructures;
|
||||
using NitroxModel.DataStructures.GameLogic.Entities;
|
||||
using NitroxModel.Helper;
|
||||
using NitroxModel_Subnautica.DataStructures;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NitroxPatcher.Patches.Dynamic;
|
||||
|
||||
public sealed partial class IncubatorEgg_HatchNow_Patch : NitroxPatch, IDynamicPatch
|
||||
{
|
||||
private static readonly MethodInfo TARGET_METHOD = Reflect.Method((IncubatorEgg t) => t.HatchNow());
|
||||
|
||||
public static bool Prefix(IncubatorEgg __instance)
|
||||
{
|
||||
StartHatchingVisuals(__instance);
|
||||
|
||||
SpawnBabiesIfSimulating(__instance);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void StartHatchingVisuals(IncubatorEgg egg)
|
||||
{
|
||||
egg.fxControl.Play();
|
||||
Utils.PlayFMODAsset(egg.hatchSound, egg.transform, 30f);
|
||||
|
||||
SafeAnimator.SetBool(egg.animationController.eggAnimator, egg.animParameter, true);
|
||||
}
|
||||
|
||||
private static void SpawnBabiesIfSimulating(IncubatorEgg egg)
|
||||
{
|
||||
SimulationOwnership simulationOwnership = NitroxServiceLocator.LocateService<SimulationOwnership>();
|
||||
|
||||
NitroxEntity serverKnownParent = egg.GetComponentInParent<NitroxEntity>();
|
||||
Validate.NotNull(serverKnownParent, "Could not find a server known parent for incubator egg");
|
||||
|
||||
// Only spawn the babies if we are simulating the main incubator platform.
|
||||
if (simulationOwnership.HasAnyLockType(serverKnownParent.Id))
|
||||
{
|
||||
GameObject baby = UnityEngine.Object.Instantiate<GameObject>(egg.seaEmperorBabyPrefab);
|
||||
baby.transform.position = egg.attachPoint.transform.position;
|
||||
baby.transform.localRotation = Quaternion.identity;
|
||||
|
||||
NitroxId babyId = NitroxEntity.GenerateNewId(baby);
|
||||
|
||||
WorldEntity entity = new(baby.transform.position.ToDto(), baby.transform.rotation.ToDto(), baby.transform.localScale.ToDto(), TechType.SeaEmperorBaby.ToDto(), 3, "09883a6c-9e78-4bbf-9561-9fa6e49ce766", false, babyId, null);
|
||||
Resolve<Entities>().BroadcastEntitySpawnedByClient(entity);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user