/// <summary> /// This asteroid was destroyed, see if it is big enough for child asteroids to spawn, and if so spawn them. /// </summary> /// <param name="Asteroid"></param> internal static void SpawnSubAsteroids(Entity Asteroid, DateTime atDateTime) { Game game = Asteroid.Manager.Game; MassVolumeDB ADB = Asteroid.GetDataBlob <MassVolumeDB>(); //const double massDefault = 1.5e+12; //150 B tonnes? const double massThreshold = 1.5e+9; //150 M tonnes? if (ADB.Mass > massThreshold) { //spawn new asteroids. call the asteroid factory? double newMass = ADB.Mass * 0.4; //add a random factor into this? do we care? will mass be printed to the player? OrbitDB origOrbit = Asteroid.GetDataBlob <OrbitDB>(); PositionDB pDB = Asteroid.GetDataBlob <PositionDB>(); EntityManager mySystem = Asteroid.Manager; var origVel = OrbitProcessor.AbsoluteOrbitalVector_AU(origOrbit, atDateTime); //public static Entity CreateAsteroid(StarSystem starSys, Entity target, DateTime collisionDate, double asteroidMass = -1.0) //I need the target entity, the collisionDate, and the starSystem. I may have starsystem from guid. //Ok so this should create the asteroid without having to add the new asteroids to a list. as that is done in the factory. Entity newAsteroid1 = AsteroidFactory.CreateAsteroid4(pDB.AbsolutePosition_AU, origOrbit, atDateTime, newMass); //var newOrbit = OrbitDB.FromVector(origOrbit.Parent, ) Entity newAsteroid2 = AsteroidFactory.CreateAsteroid4(pDB.AbsolutePosition_AU, origOrbit, atDateTime, newMass); mySystem.RemoveEntity(Asteroid); //Randomize the number of created asteroids? } else { //delete the existing asteroid. PositionDB pDB = Asteroid.GetDataBlob <PositionDB>(); StarSystem mySystem; if (!game.Systems.TryGetValue(pDB.SystemGuid, out mySystem)) { throw new GuidNotFoundException(pDB.SystemGuid); } mySystem.RemoveEntity(Asteroid); } }