Untitled

 avatar
unknown
kotlin
a year ago
7.3 kB
12
Indexable
object FindTagRouter {

    fun route(currentDirection: CompassDirection, bestDirection: CompassDirection): Int {

        when (bestDirection) {

            // Best direction is North
            is CompassDirection.North -> {

                // If current direction is not North
                if (currentDirection !is CompassDirection.North) {
                    when (currentDirection) {
                        is CompassDirection.East -> return 270
                        is CompassDirection.Northeast -> return 315
                        is CompassDirection.Northwest -> return 45
                        is CompassDirection.Southeast -> return 225
                        is CompassDirection.Southwest -> return 135
                        is CompassDirection.West -> return 90
                        is CompassDirection.South -> return 180
                        else -> {}
                    }
                } else {
                    return 0
                }

            }

            // Best direction is South
            is CompassDirection.South -> {

                // If current direction is not South
                if (currentDirection !is CompassDirection.South) {
                    when (currentDirection) {
                        is CompassDirection.East -> return 90
                        is CompassDirection.North -> return 180
                        is CompassDirection.Northeast -> return 135
                        is CompassDirection.Northwest -> return 225
                        is CompassDirection.Southeast -> return 45
                        is CompassDirection.Southwest -> return 315
                        is CompassDirection.West -> return 270
                        else -> {}
                    }
                } else {
                    return 0
                }

            }

            // Best direction is East
            is CompassDirection.East -> {

                // If current direction is not East
                if (currentDirection !is CompassDirection.East) {
                    when (currentDirection) {
                        is CompassDirection.North -> return 90
                        is CompassDirection.Northeast -> return 45
                        is CompassDirection.Northwest -> return 135
                        is CompassDirection.Southeast -> return 315
                        is CompassDirection.Southwest -> return 225
                        is CompassDirection.West -> return 180
                        is CompassDirection.South -> return 270
                        else -> {}
                    }
                } else {
                    return 0
                }

            }

            // Best direction is West
            is CompassDirection.West -> {

                // If current direction is not West
                if (currentDirection !is CompassDirection.West) {
                    when (currentDirection) {
                        is CompassDirection.North -> return 270
                        is CompassDirection.Northeast -> return 225
                        is CompassDirection.Northwest -> return 315
                        is CompassDirection.Southeast -> return 135
                        is CompassDirection.Southwest -> return 45
                        is CompassDirection.East -> return 180
                        is CompassDirection.South -> return 90
                        else -> {}
                    }
                } else {
                    return 0
                }

            }

            // Best direction is Northeast
            is CompassDirection.Northeast -> {

                // If current direction is not Northeast
                if (currentDirection !is CompassDirection.Northeast) {
                    when (currentDirection) {
                        is CompassDirection.North -> return 45
                        is CompassDirection.East -> return 315
                        is CompassDirection.Northwest -> return 90
                        is CompassDirection.Southeast -> return 270
                        is CompassDirection.Southwest -> return 180
                        is CompassDirection.West -> return 225
                        is CompassDirection.South -> return 135
                        else -> {}
                    }
                } else {
                    return 0
                }

            }

            // Best direction is Northwest
            is CompassDirection.Northwest -> {

                // If current direction is not Northwest
                if (currentDirection !is CompassDirection.Northwest) {
                    when (currentDirection) {
                        is CompassDirection.North -> return 315
                        is CompassDirection.East -> return 225
                        is CompassDirection.Northeast -> return 270
                        is CompassDirection.Southeast -> return 180
                        is CompassDirection.Southwest -> return 90
                        is CompassDirection.West -> return 45
                        is CompassDirection.South -> return 225
                        else -> {}
                    }
                } else {
                    return 0
                }

            }

            // Best direction is Southeast
            is CompassDirection.Southeast -> {

                // If current direction is not Southeast
                if (currentDirection !is CompassDirection.Southeast) {
                    when (currentDirection) {
                        is CompassDirection.North -> return 135
                        is CompassDirection.East -> return 45
                        is CompassDirection.Northeast -> return 90
                        is CompassDirection.Northwest -> return 225
                        is CompassDirection.Southwest -> return 315
                        is CompassDirection.West -> return 270
                        is CompassDirection.South -> return 45
                        else -> {}
                    }
                } else {
                    return 0
                }

            }

            // Best direction is Southwest
            is CompassDirection.Southwest -> {
                // If current direction is not Southwest
                if (currentDirection !is CompassDirection.Southwest) {
                    when (currentDirection) {
                        is CompassDirection.North -> return 225
                        is CompassDirection.East -> return 135
                        is CompassDirection.Northeast -> return 180
                        is CompassDirection.Northwest -> return 270
                        is CompassDirection.Southeast -> return 45
                        is CompassDirection.West -> return 90
                        is CompassDirection.South -> return 315
                        else -> {}
                    }
                } else {
                    return 0
                }
            }

            is CompassDirection.None -> return 0
        }

        return 0
    }

}
Editor is loading...
Leave a Comment