From e18fa170f16f8716dc010dab21923b14397dece3 Mon Sep 17 00:00:00 2001 From: Trevor Slocum Date: Thu, 16 Feb 2023 21:50:14 -0800 Subject: [PATCH] Add employee name prompt --- asset/asset.go | 5 +- asset/sound/hello-and-welcome.ogg | Bin 0 -> 9946 bytes flags.go | 23 ++++++++ flags_web.go | 12 ++++ game/game.go | 23 +++++++- go.mod | 1 + go.sum | 1 + main.go | 7 ++- system/newemployee.go | 46 +++++++++++++++ system/{render.go => renderbackground.go} | 10 ++-- system/renderui.go | 69 ++++++++++++++++++++++ world/world.go | 9 +++ 12 files changed, 195 insertions(+), 11 deletions(-) create mode 100644 asset/sound/hello-and-welcome.ogg create mode 100644 flags.go create mode 100644 flags_web.go create mode 100644 system/newemployee.go rename system/{render.go => renderbackground.go} (85%) create mode 100644 system/renderui.go diff --git a/asset/asset.go b/asset/asset.go index 6557c77..ce47008 100644 --- a/asset/asset.go +++ b/asset/asset.go @@ -27,8 +27,9 @@ var ( const sampleRate = 44100 var ( - audioContext = audio.NewContext(sampleRate) - SoundChime = LoadOGG(audioContext, "sound/chime.ogg", false) + audioContext = audio.NewContext(sampleRate) + SoundChime = LoadOGG(audioContext, "sound/chime.ogg", false) + SoundHelloAndWelcome = LoadOGG(audioContext, "sound/hello-and-welcome.ogg", false) ) func interiorImage() *ebiten.Image { diff --git a/asset/sound/hello-and-welcome.ogg b/asset/sound/hello-and-welcome.ogg new file mode 100644 index 0000000000000000000000000000000000000000..fe8c463987ae0c2e4bccbd30b5e172b24e863695 GIT binary patch literal 9946 zcmd6Nc|6qL+xLeMQ3+W}qJ*(!4QL|F=jgtAXa){Kno*`HE9y`*}V0{oJqT_5AaEULR-9xz2UopX<8Lb*^)r^J3!eZU#^T|2(f( zihamcsrSkWR6JC{et}M&2r_|6^ELSg0HT`z{=TI$A&>m`hdh!BY%TJ@Mo()V{pUyO z*k2qOu-n?x-$UFa(4E)E)5(&8&a1~OB_SmtaZN&oR|x9rf^_!ub?4Rc4fYK5^M$+m z20_T*prZYYaZz2v68sDm!0Bub(awf`)sN>wq)BRLJ3Z5nFOFeX*Ud$+nUyJw=6Jtu ztmBPgK4)eMq0NRSK|Q&gQ^+-D1HCIjEQ*4;&dhdt??$q`AFI`K$DBk#4Iv-Wpb6^q zTxN-ok7-bS_2XB9PAM*MnUnpr- zDCx4oGiN<^3JW+3%mC2g&!+d3?Q<2s!B;lpwk7TZYJDEZ};aXCvyRn;xc zEhRGf6|5)-~~;jE!4?;>|f>qoP-qO1Zo%VA(Eoq6g-4KE(G~s8eY)z6<%1# zLG&vKK1Y0#C*&X!0^KA%K)xIVOSBv0Z!Pb`f|@s)O#7rz8Xcg`3G$(87u3AuMnD>S zZHa=H_(!mIX?{TuE0N|6nf4!if6W8x ztHvq!FrbuI_eJ4-POUi4?xN#Uh41-2m;z6f=@b?|g)Z@?nSauQP%oN}my$Izj*O zb|I8>(lqtJx7M)to1w{Bi{W&b-H7YdHvBe6@YD`+dIvc-8hhI&!}Wi8|EdmZ62+`e z|5uS>PUk*JLVl{L`oGlV1wYtvllx-;zfK_k=VzjNsWJvNO4uPKqb<#wY(_)oT2?_? zQ?**-X-1<#M&m&iHgzzYdieMV+%W?_y%YYQUgQOein`$1)J-bVO(@b$nv;LVPxX?o z900h;-XxSzD4#T^`;1>Nqew4r-lo9KtHeDF{fe5xqDp2VKSHQkNXaauU{;~vvVMW9 zZ9$0_M(BApu?h1(z2X!HPXU0zr`(^Pa)S=82Ue&k)&+Gl>$0F=<)yPXtD(w z6!wMoKTiMvNbtXhis~R_^wP`?>dcMm%ni<3m{|NzkF3#;J=fFqv^ch}~?re0PQ~^^UUVV-^ng=x689)=%{1a~%Goo8Tr!194 zf$%CQ?Hqx-I0@bxrezicyD0-3-B23dGBmSL{$g%nW&s~Jx3I}j z8jw*QGPf9zu^0xMVC=}yvKWRBA(6Nsi>VAaZU<(^9(>aRK4lKWU9%Y7hK+BB+l(Nc zHAlP`Yt5pNc zW;=Wc89SZs>S*O^!x;?QiM1O|pAUjfS-DzWvjltXMq_72khimyOe{cT*nkYo3JG(x zf{l*I4yBQi$IW3j!5}isY6LkTLq^8Q!K^aK$W|H1sUVQq)#kT_)i%;*G<{|SK64E= zx?^Fp9Sio7ksFaPP8Ew^;by_HGeNG?qp{OAzA*WWFUauQ>F^nAR~v4TA97B?3I2GI1=E~5O z&oLrQrJ{`OE5uJVdu`Q;7~&opYzpH#tB7rz`)zMT3zv60y?Q&}Ow>zGw)u*-`*Zht z6MH0yZ8z(Y_Z;t>c)uBhgoV1ny0(!)b2{=7J>b+*k*AimNA)G22z8V^6_CsyU*KX> zAY_vvlu)wRRN&EsDe^2S^UU+KMY*F&Jkiw<6h_n&kq%?g{C8EvMO<$0j< zgwSX&G`a$f7PSL=QHy0If(am{qymK&?kz!2RC}W9eb8ulGkSTq8cu8iC4r+$#Ga$Q z$jH^AxTdS1RAginA-e<=!v}>HvCAt(k&zeTOF(eZ=OyT#3_>;WXF{;II)ui6)*LxHN$zq_zd#mB+ zYkc;aJW&5gC5)>U+iL=)BK2VW%F(ZhRzWm5wmsz066^tfL`Jy6Wh6J79b9c3W>K9 zCF!3)`xTDAyxF5b;C1O&qvuQSQ=sQddj`_d(xeEyY0seaV9l11FD(t~O$z{Q@?hK= z%ZF6Slf8v1${YZq=d3|{7I;lmJL~0vRxLx%nX&^ZC1q#~k%;L#c3>H zxc&}qtGCp-gk)T_0A@kZAR3S&@}5iCc>ni8_rL4-FGrO9pP>HB5&u{4{~s`?|M#Z) zf6?y*kdojJq=fy;Gj%~HOT4KM`IHmQEV;nxJg6rGaq3g}#0|RQJa-H;)KjdX2lUaR zZ%}wP0&4phWRfNn6|vc26&^vMkE<3?-m68mmfjdyf~{@2>}U=G+gQu)jRCW8M6V=R zfO#M1Kgl00@Lfh8h~gQ0qu8nU#roF2T$-Azn9Q=s3{6xZfFHdSOK#HhnUkAA%<8W= z5#)6elS1hQ6DPzeMM|=L`~sM9gDZx-lwz3mg}?&rjbTS*g|>+5Lf>1k={ zv#_$Uv#~*SGz_$KwYBth4cXXO&$6BUHio@BwKNM80AcUpBp!}N=mV(kDF@%_TE_aZ zQvyOJ+Ve`0t8xXCtNF$N-7&Htx>7pn2VsfM)0Uh5`_eF>QN8a%_fGvXhPuqik54u# zbS<_z-%8=5Qt4LCAco(gv2#p1cWkZRZbf$ra?SEsK9mdsY>zk(RFx|oc&Ec3ijkrT~bI2nP7$tqBuk^k* zMDor#qr!NjaO-Vhgf)UmCw!_(2X$s8A%eJ_AUL2PD73Gx1mtyxixT!G#9|g_^82D? z-xp{f2WTm(cqCiLHv}JeSM2U>+ms9Op$c~Y@Tt(HS?jX{;_lgNn$&x*`g&*%yTg}p z2fKoCmV(P2QA$~|&pT5-P^W;)3;~3|R6d`6ewe1HHVXA^LaC@R zA#wf%@*`|I;sk*2ZpCJ9Zm_bnvIgh(c{{C|^2#6W|zj7FrZx|*Eq>e#K@Cpt;BNd*)MEQX;J4#feAMN@Y-H0 z&8omuOsQ}w^PCa-#XB6o>8|(b!|fS}f2x;Xje>AaqN_uX(eD@Gc8U0|aP#kwJtu}{ zDP$i5z{t-;hKQ2I!>tMfdMlErHx&)N4CvV`av|?RuMt+!b6pX)rSvCfO+y4#0KER{ zHffAmdutuzu@dVIFuN_sT{&=Qe&f|KkqmL{J(6J-%xi+LGxsMoC^O#H*Jb(J)K+~}qxdmrg4cvQ;U zg$r@(`6F*FskA5F$vwjl*ctr3IDvMZr+7E72bK)l$8Xk2s)5`*Ee|51Ot6lwbsQq5F zW~wes)5hpyY?(}drMa-LUHqJH5-s{L!`i<7CzJum^U9OHDEUtQ{?RFaNK4-jMj00INzIi+=Rq1+-`+U(kEUo-bf4>}6MYa$eo}3g26se^Q&3zJ@JyPB(=- zN*UF;`qJT88#*tL#3Zp}NXPU2nOl}}sVXPg8mh9F7bd2>l`n17h_lxR%6}VAHQh~k zX4DpawY2A6lIS%Xn^kTE^k8(~ zoz`&qoY=I-Z~1dr)mG`vS_K1>h@TohWQnX&IiP}POun*cZ~hL+QF_}a7i*_NPrix+ zfF3>5KUT??(F=~N#JTXUb?l&X*fpKUzBRbyho#;i5b!tb!ePSa~GkJSWxPET^u1`EXsCh z+V+*NiwlRYV+T|ex8J?^Vc@THcp=l`JBxU2e^eQ5jk4tscuJP7K%@Z$0>waBSz)FR##U8mtu0U zifyqj*6<2&44ncZ9*=x*(|LaD;N3AL&zet5lj;x_fRPgMP22Z=FSFaBNGT_-ZeMrx zQ7iZ4A0^S96zJ%z_3=t--1%80){hDp*gL!@0<@LO&6+$##aSJ7UY1o_QKPeSz7tE+ zQBB$K^LHv2=ZCZEGM{o91rlKxddHl8Y;npdesjoq%ks&HI&Obr1v=dh7f-z-fW)Bx&^rw0=y)ydKPfcZQ& zGI06NMORVKY&nH1YBT1!fF@z;Myw;4Edi-C+7ER$@OvEEr_2d{Du$z=G99=myNaLh zfSZOMC&Ik8H$uElpovE}AEZ)cD3Fa0RC&REXm{f82^dv4o*TtNO2ukz?L#9R+Z*kR z@jnCKWhwj$xs=ZRS>L{QE*kFDFI#Ihr2OFI=`T!EGyvY#;lN5H>FvVoE{};MP}%DH zrKalsa4yhIv13Q83OanEzGl>hSU!CLHR^xs>Xz1Zzj3(oUD6lL&R>H41=6pl7=VbS z@GhP6&5Hyt*-|$=P0UTCCU3%QTErNSy44)w!T2C<&?vFY#>0co?(&jjnZ}09jUO7Sc$P z5(uL3zJuqg9<&rHldy%m_H4Kua3|WcI$SCfR~opMW|ohRm^nO;-25^o4DjICm)wl6 zKX|lClJ7m)eWhYBrdKfGZ+Ny{C$+CAy}L&UY70XrZN69fC}H@}Xd^p2W5+@6I>h(* ztql3t(`c4CPP=kz;IQe_%nKz0-4`QwMIZ=Iq`sa~NUImcF!`e~^0l*T3EEp-u}*B2 zAp*3rkX94AW4Ei7CfZz9IFA=TV?1SP(kqV@0#urPw@qppRQ9(KKX{e8cw>oIxI)g`jOD6fgzq0cjhqIU*)?QOlX?)7ln2`7q59Vn7t$gU^Cuq$j=DzWM4BlZHq z+f(Xp#pd>P;=8c5v**vSx~Wi8X`{u%YyqC0ilEIO&H0N*NqX_U3dfl~z5ctS|MEQj zezURC^~$d>o@OPvU{(kA=kHeOCiW+kzBy~~`yhM+x%P~>*bXDsz|;-aXFy`0ZOtq! z=m_!hH%@$dx1Rw3?{UEgA9P5tL6(mf*$GV_4OD1aQ?i%GZyN59l7Z z6@%MMMt7@yrDHg43pan`h`UYuc>HoN@|(9VWe4hjDQ#KgS)7I+9aZ0B_e~ynxc+rK z=h~ytYff?NwxX?t-|?x#QMhf(s&z-9+A-`c2iZEZtGqH>y0`v9P^#m`uuRqjcx@f}e5b#YwLUN^+8&T41BqYVr;Ds^2{GOw%SNG9#%Z-6A)yuU;8ue~dlH%_I zm*>_aG_wOEUR*qSY<+jN#59zW&yb9ecXF)H|H|l6u@JUH&H1UYfV~p=#ms# z*W@TDOwvXTGe&Lv^*Qf`(OSaYdB(a1+d1X0^jThBgG!!*L7R6TO0&#wQ>QE7u*9}f zT-{#8r(597tQor|Uw@k0e^lVv zG^pOxs1J0o?yZBKcbwf-1XQj&?3>hZ*x@fmt_ejo$T?Vh*IWSdl_*i>maObu@0Fnn zLFvqc?Xl<5kF(M@?nxx;nEQl`yG)k`>Cwfu%2KYHEghPD}-ftk9W;E<9 z<2b~KviIDw=rh3_{s{K)48MN(Yf@(F8S7+WJ6C1~>qCb1MU{5t*whPnS-aauI3B>k zz<7Cj1IJ}^5c!RZo+F_G>FDQun=(h?*qV&GfeUtZk0z3L^Y8fdgk?NEORz`2pq?(> zJp37|xhfVqo*;6J7R)7$x2C&cckrD@&MrXS;?D?-`%u7Zg>y3bwpat`&aO>Knq(&(HsZ{&Az2D3M8(OCpGUf}D+<9lYZ{ab@h@86U#xjZYOS2cguefc!m7)W#9r3BZuJlw6Ml+141d zUfZ#!Ff+M=oBLFIN9F9r9&mURK|Uj3zfKFFTr|*Jze!P^a?wEc5!Qe+RhL;=S)m$w zYPxz_+N@{TbTzcpRkbyAb@aiS0eJVItD~W7KkxTK*xc_$8aRe`oFl$An%d{5-$m9k zm0XYlbcU5a;;p1IC+@Y)-#cgoZ)boO->n3~J;2uX)7r%_^|$QptIk6kVY|=E4!$p4 z4^CVSB)!H_zxf+uXI0v+F7I4>9v&ISv9~RDcXK@Y(RR6sjX9G-aiDZcu8m%?hwS9O z>uTb=B`OC4x#ek7b%*wiZvEJ<1@@?_86b+B#(;sql4^X{$anQ1uYTsNy-23e7dqVL z`gUmWd42xW0HcmygU0-9xKn_G$SQnuk>$0c5_+c2D&mR2lf+#bK$SoNnOtb}EPWye z%?Uu9pKjLDoWSflJWf=Xm=}MMJ5gPbX_s#v z=Kxc83W#Xovt?FzPUP+vsu3_aY-Ms~OF2^TWwe(M`hDBI84N?W?0 z;37I;%nh`R{ZhmTCpds#9&0#CTiUNY)-r~z#t5sEh0!Q6ZQ-M48=s22|4hWOEr|w{ zZ)~Yh#-3U6Gjf#_KKI~HrBX+##SLkE!jz=YwZblH=709k62hoU9#P)R3vNIRUy!CtTw zfy-eJeDF8);l2JAyAKNpA8o%q+`U}SMG6Z0G((^(eMGNf(6%`cclq1Q=q3~WW>K}( zm-jwD#o2)?e=*kRPDYA4qf49Xw)-2EUzI=L9j47Pv@NMCyOSU!bo%^lp)abKfRWrPA}+Zq|XSz$)f>SnHI$NB;>A`+mT0W07Rep z%)8ii?4OB}_!?dNs!R0^UqX+AR}~H$11>NRQXHwKZ!N~g3$`uFcLivoAPn~Hjy-5j z<{>zp`Sb_P;-6s6lv~hbs%5xTNSff+F)6Mu*qBYa2&VW=d5B6T;XB&tw@AS!*=V)KX$SlrSjKtoPAF*Ekxbz^LCGW zP>P%1vc>*{*B?eL(5pPp*moONyfkva+}`#1T$DHB_-}NLH2LTQ03t5sf{~At*Uz;g zW1CXyoGo8`o--@^v13z%U5Lr)x|CIlH2m4;VhjL>D1kIAdN=+}%__;`V5UNh%?Wc- zqmb&KuoiXAQoB9NCZ#?oGg;+*60`>d&IYTk6|;1Tzh89K#vN;$xX^`lhkdLbYTtWzC3DC*kvo@~mSS7gftt*V z8nQ940nz_*KOnaP{?6huyOCCdRC8Rr@zO zlAkP&2OHHR769Nc(yN1768p9Fw(#K0x`7eumgW35xx0H_W?5edJ2b)~Yr1FlxW`tF&octWlvz@&Y$GwL9SwGF4pje~HsrT0GtGK- z_14r%TA9?Af6;KiMT{U%tF|pwL^o`tD_2ML#wmUKAH+V%g+yI13WAS$qVk5+F3zEg zFmo@o$SWmO`ZHF=S{uVuf_Y1DzZ>4$lsj$MzGjcn@udat-<31>Sev7KdEV1?7Mc$Q zd9eVmPLhF`?RE_#o*2%S1}}Pj(O;c_{4%fDG@FiXVeyftl`ZK-+})}y-gu*VEU&wj zd$b{|^9Slt%G^>*FXtoHyE(Cxwf*fpUd+)Ovtsb0)&EYzNiKK7qs?dtZ;A2Ydn@g3 U-d@GZN?tkK*3{vxW)a}u0Q=|TH~;_u literal 0 HcmV?d00001 diff --git a/flags.go b/flags.go new file mode 100644 index 0000000..23b9885 --- /dev/null +++ b/flags.go @@ -0,0 +1,23 @@ +//go:build !js || !wasm +// +build !js !wasm + +package main + +import ( + "flag" + + "code.rocketnine.space/tslocum/gas-station-sim/world" +) + +func parseFlags() { + var ( + skipIntro bool + ) + flag.BoolVar(&world.Fullscreen, "fullscreen", true, "run in fullscreen mode") + flag.BoolVar(&skipIntro, "skip-intro", false, "skip intro screen") + flag.Parse() + + if skipIntro { + world.GameStarted = true + } +} diff --git a/flags_web.go b/flags_web.go new file mode 100644 index 0000000..ebda5c1 --- /dev/null +++ b/flags_web.go @@ -0,0 +1,12 @@ +//go:build js && wasm +// +build js,wasm + +package main + +import ( + "code.rocketnine.space/tslocum/gas-station-sim/world" +) + +func parseFlags() { + world.DisableEsc = true +} diff --git a/game/game.go b/game/game.go index 1f61a33..41d7e13 100644 --- a/game/game.go +++ b/game/game.go @@ -2,6 +2,7 @@ package game import ( "log" + "os" "code.rocketnine.space/tslocum/gas-station-sim/asset" "code.rocketnine.space/tslocum/gas-station-sim/entity" @@ -58,7 +59,9 @@ type Game struct { func NewGame() *Game { entity.NewOnceEntity() - gohan.AddSystem(&system.Render{}) + gohan.AddSystem(&system.NewEmployee{}) + gohan.AddSystem(&system.RenderBackground{}) + gohan.AddSystem(&system.RenderUI{}) s, err := ebiten.NewShader([]byte(shaderSrc)) if err != nil { @@ -90,16 +93,30 @@ func (g *Game) handleTransition() error { world.GameStarted = true } } - return nil } func (g *Game) Update() error { + if !world.DisableEsc && ebiten.IsKeyPressed(ebiten.KeyEscape) { + os.Exit(0) + return nil + } + + if (inpututil.IsKeyJustPressed(ebiten.KeyEnter) || inpututil.IsKeyJustPressed(ebiten.KeyKPEnter)) && ebiten.IsKeyPressed(ebiten.KeyAlt) { + world.Fullscreen = !world.Fullscreen + ebiten.SetFullscreen(world.Fullscreen) + return nil + } + err := g.handleTransition() if err != nil { return err } + if world.GameStarted { + world.Ticks++ + } + return gohan.Update() } @@ -111,7 +128,7 @@ func (g *Game) Draw(screen *ebiten.Image) { log.Fatal(err) } - // Render target on screen using dither shader. + // NewEmployee target on screen using dither shader. op := &ebiten.DrawRectShaderOptions{} op.Images[0] = g.target screen.DrawRectShader(world.ScreenWidth, world.ScreenHeight, g.shader, op) diff --git a/go.mod b/go.mod index d3008aa..8b262a0 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/ebitengine/purego v0.1.1 // indirect github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect github.com/hajimehoshi/file2byteslice v1.0.0 // indirect + github.com/hajimehoshi/go-mp3 v0.3.3 // indirect github.com/hajimehoshi/oto/v2 v2.3.1 // indirect github.com/jezek/xgb v1.1.0 // indirect github.com/jfreymuth/oggvorbis v1.0.4 // indirect diff --git a/go.sum b/go.sum index 1cef9e3..61f895b 100644 --- a/go.sum +++ b/go.sum @@ -13,6 +13,7 @@ github.com/hajimehoshi/ebiten/v2 v2.4.16/go.mod h1:BZcqCU4XHmScUi+lsKexocWcf4off github.com/hajimehoshi/file2byteslice v0.0.0-20210813153925-5340248a8f41/go.mod h1:CqqAHp7Dk/AqQiwuhV1yT2334qbA/tFWQW0MD2dGqUE= github.com/hajimehoshi/file2byteslice v1.0.0 h1:ljd5KTennqyJ4vG9i/5jS8MD1prof97vlH5JOdtw3WU= github.com/hajimehoshi/file2byteslice v1.0.0/go.mod h1:CqqAHp7Dk/AqQiwuhV1yT2334qbA/tFWQW0MD2dGqUE= +github.com/hajimehoshi/go-mp3 v0.3.3 h1:cWnfRdpye2m9ElSoVqneYRcpt/l3ijttgjMeQh+r+FE= github.com/hajimehoshi/go-mp3 v0.3.3/go.mod h1:qMJj/CSDxx6CGHiZeCgbiq2DSUkbK0UbtXShQcnfyMM= github.com/hajimehoshi/oto v0.6.1/go.mod h1:0QXGEkbuJRohbJaxr7ZQSxnju7hEhseiPx2hrh6raOI= github.com/hajimehoshi/oto/v2 v2.3.1 h1:qrLKpNus2UfD674oxckKjNJmesp9hMh7u7QCrStB3Rc= diff --git a/main.go b/main.go index fe1b654..1fedb1f 100644 --- a/main.go +++ b/main.go @@ -14,7 +14,12 @@ func main() { ebiten.SetWindowSize(world.ScreenWidth, world.ScreenHeight) ebiten.SetWindowResizingMode(ebiten.WindowResizingModeEnabled) ebiten.SetCursorMode(ebiten.CursorModeHidden) - ebiten.SetFullscreen(true) + + parseFlags() + + if world.Fullscreen { + ebiten.SetFullscreen(true) + } g := game.NewGame() diff --git a/system/newemployee.go b/system/newemployee.go new file mode 100644 index 0000000..e0e49a3 --- /dev/null +++ b/system/newemployee.go @@ -0,0 +1,46 @@ +package system + +import ( + "code.rocketnine.space/tslocum/gas-station-sim/asset" + "code.rocketnine.space/tslocum/gas-station-sim/world" + "code.rocketnine.space/tslocum/gohan" + "github.com/hajimehoshi/ebiten/v2" + "github.com/hajimehoshi/ebiten/v2/inpututil" +) + +type NewEmployee struct { + confirmTicks int +} + +func (r *NewEmployee) Update(_ gohan.Entity) error { + if !world.GameStarted { + return nil + } + + if r.confirmTicks != 0 { + r.confirmTicks-- + + if r.confirmTicks == world.TPS*2.25 { + asset.SoundHelloAndWelcome.Play() + } else if r.confirmTicks == 0 { + world.Name = world.NameInput + world.NameInput = "" + } + return nil + } + + if world.Name == "" { + if world.NameInput == "" { + world.NameInput = "Test" + } + + if inpututil.IsKeyJustPressed(ebiten.KeyEnter) || inpututil.IsKeyJustPressed(ebiten.KeyKPEnter) { + r.confirmTicks = world.TPS * 2.75 + } + } + return nil +} + +func (r *NewEmployee) Draw(_ gohan.Entity, screen *ebiten.Image) error { + return nil +} diff --git a/system/render.go b/system/renderbackground.go similarity index 85% rename from system/render.go rename to system/renderbackground.go index 2549b41..a52705f 100644 --- a/system/render.go +++ b/system/renderbackground.go @@ -14,21 +14,21 @@ const ( introTextHeight = 50 ) -type Render struct { +type RenderBackground struct { x, y float64 dx, dy float64 img *ebiten.Image tick int } -func (r *Render) drawGame(screen *ebiten.Image) error { +func (r *RenderBackground) drawGame(screen *ebiten.Image) error { // Draw background. screen.DrawImage(asset.ImageInterior, nil) return nil } -func (r *Render) drawIntro(screen *ebiten.Image) error { +func (r *RenderBackground) drawIntro(screen *ebiten.Image) error { if world.GameStarting != 0 { return nil } @@ -48,7 +48,7 @@ func (r *Render) drawIntro(screen *ebiten.Image) error { return nil } -func (r *Render) Update(_ gohan.Entity) error { +func (r *RenderBackground) Update(_ gohan.Entity) error { if r.img == nil { img := ebiten.NewImage(introTextWidth, introTextHeight) for i := 0; i < 4; i++ { // Draw four times to increase shadow effect @@ -82,7 +82,7 @@ func (r *Render) Update(_ gohan.Entity) error { return nil } -func (r *Render) Draw(_ gohan.Entity, screen *ebiten.Image) error { +func (r *RenderBackground) Draw(_ gohan.Entity, screen *ebiten.Image) error { if !world.GameStarted { return r.drawIntro(screen) } diff --git a/system/renderui.go b/system/renderui.go new file mode 100644 index 0000000..63f22ea --- /dev/null +++ b/system/renderui.go @@ -0,0 +1,69 @@ +package system + +import ( + "fmt" + "image" + "image/color" + + "code.rocketnine.space/tslocum/gas-station-sim/world" + "code.rocketnine.space/tslocum/gohan" + "github.com/hajimehoshi/ebiten/v2" + "github.com/hajimehoshi/ebiten/v2/ebitenutil" +) + +type RenderUI struct { + img *ebiten.Image +} + +func (r *RenderUI) Update(_ gohan.Entity) error { + if r.img == nil { + r.img = ebiten.NewImage(world.ScreenWidth, world.ScreenHeight) + } + + if !world.GameStarted { + return nil + } + if world.Name == "" { + + } + + return nil +} + +func (r *RenderUI) Draw(_ gohan.Entity, screen *ebiten.Image) error { + if !world.GameStarted { + return nil + } + + if world.Name == "" { + if world.Ticks > 6 { + r.drawText(screen, 2, 32, 64, true, "What is your name?") + if world.Ticks > 8 { + r.drawText(screen, 2, 64, 128, true, fmt.Sprintf("%s", world.NameInput)) + } + } + } + return nil +} + +func (r *RenderUI) drawText(screen *ebiten.Image, scale int, x int, y int, fill bool, text string) { + const ( + paddingW = 6 + paddingH = 4 + ) + + l := len(text) + textW, textH := 6*l+paddingW, 12+paddingH + + rect := image.Rect(x, y, x+textW*scale, y+textH*scale) + screen.SubImage(rect).(*ebiten.Image).Fill(color.White) + screen.SubImage(rect.Inset(1)).(*ebiten.Image).Fill(color.Black) + + r.img.Clear() + ebitenutil.DebugPrintAt(r.img, text, 2+x/scale, y/scale) + + op := &ebiten.DrawImageOptions{} + op.GeoM.Scale(float64(scale), float64(scale)) + //op.ColorM.ChangeHSV(0, 0, 0.8) + screen.DrawImage(r.img, op) +} diff --git a/world/world.go b/world/world.go index ce97860..2408388 100644 --- a/world/world.go +++ b/world/world.go @@ -9,4 +9,13 @@ const ( var ( GameStarting int GameStarted bool + + Ticks int + + Name string + NameInput string + + Fullscreen = true + + DisableEsc bool )