Prechádzať zdrojové kódy

RectangleCollisionSample updated to SDK and MG 3.8.*

CartBlanche 1 týždeň pred
rodič
commit
831220237b
27 zmenil súbory, kde vykonal 859 pridanie a 508 odobranie
  1. 50 0
      RectangleCollisionSample/.vscode/launch.json
  2. 158 0
      RectangleCollisionSample/.vscode/tasks.json
  3. 0 0
      RectangleCollisionSample/Core/Content/Block.bmp
  4. 0 0
      RectangleCollisionSample/Core/Content/Block.xnb
  5. 0 0
      RectangleCollisionSample/Core/Content/Game.ico
  6. 0 0
      RectangleCollisionSample/Core/Content/Person.bmp
  7. 0 0
      RectangleCollisionSample/Core/Content/Person.xnb
  8. 213 218
      RectangleCollisionSample/Core/Game1.cs
  9. 0 0
      RectangleCollisionSample/Core/GameThumbnail.png
  10. 11 0
      RectangleCollisionSample/Core/RectangleCollisionSample.Core.csproj
  11. 0 16
      RectangleCollisionSample/Info.plist
  12. 14 0
      RectangleCollisionSample/Platforms/Android/AndroidManifest.xml
  13. 27 0
      RectangleCollisionSample/Platforms/Android/MainActivity.cs
  14. 26 0
      RectangleCollisionSample/Platforms/Android/RectangleCollisionSample.Android.csproj
  15. 14 0
      RectangleCollisionSample/Platforms/Desktop/Program.cs
  16. 26 0
      RectangleCollisionSample/Platforms/Desktop/RectangleCollisionSample.DesktopGL.csproj
  17. 14 0
      RectangleCollisionSample/Platforms/Windows/Program.cs
  18. 28 0
      RectangleCollisionSample/Platforms/Windows/RectangleCollisionSample.Windows.csproj
  19. 43 0
      RectangleCollisionSample/Platforms/Windows/app.manifest
  20. 30 0
      RectangleCollisionSample/Platforms/iOS/Info.plist
  21. 13 0
      RectangleCollisionSample/Platforms/iOS/Program.cs
  22. 25 0
      RectangleCollisionSample/Platforms/iOS/RectangleCollisionSample.iOS.csproj
  23. 0 75
      RectangleCollisionSample/Program.cs
  24. 134 0
      RectangleCollisionSample/README.md
  25. 0 94
      RectangleCollisionSample/RectangleCollision.iOS.csproj
  26. 0 82
      RectangleCollisionSample/RectangleCollisionSample.MacOS.csproj
  27. 33 23
      RectangleCollisionSample/RectangleCollisionSample.sln

+ 50 - 0
RectangleCollisionSample/.vscode/launch.json

@@ -0,0 +1,50 @@
+{
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "Launch Windows",
+            "type": "coreclr",
+            "request": "launch",
+            "preLaunchTask": "build-windows",
+            "program": "${workspaceFolder}/Platforms/Windows/bin/Debug/net8.0-windows/RectangleCollisionSample.exe",
+            "args": [],
+            "cwd": "${workspaceFolder}",
+            "console": "internalConsole",
+            "stopAtEntry": false
+        },
+        {
+            "name": "Launch DesktopGL",
+            "type": "coreclr",
+            "request": "launch",
+            "preLaunchTask": "build-desktopgl",
+            "program": "${workspaceFolder}/Platforms/Desktop/bin/Debug/net8.0/RectangleCollisionSample.exe",
+            "args": [],
+            "cwd": "${workspaceFolder}",
+            "console": "internalConsole",
+            "stopAtEntry": false
+        }
+        ,
+        {
+            "name": "Launch Android",
+            "type": "coreclr",
+            "request": "launch",
+            "preLaunchTask": "build-android",
+            "program": "${workspaceFolder}/Platforms/Android/bin/Debug/net8.0-android/RectangleCollisionSample.dll",
+            "args": [],
+            "cwd": "${workspaceFolder}",
+            "console": "internalConsole",
+            "stopAtEntry": false
+        },
+        {
+            "name": "Launch iOS",
+            "type": "coreclr",
+            "request": "launch",
+            "preLaunchTask": "build-ios",
+            "program": "${workspaceFolder}/Platforms/iOS/bin/Debug/net8.0-ios/RectangleCollisionSample.dll",
+            "args": [],
+            "cwd": "${workspaceFolder}",
+            "console": "internalConsole",
+            "stopAtEntry": false
+        }
+    ]
+}

+ 158 - 0
RectangleCollisionSample/.vscode/tasks.json

