private void CreateCelestialSystemFromScene() { celestialSystem = resolver.Resolve <CelestialSystem>(); var planets = planetFactory.CollectAllAvailablePlanets(); var centralStar = planets.OrderByDescending(planet => planet.SimulatedEntity.Mass).First(); celestialSystem.AddCentralStar(centralStar); celestialSystem.Add(planets); var allAvailableWeapons = weaponFactory.GetAllAvailableTypes(); var onlyPlanets = planets.Except(new[] { centralStar }).ToList(); var randomIndex = Random.Range(0, onlyPlanets.Count); var randomPlanet = onlyPlanets.Skip(randomIndex).First(); var randomWeapon = allAvailableWeapons[Random.Range(0, allAvailableWeapons.Count)]; weaponFactory.AddWeapon(randomWeapon, randomPlanet); inputPlanetController.Control(randomPlanet, randomPlanet.Weapon); playerStatsProvider.SetPlayerPlanet(randomPlanet); onlyPlanets.Remove(randomPlanet); randomIndex = Random.Range(0, onlyPlanets.Count); randomPlanet = onlyPlanets.Skip(randomIndex).First(); randomWeapon = allAvailableWeapons[Random.Range(0, allAvailableWeapons.Count)]; weaponFactory.AddWeapon(randomWeapon, randomPlanet); aiPlanetController.Control(randomPlanet, randomPlanet.Weapon); }
public CelestialSystem CreateFromSerialized(IProjectileFactory projectileFactory, IPlanetFactory planetFactory, IWeaponFactory weaponFactory) { var celestialSystem = resolver.Resolve <CelestialSystem>(); var planets = new List <IPlanet>(); var central = scs.planets.First(planet => planet.isCentral); var centralStarPlanet = planetFactory.CreatePlanet(central.entity.pos); central.entity.FillIn(centralStarPlanet.SimulatedEntity); celestialSystem.AddCentralStar(centralStarPlanet); foreach (var serializedPlanet in scs.planets.Except(new [] { central })) { var appearance = new PlanetAppearance() { color = serializedPlanet.color }; var planet = planetFactory.CreatePlanet(serializedPlanet.entity.pos, appearance); weaponFactory.AddWeapon(serializedPlanet.weaponType, planet); serializedPlanet.entity.FillIn(planet.SimulatedEntity); planets.Add(planet); } celestialSystem.AddRaw(planets); projectileFactory.celestialSystem = celestialSystem; foreach (var projectile in scs.projectiles) { var proj = projectileFactory.CreateBullet(projectile.entity.pos); projectile.entity.FillIn(proj); } return(celestialSystem); }