/// <summary>
    /// Método CreateBehaviourTree, que crea el árbol de comportamiento
    /// </summary>
    public override void CreateBehaviourTree()
    {
        // Quinta rama
        MoveToDestinationNode moveToDestinationNode = new MoveToDestinationNode(this);

        WanderNode      wanderNode      = new WanderNode(this, this.stillTime);
        EnoughSpaceNode enoughSpaceNode = new EnoughSpaceNode(this);
        Sequence        sequence6       = new Sequence(new List <Node>()
        {
            enoughSpaceNode, wanderNode
        });

        VillagerChooseDestinationNode chooseDestinationNode = new VillagerChooseDestinationNode(this);
        Selector selector3 = new Selector(new List <Node>()
        {
            sequence6, chooseDestinationNode
        });

        InDestinationNode inDestinationNode = new InDestinationNode(this, MINIMUM_DESTINY_DISTANCE);
        Sequence          sequence5         = new Sequence(new List <Node>()
        {
            inDestinationNode, selector3
        });

        Selector moveSelector = new Selector(new List <Node>()
        {
            sequence5, moveToDestinationNode
        });

        // Cuarta rama
        HasDestinationNode hasDestinationNode        = new HasDestinationNode(this);
        Inverter           destinationInvertedNode   = new Inverter(hasDestinationNode);
        Sequence           chooseDestinationSequence = new Sequence(new List <Node>()
        {
            destinationInvertedNode, chooseDestinationNode
        });

        // Tercera rama
        ZoneTimerNode zoneTimerNode      = new ZoneTimerNode(this);
        InZoneNode    inZoneNode         = new InZoneNode(this);
        Sequence      wanderZoneSequence = new Sequence(new List <Node>()
        {
            inZoneNode, zoneTimerNode, wanderNode
        });

        // Segunda rama
        StayStillNode       stayStillNode       = new StayStillNode(thisAgent, thisAnimator);
        GiveInformationNode giveInformationNode = new GiveInformationNode(this);
        RangeNode           marshallInRange     = new RangeNode(marshallInfoRange, playerTransform, this.transform);
        Sequence            sequence3           = new Sequence(new List <Node>()
        {
            marshallInRange, giveInformationNode, stayStillNode
        });

        HideInformationNode    hideInformationNode       = new HideInformationNode(this);
        Inverter               marshallRangeInvertedNode = new Inverter(marshallInRange);
        HasGivenInformatioNode hasGivenInformatioNode    = new HasGivenInformatioNode(this);
        Sequence               sequence2 = new Sequence(new List <Node>()
        {
            hasGivenInformatioNode, marshallRangeInvertedNode, hideInformationNode
        });

        Selector selector2 = new Selector(new List <Node>()
        {
            sequence2, sequence3
        });

        WitnessNode witnessNode = new WitnessNode(this);
        Sequence    sequence4   = new Sequence(new List <Node>()
        {
            witnessNode, selector2
        });

        Selector selector1 = new Selector(new List <Node>()
        {
            sequence2, sequence3, stayStillNode
        });

        VictimNode victimNode = new VictimNode(this);
        Sequence   sequence1  = new Sequence(new List <Node>()
        {
            victimNode, selector1
        });

        Selector staySelector = new Selector(new List <Node>()
        {
            sequence1, sequence4
        });

        // Primera rama
        MarshallCalledMeNode marshallCalledMeNode = new MarshallCalledMeNode(this);
        Sequence             detentionSequence    = new Sequence(new List <Node>()
        {
            marshallCalledMeNode, stayStillNode
        });

        // Nodo padre del árbol
        topNode = new Selector(new List <Node>()
        {
            detentionSequence, staySelector, wanderZoneSequence, chooseDestinationSequence, moveSelector
        });
    }
    /// <summary>
    /// Método CreateBehaviourTree, que crea el árbol de comportamiento
    /// </summary>
    public override void CreateBehaviourTree()
    {
        // Sexta rama
        MoveToDestinationNode moveToDestinationNode = new MoveToDestinationNode(this);

        WanderNode      wanderNode      = new WanderNode(this, this.stillTime);
        EnoughSpaceNode enoughSpaceNode = new EnoughSpaceNode(this);
        Sequence        sequence4       = new Sequence(new List <Node>()
        {
            enoughSpaceNode, wanderNode
        });

        ThiefChooseDestinationNoe chooseDestinationNode = new ThiefChooseDestinationNoe(this);
        Selector selector2 = new Selector(new List <Node>()
        {
            sequence4, chooseDestinationNode
        });

        InDestinationNode inDestinationNode = new InDestinationNode(this, MINIMUM_DESTINY_DISTANCE);
        Sequence          sequence3         = new Sequence(new List <Node>()
        {
            inDestinationNode, selector2
        });

        Selector moveSelector = new Selector(new List <Node>()
        {
            sequence3, moveToDestinationNode
        });

        // Quinta rama
        HasDestinationNode hasDestinationNode        = new HasDestinationNode(this);
        Inverter           destinationInvertedNode   = new Inverter(hasDestinationNode);
        Sequence           chooseDestinationSequence = new Sequence(new List <Node>()
        {
            destinationInvertedNode, chooseDestinationNode
        });

        // Cuarta rama
        ZoneTimerNode zoneTimerNode      = new ZoneTimerNode(this);
        InZoneNode    inZoneNode         = new InZoneNode(this);
        Sequence      wanderZoneSequence = new Sequence(new List <Node>()
        {
            inZoneNode, zoneTimerNode, wanderNode
        });

        // Tercera rama
        ChooseVictimNode   chooseVictimNode     = new ChooseVictimNode(this);
        VillagersCloseNode villagersCloseNode   = new VillagersCloseNode(this);
        Sequence           chooseVictimSequence = new Sequence(new List <Node>()
        {
            inZoneNode, villagersCloseNode, chooseVictimNode
        });

        MoveToVictimNode moveToVictimNode    = new MoveToVictimNode(this);
        HasVictimNode    hasVictimNode       = new HasVictimNode(this);
        Sequence         chaseVictimSequence = new Sequence(new List <Node>()
        {
            hasVictimNode, moveToVictimNode
        });

        ChooseIfWitnessNode chooseIfWitnessNode = new ChooseIfWitnessNode(this);
        StealNode           stealNode           = new StealNode(this);
        VictimCloseNode     victimCloseNode     = new VictimCloseNode(this);
        Sequence            stealSequence       = new Sequence(new List <Node>()
        {
            hasVictimNode, victimCloseNode, stealNode, chooseIfWitnessNode, chooseDestinationNode
        });

        Selector stealActionsSelector = new Selector(new List <Node>()
        {
            stealSequence, chaseVictimSequence, chooseVictimSequence
        });
        RangeNode    marshallInDetectRange           = new RangeNode(marshallDetectRange, playerTransform, this.transform);
        Inverter     marshallDetectRangeInvertedNode = new Inverter(marshallInDetectRange);
        CanStealNode canStealNode    = new CanStealNode(this);
        Sequence     robberySequence = new Sequence(new List <Node>()
        {
            canStealNode, marshallDetectRangeInvertedNode, stealActionsSelector
        });

        // Segunda rama
        StayStillNode       stayStillNode       = new StayStillNode(thisAgent, thisAnimator);
        GiveInformationNode giveInformationNode = new GiveInformationNode(this);
        RangeNode           marshallInInfoRange = new RangeNode(marshallInfoRange, playerTransform, this.transform);
        Sequence            sequence2           = new Sequence(new List <Node>()
        {
            marshallInInfoRange, giveInformationNode, stayStillNode
        });

        HideInformationNode    hideInformationNode       = new HideInformationNode(this);
        Inverter               marshallInvertedInfoRange = new Inverter(marshallInInfoRange);
        HasGivenInformatioNode hasGivenInformatioNode    = new HasGivenInformatioNode(this);
        Sequence               sequence1 = new Sequence(new List <Node>()
        {
            hasGivenInformatioNode, marshallInvertedInfoRange, hideInformationNode
        });

        Selector selector1 = new Selector(new List <Node>()
        {
            sequence1, sequence2
        });

        WitnessNode witnessNode         = new WitnessNode(this);
        Sequence    fakeWitnessSequence = new Sequence(new List <Node>()
        {
            witnessNode, selector1
        });

        // Primera rama
        MarshallCalledMeNode marshallCalledMeNode = new MarshallCalledMeNode(this);
        Sequence             detentionSequence    = new Sequence(new List <Node>()
        {
            marshallCalledMeNode, stayStillNode
        });

        // Nodo padre del árbol
        topNode = new Selector(new List <Node>()
        {
            detentionSequence, fakeWitnessSequence, robberySequence, wanderZoneSequence, chooseDestinationSequence, moveSelector
        });
    }