@@ -0,0 +1,158 @@
+{
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "label": "build-windows",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "build",
+                "Platforms/Windows/RectangleCollisionSample.Windows.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary"
+            ],
+            "group": "build",
+            "presentation": {
+                "reveal": "silent"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "build-desktopgl",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "build",
+                "Platforms/Desktop/RectangleCollisionSample.DesktopGL.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary"
+            ],
+            "group": "build",
+            "presentation": {
+                "reveal": "silent"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "build-android",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "build",
+                "Platforms/Android/RectangleCollisionSample.Android.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary"
+            ],
+            "group": "build",
+            "presentation": {
+                "reveal": "silent"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "run-windows",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "run",
+                "--project",
+                "Platforms/Windows/RectangleCollisionSample.Windows.csproj"
+            ],
+            "group": "test",
+            "presentation": {
+                "reveal": "always",
+                "panel": "new"
+            },
+            "dependsOn": "build-windows"
+        },
+        {
+            "label": "run-desktopgl",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "run",
+                "--project",
+                "Platforms/Desktop/RectangleCollisionSample.DesktopGL.csproj"
+            ],
+            "group": "test",
+            "presentation": {
+                "reveal": "always",
+                "panel": "new"
+            },
+            "dependsOn": "build-desktopgl"
+        },
+        {
+            "label": "build-android",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "build",
+                "Platforms/Android/RectangleCollisionSample.Android.csproj"
+            ],
+            "group": "build",
+            "presentation": {
+                "reveal": "silent"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "run-android",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "run",
+                "--project",
+                "Platforms/Android/RectangleCollisionSample.Android.csproj"
+            ],
+            "group": "test",
+            "presentation": {
+                "reveal": "always",
+                "panel": "new"
+            },
+            "dependsOn": "build-android"
+        },
+        {
+            "label": "build-ios",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "build",
+                "Platforms/iOS/RectangleCollisionSample.iOS.csproj"
+            ],
+            "group": "build",
+            "presentation": {
+                "reveal": "silent"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "run-ios",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "run",
+                "--project",
+                "Platforms/iOS/RectangleCollisionSample.iOS.csproj"
+            ],
+            "group": "test",
+            "presentation": {
+                "reveal": "always",
+                "panel": "new"
+            },
+            "dependsOn": "build-ios"
+        },
+        {
+            "label": "clean",
+            "command": "dotnet",
+            "type": "shell",
+            "args": [
+                "clean"
+            ],
+            "group": "build",
+            "presentation": {
+                "reveal": "silent"
+            },
+            "problemMatcher": []
+        }
+    ]
+}

+ 0 - 0
RectangleCollisionSample/Content/Block.bmp → RectangleCollisionSample/Core/Content/Block.bmp


+ 0 - 0
RectangleCollisionSample/Content/Block.xnb → RectangleCollisionSample/Core/Content/Block.xnb


+ 0 - 0
RectangleCollisionSample/Game.ico → RectangleCollisionSample/Core/Content/Game.ico


+ 0 - 0
RectangleCollisionSample/Content/Person.bmp → RectangleCollisionSample/Core/Content/Person.bmp


+ 0 - 0
RectangleCollisionSample/Content/Person.xnb → RectangleCollisionSample/Core/Content/Person.xnb


+ 213 - 218
RectangleCollisionSample/Game1.cs → RectangleCollisionSample/Core/Game1.cs

