Пример #1
0
        private void SetupEnginesAndEntities()
        {
            _EnginesRoot   = new EnginesRoot(new UnitySumbmissionEntityViewScheduler());
            _EntityFactory = _EnginesRoot.GenerateEntityFactory();
            IEntityFunctions  entityFunctions   = _EnginesRoot.GenerateEntityFunctions();
            GameObjectFactory gameObjectFactory = new GameObjectFactory();

            Sequencer damageSequence = new Sequencer();
            Sequencer roundSequence  = new Sequencer();

            ITime time = new Time();

            //Construct Tank(Player) engines
            TankSpawnerEngine  tankSpawnerEngine  = new TankSpawnerEngine(gameObjectFactory, _EntityFactory);
            TankMovementEngine tankMovementEngine = new TankMovementEngine(time);
            TankHudEngine      tankHudEngine      = new TankHudEngine();
            HealthEngine       healthEngine       = new HealthEngine(damageSequence);

            //Construct Weapon engines
            ShellSpawnerEngine shellSpawnerEngine = new ShellSpawnerEngine(gameObjectFactory, _EntityFactory, time);
            ShellDamageEngine  shellDamageEngine  = new ShellDamageEngine(damageSequence);

            //Construct Camera engines
            CameraEngine cameraEngine = new CameraEngine(time);

            //Add tanks engines
            _EnginesRoot.AddEngine(tankSpawnerEngine);
            _EnginesRoot.AddEngine(new TankInputEngine());
            _EnginesRoot.AddEngine(tankMovementEngine);
            _EnginesRoot.AddEngine(new TankMovementEffectsEngine());
            _EnginesRoot.AddEngine(tankHudEngine);
            _EnginesRoot.AddEngine(healthEngine);

            //Add weapon engines
            _EnginesRoot.AddEngine(new TankShootingEngine());
            _EnginesRoot.AddEngine(shellSpawnerEngine);
            _EnginesRoot.AddEngine(shellDamageEngine);

            //Add camera engines
            _EnginesRoot.AddEngine(cameraEngine);

            damageSequence.SetSequence(
                new Steps
            {
                { shellDamageEngine,
                  new To {
                      new IStep[] { healthEngine }
                  } },
                { healthEngine,
                  new To {
                      { (int)DamageCondition.DAMAGE,
                            new IStep[] { tankHudEngine } },
                      { (int)DamageCondition.DEAD,
                            new IStep[] { tankMovementEngine } }
                  } }
            }
                );
        }
Пример #2
0
        void SetupEnginesAndEntities()
        {
            _enginesRoot       = new EnginesRoot(new UnitySumbmissionEntityViewScheduler());
            _entityFactory     = _enginesRoot.GenerateEntityFactory();
            _prefabsDictionary = new PrefabsDictionary(Application.persistentDataPath + "/prefabs.json");
            var entityFunctions = _enginesRoot.GenerateEntityFunctions();

            //GameObjectFactory factory = new GameObjectFactory();

            _mapManager = GameObject.FindGameObjectWithTag("HexGrid").GetComponent <HexGrid>();

            _uiService = _prefabsDictionary.Istantiate("UI Service").GetComponent <UIService>();

            Sequencer battleTurnSequence  = new Sequencer();
            Sequencer abilityUsedSequence = new Sequencer();

            ITime time = new Time();

            MapGeneratorEngine   mapGeneratorEngine   = new MapGeneratorEngine(_mapManager, _entityFactory, _prefabsDictionary);
            UnitSpawnerEngine    unitSpawnerEngine    = new UnitSpawnerEngine(_prefabsDictionary, _entityFactory, _mapManager);
            PlayerInputEngine    playerInputEngine    = new PlayerInputEngine(_mapManager);
            BattleInitEngine     battleInitEngine     = new BattleInitEngine(entityFunctions, _prefabsDictionary, _entityFactory);
            TurnOrderEngine      turnOrderEngine      = new TurnOrderEngine(battleTurnSequence, _uiService);
            UnitTurnActionEngine unitTurnActionEngine = new UnitTurnActionEngine(battleTurnSequence);
            UnitMovementEngine   unitMovementEngine   = new UnitMovementEngine(_mapManager);
            UnitHighlightEngine  unitHighlightEngine  = new UnitHighlightEngine(_mapManager);
            BattleHudEngine      battleHudEngine      = new BattleHudEngine(_uiService);
            HealthEngine         healthEngine         = new HealthEngine();

            AbilitySelectionEngine abilitySelectionEngine = new AbilitySelectionEngine(_uiService, abilityUsedSequence, _mapManager);
            AbilityTargetEngine    abilityTargetEngine    = new AbilityTargetEngine();


            battleTurnSequence.SetSequence(
                new Steps
            {
                {
                    turnOrderEngine,
                    new To
                    {
                        unitTurnActionEngine,
                    }
                },
                {
                    unitTurnActionEngine,
                    new To
                    {
                        { TurnCondition.starting, new IStep[] { playerInputEngine, battleHudEngine } },
                        { TurnCondition.ending, new IStep[] { playerInputEngine, battleHudEngine, turnOrderEngine } }
                    }
                },
            }
                );

            abilityUsedSequence.SetSequence(
                new Steps
            {
                {
                    abilitySelectionEngine,
                    new To
                    {
                        { new IStep[]  { abilityTargetEngine } },
                    }
                }
            }
                );

            AddEngine(mapGeneratorEngine);
            AddEngine(unitSpawnerEngine);
            AddEngine(playerInputEngine);
            AddEngine(battleInitEngine);
            AddEngine(turnOrderEngine);
            AddEngine(unitTurnActionEngine);
            AddEngine(unitMovementEngine);
            AddEngine(unitHighlightEngine);
            AddEngine(new CameraFollowTargetEngine(time));
            AddEngine(battleHudEngine);
            AddEngine(healthEngine);

            AddEngine(abilitySelectionEngine);
            AddEngine(abilityTargetEngine);
        }
