Tree("Root") {
    Decorator (LoopInFrame) {
        Composite (Sequence) {
            ManualTick.AlignDirection()
            RunTree("FollowLeftWall")
            //RunTree("Testing")
        }
    }
}

Tree("FollowLeftWall") {
    Composite (Selector) {
        Composite (Sequence) {
            ManualTick.FpsCounter()
            ManualTick.Fail()
        }

        /*Composite (Sequence) {
            ManualTick.CheckDirectionFree(0,-1) // left
            ManualTick.CheckDirectionFree(1,0) // front
            ManualTick.CheckDirectionOccupied(1,-1) // front/left
            ManualTick.CheckDirectionOccupied(-1,-1) // back/left
            ManualTick.TurnLeft()
            ManualTick.DebugLog("0")
        }*/

        Composite (Sequence) {
            ManualTick.CheckDirectionFree(0,-1) // left
            ManualTick.CheckDirectionFree(1,0) // front
            ManualTick.CheckDirectionOccupied(1,-1) // front/left
            ManualTick.MoveDirection()
            ManualTick.DebugLog("1")
        }
        Composite (Sequence) {
            ManualTick.CheckDirectionFree(0,-1) // left
            ManualTick.CheckDirectionOccupied(-1,-1) // back/left
            ManualTick.TurnLeft()
            ManualTick.DebugLog("2")
        }
        Composite (Sequence) {
            ManualTick.CheckDirectionOccupied(0,-1) // left
            ManualTick.CheckDirectionFree(1,0) // front
            ManualTick.MoveDirection()
            ManualTick.DebugLog("3")
        }
        Composite (Sequence) {
            ManualTick.CheckDirectionOccupied(0,-1) // left
            ManualTick.CheckDirectionOccupied(1,0) // front
            ManualTick.TurnRight()
            ManualTick.DebugLog("4")
        }
        Composite (Sequence) {
            ManualTick.CheckDirectionOccupied(1,0) // front
            ManualTick.CheckDirectionFree(0,-1) // left
            ManualTick.TurnRight()
            ManualTick.DebugLog("5")
        }
    }
}

Tree("Testing") {
    Composite (Sequence) {
        ManualTick.TurnLeft()
        Composite (Marathon) {
            Composite (Sequence) {
                ManualTick.CheckDirectionFree(1,0) // forward
                ManualTick.DebugLog("front is free")
            }
            Composite (Sequence) {
                ManualTick.CheckDirectionFree(1,1) // front/right
                ManualTick.DebugLog("front/right is free")
            }
            Composite (Sequence) {
                ManualTick.CheckDirectionFree(0,1) // right
                ManualTick.DebugLog("right is free")
            }
            Composite (Sequence) {
                ManualTick.CheckDirectionFree(-1,1) // back/right
                ManualTick.DebugLog("back/right is free")
            }
            Composite (Sequence) {
                ManualTick.CheckDirectionFree(-1,0) // back
                ManualTick.DebugLog("back is free")
            }
            Composite (Sequence) {
                ManualTick.CheckDirectionFree(-1,-1) // back/left
                ManualTick.DebugLog("back/left is free")
            }
            Composite (Sequence) {
                ManualTick.CheckDirectionFree(0,-1) // left
                ManualTick.DebugLog("left is free")
            }
            Composite (Sequence) {
                ManualTick.CheckDirectionFree(1,-1) // front/left
                ManualTick.DebugLog("front/left is free")
            }
        }
        ManualTick.DebugLog("-----")

        /*ManualTick.CheckDirectionFree(1,-1) // forward
        ManualTick.CheckDirectionFree(OFFSET_DIR.left)
        ManualTick.CheckDirectionFree(OFFSET_DIR.forward)
        ManualTick.TurnLeft()
        ManualTick.MoveDirection()*/
        /*Composite (Sequence) {
            ManualTick.CheckDirectionOccupied(OFFSET_DIR.left)
            ManualTick.CheckDirectionOccupied(OFFSET_DIR.forward)
            ManualTick.TurnRight()
        }
        Composite (Sequence) {
            ManualTick.CheckDirectionOccupied(OFFSET_DIR.left)
            ManualTick.CheckDirectionFree(OFFSET_DIR.forward)
            ManualTick.MoveDirection()
        }
        Composite (Sequence) {
            ManualTick.CheckDirectionFree(OFFSET_DIR.left)
            ManualTick.CheckDirectionOccupied(OFFSET_DIR.forward)
            ManualTick.TurnRight()
        }*/
    }
}