From 81031ff411868e630c830ae114abe1bdfea3e532 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sat, 30 May 2020 19:41:49 +0200 Subject: [PATCH] the beginning --- .gitignore | 4 + Android/.config/dotnet-tools.json | 12 +++ Android/Activity1.cs | 49 +++++++++++ Android/Android.csproj | 81 ++++++++++++++++++ Android/Properties/AndroidManifest.xml | 5 ++ Android/Properties/AssemblyInfo.cs | 30 +++++++ Android/Resources/Drawable/Icon.png | Bin 0 -> 27076 bytes Android/Resources/Resource.Designer.cs | 77 +++++++++++++++++ Android/Resources/Values/Strings.xml | 4 + Desktop/.config/dotnet-tools.json | 12 +++ Desktop/Desktop.csproj | 25 ++++++ Desktop/Program.cs | 18 ++++ ThemeParkClicker.sln | 28 ++++++ ThemeParkClicker/Content/Content.mgcb | 32 +++++++ .../Content/Fonts/EXEPixelPerfect.ttf | Bin 0 -> 12112 bytes .../Content/Fonts/Regular.spritefont | 60 +++++++++++++ ThemeParkClicker/Content/Textures/Ui.aseprite | Bin 0 -> 1126 bytes ThemeParkClicker/Content/Textures/Ui.png | Bin 0 -> 1587 bytes ThemeParkClicker/GameImpl.cs | 34 ++++++++ ThemeParkClicker/RainingTicket.cs | 35 ++++++++ ThemeParkClicker/ThemeParkClicker.csproj | 18 ++++ ThemeParkClicker/Ui.cs | 68 +++++++++++++++ 22 files changed, 592 insertions(+) create mode 100644 .gitignore create mode 100644 Android/.config/dotnet-tools.json create mode 100644 Android/Activity1.cs create mode 100644 Android/Android.csproj create mode 100644 Android/Properties/AndroidManifest.xml create mode 100644 Android/Properties/AssemblyInfo.cs create mode 100644 Android/Resources/Drawable/Icon.png create mode 100644 Android/Resources/Resource.Designer.cs create mode 100644 Android/Resources/Values/Strings.xml create mode 100644 Desktop/.config/dotnet-tools.json create mode 100644 Desktop/Desktop.csproj create mode 100644 Desktop/Program.cs create mode 100644 ThemeParkClicker.sln create mode 100644 ThemeParkClicker/Content/Content.mgcb create mode 100644 ThemeParkClicker/Content/Fonts/EXEPixelPerfect.ttf create mode 100644 ThemeParkClicker/Content/Fonts/Regular.spritefont create mode 100644 ThemeParkClicker/Content/Textures/Ui.aseprite create mode 100644 ThemeParkClicker/Content/Textures/Ui.png create mode 100644 ThemeParkClicker/GameImpl.cs create mode 100644 ThemeParkClicker/RainingTicket.cs create mode 100644 ThemeParkClicker/ThemeParkClicker.csproj create mode 100644 ThemeParkClicker/Ui.cs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..634ecdc --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +bin/ +obj/ +/packages/ +.idea \ No newline at end of file diff --git a/Android/.config/dotnet-tools.json b/Android/.config/dotnet-tools.json new file mode 100644 index 0000000..c429d1a --- /dev/null +++ b/Android/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-mgcb": { + "version": "3.8.0.1375-develop", + "commands": [ + "mgcb" + ] + } + } +} \ No newline at end of file diff --git a/Android/Activity1.cs b/Android/Activity1.cs new file mode 100644 index 0000000..8c74e77 --- /dev/null +++ b/Android/Activity1.cs @@ -0,0 +1,49 @@ +using Android.App; +using Android.Content.PM; +using Android.OS; +using Android.Views; +using Microsoft.Xna.Framework; +using MLEM.Extensions; +using MLEM.Misc; +using ThemeParkClicker; + +namespace Android { + [Activity( + Label = "@string/app_name", + MainLauncher = true, + Icon = "@drawable/icon", + AlwaysRetainTaskState = true, + LaunchMode = LaunchMode.SingleInstance, + ScreenOrientation = ScreenOrientation.UserPortrait, + ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize + )] + public class Activity1 : AndroidGameActivity { + + private GameImpl game; + private View view; + + protected override void OnCreate(Bundle bundle) { + base.OnCreate(bundle); + // render under notches + if (Build.VERSION.SdkInt >= BuildVersionCodes.P) + this.Window.Attributes.LayoutInDisplayCutoutMode = LayoutInDisplayCutoutMode.ShortEdges; + + TextInputWrapper.Current = new TextInputWrapper.Mobile(); + this.game = new GameImpl(); + this.game.GraphicsDeviceManager.ResetWidthAndHeight(this.game.Window); + this.game.OnLoadContent += game => game.InputHandler.HandleMouse = false; + this.game.GraphicsDeviceManager.IsFullScreen = true; + this.view = this.game.Services.GetService(typeof(View)) as View; + + this.SetContentView(this.view); + this.game.Run(); + } + + public override void OnWindowFocusChanged(bool hasFocus) { + base.OnWindowFocusChanged(hasFocus); + // hide the status bar + this.view.SystemUiVisibility = (StatusBarVisibility) (SystemUiFlags.LayoutStable | SystemUiFlags.LayoutHideNavigation | SystemUiFlags.LayoutFullscreen | SystemUiFlags.HideNavigation | SystemUiFlags.Fullscreen | SystemUiFlags.ImmersiveSticky); + } + + } +} \ No newline at end of file diff --git a/Android/Android.csproj b/Android/Android.csproj new file mode 100644 index 0000000..e6dd93b --- /dev/null +++ b/Android/Android.csproj @@ -0,0 +1,81 @@ + + + + Debug + AnyCPU + 8.0.30703 + 2.0 + {410C0262-131C-4D0E-910D-D01B4F7143E0} + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Library + Properties + Android + Android + 512 + true + Resources\Resource.Designer.cs + Resource + Off + .m4a + v9.0 + Properties\AndroidManifest.xml + false + Resources + Assets + true + Xamarin.Android.Net.AndroidClientHandler + + + true + full + false + bin\$(MonoGamePlatform)\$(Platform)\$(Configuration)\ + DEBUG;TRACE;ANDROID + prompt + 4 + True + None + + + pdbonly + true + bin\$(MonoGamePlatform)\$(Platform)\$(Configuration)\ + TRACE;ANDROID + prompt + 4 + False + SdkOnly + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {3df7ae69-f3f0-461a-be98-f31eb576b5e2} + ThemeParkClicker + + + + \ No newline at end of file diff --git a/Android/Properties/AndroidManifest.xml b/Android/Properties/AndroidManifest.xml new file mode 100644 index 0000000..710acda --- /dev/null +++ b/Android/Properties/AndroidManifest.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/Android/Properties/AssemblyInfo.cs b/Android/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..fd082d4 --- /dev/null +++ b/Android/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using Android.App; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Android")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Android")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file diff --git a/Android/Resources/Drawable/Icon.png b/Android/Resources/Drawable/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..25fe044482ebc8cf48bc4c566e934edde8a4bc23 GIT binary patch literal 27076 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 literal 0 HcmV?d00001 diff --git a/Android/Resources/Resource.Designer.cs b/Android/Resources/Resource.Designer.cs new file mode 100644 index 0000000..ffa9478 --- /dev/null +++ b/Android/Resources/Resource.Designer.cs @@ -0,0 +1,77 @@ +#pragma warning disable 1591 +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +[assembly: global::Android.Runtime.ResourceDesignerAttribute("Android.Resource", IsApplication=true)] + +namespace Android +{ + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] + public partial class Resource + { + + static Resource() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + public static void UpdateIdValues() + { + } + + public partial class Attribute + { + + static Attribute() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Attribute() + { + } + } + + public partial class Drawable + { + + // aapt resource value: 0x7F010000 + public const int Icon = 2130771968; + + static Drawable() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private Drawable() + { + } + } + + public partial class String + { + + // aapt resource value: 0x7F020000 + public const int app_name = 2130837504; + + static String() + { + global::Android.Runtime.ResourceIdManager.UpdateIdValues(); + } + + private String() + { + } + } + } +} +#pragma warning restore 1591 diff --git a/Android/Resources/Values/Strings.xml b/Android/Resources/Values/Strings.xml new file mode 100644 index 0000000..7f40978 --- /dev/null +++ b/Android/Resources/Values/Strings.xml @@ -0,0 +1,4 @@ + + + Android + diff --git a/Desktop/.config/dotnet-tools.json b/Desktop/.config/dotnet-tools.json new file mode 100644 index 0000000..c429d1a --- /dev/null +++ b/Desktop/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-mgcb": { + "version": "3.8.0.1375-develop", + "commands": [ + "mgcb" + ] + } + } +} \ No newline at end of file diff --git a/Desktop/Desktop.csproj b/Desktop/Desktop.csproj new file mode 100644 index 0000000..99301e5 --- /dev/null +++ b/Desktop/Desktop.csproj @@ -0,0 +1,25 @@ + + + + Exe + netcoreapp3.0 + false + false + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Desktop/Program.cs b/Desktop/Program.cs new file mode 100644 index 0000000..f2dfd5b --- /dev/null +++ b/Desktop/Program.cs @@ -0,0 +1,18 @@ +using Microsoft.Xna.Framework; +using MLEM.Misc; +using ThemeParkClicker; + +namespace Desktop { + public static class Program { + + public static void Main() { + TextInputWrapper.Current = new TextInputWrapper.DesktopGl((w, c) => w.TextInput += c); + using var game = new GameImpl(); + game.GraphicsDeviceManager.PreferredBackBufferWidth = 1080 / 3; + game.GraphicsDeviceManager.PreferredBackBufferHeight = 1920 / 3; + game.IsMouseVisible = true; + game.Run(); + } + + } +} \ No newline at end of file diff --git a/ThemeParkClicker.sln b/ThemeParkClicker.sln new file mode 100644 index 0000000..cd60f02 --- /dev/null +++ b/ThemeParkClicker.sln @@ -0,0 +1,28 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThemeParkClicker", "ThemeParkClicker\ThemeParkClicker.csproj", "{3DF7AE69-F3F0-461A-BE98-F31EB576B5E2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Android", "Android\Android.csproj", "{410C0262-131C-4D0E-910D-D01B4F7143E0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Desktop", "Desktop\Desktop.csproj", "{41506EAE-7E73-4147-8C8F-CA70924DB7FA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3DF7AE69-F3F0-461A-BE98-F31EB576B5E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DF7AE69-F3F0-461A-BE98-F31EB576B5E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DF7AE69-F3F0-461A-BE98-F31EB576B5E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DF7AE69-F3F0-461A-BE98-F31EB576B5E2}.Release|Any CPU.Build.0 = Release|Any CPU + {410C0262-131C-4D0E-910D-D01B4F7143E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {410C0262-131C-4D0E-910D-D01B4F7143E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {410C0262-131C-4D0E-910D-D01B4F7143E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {410C0262-131C-4D0E-910D-D01B4F7143E0}.Release|Any CPU.Build.0 = Release|Any CPU + {41506EAE-7E73-4147-8C8F-CA70924DB7FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {41506EAE-7E73-4147-8C8F-CA70924DB7FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {41506EAE-7E73-4147-8C8F-CA70924DB7FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {41506EAE-7E73-4147-8C8F-CA70924DB7FA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/ThemeParkClicker/Content/Content.mgcb b/ThemeParkClicker/Content/Content.mgcb new file mode 100644 index 0000000..9a4ab94 --- /dev/null +++ b/ThemeParkClicker/Content/Content.mgcb @@ -0,0 +1,32 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin +/intermediateDir:obj +/platform:DesktopGL +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + +#begin Textures/Ui.png +/importer:TextureImporter +/processor:TextureProcessor +/processorParam:ColorKeyColor=255,0,255,255 +/processorParam:ColorKeyEnabled=True +/processorParam:GenerateMipmaps=False +/processorParam:PremultiplyAlpha=True +/processorParam:ResizeToPowerOfTwo=False +/processorParam:MakeSquare=False +/processorParam:TextureFormat=Color +/build:Textures/Ui.png + +#begin Fonts/Regular.spritefont +/importer:FontDescriptionImporter +/processor:FontDescriptionProcessor +/build:Fonts/Regular.spritefont + diff --git a/ThemeParkClicker/Content/Fonts/EXEPixelPerfect.ttf b/ThemeParkClicker/Content/Fonts/EXEPixelPerfect.ttf new file mode 100644 index 0000000000000000000000000000000000000000..3b62ed48e5506cc9c64024ead0656601a45c0cf7 GIT binary patch literal 12112 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 Ct5LZC literal 0 HcmV?d00001 diff --git a/ThemeParkClicker/Content/Fonts/Regular.spritefont b/ThemeParkClicker/Content/Fonts/Regular.spritefont new file mode 100644 index 0000000..d9022a5 --- /dev/null +++ b/ThemeParkClicker/Content/Fonts/Regular.spritefont @@ -0,0 +1,60 @@ + + + + + + + EXEPixelPerfect.ttf + + + 128 + + + 0 + + + true + + + + + + + + + + + + Ā + + + + diff --git a/ThemeParkClicker/Content/Textures/Ui.aseprite b/ThemeParkClicker/Content/Textures/Ui.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..9038f767be0ed7d6bb082e727eaa85f3ce225457 GIT binary patch literal 1126 zcmcJN|5MX-9LL|2&1Dpphc=xTLzCnh@#U~ZtSDw3FlaUk9RUjmJ3#`OxdU->bqqX| zQ9?Hvsk=@wT`1r{N#IVoV~3+*snfYRC>QI_b2tVr2KMO*b>%wWLXz3%n-;rV#I z?<1!ZGJcXq2#wG<03ijq{}pBnL-HKX|4|b`gao{d#Z(3YR^c)^i;+*n-9f*a!}(_t z_QaRPmLg;wCmwuvBOjC}#Da}kiQrgy1ZdOCLC>HLoSS+LZ24^qSUeB|@|sIQVNoeww((HcR1dq>iz z+#%-!OcK%ZFJ z#_j2II9S3`oz}oMg%0&y6jaOdG#lnKa@MN-_qGj>T~}mQ3%Sjo-@iV#CeO56bUbBk z{wuRJ8t;T5Vurcpwsz*QbfV89te6cSB52i?WCr9A*faU@KNbnGF2M;`%H+k`v$5mB;Q%{6!xSZ)SaV|O! z(HQRR%s4UX;NRi5Dup@bfNFF&7V67ayzot`A&M)5JK>#oQ(gIR+hv)vFTizRs?Ni7 z>`7eUa>7tv%=y^D7mY3Rg;uyG{NSCzo-py%N%enV)=fdUFq`n0tsFb-iWH=K&Qk?C zu*~IVoEShYhs4{jSePqovTB=SZpZj}z_MR@9*>Av#`=<*$%Qr4CC*YSEw8H>ycaTv z6_3lw2VH;8MCcDij_qeW^_w0_7EnzMTonHm@bhoAnUa&V7!q!48-tae#}yS%p^dgE zOVg9HlZ{E`1@@gPe&Ly}cH8AV72$Vpt0=Ld{4$8nq4Ds(c*Bp*DMEpKP3M@Bsaq>L zlgL;n5^D_tr@sezeP+8Bwi<62%Ma`HWe&1gJHg1W!=x`Q>>C-^J{;)ku`PVC;II1$ zP(BX3=!b9eCQ7RT8)s3HL-l+@+Pm(f$)0NVYhNA_w-@)P@IpF_&)8{6(cZnTS3;Px zD@mLYc;1-l^8f5>Uk<^Dw(s^i$C*KrrYLImRQLPr7-L&2p9Exp(Jpf9Gq0JCra!UI z0wqLMX$D<-T9P0@!kn1!}9QN0=yXp)}_=#v-INRfzJ>B~?|LvW+%|h}_xpU+5f;OM@0$C+D z6q;tPDrv+zl#8l7gWV2fMO25gRM;l{&uC&!a2ClXU#>24-vjZ1p7`fD$Sm`t(wI@v zsb126uG(R8^P6A8S=xw?r1el1k+`^q)fS3ls)wOPjETgtqJhl4LDZ<*h}8j4U~}g0 zQCp;oUA`)tR^65;@kYNf5@7Y(@=5D@91R004Xzkn7YEgG4NwS5wQgkQO6biaXhY!) zU=+Xb2L=vbC@9|pMCb1FN~s&UUQE1kNozpwE6c=s<&!8M76GHCAPHkhM~Om~aEI5^ zPeJyxKWVM^E!Lca&%M9e!mt9Al1=c@KFK&weaRhElAPxc3r;A1R<4;(iB$t2$YmjT zRJvOz;y7$?^~0zwH7miD9_R)o$^vuD;T1P_){7uCZEf4l;iTyfZJccHlg0T*{8drm zkG^I(Qaejhnp4H(nneS5JDw6L#EvN33J?`?qnJ#SgQS%~F~JFDKbxouii#86-Ob@Q zxid^sTz!tVIaLmVURKZv*;#4xA>b#N)rxP`_vMALU-*F;Vc=8-R{Am3FsN@ig8r<% z)Od#9ks540o<%aZuA+r%sFKTYpt5eK5ndp7%wl!vG!#_W^$q@$+`iT_H6giMV+j8J z2(7B3xWaM%bV!(nw|1BpXsycHw_qtgVqG?RHr<7hX;~`+&}Z|~fV(PQ;6!6m(mlY$ zch^Gv`#oI%l2ZrHHOyoji_5QgPF8(X;bN^p^`2HbLl6@3$hkzn z8ur6i+3{$Z6i{V8c=a9B+HV+&!PccmTXPbByVxG|Ab?swHQAzTDfl{X_d;kQzL;{m zRDWLF4wBYnmBdpj<=V=>X{bBm1^dC=)UwB|u_Yf8v$Lg)M|cw`u6NHwl8G6%UX;uy zURrgNN<+)Y^3yai`s&T*qYW%3E1b4DzAHeGvE3a$g>ZXeHXOuyU!X8W+;wMll g+oD(bf2zUkM9>v3(+0D3W#_;b;@l= 1.15F; + } + + public void Draw(SpriteBatch batch, Vector2 viewport, float scale) { + var tex = Ui.Texture[2, 0]; + batch.Draw(tex, this.position * viewport, Color.White, this.rotation, tex.Size.ToVector2() / 2, scale, SpriteEffects.None, 0); + } + + } +} \ No newline at end of file diff --git a/ThemeParkClicker/ThemeParkClicker.csproj b/ThemeParkClicker/ThemeParkClicker.csproj new file mode 100644 index 0000000..7dadf37 --- /dev/null +++ b/ThemeParkClicker/ThemeParkClicker.csproj @@ -0,0 +1,18 @@ + + + + netstandard2.0 + + + + + + all + + + + + + + + \ No newline at end of file diff --git a/ThemeParkClicker/Ui.cs b/ThemeParkClicker/Ui.cs new file mode 100644 index 0000000..8d17f30 --- /dev/null +++ b/ThemeParkClicker/Ui.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Numerics; +using Coroutine; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using MLEM.Font; +using MLEM.Startup; +using MLEM.Textures; +using MLEM.Ui; +using MLEM.Ui.Elements; + +namespace ThemeParkClicker { + public class Ui { + + public static readonly UniformTextureAtlas Texture = new UniformTextureAtlas(MlemGame.LoadContent("Textures/Ui"), 16, 16); + + public Ui(UiSystem uiSystem) { + uiSystem.GlobalScale = 4; + uiSystem.AutoScaleWithScreen = true; + uiSystem.AutoScaleReferenceSize = new Point(720, 1280); + uiSystem.Style.Font = new GenericSpriteFont(MlemGame.LoadContent("Fonts/Regular")); + uiSystem.Style.TextScale = 0.1F; + + // ticket store ui + var rainingTickets = new List(); + Group ticketStoreUi = new Group(Anchor.TopLeft, Vector2.One, false) { + OnUpdated = (e, time) => { + for (var i = rainingTickets.Count - 1; i >= 0; i--) { + if (rainingTickets[i].Update()) + rainingTickets.RemoveAt(i); + } + while (rainingTickets.Count < BigInteger.Min(GameImpl.Instance.Tickets / 100, 500)) + rainingTickets.Add(new RainingTicket()); + }, + OnDrawn = (e, time, batch, alpha) => { + foreach (var ticket in rainingTickets) + ticket.Draw(batch, e.DisplayArea.Size, e.Scale); + } + }; + ticketStoreUi.AddChild(new Paragraph(Anchor.AutoCenter, 1, p => GameImpl.Instance.DisplayTicketCount(), true) { + TextScale = 0.3F + }); + var storeGroup = ticketStoreUi.AddChild(new CustomDrawGroup(Anchor.AutoLeft, Vector2.One)); + storeGroup.AddChild(new Image(Anchor.TopLeft, Vector2.One, Texture[0, 0, 2, 3]) { + OnPressed = e => { + GameImpl.Instance.Tickets++; + CoroutineHandler.Start(WobbleElement(storeGroup)); + }, + CanBeSelected = true, + CanBeMoused = true + }); + ticketStoreUi.OnAreaUpdated += e => storeGroup.Size = new Vector2(e.DisplayArea.Width / e.Scale); + uiSystem.Add("TicketStore", ticketStoreUi); + } + + private static IEnumerator WobbleElement(CustomDrawGroup element, float intensity = 0.01F) { + var sin = 0F; + while (sin < MathHelper.Pi) { + element.ScaleOrigin(1 + (float) Math.Sin(sin) * intensity * element.Scale); + sin += 0.2F; + yield return new WaitEvent(CoroutineEvents.Update); + } + element.Transform = Matrix.Identity; + } + + } +} \ No newline at end of file