From 90fdbc731b7916851be142c81a913f4abb7a26b1 Mon Sep 17 00:00:00 2001 From: Phillip Thelen Date: Wed, 11 Sep 2024 09:32:48 +0200 Subject: [PATCH] show potential gep cap --- HabitRPG/Generated/Assets-Images.swift | 2 ++ HabitRPG/Generated/Storyboard Segues.swift | 1 - HabitRPG/Generated/Strings.swift | 6 ++++ .../gemcap_left.imageset/Contents.json | 23 +++++++++++++ .../gemcap_left.imageset/UnionLeft.png | Bin 0 -> 648 bytes .../gemcap_left.imageset/UnionLeft@2x.png | Bin 0 -> 1478 bytes .../gemcap_left.imageset/UnionLeft@3x.png | Bin 0 -> 2351 bytes .../gemcap_right.imageset/Contents.json | 23 +++++++++++++ .../gemcap_right.imageset/Union.png | Bin 0 -> 673 bytes .../gemcap_right.imageset/Union@2x.png | Bin 0 -> 1466 bytes .../gemcap_right.imageset/Union@3x.png | Bin 0 -> 2355 bytes .../Strings/Base.lproj/Mainstrings.strings | 2 ++ .../Purchases/SubscriptionDetailViewUI.swift | 8 ++--- HabitRPG/UI/Purchases/SubscriptionPage.swift | 32 ++++++++++++++++++ 14 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 HabitRPG/Images.xcassets/gemcap_left.imageset/Contents.json create mode 100644 HabitRPG/Images.xcassets/gemcap_left.imageset/UnionLeft.png create mode 100644 HabitRPG/Images.xcassets/gemcap_left.imageset/UnionLeft@2x.png create mode 100644 HabitRPG/Images.xcassets/gemcap_left.imageset/UnionLeft@3x.png create mode 100644 HabitRPG/Images.xcassets/gemcap_right.imageset/Contents.json create mode 100644 HabitRPG/Images.xcassets/gemcap_right.imageset/Union.png create mode 100644 HabitRPG/Images.xcassets/gemcap_right.imageset/Union@2x.png create mode 100644 HabitRPG/Images.xcassets/gemcap_right.imageset/Union@3x.png diff --git a/HabitRPG/Generated/Assets-Images.swift b/HabitRPG/Generated/Assets-Images.swift index c742ef361..569ceec52 100644 --- a/HabitRPG/Generated/Assets-Images.swift +++ b/HabitRPG/Generated/Assets-Images.swift @@ -207,6 +207,8 @@ internal enum Asset { internal static let gemPurchaseFooterSparkles = ImageAsset(name: "gem_purchase_footer_sparkles") internal static let gemPurchaseHeader = ImageAsset(name: "gem_purchase_header") internal static let gemPurchaseHeaderDark = ImageAsset(name: "gem_purchase_header_dark") + internal static let gemcapLeft = ImageAsset(name: "gemcap_left") + internal static let gemcapRight = ImageAsset(name: "gemcap_right") internal static let giftSubGift = ImageAsset(name: "gift_sub_gift") internal static let grabIndicator = ImageAsset(name: "grab_indicator") internal static let gryphon = ImageAsset(name: "gryphon") diff --git a/HabitRPG/Generated/Storyboard Segues.swift b/HabitRPG/Generated/Storyboard Segues.swift index fd9a70e08..54e247260 100644 --- a/HabitRPG/Generated/Storyboard Segues.swift +++ b/HabitRPG/Generated/Storyboard Segues.swift @@ -66,7 +66,6 @@ internal enum StoryboardSegue { case showWebPromoSegue case subscriptionSegue case tasksBoardSegue - case unwindToList } internal enum Settings: String, SegueType { case fixValuesSegue = "FixValuesSegue" diff --git a/HabitRPG/Generated/Strings.swift b/HabitRPG/Generated/Strings.swift index c33818485..b48c848f7 100644 --- a/HabitRPG/Generated/Strings.swift +++ b/HabitRPG/Generated/Strings.swift @@ -974,6 +974,8 @@ public enum L10n { public static var resetStreak: String { return L10n.tr("Mainstrings", "resetStreak") } /// Resubscribe public static var resubscribe: String { return L10n.tr("Mainstrings", "resubscribe") } + /// Resubscribe to pick up where you left off! + public static var resubscribeToPickUp: String { return L10n.tr("Mainstrings", "resubscribe_to_pick_up") } /// Resume Damage public static var resumeDamage: String { return L10n.tr("Mainstrings", "resume_damage") } /// Resync @@ -1340,6 +1342,10 @@ public enum L10n { public static func xToY(_ p1: String, _ p2: String) -> String { return L10n.tr("Mainstrings", "x_to_y", p1, p2) } + /// %d/%d Gem Cap + public static func xxGemCap(_ p1: Int, _ p2: Int) -> String { + return L10n.tr("Mainstrings", "x_x_gem_cap", p1, p2) + } /// year public static var year: String { return L10n.tr("Mainstrings", "year") } /// Yearly diff --git a/HabitRPG/Images.xcassets/gemcap_left.imageset/Contents.json b/HabitRPG/Images.xcassets/gemcap_left.imageset/Contents.json new file mode 100644 index 000000000..2c2dc432b --- /dev/null +++ b/HabitRPG/Images.xcassets/gemcap_left.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "UnionLeft.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "UnionLeft@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "UnionLeft@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HabitRPG/Images.xcassets/gemcap_left.imageset/UnionLeft.png b/HabitRPG/Images.xcassets/gemcap_left.imageset/UnionLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..062a3996c57bf3098542be119960f571998498b5 GIT binary patch literal 648 zcmV;30(bq1P)(_65!0b15AWEiKpx4&x7)YCSvQ6@danRZygXd&#|?_Csj zwOH$W6%3aGTcg09PN#M!Uk>3)Dqj3I5PNbq-35VyjuTjvgk1#q_7q@KIQK|^HiXFm zCP2;Y?!D4p8ms>Oq{f6EYItYjKgF;XTEhE+FnCkGvGsRs(!Zzu;7N- znNYMm>)kFnigg9ZdfpfwduhN~Zt~ugZ7VrWp{FSJS@^?c*tvF24}#|Cu$FdUb9hv! z|2z&F!=MT)ikg!zE|`(-IFI}3VQcf-e1|^6sz5#Eu?PvFjWm8R3EE_n z>B;6Z8NC0@j9MbCLJTtFLW~JX(_^JoeLTxGx5#NM&+yV*WtK@5lP?te!YT=3y^1L* znvxjNi_uAJ0Q$90tOOg8L!aFY&GJ3^9V16(bqWmi()g)&YWs~Y%&z&+JwE{%Y7!s& zlEDN6kbK7UJExXr_qoO4mF$raU*U`2g;_}|)&qF{xSft1g2a*rGn^pW*I4X^N)|?j zDZ&J)zz`+Jz+%pwv_;NB=&||21g??O#z+cv1gV>=hx6yA%nPtyUgXa)WalH=v4z=F{<4*U!CCG3~B}Ut~kc77;8;^2zG+2}tZB!m|c^$mMU( zc1^wLcPv67YYVsqxmjXQpHIUAorAzay-A-}vWfc6F>R9zqQ&Iu`dW@T(Z_Mu%~DS~ zqz=KPOh62R6259&aemETSzVjPF7!f&m-L48Z-rtnp=ENGO#CE=gVBdi?&a7iW0T%zq{)} zI&CK&`gP$3TWh7v=&^Fo2V>L*h8Lp@Gy$5yIT)9Wam3cbn5YG&)cR(!>zN!sb1c8# zeB0!TYd`q1o>;VGpl+Bif>iE`mKkVX?O1~9K`OiFE)6aJ6yUj0n?bV|lzY-`5!{Kw zeB^swlwqCd!#Y4#L8|i2`02NTR-WG`H?neT0t?GS=chQxUS8?T5 zzNz0Fwo7b#LZ$(-hn2_v5BJc~TFeE<d zm6X_z&G0zR#Vdml_EMpo`j6r)-H0CP~Ryir(3JR{Zdo>Mh) z1lxY@>f_r5wgpWEDWEKkb5njhyRUi~scBY=_QXk?F7=!a$q{U4;^pJ#E3D&wEE1(` zNI^?=B%0kQbmLaDas_mv0kOr#K>QB)5U1s-#Jcuh|rtc6SzjqV9x@PaSP?t$9ZL~ zpM-E0_!njK$B{qp4VeDn-|y$qo`L#?keU;w|KDh-5M$1rj^UVDeF+zh^n+^1;ry-I z;N{Z0r>o>34pe0-KAOv;hJ&=m^KETd(^C1pGih=Z2dZ0^PMobOud5%2W}> gBffq#caa>&Kg~~I8erg1+yDRo07*qoM6N<$f)2{ffB*mh literal 0 HcmV?d00001 diff --git a/HabitRPG/Images.xcassets/gemcap_left.imageset/UnionLeft@3x.png b/HabitRPG/Images.xcassets/gemcap_left.imageset/UnionLeft@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..74b2e70efb09e6c6c50d710a1f44cfaf1d7d8d1b GIT binary patch literal 2351 zcmV+~3DEY5P)JDxUD({9Whjo0Qdl0wfdMmeU6RAM3{wvl_lw=JGF zl7;A+dA3Zdp>+Xyh@sDEklCAT-YJZ69BCX4UuY@a*-|2Je70RA?N9BVgcBl!SK=Fx zW9xmkkjOWu1iNm`WA8m6xypDZb}ekCrbQU~d~1?46P5U zwlTGlWTqZ;iU>$Z-11>Y6J?r5B^tZ^n`Hi3?PE$Lnm7{aWV#&rVm-5^VMfBJ<^hnd z-|78P>3RD^Vk1lSTI%V}(+rVwS!FG!q-@k^d}a97Vwhmu z+R0-L?V*LuL9X3QiJF5sX2ZvwcPp2E{GFwU6G`6?2kRNVLzlU3k>O5ft)o=)y^bYPfyzq6An{u!%zF7)} z=y82;pwiRs9p$`7BC=GUW8#1nr!F%iyv2S~uQYxPAuI-431E;hP!IW+s&tII_D54` zmRXyucu@Mv&8~|_DmWb%`GsXSkxbO2AGVLsta66|5%fgNY)2wVcd(%%omBP|1 z@3W*4k4z%KbBGk;Ho(tvt+AiWwh}+}!d{h;?Np$$pybPyIA2v+e6z2vwO32&baQGp z{O`Zzxz2u<$t9CjmJ3rVfAidh31~4ykq+oV1<0d`3;cu~dxb&4HL_r){I=JwS5B}V=vzdN zu0ELKBih)B_NlJQdAEn8p!zBg*-~fUu}@Z5UT`%yGqS=VIIi5PiSo}cyf}}}$S>A2 z$_KXXD$Ay(m;1ux!o=;jU(cWPnEQwvso&2i2j}cvV!eTyK)v&E8zkmWLfo^Euhmk? zHvb-xs|Ds3N;A3V9wIX2AMkOikd?D*YPhzLXf`bR}6 zaY8|y!e-*uFVX{WMsaXvlMVd|YCR1RBI!7lz@6HTIBE*cFq%Xbp4`vzrW@=EuBGwL z-&Y|*_}~|t0|K#DKHnYbjf)yhB3T=QcJ&s@Qp^%Wh{AHs<;`HYeujK_AI>-ok%i4q zT;BBC0w#wxzB3CE!l==P8{)jDZv8S{g)7kjgGT;0J>J>pK}0Ale7AVnU|BuaKwJP=zO-Cx?MBfmUt(}oii;WriWE=%%yNGUmI_npgVn#* z3iUY`S_qzNU*q$1+oT0?`BI(faOWUY`L%b(a9h90D)Dx|CRZ!}pQEdvwnUvW$3{*0 z=4#=XsZp?Ridb0vONsMv*Z6B$)gMgVICn>C;543mbY<}_A1EKBu4?6TZ@mdI!@eov zc*i>><@O&7`|^DTGtl4D5*5Ikyq`iD_f!CSAIjQxzWdu-aBl6-+{?6 zo5UxYjw^|RBUcfPI=RZmyX3;`wp|AU)2NbT*v&V7Jr%YaUHP)ccC}kb=UU11hh4vlEJ^%Bz_E!G zh&r{FRGS*K1*D+N2{`3A&X~Wgr55s$8Pl2_6v058)hIX-ks%6?ALW=saYk-PsClGU zn?t*%5#d<*XFVl|IZj2Sz^K!AO03R5fK4!lwo?LnuiVv>hL-@RUX3Q6z5K?doC5tm z2k#!*$M)@#I;BeRlHk;e+zW{t{iI(+QaMS^r)sz_S1V002ovPDHLkV1g1;XmtPp literal 0 HcmV?d00001 diff --git a/HabitRPG/Images.xcassets/gemcap_right.imageset/Contents.json b/HabitRPG/Images.xcassets/gemcap_right.imageset/Contents.json new file mode 100644 index 000000000..c34ba9d90 --- /dev/null +++ b/HabitRPG/Images.xcassets/gemcap_right.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Union.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Union@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Union@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/HabitRPG/Images.xcassets/gemcap_right.imageset/Union.png b/HabitRPG/Images.xcassets/gemcap_right.imageset/Union.png new file mode 100644 index 0000000000000000000000000000000000000000..132499cadef9278dbfa56e4dae02a278c62d884e GIT binary patch literal 673 zcmV;S0$%-zP)O=kDYeEDY2IfMC-9orUZ#q1)gt4uNlz@uof zgCtxAaP<4l^7yp^B!G>ed?|4ni33Jz0&x?dyA23U1gI-iQ$XNBLfD8nibRFV9ecBv zU~caq&43IEK|ha7G*1&TGeS~^gy3Bf_Rgs)Ow3OwWZpU=Rr4cu;$?}QD9}pU$}y;| zFWPtP5*fR?UZB@>ei_)-?%kKf-=nV83K9&aDDzT{5*g7a~Ua@ugTu8YYd77t6Q$>2nnNJ2yRV%yh+@t}CHJJV8M zBT)SQGQ-_p%?!y+WlizpYhUj;t?$r6d3Yj#^Cqtg%#0l3FbRo<);K0)L|QYWUKU?K^aTcsjChHJN=3%_%Z(yPVF|krfgB)0MU^2eTxLGBw%V?-F=`seO zs(n-A5S8((tkS_?SOxK1ObHhP0i`m`rlyrDd!ApG2Qu;N<^Sqr@`pbfF0>4x5ay0C z5?E$?X)wG(ZGwrd3rq>Th@2>;OVlQe_{~DsX=6+@FpH^1Z35w3m1DT>xMUG9y>!1! zIfQ0`+DA1=qe@vujwIEy3K3VS1F(Hl4s(t$=aB!s4#|;)E1hmw#L97;^;8kcqfJOq zl4U@)RKtj<0>UbCQuj9}cTQr|B4oOeh0vL}g2K?l82WYOm40Jr^Yh2YBdv78vJBW5 zmhuIH)us1BpRwVuap@w!)+fIEJK0J{_^o|mdH!N~=vop=V@A$l>GH(R(R5S2U>Ua& z`r?hH!B^5Swn0$Q^hB{4g1VtjUlOLC{`g>O@B3tGub7|?aA_#PYoln)Qjjam>Q{Gf zj9q*tU8=YT9w7noG%1t7^J5Ed-&&;(F!k$`X=Xniq+gUKOhyDk0aeFC4WTjHJD6*> zuYa8<$(@6kCbbC+IsAuB2RC537^4H<41T3mBdlL(N1FO=O+AT&*xE>>;M`Tb@AIJEV zY>=SwJkGaS`S5IL17yohlY2&x{7r-&Ds##qY__oa7rZViWTHJCDVx-8DdJ=BU~s=C z^AkJt>B8-IF4eiINQyFrVJDj zD(7)Y{nRF|*TZWn*e+3tbS3XvL2j|{P7cXnRd%phJ5B1@=aJ^Tdld4f;kj;E0}sQ; zqgId;I8+z!)lgTCwyG&p`}xG-pY=RAB}FVDEYtHhKFU}_PL=^|Q>}=O^I0|JJqf+3 zT7DTxX%huy1h;a=_u}(6KRl~!>_M_pa>FO}5=gqn;o-&Jf!t-!V)2HyrK~6$D3ls9 zWqPjr-gBGE)_6{k>4{dA;g!>J;Dz23Z%zJQ$U@mZ!rY3$JCK4-{30=db=9+Y@7nQk z9%)_PG>t9XzPozXHuc+M=t-6`%nhmoE#8V>`U=3lw->)vi>0xYURJ*EHNUBJtvsjD?WnfVh~hc%=f;Vp%xJ$i-8J%!tr#qol;2f59ZTr U!;Xd4fdBvi07*qoM6N<$f^BNCX8-^I literal 0 HcmV?d00001 diff --git a/HabitRPG/Images.xcassets/gemcap_right.imageset/Union@3x.png b/HabitRPG/Images.xcassets/gemcap_right.imageset/Union@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e1937121963dd452ef20db670a3878074ec7dcc3 GIT binary patch literal 2355 zcmV-33C#A1P)RFAec-_wzN^4*d?-t#0%dF!EOlF`Q0$1)e83Y3a!iJx*{>?UPBn8h#NC;uF4I&ldwZb2fAgoDVNS&RHsXozo)=7r%)dQDFWEdi$B;ROFYc|uO zin3K~HKq#BCTG7ertP{Sb<1yILWr_A+ezRKc=myBb(Bn5TGT!U*B#HWjdVz4u-Zjy zCU*@o%WBj-Y4BVkLP`&I=66(*68i8>(8n86r=&(|IY?&}8A%$TSSWB|A*BQpJ{jFR zsz{+!E{PQ}#uZ8d!b5zS#Gpd>#CqZMaOTRL<~eFJI?d6|yzOjm zgXCHiunc)akf|U3{qpUt615SVc40#-S2G)AGNIC92*X^lwr9eW$;)@Q$EfXa)2tbi z|5!5R5HuMkZ6?$DkDXebQ;^AuAydf$Mp-ozk10N?@|Ax-o}mN6_();r8O;?Y z2O)QFaKU2o*V!RbG~FukYJK6#e;zM#+ksvZ>>~x|^A4BMw0hM6V5~j_$xfW*XWmCO$ z&U?A%Qu;wi=W)Wno{KxpS;yNY*j-{|j|q7-oT%i2ZKO+L0& zouEcWMdvFgPF0i7u-{xiz7as6gOpJLNIY!^(K35VMq|ce#jt>lB~-`eI-A~8iG3+$ zlosoLrXxGg{>Sc#e_dln#*`ZD+;Nc$IzvlQhN@G2x%Ao?z{u+V#x&oA5SuavA4-ab zKw|j3@0IH{e=S-IJVApna#$3P$y!ruT(M=f$d)uzIewXGHV-i%5Lx@#>5II$Qt_1Q%so)#=tP zIl3j3>R(pJ-iKrjjl+% zoU9@ZG=tOTMlDKJm6|ZA#W&Vr;SP}uPk2R}ftb=nkftiPqD&R%NMgv`=-R&mXNatv z=nLWhr;{WZ|5H&V`@|z&a|}OOF1d>jCmVByNJjIq97i>(ZmKy@<<-^yUZ6H&w0N>y{U7e&PsF6wWCH>KP$saj>VOnuxq2EaL{zoq=~Z03NP)h5Fse9l9w%3 zjut|v6v^1??3hB)vo37aHoxArd7vPDw7wW@2(<`jQ4;Y@V3^MuSSeMG|8|H;hKlT*k% z!uSca?)|EgRk*Hc5#_j2oL6&L)zFGAarx{?5{VqXJ8XD$IS^9*Gp^3-Ojf^H$-St^ z%Ox|38JSf`w#siGX}Q^@W$}3}2Z!%{;MT*ZrtB3z9C`EFPk(v-S)U#G>draT8)sO- zVy7}*hd+GpTCVWIZmE-|odD)IZlV+u@9A^H50--`Kf|qtk+1Kd)odDO{;oUbK0K=F z&ApJwa9WX!tM@;hg^N2&*2JqH^qgw72uAKhg<1JGetg>YWK1j{Mx=`qxk8op0q2Pv zU0u$rjQGEKTHHh~(H}g|3sHWX0d<46(`|b_n4tc8RH}07eeJ`Fkq4il!x)uK2!q*N zOXXwfCxJCctjQ>PuhO$W74C-9J~F|Ux6UnyMtpZ>FKpZwt>-MnbeD*Ja}W~kab6LO zJXq$mvD|v7Uy4vDRjl;9Q>8ZGl~5#O%iEmB+#SXZ$LXUFw+ihd@s-2K{Z9}A-3=%O Zd 0 { + VStack(spacing: 0) { + HStack(spacing: 10) { + Image(Asset.gemcapLeft.name) + Text(L10n.xxGemCap(viewModel.subscriptionPlan?.gemCapTotal ?? 0, 50)) + .font(.system(size: 20, weight: .bold)) + Image(Asset.gemcapRight.name) + } + Text(L10n.resubscribeToPickUp).font(.system(size: 13)) + if #available(iOS 15.0, *) { + GeometryReader { reader in + ZStack(alignment: .leading) { + Rectangle() + .foregroundColor(.purple100) + .fill() + .cornerRadius(4) + .frame(maxWidth: .infinity) + .frame(height: 8) + Rectangle() + .foregroundColor(.green100) + .fill() + .cornerRadius(4) + .frame(width: reader.size.width * (CGFloat(viewModel.subscriptionPlan?.gemCapTotal ?? 0) / 50.0), height: 8) + } + } + .padding(.top, 8) + .padding(.horizontal, 41) + } + }.padding(.bottom, 24) + } SubscriptionBenefitListView(presentationPoint: viewModel.presentationPoint, mysteryGear: viewModel.mysteryGear) .padding(.horizontal, 24) ZStack(alignment: .top) { @@ -317,6 +347,8 @@ struct SubscriptionPage: View { } } } + .padding(.horizontal, 24) + .padding(.bottom, 24) Rectangle() .frame(height: viewModel.showHourglassPromo && viewModel.selectedSubscription == viewModel.availableSubscriptions.last ? 186 : 126) .cornerRadius(12)