@@ -1,218 +1,213 @@
-#region File Description
-//-----------------------------------------------------------------------------
-// Game.cs
-//
-// Microsoft XNA Community Game Platform
-// Copyright (C) Microsoft Corporation. All rights reserved.
-//-----------------------------------------------------------------------------
-#endregion
-
-#region Using Statements
-using System;
-using System.Collections.Generic;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Audio;
-using Microsoft.Xna.Framework.Content;
-using Microsoft.Xna.Framework.Graphics;
-using Microsoft.Xna.Framework.Input;
-using Microsoft.Xna.Framework.Storage;
-#endregion
-
-
-
-namespace RectangleCollision
-{
-    /// <summary>
-    /// This is the main type for your game
-    /// </summary>
-    public class RectangleCollisionGame : Microsoft.Xna.Framework.Game
-    {
-        GraphicsDeviceManager graphics;
-
-        // The images we will draw
-        Texture2D personTexture;
-        Texture2D blockTexture;
-
-        // The images will be drawn with this SpriteBatch
-        SpriteBatch spriteBatch;
-
-        // Person 
-        Vector2 personPosition;
-        const int PersonMoveSpeed = 5;
-
-        // Blocks
-        List<Vector2> blockPositions = new List<Vector2>();
-        float BlockSpawnProbability = 0.01f;
-        const int BlockFallSpeed = 2;
-
-        Random random = new Random();
-
-        // For when a collision is detected
-        bool personHit = false;
-
-        // The sub-rectangle of the drawable area which should be visible on all TVs
-        Rectangle safeBounds;
-        // Percentage of the screen on every side is the safe area
-        const float SafeAreaPortion = 0.05f;
-
-
-        public RectangleCollisionGame()
-        {
-            graphics = new GraphicsDeviceManager(this);
-            Content.RootDirectory = "Content";
-        }
-
-
-        /// <summary>
-        /// 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.
-        /// </summary>
-        protected override void Initialize()
-        {
-            base.Initialize();
-
-            // Calculate safe bounds based on current resolution
-            Viewport viewport = graphics.GraphicsDevice.Viewport;
-            safeBounds = new Rectangle(
-                (int)(viewport.Width * SafeAreaPortion),
-                (int)(viewport.Height * SafeAreaPortion),
-                (int)(viewport.Width * (1 - 2 * SafeAreaPortion)),
-                (int)(viewport.Height * (1 - 2 * SafeAreaPortion)));
-
-            // Start the player in the center along the bottom of the screen
-            personPosition.X = (safeBounds.Width - personTexture.Width) / 2;
-            personPosition.Y = safeBounds.Height - personTexture.Height;
-        }
-
-
-        /// <summary>
-        /// Load your graphics content.
-        /// </summary>
-        protected override void LoadContent()
-        {
-            // Load textures
-            blockTexture = Content.Load<Texture2D>("Block");
-            personTexture = Content.Load<Texture2D>("Person");
-
-            // Create a sprite batch to draw those textures
-            spriteBatch = new SpriteBatch(graphics.GraphicsDevice);
-        }
-
-
-        /// <summary>
-        /// Allows the game to run logic such as updating the world,
-        /// checking for collisions, gathering input and playing audio.
-        /// </summary>
-        /// <param name="gameTime">Provides a snapshot of timing values.</param>
-        protected override void Update(GameTime gameTime)
-        {
-            // Get input
-            KeyboardState keyboard = Keyboard.GetState();
-            GamePadState gamePad = GamePad.GetState(PlayerIndex.One);
-
-            // Allows the game to exit
-            if (gamePad.Buttons.Back == ButtonState.Pressed ||
-                keyboard.IsKeyDown(Keys.Escape))
-            {
-                this.Exit();
-            }
-
-            // Move the player left and right with arrow keys or d-pad
-            if (keyboard.IsKeyDown(Keys.Left) ||
-                gamePad.DPad.Left == ButtonState.Pressed)
-            {
-                personPosition.X -= PersonMoveSpeed;
-            }
-            if (keyboard.IsKeyDown(Keys.Right) ||
-                gamePad.DPad.Right == ButtonState.Pressed)
-            {
-                personPosition.X += PersonMoveSpeed;
-            }
-
-            // Prevent the person from moving off of the screen
-            personPosition.X = MathHelper.Clamp(personPosition.X,
-                safeBounds.Left, safeBounds.Right - personTexture.Width);
-
-            // Spawn new falling blocks
-            if (random.NextDouble() < BlockSpawnProbability)
-            {
-                float x = (float)random.NextDouble() *
-                    (Window.ClientBounds.Width - blockTexture.Width);
-                blockPositions.Add(new Vector2(x, -blockTexture.Height));
-            }
-
-            // Get the bounding rectangle of the person
-            Rectangle personRectangle =
-                new Rectangle((int)personPosition.X, (int)personPosition.Y,
-                personTexture.Width, personTexture.Height);
-
-            // Update each block
-            personHit = false;
-            for (int i = 0; i < blockPositions.Count; i++)
-            {
-                // Animate this block falling
-                blockPositions[i] =
-                    new Vector2(blockPositions[i].X,
-                                blockPositions[i].Y + BlockFallSpeed);
-
-                // Get the bounding rectangle of this block
-                Rectangle blockRectangle =
-                    new Rectangle((int)blockPositions[i].X, (int)blockPositions[i].Y,
-                    blockTexture.Width, blockTexture.Height);
-
-                // Check collision with person
-                if (personRectangle.Intersects(blockRectangle))
-                    personHit = true;
-
-                // Remove this block if it have fallen off the screen
-                if (blockPositions[i].Y > Window.ClientBounds.Height)
-                {
-                    blockPositions.RemoveAt(i);
-
-                    // When removing a block, the next block will have the same index
-                    // as the current block. Decrement i to prevent skipping a block.
-                    i--;
-                }
-            }
-
-            base.Update(gameTime);
-        }
-
-
-        /// <summary>
-        /// This is called when the game should draw itself.
-        /// </summary>
-        /// <param name="gameTime">Provides a snapshot of timing values.</param>
-        protected override void Draw(GameTime gameTime)
-        {
-            GraphicsDevice device = graphics.GraphicsDevice;
-
-            // Change the background to red when the person was hit by a block
-            if (personHit)
-            {
-                device.Clear(Color.Red);
-            }
-            else
-            {
-                device.Clear(Color.CornflowerBlue);
-            }
-
-
-            spriteBatch.Begin();
-
-            // Draw person
-            spriteBatch.Draw(personTexture, personPosition, Color.White);
-
-            // Draw blocks
-            foreach (Vector2 blockPosition in blockPositions)
-                spriteBatch.Draw(blockTexture, blockPosition, Color.White);
-
-            spriteBatch.End();
-
-
-            base.Draw(gameTime);
-        }
-    }
-}
+//-----------------------------------------------------------------------------
+// Game.cs
+//
+// Microsoft XNA Community Game Platform
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Audio;
+using Microsoft.Xna.Framework.Content;
+using Microsoft.Xna.Framework.Graphics;
+using Microsoft.Xna.Framework.Input;
+
+
+
+namespace RectangleCollision
+{
+    /// <summary>
+    /// This is the main type for your game
+    /// </summary>
+    public class RectangleCollisionGame : Microsoft.Xna.Framework.Game
+    {
+        GraphicsDeviceManager graphics;
+
+        // The images we will draw
+        Texture2D personTexture;
+        Texture2D blockTexture;
+
+        // The images will be drawn with this SpriteBatch
+        SpriteBatch spriteBatch;
+
+        // Person 
+        Vector2 personPosition;
+        const int PersonMoveSpeed = 5;
+
+        // Blocks
+        List<Vector2> blockPositions = new List<Vector2>();
+        float BlockSpawnProbability = 0.01f;
+        const int BlockFallSpeed = 2;
+
+        Random random = new Random();
+
+        // For when a collision is detected
+        bool personHit = false;
+
+        // The sub-rectangle of the drawable area which should be visible on all TVs
+        Rectangle safeBounds;
+        // Percentage of the screen on every side is the safe area
+        const float SafeAreaPortion = 0.05f;
+
+
+        public RectangleCollisionGame()
+        {
+            graphics = new GraphicsDeviceManager(this);
+            Content.RootDirectory = "Content";
+        }
+
+
+        /// <summary>
+        /// 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.
+        /// </summary>
+        protected override void Initialize()
+        {
+            base.Initialize();
+
+            // Calculate safe bounds based on current resolution
+            Viewport viewport = graphics.GraphicsDevice.Viewport;
+            safeBounds = new Rectangle(
+                (int)(viewport.Width * SafeAreaPortion),
+                (int)(viewport.Height * SafeAreaPortion),
+                (int)(viewport.Width * (1 - 2 * SafeAreaPortion)),
+                (int)(viewport.Height * (1 - 2 * SafeAreaPortion)));
+
+            // Start the player in the center along the bottom of the screen
+            personPosition.X = (safeBounds.Width - personTexture.Width) / 2;
+            personPosition.Y = safeBounds.Height - personTexture.Height;
+        }
+
+
+        /// <summary>
+        /// Load your graphics content.
+        /// </summary>
+        protected override void LoadContent()
+        {
+            // Load textures
+            blockTexture = Content.Load<Texture2D>("Block");
+            personTexture = Content.Load<Texture2D>("Person");
+
+            // Create a sprite batch to draw those textures
+            spriteBatch = new SpriteBatch(graphics.GraphicsDevice);
+        }
+
+
+        /// <summary>
+        /// Allows the game to run logic such as updating the world,
+        /// checking for collisions, gathering input and playing audio.
+        /// </summary>
+        /// <param name="gameTime">Provides a snapshot of timing values.</param>
+        protected override void Update(GameTime gameTime)
+        {
+            // Get input
+            KeyboardState keyboard = Keyboard.GetState();
+            GamePadState gamePad = GamePad.GetState(PlayerIndex.One);
+
+            // Allows the game to exit
+            if (gamePad.Buttons.Back == ButtonState.Pressed ||
+                keyboard.IsKeyDown(Keys.Escape))
+            {
+                this.Exit();
+            }
+
+            // Move the player left and right with arrow keys or d-pad
+            if (keyboard.IsKeyDown(Keys.Left) ||
+                gamePad.DPad.Left == ButtonState.Pressed)
+            {
+                personPosition.X -= PersonMoveSpeed;
+            }
+            if (keyboard.IsKeyDown(Keys.Right) ||
+                gamePad.DPad.Right == ButtonState.Pressed)
+            {
+                personPosition.X += PersonMoveSpeed;
+            }
+
+            // Prevent the person from moving off of the screen
+            personPosition.X = MathHelper.Clamp(personPosition.X,
+                safeBounds.Left, safeBounds.Right - personTexture.Width);
+
+            // Spawn new falling blocks
+            if (random.NextDouble() < BlockSpawnProbability)
+            {
+                float x = (float)random.NextDouble() *
+                    (Window.ClientBounds.Width - blockTexture.Width);
+                blockPositions.Add(new Vector2(x, -blockTexture.Height));
+            }
+
+            // Get the bounding rectangle of the person
+            Rectangle personRectangle =
+                new Rectangle((int)personPosition.X, (int)personPosition.Y,
+                personTexture.Width, personTexture.Height);
+
+            // Update each block
+            personHit = false;
+            for (int i = 0; i < blockPositions.Count; i++)
+            {
+                // Animate this block falling
+                blockPositions[i] =
+                    new Vector2(blockPositions[i].X,
+                                blockPositions[i].Y + BlockFallSpeed);
+
+                // Get the bounding rectangle of this block
+                Rectangle blockRectangle =
+                    new Rectangle((int)blockPositions[i].X, (int)blockPositions[i].Y,
+                    blockTexture.Width, blockTexture.Height);
+
+                // Check collision with person
+                if (personRectangle.Intersects(blockRectangle))
+                    personHit = true;
+
+                // Remove this block if it have fallen off the screen
+                if (blockPositions[i].Y > Window.ClientBounds.Height)
+                {
+                    blockPositions.RemoveAt(i);
+
+                    // When removing a block, the next block will have the same index
+                    // as the current block. Decrement i to prevent skipping a block.
+                    i--;
+                }
+            }
+
+            base.Update(gameTime);
+        }
+
+
+        /// <summary>
+        /// This is called when the game should draw itself.
+        /// </summary>
+        /// <param name="gameTime">Provides a snapshot of timing values.</param>
+        protected override void Draw(GameTime gameTime)
+        {
+            GraphicsDevice device = graphics.GraphicsDevice;
+
+            // Change the background to red when the person was hit by a block
+            if (personHit)
+            {
+                device.Clear(Color.Red);
+            }
+            else
+            {
+                device.Clear(Color.CornflowerBlue);
+            }
+
+
+            spriteBatch.Begin();
+
+            // Draw person
+            spriteBatch.Draw(personTexture, personPosition, Color.White);
+
+            // Draw blocks
+            foreach (Vector2 blockPosition in blockPositions)
+                spriteBatch.Draw(blockTexture, blockPosition, Color.White);
+
+            spriteBatch.End();
+
+
+            base.Draw(gameTime);
+        }
+    }
+}

