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); }
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); }
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); }
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); }
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); }