@@ -7,6 +7,7 @@ import {GameStateManager, GameEvent} from "../../../services/state/game/service"
77import { InputStateManager } from "../../../services/state/input/service" ;
88import { IArmyCommandStrategyFactory } from "../../../services/army_command_strategy/factory/interface" ;
99import { IArmyCommandStrategy } from "../../../services/army_command_strategy/interface" ;
10+ import { BaseUnit } from "../../../game_objects/units/base" ;
1011
1112@injectable ( )
1213export class AIController extends BaseController {
@@ -21,32 +22,49 @@ export class AIController extends BaseController {
2122 }
2223
2324 private _playerAis : IArmyCommandStrategy [ ] = [ ] ;
25+ private _numOfPlayers : number ;
2426
25- init ( ) {
26- this . _gameState . subscribe ( GameEvent . TurnComplete , playerNum => this . _startNextTurn ( playerNum ) ) ;
2727
28- let totalPlayers = this . _gameState . getNumOfPlayers ( ) ;
28+ create ( ) {
29+ this . _gameState . subscribe ( GameEvent . TurnStart , this . _onTurnStart ) ;
30+ this . _gameState . subscribe ( GameEvent . UnitMoveActionSelected , this . _onMoveActionSelected ) ;
31+ this . _gameState . subscribe ( GameEvent . UnitMoveCompleted , this . _onMoveCompleted ) ;
32+ this . _gameState . subscribe ( GameEvent . UnitAttackActionSelected , this . _onAttackActionSelected ) ;
33+ this . _gameState . subscribe ( GameEvent . UnitAttackCompleted , this . _onAttackCompleted ) ;
34+ this . _gameState . subscribe ( GameEvent . TurnComplete , this . _onTurnComplete ) ;
2935
30- for ( let i = 0 ; i < totalPlayers ; i ++ ) {
31- this . _playerAis . push ( this . _armyStategyFactory . getForPlayer ( i ) ) ;
36+ this . _numOfPlayers = this . _gameState . getNumOfPlayers ( ) ;
37+
38+ for ( let i = 0 ; i < this . _numOfPlayers ; i ++ ) {
39+ this . _playerAis . push ( this . _armyStategyFactory . create ( i ) ) ;
3240 }
3341
3442 this . _gameState . dispatch ( GameEvent . TurnStart , 0 ) ;
3543 }
3644
37- update ( ) {
38-
39- }
40-
41- render ( ) {
45+ private _onTurnStart = ( playerNum : number ) : void => {
46+ this . _playerAis [ playerNum ] . selectNextUnit ( ) ;
47+ } ;
48+
49+ private _onMoveActionSelected = ( unit : BaseUnit ) : void => {
50+ this . _playerAis [ unit . belongsToPlayer ] . moveUnit ( unit ) ;
51+ } ;
4252
43- }
53+ private _onMoveCompleted = ( unit : BaseUnit ) : void => {
54+ this . _playerAis [ unit . belongsToPlayer ] . beginAttack ( unit ) ;
55+ } ;
4456
45- private _startNextTurn ( playerNum : number ) : void {
46- let totalPlayers = this . _gameState . getNumOfPlayers ( ) ;
57+ private _onAttackActionSelected = ( unit : BaseUnit ) : void => {
58+ this . _playerAis [ unit . belongsToPlayer ] . attackWithUnit ( unit ) ;
59+ } ;
4760
48- let nextPlayer = playerNum === totalPlayers - 1 ? 0 : playerNum + 1 ;
61+ private _onAttackCompleted = ( unit : BaseUnit ) : void => {
62+ this . _playerAis [ unit . belongsToPlayer ] . selectNextUnit ( ) ;
63+ } ;
64+
65+ private _onTurnComplete = ( playerNum : number ) : void => {
66+ let nextPlayer = playerNum === ( this . _numOfPlayers - 1 ) ? 0 : ( playerNum + 1 ) ;
4967
5068 this . _gameState . dispatch ( GameEvent . TurnStart , nextPlayer ) ;
51- }
69+ } ;
5270}
0 commit comments