+ 0 - 0
RectangleCollisionSample/GameThumbnail.png → RectangleCollisionSample/Core/GameThumbnail.png


+ 11 - 0
RectangleCollisionSample/Core/RectangleCollisionSample.Core.csproj

@@ -0,0 +1,11 @@
+<Project Sdk="Microsoft.NET.Sdk">
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <AssemblyName>RectangleCollisionSample.Core</AssemblyName>
+    <RootNamespace>RectangleCollision</RootNamespace>
+  </PropertyGroup>
+  
+  <ItemGroup>
+    <PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.*" />
+  </ItemGroup>
+</Project>

+ 0 - 16
RectangleCollisionSample/Info.plist

@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleIdentifier</key>
-	<string>com.yourcompany.RectangleCollisionSample</string>
-	<key>CFBundleName</key>
-	<string>RectangleCollisionSample</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>LSMinimumSystemVersion</key>
-	<string>10.6</string>
-	<key>NSPrincipalClass</key>
-	<string>NSApplication</string>
-</dict>
-</plist>

+ 14 - 0
RectangleCollisionSample/Platforms/Android/AndroidManifest.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
+          android:versionCode="1" 
+          android:versionName="1.0" 
+          package="com.monogame.rectanglecollisionsample">
+  
+  <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="34" />
+  
+  <application android:label="Rectangle Collision Sample">
+  </application>
+  
+  <uses-permission android:name="android.permission.WAKE_LOCK" />
+  
+</manifest>

+ 27 - 0
RectangleCollisionSample/Platforms/Android/MainActivity.cs

