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 } } } } } ); }
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); }
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)); }