// returns initial state private State InitStates() { aiTools = GetComponent <AiTools>(); aiTools.Init(); SearchEnemy searchEnemyState = new SearchEnemy(aiTools); SearchHealthPack searchHealthPackState = new SearchHealthPack(aiTools); Attack attackState = new Attack(aiTools); Defence defenceState = new Defence(aiTools); searchEnemyState.AddTransition( new Transition( () => aiTools.agentState.isEnemyVisible, attackState ) ); searchEnemyState.AddTransition( new Transition( () => (aiTools.world.healthPacksAvailable > 0) && (aiTools.agentState.health <= GameDefines.LOW_HP), searchHealthPackState ) ); attackState.AddTransition( new Transition( () => (aiTools.agentState.health <= GameDefines.MEDIUM_HP), defenceState ) ); attackState.AddTransition( new Transition( () => (aiTools.agentState.health > GameDefines.MEDIUM_HP) && !aiTools.agentState.isEnemyVisible, searchEnemyState ) ); defenceState.AddTransition( new Transition( () => (aiTools.world.healthPacksAvailable > 0) && ((aiTools.agentState.health <= GameDefines.LOW_HP) || !aiTools.agentState.isEnemyVisible), searchHealthPackState ) ); defenceState.AddTransition( new Transition( () => (!aiTools.agentState.isEnemyVisible && ((aiTools.world.healthPacksAvailable == 0) || aiTools.agentState.health > GameDefines.LOW_HP)), searchEnemyState ) ); searchHealthPackState.AddTransition( new Transition( () => (aiTools.agentState.health > GameDefines.LOW_HP) || (aiTools.world.healthPacksAvailable == 0), searchEnemyState ) ); return(searchEnemyState); }