@@ -0,0 +1,27 @@
+using Android.App;
+using Android.Content.PM;
+using Android.OS;
+using Android.Views;
+using Microsoft.Xna.Framework;
+
+namespace RectangleCollision.Android
+{
+    [Activity(
+        Label = "RectangleCollisionSample",
+        MainLauncher = true,
+        Icon = "@mipmap/icon",
+        Theme = "@android:style/Theme.NoTitleBar",
+        ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.Navigation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize,
+        ScreenOrientation = ScreenOrientation.SensorLandscape
+    )]
+    public class MainActivity : AndroidGameActivity
+    {
+        protected override void OnCreate(Bundle savedInstanceState)
+        {
+            base.OnCreate(savedInstanceState);
+            var game = new RectangleCollisionGame();
+            SetContentView((game.Services.GetService(typeof(View)) as View));
+            game.Run();
+        }
+    }
+}

+ 26 - 0
RectangleCollisionSample/Platforms/Android/RectangleCollisionSample.Android.csproj

@@ -0,0 +1,26 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net8.0-android</TargetFramework>
+    <Nullable>enable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
+    <AndroidUseAapt2>True</AndroidUseAapt2>
+    <AssemblyName>RectangleCollisionSample</AssemblyName>
+    <RootNamespace>RectangleCollision</RootNamespace>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Core\RectangleCollisionSample.Core.csproj" />
+    <PackageReference Include="MonoGame.Framework.Android" Version="3.8.*" />
+    <PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.*" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Content Include="..\..\Core\Content\**\*.xnb" Link="Content\%(RecursiveDir)%(Filename)%(Extension)">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+
+</Project>

+ 14 - 0
RectangleCollisionSample/Platforms/Desktop/Program.cs

@@ -0,0 +1,14 @@
+using System;
+
+namespace RectangleCollision.Desktop
+{
+    internal static class Program
+    {
+        [STAThread]
+        static void Main(string[] args)
+        {
+            var game = new RectangleCollisionGame();
+            game.Run();
+        }
+    }
+}

+ 26 - 0
RectangleCollisionSample/Platforms/Desktop/RectangleCollisionSample.DesktopGL.csproj

@@ -0,0 +1,26 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net8.0</TargetFramework>
+    <RollForward>Major</RollForward>
+    <PublishReadyToRun>false</PublishReadyToRun>
+    <TieredCompilation>false</TieredCompilation>
+    <AssemblyName>RectangleCollisionSample</AssemblyName>
+    <RootNamespace>RectangleCollision</RootNamespace>
+    <ApplicationIcon>..\..\Core\Content\Game.ico</ApplicationIcon>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Core\RectangleCollisionSample.Core.csproj" />
+    <PackageReference Include="MonoGame.Framework.DesktopGL" Version="3.8.*" />
+    <PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.*" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Content Include="..\..\Core\Content\**\*.xnb" Link="Content\%(RecursiveDir)%(Filename)%(Extension)">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+
+</Project>

+ 14 - 0
RectangleCollisionSample/Platforms/Windows/Program.cs

@@ -0,0 +1,14 @@
+using System;
+
+namespace RectangleCollision.Windows
+{
+    internal static class Program
+    {
+        [STAThread]
+        static void Main(string[] args)
+        {
+            var game = new RectangleCollisionGame();
+            game.Run();
+        }
+    }
+}

+ 28 - 0
RectangleCollisionSample/Platforms/Windows/RectangleCollisionSample.Windows.csproj

@@ -0,0 +1,28 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>WinExe</OutputType>
+    <TargetFramework>net8.0-windows</TargetFramework>
+    <RollForward>Major</RollForward>
+    <PublishReadyToRun>false</PublishReadyToRun>
+    <TieredCompilation>false</TieredCompilation>
+    <UseWindowsForms>true</UseWindowsForms>
+    <AssemblyName>RectangleCollisionSample</AssemblyName>
+    <RootNamespace>RectangleCollision</RootNamespace>
+    <ApplicationManifest>app.manifest</ApplicationManifest>
+    <ApplicationIcon>..\..\Core\Content\Game.ico</ApplicationIcon>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Core\RectangleCollisionSample.Core.csproj" />
+    <PackageReference Include="MonoGame.Framework.WindowsDX" Version="3.8.*" />
+    <PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.*" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Content Include="..\..\Core\Content\**\*.xnb" Link="Content\%(RecursiveDir)%(Filename)%(Extension)">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+
+</Project>

+ 43 - 0
RectangleCollisionSample/Platforms/Windows/app.manifest

@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
+  <assemblyIdentity version="1.0.0.0" name="RectangleCollisionSample"/>
+  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
+    <security>
+      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
+        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
+      </requestedPrivileges>
+    </security>
+  </trustInfo>
+
+  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
+    <application>
+      <!-- A list of the Windows versions that this application has been tested on and is
+           is designed to work with. Uncomment the appropriate elements and Windows will 
+           automatically selected the most compatible environment. -->
+
+      <!-- Windows Vista -->
+      <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->
+
+      <!-- Windows 7 -->
+      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
+
+      <!-- Windows 8 -->
+      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
+
+      <!-- Windows 8.1 -->
+      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
+
+      <!-- Windows 10 -->
+      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
+
+    </application>
+  </compatibility>
+
+  <application xmlns="urn:schemas-microsoft-com:asm.v3">
+    <windowsSettings>
+      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/PM</dpiAware>
+      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
+    </windowsSettings>
+  </application>
+
+</assembly>

+ 30 - 0
RectangleCollisionSample/Platforms/iOS/Info.plist

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDisplayName</key>
+	<string>Rectangle Collision Sample</string>
+	<key>CFBundleIdentifier</key>
+	<string>com.monogame.rectanglecollisionsample</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>MinimumOSVersion</key>
+	<string>11.0</string>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+	<key>UIStatusBarHidden</key>
+	<true/>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>opengles-2</string>
+	</array>
+</dict>
+</plist>

+ 13 - 0
RectangleCollisionSample/Platforms/iOS/Program.cs

@@ -0,0 +1,13 @@
+using System;
+
+namespace RectangleCollision.iOS
+{
+    internal static class Program
+    {
+        static void Main(string[] args)
+        {
+            var game = new RectangleCollisionGame();
+            game.Run();
+        }
+    }
+}