Пример #3
0
        void SetupEnginesAndComponents()
        {
            _entityFactory = _enginesRoot = new EnginesRoot();

            GameObjectFactory factory = new GameObjectFactory();

            var enemyKilledObservable      = new EnemyKilledObservable();
            var scoreOnEnemyKilledObserver = new ScoreOnEnemyKilledObserver(enemyKilledObservable);

            Sequencer playerDamageSequence = new Sequencer();
            Sequencer enemyDamageSequence  = new Sequencer();

            var enemyAnimationEngine  = new EnemyAnimationEngine();
            var playerHealthEngine    = new HealthEngine(playerDamageSequence);
            var enemyHealthEngine     = new HealthEngine(enemyDamageSequence);
            var hudEngine             = new HUDEngine();
            var damageSoundEngine     = new DamageSoundEngine();
            var playerShootingEngine  = new PlayerGunShootingEngine(enemyKilledObservable, enemyDamageSequence);
            var playerMovementEngine  = new PlayerMovementEngine();
            var playerAnimationEngine = new PlayerAnimationEngine();
            var enemyAttackEngine     = new EnemyAttackEngine(playerDamageSequence);
            var enemyMovementEngine   = new EnemyMovementEngine();

            playerDamageSequence.SetSequence(
                new Steps()                                                  //sequence of steps
            {
                {                                                            //first step
                    enemyAttackEngine,                                       //this step can be triggered only by this engine through the Next function
                    new Dictionary <System.Enum, IStep[]>()                  //this step can lead only to one branch
                    {
                        { Condition.always, new [] { playerHealthEngine } }, //these engines will be called when the Next function is called with the Condition.always set
                    }
                },
                {                                                                                                                                                  //second step
                    playerHealthEngine,                                                                                                                            //this step can be triggered only by this engine through the Next function
                    new Dictionary <System.Enum, IStep[]>()                                                                                                        //this step can branch in two paths
                    {
                        { DamageCondition.damage, new IStep[] { hudEngine, damageSoundEngine } },                                                                  //these engines will be called when the Next function is called with the DamageCondition.damage set
                        { DamageCondition.dead, new IStep[] { hudEngine, damageSoundEngine, playerMovementEngine, playerAnimationEngine, enemyAnimationEngine } }, //these engines will be called when the Next function is called with the DamageCondition.dead set
                    }
                }
            }
                );

            enemyDamageSequence.SetSequence(
                new Steps()
            {
                {
                    playerShootingEngine,
                    new Dictionary <System.Enum, IStep[]>()
                    {
                        { Condition.always, new [] { enemyHealthEngine } },
                    }
                },
                {
                    enemyHealthEngine,
                    new Dictionary <System.Enum, IStep[]>()
                    {
                        { DamageCondition.damage, new IStep[] { enemyAnimationEngine } },
                        { DamageCondition.dead, new IStep[] { enemyMovementEngine, enemyAnimationEngine, playerShootingEngine } },
                    }
                }
            }
                );

            AddEngine(playerMovementEngine);
            AddEngine(playerAnimationEngine);
            AddEngine(playerShootingEngine);
            AddEngine(playerHealthEngine);
            AddEngine(new PlayerGunShootingFXsEngine());

            AddEngine(new EnemySpawnerEngine(factory, _entityFactory));
            AddEngine(enemyAttackEngine);
            AddEngine(enemyMovementEngine);
            AddEngine(enemyAnimationEngine);
            AddEngine(enemyHealthEngine);

            AddEngine(damageSoundEngine);
            AddEngine(hudEngine);
            AddEngine(new ScoreEngine(scoreOnEnemyKilledObserver));
        }