first commit

This commit is contained in:
2025-07-06 00:23:46 +02:00
commit 38f50c8819
1788 changed files with 112878 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
using System.Collections.Generic;
using System.Linq;
using NitroxModel.DataStructures.GameLogic;
using NitroxModel.DataStructures.Unity;
using NitroxModel_Subnautica.DataStructures;
using NitroxServer.GameLogic.Entities.Spawning;
using NitroxServer.UnityStubs;
namespace NitroxServer_Subnautica.GameLogic.Entities.Spawning
{
public class SubnauticaEntitySpawnPointFactory : EntitySpawnPointFactory
{
private readonly Dictionary<string, EntitySpawnPoint> spawnPointsByUid = new Dictionary<string, EntitySpawnPoint>();
public override List<EntitySpawnPoint> From(AbsoluteEntityCell absoluteEntityCell, NitroxTransform transform, GameObject gameObject)
{
List<EntitySpawnPoint> spawnPoints = new List<EntitySpawnPoint>();
EntitySlotsPlaceholder entitySlotsPlaceholder = gameObject.GetComponent<EntitySlotsPlaceholder>();
if (gameObject.CreateEmptyObject)
{
SerializedEntitySpawnPoint entitySpawnPoint = new(gameObject.SerializedComponents, gameObject.Layer, absoluteEntityCell, transform);
HandleParenting(spawnPoints, entitySpawnPoint, gameObject);
spawnPoints.Add(entitySpawnPoint);
}
else if (!ReferenceEquals(entitySlotsPlaceholder, null))
{
foreach (EntitySlotData entitySlotData in entitySlotsPlaceholder.slotsData)
{
List<EntitySlot.Type> slotTypes = SlotsHelper.ConvertSlotTypes(entitySlotData.allowedTypes);
List<string> stringSlotTypes = slotTypes.Select(s => s.ToString()).ToList();
EntitySpawnPoint entitySpawnPoint = new(absoluteEntityCell,
entitySlotData.localPosition.ToDto(),
entitySlotData.localRotation.ToDto(),
stringSlotTypes,
entitySlotData.density,
entitySlotData.biomeType.ToString());
HandleParenting(spawnPoints, entitySpawnPoint, gameObject);
}
}
else
{
EntitySpawnPoint entitySpawnPoint = new(absoluteEntityCell, transform.LocalPosition, transform.LocalRotation, transform.LocalScale, gameObject.ClassId);
HandleParenting(spawnPoints, entitySpawnPoint, gameObject);
}
return spawnPoints;
}
private void HandleParenting(List<EntitySpawnPoint> spawnPoints, EntitySpawnPoint entitySpawnPoint, GameObject gameObject)
{
if (gameObject.Parent != null && spawnPointsByUid.TryGetValue(gameObject.Parent, out EntitySpawnPoint parent))
{
entitySpawnPoint.Parent = parent;
parent.Children.Add(entitySpawnPoint);
}
spawnPointsByUid[gameObject.Id] = entitySpawnPoint;
if (gameObject.Parent == null)
{
spawnPoints.Add(entitySpawnPoint);
}
}
}
}