diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 42010ab..993021b 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -19,10 +19,63 @@ jobs:
dotnet-version: 8.0.x
- name: Restore dependencies
- run: dotnet restore
+ run: dotnet restore ThirdRun.csproj && dotnet restore ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj && dotnet restore ThirdRun.Tests/ThirdRun.Tests.csproj
- - name: Build
- run: dotnet build --no-restore
+ - name: Build Desktop
+ run: dotnet build ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj --no-restore --configuration Release
+
+ - name: Build Tests
+ run: dotnet build ThirdRun.Tests/ThirdRun.Tests.csproj --no-restore --configuration Debug
- name: Test
- run: dotnet test --no-build --verbosity normal
\ No newline at end of file
+ run: dotnet test ThirdRun.Tests/ThirdRun.Tests.csproj --no-build --verbosity normal
+
+ build-android:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+
+ - name: Setup Java JDK
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'microsoft'
+ java-version: 17
+
+ - name: Setup Android SDK
+ uses: android-actions/setup-android@v3
+
+ - name: Install Android workload
+ run: dotnet workload install android || echo "Android workload not available, skipping..."
+ continue-on-error: true
+
+ - name: Restore workloads
+ run: dotnet workload restore ThirdRun.Android/ThirdRun.Android.csproj || echo "Workload restore failed, continuing..."
+ continue-on-error: true
+
+ - name: Restore dependencies
+ run: dotnet restore ThirdRun.Android/ThirdRun.Android.csproj || echo "Android dependency restore failed"
+ continue-on-error: true
+
+ - name: Build Android
+ run: dotnet build ThirdRun.Android/ThirdRun.Android.csproj --no-restore --configuration Release || echo "Android build failed"
+ continue-on-error: true
+
+ - name: Publish Android APK
+ run: dotnet publish ThirdRun.Android/ThirdRun.Android.csproj -c Release -f net8.0-android || echo "Android publish failed"
+ continue-on-error: true
+
+ - name: Upload APK artifact
+ uses: actions/upload-artifact@v4
+ if: success()
+ with:
+ name: ThirdRun-Android-APK
+ path: |
+ ThirdRun.Android/bin/Release/net8.0-android/publish/*.apk
+ ThirdRun.Android/bin/Release/net8.0-android/*.apk
+ retention-days: 30
\ No newline at end of file
diff --git a/.github/workflows/copilot-setup-steps.yml b/.github/workflows/copilot-setup-steps.yml
new file mode 100644
index 0000000..e9714b1
--- /dev/null
+++ b/.github/workflows/copilot-setup-steps.yml
@@ -0,0 +1,47 @@
+name: "Copilot Setup Steps"
+
+# Automatically run the setup steps when they are changed to allow for easy validation, and
+# allow manual testing through the repository's "Actions" tab
+on:
+ workflow_dispatch:
+ push:
+ paths:
+ - .github/workflows/copilot-setup-steps.yml
+ pull_request:
+ paths:
+ - .github/workflows/copilot-setup-steps.yml
+
+jobs:
+ # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
+ copilot-setup-steps:
+ runs-on: ubuntu-latest
+
+ # Set the permissions to the lowest permissions possible needed for your steps.
+ # Copilot will be given its own token for its operations.
+ permissions:
+ # If you want to clone the repository as part of your setup steps, for example to install dependencies, you'll need the `contents: read` permission. If you don't clone the repository in your setup steps, Copilot will do this for you automatically after the steps complete.
+ contents: read
+
+ # You can define any steps you want, and they will run before the agent starts.
+ # If you do not check out your code, Copilot will do this for you.
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup .NET
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: 8.0.x
+
+ - name: Setup Java JDK
+ uses: actions/setup-java@v4
+ with:
+ distribution: 'microsoft'
+ java-version: 17
+
+ - name: Setup Android SDK
+ uses: android-actions/setup-android@v3
+
+ - name: Install Android workload
+ run: dotnet workload install android || echo "Android workload not available, skipping..."
+
diff --git a/Content/Content.mgcb b/Content/Content.mgcb
index 85baad8..4282d02 100644
--- a/Content/Content.mgcb
+++ b/Content/Content.mgcb
@@ -3,7 +3,7 @@
/outputDir:bin/$(Platform)
/intermediateDir:obj/$(Platform)
-/platform:Windows
+/platform:DesktopGL
/config:
/profile:Reach
/compress:False
diff --git a/ThirdRun.Android/Activity1.cs b/ThirdRun.Android/Activity1.cs
new file mode 100644
index 0000000..5a51cad
--- /dev/null
+++ b/ThirdRun.Android/Activity1.cs
@@ -0,0 +1,47 @@
+using Android.App;
+using Android.Content.PM;
+using Android.OS;
+
+namespace ThirdRun.Android
+{
+ [Activity(
+ Label = "@string/app_name",
+ MainLauncher = true,
+ Icon = "@drawable/icon",
+ AlwaysRetainTaskState = true,
+ LaunchMode = LaunchMode.SingleInstance,
+ ScreenOrientation = ScreenOrientation.FullUser,
+ ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Keyboard | ConfigChanges.KeyboardHidden | ConfigChanges.ScreenSize
+ )]
+ public class Activity1 : Activity
+ {
+ private MonogameRPG.Game1? _game;
+
+ protected override void OnCreate(Bundle? bundle)
+ {
+ base.OnCreate(bundle);
+
+ // Create and run the game
+ _game = new MonogameRPG.Game1();
+ _game.Run();
+ }
+
+ protected override void OnResume()
+ {
+ base.OnResume();
+ // Game lifecycle handled by MonoGame
+ }
+
+ protected override void OnPause()
+ {
+ base.OnPause();
+ // Game lifecycle handled by MonoGame
+ }
+
+ protected override void OnDestroy()
+ {
+ _game?.Exit();
+ base.OnDestroy();
+ }
+ }
+}
\ No newline at end of file
diff --git a/ThirdRun.Android/AndroidManifest.xml b/ThirdRun.Android/AndroidManifest.xml
new file mode 100644
index 0000000..f4125bd
--- /dev/null
+++ b/ThirdRun.Android/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ThirdRun.Android/Content/Arial.ttf b/ThirdRun.Android/Content/Arial.ttf
new file mode 120000
index 0000000..dbef2a3
--- /dev/null
+++ b/ThirdRun.Android/Content/Arial.ttf
@@ -0,0 +1 @@
+../../Content/Arial.ttf
\ No newline at end of file
diff --git a/ThirdRun.Android/Content/Characters b/ThirdRun.Android/Content/Characters
new file mode 120000
index 0000000..c4a293c
--- /dev/null
+++ b/ThirdRun.Android/Content/Characters
@@ -0,0 +1 @@
+../../Content/Characters
\ No newline at end of file
diff --git a/ThirdRun.Android/Content/Content.mgcb b/ThirdRun.Android/Content/Content.mgcb
new file mode 100644
index 0000000..cc108b5
--- /dev/null
+++ b/ThirdRun.Android/Content/Content.mgcb
@@ -0,0 +1,265 @@
+#----------------------------- Global Properties ----------------------------#
+
+/outputDir:bin/$(Platform)
+/intermediateDir:obj/$(Platform)
+/platform:Android
+/config:
+/profile:Reach
+/compress:False
+
+#-------------------------------- References --------------------------------#
+
+
+#---------------------------------- Content ---------------------------------#
+
+#begin Characters/hunter.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:Characters/hunter.png
+
+#begin Characters/mage.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:Characters/mage.png
+
+#begin Characters/priest.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:Characters/priest.png
+
+#begin Characters/warrior.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:Characters/warrior.png
+
+#begin Monsters/orc.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:Monsters/orc.png
+
+#begin UI/Button/bottom-left-on.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/Button/bottom-left-on.png
+
+#begin UI/Button/bottom-left.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/Button/bottom-left.png
+
+#begin UI/Button/bottom-on.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/Button/bottom-on.png
+
+#begin UI/Button/bottom-right-on.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/Button/bottom-right-on.png
+
+#begin UI/Button/bottom-right.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/Button/bottom-right.png
+
+#begin UI/Button/bottom.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/Button/bottom.png
+
+#begin UI/Button/left-on.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/Button/left-on.png
+
+#begin UI/Button/left.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/Button/left.png
+
+#begin UI/Button/right-on.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/Button/right-on.png
+
+#begin UI/Button/right.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/Button/right.png
+
+#begin UI/Button/top-left-on.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/Button/top-left-on.png
+
+#begin UI/Button/top-left.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/Button/top-left.png
+
+#begin UI/Button/top-on.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/Button/top-on.png
+
+#begin UI/Button/top-right-on.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/Button/top-right-on.png
+
+#begin UI/Button/top-right.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/Button/top-right.png
+
+#begin UI/Button/top.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/Button/top.png
diff --git a/ThirdRun.Android/Content/Monsters b/ThirdRun.Android/Content/Monsters
new file mode 120000
index 0000000..ca6abc0
--- /dev/null
+++ b/ThirdRun.Android/Content/Monsters
@@ -0,0 +1 @@
+../../Content/Monsters
\ No newline at end of file
diff --git a/ThirdRun.Android/Content/UI b/ThirdRun.Android/Content/UI
new file mode 120000
index 0000000..2d973a3
--- /dev/null
+++ b/ThirdRun.Android/Content/UI
@@ -0,0 +1 @@
+../../Content/UI
\ No newline at end of file
diff --git a/ThirdRun.Android/Resources/Drawable/icon.png b/ThirdRun.Android/Resources/Drawable/icon.png
new file mode 100644
index 0000000..25fe044
Binary files /dev/null and b/ThirdRun.Android/Resources/Drawable/icon.png differ
diff --git a/ThirdRun.Android/Resources/Values/Strings.xml b/ThirdRun.Android/Resources/Values/Strings.xml
new file mode 100644
index 0000000..6ab3f15
--- /dev/null
+++ b/ThirdRun.Android/Resources/Values/Strings.xml
@@ -0,0 +1,4 @@
+
+
+ ThirdRun
+
\ No newline at end of file
diff --git a/ThirdRun.Android/ThirdRun.Android.csproj b/ThirdRun.Android/ThirdRun.Android.csproj
new file mode 100644
index 0000000..3c6f31b
--- /dev/null
+++ b/ThirdRun.Android/ThirdRun.Android.csproj
@@ -0,0 +1,31 @@
+
+
+ net8.0-android
+ 23
+ Exe
+ com.sidoine.thirdrun
+ 1
+ 1.0
+ ThirdRun.Android
+ ThirdRun.Android
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ThirdRun.DesktopGL/Content/Arial.ttf b/ThirdRun.DesktopGL/Content/Arial.ttf
new file mode 120000
index 0000000..dbef2a3
--- /dev/null
+++ b/ThirdRun.DesktopGL/Content/Arial.ttf
@@ -0,0 +1 @@
+../../Content/Arial.ttf
\ No newline at end of file
diff --git a/ThirdRun.DesktopGL/Content/Characters b/ThirdRun.DesktopGL/Content/Characters
new file mode 120000
index 0000000..c4a293c
--- /dev/null
+++ b/ThirdRun.DesktopGL/Content/Characters
@@ -0,0 +1 @@
+../../Content/Characters
\ No newline at end of file
diff --git a/ThirdRun.DesktopGL/Content/Content.mgcb b/ThirdRun.DesktopGL/Content/Content.mgcb
new file mode 120000
index 0000000..192f1dc
--- /dev/null
+++ b/ThirdRun.DesktopGL/Content/Content.mgcb
@@ -0,0 +1 @@
+../../Content/Content.mgcb
\ No newline at end of file
diff --git a/ThirdRun.DesktopGL/Content/Monsters b/ThirdRun.DesktopGL/Content/Monsters
new file mode 120000
index 0000000..ca6abc0
--- /dev/null
+++ b/ThirdRun.DesktopGL/Content/Monsters
@@ -0,0 +1 @@
+../../Content/Monsters
\ No newline at end of file
diff --git a/ThirdRun.DesktopGL/Content/UI b/ThirdRun.DesktopGL/Content/UI
new file mode 120000
index 0000000..2d973a3
--- /dev/null
+++ b/ThirdRun.DesktopGL/Content/UI
@@ -0,0 +1 @@
+../../Content/UI
\ No newline at end of file
diff --git a/ThirdRun.DesktopGL/Content/bin b/ThirdRun.DesktopGL/Content/bin
new file mode 120000
index 0000000..599bfb2
--- /dev/null
+++ b/ThirdRun.DesktopGL/Content/bin
@@ -0,0 +1 @@
+../../Content/bin
\ No newline at end of file
diff --git a/ThirdRun.DesktopGL/Content/obj b/ThirdRun.DesktopGL/Content/obj
new file mode 120000
index 0000000..7ff0392
--- /dev/null
+++ b/ThirdRun.DesktopGL/Content/obj
@@ -0,0 +1 @@
+../../Content/obj
\ No newline at end of file
diff --git a/src/Program.cs b/ThirdRun.DesktopGL/Program.cs
similarity index 100%
rename from src/Program.cs
rename to ThirdRun.DesktopGL/Program.cs
diff --git a/ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj b/ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj
new file mode 100644
index 0000000..fdfc734
--- /dev/null
+++ b/ThirdRun.DesktopGL/ThirdRun.DesktopGL.csproj
@@ -0,0 +1,22 @@
+
+
+
+ Exe
+ net8.0
+ ThirdRun.DesktopGL
+ ThirdRun.DesktopGL
+ enable
+ false
+ false
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+
\ No newline at end of file
diff --git a/ThirdRun.csproj b/ThirdRun.csproj
index cb8e97e..a272972 100644
--- a/ThirdRun.csproj
+++ b/ThirdRun.csproj
@@ -1,7 +1,7 @@
- Exe
+ Library
net8.0
ThirdRun
ThirdRun
@@ -18,6 +18,8 @@
+
+
diff --git a/ThirdRun.sln b/ThirdRun.sln
index 08c6448..66d27bb 100644
--- a/ThirdRun.sln
+++ b/ThirdRun.sln
@@ -2,24 +2,36 @@
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun", "ThirdRun.csproj", "{14107365-1304-7FC2-F4AD-E9E35D3A3286}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun.Tests", "ThirdRun.Tests\ThirdRun.Tests.csproj", "{EF64743F-17EF-4C78-90E8-29D992645F54}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun", "ThirdRun.csproj", "{14107365-1304-7FC2-F4AD-E9E35D3A3286}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun.Tests", "ThirdRun.Tests\ThirdRun.Tests.csproj", "{EF64743F-17EF-4C78-90E8-29D992645F54}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun.DesktopGL", "ThirdRun.DesktopGL\ThirdRun.DesktopGL.csproj", "{D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThirdRun.Android", "ThirdRun.Android\ThirdRun.Android.csproj", "{B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Release|Any CPU.Build.0 = Release|Any CPU
- {EF64743F-17EF-4C78-90E8-29D992645F54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EF64743F-17EF-4C78-90E8-29D992645F54}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EF64743F-17EF-4C78-90E8-29D992645F54}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EF64743F-17EF-4C78-90E8-29D992645F54}.Release|Any CPU.Build.0 = Release|Any CPU
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {14107365-1304-7FC2-F4AD-E9E35D3A3286}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EF64743F-17EF-4C78-90E8-29D992645F54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EF64743F-17EF-4C78-90E8-29D992645F54}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EF64743F-17EF-4C78-90E8-29D992645F54}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EF64743F-17EF-4C78-90E8-29D992645F54}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D8F4C5A3-2F8E-4B5C-9A1D-3C7E8F9B2A4E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B5E2F1A7-8C3D-4E9F-A2B6-7D4F3E5A8B9C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE