public void buildBehaviorTree()
    {
        Task[] tasks = new Task[2];

        tasks[0] = new DoorUnlocked(door);
        tasks[1] = new OpenDoor(door);
        Task sequence = new Sequence(tasks);

        tasks    = new Task[2];
        tasks[0] = new DoorClosed(door);
        tasks[1] = new BargeDoor(door);
        Task sequence2 = new Sequence(tasks);

        tasks    = new Task[2];
        tasks[0] = sequence;
        tasks[1] = sequence2;
        Task selector = new Selector(tasks);

        tasks    = new Task[2];
        tasks[0] = new DoorOpen(door);
        tasks[1] = new MoveRoom(this.transform);
        sequence = new Sequence(tasks);

        tasks     = new Task[3];
        tasks[0]  = new MoveDoor(this.transform);
        tasks[1]  = selector;
        tasks[2]  = new MoveRoom(this.transform);
        sequence2 = new Sequence(tasks);

        tasks    = new Task[2];
        tasks[0] = sequence;
        tasks[1] = sequence2;

        task = new Selector(tasks);
    }
示例#2
0
    Task BuildTask_GetTreasue()
    {
        List <Task> taskList = new List <Task>();

        Task isDoorNotLocked = new IsFalse(theDoor.isLocked);
        Task waitABeat       = new Wait(0.5f);
        Task openDoor        = new OpenDoor(theDoor);

        taskList.Add(isDoorNotLocked);
        taskList.Add(waitABeat);
        taskList.Add(openDoor);
        Sequence openUnlockedDoor = new Sequence(taskList);

        taskList = new List <Task>();
        Task isDoorClosed = new IsTrue(theDoor.isClosed);
        Task hulkOut      = new HulkOut(this.gameObject);
        Task bargeDoor    = new BargeDoor(theDoor.transform.GetChild(0).GetComponent <Rigidbody>());

        taskList.Add(isDoorClosed);
        taskList.Add(waitABeat);
        taskList.Add(hulkOut);
        taskList.Add(waitABeat);
        taskList.Add(bargeDoor);
        Sequence bargeClosedDoor = new Sequence(taskList);

        // open a closed door, one way or another
        taskList = new List <Task>();
        taskList.Add(openUnlockedDoor);
        taskList.Add(bargeClosedDoor);
        Selector openTheDoor = new Selector(taskList);

        // get the treasure when the door is closed
        taskList = new List <Task>();
        Task moveToDoor     = new MoveKinematicToObject(this.GetComponent <Kinematic>(), theDoor.gameObject);
        Task moveToTreasure = new MoveKinematicToObject(this.GetComponent <Kinematic>(), theTreasure.gameObject);

        taskList.Add(moveToDoor);
        taskList.Add(waitABeat);
        taskList.Add(openTheDoor); // one way or another
        taskList.Add(waitABeat);
        taskList.Add(moveToTreasure);
        Sequence getTreasureBehindClosedDoor = new Sequence(taskList);

        // get the treasure when the door is open
        taskList = new List <Task>();
        Task isDoorOpen = new IsFalse(theDoor.isClosed);

        taskList.Add(isDoorOpen);
        taskList.Add(moveToTreasure);
        Sequence getTreasureBehindOpenDoor = new Sequence(taskList);

        // get the treasure, one way or another
        taskList = new List <Task>();
        taskList.Add(getTreasureBehindOpenDoor);
        taskList.Add(getTreasureBehindClosedDoor);
        Selector getTreasure = new Selector(taskList);

        return(getTreasure);
    }
