示例#1
0
        public void Init(
            IEnumerable <PlanetContext> planets,
            GravitySystem gravitySystem,
            SystemsUpdater systemsUpdater,
            HealthsContainer healthsContainer,
            RocketState[] rocketsStates
            )
        {
            MovementSystem = new RocketsMovementSystem(gravitySystem);
            systemsUpdater.AddPhysicsTicker(MovementSystem);
            _rocketsFactory = new RocketsFactory(
                _rockets,
                MovementSystem,
                _rocketsParent,
                healthsContainer,
                _cameraTransform
                );
            _rocketsFactory.CreateRockets(rocketsStates);

            foreach (var planet in planets)
            {
                planet.CannonProvider.SetFactory(_rocketsFactory);
                var cannon = planet.CannonProvider.GetCannon();
                systemsUpdater.AddFrameTicker(cannon);
            }
        }
示例#2
0
        private void Start()
        {
            var gameState = ProjectContext.Instance.GameLoader.GameState;

            _planetsContext.Init(gameState.Planets);
            _sunSystemContext.Init(_planetsContext.PlanetsStorage.Planets);
            _systemsUpdater.AddFrameTicker(_sunSystemContext.OrbitsSystem);
            _gravityContext.Init(_planetsContext.PlanetsStorage.Planets);

            _healthsContext.Init(
                _gravityContext.GravitySystem,
                _sunSystemContext.OrbitsSystem,
                _planetsContext.PlanetsStorage
                );

            _fireContext.Init(
                _planetsContext.PlanetsStorage.Planets,
                _gravityContext.GravitySystem,
                _systemsUpdater,
                _healthsContext.HealthsContainer,
                gameState.Rockets
                );

            _controllsContext.Init(_planetsContext.PlanetsStorage, _systemsUpdater);

            var gameSave = ProjectContext.Instance.GameSave;

            gameSave.SetGameEntities(_planetsContext.PlanetsStorage, _fireContext.MovementSystem);

            _resultController = new GameResultController();
            _planetsContext.PlanetsStorage.OnAllEnemiesKilled += _resultController.Win;
            _planetsContext.PlanetsStorage.OnPlayerKilled     += _resultController.Loose;
        }
示例#3
0
        public AIStorage(
            IEnumerable <PlanetContext> planetsContext,
            SystemsUpdater systemsUpdater,
            Range fireInterval
            )
        {
            _systemsUpdater = systemsUpdater;
            _ais            = new SortedDictionary <int, AIController>();

            foreach (var planet in planetsContext)
            {
                var cannon = planet.CannonProvider.GetCannon();
                var ai     = new AIController(cannon, fireInterval);
                _systemsUpdater.AddFrameTicker(ai);
                _ais.Add(planet.Id, ai);
            }
        }