+ 25 - 0
RectangleCollisionSample/Platforms/iOS/RectangleCollisionSample.iOS.csproj

@@ -0,0 +1,25 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net8.0-ios</TargetFramework>
+    <Nullable>enable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <SupportedOSPlatformVersion>11.0</SupportedOSPlatformVersion>
+    <AssemblyName>RectangleCollisionSample</AssemblyName>
+    <RootNamespace>RectangleCollision</RootNamespace>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Core\RectangleCollisionSample.Core.csproj" />
+    <PackageReference Include="MonoGame.Framework.iOS" Version="3.8.*" />
+    <PackageReference Include="MonoGame.Content.Builder.Task" Version="3.8.*" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Content Include="..\..\Core\Content\**\*.xnb" Link="Content\%(RecursiveDir)%(Filename)%(Extension)">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+
+</Project>

+ 0 - 75
RectangleCollisionSample/Program.cs

@@ -1,75 +0,0 @@
-#region File Description
-//-----------------------------------------------------------------------------
-// Program.cs
-//
-// Microsoft XNA Community Game Platform
-// Copyright (C) Microsoft Corporation. All rights reserved.
-//-----------------------------------------------------------------------------
-#endregion
-
-#region Using Statements
-using System;
-
-#if MONOMAC
-using MonoMac.Foundation;
-using MonoMac.AppKit;
-using MonoMac.ObjCRuntime;
-#elif IPHONE
-using MonoTouch.Foundation;
-using MonoTouch.UIKit;
-#endif
-
-#endregion
-
-namespace RectangleCollision
-{
-#if MONOMAC
-	static class Program
-	{
-		/// <summary>
-		/// The main entry point for the application.
-		/// </summary>
-		static void Main (string[] args)
-		{
-			NSApplication.Init ();
-			
-			using (var p = new NSAutoreleasePool ()) {
-				NSApplication.SharedApplication.Delegate = new AppDelegate();
-				NSApplication.Main(args);
-			}
-		}
-	}
-	
-	class AppDelegate : NSApplicationDelegate
-	{
-		
-		public override void FinishedLaunching (MonoMac.Foundation.NSObject notification)
-		{
-			RectangleCollisionGame game = new RectangleCollisionGame ();
-			game.Run ();
-		}
-		
-		public override bool ApplicationShouldTerminateAfterLastWindowClosed (NSApplication sender)
-		{
-			return true;
-		}
-	}	
-#elif IPHONE
-	[Register ("AppDelegate")]
-	class Program : UIApplicationDelegate 
-	{
-        RectangleCollisionGame game;
-		public override void FinishedLaunching (UIApplication app)
-		{
-			// Fun begins..
-			game = new RectangleCollisionGame();
-			game.Run();
-		}
-
-		static void Main (string [] args)
-		{
-			UIApplication.Main (args,null,"AppDelegate");
-		}
-	}
-#endif
-}

+ 134 - 0
RectangleCollisionSample/README.md

@@ -0,0 +1,134 @@
+# Rectangle Collision Sample
+
+This is a MonoGame 3.8.* sample project that demonstrates rectangle collision detection. The game features a player character that must avoid falling blocks in a simple 2D environment.
+
+## Project Description
+
+The Rectangle Collision Sample showcases:
+- Basic 2D sprite rendering
+- Rectangle collision detection
+- Player input handling (keyboard)
+- Random block spawning
+- Game state management (collision detection triggers)
+
+The player controls a character that can move left and right using the keyboard. Blocks fall from the top of the screen, and the game detects when the player collides with any block.
+
+## Project Status
+
+✅ **Windows** - Building and running successfully  
+✅ **DesktopGL** - Building and running successfully  
+✅ **Android** - Building successfully (requires Android SDK to deploy)  
+⚠️ **iOS** - Project created (requires Mac + Xcode to build and test)
+
+## Building and Running
+
+### Prerequisites
+
+- .NET 8.0 SDK or later
+- For iOS: Xcode and Mac development environment
+- For Android: Android SDK
+
+
+### Directory Structure
+
+```
+RectangleCollisionSample/
+│
+├── Core/
+│   ├── Game1.cs
+│   ├── Program.Core.cs
+│   ├── RectangleCollisionSample.Core.csproj
+│   └── Content/
+│       ├── Block.xnb
+│       └── Person.xnb
+│
+├── Platforms/
+│   ├── Windows/
+│   │   ├── Program.cs
+│   │   ├── RectangleCollisionSample.Windows.csproj
+│   │   └── app.manifest
+│   ├── Desktop/
+│   │   ├── Program.cs
+│   │   └── RectangleCollisionSample.DesktopGL.csproj
+│   ├── Android/
+│   │   ├── MainActivity.cs
+│   │   ├── RectangleCollisionSample.Android.csproj
+│   │   └── AndroidManifest.xml
+│   └── iOS/
+│       ├── Program.cs
+│       ├── RectangleCollisionSample.iOS.csproj
+│       └── Info.plist
+│
+├── .vscode/
+│   ├── launch.json
+│   └── tasks.json
+│
+├── RectangleCollisionSample.sln
+└── README.md
+```
+
+### Building and Running
+
+#### Using Visual Studio
+1. Open `RectangleCollisionSample.sln` in Visual Studio
+2. Select the desired project under `Platforms/` (Windows, Desktop, Android, iOS) as startup project
+3. Build and run (F5)
+
+#### Using VS Code
+1. Open the project folder in VS Code
+2. Use Ctrl+Shift+P to open command palette
+3. Run "Tasks: Run Task" and select:
+   - `build-windows`, `build-desktopgl`, or `build-android` to build
+   - `run-windows` or `run-desktopgl` to run
+4. Or use F5 to debug with the configured launch profiles
+
+#### Using Command Line
+```bash
+# Build Windows version
+dotnet build Platforms/Windows/RectangleCollisionSample.Windows.csproj
+
+# Run Windows version
+dotnet run --project Platforms/Windows/RectangleCollisionSample.Windows.csproj
+
+# Build DesktopGL version
+dotnet build Platforms/Desktop/RectangleCollisionSample.DesktopGL.csproj
+
+# Run DesktopGL version
+dotnet run --project Platforms/Desktop/RectangleCollisionSample.DesktopGL.csproj
+
+# Build Android version
+dotnet build Platforms/Android/RectangleCollisionSample.Android.csproj
+
+# Build iOS version (on Mac)
+dotnet build Platforms/iOS/RectangleCollisionSample.iOS.csproj
+```
+
+## Game Controls
+
+- **Left Arrow / A**: Move player left
+- **Right Arrow / D**: Move player right
+- **Escape**: Exit game
+
+## Content Files
+
+The project uses pre-built XNB content files located in the `Content/` folder:
+- `Person.xnb` - Player character sprite
+- `Block.xnb` - Falling block sprite
+
+These files are automatically copied to the output directory during build.
+
+## Architecture Notes
+
+- Uses MonoGame 3.8.* NuGet packages instead of source references
+- Modern SDK-style project files for all platforms
+- Shared source code across all platforms
+- Platform-specific configurations and manifests where needed
+- No Content Pipeline (.mgcb) file - uses pre-built XNB files directly
+
+## Dependencies
+
+- MonoGame.Framework.Windows 3.8.*
+- MonoGame.Framework.DesktopGL 3.8.*
+- MonoGame.Framework.iOS 3.8.*
+- MonoGame.Framework.Android 3.8.*
+- MonoGame.Content.Builder.Task 3.8.*

