From ea762a174f7e18508df0f66066becf84a8610800 Mon Sep 17 00:00:00 2001 From: Victor Chelaru Date: Tue, 9 Jun 2015 13:53:58 -0600 Subject: [PATCH] Adding new cross-platform walking game to replace the platform-specific projects. --- WalkingGameMG/Android/Activity1.cs | 38 ++++ WalkingGameMG/Android/Assets/AboutAssets.txt | 19 ++ .../Android/Assets/Content/Content.mgcb | 13 ++ .../Android/Properties/AndroidManifest.xml | 6 + .../Android/Properties/AssemblyInfo.cs | 31 +++ .../Android/Resources/AboutResources.txt | 44 ++++ .../Android/Resources/drawable/Icon.png | Bin 0 -> 3586 bytes .../Android/Resources/drawable/Splash.png | Bin 0 -> 33526 bytes .../Android/Resources/values/Styles.xml | 7 + .../Android/WalkingGame.Droid.csproj | 74 +++++++ WalkingGameMG/Android/packages.config | 4 + WalkingGameMG/Metadata.xml | 9 + WalkingGameMG/README.md | 13 ++ WalkingGameMG/Screenshots/Screenshot1.gif | Bin 0 -> 42357 bytes WalkingGameMG/WalkingGame.sln | 45 ++++ WalkingGameMG/WalkingGame/Animation.cs | 98 +++++++++ WalkingGameMG/WalkingGame/AnimationFrame.cs | 12 ++ WalkingGameMG/WalkingGame/CharacterEntity.cs | 201 ++++++++++++++++++ WalkingGameMG/WalkingGame/Game1.cs | 86 ++++++++ .../WalkingGame/WalkingGame.projitems | 17 ++ WalkingGameMG/WalkingGame/WalkingGame.shproj | 11 + WalkingGameMG/iOS/Content/Content.mgcb | 13 ++ WalkingGameMG/iOS/Content/charactersheet.png | Bin 0 -> 5215 bytes WalkingGameMG/iOS/Default.png | Bin 0 -> 26160 bytes WalkingGameMG/iOS/GameThumbnail.png | Bin 0 -> 15634 bytes WalkingGameMG/iOS/Info.plist | 23 ++ WalkingGameMG/iOS/Main.cs | 86 ++++++++ WalkingGameMG/iOS/Properties/AssemblyInfo.cs | 31 +++ WalkingGameMG/iOS/WalkingGame.iOS.csproj | 89 ++++++++ WalkingGameMG/iOS/packages.config | 4 + 30 files changed, 974 insertions(+) create mode 100644 WalkingGameMG/Android/Activity1.cs create mode 100644 WalkingGameMG/Android/Assets/AboutAssets.txt create mode 100644 WalkingGameMG/Android/Assets/Content/Content.mgcb create mode 100644 WalkingGameMG/Android/Properties/AndroidManifest.xml create mode 100644 WalkingGameMG/Android/Properties/AssemblyInfo.cs create mode 100644 WalkingGameMG/Android/Resources/AboutResources.txt create mode 100644 WalkingGameMG/Android/Resources/drawable/Icon.png create mode 100644 WalkingGameMG/Android/Resources/drawable/Splash.png create mode 100644 WalkingGameMG/Android/Resources/values/Styles.xml create mode 100644 WalkingGameMG/Android/WalkingGame.Droid.csproj create mode 100644 WalkingGameMG/Android/packages.config create mode 100644 WalkingGameMG/Metadata.xml create mode 100644 WalkingGameMG/README.md create mode 100644 WalkingGameMG/Screenshots/Screenshot1.gif create mode 100644 WalkingGameMG/WalkingGame.sln create mode 100644 WalkingGameMG/WalkingGame/Animation.cs create mode 100644 WalkingGameMG/WalkingGame/AnimationFrame.cs create mode 100644 WalkingGameMG/WalkingGame/CharacterEntity.cs create mode 100644 WalkingGameMG/WalkingGame/Game1.cs create mode 100644 WalkingGameMG/WalkingGame/WalkingGame.projitems create mode 100644 WalkingGameMG/WalkingGame/WalkingGame.shproj create mode 100644 WalkingGameMG/iOS/Content/Content.mgcb create mode 100644 WalkingGameMG/iOS/Content/charactersheet.png create mode 100644 WalkingGameMG/iOS/Default.png create mode 100644 WalkingGameMG/iOS/GameThumbnail.png create mode 100644 WalkingGameMG/iOS/Info.plist create mode 100644 WalkingGameMG/iOS/Main.cs create mode 100644 WalkingGameMG/iOS/Properties/AssemblyInfo.cs create mode 100644 WalkingGameMG/iOS/WalkingGame.iOS.csproj create mode 100644 WalkingGameMG/iOS/packages.config diff --git a/WalkingGameMG/Android/Activity1.cs b/WalkingGameMG/Android/Activity1.cs new file mode 100644 index 000000000..0060e2015 --- /dev/null +++ b/WalkingGameMG/Android/Activity1.cs @@ -0,0 +1,38 @@ +using System; + +using Android.App; +using Android.Content; +using Android.Runtime; +using Android.Content.PM; +using Android.Views; +using Android.Widget; +using Android.OS; + +using Microsoft.Xna.Framework; + +namespace WalkingGame.Droid +{ + [Activity (Label = "WalkingGame.Droid", + MainLauncher = true, + Icon = "@drawable/icon", + Theme = "@style/Theme.Splash", + AlwaysRetainTaskState = true, + LaunchMode = LaunchMode.SingleInstance, + ConfigurationChanges = ConfigChanges.Orientation | + ConfigChanges.KeyboardHidden | + ConfigChanges.Keyboard)] + public class Activity1 : AndroidGameActivity + { + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + var g = new Game1(); + SetContentView((View)g.Services.GetService(typeof(View))); + g.Run(); + } + + } +} + + diff --git a/WalkingGameMG/Android/Assets/AboutAssets.txt b/WalkingGameMG/Android/Assets/AboutAssets.txt new file mode 100644 index 000000000..ee3988629 --- /dev/null +++ b/WalkingGameMG/Android/Assets/AboutAssets.txt @@ -0,0 +1,19 @@ +Any raw assets you want to be deployed with your application can be placed in +this directory (and child directories) and given a Build Action of "AndroidAsset". + +These files will be deployed with you package and will be accessible using Android's +AssetManager, like this: + +public class ReadAsset : Activity +{ + protected override void OnCreate (Bundle bundle) + { + base.OnCreate (bundle); + + InputStream input = Assets.Open ("my_asset.txt"); + } +} + +Additionally, some Android functions will automatically load asset files: + +Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf"); \ No newline at end of file diff --git a/WalkingGameMG/Android/Assets/Content/Content.mgcb b/WalkingGameMG/Android/Assets/Content/Content.mgcb new file mode 100644 index 000000000..802d8a9ff --- /dev/null +++ b/WalkingGameMG/Android/Assets/Content/Content.mgcb @@ -0,0 +1,13 @@ +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:Windows +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# diff --git a/WalkingGameMG/Android/Properties/AndroidManifest.xml b/WalkingGameMG/Android/Properties/AndroidManifest.xml new file mode 100644 index 000000000..98c4cc403 --- /dev/null +++ b/WalkingGameMG/Android/Properties/AndroidManifest.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/WalkingGameMG/Android/Properties/AssemblyInfo.cs b/WalkingGameMG/Android/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..589828f0b --- /dev/null +++ b/WalkingGameMG/Android/Properties/AssemblyInfo.cs @@ -0,0 +1,31 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +#if __ANDROID__ +using Android.App; +#endif + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle ("WalkingGame.Droid")] +[assembly: AssemblyDescription ("")] +[assembly: AssemblyConfiguration ("")] +[assembly: AssemblyCompany ("")] +[assembly: AssemblyProduct ("")] +[assembly: AssemblyCopyright ("vchelaru")] +[assembly: AssemblyTrademark ("")] +[assembly: AssemblyCulture ("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion ("1.0.0")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/WalkingGameMG/Android/Resources/AboutResources.txt b/WalkingGameMG/Android/Resources/AboutResources.txt new file mode 100644 index 000000000..10f52d460 --- /dev/null +++ b/WalkingGameMG/Android/Resources/AboutResources.txt @@ -0,0 +1,44 @@ +Images, layout descriptions, binary blobs and string dictionaries can be included +in your application as resource files. Various Android APIs are designed to +operate on the resource IDs instead of dealing with images, strings or binary blobs +directly. + +For example, a sample Android app that contains a user interface layout (main.axml), +an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) +would keep its resources in the "Resources" directory of the application: + +Resources/ + drawable/ + icon.png + + layout/ + main.axml + + values/ + strings.xml + +In order to get the build system to recognize Android resources, set the build action to +"AndroidResource". The native Android APIs do not operate directly with filenames, but +instead operate on resource IDs. When you compile an Android application that uses resources, +the build system will package the resources for distribution and generate a class called "R" +(this is an Android convention) that contains the tokens for each one of the resources +included. For example, for the above Resources layout, this is what the R class would expose: + +public class R { + public class drawable { + public const int icon = 0x123; + } + + public class layout { + public const int main = 0x456; + } + + public class strings { + public const int first_string = 0xabc; + public const int second_string = 0xbcd; + } +} + +You would then use R.drawable.icon to reference the drawable/icon.png file, or R.layout.main +to reference the layout/main.axml file, or R.strings.first_string to reference the first +string in the dictionary file values/strings.xml. diff --git a/WalkingGameMG/Android/Resources/drawable/Icon.png b/WalkingGameMG/Android/Resources/drawable/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7f8c4a2f3d26ac1dffb890728b8c2cf4fe8b76 GIT binary patch literal 3586 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 literal 0 HcmV?d00001 diff --git a/WalkingGameMG/Android/Resources/values/Styles.xml b/WalkingGameMG/Android/Resources/values/Styles.xml new file mode 100644 index 000000000..510213401 --- /dev/null +++ b/WalkingGameMG/Android/Resources/values/Styles.xml @@ -0,0 +1,7 @@ + + + + diff --git a/WalkingGameMG/Android/WalkingGame.Droid.csproj b/WalkingGameMG/Android/WalkingGame.Droid.csproj new file mode 100644 index 000000000..b3c3a802e --- /dev/null +++ b/WalkingGameMG/Android/WalkingGame.Droid.csproj @@ -0,0 +1,74 @@ + + + + Debug + AnyCPU + {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {0A2B68ED-3550-4894-958D-8643609E3085} + Library + WalkingGame.Droid + Assets + Resources + Properties\AndroidManifest.xml + Resource + Resources\Resource.designer.cs + True + True + WalkingGame.Droid + v4.4.87 + + + true + full + false + bin\Debug + DEBUG; + prompt + 4 + None + false + + + full + true + bin\Release + prompt + 4 + false + false + + + + + + + + + ..\packages\MonoGame.Framework.Android.3.3.0.0\lib\MonoAndroid\MonoGame.Framework.dll + + + + + + + + + + + + + + + + + + + + + + Assets\Content\charactersheet.png + + + + + \ No newline at end of file diff --git a/WalkingGameMG/Android/packages.config b/WalkingGameMG/Android/packages.config new file mode 100644 index 000000000..fd2b3f803 --- /dev/null +++ b/WalkingGameMG/Android/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/WalkingGameMG/Metadata.xml b/WalkingGameMG/Metadata.xml new file mode 100644 index 000000000..5476953b3 --- /dev/null +++ b/WalkingGameMG/Metadata.xml @@ -0,0 +1,9 @@ + + + 29cc8613-fdb7-4fe2-82b4-9921eafd4e58 + false + Beginning + Indie + Getting Started, Games + true + diff --git a/WalkingGameMG/README.md b/WalkingGameMG/README.md new file mode 100644 index 000000000..808375675 --- /dev/null +++ b/WalkingGameMG/README.md @@ -0,0 +1,13 @@ +MonoGame WalkingGame Project for iOS and Android +==================================== + +This is a small demo game using MonoGame for iOS and Android, using a shared code project. It is the result of working through the the entire Introduction to Monogame walkthrough. + +The demo can be played by touching the screen to move the character around the screen. + +It is built against MonoGame 3.3. + +Author +------ + +Victor Chelaru \ No newline at end of file diff --git a/WalkingGameMG/Screenshots/Screenshot1.gif b/WalkingGameMG/Screenshots/Screenshot1.gif new file mode 100644 index 0000000000000000000000000000000000000000..cdc5368bb8cb79a8a6c2c14b8f78a55919c98edc GIT binary patch literal 42357 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�hOAmiqSj;;8c9ZJ1m(?XZzks|K#g0kZn~X%WRvg3eCby@e?M8dAAqCwB zg}W`wrc8%F%3kcxOgH;YGBw)08sY7GE=NmoZOq^ZEtNUxRqOW4?~H(o%5mf?1Oe96 vbZ%EvP!bs0(C+zHoEmEOFLu<=cP(Z&lB=F%B(-Jw-P85pbw6o}L>T-ZnRN frames = new List(); + + // The amount of time into the animation + TimeSpan timeIntoAnimation; + + // The length of the entire animation + TimeSpan Duration + { + get + { + double totalSeconds = 0; + foreach (var frame in frames) + { + totalSeconds += frame.Duration.TotalSeconds; + } + + return TimeSpan.FromSeconds (totalSeconds); + } + } + + public Rectangle CurrentRectangle + { + get + { + AnimationFrame currentFrame = null; + + // See if we can find the frame + TimeSpan accumulatedTime = new TimeSpan(0); + foreach(var frame in frames) + { + if (accumulatedTime + frame.Duration >= timeIntoAnimation) + { + currentFrame = frame; + break; + } + else + { + accumulatedTime += frame.Duration; + } + } + + // If no frame was found, then try the last frame, + // just in case timeIntoAnimation somehow exceeds Duration + if (currentFrame == null) + { + currentFrame = frames.LastOrDefault (); + } + + // If we found a frame, return its rectangle, otherwise + // return an empty rectangle (one with no width or height) + if (currentFrame != null) + { + return currentFrame.SourceRectangle; + } + else + { + return Rectangle.Empty; + } + } + } + + // Adds a single frame to this animation. + public void AddFrame(Rectangle rectangle, TimeSpan duration) + { + AnimationFrame newFrame = new AnimationFrame() + { + SourceRectangle = rectangle, + Duration = duration + }; + + frames.Add(newFrame); + } + + // Increases the timeIntoAnimation value according to the + // frame time as obtained from gameTime + public void Update(GameTime gameTime) + { + double secondsIntoAnimation = + timeIntoAnimation.TotalSeconds + gameTime.ElapsedGameTime.TotalSeconds; + + + double remainder = secondsIntoAnimation % Duration.TotalSeconds; + + timeIntoAnimation = TimeSpan.FromSeconds (remainder); + } + } +} + diff --git a/WalkingGameMG/WalkingGame/AnimationFrame.cs b/WalkingGameMG/WalkingGame/AnimationFrame.cs new file mode 100644 index 000000000..7fb0eb804 --- /dev/null +++ b/WalkingGameMG/WalkingGame/AnimationFrame.cs @@ -0,0 +1,12 @@ +using System; +using Microsoft.Xna.Framework; + +namespace WalkingGame +{ + public class AnimationFrame + { + public Rectangle SourceRectangle { get; set; } + public TimeSpan Duration { get; set; } + } +} + diff --git a/WalkingGameMG/WalkingGame/CharacterEntity.cs b/WalkingGameMG/WalkingGame/CharacterEntity.cs new file mode 100644 index 000000000..6253f6513 --- /dev/null +++ b/WalkingGameMG/WalkingGame/CharacterEntity.cs @@ -0,0 +1,201 @@ +using System; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input.Touch; + +namespace WalkingGame +{ + public class CharacterEntity + { + static Texture2D characterSheetTexture; + + Animation walkDown; + Animation walkUp; + Animation walkLeft; + Animation walkRight; + + Animation standDown; + Animation standUp; + Animation standLeft; + Animation standRight; + + Animation currentAnimation; + + public float X + { + get; + set; + } + + public float Y + { + get; + set; + } + + public CharacterEntity (GraphicsDevice graphicsDevice) + { + if (characterSheetTexture == null) + { + using (var stream = TitleContainer.OpenStream ("Content/charactersheet.png")) + { + characterSheetTexture = Texture2D.FromStream (graphicsDevice, stream); + } + } + + walkDown = new Animation (); + walkDown.AddFrame (new Rectangle (0, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkDown.AddFrame (new Rectangle (16, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkDown.AddFrame (new Rectangle (0, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkDown.AddFrame (new Rectangle (32, 0, 16, 16), TimeSpan.FromSeconds (.25)); + + walkUp = new Animation (); + walkUp.AddFrame (new Rectangle (144, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkUp.AddFrame (new Rectangle (160, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkUp.AddFrame (new Rectangle (144, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkUp.AddFrame (new Rectangle (176, 0, 16, 16), TimeSpan.FromSeconds (.25)); + + walkLeft = new Animation (); + walkLeft.AddFrame (new Rectangle (48, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkLeft.AddFrame (new Rectangle (64, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkLeft.AddFrame (new Rectangle (48, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkLeft.AddFrame (new Rectangle (80, 0, 16, 16), TimeSpan.FromSeconds (.25)); + + walkRight = new Animation (); + walkRight.AddFrame (new Rectangle (96, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkRight.AddFrame (new Rectangle (112, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkRight.AddFrame (new Rectangle (96, 0, 16, 16), TimeSpan.FromSeconds (.25)); + walkRight.AddFrame (new Rectangle (128, 0, 16, 16), TimeSpan.FromSeconds (.25)); + + // Standing animations only have a single frame of animation: + standDown = new Animation (); + standDown.AddFrame (new Rectangle (0, 0, 16, 16), TimeSpan.FromSeconds (.25)); + + standUp = new Animation (); + standUp.AddFrame (new Rectangle (144, 0, 16, 16), TimeSpan.FromSeconds (.25)); + + standLeft = new Animation (); + standLeft.AddFrame (new Rectangle (48, 0, 16, 16), TimeSpan.FromSeconds (.25)); + + standRight = new Animation (); + standRight.AddFrame (new Rectangle (96, 0, 16, 16), TimeSpan.FromSeconds (.25)); + } + + public void Draw(SpriteBatch spriteBatch) + { + Vector2 topLeftOfSprite = new Vector2 (this.X, this.Y); + Color tintColor = Color.White; + var sourceRectangle = currentAnimation.CurrentRectangle; + + spriteBatch.Draw(characterSheetTexture, topLeftOfSprite, sourceRectangle, Color.White); + } + + public void Update(GameTime gameTime) + { + var velocity = GetDesiredVelocityFromInput (); + + this.X += velocity.X * (float)gameTime.ElapsedGameTime.TotalSeconds; + this.Y += velocity.Y * (float)gameTime.ElapsedGameTime.TotalSeconds; + + // We can use the velocity variable to determine if the + // character is moving or standing still + bool isMoving = velocity != Vector2.Zero; + if (isMoving) + { + // If the absolute value of the X component + // is larger than the absolute value of the Y + // component, then that means the character is + // moving horizontally: + bool isMovingHorizontally = Math.Abs (velocity.X) > Math.Abs (velocity.Y); + if (isMovingHorizontally) + { + // No that we know the character is moving horizontally + // we can check if the velocity is positive (moving right) + // or negative (moving left) + if (velocity.X > 0) + { + currentAnimation = walkRight; + } + else + { + currentAnimation = walkLeft; + } + } + else + { + // If the character is not moving horizontally + // then it must be moving vertically. The SpriteBatch + // class treats positive Y as down, so this defines the + // coordinate system for our game. Therefore if + // Y is positive then the character is moving down. + // Otherwise, the character is moving up. + if (velocity.Y > 0) + { + currentAnimation = walkDown; + } + else + { + currentAnimation = walkUp; + } + } + } + else + { + // This else statement contains logic for if the + // character is standing still. + // First we are going to check if the character + // is currently playing any walking animations. + // If so, then we want to switch to a standing animation. + // We want to preserve the direction that the character + // is facing so we'll set the corresponding standing + // animation according to the walking animation being played. + if (currentAnimation == walkRight) + { + currentAnimation = standRight; + } + else if (currentAnimation == walkLeft) + { + currentAnimation = standLeft; + } + else if (currentAnimation == walkUp) + { + currentAnimation = standUp; + } + else if (currentAnimation == walkDown) + { + currentAnimation = standDown; + } + // If the character is standing still but is not showing + // any animation at all then we'll default to facing down. + else if (currentAnimation == null) + { + currentAnimation = standDown; + } + } + + currentAnimation.Update (gameTime); + } + + Vector2 GetDesiredVelocityFromInput() + { + Vector2 desiredVelocity = new Vector2 (); + + TouchCollection touchCollection = TouchPanel.GetState(); + + if (touchCollection.Count > 0) + { + desiredVelocity.X = touchCollection [0].Position.X - this.X; + desiredVelocity.Y = touchCollection [0].Position.Y - this.Y; + + if (desiredVelocity.X != 0 || desiredVelocity.Y != 0) + { + desiredVelocity.Normalize(); + const float desiredSpeed = 200; + desiredVelocity *= desiredSpeed; + } + } + + return desiredVelocity; + } + } +} \ No newline at end of file diff --git a/WalkingGameMG/WalkingGame/Game1.cs b/WalkingGameMG/WalkingGame/Game1.cs new file mode 100644 index 000000000..63887b67e --- /dev/null +++ b/WalkingGameMG/WalkingGame/Game1.cs @@ -0,0 +1,86 @@ +#region Using Statements +using System; + +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Storage; +using Microsoft.Xna.Framework.Input; + +#endregion + +namespace WalkingGame +{ + /// + /// This is the main type for your game. + /// + public class Game1 : Game + { + GraphicsDeviceManager graphics; + SpriteBatch spriteBatch; + + CharacterEntity character; + + public Game1 () + { + graphics = new GraphicsDeviceManager (this); + Content.RootDirectory = "Content"; + graphics.IsFullScreen = true; + } + + /// + /// Allows the game to perform any initialization it needs to before starting to run. + /// This is where it can query for any required services and load any non-graphic + /// related content. Calling base.Initialize will enumerate through any components + /// and initialize them as well. + /// + protected override void Initialize () + { + character = new CharacterEntity (this.GraphicsDevice); + + base.Initialize (); + + } + + /// + /// LoadContent will be called once per game and is the place to load + /// all of your content. + /// + protected override void LoadContent () + { + // Create a new SpriteBatch, which can be used to draw textures. + spriteBatch = new SpriteBatch (GraphicsDevice); + + } + + /// + /// Allows the game to run logic such as updating the world, + /// checking for collisions, gathering input, and playing audio. + /// + /// Provides a snapshot of timing values. + protected override void Update (GameTime gameTime) + { + character.Update (gameTime); + base.Update(gameTime); + } + + /// + /// This is called when the game should draw itself. + /// + /// Provides a snapshot of timing values. + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.CornflowerBlue); + + // We'll start all of our drawing here: + spriteBatch.Begin (); + + // Now we can do any entity rendering: + character.Draw(spriteBatch); + // End renders all sprites to the screen: + spriteBatch.End (); + + base.Draw(gameTime); + } + } +} + diff --git a/WalkingGameMG/WalkingGame/WalkingGame.projitems b/WalkingGameMG/WalkingGame/WalkingGame.projitems new file mode 100644 index 000000000..cccb90583 --- /dev/null +++ b/WalkingGameMG/WalkingGame/WalkingGame.projitems @@ -0,0 +1,17 @@ + + + + $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + true + {DC1CF201-F64E-420F-BEEA-849CFF7F9122} + + + WalkingGame + + + + + + + + \ No newline at end of file diff --git a/WalkingGameMG/WalkingGame/WalkingGame.shproj b/WalkingGameMG/WalkingGame/WalkingGame.shproj new file mode 100644 index 000000000..6b105e981 --- /dev/null +++ b/WalkingGameMG/WalkingGame/WalkingGame.shproj @@ -0,0 +1,11 @@ + + + + {DC1CF201-F64E-420F-BEEA-849CFF7F9122} + + + + + + + \ No newline at end of file diff --git a/WalkingGameMG/iOS/Content/Content.mgcb b/WalkingGameMG/iOS/Content/Content.mgcb new file mode 100644 index 000000000..802d8a9ff --- /dev/null +++ b/WalkingGameMG/iOS/Content/Content.mgcb @@ -0,0 +1,13 @@ +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/$(Platform) +/intermediateDir:obj/$(Platform) +/platform:Windows +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# diff --git a/WalkingGameMG/iOS/Content/charactersheet.png b/WalkingGameMG/iOS/Content/charactersheet.png new file mode 100644 index 0000000000000000000000000000000000000000..134b689861993ee7e91a3dd06fe7dc9a3b9809ac GIT binary patch literal 5215 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 literal 0 HcmV?d00001 diff --git a/WalkingGameMG/iOS/Default.png b/WalkingGameMG/iOS/Default.png new file mode 100644 index 0000000000000000000000000000000000000000..1f9b909f1df861f7059a90708c9932b2c0c82fbd GIT binary patch literal 26160 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 bUWUNjkkh0?)&ju0+Ykv6S>bF!J@5Ym+7IaV literal 0 HcmV?d00001 diff --git a/WalkingGameMG/iOS/GameThumbnail.png b/WalkingGameMG/iOS/GameThumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..99814c32fd3e088b313f4d0ed09da7507434e161 GIT binary patch literal 15634 zcmeI3d0Z3M7RN_Kt?;m|;__T$5TA%)vKlfbL1b4$BSZl=9Fl>ICYg`~0;ts|mAZUv zt*Av17pyzh4OEIsU4U9eUQtj{#EPQgg3D8?xV%Y%a6xd|_vxRL&nL;ry}xtLo$opK zX8xI_^56g`hyD%_1UUr-`i79-BFp;|JMy!0l5-jP)m zjRz(fu+XGng)(W5Qlw&fNgc!q2pK?&nNUW8R--c_2@<9?E<)OtVVKFVN=$PkOm9m< zMz~DQ@F5HsL*OA`DcM{OLn!j#2n0eQcNBxm=I~)Q2j=it91+6jBWyOK>BW>fke1k> zibg_w{hQK}za&hx$)rbM*lad?n0X$AAqM7%L?W2Yg}Gc7sbCosbtW`{r8BzNg1nF8 ziy4&$TyMe&9m5hAjUwVq5+>7(W$87}H={OlLBZew=pw^lHLH7}Z1vDVwJ|Oib29CTq^!?s~P_c2gToe(@xNCZz3p z8Wo9p3=YAJM4Um1`Nfl$;?myLoABtC; zKpd44i6#tM)Fj2VXbcAHbunVNWe`v{cNOA8Xb1zjEKJH1!|e?NUe-=Sf^ngAudrI0^IpmTNx5n$IYUk9FrFsM2zpNtKojfvLoBtI?KaHG4L>;s0*|ZSev3 zj&qpRnC@d6$`;D1>Ntpzh&Gu~1Lhq=_Qapr>$a$^-P(p1!fix&>8W$xZP(b4XX;9iUE=ok8fW`&VptNaRl!!n9 zjSHkfY16nU5rG047f6HBrg2ds0tGZKkOrkqRN9Nnmis`%#GLvP<;<}T+< zc>cCza8l}U?V~)QaOv`z4aMtIt6yF-9>3GjnCTThs!!*PAI9!WToyFJ1;sZ!Pt3~; zLZ7TXGSJ@cQ)uA}ZfN0d-#AI`;lE8e z*L`~Y#GuLl+;`x(yZeyC#aX)%h2P=%YSBwv^@9+3k@ro3GN-)a&bIzN@TeIXe@I_n z88dd33AQ_$Jua^7JIBG?sx7r^dyUM_t{;DQi_4XTwZC|IH~z~@!u!cBJ4%nftU~68 zZhW@rw~8_%CN($Xrut;^pe}X}&=S9}Q^|wwDLdVN7M)Wk+@$AS3g0MP(RFZU<@UM& z&Z1$v?myXcb*nn<-J6u0SLPxlr%$i^2JiIGhg`qi`E9?_ov*4^ISNB=uHDDqYv(ZZ z;e)KJb2k+Z{?`9yW%>SJF4a%?Js^F=x}Im}My6HI?)=&JPQK$NnHOB-eHH%eyr1Dw zC0b<)ZNlH`?zf>ewzPYs_`eJxa!z}xqX`;d_swuIeC35qx7q`1#96;RvaXzza)=x8c zjy}<+@3NoWyPn%~wLH0Q`54osT@5{BF07nWb0o!nX<6j%yzfhLV0O4u#k(r$6v-w2 z=lx0;v&&g>zfT<95-Z;LPu#gU@3#Gg#>~x~eD=<6T(M72a2BjS?Vc-AVlfM5+>@;G zs(89HZF5+1`78k$#_ro`r_biIwilc$I{B*9>+yn#F(o6H)eRUE(0l%aiKDYmZshIC zj&&NbJ?-YH`~mEO9W!rgxb8FSZj9JuUG)}yya z5BOKTS#qkxKI7c@3jStIVoJr{$n(AKzIuLkQt4-P!-kz7elQC@v2fU)^>O|wGxB;T zJ9qa>nc*Ijd3X0}`;7BOt*l!>V0Bi_^hP)L`_EF6raG3qyV_XXtHvSq>-6j~a``4z z)xTA-+fIiU3CQlU>r|+AujxPOTsM8dnmwf}q{pgvh`Ut2x>h=!dFoD|s-fHF{@1H$ z@ydIH=f8dB+0bz9$`|vyHe5Rp*4^W)Zo!6w1)9fEQPW-49UBtZf0nGCYgjos`k9A| zD>^MbW_wXy^|n>j`KnA&adrODia^1k+8f7~@BjL@h_{2FFCU*Oz=dY=?17*lzhK`V I$IV*wKgdqx7ytkO literal 0 HcmV?d00001 diff --git a/WalkingGameMG/iOS/Info.plist b/WalkingGameMG/iOS/Info.plist new file mode 100644 index 000000000..cb06a0334 --- /dev/null +++ b/WalkingGameMG/iOS/Info.plist @@ -0,0 +1,23 @@ + + + + + CFBundleDisplayName + WalkingGame.iOS + CFBundleIconFiles + + GameThumbnail.png + + CFBundleIdentifier + project.MonoGame.WalkingGame.iOS + MinimumOSVersion + 5.2 + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/WalkingGameMG/iOS/Main.cs b/WalkingGameMG/iOS/Main.cs new file mode 100644 index 000000000..c532bbe53 --- /dev/null +++ b/WalkingGameMG/iOS/Main.cs @@ -0,0 +1,86 @@ +#region Using Statements +using System; +using System.Collections.Generic; +using System.Linq; + +#if MONOMAC +using MonoMac.AppKit; +using MonoMac.Foundation; + +#elif __IOS__ +using Foundation; +using UIKit; +#endif +#endregion + + +namespace WalkingGame.iOS +{ + #if __IOS__ + [Register("AppDelegate")] + class Program : UIApplicationDelegate + +#else + static class Program + #endif + { + private static Game1 game; + + internal static void RunGame () + { + game = new Game1 (); + game.Run (); + } + + /// + /// The main entry point for the application. + /// + #if !MONOMAC && !__IOS__ + [STAThread] + #endif + static void Main (string[] args) + { + #if MONOMAC + NSApplication.Init (); + + using (var p = new NSAutoreleasePool ()) { + NSApplication.SharedApplication.Delegate = new AppDelegate(); + NSApplication.Main(args); + } + #elif __IOS__ + UIApplication.Main(args, null, "AppDelegate"); + #else + RunGame (); + #endif + } + + #if __IOS__ + public override void FinishedLaunching(UIApplication app) + { + RunGame(); + } + #endif + } + + #if MONOMAC + class AppDelegate : NSApplicationDelegate + { + public override void FinishedLaunching (MonoMac.Foundation.NSObject notification) + { + AppDomain.CurrentDomain.AssemblyResolve += (object sender, ResolveEventArgs a) => { + if (a.Name.StartsWith("MonoMac")) { + return typeof(MonoMac.AppKit.AppKitFramework).Assembly; + } + return null; + }; + Program.RunGame(); + } + + public override bool ApplicationShouldTerminateAfterLastWindowClosed (NSApplication sender) + { + return true; + } + } + #endif +} + diff --git a/WalkingGameMG/iOS/Properties/AssemblyInfo.cs b/WalkingGameMG/iOS/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..5d22ac548 --- /dev/null +++ b/WalkingGameMG/iOS/Properties/AssemblyInfo.cs @@ -0,0 +1,31 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +#if __ANDROID__ +using Android.App; +#endif + +// Information about this assembly is defined by the following attributes. +// Change them to the values specific to your project. + +[assembly: AssemblyTitle ("WalkingGame.iOS")] +[assembly: AssemblyDescription ("")] +[assembly: AssemblyConfiguration ("")] +[assembly: AssemblyCompany ("")] +[assembly: AssemblyProduct ("")] +[assembly: AssemblyCopyright ("vchelaru")] +[assembly: AssemblyTrademark ("")] +[assembly: AssemblyCulture ("")] + +// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}". +// The form "{Major}.{Minor}.*" will automatically update the build and revision, +// and "{Major}.{Minor}.{Build}.*" will update just the revision. + +[assembly: AssemblyVersion ("1.0.0")] + +// The following attributes are used to specify the signing key for the assembly, +// if desired. See the Mono documentation for more information about signing. + +//[assembly: AssemblyDelaySign(false)] +//[assembly: AssemblyKeyFile("")] + diff --git a/WalkingGameMG/iOS/WalkingGame.iOS.csproj b/WalkingGameMG/iOS/WalkingGame.iOS.csproj new file mode 100644 index 000000000..67d86aa33 --- /dev/null +++ b/WalkingGameMG/iOS/WalkingGame.iOS.csproj @@ -0,0 +1,89 @@ + + + + Debug + iPhoneSimulator + {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + {A91BC717-9CD2-4CC8-BF12-3AA87256F81A} + Exe + WalkingGame.iOS + Resources + WalkingGameiOS + + + true + full + false + bin\iPhoneSimulator\Debug + DEBUG; + prompt + 4 + false + i386 + None + true + true + iPhone Developer + + + full + true + bin\iPhone\Release + prompt + 4 + Entitlements.plist + ARMv7, ARM64 + false + iPhone Developer + + + full + true + bin\iPhoneSimulator\Release + prompt + 4 + i386 + false + None + + + true + full + false + bin\iPhone\Debug + DEBUG; + prompt + 4 + false + ARMv7, ARM64 + Entitlements.plist + true + iPhone Developer + true + + + + + + + + ..\packages\MonoGame.Framework.iOS.3.3.0.0\lib\XamariniOS\MonoGame.Framework.dll + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WalkingGameMG/iOS/packages.config b/WalkingGameMG/iOS/packages.config new file mode 100644 index 000000000..f66aa8d4e --- /dev/null +++ b/WalkingGameMG/iOS/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file