package Ġscre eps . role Ċ Ċ import Ġscre eps . api .* Ċ import Ġscre eps . api . structures . Structure Spawn Ċ import Ġscre eps . building Task Ċ import Ġscre eps . cre ep . collect Energy Ċ import Ġscre eps . room .* Ċ import Ġscre eps . state Ċ Ċ class ĠBuilder ( name : ĠString ) Ġ: ĠCre ep Extension ( name ) Ġ{ ĊĠĠĠ Ġoverride Ġval Ġrole : ĠRole Ġ= ĠRole . BUILDER ĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . memory . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCre ep State . COLLECT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . collect Energy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCre ep State . WORK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( cre ep . memory . building Task ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cre ep . memory . building Task . type Ġ== ĠBuilding Type . EMPTY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . memory . building Task Ġ= Ġcre ep . room . extension . building Task Queue . get Task () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠBuilding Type . EMPTY ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtar Ġ= ĠGame . getObject ById < Construction Site >( target ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tar Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcre ep . memory . building Task Ġ= Ġempty Building Task ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cre ep . build ( tar ) Ġ== ĠERR _ NOT _ IN _ RANGE ) Ġcre ep . moveTo ( tar ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCre ep State . IDLE Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetNext State (): ĠCre ep State Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( cre ep . memory . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCre ep State . IDLE Ġ-> ĠCre ep State . COLLECT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCre ep State . COLLECT Ġ-> Ġif Ġ( cre ep . store . get Free Capacity () Ġ== Ġ 0 ) ĠCre ep State . WORK Ġelse ĠCre ep State . COLLECT ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCre ep State . WORK Ġ-> Ġif Ġ( cre ep . store . get Used Capacity () Ġ== Ġ 0 ) ĠCre ep State . COLLECT Ġelse ĠCre ep State . WORK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠCre ep State . IDLE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbody List Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBody Parts ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWORK , ĠWORK , ĠWORK , ĠWORK , ĠWORK , ĠMOVE , ĠMOVE , ĠMOVE , ĠMOVE , ĠMOVE , ĠMOVE , ĠMOVE , ĠC ARR Y , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ARR Y , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBody Parts ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( WORK , ĠWORK , ĠWORK , ĠMOVE , ĠMOVE , ĠMOVE , ĠMOVE , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBody Parts ( array Of ( WORK , ĠWORK , ĠMOVE , ĠMOVE , ĠMOVE , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y ), Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBody Parts ( array Of ( WORK , ĠMOVE , ĠC ARR Y , ĠC ARR Y , ĠC ARR Y ), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġspawn ( spawn : ĠStructure Spawn ): ĠS cre eps Return Code Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġconsole . log (" try Ġto Ġspawn Ġupgr ader ") ĊĠĠĠĠĠĠĠ Ġreturn Ġspawn . spawn Cre ep ( choose Body ( body List , Ġspawn . room ). parts , Ġname ) ĊĠĠĠ Ġ} Ċ }