Files
Nitrox/NitroxClient/GameLogic/Spawning/Metadata/Processor/EggMetadataProcessor.cs
2025-07-06 00:23:46 +02:00

40 lines
1.7 KiB
C#

using NitroxClient.GameLogic.Spawning.Metadata.Processor.Abstract;
using NitroxClient.MonoBehaviours;
using NitroxModel.DataStructures.GameLogic.Entities.Metadata;
using UnityEngine;
namespace NitroxClient.GameLogic.Spawning.Metadata.Processor;
public class EggMetadataProcessor : EntityMetadataProcessor<EggMetadata>
{
public override void ProcessMetadata(GameObject gameObject, EggMetadata metadata)
{
if (!gameObject.TryGetComponent(out CreatureEgg creatureEgg))
{
Log.Error($"[{nameof(EggMetadataProcessor)}] Could not find {nameof(CreatureEgg)} on {gameObject.name}");
return;
}
if (metadata.TimeStartHatching == -1f)
{
// If the egg is not in a water park we only need its progress value
creatureEgg.progress = metadata.Progress;
return;
}
// If the egg is in a water park we only need its time start hatching value
// the current progress will be automatically computed by UpdateProgress()
creatureEgg.timeStartHatching = metadata.TimeStartHatching;
// While being fully loaded, the base is inactive and coroutines shouldn't be started (they'll throw an exception)
// To avoid, that we postpone their execution to 1 more second which is enough because time is frozen during initial sync
if (Multiplayer.Main && !Multiplayer.Main.InitialSyncCompleted &&
creatureEgg.timeStartHatching + creatureEgg.GetHatchDuration() < DayNightCycle.main.timePassedAsFloat)
{
creatureEgg.timeStartHatching = DayNightCycle.main.timePassedAsFloat + 1 - creatureEgg.GetHatchDuration();
}
creatureEgg.UpdateProgress();
}
}