// Use this for initialization
    public override void Start()
    {
        base.Start();

        delegates.decision           isEnemyFlagAtFriendlyBase = new delegates.decision(Decisions.isEnemyFlagCaptured);
        delegates.decision           enemyNear         = new delegates.decision(Decisions.enemySeen);
        delegates.gameObjectDecision itemSeen          = new delegates.gameObjectDecision(Decisions.itemSeen);
        delegates.gameObjectDecision checkInv          = new delegates.gameObjectDecision(Decisions.haveItem);
        delegates.decision           atbase            = new delegates.decision(Decisions.atBase);
        delegates.gameObjectDecision itemWithinRange   = new delegates.gameObjectDecision(Decisions.ItemInRange);
        delegates.decision           inAttackRange     = new delegates.decision(Decisions.inAttackRange);
        delegates.decision           checkhealth       = new delegates.decision(Decisions.checkHealth);
        delegates.decision           checkifPoweredUp  = new delegates.decision(Decisions.isPoweredUp);
        delegates.decision           checkFriendlyFlag = new delegates.decision(Decisions.friendlyFlagTaken);

        delegates.gameObjectAction moveToGameObj = new delegates.gameObjectAction(Actions.MoveToGameObj);
        delegates.vector3Action    moveToVec3    = new delegates.vector3Action(Actions.MoveToVec3);
        delegates.action           moveToEnemy   = new delegates.action(Actions.MoveToEnemy);
        delegates.action           attack        = new delegates.action(Actions.Attack);
        delegates.gameObjectAction dropflag      = new delegates.gameObjectAction(Actions.dropItem);
        delegates.gameObjectAction pickUpItem    = new delegates.gameObjectAction(Actions.pickUpItem);
        delegates.gameObjectAction useitem       = new delegates.gameObjectAction(Actions.useItem);

        decisionNode friendlyFlagAtBase = new decisionNode(this, checkFriendlyFlag);
        decisionNode isEnemyFlagAtBase  = new decisionNode(this, isEnemyFlagAtFriendlyBase);
        decisionNode isEnemyNear        = new decisionNode(this, enemyNear);
        decisionNode isEnemyNearTwo     = new decisionNode(this, enemyNear);

        gameObjectDecisonNode haveEnemyFlag       = new gameObjectDecisonNode(this, checkInv, getEnemyFlagObj());
        gameObjectDecisonNode checkForHealthKit   = new gameObjectDecisonNode(this, checkInv, getHealthKit());
        gameObjectDecisonNode checkForPowerUp     = new gameObjectDecisonNode(this, checkInv, getPowerUp());
        decisionNode          poweredUp           = new decisionNode(this, checkifPoweredUp);
        decisionNode          atBaseFriendlyFlag  = new decisionNode(this, atbase);
        decisionNode          atBaseEnemyFlag     = new decisionNode(this, atbase);
        gameObjectDecisonNode isEnemyFlagInRange  = new gameObjectDecisonNode(this, itemWithinRange, getEnemyFlagObj());
        gameObjectDecisonNode isHealthInRange     = new gameObjectDecisonNode(this, itemWithinRange, getHealthKit());
        decisionNode          isInAttackRange     = new decisionNode(this, inAttackRange);
        decisionNode          checkMyHealth       = new decisionNode(this, checkhealth);
        gameObjectDecisonNode ispowerInRange      = new gameObjectDecisonNode(this, itemWithinRange, getPowerUp());
        gameObjectDecisonNode haveFriendlyFlag    = new gameObjectDecisonNode(this, checkInv, getFriendlyFlagObj());
        gameObjectDecisonNode friendlyFlagInRange = new gameObjectDecisonNode(this, itemWithinRange, getFriendlyFlagObj());

        gameObjectDecisonNode seenHealth     = new gameObjectDecisonNode(this, itemSeen, getHealthKit());
        gameObjectDecisonNode seenHealthTwo  = new gameObjectDecisonNode(this, itemSeen, getHealthKit());
        gameObjectDecisonNode seenPowerup    = new gameObjectDecisonNode(this, itemSeen, getPowerUp());
        gameObjectDecisonNode seenPowerupTwo = new gameObjectDecisonNode(this, itemSeen, getPowerUp());

        gameObjectActionNode makeMoveToEnemyFlag    = new gameObjectActionNode(this, moveToGameObj, getEnemyFlagObj());
        gameObjectActionNode makeMoveToFriendlyFlag = new gameObjectActionNode(this, moveToGameObj, getFriendlyFlagObj());
        gameObjectActionNode makeMoveToBase         = new gameObjectActionNode(this, moveToGameObj, Base);
        vector3ActionNode    makeMoveToDefend       = new vector3ActionNode(this, moveToVec3, defencePoint);
        actionNode           makeMoveToEnemy        = new actionNode(this, moveToEnemy);

        gameObjectActionNode makeMoveToHealth  = new gameObjectActionNode(this, moveToGameObj, getHealthKit());
        gameObjectActionNode makeMoveToPowerup = new gameObjectActionNode(this, moveToGameObj, getPowerUp());

        actionNode           attackEnemy        = new actionNode(this, attack);
        gameObjectActionNode dropEnemyFlag      = new gameObjectActionNode(this, dropflag, getEnemyFlagObj());
        gameObjectActionNode dropFriendlyFlag   = new gameObjectActionNode(this, dropflag, getFriendlyFlagObj());
        gameObjectActionNode pickUpEnemyFlag    = new gameObjectActionNode(this, pickUpItem, getEnemyFlagObj());
        gameObjectActionNode pickUpFriendlyFlag = new gameObjectActionNode(this, pickUpItem, getFriendlyFlagObj());
        gameObjectActionNode pickupHealth       = new gameObjectActionNode(this, pickUpItem, getHealthKit());
        gameObjectActionNode useHealthKit       = new gameObjectActionNode(this, useitem, getHealthKit());
        gameObjectActionNode usePowerUp         = new gameObjectActionNode(this, useitem, getPowerUp());
        gameObjectActionNode pickuppowerup      = new gameObjectActionNode(this, pickUpItem, getPowerUp());

        gameObjectDecisonNode haveFriendlyFlagTwo = new gameObjectDecisonNode(this, checkInv, getFriendlyFlagObj());
        gameObjectDecisonNode haveEnemyFlagTwo    = new gameObjectDecisonNode(this, checkInv, getEnemyFlagObj());



        //First passed in child is the left node and the second is the right
        friendlyFlagAtBase.addChildren(seenHealth, seenHealthTwo);

        seenHealthTwo.addChildren(isHealthInRange, seenPowerupTwo);

        seenPowerupTwo.addChildren(ispowerInRange, isEnemyNearTwo);

        isEnemyNearTwo.addChildren(haveFriendlyFlagTwo, haveEnemyFlag);

        haveFriendlyFlagTwo.addChildren(atBaseFriendlyFlag, checkMyHealth);

        haveFriendlyFlag.addChildren(atBaseFriendlyFlag, friendlyFlagInRange);

        atBaseFriendlyFlag.addChildren(dropFriendlyFlag, makeMoveToBase);

        friendlyFlagInRange.addChildren(pickUpFriendlyFlag, makeMoveToFriendlyFlag);

        seenHealth.addChildren(isHealthInRange, seenPowerup);

        isHealthInRange.addChildren(pickupHealth, makeMoveToHealth);

        seenPowerup.addChildren(ispowerInRange, isEnemyNear);

        ispowerInRange.addChildren(pickuppowerup, makeMoveToPowerup);

        isEnemyNear.addChildren(haveEnemyFlagTwo, isEnemyFlagAtBase);

        haveEnemyFlagTwo.addChildren(atBaseEnemyFlag, checkMyHealth);

        checkMyHealth.addChildren(checkForPowerUp, checkForHealthKit);

        isEnemyFlagAtBase.addChildren(makeMoveToDefend, haveEnemyFlag);

        checkForPowerUp.addChildren(usePowerUp, isInAttackRange);

        checkForHealthKit.addChildren(useHealthKit, makeMoveToHealth);

        isInAttackRange.addChildren(attackEnemy, makeMoveToEnemy);

        haveEnemyFlag.addChildren(atBaseEnemyFlag, isEnemyFlagInRange);

        atBaseEnemyFlag.addChildren(dropEnemyFlag, makeMoveToBase);

        isEnemyFlagInRange.addChildren(pickUpEnemyFlag, makeMoveToEnemyFlag);

        decisionTree = new DecisionTree(friendlyFlagAtBase);
    }