+ 0 - 94
RectangleCollisionSample/RectangleCollision.iOS.csproj

@@ -1,94 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">iPhoneSimulator</Platform>
-    <ProductVersion>10.0.0</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{BF785698-D6BF-465C-9089-B48B49D0377A}</ProjectGuid>
-    <ProjectTypeGuids>{6BC8ED88-2882-458C-8E55-DFD12B67127B};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <OutputType>Exe</OutputType>
-    <RootNamespace>MonoGame.Samples.RectangleCollision</RootNamespace>
-    <AssemblyName>MonoGameSamplesRectangleCollision</AssemblyName>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
-    <DebugSymbols>True</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>False</Optimize>
-    <OutputPath>bin\iPhoneSimulator\Debug</OutputPath>
-    <DefineConstants>DEBUG;IPHONE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <MtouchLink>None</MtouchLink>
-    <MtouchDebug>True</MtouchDebug>
-    <ConsolePause>False</ConsolePause>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhoneSimulator' ">
-    <DebugType>none</DebugType>
-    <Optimize>False</Optimize>
-    <OutputPath>bin\iPhoneSimulator\Release</OutputPath>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <MtouchLink>None</MtouchLink>
-    <ConsolePause>False</ConsolePause>
-    <DefineConstants>IPHONE</DefineConstants>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
-    <DebugSymbols>True</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>False</Optimize>
-    <OutputPath>bin\iPhone\Debug</OutputPath>
-    <DefineConstants>DEBUG;IPHONE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <MtouchDebug>True</MtouchDebug>
-    <CodesignKey>iPhone Developer</CodesignKey>
-    <ConsolePause>False</ConsolePause>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
-    <DebugType>none</DebugType>
-    <Optimize>False</Optimize>
-    <OutputPath>bin\iPhone\Release</OutputPath>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>False</ConsolePause>
-    <CodesignKey>iPhone Developer</CodesignKey>
-    <DefineConstants>IPHONE</DefineConstants>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Xml" />
-    <Reference Include="System.Core" />
-    <Reference Include="monotouch" />
-    <Reference Include="OpenTK" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Info.iOS.plist">
-      <Link>Info.plist</Link>
-    </None>
-    <None Include="Content\Block.bmp">
-      <Link>Content\Block.bmp</Link>
-    </None>
-    <None Include="Content\Person.bmp">
-      <Link>Content\Person.bmp</Link>
-    </None>
-    <None Include="GameThumbnail.png">
-      <Link>GameThumbnail.png</Link>
-    </None>
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <ItemGroup>
-    <Content Include="Content\Block.xnb">
-      <Link>Content\Block.xnb</Link>
-    </Content>
-    <Content Include="Content\Person.xnb">
-      <Link>Content\Person.xnb</Link>
-    </Content>
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Program.cs" />
-    <Compile Include="Game1.cs">
-      <Link>Game1.cs</Link>
-    </Compile>
-  </ItemGroup>
-</Project>

+ 0 - 82
RectangleCollisionSample/RectangleCollisionSample.MacOS.csproj

