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;
        }
Example #2
0
        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;
        }
Example #3
0
        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;
            }
        }
Example #4
0
        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;
        }
Example #5
0
        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;
        }