示例#3
0
    public Task buildTree()
    {
        List <Task> tasks = new List <Task>();

        // if !locked, open door
        Task checkLock = new doorUnlocked(door);
        Task waitASec  = new Wait(1f);
        Task openDoor  = new OpenDoor(door);

        tasks.Add(checkLock);
        tasks.Add(waitASec);
        tasks.Add(openDoor);
        Sequence openUnlockedDoor = new Sequence(tasks);

        // barge it
        tasks = new List <Task>();
        Task checkDoorClosed = new doorClosed(door);
        Task bargeIt         = new BargeDoor(door);

        tasks.Add(checkDoorClosed);
        tasks.Add(waitASec);
        tasks.Add(bargeIt);
        Sequence bargeClosedDoor = new Sequence(tasks);

        // ways to open a closed door
        tasks = new List <Task>();
        tasks.Add(openUnlockedDoor);
        tasks.Add(bargeClosedDoor);
        Selector openIt = new Selector(tasks);

        // get the cheese when door closed
        tasks = new List <Task>();
        Task toDoor   = new MoveToDoor(mouse, door);
        Task toTarget = new MoveToTarget(mouse, cheese);

        tasks.Add(toDoor);
        tasks.Add(waitASec);
        tasks.Add(openIt);
        tasks.Add(waitASec);
        tasks.Add(toTarget);
        Sequence reachTargetBehindClosedDoor = new Sequence(tasks);

        // get the cheese when door is open
        tasks = new List <Task>();
        Task checkDoorOpen = new doorOpen(door);

        tasks.Add(checkDoorOpen);
        tasks.Add(toTarget);
        Sequence reachTargetBehindOpenDoor = new Sequence(tasks);

        // get that cheese
        tasks = new List <Task>();
        tasks.Add(reachTargetBehindOpenDoor);
        tasks.Add(reachTargetBehindClosedDoor);
        Selector reachTarget = new Selector(tasks);

        return(reachTarget);
    }
    public tasks getCurrentTask()
    {
        List <tasks> taskList = new List <tasks>();

        tasks openDoor = new OpenDoor();
        tasks bargeIn  = new BargeDoor();

        taskList.Add(openDoor);
        taskList.Add(bargeIn);

        sequence bargeClosedDoor = new sequence(taskList);

        return(bargeClosedDoor);
    }
示例#5
0
    public ITask ConfigureBehavior()
    {
        List <ITask> moveToOpenRoom = new List <ITask>();
        ITask        CheckOpenDoor  = new isDoorOpen(door);
        ITask        MoveIntoRoom   = new MoveToTarget();

        moveToOpenRoom.Add(CheckOpenDoor);
        moveToOpenRoom.Add(MoveIntoRoom);
        Sequence moveToOpenRoomSeq = new Sequence(moveToOpenRoom);

        List <ITask> tryToOpenDoor = new List <ITask>();
        ITask        isUnlocked    = new isDoorUnlocked(door);
        ITask        openDoor      = new OpenDoor(door);

        tryToOpenDoor.Add(isUnlocked);
        tryToOpenDoor.Add(openDoor);
        ITask tryToOpenSeq = new Sequence(tryToOpenDoor);

        List <ITask> breakLockedDoor = new List <ITask>();
        ITask        doorClosed      = new isDoorClosed(door);
        ITask        bargeDoor       = new BargeDoor(door);

        breakLockedDoor.Add(doorClosed);
        breakLockedDoor.Add(bargeDoor);
        ITask breakDoor = new Sequence(breakLockedDoor);

        List <ITask> interactWithDoor = new List <ITask>();

        interactWithDoor.Add(tryToOpenSeq);
        interactWithDoor.Add(breakDoor);
        ITask interact = new Selector(interactWithDoor);

        List <ITask> moveToDoor = new List <ITask>();
        ITask        goToDoor   = new MoveToDoor();
        ITask        goToRoom   = new MoveToTarget();

        moveToDoor.Add(goToDoor);
        moveToDoor.Add(interact);
        moveToDoor.Add(goToRoom);
        ITask moveToClosedRoomSeq = new Sequence(moveToDoor);

        List <ITask> taskList = new List <ITask>();

        taskList.Add(moveToOpenRoomSeq);
        taskList.Add(moveToClosedRoomSeq);

        ITask root = new Selector(taskList);

        return(root);
    }
