From 1f136ba89260a51fb1d050e0046a442f54d37838 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 20:27:39 +0200 Subject: [PATCH 01/14] Minor fixes for dark mode --- src/css/common.scss | 2 +- src/css/ingame_hud/dialogs.scss | 6 ++++-- src/css/main.scss | 2 +- src/css/states/settings.scss | 6 +++--- src/css/textual_game_state.scss | 4 ++-- src/css/variables.scss | 2 ++ src/js/changelog.js | 2 ++ 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/css/common.scss b/src/css/common.scss index f616eace..6a87012e 100644 --- a/src/css/common.scss +++ b/src/css/common.scss @@ -40,7 +40,7 @@ html { background: #dee1ea; @include DarkThemeOverride { - background: #5c606c; + background: $darkModeGameBackground; } } diff --git a/src/css/ingame_hud/dialogs.scss b/src/css/ingame_hud/dialogs.scss index cd681a9e..d72265e7 100644 --- a/src/css/ingame_hud/dialogs.scss +++ b/src/css/ingame_hud/dialogs.scss @@ -21,15 +21,17 @@ } } + $darkModeDialogBg: darken($darkModeGameBackground, 10); + @include DarkThemeOverride { - background: rgba(#33363d, 0.9); + background: rgba($darkModeDialogBg, 0.9); @include InlineAnimation(0.12s ease-in-out) { 0% { background-color: transparent; opacity: 0.5; } 100% { - background-color: rgba(#33363d, 0.9); + background-color: rgba($darkModeDialogBg, 0.9); } } diff --git a/src/css/main.scss b/src/css/main.scss index 598e9e92..178f398b 100644 --- a/src/css/main.scss +++ b/src/css/main.scss @@ -112,6 +112,6 @@ body.modalDialogActive, body.externalAdOpen, body.ingameDialogOpen { > *:not(.ingameDialog):not(.modalDialogParent):not(.loadingDialog):not(.gameLoadingOverlay):not(#ingame_HUD_ModalDialogs):not(.noBlur) { - filter: blur(5px) !important; + // filter: blur(5px) !important; } } diff --git a/src/css/states/settings.scss b/src/css/states/settings.scss index 6c3df736..f06c9b31 100644 --- a/src/css/states/settings.scss +++ b/src/css/states/settings.scss @@ -92,11 +92,11 @@ @include DarkThemeOverride { .content { .setting { - background: #424345; + background: darken($darkModeGameBackground, 10); .value.enum { // dirty but works - filter: invert(0.8); + filter: invert(0.85); color: #222; } @@ -104,7 +104,7 @@ background-color: #74767b; &.checked { - background-color: #605b7d; + background-color: $colorBlueBright; } } } diff --git a/src/css/textual_game_state.scss b/src/css/textual_game_state.scss index 1f9dc356..a8d7a31f 100644 --- a/src/css/textual_game_state.scss +++ b/src/css/textual_game_state.scss @@ -65,7 +65,7 @@ @include DarkThemeOverride { .headerBar { h1 { - color: #cfceca; + color: #e2e0db; } .backButton { @@ -74,7 +74,7 @@ } > .container > .content { - background: #4b4c50; + background: darken($darkModeGameBackground, 3); color: #eee; } } diff --git a/src/css/variables.scss b/src/css/variables.scss index 5f056a00..c1c69371 100644 --- a/src/css/variables.scss +++ b/src/css/variables.scss @@ -38,6 +38,8 @@ $ingameHudBg: rgba(#333438, 0.9); $text3dColor: #f4ffff; +$darkModeGameBackground: #5c606c; + // Dialog properties $modalDialogBg: rgba(160, 165, 180, 0.8); $dialogBgColor: lighten($mainBgColor, 10); diff --git a/src/js/changelog.js b/src/js/changelog.js index c5be2056..0d980695 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -9,10 +9,12 @@ export const CHANGELOG = [ "Automatically deselect area when selecting a new building", "Raise markers limit from 14 characters to 71 (by Joker-vD)", "Optimize performance by caching miner items (by Phlosioneer)", + "Apply dark theme to menu as well (by dengr1065)", "Fix belt planner not placing the last belt", "Fix buildings getting deleted when right clicking while placing a blueprint", "Fix for exporting screenshots for huge bases (It was showing an empty file) (by xSparfuchs)", "Fix buttons not responding when using right click directly after left click (by davidburhans)", + "Disable dialog background blur since it can cause performance issues", "Added simplified chinese translations", "Update translations (Thanks to all translators!)", ], From 47b3ed5cbffd37f645675184c12507d2aaffa516 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 20:47:37 +0200 Subject: [PATCH 02/14] Add option to render info boxes compact --- src/css/ingame_hud/building_placer.scss | 13 +++++++++++++ src/js/changelog.js | 1 + src/js/game/hud/parts/building_placer.js | 4 ++++ src/js/profile/application_settings.js | 9 ++++++++- translations/base-en.yaml | 5 +++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/css/ingame_hud/building_placer.scss b/src/css/ingame_hud/building_placer.scss index 99c4d654..e63868ab 100644 --- a/src/css/ingame_hud/building_placer.scss +++ b/src/css/ingame_hud/building_placer.scss @@ -75,6 +75,15 @@ @include StyleBelowWidth(700px) { display: none !important; } + + &.compact { + width: unset !important; + grid-template-columns: 1fr; + .buildingImage, + .description > .text { + display: none; + } + } } #ingame_HUD_PlacerVariants { @@ -86,6 +95,10 @@ flex-direction: column; align-items: flex-end; + &.compact { + @include S(top, 150px); + } + .explanation { text-transform: uppercase; grid-row: 1 / 2; diff --git a/src/js/changelog.js b/src/js/changelog.js index 0d980695..da5ec97c 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -9,6 +9,7 @@ export const CHANGELOG = [ "Automatically deselect area when selecting a new building", "Raise markers limit from 14 characters to 71 (by Joker-vD)", "Optimize performance by caching miner items (by Phlosioneer)", + "Added setting to enable compact building infos, which only show ratios and hide the image / description", "Apply dark theme to menu as well (by dengr1065)", "Fix belt planner not placing the last belt", "Fix buildings getting deleted when right clicking while placing a blueprint", diff --git a/src/js/game/hud/parts/building_placer.js b/src/js/game/hud/parts/building_placer.js index 3a8ed0db..5faec6ab 100644 --- a/src/js/game/hud/parts/building_placer.js +++ b/src/js/game/hud/parts/building_placer.js @@ -38,6 +38,10 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { this.buildingInfoElements.tutorialImage = makeDiv(this.element, null, ["buildingImage"]); this.variantsElement = makeDiv(parent, "ingame_HUD_PlacerVariants"); + + const compact = this.root.app.settings.getAllSettings().compactBuildingInfo; + this.element.classList.toggle("compact", compact); + this.variantsElement.classList.toggle("compact", compact); } initialize() { diff --git a/src/js/profile/application_settings.js b/src/js/profile/application_settings.js index d1216c60..964fb885 100644 --- a/src/js/profile/application_settings.js +++ b/src/js/profile/application_settings.js @@ -200,6 +200,7 @@ export const allApplicationSettings = [ new BoolSetting("alwaysMultiplace", categoryGame, (app, value) => {}), new BoolSetting("enableTunnelSmartplace", categoryGame, (app, value) => {}), new BoolSetting("vignette", categoryGame, (app, value) => {}), + new BoolSetting("compactBuildingInfo", categoryGame, (app, value) => {}), ]; export function getApplicationSettingById(id) { @@ -223,6 +224,7 @@ class SettingsStorage { this.offerHints = true; this.enableTunnelSmartplace = true; this.vignette = true; + this.compactBuildingInfo = false; /** * @type {Object.} @@ -412,7 +414,7 @@ export class ApplicationSettings extends ReadWriteProxy { } getCurrentVersion() { - return 12; + return 13; } /** @param {{settings: SettingsStorage, version: number}} data */ @@ -459,6 +461,11 @@ export class ApplicationSettings extends ReadWriteProxy { data.version = 12; } + if (data.version < 13) { + data.settings.compactBuildingInfo = false; + data.version = 13; + } + return ExplainedResult.good(); } } diff --git a/translations/base-en.yaml b/translations/base-en.yaml index afe4907d..52f4ab3c 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -686,6 +686,11 @@ settings: description: >- Enables the vignette which darkens the screen corners and makes text easier to read. + compactBuildingInfo: + title: Compact Building Infos + description: >- + Shortens info boxes for buildings by only showing their ratios. Otherwise a description and image is shown. + keybindings: title: Keybindings hint: >- From 0b8f7cdf6557ed3f0a3e6b6ad162ee9f4e549c3c Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 20:54:48 +0200 Subject: [PATCH 03/14] update artwork --- artwork/steam/announcement.png | Bin 11975 -> 17994 bytes artwork/steam/announcement.psd | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/artwork/steam/announcement.png b/artwork/steam/announcement.png index 9a6b79f5d0c7266ad8da78081a8dc94fa75292c8..85c4f1b05d79df0f1c0a91377abab84abf34a9ff 100644 GIT binary patch literal 17994 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 literal 11975 zcmd6N2|SeR+rKkNNQxvWBvKj1HkM)NR4RLA8%bu&49PMwGj`)l!Vz)~A=%oU%wQx- z)`?0YQkG;ddv;^r-g~s1&hK;1@0{QJfB&EN_4#1td9M4qujPAP_jO&*6MoY4xB%Zy zJ`N5J0fQ4qPjhf^N^x-fP_YpLu3Y~Ckp}+pdYrH!a&Yhqvwwf!xRJaAd^qE5fg+(y zj1gFZn<55BaKJ12xOo6-4h|hX9}f)H1y7Q4z&km+Bc;cS%cZ59aY$)vxQUX9#}WK_ z=M#ROcym8f3#^|DRtqPsrz@r7g8&TN@Fa|skDIGI5#fWBUgwJdpV^mT(o*XrBp0Og zkL(SlP$nm(ju1TYQgB6e1+20fTuMVrQCVG8O-lr(OXrK;OPWY*3!~~DXG9zR1^S(0@2r< zgz-^uC+_{q;V7Pn^>p?iITPHa*c>qq1TqOJ4J7@nf}6)Tw(i6)W&#F-`CvR?%8E*C zmDUMy*l%wAG6_kIHRW_+3N7z`=lG<6-T(TD&Fzy`lAFanT;#<`p+STBVYlK zZw^6dDk-Tc!8LITD(ZNwf{L1&gMt=Z39kUxz$k0r@IYHF_*ZUbp3Wf3F|OZpWlMzv z937P58Y(JawFcf1#35EqS-}C1byQGS!zyFo8d_LoO$TYI-}gO2a3y$}5OBces?t(y zha&)cAS#9(Vn}J_FBeg4w7QZ%U(`@h0zWWi_TMk}ZT{x|@3$@8oq>r}q@~!9L9Fj@ z4zd>zKphTO1xl`8Kk4j)cSRj_238}k3jz%E{VkjCZmGeQ*y&+COc5uXi2!)MUlNWv z{^FNUuFg{Hk%_=yKP!P{Lllpb{&Ly*Ph9-ZjQN?Z_jx=p*T2E-XEGwek>ri>#Q*37 zZ2V6`1NK+)6ER-@UV1oQ%Mq`E!zy4fj!Fs`teS=b#?b+%0LNmrv@m#_iWVNY{NG5g zicr=38g>6o>A$eYp2xU5;lX(Xlm74Pqo(Yr3|DdhNkJX2qM(XX!zwsv;MEmWv1(Wx z9yhh&WL1t9#A zR}N#Ge$Oz!)2-8(0=y!nEl(c((L!GeR78r(AU*#J4V&S=(tL;2f1&=&@vy$Jh15yo zA5Bg5PyYqOKajBbt^4k?u(02m{z08}lJ5${ud6`S$^Q7Q+y!6070h^dkd-_^IV@3| z_L75Rudo47*600b2O-jOhB`4>OrW|Jheth8RwNnogcRq;HG3enQeD5WjlQdW| zN=!xiX@?|sCF_+>JB_UboKxGDn5a6??oa6=QU+3|HG)>B)3iA_o=$5(_&E-tf8f{% z<=~)lbNs}FaBM+waDc1quTl&S4zBI%U;iT_u;%YMeMj_V_dnV0&xyW>_*JI=8KN({ ze-->YnZDcZJEE_2P=BmKvU7y6TE^S3H1E4@2?TWkrXfls;wH`gsSL{rq9 z>PAKgQ*rX;0h4nF2+j1G?FvPXvm>o(Dg}*=__0EYFZetAVAD&sRU2AA)cudrbUFk~Gnl3JMYT>ft=lnF%O0>;)J)qR9u|q!I2F(lQ zvWnen-Z_mD*kFZ>ikrj6G>96Y^OP8dWh3I@A~o$9D=2fxiy}afeWeo>lOruyxHu|Y zSnk{dQkK%VozU%Zja;*n&3kJ~P0t9SnxZfc`slb*9d>qGP!L-83k%o9A+YCo*^+&B z`Rd|ZGrib8+){UUNqQC`WkwYJ_!N3^(kmyFjfaVe&{7|>CUR9VIr)TAh-t1PhR`AeTXf8?F{yGFLp4CoWf z=!X=DM%9H%=yhg>Q^!7JU+lm|-7G@uCQB!PO6pB)6pk=w`I3#k%GY_Mi)KsFb zUR697VAsu;4xM(-i~10&o4wEPEthH1y_V7q5?k6rZ4OhL==smSBD3qow$+O^G56|D z=`2588qB@SzdhjM?M35p+*ZwJO`(xnP!7*j_@UGg<^@L_U)uJUF;Mc=4?Xu@X{INh zl1g=aRW#CM9Rzp2j9eN~ebqT|3=IGTWpHhW&~kn~;NfN-k16awr4t})g_MNsXiE`W zO9TjCSDDKyh}#O?sZe^Y*z%5#&&tsfnqd&~wr`>dp|+~K)0uq6%XZ6?OlF7TzuZ;eqo36%g+67=3kRRFpAwh_Rh=g%Qf+J3FJ-kRk<1b942G zKl#0m&KElF-vR`+f~Ks1=O8_Wry9NMhTdWdeT_BMz2@`HDK_yXRS(NU3+$-04yPs4@B zOXt#aR5_}(PaoS(7koi27u2w2o`mN#GqXZYzPQ&80|T6m{WA zgye+IuU4;w_@E%}Ypq_3OqCPznINXme#RS7pBlFd7C1w* zPXxzz`(xtUasxTORR1x(eF)Q}!!SE`e3fPS?PFA6uC3f2nFvmk^Luj@C?D^e!PPuF z+O|5BwyNcE_u8&ZF0YLA*2U-?8dfz08FZwic3+keob_gs! z=wnoDUf@qB*cjg>&)C2-fShUUIV(3`8U1pwP{;^aLt-->cg?Px5?FoYH;Ikx?A9s6 zXJ2PI0KL_w_VfC(D|Uy(I_=4e{r8L65Y|V(xF_TTVVM{`DPC0J^%uT54EcLW!H@{Ay*U9Sssu#!ugV)z}=#$SBM?JpZIV?~A|M z7`4pT8+Nqxg!nq`t&$fZ6Rhh8uSBDaV$BzP+2%)05t-8BaYS`|) zesQo74lurHIsUOg&8|-I!a5)$U=mCfDbu-KYj@$j((kwXw9)}6fQ?V1xg~a^C~g{* zo{+EHeX=d5g&(aaxTdYBIQ5f-ofir%sq43AdE&L<>r4F<7!?4Zk`wKXbE513=7)kH z7eZyWSvGlu9$h6)Glo7J-3ZwAN zX0w*N%T!H}8L1%KZlKg8UrdbMn!8@7&dm^7x&>+O zMfhdOf*6;5C(t3>?j@-%D_mob&ZQeV@p8w5!>&(q_Uvi{e_ZG04b-OFr^;)m&G;f0 zgM+6-LsLh4etiJWieKtl3tYwfdCcSLKF3%MkJSR_E#|qJJDyz4jl!MfRlA#jWqi%9 z^U{BsNURvq%MzFle(-e*v4qD(d-eusT0e{AgV4_Ow6H#x9=lvF>KGAPn6oGn@sDW_&_4&)m;mR76zhCSoU)xkH`Cy2#Raw z6_SDnlmhtZ;g{0}nyQyE$+NYB+l@S^O$F=4--n3GdgNR?sJv5l$tv1-b^y$OpzJG3 zOVA4Figyq^FS&cSUCDgWVApnP6JvsO`r45&+;8WKz1+HAnRm0YnFp=(TeHbD;-aQV z**$+Ukqbg|g2?->jK9mlw(ou3J45`GS@0Yo*;QY&D>Y*OY&>sJ{ZvBzUdB#gUFo4~ zsWxfn=T7wx9!1-YG(IpFS8w0uVjgPdX2r@W+uzd9PhZ_cHxTTVzWO$>thVP)VM(}6 z<&U}$nsTh^LGqQ5|zRwGoI{yL2^PRhQBmG$C(ILHV*CynIGKzb3#zOocv}}lc zz=@NNdX9;?<@hN|rNO6ztu6wB<)|6qF7EBGHm%tKkCv^Bx`{>0yjg1Cc7J9u^=dDp zNS3rbKRI#7k&nx;@G(vMrYjC0c;*l~#9j+)xx%XLJlAhAf8+g_{{YC1yv8OnOIec3 z-C?m;w`Q)q{)s7FrCI9Pmyo;Zje#ROnJ&CZC>azxj(fpzKRbHdeK3k3#(HHN9N zgZG$*2Z^7WwLJq1Krb`^axScV*)ZP3>ZWN0Pji!<$4*MoA^qITnF93Q^p=U2$w>d% zyq0se4Lln!h|gCJ=-wG2LZ?w;<2^AYp$Uq12=B4>G43UUu^fyK306Tc9OL6(~+3i%EN6t*UhC!#9v zGGFdDxV$u8uGhl7t4BX`F;r~^Y*Ov-SQD=x(ovx; zCRM(+G9DK+0I05{EC{kpI*%XQE?fqIzC`b3_(4HhdT*DruW-pL(PanBA!_SJdc5JW z^+vKG?MT8VYwz|P_{+iljDu&Idc=xQ-m@?wPBKu8%Sw>TO0Esx0xR**c{$p!*E^`)}~K3hpt5ivfvMSxI^qi~PyYacm&`$~w>0>$oOZ;|hGzXFPJvvD%@rL3m*$bT-C|6JwP`V`xK166r3sORV>P_xXwB6M0% zx;Kk_Wm`2m6HaN46jP0d+MJ#-)e}406|}bEXrJ72HutwD z28rRFJF6FAI>U0XkE%{}GV)&iwTaeeFY2>eGV!S_Y_|j&y=~gcCB<&?Oi?hsU^E!-}Dv3k>F&0qWM%a*6)38gDuH=ttW3%hL#j`7l2aVOD7A_EO%V0Z0`z4~9# z{qhfcth9NZJ z8K_-3w^d?`4w%KnkwtScl_qTSQB(4m!{D4qTFP%z*9#g!&0eHg+U`k_G=`ji9w|m^ z36S**k{R-v=*Dg}+by!0PBK7DD#Ab2Gj}fCFtZv8EcOz!0wtMrKjVFAy!3bhI1RR= zhJ2>;vhC7#y>-$tdz+E@OPye<)=KeR%690ygIp&R<1HYm=^?dngiey*g{rQhPp@V7 zw5e+nI$yueh0uCkD3c#P#RS*>oUXGK3}DLNy9{*L@Y6f_>2=p@!g3o8{PPccQKg~WS5iuK91)KlYjNJy+M3TPvHHx`uK(9xfBiZ4GPcE|=+>Q0&t*AjNfqVu z&&m@@`V7-}tOoA9O}nTkdj<5YVQ)6mXAKmbg8YeM1@E*fUKPNy3Ll%4ArY0Ll zUfYKviq|D~`PXj2$4^{>@A}kuYJqu$yz&e4!feZr=!P0m8=yY4RA;$szDO2Po?g!cpJ| z+)QVw&<)C+0E@!QpoB~7?YYDzdSq9w02>^; z<}#*PI_3*D6&G8MEtntAfzXz?o>#P-U!RiP&cMJ^q(QeUAD1c&CW3Kwf>)PZ%UB=h z`kZ*>&QuQhmcX$15>H zYmyOHcA!$C6^CK7GLlr0PdGV%d~y%9OgxH@o^^mENhh7+On1AzDVYjy4;{G=FbkL|c1#Xo4DX5Z;a5>oYghSN6UrL)n3G3P0W54qyJGZ>}xo z&B7B4;4P?2A@j&hc|JPCY-*^UX?Si2nDd=KZCzc2m?9k4=@+BwPh#NV8QxuibD-g@ zik37hQ(s8J>CD%8j~!H30=DL3gS?}7PKF#;BD0=+!lne=Ln1-*5tDmati{7`^vrC_ zA$@8SQa-j+ZxOg6EKD-MgYdAlQ3Mh(ITs#Mt|OLMw(u(HWdQEJw$8TI&G<`)&~bwF z-i@mxt-0(jmpv|xRIBcCU7O7ZeFS{zs6j9rceRBTMs-4tXDfZpc3X;~eA9Z(H5qUA zK60@2c+VON$=$ay6g=IZX&;2`%tl`P@U#Y29z##=tv9&cL99pOQ{P1~Z#!|yw?5mn zsrJ>>IJ;EceER`z$Gf7Lt8ka*ZDk`;yCq)kR|Sfq9;6r^y8#ZQK9ffq3fReY@~%a- zO~nXrQYzx5X4M%xG&xD-<30TlPFk-~*2F@3j2^OeDHHYBp<|}yc!>rK5^;{7UNWFi zB&V=hA^@rtYUHJ+?bUAE-CW<%gQ*`|a;&|6YQ%c~TWJUlhn7vEG~9O4oduOOW_4LU zyC~z`vV}96Jf*``epY;#mG+Fdnk#v8gC=(fs(}&Q6H@$0IkF2Fx!H8PJb) zLN`Je6&VPuV)~1jyBoo5U}q~IcR!C21w(}=_w9KNXBWq@0U%zIpB_e^nq%Cc6r7dI z0SC+locy-ylExysGnQxpZ?oOpV;^kIKte^3MGH6G%pMEwli3c5I1|>yQqpL7w-?OC zS8Q*2$i#)`I=J|}F+ZNi-Fz2-p2jpZbHE3k{ek^RqWKcHy|LF5C)2g874OOIs6cU4 zNczId0N)aW<9IutP1oP*k}ER!{E6 z6t#ESr(~3!kX44LQL&H2dTc(E?5G8tEYVtcam@%jIlAH7e2XYu`Al(IpHFlb`vE`V)GMqW?^jy?$+8WbWmh z<_YfIZ^0r(zm24>4e_xk0O;LT#nYm#FfikR(CXOb#IfaC>#TaAV*!lCcVUM#cA!Lo zHUv)EM>Yry0SNfoOA18Ue`@T;i2J?34f+JYfzm&+P344`#;71n6Vnp@rOW zcA^)&SMa>L_zpN%*h>N_9kDilz^_Xl_ABlcej#&ZZobStfNLx7oL<(qsj8BE5xo1py;TP zNq!0xiYOmp#a1qw1rD3HmJg?RcWU`gX|U^;)vmsp_|eYX;&(*i+b8hW163=f&2*dC zzK=Q$L5oe+_I8f*BLmC~l6>UVt985QjiH6sESpFBYsB&f^^i8IcrSXj#9D84te9xo73&J{Nb^(B-7^BVx88_oBM^S9 z!3HXoI`QiW|+N=cPe+gDAf@$xlFmPN*Sw{1SW_Y%Y`CU3udn5ybt2!VyhI6d47 zUO4!!xdScV|Nc{Nc3=3NOn=)Z{wKZUSMC1x4S?@n!C*JR-@S0~wI}}Ldm2A69|GI` jCoS{;2{mulujpM5p57Xys;$U=)!abe^k~*$^rim-;Rg#F diff --git a/artwork/steam/announcement.psd b/artwork/steam/announcement.psd index 6f0b201c..18f4442f 100644 --- a/artwork/steam/announcement.psd +++ b/artwork/steam/announcement.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3c91adcd4e00006ffa4aed4db19d1530bf8c58935b1624d1640fc8e9465a2824 -size 176993 +oid sha256:bbac64f40b2bac1187c87efc97ac718c6e57349d304939c70d99a090e822b6dc +size 235135 From 2ca5dc97158436900294aaa01f35fefa1055f590 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:05:51 +0200 Subject: [PATCH 04/14] Fix hub marker being hidden by building info panel --- src/css/ingame_hud/waypoints.scss | 2 +- src/js/changelog.js | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/css/ingame_hud/waypoints.scss b/src/css/ingame_hud/waypoints.scss index ab8fed39..fecb2c66 100644 --- a/src/css/ingame_hud/waypoints.scss +++ b/src/css/ingame_hud/waypoints.scss @@ -29,7 +29,7 @@ #ingame_HUD_Waypoints { position: absolute; @include S(right, 10px); - @include S(top, 60px); + @include S(top, 45px); display: flex; flex-direction: column; @include DarkThemeInvert(); diff --git a/src/js/changelog.js b/src/js/changelog.js index da5ec97c..85dbff69 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -8,13 +8,14 @@ export const CHANGELOG = [ "Show keybindings for area-select in the upper left instead", "Automatically deselect area when selecting a new building", "Raise markers limit from 14 characters to 71 (by Joker-vD)", - "Optimize performance by caching miner items (by Phlosioneer)", + "Optimize performance by caching extractor items (by Phlosioneer)", "Added setting to enable compact building infos, which only show ratios and hide the image / description", "Apply dark theme to menu as well (by dengr1065)", "Fix belt planner not placing the last belt", "Fix buildings getting deleted when right clicking while placing a blueprint", "Fix for exporting screenshots for huge bases (It was showing an empty file) (by xSparfuchs)", "Fix buttons not responding when using right click directly after left click (by davidburhans)", + "Fix hub marker being hidden by building info panel", "Disable dialog background blur since it can cause performance issues", "Added simplified chinese translations", "Update translations (Thanks to all translators!)", From 38114ff3f62aef13c288808fc8f66878560346ae Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:22:33 +0200 Subject: [PATCH 05/14] Fix right click to delete not working --- artwork/steam/announcement-cover.png | Bin 0 -> 64479 bytes src/css/states/main_menu.scss | 8 ++++---- src/js/game/hud/parts/building_placer_logic.js | 14 +------------- 3 files changed, 5 insertions(+), 17 deletions(-) create mode 100644 artwork/steam/announcement-cover.png diff --git a/artwork/steam/announcement-cover.png b/artwork/steam/announcement-cover.png new file mode 100644 index 0000000000000000000000000000000000000000..60af91006574e8d631108b5a56fd3f1ca15bec4c GIT binary patch literal 64479 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 K(m-Z%G56aRxbK%Z`#E9H+mnE^*a;d=_4*6S`B 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 kN}?=9e>Au)^J a { - background: #4b4c50; + background: darken($darkModeGameBackground, 10); color: #eee; } diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index 647fe5b9..15564e4d 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -237,18 +237,6 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { } } - /** - * Canvas click handler - * @param {Vector} mousePos - * @param {boolean} cancelAction - */ - onCanvasClick(mousePos, cancelAction = false) { - // Prevent any other canvas clicks - if (this.currentMetaBuilding.get()) { - return STOP_PROPAGATION; - } - } - /** * Tries to place the current building at the given tile * @param {Vector} tile @@ -473,7 +461,7 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { this.currentlyDragging = true; this.currentlyDeleting = true; this.lastDragTile = this.root.camera.screenToWorld(pos).toTileSpace(); - this.currentMetaBuilding.set(null); + this.deleteBelowCursor(); return STOP_PROPAGATION; } From 0b31ad0c7bb77cb6d393901428ef793dd3bef97f Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:44:53 +0200 Subject: [PATCH 06/14] Pipette --- src/css/states/ingame.scss | 2 +- src/js/game/hud/hud.js | 2 ++ src/js/game/hud/parts/blueprint_placer.js | 34 +++++++++++++++---- .../game/hud/parts/building_placer_logic.js | 4 +-- src/js/game/hud/parts/keybinding_overlay.js | 9 ++++- src/js/game/hud/parts/pipette_blueprint.js | 23 +++++++++++++ src/js/game/key_action_mapper.js | 4 +-- translations/base-en.yaml | 3 +- 8 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 src/js/game/hud/parts/pipette_blueprint.js diff --git a/src/css/states/ingame.scss b/src/css/states/ingame.scss index 614cdf6a..3f220a5d 100644 --- a/src/css/states/ingame.scss +++ b/src/css/states/ingame.scss @@ -31,7 +31,7 @@ @include DarkThemeOverride { .gameLoadingOverlay { - background: #56565c; + background: $darkModeGameBackground; } } } diff --git a/src/js/game/hud/hud.js b/src/js/game/hud/hud.js index 40338600..5d99194e 100644 --- a/src/js/game/hud/hud.js +++ b/src/js/game/hud/hud.js @@ -34,6 +34,7 @@ import { HUDPartTutorialHints } from "./parts/tutorial_hints"; import { HUDWaypoints } from "./parts/waypoints"; import { HUDInteractiveTutorial } from "./parts/interactive_tutorial"; import { HUDScreenshotExporter } from "./parts/screenshot_exporter"; +import { Entity } from "../entity"; export class GameHUD { /** @@ -75,6 +76,7 @@ export class GameHUD { shapeUnpinRequested: /** @type {TypedSignal<[string]>} */ (new Signal()), notification: /** @type {TypedSignal<[string, enumNotificationType]>} */ (new Signal()), buildingsSelectedForCopy: /** @type {TypedSignal<[Array]>} */ (new Signal()), + pipetteExecuted: /** @type {TypedSignal<[Entity]>} */ (new Signal()), pasteBlueprintRequested: new Signal(), }; diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index fa9faca2..3831af99 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -10,6 +10,7 @@ import { makeDiv } from "../../../core/utils"; import { DynamicDomAttach } from "../dynamic_dom_attach"; import { blueprintShape } from "../../upgrades"; import { T } from "../../../translations"; +import { PipetteBlueprint } from "./pipette_blueprint"; export class HUDBlueprintPlacer extends BaseHUDPart { createElements(parent) { @@ -34,11 +35,9 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const keyActionMapper = this.root.keyMapper; keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); - keyActionMapper - .getBinding(KEYMAPPINGS.placement.abortBuildingPlacement) - .add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this); keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this); + keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.startPipette, this); this.root.camera.downPreHandler.add(this.onMouseDown, this); this.root.camera.movePreHandler.add(this.onMouseMove, this); @@ -57,15 +56,36 @@ export class HUDBlueprintPlacer extends BaseHUDPart { } } + /** + * Starts the pipette function + */ + startPipette() { + const mousePosition = this.root.app.mousePosition; + if (!mousePosition) { + // Not on screen + return; + } + + const worldPos = this.root.camera.screenToWorld(mousePosition); + const tile = worldPos.toTileSpace(); + const contents = this.root.map.getTileContent(tile); + if (contents) { + const blueprint = PipetteBlueprint.fromEntity(contents); + + // Notice: Order here matters, since pipetteExecuted clears the blueprint + this.root.hud.signals.pipetteExecuted.dispatch(contents); + this.currentBlueprint.set(blueprint); + } + } + onCanAffordChanged(canAfford) { this.costDisplayParent.classList.toggle("canAfford", canAfford); } update() { - this.domAttach.update(this.currentBlueprint.get()); - this.trackedCanAfford.set( - this.currentBlueprint.get() && this.currentBlueprint.get().canAfford(this.root) - ); + const currentBlueprint = this.currentBlueprint.get(); + this.domAttach.update(currentBlueprint && currentBlueprint.getCost() > 0); + this.trackedCanAfford.set(currentBlueprint && currentBlueprint.canAfford(this.root)); } /** diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index 15564e4d..3a41a3f2 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -97,15 +97,13 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { keyActionMapper .getBinding(KEYMAPPINGS.placement.switchDirectionLockSide) .add(this.switchDirectionLockSide, this); - keyActionMapper - .getBinding(KEYMAPPINGS.placement.abortBuildingPlacement) - .add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); this.root.gameState.inputReciever.keyup.add(this.checkForDirectionLockSwitch, this); // BINDINGS TO GAME EVENTS this.root.hud.signals.buildingsSelectedForCopy.add(this.abortPlacement, this); this.root.hud.signals.pasteBlueprintRequested.add(this.abortPlacement, this); + this.root.hud.signals.pipetteExecuted.add(this.abortPlacement, this); this.root.signals.storyGoalCompleted.add(() => this.signals.variantChanged.dispatch()); this.root.signals.upgradePurchased.add(() => this.signals.variantChanged.dispatch()); diff --git a/src/js/game/hud/parts/keybinding_overlay.js b/src/js/game/hud/parts/keybinding_overlay.js index 7aca3722..633dfcef 100644 --- a/src/js/game/hud/parts/keybinding_overlay.js +++ b/src/js/game/hud/parts/keybinding_overlay.js @@ -164,10 +164,17 @@ export class HUDKeybindingOverlay extends BaseHUDPart { condition: () => this.mapOverviewActive && !this.blueprintPlacementActive, }, + { + // Pipette + label: T.ingame.keybindingsOverlay.pipette, + keys: [k.placement.pipette], + condition: () => !this.mapOverviewActive, + }, + { // Cancel placement label: T.ingame.keybindingsOverlay.stopPlacement, - keys: [KEYCODE_RMB, DIVIDER_TOKEN, k.placement.abortBuildingPlacement], + keys: [KEYCODE_RMB], condition: () => this.anyPlacementActive, }, diff --git a/src/js/game/hud/parts/pipette_blueprint.js b/src/js/game/hud/parts/pipette_blueprint.js new file mode 100644 index 00000000..3be8a207 --- /dev/null +++ b/src/js/game/hud/parts/pipette_blueprint.js @@ -0,0 +1,23 @@ +import { Vector } from "../../../core/vector"; +import { Entity } from "../../entity"; +import { Blueprint } from "./blueprint"; + +export class PipetteBlueprint extends Blueprint { + /** + * @see Blueprint.getCost + */ + getCost() { + // Its free + return 0; + } + + /** + * Creates a new pipetted blueprint from a given entity + * @param {Entity} entity + */ + static fromEntity(entity) { + const clone = entity.duplicateWithoutContents(); + clone.components.StaticMapEntity.origin = new Vector(0, 0); + return new PipetteBlueprint([clone]); + } +} diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js index 659f01e6..c514446d 100644 --- a/src/js/game/key_action_mapper.js +++ b/src/js/game/key_action_mapper.js @@ -24,7 +24,7 @@ export const KEYMAPPINGS = { menuOpenStats: { keyCode: key("G") }, toggleHud: { keyCode: 113 }, // F2 - exportScreenshot: { keyCode: 114 }, // F3 + exportScreenshot: { keyCode: 114 }, // F3PS toggleFPSInfo: { keyCode: 115 }, // F4 }, @@ -56,7 +56,7 @@ export const KEYMAPPINGS = { }, placement: { - abortBuildingPlacement: { keyCode: key("Q") }, + pipette: { keyCode: key("Q") }, rotateWhilePlacing: { keyCode: key("R") }, rotateInverseModifier: { keyCode: 16 }, // SHIFT cycleBuildingVariants: { keyCode: key("T") }, diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 52f4ab3c..0b754e4b 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -288,6 +288,7 @@ ingame: cutSelection: Cut copySelection: Copy clearSelection: Clear Selection + pipette: Pipette # Everything related to placing buildings (I.e. as soon as you selected a building # from the toolbar) @@ -738,7 +739,7 @@ keybindings: painter: *painter trash: *trash - abortBuildingPlacement: Abort Placement + pipette: Pipette rotateWhilePlacing: Rotate rotateInverseModifier: >- Modifier: Rotate CCW instead From 76b619e4e75e837f8df0e631018a39dcd7b6cde1 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:46:20 +0200 Subject: [PATCH 07/14] Allow deselecting with pipette --- src/js/game/hud/parts/blueprint_placer.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 3831af99..eb07ae18 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -75,6 +75,8 @@ export class HUDBlueprintPlacer extends BaseHUDPart { // Notice: Order here matters, since pipetteExecuted clears the blueprint this.root.hud.signals.pipetteExecuted.dispatch(contents); this.currentBlueprint.set(blueprint); + } else { + this.root.hud.signals.pipetteExecuted.dispatch(null); } } From ba52edf7a4178c141fc2b550c8dd2190886586da Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 21:59:35 +0200 Subject: [PATCH 08/14] Fixes for the pipette --- artwork/steam/announcement.png | Bin 17994 -> 17746 bytes artwork/steam/announcement.psd | 4 ++-- src/js/game/hud/parts/blueprint_placer.js | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/artwork/steam/announcement.png b/artwork/steam/announcement.png index 85c4f1b05d79df0f1c0a91377abab84abf34a9ff..1aacc62e82392d1dbd962548936fc6408a526829 100644 GIT binary patch literal 17746 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 literal 17994 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 diff --git a/artwork/steam/announcement.psd b/artwork/steam/announcement.psd index 18f4442f..30dce1e6 100644 --- a/artwork/steam/announcement.psd +++ b/artwork/steam/announcement.psd @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bbac64f40b2bac1187c87efc97ac718c6e57349d304939c70d99a090e822b6dc -size 235135 +oid sha256:ebde52e75e54d2f4add0cf498c85f059082a0745212a23c4de7328a7d78b00a5 +size 238170 diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index eb07ae18..822e5c67 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -60,6 +60,11 @@ export class HUDBlueprintPlacer extends BaseHUDPart { * Starts the pipette function */ startPipette() { + // Disable in overview + if (this.root.camera.getIsMapOverlayActive()) { + return; + } + const mousePosition = this.root.app.mousePosition; if (!mousePosition) { // Not on screen @@ -69,7 +74,9 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const worldPos = this.root.camera.screenToWorld(mousePosition); const tile = worldPos.toTileSpace(); const contents = this.root.map.getTileContent(tile); - if (contents) { + + // Make sure we selected something, and also make sure it's not a special entity + if (contents && !contents.components.Unremovable) { const blueprint = PipetteBlueprint.fromEntity(contents); // Notice: Order here matters, since pipetteExecuted clears the blueprint From 5b2df00cc7b90839e52685606c289487ec8e7127 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:05:41 +0200 Subject: [PATCH 09/14] Fix pipetting belts --- src/js/game/hud/parts/blueprint_placer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 822e5c67..62ba4df1 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -76,7 +76,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const contents = this.root.map.getTileContent(tile); // Make sure we selected something, and also make sure it's not a special entity - if (contents && !contents.components.Unremovable) { + if (contents && !contents.components.Unremovable && !contents.components.Belt) { const blueprint = PipetteBlueprint.fromEntity(contents); // Notice: Order here matters, since pipetteExecuted clears the blueprint From d907dbb191030835d992db94a0fa22abcedc36b5 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:29:23 +0200 Subject: [PATCH 10/14] Improve pipette --- src/js/game/hud/hud.js | 1 - src/js/game/hud/parts/blueprint_placer.js | 43 +----- .../game/hud/parts/building_placer_logic.js | 123 +++++++++++++++++- src/js/game/hud/parts/pipette_blueprint.js | 23 ---- src/js/game/meta_building.js | 30 ++++- 5 files changed, 150 insertions(+), 70 deletions(-) delete mode 100644 src/js/game/hud/parts/pipette_blueprint.js diff --git a/src/js/game/hud/hud.js b/src/js/game/hud/hud.js index 5d99194e..c322c707 100644 --- a/src/js/game/hud/hud.js +++ b/src/js/game/hud/hud.js @@ -76,7 +76,6 @@ export class GameHUD { shapeUnpinRequested: /** @type {TypedSignal<[string]>} */ (new Signal()), notification: /** @type {TypedSignal<[string, enumNotificationType]>} */ (new Signal()), buildingsSelectedForCopy: /** @type {TypedSignal<[Array]>} */ (new Signal()), - pipetteExecuted: /** @type {TypedSignal<[Entity]>} */ (new Signal()), pasteBlueprintRequested: new Signal(), }; diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 62ba4df1..59f8dfc2 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -1,16 +1,15 @@ import { DrawParameters } from "../../../core/draw_parameters"; import { STOP_PROPAGATION } from "../../../core/signal"; import { TrackedState } from "../../../core/tracked_state"; +import { makeDiv } from "../../../core/utils"; import { Vector } from "../../../core/vector"; +import { T } from "../../../translations"; import { enumMouseButton } from "../../camera"; import { KEYMAPPINGS } from "../../key_action_mapper"; -import { BaseHUDPart } from "../base_hud_part"; -import { Blueprint } from "./blueprint"; -import { makeDiv } from "../../../core/utils"; -import { DynamicDomAttach } from "../dynamic_dom_attach"; import { blueprintShape } from "../../upgrades"; -import { T } from "../../../translations"; -import { PipetteBlueprint } from "./pipette_blueprint"; +import { BaseHUDPart } from "../base_hud_part"; +import { DynamicDomAttach } from "../dynamic_dom_attach"; +import { Blueprint } from "./blueprint"; export class HUDBlueprintPlacer extends BaseHUDPart { createElements(parent) { @@ -37,7 +36,6 @@ export class HUDBlueprintPlacer extends BaseHUDPart { keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this); keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this); - keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.startPipette, this); this.root.camera.downPreHandler.add(this.onMouseDown, this); this.root.camera.movePreHandler.add(this.onMouseMove, this); @@ -56,37 +54,6 @@ export class HUDBlueprintPlacer extends BaseHUDPart { } } - /** - * Starts the pipette function - */ - startPipette() { - // Disable in overview - if (this.root.camera.getIsMapOverlayActive()) { - return; - } - - const mousePosition = this.root.app.mousePosition; - if (!mousePosition) { - // Not on screen - return; - } - - const worldPos = this.root.camera.screenToWorld(mousePosition); - const tile = worldPos.toTileSpace(); - const contents = this.root.map.getTileContent(tile); - - // Make sure we selected something, and also make sure it's not a special entity - if (contents && !contents.components.Unremovable && !contents.components.Belt) { - const blueprint = PipetteBlueprint.fromEntity(contents); - - // Notice: Order here matters, since pipetteExecuted clears the blueprint - this.root.hud.signals.pipetteExecuted.dispatch(contents); - this.currentBlueprint.set(blueprint); - } else { - this.root.hud.signals.pipetteExecuted.dispatch(null); - } - } - onCanAffordChanged(canAfford) { this.costDisplayParent.classList.toggle("canAfford", canAfford); } diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index 3a41a3f2..0da81d4a 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -1,5 +1,6 @@ import { Math_abs, Math_degrees, Math_round } from "../../../core/builtins"; import { globalConfig } from "../../../core/config"; +import { gMetaBuildingRegistry } from "../../../core/global_registries"; import { Signal, STOP_PROPAGATION } from "../../../core/signal"; import { TrackedState } from "../../../core/tracked_state"; import { Vector } from "../../../core/vector"; @@ -9,7 +10,6 @@ import { Entity } from "../../entity"; import { KEYMAPPINGS } from "../../key_action_mapper"; import { defaultBuildingVariant, MetaBuilding } from "../../meta_building"; import { BaseHUDPart } from "../base_hud_part"; -import { lerp } from "../../../core/utils"; /** * Contains all logic for the building placer - this doesn't include the rendering @@ -98,12 +98,12 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { .getBinding(KEYMAPPINGS.placement.switchDirectionLockSide) .add(this.switchDirectionLockSide, this); keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); + keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.startPipette, this); this.root.gameState.inputReciever.keyup.add(this.checkForDirectionLockSwitch, this); // BINDINGS TO GAME EVENTS this.root.hud.signals.buildingsSelectedForCopy.add(this.abortPlacement, this); this.root.hud.signals.pasteBlueprintRequested.add(this.abortPlacement, this); - this.root.hud.signals.pipetteExecuted.add(this.abortPlacement, this); this.root.signals.storyGoalCompleted.add(() => this.signals.variantChanged.dispatch()); this.root.signals.upgradePurchased.add(() => this.signals.variantChanged.dispatch()); @@ -218,6 +218,125 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { } } + /** + * Starts the pipette function + */ + startPipette() { + // Disable in overview + if (this.root.camera.getIsMapOverlayActive()) { + return; + } + + const mousePosition = this.root.app.mousePosition; + if (!mousePosition) { + // Not on screen + return; + } + + const worldPos = this.root.camera.screenToWorld(mousePosition); + const tile = worldPos.toTileSpace(); + const contents = this.root.map.getTileContent(tile); + + if (!contents) { + this.currentMetaBuilding.set(null); + return; + } + + // Try to extract the building + const extracted = this.hack_reconstructMetaBuildingAndVariantFromBuilding(contents); + if (!extracted) { + this.currentMetaBuilding.set(null); + return; + } + + this.currentMetaBuilding.set(extracted.metaBuilding); + this.currentVariant.set(extracted.variant); + this.currentBaseRotation = contents.components.StaticMapEntity.rotation; + + // Make sure we selected something, and also make sure it's not a special entity + // if (contents && !contents.components.Unremovable) { + + // } + } + + /** + * HACK! + * + * This attempts to reconstruct the meta building and its variant from a given entity + * @param {Entity} entity + * @returns {{ metaBuilding: MetaBuilding, variant: string }} + */ + hack_reconstructMetaBuildingAndVariantFromBuilding(entity) { + if (entity.components.Hub) { + // Hub is not copyable + return null; + } + + const matches = []; + const metaBuildings = gMetaBuildingRegistry.entries; + for (let i = 0; i < metaBuildings.length; ++i) { + const metaBuilding = metaBuildings[i]; + const availableVariants = metaBuilding.getAvailableVariants(this.root); + checkVariant: for (let k = 0; k < availableVariants.length; ++k) { + const variant = availableVariants[k]; + let unplaced = metaBuilding.createEntity({ + root: this.root, + variant, + origin: new Vector(0, 0), + rotation: 0, + originalRotation: 0, + rotationVariant: 0, + }); + + // Compare if both entities share the same components + for (let component in entity.components) { + if ((entity.components[component] == null) !== (unplaced.components[component] == null)) { + continue checkVariant; + } + } + + // Check for same item processor + if ( + entity.components.ItemProcessor && + entity.components.ItemProcessor.type != unplaced.components.ItemProcessor.type + ) { + continue checkVariant; + } + + // Check for underground belt + if ( + entity.components.UndergroundBelt && + entity.components.UndergroundBelt.tier != unplaced.components.UndergroundBelt.tier + ) { + continue checkVariant; + } + + // Check for same sprite key - except for underground belts + // since the sprite may vary here + if ( + !entity.components.UndergroundBelt && + entity.components.StaticMapEntity.spriteKey != + unplaced.components.StaticMapEntity.spriteKey + ) { + continue checkVariant; + } + matches.push({ metaBuilding, variant }); + } + } + + if (matches.length == 1) { + const staticEntity = entity.components.StaticMapEntity; + const key = staticEntity.spriteKey || staticEntity.blueprintSpriteKey; + assert( + key && + key.includes(matches[0].metaBuilding.id) && + (matches[0].variant === defaultBuildingVariant || key.includes(matches[0].variant)) + ); + return matches[0]; + } + return null; + } + switchDirectionLockSide() { this.currentDirectionLockSide = 1 - this.currentDirectionLockSide; } diff --git a/src/js/game/hud/parts/pipette_blueprint.js b/src/js/game/hud/parts/pipette_blueprint.js deleted file mode 100644 index 3be8a207..00000000 --- a/src/js/game/hud/parts/pipette_blueprint.js +++ /dev/null @@ -1,23 +0,0 @@ -import { Vector } from "../../../core/vector"; -import { Entity } from "../../entity"; -import { Blueprint } from "./blueprint"; - -export class PipetteBlueprint extends Blueprint { - /** - * @see Blueprint.getCost - */ - getCost() { - // Its free - return 0; - } - - /** - * Creates a new pipetted blueprint from a given entity - * @param {Entity} entity - */ - static fromEntity(entity) { - const clone = entity.duplicateWithoutContents(); - clone.components.StaticMapEntity.origin = new Vector(0, 0); - return new PipetteBlueprint([clone]); - } -} diff --git a/src/js/game/meta_building.js b/src/js/game/meta_building.js index 723e854b..11da28f3 100644 --- a/src/js/game/meta_building.js +++ b/src/js/game/meta_building.js @@ -147,10 +147,32 @@ export class MetaBuilding { * @param {string} param0.variant */ createAndPlaceEntity({ root, origin, rotation, originalRotation, rotationVariant, variant }) { + const entity = this.createEntity({ + root, + origin, + rotation, + originalRotation, + rotationVariant, + variant, + }); + root.map.placeStaticEntity(entity); + root.entityMgr.registerEntity(entity); + return entity; + } + + /** + * Creates the entity without placing it + * @param {object} param0 + * @param {GameRoot} param0.root + * @param {Vector} param0.origin Origin tile + * @param {number=} param0.rotation Rotation + * @param {number} param0.originalRotation Original Rotation + * @param {number} param0.rotationVariant Rotation variant + * @param {string} param0.variant + */ + createEntity({ root, origin, rotation, originalRotation, rotationVariant, variant }) { const entity = new Entity(root); - const blueprintSprite = this.getBlueprintSprite(rotationVariant, variant); - entity.addComponent( new StaticMapEntityComponent({ spriteKey: @@ -166,12 +188,8 @@ export class MetaBuilding { blueprintSpriteKey: blueprintSprite ? blueprintSprite.spriteName : "", }) ); - this.setupEntityComponents(entity, root); this.updateVariants(entity, rotationVariant, variant); - - root.map.placeStaticEntity(entity); - root.entityMgr.registerEntity(entity); return entity; } From 597eefe968e6f2d481bb8b51a9ad3968a8e8713f Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:51:42 +0200 Subject: [PATCH 11/14] Deselect blueprint on pipette --- src/js/game/hud/parts/blueprint_placer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 59f8dfc2..ef46f101 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -34,6 +34,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const keyActionMapper = this.root.keyMapper; keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); + keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this); keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this); From e660fd2cafb63d8bf6873cc97928bf1baa18d2e2 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:54:50 +0200 Subject: [PATCH 12/14] Update changelog --- src/js/changelog.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index 85dbff69..fa41760b 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,8 +1,9 @@ export const CHANGELOG = [ { version: "1.1.16", - date: "unreleased", + date: "21.06.2020", entries: [ + "You can now pickup buildings below your cursor with 'Q'!", "The game soundtrack has been extended! There are now 4 songs with over 13 minutes of playtime from Peppsen!", "Refactor keybindings overlay to show more appropriate keybindings", "Show keybindings for area-select in the upper left instead", From 5e83c4642b4c882a74d26e973aad3e700f696e39 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 22:56:38 +0200 Subject: [PATCH 13/14] Reduce sound volume --- gulp/sounds.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulp/sounds.js b/gulp/sounds.js index 1b18278d..0e8dee12 100644 --- a/gulp/sounds.js +++ b/gulp/sounds.js @@ -29,7 +29,7 @@ function gulptasksSounds($, gulp, buildFolder) { .audioChannels(1) .audioFrequency(22050) .audioCodec("libmp3lame") - .audioFilters(["volume=0.3"]); + .audioFilters(["volume=0.15"]); }), { name: "music", From 969b7a74d44403e7aba5f8641048b172664bc635 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 21 Jun 2020 23:01:42 +0200 Subject: [PATCH 14/14] Fix belt planner shortcut being shown always --- src/js/game/hud/parts/keybinding_overlay.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/game/hud/parts/keybinding_overlay.js b/src/js/game/hud/parts/keybinding_overlay.js index 633dfcef..5b7f4a9d 100644 --- a/src/js/game/hud/parts/keybinding_overlay.js +++ b/src/js/game/hud/parts/keybinding_overlay.js @@ -44,7 +44,7 @@ export class HUDKeybindingOverlay extends BaseHUDPart { * it supports the belt planner * @returns {boolean} */ - get buildingPlacementBeltPlanner() { + get buildingPlacementSupportsBeltPlanner() { const placer = this.root.hud.parts.buildingPlacer; return ( !this.mapOverviewActive && @@ -225,7 +225,7 @@ export class HUDKeybindingOverlay extends BaseHUDPart { // Belt planner label: T.ingame.keybindingsOverlay.lockBeltDirection, keys: [k.placementModifiers.lockBeltDirection], - condition: () => this.buildingPlacementActive && !this.beltPlannerActive, + condition: () => this.buildingPlacementSupportsBeltPlanner && !this.beltPlannerActive, }, {