package Ġstarter . state Ċ Ċ import Ġscre eps . api . Memory Ċ import Ġstarter . currentState Name Ċ import Ġstarter . next State Name Ċ Ċ class ĠState Machine ( init State : ĠState ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġstates : ĠMutable List < State > Ġ= Ġmutable ListOf ( Init State (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPrepare Inv ade State (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCreate Cl a imer State (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClaim Room State () o ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Memory . currentState Name . isBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMemory . currentState Name Ġ= Ġinit State :: class . simple Name Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent State Ġ= Ġstates . find Ġ{ Ġit :: class . simple Name Ġ== ĠMemory . currentState Name Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnext State Ġ= Ġstates . find Ġ{ Ġit :: class . simple Name Ġ== ĠMemory . next State Name Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( next State Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent State ?. stop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext State . start () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMemory . currentState Name Ġ= Ġnext State :: class . simple Name Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreturned State Ġ= Ġcurrent State ?. update () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( returned State Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMemory . next State Name Ġ= Ġreturned State :: class . simple Name Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }