protected override void Init(MyObjectBuilder_DefinitionBase baseBuilder) { base.Init(baseBuilder); var builder = baseBuilder as MyObjectBuilder_SpawnGroupDefinition; Frequency = builder.Frequency; if (Frequency == 0.0f) { MySandboxGame.Log.WriteLine("Spawn group initialization: spawn group has zero frequency"); return; } SpawnRadius = 0.0f; BoundingSphere sphere = new BoundingSphere(Vector3.Zero, float.MinValue); Prefabs.Clear(); foreach (var prefab in builder.Prefabs) { SpawnGroupPrefab spawnPrefab = new SpawnGroupPrefab(); spawnPrefab.Position = prefab.Position; spawnPrefab.SubtypeId = prefab.SubtypeId; spawnPrefab.BeaconText = prefab.BeaconText; spawnPrefab.Speed = prefab.Speed; var prefabDef = MyDefinitionManager.Static.GetPrefabDefinition(spawnPrefab.SubtypeId); if (prefabDef == null) { System.Diagnostics.Debug.Assert(false, "Spawn group initialization: Could not get prefab " + spawnPrefab.SubtypeId); MySandboxGame.Log.WriteLine("Spawn group initialization: Could not get prefab " + spawnPrefab.SubtypeId); return; } BoundingSphere prefabSphere = prefabDef.BoundingSphere; prefabSphere.Center += spawnPrefab.Position; sphere.Include(prefabSphere); Prefabs.Add(spawnPrefab); } Voxels.Clear(); if (builder.Voxels != null) { foreach (var prefab in builder.Voxels) { SpawnGroupVoxel spawnPrefab = new SpawnGroupVoxel(); spawnPrefab.Offset = prefab.Offset; spawnPrefab.StorageName = prefab.StorageName; Voxels.Add(spawnPrefab); } } SpawnRadius = sphere.Radius + 5.0f; // Add 5m just to be sure IsEncounter = builder.IsEncounter; }
protected override void Init(MyObjectBuilder_DefinitionBase baseBuilder) { base.Init(baseBuilder); MyObjectBuilder_SpawnGroupDefinition definition = baseBuilder as MyObjectBuilder_SpawnGroupDefinition; this.Frequency = definition.Frequency; if (this.Frequency == 0f) { MySandboxGame.Log.WriteLine("Spawn group initialization: spawn group has zero frequency"); } else { this.SpawnRadius = 0f; BoundingSphere sphere = new BoundingSphere(Vector3.Zero, float.MinValue); this.Prefabs.Clear(); foreach (MyObjectBuilder_SpawnGroupDefinition.SpawnGroupPrefab prefab in definition.Prefabs) { SpawnGroupPrefab item = new SpawnGroupPrefab { Position = prefab.Position, SubtypeId = prefab.SubtypeId, BeaconText = prefab.BeaconText, Speed = prefab.Speed, ResetOwnership = prefab.ResetOwnership, PlaceToGridOrigin = prefab.PlaceToGridOrigin, Behaviour = prefab.Behaviour, BehaviourActivationDistance = prefab.BehaviourActivationDistance }; if (MyDefinitionManager.Static.GetPrefabDefinition(item.SubtypeId) == null) { MySandboxGame.Log.WriteLine("Spawn group initialization: Could not get prefab " + item.SubtypeId); return; } this.Prefabs.Add(item); } this.Voxels.Clear(); if (definition.Voxels != null) { foreach (MyObjectBuilder_SpawnGroupDefinition.SpawnGroupVoxel voxel in definition.Voxels) { SpawnGroupVoxel item = new SpawnGroupVoxel { Offset = voxel.Offset, StorageName = voxel.StorageName, CenterOffset = voxel.CenterOffset }; this.Voxels.Add(item); } } this.SpawnRadius = sphere.Radius + 5f; this.IsEncounter = definition.IsEncounter; this.IsCargoShip = definition.IsCargoShip; this.IsPirate = definition.IsPirate; this.ReactorsOn = definition.ReactorsOn; } }
public unsafe void ReloadPrefabs() { BoundingSphere sphere = new BoundingSphere(Vector3.Zero, float.MinValue); float num = 0f; using (List <SpawnGroupPrefab> .Enumerator enumerator = this.Prefabs.GetEnumerator()) { while (true) { if (!enumerator.MoveNext()) { break; } SpawnGroupPrefab current = enumerator.Current; MyPrefabDefinition prefabDefinition = MyDefinitionManager.Static.GetPrefabDefinition(current.SubtypeId); if (prefabDefinition != null) { BoundingSphere boundingSphere = prefabDefinition.BoundingSphere; Vector3 * vectorPtr1 = (Vector3 *)ref boundingSphere.Center; vectorPtr1[0] += current.Position; sphere.Include(boundingSphere); if (prefabDefinition.CubeGrids == null) { continue; } foreach (MyObjectBuilder_CubeGrid grid in prefabDefinition.CubeGrids) { float cubeSize = MyDefinitionManager.Static.GetCubeSize(grid.GridSizeEnum); num = Math.Max(num, 2f * cubeSize); } continue; } MySandboxGame.Log.WriteLine("Spawn group initialization: Could not get prefab " + current.SubtypeId); return; } } this.SpawnRadius = sphere.Radius + num; this.m_initialized = true; }
private static void ClassifySpawnGroups() { foreach (MySpawnGroupDefinition spawnGroupDefinition in MyDefinitionManager.Static.GetSpawnGroupDefinitions()) { try { if (spawnGroupDefinition == null) { continue; } if (!spawnGroupDefinition.Public) { continue; } if (spawnGroupDefinition.Prefabs == null || spawnGroupDefinition.Prefabs.Count == 0) { continue; } PrefabType type = spawnGroupDefinition.IsEncounter ? PrefabType.Encounter : spawnGroupDefinition.IsCargoShip ? PrefabType.CargoShip : (!spawnGroupDefinition.IsEncounter && !spawnGroupDefinition.IsPirate) ? PrefabType.CargoShip : PrefabType.None; if (type == PrefabType.None) { continue; } string spawnGroupName = spawnGroupDefinition.Id.SubtypeName; if (string.IsNullOrEmpty(spawnGroupName)) { spawnGroupName = "wasNullOrEmpty"; } string mod = string.IsNullOrEmpty(spawnGroupDefinition.Context.ModName) ? "Vanilla" : spawnGroupDefinition.Context.ModName; foreach (MySpawnGroupDefinition.SpawnGroupPrefab prefab in spawnGroupDefinition.Prefabs.AsReadOnly()) { MyPrefabDefinition prefabDef = MyDefinitionManager.Static.GetPrefabDefinition(prefab.SubtypeId); if (prefabDef == null) { continue; } if (prefabDef.CubeGrids.Length == 0) { continue; } if (!prefabDef.Public) { continue; } string name = prefabDef.CubeGrids[0].DisplayName; SpawnGroupPrefab sgp = new SpawnGroupPrefab(spawnGroupName, name, type, false, false, mod); switch (type) { case PrefabType.Encounter: if (EncounterPrefabs.ContainsKey(name)) { continue; } EncounterPrefabs.Add(name, sgp); continue; case PrefabType.CargoShip: if (CargoShipPrefabs.ContainsKey(name)) { continue; } CargoShipPrefabs.Add(name, sgp); continue; case PrefabType.None: continue; case PrefabType.SubGrid: continue; default: continue; } } } catch (Exception e) { StaticLog.WriteToLog("ClassifySpawnGroups", e.ToString(), LogType.Exception); } } foreach (KeyValuePair <string, SpawnGroupPrefab> prefab in EncounterPrefabs) { StaticLog.WriteToLog("ClassifySpawnGroups-Encounter", $"{prefab.Value}", LogType.General); } foreach (KeyValuePair <string, SpawnGroupPrefab> prefab in CargoShipPrefabs) { StaticLog.WriteToLog("ClassifySpawnGroups-CargoShip", $"{prefab.Value}", LogType.General); } Ready = true; }