@@ -1,82 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>10.0.0</ProductVersion>
-    <SchemaVersion>2.0</SchemaVersion>
-    <ProjectGuid>{466FBEF8-3AB2-4CED-92B6-6250CFD310DB}</ProjectGuid>
-    <ProjectTypeGuids>{948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
-    <OutputType>Exe</OutputType>
-    <RootNamespace>RectangleCollisionSample</RootNamespace>
-    <AssemblyName>RectangleCollisionSample</AssemblyName>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <DebugSymbols>True</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>False</Optimize>
-    <OutputPath>bin\Debug</OutputPath>
-    <DefineConstants>DEBUG;MONOMAC</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>False</ConsolePause>
-    <EnableCodeSigning>False</EnableCodeSigning>
-    <CreatePackage>False</CreatePackage>
-    <EnablePackageSigning>False</EnablePackageSigning>
-    <IncludeMonoRuntime>False</IncludeMonoRuntime>
-    <UseSGen>False</UseSGen>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <DebugType>none</DebugType>
-    <Optimize>False</Optimize>
-    <OutputPath>bin\Release</OutputPath>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <ConsolePause>False</ConsolePause>
-    <DefineConstants>MONOMAC</DefineConstants>
-    <EnableCodeSigning>False</EnableCodeSigning>
-    <CreatePackage>False</CreatePackage>
-    <EnablePackageSigning>False</EnablePackageSigning>
-    <IncludeMonoRuntime>False</IncludeMonoRuntime>
-    <UseSGen>False</UseSGen>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Xml" />
-    <Reference Include="System.Core" />
-    <Reference Include="System.Xml.Linq" />
-    <Reference Include="System.Drawing" />
-    <Reference Include="MonoMac" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="Info.plist">
-    </None>
-    <None Include="Game.ico" />
-    <None Include="GameThumbnail.png" />
-    <None Include="Content\Block.bmp" />
-    <None Include="Content\Person.bmp" />
-  </ItemGroup>
-  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
-  <Import Project="$(MSBuildExtensionsPath)\Mono\MonoMac\v0.0\Mono.MonoMac.targets" />
-  <ItemGroup>
-    <Folder Include="Content\" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Game1.cs" />
-    <Compile Include="Program.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <Content Include="Content\Person.xnb" />
-    <Content Include="Content\Block.xnb" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\..\ThirdParty\Lidgren.Network\Lidgren.Network.MacOS.csproj">
-      <Project>{AE483C29-042E-4226-BA52-D247CE7676DA}</Project>
-      <Name>Lidgren.Network.MacOS</Name>
-    </ProjectReference>
-    <ProjectReference Include="..\..\MonoGame.Framework\MonoGame.Framework.MacOS.csproj">
-      <Project>{36C538E6-C32A-4A8D-A39C-566173D7118E}</Project>
-      <Name>MonoGame.Framework.MacOS</Name>
-    </ProjectReference>
-  </ItemGroup>
-</Project>

+ 33 - 23
RectangleCollisionSample/RectangleCollisionSample.sln

@@ -1,35 +1,45 @@
 
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RectangleCollisionSample", "RectangleCollisionSample.csproj", "{466FBEF8-3AB2-4CED-92B6-6250CFD310DB}"
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RectangleCollisionSample.Core", "Core\RectangleCollisionSample.Core.csproj", "{55555555-5555-5555-5555-555555555555}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.Network.MacOS", "..\..\..\..\..\..\..\Users\Jimmy\Public\Share\MonoMacSource\kjpgit\MonoGame\ThirdParty\Lidgren.Network\Lidgren.Network.MacOS.csproj", "{AE483C29-042E-4226-BA52-D247CE7676DA}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RectangleCollisionSample.Windows", "Platforms\Windows\RectangleCollisionSample.Windows.csproj", "{11111111-1111-1111-1111-111111111111}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonoGame.Framework.MacOS", "..\..\..\..\..\..\..\Users\Jimmy\Public\Share\MonoMacSource\kjpgit\MonoGame\MonoGame.Framework\MonoGame.Framework.MacOS.csproj", "{36C538E6-C32A-4A8D-A39C-566173D7118E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RectangleCollisionSample.DesktopGL", "Platforms\Desktop\RectangleCollisionSample.DesktopGL.csproj", "{22222222-2222-2222-2222-222222222222}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RectangleCollisionSample.iOS", "Platforms\iOS\RectangleCollisionSample.iOS.csproj", "{33333333-3333-3333-3333-333333333333}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RectangleCollisionSample.Android", "Platforms\Android\RectangleCollisionSample.Android.csproj", "{44444444-4444-4444-4444-444444444444}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
 		Release|Any CPU = Release|Any CPU
-		Distribution|Any CPU = Distribution|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{36C538E6-C32A-4A8D-A39C-566173D7118E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.ActiveCfg = Distribution|Any CPU
-		{36C538E6-C32A-4A8D-A39C-566173D7118E}.Distribution|Any CPU.Build.0 = Distribution|Any CPU
-		{36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{36C538E6-C32A-4A8D-A39C-566173D7118E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{466FBEF8-3AB2-4CED-92B6-6250CFD310DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{466FBEF8-3AB2-4CED-92B6-6250CFD310DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{466FBEF8-3AB2-4CED-92B6-6250CFD310DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{466FBEF8-3AB2-4CED-92B6-6250CFD310DB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{AE483C29-042E-4226-BA52-D247CE7676DA}.Release|Any CPU.Build.0 = Release|Any CPU
+		{11111111-1111-1111-1111-111111111111}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{11111111-1111-1111-1111-111111111111}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{11111111-1111-1111-1111-111111111111}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{11111111-1111-1111-1111-111111111111}.Release|Any CPU.Build.0 = Release|Any CPU
+		{22222222-2222-2222-2222-222222222222}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{22222222-2222-2222-2222-222222222222}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{22222222-2222-2222-2222-222222222222}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{22222222-2222-2222-2222-222222222222}.Release|Any CPU.Build.0 = Release|Any CPU
+		{33333333-3333-3333-3333-333333333333}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{33333333-3333-3333-3333-333333333333}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{33333333-3333-3333-3333-333333333333}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{33333333-3333-3333-3333-333333333333}.Release|Any CPU.Build.0 = Release|Any CPU
+		{44444444-4444-4444-4444-444444444444}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{44444444-4444-4444-4444-444444444444}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{44444444-4444-4444-4444-444444444444}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{44444444-4444-4444-4444-444444444444}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
 	EndGlobalSection
-	GlobalSection(MonoDevelopProperties) = preSolution
-		StartupItem = RectangleCollisionSample.csproj
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {12345678-1234-5678-9012-123456789012}
 	EndGlobalSection
-EndGlobal
+EndGlobal