From d4e6d9babb4a8159a1c6674ae82c7f4128905938 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Sun, 18 Jul 2021 20:04:24 -0700 Subject: [PATCH] Loading Screen * pkg/loadscreen implements a global Loading Screen for loading heavy levels for playing or editing. * All chunks in a level are pre-rendered to bitmap before gameplay begins, which reduces stutter as chunks were being lazily rendered on first appearance before. * The loading screen can be played with in the developer console: $ loadscreen.Show() $ loadscreen.Hide() Along with ShowWithProgress(), SetProgress(float64) and IsActive() * Chunker: separate the concerns between Bitmaps an (SDL2) Textures. * Chunker.Prerender() converts a chunk to a bitmap (a Go image.Image) and caches it, only re-rendering if marked as dirty. * Chunker.Texture() will use the pre-cached bitmap if available to immediately produce the SDL2 texture. Other miscellaneous changes: * Added to the Colored Pencil palette: Sandstone * Added "perlin noise" brush pattern Note: this commit introduces instability and crashes: * New `asyncSetup()` functions run on a goroutine, but SDL2 texture calls must run on the main thread. * Chunker avoids this by caching bitmaps, not textures. * Wallpaper though is unstable, sometimes works, sometimes has graphical glitches, sometimes crashes the game. * Wallpaper.Load() and the *Texture() functions are where it crashes. --- assets/pattern/perlin-noise.png | Bin 0 -> 1605 bytes pkg/balance/theme.go | 16 ++ pkg/doodle.go | 9 +- pkg/editor_scene.go | 59 +++++++- pkg/editor_ui.go | 27 ++-- pkg/level/chunk.go | 47 ++++-- pkg/level/chunker.go | 37 +++++ pkg/level/palette_defaults.go | 6 + pkg/modal/loadscreen/loadscreen.go | 231 +++++++++++++++++++++++++++++ pkg/modal/modal.go | 10 ++ pkg/pattern/pattern.go | 6 +- pkg/play_scene.go | 42 ++++++ pkg/shell.go | 8 + 13 files changed, 471 insertions(+), 27 deletions(-) create mode 100644 assets/pattern/perlin-noise.png create mode 100644 pkg/modal/loadscreen/loadscreen.go diff --git a/assets/pattern/perlin-noise.png b/assets/pattern/perlin-noise.png new file mode 100644 index 0000000000000000000000000000000000000000..920c0e73db105d8a6832d49c2dfcf3ecbc7325dc GIT binary patch literal 1605 zcmV-L2DEX>4Tx04R}tkv&MmKpe$iQ>7wR2Rn!eW~dHgK~%(1t5Adrp;l+0Yt2!bCVZf;JBE>hzEl0u6Z503ls?%w0>9U#<7Otad?08O{e zR3a{BvMXZf6(MvZh!G6R%ra&rDGA^4b&mjF?_xa5|JgW_ z+u*!U9AQOSB|aw}HR*!Hk6c$ge&bwlS>TxwGo6|vju4B57FJrA6-|wJk~perI^_!) zk5$fFoV8MgHSWn@7|!X-OI)WpfCLt>2niw-RIq^(Y{Y2QNwJWk{kV_6-}Ou6QpmLd zMvi%up+R>2;D7MDTPr^??j?oeK>Lg1d<+4hU7%idobO}Dsh6D=c?CRV;`pvK$^Nr-T()O zz;J=G*L>dH(c0U;XBz$e0ABBMpAd!A%m4rY32;bRa{vG?BLDy{BLR4&KXw2B00(qQ zO+^Rg2Mz-)4|8fm)Bpeg8FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b z1TINLK~y-)O_WKJq&N^ok#Hd)#1ITwS&O>=CF(jgL`0GVlRy*dg?Fbl3k<`+_5J_n zPJaIUndiCr?`qrjx~`^ae*ga6G)$(B} zWLcJ`DPyc@8e>dZmdmmX!!XZtjIn8&^E^4{gpmK=uj@LFgE7V!D~f{Vc^+d-)07b6 zy)TNwIp>@^jw8k>r96%U0MaxKAy7(%5R}p+Nxb(l#=h_OeV0;Ft#y`Vlu`ij-eU{H zFf7YbRh9Q%O6i=_T3^={Lcr&3+Xx{s#{2!wIsfzL4^>JX$6>AY-cw2mA;uWa`TP6( zx~_~dYb}-_goF@cjLtbBgtgXMiyFUw|4y~mC@02<(v(vBzH6=Px@L?~O80%w^Bm>m zdEPWlp65xDR8>`$C8d-x1^}>a8vqz%ilRWLUawc*_a7f0LWme60E7@Q2Q<`LTUC{m za#KU9EaArD2nU4)^)`|V~pN=aL#$}-`?JoQlFon$OQmQ z)08AhQ4~p%U|+A-tLr+>`Rn!KoC_g7K0dI}x~^cYl~Q6~oO1vu%W~iMwrvR^jIk`s zk|a6LlQD*fS5;+<*|tq7Ro68-2*wx$H^zvcp63YwNs<6Sp6B>8@lu}A5y4bdDmSvdTmo@khLO?8>bIY=L z?-6$?B{=6OrTB_-E~Uh}Qc5H{#yE~6r4%WRF&blVH&|;KW79N+5WqPH0EjFAD5WsL zEX(fqJDz{L-S&MS$I&_0_dV_a#u!3_RzOh{=Xv5N2qCoAUDx4yl~SS#+;hV)q-pw< zMhJm1rj#1TF@!+T|18T8JUqvH4**y~N_o58s;X+5hA}3DNRs6J{rz^k^?h%QQA(ZX z2~}0i^Za_f%CelM$$M|DMM{@t;haC8&k#ag*Uq_lo{OSD0uhC->&9_x+ZL|ts_Xi? zuIKZ~IiIGfX`1KrNeFSyF~$fXUDs)?ACJe|+nX`wI1YqcDRsZ!jWIDsIF18Rs_Xjs zeCBzM`w*8|nx+6S&vVyx=;q_`XxkP5Fh^YTjIn