package Ġcom . ann ap ol 0 4 . mun ch kin . engine Ċ Ċ import Ġcom . ann ap ol 0 4 . mun ch kin . util . NonNull LiveData Ċ import Ġcom . ann ap ol 0 4 . mun ch kin . util . NonNull Mutable LiveData Ċ Ċ import Ġjava . util . Random Ċ Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Named Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠDes k Ġ@ Inject Ċ constructor (@ Named (" tre asure ") Ġprivate Ġval Ġtre asure Deck : ĠDeck , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Named (" door ") Ġprivate Ġval Ġdoor Deck : ĠDeck ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ desk Cards Ġ= ĠNon Null Mutable LiveData < List < Card >>( emptyList ()) ĊĠĠĠ Ġval Ġde sk Cards : ĠNon Null LiveData < List < Card >> Ġget () Ġ= Ġ_ desk Cards ĊĊĠĠĠ Ġprivate Ġval Ġstate Ġ= ĠState . HAND _ OUT _ CAR DS ĊĠĠĠ Ġprivate Ġval Ġrandom Door Ġ= ĠRandom () ĊĠĠĠ Ġprivate Ġval Ġrandom Tre asure Ġ= ĠRandom () ĊĊĠĠĠ Ġval Ġmonster : ĠMon ster ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ(_ desk Cards . value . size Ġ== Ġ 0 ) Ġnull Ġelse Ġ_ desk Cards . value [ 0 ] Ġas ĠMon ster ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠState Ġ{ ĊĠĠĠĠĠĠĠ ĠHAND _ OUT _ CAR DS ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ desk Cards . value Ġ= Ġempty List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ desk Cards . value Ġ= Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġdoor Deck . reset () ĊĠĠĠĠĠĠĠ Ġtre asure Deck . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Door Card ( card : ĠCard ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdoor Deck . draw ( card ) ĊĊĠĠĠĠĠĠĠ Ġ_ desk Cards . value Ġ+= ĠlistOf ( card ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Tre asure Card ( card : ĠCard ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtre asure Deck . draw ( card ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetRandom Door Cards ( amount : ĠInt ): ĠList < Card > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdoor Deck . getRandom Stack Cards ( amount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetRandom Tre asure Cards ( amount : ĠInt ): ĠList < Card > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtre asure Deck . getRandom Stack Cards ( amount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun Away From Monster () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ desk Cards . value Ġ= Ġ_ desk Cards . value . drop ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" door Ġcards : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( door Deck ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (", Ġtre asure Ġcards : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( tre asure Deck ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Illegal Engine StateException :: class ) ĊĠĠĠ Ġfun Ġpush Away Monster Card () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(_ desk Cards . value . size Ġ== Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Engine StateException (" There Ġis Ġno Ġmonster Ġcard Ġto Ġbe Ġpushed Ġaway ") ĊĊĠĠĠĠĠĠĠ Ġval Ġdropped Ġ= Ġ_ desk Cards . value [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġ_ desk Cards . value Ġ= Ġ_ desk Cards . value . drop ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġdoor Deck . put Back ( d ropped ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpush Away Tre asure Card ( card : ĠCard ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtre asure Deck . put Back ( card ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠDes k :: class . java . simple Name ĊĠĠĠ Ġ} Ċ Ċ } Ċ