示例#6
0
    Task BuildTask_GetPill()
    {
        List <Task> taskList = new List <Task>();


        ///Open unlocked door
        Task isDoorNotLocked = new IsFalse(targetDoor.bIsLocked);
        Task catchBreath     = new Pause(2f);
        Task openDoor        = new OpenDoor(targetDoor);

        taskList.Add(isDoorNotLocked);
        taskList.Add(catchBreath);
        taskList.Add(openDoor);
        Sequence sqOpenUnlockedDoor = new Sequence(taskList);



        ///Barge door
        taskList = new List <Task>();
        Task isDoorClosed = new IsTrue(targetDoor.bIsClosed);
        Task stackUp      = new StackUp(this.gameObject);
        Task bargeDoor    = new BargeDoor(targetDoor.transform.GetChild(0).GetComponent <Rigidbody>());

        taskList.Add(isDoorClosed);
        taskList.Add(catchBreath);
        taskList.Add(stackUp);
        taskList.Add(catchBreath);
        taskList.Add(bargeDoor);
        Sequence sqBargeClosedDoor = new Sequence(taskList);


        ///Guarantee open closed door
        taskList = new List <Task>();

        taskList.Add(sqOpenUnlockedDoor);
        taskList.Add(sqBargeClosedDoor);
        Selector sqOpenTheDoor = new Selector(taskList);


        ///Get pill behind closed door
        taskList = new List <Task>();
        Task moveToDoor = new MoveKinematicToObject(this.gameObject.GetComponent <Kinematic>(), targetDoor.gameObject);
        Task moveToPill = new MoveKinematicToObject(this.gameObject.GetComponent <Kinematic>(), drugs.gameObject);

        taskList.Add(moveToDoor);
        taskList.Add(catchBreath);
        taskList.Add(sqOpenTheDoor);
        taskList.Add(catchBreath);
        taskList.Add(moveToPill);
        Sequence sqGetTreasureBehindClosedDoor = new Sequence(taskList);


        //Get pill if door is open
        taskList = new List <Task>();
        Task isDoorOpen = new IsFalse(targetDoor.bIsClosed);

        taskList.Add(isDoorOpen);
        taskList.Add(moveToPill);
        Sequence sqGetTreasureBehindOpenDoor = new Sequence(taskList);


        //Guarantee get pill
        taskList = new List <Task>();

        taskList.Add(sqGetTreasureBehindOpenDoor);
        taskList.Add(sqGetTreasureBehindClosedDoor);
        Selector sqGetTreasure = new Selector(taskList);



        return(sqGetTreasure);
    }
    tasks BuildTask_GetTreasue()
    {
        // create our behavior tree based on Millington pg. 344
        // building from the bottom up

        //I like the use of a list, much more than what Millington
        List <tasks> taskList = new List <tasks>();

        // if door isn't locked, open it
        tasks isDoorNotLocked = new IsFalse(theDoor.isLocked);
        tasks waitABeat       = new Wait(0.5f);
        tasks openDoor        = new OpenDoor(theDoor);

        taskList.Add(isDoorNotLocked);
        taskList.Add(waitABeat);
        taskList.Add(openDoor);
        Sequence openUnlockedDoor = new Sequence(taskList);

        // barge a closed door
        taskList = new List <tasks>();
        tasks isDoorClosed = new IsTrue(theDoor.isClosed);
        // made a small change to get the rigid body of the door instead of the children
        tasks bargeDoor = new BargeDoor(theDoor.transform.GetComponent <Rigidbody>());

        taskList.Add(isDoorClosed);
        taskList.Add(waitABeat);
        taskList.Add(bargeDoor);
        Sequence bargeClosedDoor = new Sequence(taskList);

        // open a closed door, one way or another
        taskList = new List <tasks>();
        taskList.Add(openUnlockedDoor);
        taskList.Add(bargeClosedDoor);
        Selector openTheDoor = new Selector(taskList);

        // get the treasure when the door is closed
        taskList = new List <tasks>();
        tasks moveToDoor     = new MoveKinematicToObject(this.GetComponent <Kinematic>(), theDoor.gameObject);
        tasks moveToTreasure = new MoveKinematicToObject(this.GetComponent <Kinematic>(), theTreasure.gameObject);

        taskList.Add(moveToDoor);
        taskList.Add(waitABeat);
        taskList.Add(openTheDoor); // one way or another
        taskList.Add(waitABeat);
        taskList.Add(moveToTreasure);
        Sequence getTreasureBehindClosedDoor = new Sequence(taskList);

        // get the treasure when the door is open
        taskList = new List <tasks>();
        tasks isDoorOpen = new IsFalse(theDoor.isClosed);

        taskList.Add(isDoorOpen);
        taskList.Add(moveToTreasure);
        Sequence getTreasureBehindOpenDoor = new Sequence(taskList);

        // get the treasure, one way or another
        taskList = new List <tasks>();
        taskList.Add(getTreasureBehindOpenDoor);
        taskList.Add(getTreasureBehindClosedDoor);
        Selector getTreasure = new Selector(taskList);

        return(getTreasure);
    }