From 86a4db59731edf7ca3d2e7d40b065934ba5a2a70 Mon Sep 17 00:00:00 2001 From: Recrown Date: Fri, 31 May 2019 01:32:25 -0500 Subject: [PATCH] Transition to .Net Core and VSCode in progress. --- .gitignore | 57 ++- References/RecrownedAthenaeum.Pipeline.dll | Bin 7680 -> 8192 bytes References/RecrownedAthenaeum.Pipeline.xml | 8 + References/RecrownedAthenaeum.dll | Bin 49152 -> 48128 bytes References/RecrownedAthenaeum.xml | 483 +++++++++--------- RhythmBullet.code-workspace | 7 + RhythmBullet.sln | 25 - RhythmBullet/.vscode/launch.json | 27 + RhythmBullet/.vscode/tasks.json | 36 ++ .../ReflectedHorizontalVisualizer.cs | 5 +- RhythmBullet/Content-texture.png | Bin 0 -> 424 bytes RhythmBullet/Content.tatlas | 79 +++ RhythmBullet/Content/Content.mgcb | 12 + RhythmBullet/Content/UI-texture.png | Bin 0 -> 424 bytes RhythmBullet/Content/UI.png | Bin 526 -> 0 bytes RhythmBullet/Content/UI.tatlas | 22 +- RhythmBullet/Content/UI/-texture.png | Bin 0 -> 405 bytes RhythmBullet/Content/UI/.tatlas | 69 +++ RhythmBullet/Properties/AssemblyInfo.cs | 35 -- RhythmBullet/RhythmBullet.csproj | 159 +----- RhythmBullet/RhythmBulletGame.cs | 34 +- RhythmBullet/Screens/MainMenu/MainPage.cs | 13 +- RhythmBullet/Screens/MainMenu/MainScreen.cs | 19 +- .../Screens/Transitions/FadeAwayTransition.cs | 3 +- RhythmBullet/packages.config | 6 - 25 files changed, 593 insertions(+), 506 deletions(-) create mode 100644 References/RecrownedAthenaeum.Pipeline.xml create mode 100644 RhythmBullet.code-workspace delete mode 100644 RhythmBullet.sln create mode 100644 RhythmBullet/.vscode/launch.json create mode 100644 RhythmBullet/.vscode/tasks.json create mode 100644 RhythmBullet/Content-texture.png create mode 100644 RhythmBullet/Content.tatlas create mode 100644 RhythmBullet/Content/UI-texture.png delete mode 100644 RhythmBullet/Content/UI.png create mode 100644 RhythmBullet/Content/UI/-texture.png create mode 100644 RhythmBullet/Content/UI/.tatlas delete mode 100644 RhythmBullet/Properties/AssemblyInfo.cs delete mode 100644 RhythmBullet/packages.config diff --git a/.gitignore b/.gitignore index 6fa8661..034fda7 100755 --- a/.gitignore +++ b/.gitignore @@ -1,23 +1,14 @@ -# Created by https://www.gitignore.io/api/monodevelop - -### MonoDevelop ### -#User Specific -*.userprefs -*.usertasks - -#Mono Project Files -*.pidb -*.resources -test-results/ - -# End of https://www.gitignore.io/api/monodevelop +# Created by https://www.gitignore.io/api/csharp,visualstudiocode +# Edit at https://www.gitignore.io/?templates=csharp,visualstudiocode +### Csharp ### ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files +*.rsuser *.suo *.user *.userosscache @@ -26,6 +17,9 @@ test-results/ # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs +# Mono auto generated files +mono_crash.* + # Build results [Dd]ebug/ [Dd]ebugPublic/ @@ -33,6 +27,8 @@ test-results/ [Rr]eleases/ x64/ x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ bld/ [Bb]in/ [Oo]bj/ @@ -90,6 +86,7 @@ StyleCopReport.xml *.tlh *.tmp *.tmp_proj +*_wpftmp.csproj *.log *.vspscc *.vssscc @@ -216,12 +213,14 @@ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx +*.appxbundle +*.appxupload # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache -!*.[Cc]ache/ +!?*.[Cc]ache/ # Others ClientBin/ @@ -265,6 +264,7 @@ ServiceFabricBackup/ *.bim.layout *.bim_*.settings *.rptproj.rsuser +*- Backup*.rdl # Microsoft Fakes FakesAssemblies/ @@ -300,12 +300,8 @@ paket-files/ # FAKE - F# Make .fake/ -# JetBrains Rider -.idea/ -*.sln.iml - -# CodeRush -.cr/ +# CodeRush personal settings +.cr/personal # Python Tools for Visual Studio (PTVS) __pycache__/ @@ -343,4 +339,23 @@ ASALocalRun/ .mfractor/ # Local History for Visual Studio -.localhistory/ \ No newline at end of file +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history + +# End of https://www.gitignore.io/api/csharp,visualstudiocode \ No newline at end of file diff --git a/References/RecrownedAthenaeum.Pipeline.dll b/References/RecrownedAthenaeum.Pipeline.dll index c9d9e390c73038a623525644a46d932f4bcc3db4..06f8b9f795776067e16fd89dad4114c18b70daff 100644 GIT binary patch literal 8192 zcmeHMYiu0V6+W}CIGbd#H#i~Y;Yl2X^YCIPrgCTscDzYgz>Z@(jsaKk?C#heGCQ-( z%qCvaAXf+~l&Vl6R3XtyZ7C9hK15LqX;Y~{Q-lfvwW35VDzqx1RHdT*Razze&Yj23 z+QtOhKNY>}Idfk3+;h)8_c7N4H{VB5B8uTTcaG>Oyt(uWxHOo9IMsSGMNck&as5-$ zjW4brozZN$Y?;%RQj!abVVI7bS7obW$eJN%_l?LUv#4fPtx9h6Ob_iQx>1VKy$A0) z>$mm>ZID+;okVNEX>hsQuEJZ!(~F0wQQ#5RZ)PMIaGApcK9?v>-o>i?S9^OTvrt~| zCfdhHFPh>Y%rBEfE5VCFuV=n&DOwI(7g`OVuM6pC9Cg+K-O~&JndqzMHz-kLqREV9 zTLnEwXdB$cW(1#k#@|UJz+Yi*x7~r=%{(ikKvmk?9BEk2Yt#GEcAmQ!1j4A$GCZgv9=J!yc_HIz%Q|SD z>!X~AGR+hEc;rMpLGK7ykcQ(I&|^?b&Qlz04 zEJynRPsjS{2D%GAr|G*i8BNgB)Q`@;8}Ed*JD{JS_UL11_o7%tbna@=Lw9T%>07Z) z@Y1LL2#S5fz+i!172gz3f#Ntd(l29IM$@1;z>V}is5PLHf_eZ{3#gSeB!fYxDI5D5 z=y5?khgIicMELvbS$6kDZD=t@KN8ewdO!X+sOLkn1ikFZo{2w+)*~Bg^%^KCD6V%3 zzN`(&lGN(So{9eqp4}3Xt)zk{W6xHSE-3cwC0a!%Lz)+$F^Qf>eo3?pU5`+Mz+VSH zLOE~{Ex~v358~HbSWazmiJAZtv<@&yn*bZBOTZlh_6e91aKC^z38(-zW7JvyHUX;w zejYGEj|%*!0p3Gjrk~IVy-Dvx$LLS!VIw#vm!wo;jFw9;#1CU$G3OOJoH$BN(hGE) z)=7sFpQrT_d;SXTPc+gcLT96ZXM~?y1>P-ShE~w4l%du1JHU(SEMOZglQOi0+5xu< z_-O(A1^))hfIlKQw+L9EJ>VRsGN4VzrG7d_KbH!0C;dXYlTOgi$Txvok!R_CdM)w? zAswU^T2Jj5jcaHx#pc{~0R!%pxA5jU;g>JcBLaJ;V&$ij$xfw}#r;i!f)S}m&wEzMD_$u6IlE0s;Fjx%JL1=Y4qYjPXy z959O&UA=}zsiB_E2T_UaTFTV40T9x3NwN->Zm?P zSL|VRS~CqH9mV;mVyS{H7$v)4TDq2J>yBbf>niQh0QevU#X+T{(zNOv8Zj$YL1mG_ ztSKK^#Hk^ztm^QB1~fQqn^R6^+)y%maC%jbn%3cr7nn><(KO7xkS?VoLP&cn8oG~7 zCSP$>%BuOw^t6)K(IKDLZ(x=s39ANdODU=)#X4NGGOAeUb>MPM z;Md_ujH#B5z%CS`gHzgc#ZsI_#aY!ZSX#MWxFB0Ua6+EX&_S&T_yO5P0}GOAN!vwT_nf1=={RPI+_4`*^rlR! zM2<*>fLxgHv=^Czbl|yiP;+L?inDtbGoN!K=(jqhV}da!XCNY4(Hqp=vjtUT0u8E1 z9n%og<$4=>j#*~QUc`n~}G2=KLP(O&IyCP9|J@8nbV;;3j zGZd@p5kYM~73=B;%s?$j%sRaqH&bv-Yst|G`{&0pt0~ilX**iM#*kHvqU}rk?8;%` zwahYNa74qZI$!KZBapl62$B&CFVrouUfSe2ie<+3qN(o7--=-*U7d31I+f=KiCIEC zWQg1m)pE!U1ZhUO;t;ZdUp#(&y3YNXzX^zd*VsXLe13uV5y<v1v&?z!z@wRZ~_|p(cFW>q*4JJl!?QE0lY|k$1yTPB$Ye+rIwCZDO&gq&;BYV)%aAm8=O9dTtjb_I zh~5k;pN~WJZq#ag94GGoZw#E@k)fa?|Iv_9%h~7p9&T;j`{RGk_V4)fZ~jIxS&|x} zGD&eDO-)Ru7(^1y>D^K~hu2MbH8iKyNIK`!CDy()<#J2ulB-;bEsHcnB8gOtq*N-F zxU{JnO*9>kBpRX#=rl^wWt55~VJG^&jFQKI6N15-r3UwN3AaA{g*6&kbI?-C zgQgLz+oLl$l-UyWBH}10OLXzVJ)(BjA$&xjtd%Go?6LAQkIM44&MsVqZIWnXetXZ< zj-IY<9r>1KkjT)Dv3n+LXB>qOj}g>e5vsDqTasmQhLrt9 zU+$0>_Ifncm{q5gitYr9T61_s54iAv(qJzH=wvzlMsqMh(%!BiWIE{eJw&Ll3^! zf8yDWp^3ZSJHakwubw!7eaN1uR*b4Lku?jI5*B-VqU_!bm#}~FEirFU_Qb-$ScDa1 z<%F5P6>?owY;`HUOu3k+xOch9KDRP1Gq$k!m!PiXP`_zqb$vk53=$t5s+!@mmsieR z4m0yZ;S2xA-;(GU?q28WJL2BiVD>KHvmW0akM|NiF1|IH!#EO%#_+X#2yizx*AdF$ z+kX&r4sefq>rSU)e?9Ad$8zRyao^Xvg!mG6mn)BfS5|0^VRx`#$K6kJ*!p-!<+4%K z8ika1VH^7`Z-|;WEC>bqUTmefXBh$C65HnVB9`7p!xD7{zi!F{Cw#wiJoxZY61y)S zLBvHOWE(;<-iQsVqPOlY?Y7O=^Or!&_dJU&+ZKl%4O@5E&-2?$hv0u1HgwSs6^(S_ zuBv8#3^G0t)%xFs^Fn9vus_%eF)Hp+%EDWLwVKx-&yNfaA3A=VAAFa0Bm9^amN{}| z#Dyb2jbn-forOFZw@osB+u&=L_}|NBSP9#4N0<+MCD^ra595yliNlYC9CO>?gAw=1 zk2zC(Zld!#^kry%jB9-x7h^euc1-lQf^l?0k^8vziMquY*4v#wlJm#0N7U&<6l@Wb iJbGM31V5}E!tnp{NsRy&G`=0|4sDg6)KGj9`~7d41-i=s delta 2625 zcmZ`*3v5(X8vf3Gb(prdGk2JlmbOeEk=eFZUh8Am>{1JbN@$BMAii)IuQ)pGv@-)z zCUr1G1r?NBQBY%G9~z$_ZNf$aMq(xL6{AttWEGzw(TKVUakCl|zjI~^t%*0e-}%4q zf1LlGbMBqlv2@4f5AJIGq2=zUQM^7wW296p0A^G06~vbo?R#dO?Jfd(rLdF^V_!q4 z>_(uB{QiZ&rCx*9=4}x3{jWHbBD`mN_lj0g=^YjGMXh&AG*%yE1$nLHt--{{4Zx8K zKzJQhmw0_zN&Z9K$mxKwH<1bf{vu1U7ik+aJd!C-OT88iGopoMLkl#tauh(&fgY`- z9wliVBNz^>oE&p=q+CrH(?~5@p@uBq!UDP~KwTEdN&lE^$w723Lv&RjT1zukCkx0n zRDpUjnO|stDd!ttk=8Lw6|r)1%*|tPp#gI$KLX@cfkFeU%L2tYWzMuYOH?U6Cv(TR zNreU)WCJzn$ARG%xscLvejz2BT1c6H-XmFIA$?qjMp?z1G@A1tvxTNRxLus4nH@Cs zXVZzH%^5B)lBK{BE@ji&ejMT<2vBQUv9@~|$0PDk@cEmrNTxQ?lowY(tPg9xS$>kA z#A0w`m=5*~mQp9p<|uD=AWvT&oFAN51xj1qEX1o{m&wvQs+F4-PAl9f{$o_&Lbhw+ z9`USh!PX>xuk5##eNf@J!Y7oT5#JdW)+l^WDKCnU?nk~=JHEXE|Ai$mlli!+I(km3O}K3hOMNC`H{uud$l=GFHRExOtpy`SthM`m<(+YX$sC z0%wyC7C^f(o@ZB6bjTPtWGiw70(h9rCX;Iuz;(ujxg$H;~AoBzQ73!*h{;h=orH|?aR+8eG$%rlXzP{%Bj{X zHi=c@7`JYZVt3DZj*n*GfMO@{vN=ii&NQEek0RWES!S2{7N@O{=LCgBALb|~6F=Zn z_fGTqadpwR%lw3E@W3=*86GM6WNT%3LNVFeX_VvrX_5RSvGx3J?u)>iJWd)6Wxqp* zhH9?6z-vk`*uSUGtS}4D83I9~g=(T7e;@|1P~l|?I}~!3r2V z!YyIIct=Px>sD_4CK8l*jTS zxV-lQp73{tHoMu49sQl%-RK|9WZl8`?p|-e|Hq{R?zZffwA+zQ#xl!d*%-3F6$Uf$ zR63d1guYn(w%BGDU5TVS71rZ@;@|397fWt&2S$e{)|8$QzU4#l)J^;rd%^O#-s18L zya&qXd&kQcmKSHf%Dp-1#=VQ|@We{HL3qOzJ^7);klPo_#&3~5Trrw;GgC91>uiQv zAXmAun>v!o0$Jf^3r1f$6?Zck^tjc2jU&HP5WGLstWObu;yy`L+p z{KfXTB3>Y{+}js8tl{Fu{PZZ7U!|J#51-oS0_Wc@v_} zw57k9Z?&`IP8n6ptfCr~kt5RI=KI(7>(*5-`E0ju!SlVR$De%RjBYtG-KsM=jxfaz zc9%pn;j9iea|}joXM>Mpb1>ozN+DVl+JaFfFj5P)d2fV%6xVnsX4h0z7SBsWZA+wk za5$CDx@oT@ys@=UKySZnSi^u_x-5|yPR2%iVuNm|hkF}Qn|nU~$?zur&1oE|{kJ^D z@^|wv?@9hyn+$pNm5qT!r**+Y7k|6z=)2B8F8wCGE(*hDz<= aqKT5K65;h#ZJV&?{A6m!7EOrSAH}a&tjUD{ diff --git a/References/RecrownedAthenaeum.Pipeline.xml b/References/RecrownedAthenaeum.Pipeline.xml new file mode 100644 index 0000000..7fa04bb --- /dev/null +++ b/References/RecrownedAthenaeum.Pipeline.xml @@ -0,0 +1,8 @@ + + + + RecrownedAthenaeum.Pipeline + + + + diff --git a/References/RecrownedAthenaeum.dll b/References/RecrownedAthenaeum.dll index ceb05179286ead75f3434f038f3feea18e99650d..c842423f2294ef2ad21539e46a3a6fcc8f3e48e8 100644 GIT binary patch literal 48128 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 lJOxTAW#~HG)-V<8GyaDu@GsIxJT(9S literal 49152 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 E0Q?79@c;k- diff --git a/References/RecrownedAthenaeum.xml b/References/RecrownedAthenaeum.xml index 71e4236..dc70488 100644 --- a/References/RecrownedAthenaeum.xml +++ b/References/RecrownedAthenaeum.xml @@ -4,51 +4,215 @@ RecrownedAthenaeum - + - The settings the sprite batch should use. + A generic camera. Functions in 3D. - + - Defines sprites sort mode. + The scale for the world. - + - The blend state to use. + Current position in the world. - + - Sampler state to use. + The place the 3D camera is looking at. - + - The depth stencil state to use. + The direction up is for the camera. - + - The rasterizer state to use. + The transform matrix representing the world (rotation and translations of the original world). - + - The effect to use. + The view matrix that describes where the camera looks. - + - The transformation matrix to use. + The projection matrix. - + - Begins the given sprite batch with the current set of settings. + A basic effect that will be updated with the correct matrice information everytime is called. Can be null and thus will not be used. - Begins the spritebatch with the given settings. + + + + Constructs 3D camera with an orthographic projection matrix with dimensions of graphics devices viewport. All changes to matrices should have apply called after changes. + + A basic effect that will be updated with the correct matrice information everytime is called. Can be null and thus will not be used. + + + + Applies the changes to the fields and properties of the camera. + + + + + Moves camera by the given amount. + + A that contains how much in each direction to move. + + + + A simple utility object that will start and end a scissor setup given a to work with. + + + + + Initializes the basic scissor. + + + + + Begins the with scissoring in mind. + + The rectangle to use to outline the scissor. + The consistent sprite batch to use for this process. + + + + Ends the scissor state of the spritebatch. + + + + + A that keeps it's settings through begin and end unless manually changed either by the or through changing the fields. Note that changing the fields while the batch has begun will not take effect until the next time the batch is started. + Casting this as a will not persist the configuration and will call the normal . + + + + + How to blend the colors. Uses 's default if not set before or during call. + Changes will only take effect on call. + + + + + The state of sampler to use for the spritebatch. Uses 's default if not set before or during call. + Changes will only take effect on call. + + + + + The state of the depth-stencil buffer. Uses 's defaultdefault if not set before or during call. + Changes will only take effect on call. + + + + + The state of rasterizer to use. Uses 's default if not set before or during call. + Changes will only take effect on call. + + + + + An effect to apply to the batch. Uses 's default if not set before or during call. + Changes will only take effect on call. + + + + + A matrix to be applied to transform the sprites geometry. An identity matrix is used if not provided before or during call. + Changes will only take effect on call. + + + + + Creates a consistent sprite batch with default values. + + The graphics device to use to create a . + + + + Begins the consistent sprite batch. The configuration passed to this function is saved for later begin calls. + + Defines the spritebatch's method of sorting the items in each batch. Uses 's default. + How to blend the colors. Uses 's default if not set and field is also not set. + The state of sampler to use for the spritebatch. Uses 's default if not set and field is also not set. + What type of rasterization to use. Uses 's default if not set and field is also not set. + What type of rasterization to use. Uses 's default if not set and field is also not set. + An effect to apply to the batch. Uses 's default if not set and field is also not set. + A matrix to be applied to transform the sprites geometry. Uses 's default if not set and field is also not set. + + + + Begins the consistent sprite batch without saving the configuration. Useful for one time changes to one portion of the configuration. + + Defines the spritebatch's method of sorting the items in each batch. Uses 's default. + How to blend the colors. Uses 's default if not set and field is also not set. + The state of sampler to use for the spritebatch. Uses 's default if not set and field is also not set. + What type of rasterization to use. Uses 's default if not set and field is also not set. + What type of rasterization to use. Uses 's default if not set and field is also not set. + An effect to apply to the batch. Uses 's default if not set and field is also not set. + A matrix to be applied to transform the sprites geometry. Uses 's default if not set and field is also not set. + + + + A virtual 2D camera that wraps the normal . Default projection is orthographic. + + + + + The width of the view of the camera. + + + + + The height of the view of the camera. + + + + + The 2D position. + + + + + Places camera in the center given the corner position. + + + + + A 2D camera from the generic . + + Width of camera view. + Height of camera view. + A basic effect that will be updated with the correct matrice information everytime is called. Can be null and thus will not be used. + + + + Applies for 2D. + Sets where the camera is looking for the view matrix to the position of the camera. + + + + + Lerps to the given position. + + The multiplier for difference in distance. + The target position to lerp to. + Time between this frame and the previous frame. + + + + Moves the camera. + Apply needs to be called. + + Magnitude of how much to move per axis. @@ -60,12 +224,11 @@ The used. Needs to be disposed. - + Creates a rectangle renderer with the given . - Camera to use for . Default will use . - Graphics device to use. Default will use . + Graphics device to use. @@ -117,19 +280,19 @@ Amount of primitives. - + Creates a batch used to draw primitives. - The current camera being used. Will use default set in if left null. - The graphics device used to draw the primitives. Will be using 's graphics device from graphics device manager if null. Default is null. + The graphics device used to draw the primitives. The amount of vertices every batch can hold before flushing. Default is 450. Should be changed to be the most optimal number if possible to prevent unnecessary resizing. Especially if using strip primitive types. - + Starts the batch. Batch cannot be started twice. The type of primitive this batch would be drawing. + Effect to use to render the primitives. Default will use a with parameters set up during creation. @@ -165,115 +328,6 @@ Destructor. - - - A generic 3D camera. - - - - - Current position in the world. - - - - - The place the 3D camera is looking at. - - - - - The direction up is for the 3D camera. - - - - - The transform matrix representing the world (rotation and translations of the original world). - - - - - The view matrix that describes where the camera looks. - - - - - The projection matrix. - - - - - The graphics device used - - - - - The basic effect that contains the transformations. - - - - - Constructs 3D camera with an orthographic projection matrix with dimensions of graphics devices viewport. All changes to matrices should have apply called after changes. - - The graphics device to use. Will use graphics device from 's graphics device manager if this is null which it is by default. - - - - Applies the changes to the fields and properties of the camera. - - - - - Moves camera by the given amount. - - A that contains how much in each direction to move. - - - - A virtual 2D camera that wraps the normal . Default projection is orthographic. - - - - - The zoom of the camera. - - - - - The 2D position. - - - - - Places camera in the center given the corner position. - - - - - A 2D camera from the generic . - - The graphics device to use if not using the one in . - - - - Applies for 2D. - Sets where the camera is looking for the view matrix to the position of the camera. - - - - - Lerps to the given position. - - The multiplier for difference in distance. - The target position to lerp to. - Time between this frame and the previous frame. - - - - Moves the camera. - Apply needs to be called. - - Magnitude of how much to move per axis. - Wrapper for the content manager that helps with controlling it by adding automated multithreaded content loading. @@ -367,32 +421,12 @@ The path to modify. - - - All variables here should be for RecrownedAthenaeum to use when needed and thus eliminates unessecary passing. - - - - - The graphics device that will be used by default. - - - - - 2D camera to be used by default. - - - - - The begin sprite batch to use for custom begins and consistency. - - A wrapper that makes sure anything implementing can be drawn with options. - + Should draw whatever implements this. @@ -423,19 +457,16 @@ Top side. The dimensions and potentially the coordinates of the rectangle on an atlas. If left to default of null, will only be set to texture bounds. - + Draws the ninepatch. Batch to use. - Where to the patch. The color of the patch. - The sprite batch settings to use to begin the batch in after drawing the ninepatch. + Where to the patch. - + - Draw with more options. - Uses the default for the spritebatch settings. Spritebatch to use. The destination to draw the patch. @@ -510,7 +541,7 @@ The texture representing the overall atlas. - + Draw the region given by a string in the atlas onto a destination rectangle. @@ -526,7 +557,7 @@ Creates or obtains a previously created texture of a region. Name of region. - graphics device to be used. Default is null and will resort to using graphics device from 's graphics device manager. + graphics device to be used to generate the texture. The texture from the region. @@ -581,7 +612,7 @@ A definition for the region. The texture that holds the image data for the atlas. - + Draws the region. If ninepatch, rotation and origin are ignored. @@ -595,16 +626,9 @@ Create or obtains a previously created texture of this region. - The graphics device to use to create the texture. Will use graphics device from 's graphics device manager if left to null. + The graphics device to use to create the texture. The texture of the region. - - - Compares this region to another in terms of name. - - The other region to compare to in terms of name. - Less than one if precedes, greater than one if after, 0 if same. - Call this to dispose. @@ -947,7 +971,7 @@ Whether or not this transition is waiting on something. Usually the . If this returns true, then it is considered that this transition is complete. - + Called once every frame while transition is active. Meant to draw transition. @@ -985,7 +1009,7 @@ The window dimensions. - + Draws the transition. @@ -1039,7 +1063,7 @@ - Whether or not to continue rendering this screen onto a buffer for the benifit of the next screen to use as a transition. + Whether or not to continue rendering this screen onto a buffer for the benefit of the next screen to use as a transition. @@ -1052,19 +1076,14 @@ The next screen to be displayed after exit transition finishes. May be null, leading to transition to previous screen or loading screen. - + - The current window size. + The current window dimensions. - + - Whether or not screen have been initiated. - - - - - The 2D camera to be used for the screen. + The current window dimensions. @@ -1078,10 +1097,12 @@ True to start in entering transition state. - + - Called only once after initialization to give required parameters. + Called when screen size is set. + The width of the screen. + The height of the screen. @@ -1089,7 +1110,7 @@ Game time information. - + Called to draw this screen. @@ -1131,7 +1152,7 @@ The previous screen's render buffer. - + Called when the first screen is being shown. @@ -1142,12 +1163,12 @@ A manager for screens. Helps with transitions and updating screens as well as resizes. - + Called when the first loading screen is done, and needs to show the landing screen. - + The settings this manager will use to begin a sprite batch. @@ -1157,13 +1178,11 @@ Currently displayed screen. - + - Creates a screen manager that helps manage multiple screens and their transitions. + Creates a screen manager that helps update, draw, and manage multiple screens and their transitions. Uses its own . - The camera to be used to perform the correct translations and transformations. Will use default set in if left null. - The graphics device manager to be used. Will use default set in if left null. - The settings to begin spritebatch with. Will use the built-in one in screen manager if not provided. + The graphics device manager to be used. @@ -1172,11 +1191,12 @@ Contains the time that has passed from the last frame. Whether or not there is something a transition should be waiting for. Usually used to wait for assets to complete loading. - + Renders screen into window. + Starts and ends the given . - Uses this batch to render. + The consistent sprite batch to use. Needs to be consistent as changing render targets requires ending and beginning the sprite batch. @@ -1211,23 +1231,36 @@ Contains the pages. - + + + The camera to use to change between pages. + + + Creates a book. that holds the assets that are to be used in the pages for this book during initialization. The skin that will be passed to pages during their initialization. + Camera to move to change pages. - + Should be called whenever a valid camera and dimensions for the book exist. Initializes book with given parameters. - Generally used with a and called in the function. + Generally used with a and called in the function. - Camera game is currently using. + Camera to move to change pages. Dimensions of the book and the dimensions the pages will use. - + + + Applies the size if the book's pages. + + The width of one page. + The height of one page. + + Draws the pages. @@ -1312,12 +1345,13 @@ New width. New Height - + Called only once after a page is added to a . Generally used to instantiate the modules of the page. The assets to be used during initialization passed by the book this page belongs to. The skin the book containing this page is given that can be used by this page. + The scissor box to use for cropping. @@ -1355,13 +1389,13 @@ Texture to use. - + Draws the image with default values. The batch to use. - + Draws the image with more options. @@ -1420,7 +1454,7 @@ The skin the definition is defined in. The definition itself. - + Draws the button. @@ -1490,7 +1524,7 @@ Snapshot of information about time for game. - + Called whenever game wants to render this button. @@ -1544,7 +1578,7 @@ The game time. - + Draws the text. @@ -1617,7 +1651,7 @@ Game time information. - + Called every frame to draw this module. Anything that needs to be drawn should go here. @@ -1671,24 +1705,16 @@ Contains a group of modules and has its own relative coordinate system. - + - Camera used by the module for cropping. + Set this to crop anything that flows out of the boundaries of this group. Will not crop if this is null. - + - Creates a module group. + Draws this group of modules. If scissoring, will use the matrix and effect designated in the to begin the batch normally again. - Whether or not to crop out of bounds. Default is false. - What camera to use for cropping. Default is null and will use 's camera if crop is enabled. - The settings to be used that begins the batch. - - - - Draws this group of modules. - - Batch used to draw the group. + Batch used to draw the group. @@ -1796,7 +1822,7 @@ The texture for the cursor. - + Draws a region from the texture atlas. @@ -1868,7 +1894,7 @@ Name of defined color. Will use "default" if null. Default value is null. The defined color based on the name given. - + Draws a region from the texture atlas. @@ -1976,7 +2002,7 @@ - The user loaded skin. Set by the skin loaded by calling . + The user loaded skin resulted from asynchronous . @@ -2001,13 +2027,12 @@ the path to load from. A that holds all the information and some metadata for the loaded skin. - + loads a skin asynchronously to the . - Graphics device to use for texture creation. Uses graphics device from by default. - The data to generate from. The path pointing to the file with the extension "". + Graphics device to use for texture creation. diff --git a/RhythmBullet.code-workspace b/RhythmBullet.code-workspace new file mode 100644 index 0000000..a87d18c --- /dev/null +++ b/RhythmBullet.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": "RhythmBullet" + } + ] +} \ No newline at end of file diff --git a/RhythmBullet.sln b/RhythmBullet.sln deleted file mode 100644 index f8a44a5..0000000 --- a/RhythmBullet.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28010.2019 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RhythmBullet", "RhythmBullet\RhythmBullet.csproj", "{4242553D-40F9-40F0-9AE6-CB6771DD9CF9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4242553D-40F9-40F0-9AE6-CB6771DD9CF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4242553D-40F9-40F0-9AE6-CB6771DD9CF9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4242553D-40F9-40F0-9AE6-CB6771DD9CF9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4242553D-40F9-40F0-9AE6-CB6771DD9CF9}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {C7334E35-D9AE-4FF0-A8AE-DC3A1ED7CB86} - EndGlobalSection -EndGlobal diff --git a/RhythmBullet/.vscode/launch.json b/RhythmBullet/.vscode/launch.json new file mode 100644 index 0000000..22f336a --- /dev/null +++ b/RhythmBullet/.vscode/launch.json @@ -0,0 +1,27 @@ +{ + // Use IntelliSense to find out which attributes exist for C# debugging + // Use hover for the description of the existing attributes + // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md + "version": "0.2.0", + "configurations": [ + { + "name": ".NET Core Launch (console)", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build", + // If you have changed target frameworks, make sure to update the program path. + "program": "${workspaceFolder}/bin/Debug/netcoreapp2.0/RhythmBullet.dll", + "args": [], + "cwd": "${workspaceFolder}", + // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window + "console": "internalConsole", + "stopAtEntry": false + }, + { + "name": ".NET Core Attach", + "type": "coreclr", + "request": "attach", + "processId": "${command:pickProcess}" + } + ] +} \ No newline at end of file diff --git a/RhythmBullet/.vscode/tasks.json b/RhythmBullet/.vscode/tasks.json new file mode 100644 index 0000000..2662bc8 --- /dev/null +++ b/RhythmBullet/.vscode/tasks.json @@ -0,0 +1,36 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "command": "dotnet", + "type": "process", + "args": [ + "build", + "${workspaceFolder}/RhythmBullet.csproj" + ], + "problemMatcher": "$tsc" + }, + { + "label": "publish", + "command": "dotnet", + "type": "process", + "args": [ + "publish", + "${workspaceFolder}/RhythmBullet.csproj" + ], + "problemMatcher": "$tsc" + }, + { + "label": "watch", + "command": "dotnet", + "type": "process", + "args": [ + "watch", + "run", + "${workspaceFolder}/RhythmBullet.csproj" + ], + "problemMatcher": "$tsc" + } + ] +} \ No newline at end of file diff --git a/RhythmBullet/Audio/Visualizer/ReflectedHorizontalVisualizer.cs b/RhythmBullet/Audio/Visualizer/ReflectedHorizontalVisualizer.cs index b2c7cfc..63a1aab 100644 --- a/RhythmBullet/Audio/Visualizer/ReflectedHorizontalVisualizer.cs +++ b/RhythmBullet/Audio/Visualizer/ReflectedHorizontalVisualizer.cs @@ -1,6 +1,5 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; -using RecrownedAthenaeum.Camera; using RecrownedAthenaeum.Render; using RecrownedAthenaeum.UI.Modular; using System; @@ -28,7 +27,7 @@ namespace RhythmBullet.Audio.Visualizer binsPerBar = tsp.GetCurrentSpectrum().Length / BAR_COUNT; barValue = new int[BAR_COUNT]; - rectangleRenderer = new RectangleRenderer(); + rectangleRenderer = new RectangleRenderer(graphicsDevice); } public override void Update(GameTime gameTime) @@ -39,7 +38,7 @@ namespace RhythmBullet.Audio.Visualizer base.Update(gameTime); } - public override void Draw(SpriteBatch batch) + public override void Draw(ConsistentSpriteBatch batch) { if (disposed) throw new ObjectDisposedException(GetType().Name); rectangleRenderer.Begin(true); diff --git a/RhythmBullet/Content-texture.png b/RhythmBullet/Content-texture.png new file mode 100644 index 0000000000000000000000000000000000000000..0b80c7480432ca86373b945012b4fd364536d20b GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R4} zr;B4q#hj-%F6K5Hh&Ti~lrJx1`EiCxmN~7#aF>I9q+%r3b>Re4wL9Wfb;{P^{v4+_ ztjo^Q`cfOec~9o%RlHh>|0-E-Fq*w-C}5UodzhW?SeITS{%wzF-G5Ejxt!Jq+GGnEkb3<29DZwsI}F=$ zf8U6{P^nI)N&7b;9S<#!oNZYJ3e0dInEdKbLh* G2~7ZtX|7lR literal 0 HcmV?d00001 diff --git a/RhythmBullet/Content.tatlas b/RhythmBullet/Content.tatlas new file mode 100644 index 0000000..d28328c --- /dev/null +++ b/RhythmBullet/Content.tatlas @@ -0,0 +1,79 @@ +{ + "regions": [ + { + "name": "rectangle-button-disabled", + "bounds": { + "X": 0, + "Y": 0, + "Width": 16, + "Height": 16 + }, + "ninePatchData": { + "textureName": null, + "left": 4, + "right": 4, + "bottom": 4, + "top": 4 + } + }, + { + "name": "rectangle-button-down", + "bounds": { + "X": 0, + "Y": 16, + "Width": 16, + "Height": 16 + }, + "ninePatchData": { + "textureName": null, + "left": 4, + "right": 4, + "bottom": 4, + "top": 4 + } + }, + { + "name": "rectangle-button-highlighted", + "bounds": { + "X": 0, + "Y": 32, + "Width": 16, + "Height": 16 + }, + "ninePatchData": { + "textureName": null, + "left": 4, + "right": 4, + "bottom": 4, + "top": 4 + } + }, + { + "name": "rectangle-button", + "bounds": { + "X": 0, + "Y": 48, + "Width": 16, + "Height": 16 + }, + "ninePatchData": { + "textureName": null, + "left": 4, + "right": 4, + "bottom": 4, + "top": 4 + } + }, + { + "name": "ScrollBar", + "bounds": { + "X": 16, + "Y": 0, + "Width": 16, + "Height": 16 + }, + "ninePatchData": null + } + ], + "textureName": "Content-texture.png" +} \ No newline at end of file diff --git a/RhythmBullet/Content/Content.mgcb b/RhythmBullet/Content/Content.mgcb index 00d95fd..b4208da 100644 --- a/RhythmBullet/Content/Content.mgcb +++ b/RhythmBullet/Content/Content.mgcb @@ -760,3 +760,15 @@ /processor:TextureAtlasProcessor /build:UI.tatlas +#begin UI-texture.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:UI-texture.png + diff --git a/RhythmBullet/Content/UI-texture.png b/RhythmBullet/Content/UI-texture.png new file mode 100644 index 0000000000000000000000000000000000000000..0b80c7480432ca86373b945012b4fd364536d20b GIT binary patch literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|R4} zr;B4q#hj-%F6K5Hh&Ti~lrJx1`EiCxmN~7#aF>I9q+%r3b>Re4wL9Wfb;{P^{v4+_ ztjo^Q`cfOec~9o%RlHh>|0-E-Fq*w-C}5UodzhW?SeITS{%wzF-G5Ejxt!Jq+GGnEkb3<29DZwsI}F=$ zf8U6{P^nI)N&7b;9S<#!oNZYJ3e0dInEdKbLh* G2~7ZtX|7lR literal 0 HcmV?d00001 diff --git a/RhythmBullet/Content/UI.png b/RhythmBullet/Content/UI.png deleted file mode 100644 index 3c33f7c12c36e8fb8d6b08834ccf9343c8a7e82b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DjSK$uZf!>a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QJXPV+30W_Jh$J50z zq$2L^q`*~&4R~0JSI=9Dz&_uuk>xNpi|Hu*EiM5ElVo8Z+v&-@cbyY@qMqrq({0*_oWq8jz%BZ zXYSVKoNLEP=kHLm}! z&9XYsbmY8Dg6fqYhwQC*P4_*R2y`dJNkEguZJ3TZM{rC0ZgM|R!I90F9RGnsf|0?wucMtEqfmC*!R|WfhNSXUgny&b9U}$TGWMR z%B~EDUgkUg;Rhi0tF-VL#64L3?&78Ie}ly}=3inD^Z~li#6g^QMP9?QEu{~#_RG10 rT@4b0dcb7CE}#<{Ku!P$!f)mRCL^Qzqe^#x;mqLa>gTe~DWM4f_hP6) literal 0 HcmV?d00001 diff --git a/RhythmBullet/Content/UI/.tatlas b/RhythmBullet/Content/UI/.tatlas new file mode 100644 index 0000000..ce80ce1 --- /dev/null +++ b/RhythmBullet/Content/UI/.tatlas @@ -0,0 +1,69 @@ +{ + "regions": [ + { + "name": "rectangle-button-disabled", + "bounds": { + "X": 0, + "Y": 0, + "Width": 16, + "Height": 16 + }, + "ninePatchData": { + "textureName": null, + "left": 4, + "right": 4, + "bottom": 4, + "top": 4 + } + }, + { + "name": "rectangle-button-down", + "bounds": { + "X": 0, + "Y": 16, + "Width": 16, + "Height": 16 + }, + "ninePatchData": { + "textureName": null, + "left": 4, + "right": 4, + "bottom": 4, + "top": 4 + } + }, + { + "name": "rectangle-button-highlighted", + "bounds": { + "X": 0, + "Y": 32, + "Width": 16, + "Height": 16 + }, + "ninePatchData": { + "textureName": null, + "left": 4, + "right": 4, + "bottom": 4, + "top": 4 + } + }, + { + "name": "rectangle-button", + "bounds": { + "X": 0, + "Y": 48, + "Width": 16, + "Height": 16 + }, + "ninePatchData": { + "textureName": null, + "left": 4, + "right": 4, + "bottom": 4, + "top": 4 + } + } + ], + "textureName": "-texture.png" +} \ No newline at end of file diff --git a/RhythmBullet/Properties/AssemblyInfo.cs b/RhythmBullet/Properties/AssemblyInfo.cs deleted file mode 100644 index c6783d3..0000000 --- a/RhythmBullet/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Reflection; -using System.Runtime.InteropServices; - -// 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("RhythmBullet")] -[assembly: AssemblyProduct("RhythmBullet")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("78eb6f5c-0f37-458a-9928-0fd0799c93a5")] - -// 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")] diff --git a/RhythmBullet/RhythmBullet.csproj b/RhythmBullet/RhythmBullet.csproj index e67074d..f4ad11b 100644 --- a/RhythmBullet/RhythmBullet.csproj +++ b/RhythmBullet/RhythmBullet.csproj @@ -1,160 +1,17 @@ - - - + - Debug - AnyCPU - 8.0.30703 - 2.0 - {4242553D-40F9-40F0-9AE6-CB6771DD9CF9} WinExe - Properties - RhythmBullet - RhythmBullet - 512 - DesktopGL - v4.5 - - - - - true - bin\$(MonoGamePlatform)\$(Platform)\$(Configuration)\ - DEBUG;TRACE;LINUX - full - AnyCPU - prompt - false - 4 - - - bin\$(MonoGamePlatform)\$(Platform)\$(Configuration)\ - TRACE;LINUX - true - pdbonly - AnyCPU - prompt - false - 4 - - - - - - - app.manifest - - - true - - - - + netcoreapp2.0 - - - - - - - - - - - - - - - + - - ..\packages\BulletSharp.0.11.1\lib\net40-client\BulletSharp.dll + + + + + ../References/RecrownedAthenaeum.dll - - ..\packages\MonoGame.Framework.DesktopGL.3.7.1.189\lib\net45\MonoGame.Framework.dll - - - ..\packages\NAudio.1.9.0-preview2\lib\net35\NAudio.dll - - - False - ..\References\RecrownedAthenaeum.dll - - - - - - - - - - - x86\SDL2.dll - PreserveNewest - - - x64\SDL2.dll - PreserveNewest - - - x86\soft_oal.dll - PreserveNewest - - - x64\soft_oal.dll - PreserveNewest - - - x86\libSDL2-2.0.so.0 - PreserveNewest - - - x64\libSDL2-2.0.so.0 - PreserveNewest - - - x86\libopenal.so.1 - PreserveNewest - - - x64\libopenal.so.1 - PreserveNewest - - - libSDL2-2.0.0.dylib - PreserveNewest - - - libopenal.1.dylib - PreserveNewest - - - MonoGame.Framework.dll.config - PreserveNewest - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file diff --git a/RhythmBullet/RhythmBulletGame.cs b/RhythmBullet/RhythmBulletGame.cs index 7e14e41..a54fdaf 100644 --- a/RhythmBullet/RhythmBulletGame.cs +++ b/RhythmBullet/RhythmBulletGame.cs @@ -1,9 +1,8 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; -using RecrownedAthenaeum.Camera; +using RecrownedAthenaeum.Render; using RecrownedAthenaeum.ContentSystem; -using RecrownedAthenaeum.Data; using RecrownedAthenaeum.Input; using RecrownedAthenaeum.Persistence; using RecrownedAthenaeum.ScreenSystem; @@ -30,13 +29,15 @@ namespace RhythmBullet public static int pixels_per_WU; GraphicsDeviceManager graphics; - SpriteBatch spriteBatch; + ConsistentSpriteBatch spriteBatch; public readonly ContentManagerController assets; readonly ResolutionContentResolver resolutionContentResolver; public PreferencesManager preferencesManager; private ScreenManager screenManager; public Camera2D Camera { get; private set; } + public BasicEffect cameraEffect; + private bool resizing; private bool initialLoadComplete; private MainScreen mainScreen; @@ -63,7 +64,6 @@ namespace RhythmBullet Resolution resolution = preferencesManager.GetPreferences().Resolution; graphics.PreferredBackBufferWidth = resolution.Width; graphics.PreferredBackBufferHeight = resolution.Height; - RecrownedAthenaeum.Configuration.GraphicsDeviceManager = graphics; } /// @@ -82,8 +82,14 @@ namespace RhythmBullet musicController.musicList.StartSearch(); if ((general.skinName ) != null) { - skinManager.LoadSkin(skinManager.ReadSkinData(general.skinDirectory + general.skinName), general.skinDirectory + general.skinName); + skinManager.LoadSkin(Path.Combine(general.skinDirectory, general.skinName), graphics.GraphicsDevice); } + + Debug.WriteLine("Initial resolution: " + resolution); + cameraEffect = new BasicEffect(graphics.GraphicsDevice); + cameraEffect.TextureEnabled = true; + cameraEffect.VertexColorEnabled = true; + Camera = new Camera2D(resolution.Width, resolution.Height, cameraEffect); Debug.WriteLine("Initial setup complete."); base.Initialize(); } @@ -95,14 +101,10 @@ namespace RhythmBullet protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. - spriteBatch = new SpriteBatch(GraphicsDevice); + spriteBatch = new ConsistentSpriteBatch(GraphicsDevice); - RecrownedAthenaeum.Configuration.Camera2D = new Camera2D(); - Camera = RecrownedAthenaeum.Configuration.Camera2D; - - screenManager = new ScreenManager(); - RecrownedAthenaeum.Configuration.spriteBatchSettings = screenManager.batchSettings; - screenManager.ShowFirstScreenEvent += ShowFirstScreen; + screenManager = new ScreenManager(graphics); + screenManager.NeedNextScreen += ShowFirstScreen; QueueContent(); screenManager.Screen = new LoadingScreen(this, Content.Load("RhythmBullet"), 0.7f); } @@ -140,7 +142,7 @@ namespace RhythmBullet { assets.Update(); } - screenManager.UpdateCurrentScreen(gameTime, CheckReadyForInitiate()); + screenManager.UpdateCurrentScreen(gameTime, !CheckReadyForInitiate()); InputUtilities.Update(); base.Update(gameTime); @@ -152,7 +154,8 @@ namespace RhythmBullet /// Provides a snapshot of timing values. protected override void Draw(GameTime gameTime) { - screenManager.DrawCurrentScreen(spriteBatch); + spriteBatch.effect = cameraEffect; + screenManager.DrawScreen(spriteBatch); base.Draw(gameTime); } @@ -216,12 +219,13 @@ namespace RhythmBullet SetUpDefaultSkin(); UpdateCursor(); - mainScreen = new MainScreen(assets, Skin); + mainScreen = new MainScreen(assets, Skin, Camera); initialLoadComplete = true; } private void UpdateCursor() { + SpriteBatch spriteBatch = this.spriteBatch; Texture2D texture = Skin.CursorTexture; int cursorSize = (int)(0.07f * graphics.PreferredBackBufferHeight); Debug.WriteLine("Cursor size length: " + cursorSize); diff --git a/RhythmBullet/Screens/MainMenu/MainPage.cs b/RhythmBullet/Screens/MainMenu/MainPage.cs index afee31f..6dc07c5 100644 --- a/RhythmBullet/Screens/MainMenu/MainPage.cs +++ b/RhythmBullet/Screens/MainMenu/MainPage.cs @@ -1,13 +1,10 @@ -using Microsoft.Xna.Framework; -using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Graphics; using RecrownedAthenaeum.ContentSystem; using RecrownedAthenaeum.Render; using RecrownedAthenaeum.UI.BookSystem; using RecrownedAthenaeum.UI.Modular.Modules; using RecrownedAthenaeum.UI.Modular.Modules.Interactive; using RecrownedAthenaeum.UI.SkinSystem; -using RecrownedAthenaeum.UI.SkinSystem.Definitions; -using System; namespace RhythmBullet.Screens.MainMenu { @@ -21,7 +18,7 @@ namespace RhythmBullet.Screens.MainMenu { } - protected override void Initialize(ContentManagerController assets, ISkin skin) + protected override void Initialize(ContentManagerController assets, ISkin skin, BasicScissor scissorBox) { title = new Image(assets.Get("title")); AddModule(title); @@ -33,6 +30,8 @@ namespace RhythmBullet.Screens.MainMenu quitButton = new TextButton("Quit", font, skin); AddModule(quitButton); + + base.Initialize(assets, skin, scissorBox); } public override void ApplySize(int width, int height) @@ -56,9 +55,11 @@ namespace RhythmBullet.Screens.MainMenu quitButton.CenterHorizontally(); quitButton.situation.Y = (int)quitButton.origin.Y + playButton.Boundaries.Y + playButton.Boundaries.Height + 15; + + base.ApplySize(width, height); } - public override void Draw(SpriteBatch batch) + public override void Draw(ConsistentSpriteBatch batch) { base.Draw(batch); } diff --git a/RhythmBullet/Screens/MainMenu/MainScreen.cs b/RhythmBullet/Screens/MainMenu/MainScreen.cs index 847d4b5..b8f771c 100644 --- a/RhythmBullet/Screens/MainMenu/MainScreen.cs +++ b/RhythmBullet/Screens/MainMenu/MainScreen.cs @@ -1,8 +1,8 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; -using RecrownedAthenaeum.Camera; using RecrownedAthenaeum.ContentSystem; using RecrownedAthenaeum.Input; +using RecrownedAthenaeum.Render; using RecrownedAthenaeum.ScreenSystem; using RecrownedAthenaeum.UI.BookSystem; using RecrownedAthenaeum.UI.SkinSystem; @@ -17,22 +17,25 @@ namespace RhythmBullet.Screens.MainMenu readonly Texture2D background; readonly Book book; readonly MainPage mainPage; + Rectangle screenSize; - public MainScreen(ContentManagerController assets, ISkin skin) : base(true) + public MainScreen(ContentManagerController assets, ISkin skin, Camera2D camera) : base(true) { this.assets = assets; background = assets.Get("backgrounds/mainBG"); fat = new FadeAwayTransition(1.5f); - book = new Book(assets, skin); + book = new Book(assets, skin, camera); mainPage = new MainPage(); book.AddPages(mainPage); InputUtilities.InputListeners.Add(book); } - public override void Initiate(Rectangle screenSize, Camera2D camera) + public override void ApplySize(int width, int height) { - book.Initiate(camera, screenSize); - base.Initiate(screenSize, camera); + screenSize.Width = width; + screenSize.Height = height; + book.ApplySize(width, height); + base.ApplySize(width, height); } public override void Show() @@ -41,9 +44,9 @@ namespace RhythmBullet.Screens.MainMenu base.Show(); } - public override void Draw(SpriteBatch spriteBatch) + public override void Draw(ConsistentSpriteBatch spriteBatch) { - spriteBatch.Draw(background, ScreenSize, Color.White); + spriteBatch.Draw(background, screenSize, Color.White); book.Draw(spriteBatch); base.Draw(spriteBatch); } diff --git a/RhythmBullet/Screens/Transitions/FadeAwayTransition.cs b/RhythmBullet/Screens/Transitions/FadeAwayTransition.cs index 2f13e8f..366e5bb 100644 --- a/RhythmBullet/Screens/Transitions/FadeAwayTransition.cs +++ b/RhythmBullet/Screens/Transitions/FadeAwayTransition.cs @@ -1,5 +1,6 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; +using RecrownedAthenaeum.Render; using RecrownedAthenaeum.ScreenSystem; using System; @@ -55,7 +56,7 @@ namespace RhythmBullet.Screens.Transitions return true; } - public void DrawTransition(SpriteBatch batch) + public void DrawTransition(ConsistentSpriteBatch batch) { if (curtain != null) { diff --git a/RhythmBullet/packages.config b/RhythmBullet/packages.config deleted file mode 100644 index 2595680..0000000 --- a/RhythmBullet/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file