package Ġkotlin mud . action . context Builder Ċ Ċ import Ġkotlin mud . action . factory . failed Context Ċ import Ġkotlin mud . action . model . Context Ċ import Ġkotlin mud . action . type . Exit Ċ import Ġkotlin mud . action . type . Status Ċ import Ġkotlin mud . bio me . type . Sub strate Type Ċ import Ġkotlin mud . io . type . Syntax Ċ import Ġkotlin mud . room . model . Room Ċ Ċ class ĠDirection To Exit Context Builder ( private Ġval Ġroom : ĠRoom ) Ġ: ĠContext Builder Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbuild ( syntax : ĠSyntax , Ġword : ĠString ): ĠContext < Any > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexit Ġ= Ġget Exit ( word ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġfailed Context ( syntax , Ġ" Al as , Ġthat Ġdirection Ġdoes Ġnot Ġexist .") ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! room . is Door Pass able ( exit . key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfailed Context ( syntax , Ġ" you Ġmust Ġopen Ġthe Ġdoor Ġfirst .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Cli mb able Elevation ( exit )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContext ( syntax , ĠStatus . ERROR , Ġ" you Ġcan 't Ġcli mb Ġthat Ġelevation .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! can Move Into Sub strate ( exit . value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠContext ( syntax , ĠStatus . ERROR , Ġ"${ exit . value . name } Ġis Ġblocked Ġby Ġ${ exit . value . substr ate Type . toString (). toLowerCase ()}. ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠContext ( syntax , ĠStatus . OK , Ġexit . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Exit ( word : ĠString ): ĠExit ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroom . getAll Ex its (). entries . find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . key . toString (). toLowerCase (). startsWith ( word ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Cli mb able Elevation ( exit : ĠExit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroom . is Elevation Pass able ( exit . key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcan Move Into Sub strate ( room : ĠRoom ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroom . substr ate Type Ġ== ĠSub strate Type . NONE ĊĠĠĠ Ġ} Ċ } Ċ