Explorar el Código

Netrumble updated to SDK and MG 3.8.*

CartBlanche hace 3 semanas
padre
commit
1c0b5fadd7
Se han modificado 100 ficheros con 1643 adiciones y 1495 borrados
  1. 49 0
      NetRumble/.vscode/launch.json
  2. 145 0
      NetRumble/.vscode/tasks.json
  3. 152 164
      NetRumble/Core/AudioManager.cs
  4. 68 78
      NetRumble/Core/BatchRemovalCollection.cs
  5. 311 321
      NetRumble/Core/BloomPostprocess/BloomComponent.cs
  6. 79 85
      NetRumble/Core/BloomPostprocess/BloomSettings.cs
  7. 187 195
      NetRumble/Core/CollisionMath.cs
  8. 0 0
      NetRumble/Core/Content/Audio/wav/asteroid_touch.wav
  9. 0 0
      NetRumble/Core/Content/Audio/wav/asteroid_touch.xnb
  10. 0 0
      NetRumble/Core/Content/Audio/wav/explosion_large.wav
  11. 0 0
      NetRumble/Core/Content/Audio/wav/explosion_large.xnb
  12. 0 0
      NetRumble/Core/Content/Audio/wav/explosion_medium.wav
  13. 0 0
      NetRumble/Core/Content/Audio/wav/explosion_medium.xnb
  14. 0 0
      NetRumble/Core/Content/Audio/wav/explosion_shockwave.wav
  15. 0 0
      NetRumble/Core/Content/Audio/wav/explosion_shockwave.xnb
  16. 0 0
      NetRumble/Core/Content/Audio/wav/fire_laser1.wav
  17. 0 0
      NetRumble/Core/Content/Audio/wav/fire_laser1.xnb
  18. 0 0
      NetRumble/Core/Content/Audio/wav/fire_laser2.wav
  19. 0 0
      NetRumble/Core/Content/Audio/wav/fire_laser2.xnb
  20. 0 0
      NetRumble/Core/Content/Audio/wav/fire_laser3.wav
  21. 0 0
      NetRumble/Core/Content/Audio/wav/fire_laser3.xnb
  22. 0 0
      NetRumble/Core/Content/Audio/wav/fire_rocket1.wav
  23. 0 0
      NetRumble/Core/Content/Audio/wav/fire_rocket1.xnb
  24. 0 0
      NetRumble/Core/Content/Audio/wav/fire_rocket2.wav
  25. 0 0
      NetRumble/Core/Content/Audio/wav/fire_rocket2.xnb
  26. 0 0
      NetRumble/Core/Content/Audio/wav/menu_scroll.wav
  27. 0 0
      NetRumble/Core/Content/Audio/wav/menu_scroll.xnb
  28. 0 0
      NetRumble/Core/Content/Audio/wav/menu_select.wav
  29. 0 0
      NetRumble/Core/Content/Audio/wav/menu_select.xnb
  30. 0 0
      NetRumble/Core/Content/Audio/wav/player_spawn.wav
  31. 0 0
      NetRumble/Core/Content/Audio/wav/player_spawn.xnb
  32. 0 0
      NetRumble/Core/Content/Audio/wav/powerup_spawn.wav
  33. 0 0
      NetRumble/Core/Content/Audio/wav/powerup_spawn.xnb
  34. 0 0
      NetRumble/Core/Content/Audio/wav/powerup_touch.wav
  35. 0 0
      NetRumble/Core/Content/Audio/wav/powerup_touch.xnb
  36. 0 0
      NetRumble/Core/Content/Audio/wav/rocket.wav
  37. 0 0
      NetRumble/Core/Content/Audio/wav/rocket.xnb
  38. BIN
      NetRumble/Core/Content/Effects/Clouds.xnb
  39. 47 47
      NetRumble/Core/Content/Fonts/MenuFont.spritefont
  40. 0 0
      NetRumble/Core/Content/Fonts/MenuFont.xnb
  41. 47 47
      NetRumble/Core/Content/Fonts/MessageBox.spritefont
  42. 0 0
      NetRumble/Core/Content/Fonts/MessageBox.xnb
  43. 0 0
      NetRumble/Core/Content/Fonts/NetRumbleFont.png
  44. 0 0
      NetRumble/Core/Content/Fonts/NetRumbleFont.xnb
  45. 0 0
      NetRumble/Core/Content/Game.ico
  46. 0 0
      NetRumble/Core/Content/GameThumbnail.png
  47. 0 0
      NetRumble/Core/Content/One Step Beyond.wma
  48. 0 0
      NetRumble/Core/Content/One Step Beyond.xnb
  49. 45 45
      NetRumble/Core/Content/Particles/laserExplosion.xml
  50. 81 81
      NetRumble/Core/Content/Particles/mineExplosion.xml
  51. 81 81
      NetRumble/Core/Content/Particles/rocketExplosion.xml
  52. 117 117
      NetRumble/Core/Content/Particles/rocketTrail.xml
  53. 153 153
      NetRumble/Core/Content/Particles/shipExplosion.xml
  54. 81 81
      NetRumble/Core/Content/Particles/shipSpawn.xml
  55. 0 0
      NetRumble/Core/Content/Textures/Particles/defaultParticle.PNG
  56. 0 0
      NetRumble/Core/Content/Textures/Particles/defaultParticle.xnb
  57. 0 0
      NetRumble/Core/Content/Textures/Particles/particle.png
  58. 0 0
      NetRumble/Core/Content/Textures/Particles/particle.xnb
  59. 0 0
      NetRumble/Core/Content/Textures/Particles/smoke.png
  60. 0 0
      NetRumble/Core/Content/Textures/Particles/smoke.xnb
  61. 0 0
      NetRumble/Core/Content/Textures/Particles/spark.png
  62. 0 0
      NetRumble/Core/Content/Textures/Particles/spark.xnb
  63. 0 0
      NetRumble/Core/Content/Textures/asteroid0.png
  64. 0 0
      NetRumble/Core/Content/Textures/asteroid0.xnb
  65. 0 0
      NetRumble/Core/Content/Textures/asteroid1.png
  66. 0 0
      NetRumble/Core/Content/Textures/asteroid1.xnb
  67. 0 0
      NetRumble/Core/Content/Textures/asteroid2.png
  68. 0 0
      NetRumble/Core/Content/Textures/asteroid2.xnb
  69. 0 0
      NetRumble/Core/Content/Textures/barrierEnd.png
  70. 0 0
      NetRumble/Core/Content/Textures/barrierEnd.xnb
  71. 0 0
      NetRumble/Core/Content/Textures/barrierPurple.png
  72. 0 0
      NetRumble/Core/Content/Textures/barrierPurple.xnb
  73. 0 0
      NetRumble/Core/Content/Textures/barrierRed.png
  74. 0 0
      NetRumble/Core/Content/Textures/barrierRed.xnb
  75. 0 0
      NetRumble/Core/Content/Textures/blank.png
  76. 0 0
      NetRumble/Core/Content/Textures/blank.xnb
  77. 0 0
      NetRumble/Core/Content/Textures/chatAble.png
  78. 0 0
      NetRumble/Core/Content/Textures/chatAble.xnb
  79. 0 0
      NetRumble/Core/Content/Textures/chatMute.png
  80. 0 0
      NetRumble/Core/Content/Textures/chatMute.xnb
  81. 0 0
      NetRumble/Core/Content/Textures/chatTalking.png
  82. 0 0
      NetRumble/Core/Content/Textures/chatTalking.xnb
  83. 0 0
      NetRumble/Core/Content/Textures/clouds.png
  84. 0 0
      NetRumble/Core/Content/Textures/clouds.xnb
  85. 0 0
      NetRumble/Core/Content/Textures/explosion.png
  86. 0 0
      NetRumble/Core/Content/Textures/explosion.xnb
  87. 0 0
      NetRumble/Core/Content/Textures/laser.png
  88. 0 0
      NetRumble/Core/Content/Textures/laser.xnb
  89. 0 0
      NetRumble/Core/Content/Textures/mine.png
  90. 0 0
      NetRumble/Core/Content/Textures/mine.xnb
  91. 0 0
      NetRumble/Core/Content/Textures/powerupDoubleLaser.png
  92. 0 0
      NetRumble/Core/Content/Textures/powerupDoubleLaser.xnb
  93. 0 0
      NetRumble/Core/Content/Textures/powerupRocket.png
  94. 0 0
      NetRumble/Core/Content/Textures/powerupRocket.xnb
  95. 0 0
      NetRumble/Core/Content/Textures/powerupTripleLaser.png
  96. 0 0
      NetRumble/Core/Content/Textures/powerupTripleLaser.xnb
  97. 0 0
      NetRumble/Core/Content/Textures/ready.png
  98. 0 0
      NetRumble/Core/Content/Textures/ready.xnb
  99. 0 0
      NetRumble/Core/Content/Textures/rocket.png
  100. 0 0
      NetRumble/Core/Content/Textures/rocket.xnb

+ 49 - 0
NetRumble/.vscode/launch.json

@@ -0,0 +1,49 @@
+{
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "name": "Launch Windows",
+            "type": "coreclr",
+            "request": "launch",
+            "preLaunchTask": "build-windows",
+            "program": "${workspaceFolder}/Platforms/Windows/bin/Debug/net8.0-windows/NetRumble.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/NetRumble",
+            "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/NetRumble.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/NetRumble.dll",
+            "args": [],
+            "cwd": "${workspaceFolder}",
+            "console": "internalConsole",
+            "stopAtEntry": false
+        }
+    ]
+}

+ 145 - 0
NetRumble/.vscode/tasks.json

@@ -0,0 +1,145 @@
+{
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "label": "build-windows",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "build",
+                "${workspaceFolder}/Platforms/Windows/NetRumble.Windows.csproj"
+            ],
+            "group": "build",
+            "presentation": {
+                "echo": true,
+                "reveal": "silent",
+                "focus": false,
+                "panel": "shared"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "build-desktopgl",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "build",
+                "${workspaceFolder}/Platforms/Desktop/NetRumble.DesktopGL.csproj"
+            ],
+            "group": "build",
+            "presentation": {
+                "echo": true,
+                "reveal": "silent",
+                "focus": false,
+                "panel": "shared"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "build-android",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "build",
+                "${workspaceFolder}/Platforms/Android/NetRumble.Android.csproj"
+            ],
+            "group": "build",
+            "presentation": {
+                "echo": true,
+                "reveal": "silent",
+                "focus": false,
+                "panel": "shared"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "run-windows",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "run",
+                "--project",
+                "${workspaceFolder}/Platforms/Windows/NetRumble.Windows.csproj"
+            ],
+            "group": "test",
+            "dependsOn": "build-windows",
+            "presentation": {
+                "echo": true,
+                "reveal": "always",
+                "focus": false,
+                "panel": "new"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "run-desktopgl",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "run",
+                "--project",
+                "${workspaceFolder}/Platforms/Desktop/NetRumble.DesktopGL.csproj"
+            ],
+            "group": "test",
+            "dependsOn": "build-desktopgl",
+            "presentation": {
+                "echo": true,
+                "reveal": "always",
+                "focus": false,
+                "panel": "new"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "clean-windows",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "clean",
+                "${workspaceFolder}/Platforms/Windows/NetRumble.Windows.csproj"
+            ],
+            "group": "build",
+            "presentation": {
+                "echo": true,
+                "reveal": "silent",
+                "focus": false,
+                "panel": "shared"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "clean-desktopgl",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "clean",
+                "${workspaceFolder}/Platforms/Desktop/NetRumble.DesktopGL.csproj"
+            ],
+            "group": "build",
+            "presentation": {
+                "echo": true,
+                "reveal": "silent",
+                "focus": false,
+                "panel": "shared"
+            },
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "restore-all",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "restore",
+                "${workspaceFolder}"
+            ],
+            "group": "build",
+            "presentation": {
+                "echo": true,
+                "reveal": "silent",
+                "focus": false,
+                "panel": "shared"
+            },
+            "problemMatcher": "$msCompile"
+        }
+    ]
+}

+ 152 - 164
NetRumble/AudioManager.cs → NetRumble/Core/AudioManager.cs

@@ -1,164 +1,152 @@
-#region File Description
-//-----------------------------------------------------------------------------
-// AudioManager.cs
-//
-// Microsoft XNA Community Game Platform
-// Copyright (C) Microsoft Corporation. All rights reserved.
-//-----------------------------------------------------------------------------
-#endregion
-
-#region Using Statements
-using System;
-using System.IO;
-using System.Collections.Generic;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Audio;
-using Microsoft.Xna.Framework.Media;
-#endregion
-
-namespace NetRumble
-{
-    /// <summary>
-    /// Component that manages audio playback for all sound effects.
-    /// </summary>
-    public class AudioManager : GameComponent
-    {
-        #region Singleton
-
-
-        /// <summary>
-        /// The singleton for this type
-        /// </summary>
-        private static AudioManager audioManager = null;
-
-
-        #endregion
-
-
-        #region Audio Data
-
-        /// <summary>
-        /// File list of all wav audio files
-        /// </summary>
-        private FileInfo[] audioFileList;
-
-        /// <summary>
-        /// Content folder containing audio files
-        /// </summary>
-        private DirectoryInfo audioFolder;
-        
-        /// <summary>
-        /// Collection of all loaded sound effects
-        /// </summary>
-        private static Dictionary<string, SoundEffect> soundList;
-
-        /// <summary>
-        /// Looping song used as the in-game soundtrack
-        /// </summary>
-        private static Song soundtrack;
-
-        #endregion
-
-
-        #region Initialization Methods
-
-        /// <summary>
-        /// Constructs the manager for audio playback of all sound effects.
-        /// </summary>
-        /// <param name="game">The game that this component will be attached to.</param>
-        /// <param name="audioFolder">The directory containing audio files.</param>
-        private AudioManager(Game game, DirectoryInfo audioDirectory )
-            : base(game)
-        {
-            try
-            {
-                audioFolder = audioDirectory;
-                audioFileList = audioFolder.GetFiles("*.xnb");
-                soundList = new Dictionary<string, SoundEffect>();
-
-                for (int i = 0; i < audioFileList.Length; i++)
-                {
-                    string soundName = Path.GetFileNameWithoutExtension(audioFileList[i].Name);
-                    soundList[soundName] = game.Content.Load<SoundEffect>("Audio\\wav\\"+ soundName);
-                    soundList[soundName].Name = soundName;
-                }
-
-                //soundtrack = game.Content.Load<Song>("One Step Beyond");
-            }
-            catch (NoAudioHardwareException)
-            {
-                // silently fall back to silence
-            }
-        }
-
-        public static void Initialize(Game game, DirectoryInfo audioDirectory)
-        {
-            if (game == null)
-                return;
-
-            audioManager = new AudioManager(game, audioDirectory);
-            game.Components.Add(audioManager);
-        }
-
-        public static void PlaySoundTrack()
-        {
-            if (soundtrack == null)
-                return;
-
-            MediaPlayer.Play(soundtrack);
-        }
-
-        #endregion
-
-
-        #region Sound Play Methods
-
-        /// <summary>
-        /// Plays a fire-and-forget sound effect by name.
-        /// </summary>
-        /// <param name="soundName">The name of the sound to play.</param>
-        public static void PlaySoundEffect(string soundName)
-        {
-            if (audioManager == null || soundList == null)
-                return;
-
-            if (soundList.ContainsKey(soundName))
-            {
-                soundList[soundName].Play();
-            }
-        }
-
-        /// <summary>
-        /// Plays a sound effect by name and returns an instance of that sound.
-        /// </summary>
-        /// <param name="soundName">The name of the sound to play.</param>
-        /// <param name="looped">True if sound effect should loop.</param>
-        /// <param name="instance">The SoundEffectInstance created for this sound effect.</param>
-        public static void PlaySoundEffect(string soundName, bool looped, out SoundEffectInstance instance)
-        {
-            instance = null;
-            if (audioManager == null || soundList == null)
-                return;
-
-            if (soundList.ContainsKey(soundName))
-            {
-                try
-                {
-                    instance = soundList[soundName].CreateInstance();
-                    if (instance != null)
-                    {
-                        instance.IsLooped = looped;
-                        instance.Play();
-                    }
-                }
-                catch (InstancePlayLimitException)
-                {
-                    // silently fail (returns null instance) if instance limit reached
-                }
-            }
-        }
-
-        #endregion
-
-    }
-}
+//-----------------------------------------------------------------------------
+// AudioManager.cs
+//
+// Microsoft XNA Community Game Platform
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Audio;
+using Microsoft.Xna.Framework.Media;
+
+namespace NetRumble
+{
+    /// <summary>
+    /// Component that manages audio playback for all sound effects.
+    /// </summary>
+    public class AudioManager : GameComponent
+    {
+
+
+        /// <summary>
+        /// The singleton for this type
+        /// </summary>
+        private static AudioManager audioManager = null;
+
+
+
+
+
+        /// <summary>
+        /// File list of all wav audio files
+        /// </summary>
+        private FileInfo[] audioFileList;
+
+        /// <summary>
+        /// Content folder containing audio files
+        /// </summary>
+        private DirectoryInfo audioFolder;
+        
+        /// <summary>
+        /// Collection of all loaded sound effects
+        /// </summary>
+        private static Dictionary<string, SoundEffect> soundList;
+
+        /// <summary>
+        /// Looping song used as the in-game soundtrack
+        /// </summary>
+        private static Song soundtrack;
+
+
+
+
+        /// <summary>
+        /// Constructs the manager for audio playback of all sound effects.
+        /// </summary>
+        /// <param name="game">The game that this component will be attached to.</param>
+        /// <param name="audioFolder">The directory containing audio files.</param>
+        private AudioManager(Game game, DirectoryInfo audioDirectory )
+            : base(game)
+        {
+            try
+            {
+                audioFolder = audioDirectory;
+                audioFileList = audioFolder.GetFiles("*.xnb");
+                soundList = new Dictionary<string, SoundEffect>();
+
+                for (int i = 0; i < audioFileList.Length; i++)
+                {
+                    string soundName = Path.GetFileNameWithoutExtension(audioFileList[i].Name);
+                    soundList[soundName] = game.Content.Load<SoundEffect>("Audio\\wav\\"+ soundName);
+                    soundList[soundName].Name = soundName;
+                }
+
+                //soundtrack = game.Content.Load<Song>("One Step Beyond");
+            }
+            catch (NoAudioHardwareException)
+            {
+                // silently fall back to silence
+            }
+        }
+
+        public static void Initialize(Game game, DirectoryInfo audioDirectory)
+        {
+            if (game == null)
+                return;
+
+            audioManager = new AudioManager(game, audioDirectory);
+            game.Components.Add(audioManager);
+        }
+
+        public static void PlaySoundTrack()
+        {
+            if (soundtrack == null)
+                return;
+
+            MediaPlayer.Play(soundtrack);
+        }
+
+
+
+
+        /// <summary>
+        /// Plays a fire-and-forget sound effect by name.
+        /// </summary>
+        /// <param name="soundName">The name of the sound to play.</param>
+        public static void PlaySoundEffect(string soundName)
+        {
+            if (audioManager == null || soundList == null)
+                return;
+
+            if (soundList.ContainsKey(soundName))
+            {
+                soundList[soundName].Play();
+            }
+        }
+
+        /// <summary>
+        /// Plays a sound effect by name and returns an instance of that sound.
+        /// </summary>
+        /// <param name="soundName">The name of the sound to play.</param>
+        /// <param name="looped">True if sound effect should loop.</param>
+        /// <param name="instance">The SoundEffectInstance created for this sound effect.</param>
+        public static void PlaySoundEffect(string soundName, bool looped, out SoundEffectInstance instance)
+        {
+            instance = null;
+            if (audioManager == null || soundList == null)
+                return;
+
+            if (soundList.ContainsKey(soundName))
+            {
+                try
+                {
+                    instance = soundList[soundName].CreateInstance();
+                    if (instance != null)
+                    {
+                        instance.IsLooped = looped;
+                        instance.Play();
+                    }
+                }
+                catch (InstancePlayLimitException)
+                {
+                    // silently fail (returns null instance) if instance limit reached
+                }
+            }
+        }
+
+
+    }
+}

+ 68 - 78
NetRumble/BatchRemovalCollection.cs → NetRumble/Core/BatchRemovalCollection.cs

@@ -1,78 +1,68 @@
-#region File Description
-//-----------------------------------------------------------------------------
-// BatchRemovalCollection.cs
-//
-// Microsoft XNA Community Game Platform
-// Copyright (C) Microsoft Corporation. All rights reserved.
-//-----------------------------------------------------------------------------
-#endregion
-
-#region Using Statements
-using System;
-using System.Collections.Generic;
-#endregion
-
-namespace NetRumble
-{
-    /// <summary>
-    /// A collection with an additional feature to isolate the
-    /// removal of the objects.
-    /// </summary>
-    public class BatchRemovalCollection<T> : List<T>
-    {
-        #region Pending Removal Data
-
-
-        /// <summary>
-        /// The list of objects to be removed on the next ApplyPendingRemovals().
-        /// </summary>
-        private List<T> pendingRemovals;
-
-
-        #endregion
-
-
-        #region Initialization
-
-
-        /// <summary>
-        /// Constructs a new collection.
-        /// </summary>
-        public BatchRemovalCollection()
-        {
-            pendingRemovals = new List<T>();
-        }
-
-
-        #endregion
-
-
-        #region Collection
-
-
-        /// <summary>
-        /// Queue an item for removal.
-        /// </summary>
-        /// <param name="item"></param>
-        public void QueuePendingRemoval(T item)
-        {
-            pendingRemovals.Add(item);
-        }
-
-
-        /// <summary>
-        /// Remove all of the "garbage" objects from this collection.
-        /// </summary>
-        public void ApplyPendingRemovals()
-        {
-            for (int i = 0; i < pendingRemovals.Count; i++)
-            {
-                Remove(pendingRemovals[i]);
-            }
-            pendingRemovals.Clear();
-        }
-
-
-        #endregion
-    }
-}
+//-----------------------------------------------------------------------------
+// BatchRemovalCollection.cs
+//
+// Microsoft XNA Community Game Platform
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+
+namespace NetRumble
+{
+    /// <summary>
+    /// A collection with an additional feature to isolate the
+    /// removal of the objects.
+    /// </summary>
+    public class BatchRemovalCollection<T> : List<T>
+    {
+
+
+        /// <summary>
+        /// The list of objects to be removed on the next ApplyPendingRemovals().
+        /// </summary>
+        private List<T> pendingRemovals;
+
+
+
+
+
+
+        /// <summary>
+        /// Constructs a new collection.
+        /// </summary>
+        public BatchRemovalCollection()
+        {
+            pendingRemovals = new List<T>();
+        }
+
+
+
+
+
+
+        /// <summary>
+        /// Queue an item for removal.
+        /// </summary>
+        /// <param name="item"></param>
+        public void QueuePendingRemoval(T item)
+        {
+            pendingRemovals.Add(item);
+        }
+
+
+        /// <summary>
+        /// Remove all of the "garbage" objects from this collection.
+        /// </summary>
+        public void ApplyPendingRemovals()
+        {
+            for (int i = 0; i < pendingRemovals.Count; i++)
+            {
+                Remove(pendingRemovals[i]);
+            }
+            pendingRemovals.Clear();
+        }
+
+
+    }
+}

+ 311 - 321
NetRumble/BloomPostprocess/BloomComponent.cs → NetRumble/Core/BloomPostprocess/BloomComponent.cs

@@ -1,321 +1,311 @@
-#region File Description
-//-----------------------------------------------------------------------------
-// BloomComponent.cs
-//
-// Microsoft XNA Community Game Platform
-// Copyright (C) Microsoft Corporation. All rights reserved.
-//-----------------------------------------------------------------------------
-#endregion
-
-#region Using Statements
-using System;
-using Microsoft.Xna.Framework;
-using Microsoft.Xna.Framework.Content;
-using Microsoft.Xna.Framework.Graphics;
-#endregion
-
-namespace NetRumble
-{
-    /// <summary>
-    /// A DrawableGameComponent that will add bloom post-processing to what the previous
-    /// components have drawn.
-    /// </summary>
-    /// <remarks>
-    /// This public class is similar to one in the Bloom sample.
-    /// </remarks>
-    public class BloomComponent : DrawableGameComponent
-    {
-        #region Fields
-
-        ContentManager content;
-        SpriteBatch spriteBatch;
-
-        Effect bloomExtractEffect;
-        Effect bloomCombineEffect;
-        Effect gaussianBlurEffect;
-
-        RenderTarget2D sceneRenderTarget;
-        RenderTarget2D renderTarget1;
-        RenderTarget2D renderTarget2;
-
-
-        // Choose what display settings the bloom should use.
-        public BloomSettings Settings
-        {
-            get { return settings; }
-            set { settings = value; }
-        }
-
-        BloomSettings settings = BloomSettings.PresetSettings[0];
-
-
-        // Optionally displays one of the intermediate buffers used
-        // by the bloom postprocess, so you can see exactly what is
-        // being drawn into each rendertarget.
-        public enum IntermediateBuffer
-        {
-            PreBloom,
-            BlurredHorizontally,
-            BlurredBothWays,
-            FinalResult,
-        }
-
-        public IntermediateBuffer ShowBuffer
-        {
-            get { return showBuffer; }
-            set { showBuffer = value; }
-        }
-
-        IntermediateBuffer showBuffer = IntermediateBuffer.FinalResult;
-
-        #endregion
-
-        #region Initialization
-
-
-        public BloomComponent(Game game)
-            : base(game)
-        {
-            if (game == null)
-                throw new ArgumentNullException("game");
-
-            content = new ContentManager(game.Services, "Content/BloomPostprocess");
-        }
-
-
-        /// <summary>
-        /// Load your graphics content.
-        /// </summary>
-        protected override void LoadContent()
-        {
-            spriteBatch = new SpriteBatch(GraphicsDevice);
-
-			bloomExtractEffect = content.Load<Effect>("Effects/BloomExtract");
-			bloomCombineEffect = content.Load<Effect>("Effects/BloomCombine");
-			gaussianBlurEffect = content.Load<Effect>("Effects/GaussianBlur");
-
-            // Look up the resolution and format of our main backbuffer.
-            PresentationParameters pp = GraphicsDevice.PresentationParameters;
-
-            int width = pp.BackBufferWidth;
-            int height = pp.BackBufferHeight;
-
-            SurfaceFormat format = pp.BackBufferFormat;
-
-            // Create a texture for rendering the main scene, prior to applying bloom.
-            sceneRenderTarget = new RenderTarget2D(GraphicsDevice, width, height, false,
-                                                   format, pp.DepthStencilFormat, pp.MultiSampleCount,
-                                                   RenderTargetUsage.DiscardContents);
-
-            // Create two rendertargets for the bloom processing. These are half the
-            // size of the backbuffer, in order to minimize fillrate costs. Reducing
-            // the resolution in this way doesn't hurt quality, because we are going
-            // to be blurring the bloom images in any case.
-            width /= 2;
-            height /= 2;
-
-            renderTarget1 = new RenderTarget2D(GraphicsDevice, width, height, false, format, DepthFormat.None);
-            renderTarget2 = new RenderTarget2D(GraphicsDevice, width, height, false, format, DepthFormat.None);
-        }
-
-
-        /// <summary>
-        /// Unload your graphics content.
-        /// </summary>
-        protected override void UnloadContent()
-        {
-            content.Unload();
-        }
-
-        #endregion
-
-        #region Draw
-
-        /// <summary>
-        /// This should be called at the very start of the scene rendering. The bloom
-        /// component uses it to redirect drawing into its custom rendertarget, so it
-        /// can capture the scene image in preparation for applying the bloom filter.
-        /// </summary>
-        public void BeginDraw()
-        {
-            GraphicsDevice.SetRenderTarget(sceneRenderTarget);
-        }
-
-        /// <summary>
-        /// This is where it all happens. Grabs a scene that has already been rendered,
-        /// and uses postprocess magic to add a glowing bloom effect over the top of it.
-        /// </summary>
-        public override void Draw(GameTime gameTime)
-        {
-            GraphicsDevice.SamplerStates[1] = SamplerState.LinearClamp;
-
-            // Pass 1: draw the scene into rendertarget 1, using a
-            // shader that extracts only the brightest parts of the image.
-            bloomExtractEffect.Parameters["BloomThreshold"].SetValue(
-                Settings.BloomThreshold);
-
-            DrawFullscreenQuad(sceneRenderTarget, renderTarget1,
-                               bloomExtractEffect,
-                               IntermediateBuffer.PreBloom);
-
-            // Pass 2: draw from rendertarget 1 into rendertarget 2,
-            // using a shader to apply a horizontal gaussian blur filter.
-            //SetBlurEffectParameters(1.0f / (float)renderTarget1.Width, 0);
-
-            DrawFullscreenQuad(renderTarget1, renderTarget2,
-                               gaussianBlurEffect,
-                               IntermediateBuffer.BlurredHorizontally);
-
-            // Pass 3: draw from rendertarget 2 back into rendertarget 1,
-            // using a shader to apply a vertical gaussian blur filter.
-            //SetBlurEffectParameters(0, 1.0f / (float)renderTarget1.Height);
-
-            DrawFullscreenQuad(renderTarget2, renderTarget1,
-                               gaussianBlurEffect,
-                               IntermediateBuffer.BlurredBothWays);
-
-            // Pass 4: draw both rendertarget 1 and the original scene
-            // image back into the main backbuffer, using a shader that
-            // combines them to produce the final bloomed result.
-            GraphicsDevice.SetRenderTarget(null);
-
-            EffectParameterCollection parameters = bloomCombineEffect.Parameters;
-            parameters["BloomIntensity"].SetValue(Settings.BloomIntensity);
-            parameters["BaseIntensity"].SetValue(Settings.BaseIntensity);
-            parameters["BloomSaturation"].SetValue(Settings.BloomSaturation);
-            parameters["BaseSaturation"].SetValue(Settings.BaseSaturation);
-
-            GraphicsDevice.Textures[1] = sceneRenderTarget;
-
-            Viewport viewport = GraphicsDevice.Viewport;
-
-            DrawFullscreenQuad(renderTarget1,
-                               viewport.Width, viewport.Height,
-                               bloomCombineEffect,
-                               IntermediateBuffer.FinalResult);
-//            DrawFullscreenQuad(sceneRenderTarget,
-//                               viewport.Width, viewport.Height,
-//                               bloomCombineEffect,
-//                               IntermediateBuffer.FinalResult);
-        }
-
-
-        /// <summary>
-        /// Helper for drawing a texture into a rendertarget, using
-        /// a custom shader to apply postprocessing effects.
-        /// </summary>
-        void DrawFullscreenQuad(Texture2D texture, RenderTarget2D renderTarget,
-                                Effect effect, IntermediateBuffer currentBuffer)
-        {
-            GraphicsDevice.SetRenderTarget(renderTarget);
-
-            DrawFullscreenQuad(texture,
-                               renderTarget.Width, renderTarget.Height,
-                               effect, currentBuffer);
-        }
-
-
-        /// <summary>
-        /// Helper for drawing a texture into the current rendertarget,
-        /// using a custom shader to apply postprocessing effects.
-        /// </summary>
-        void DrawFullscreenQuad(Texture2D texture, int width, int height,
-                                Effect effect, IntermediateBuffer currentBuffer)
-        {
-            // If the user has selected one of the show intermediate buffer options,
-            // we still draw the quad to make sure the image will end up on the screen,
-            // but might need to skip applying the custom pixel shader.
-            if (showBuffer < currentBuffer)
-            {
-                effect = null;
-            }
-			effect = null;
-            spriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect);
-            spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White);
-            spriteBatch.End();
-        }
-
-
-        /// <summary>
-        /// Computes sample weightings and texture coordinate offsets
-        /// for one pass of a separable gaussian blur filter.
-        /// </summary>
-        void SetBlurEffectParameters(float dx, float dy)
-        {
-            // Look up the sample weight and offset effect parameters.
-            EffectParameter weightsParameter, offsetsParameter;
-
-            weightsParameter = gaussianBlurEffect.Parameters["SampleWeights"];
-            offsetsParameter = gaussianBlurEffect.Parameters["SampleOffsets"];
-
-            // Look up how many samples our gaussian blur effect supports.
-            int sampleCount = weightsParameter.Elements.Count;
-
-            // Create temporary arrays for computing our filter settings.
-            float[] sampleWeights = new float[sampleCount];
-            Vector2[] sampleOffsets = new Vector2[sampleCount];
-
-            // The first sample always has a zero offset.
-            sampleWeights[0] = ComputeGaussian(0);
-            sampleOffsets[0] = new Vector2(0);
-
-            // Maintain a sum of all the weighting values.
-            float totalWeights = sampleWeights[0];
-
-            // Add pairs of additional sample taps, positioned
-            // along a line in both directions from the center.
-            for (int i = 0; i < sampleCount / 2; i++)
-            {
-                // Store weights for the positive and negative taps.
-                float weight = ComputeGaussian(i + 1);
-
-                sampleWeights[i * 2 + 1] = weight;
-                sampleWeights[i * 2 + 2] = weight;
-
-                totalWeights += weight * 2;
-
-                // To get the maximum amount of blurring from a limited number of
-                // pixel shader samples, we take advantage of the bilinear filtering
-                // hardware inside the texture fetch unit. If we position our texture
-                // coordinates exactly halfway between two texels, the filtering unit
-                // will average them for us, giving two samples for the price of one.
-                // This allows us to step in units of two texels per sample, rather
-                // than just one at a time. The 1.5 offset kicks things off by
-                // positioning us nicely in between two texels.
-                float sampleOffset = i * 2 + 1.5f;
-
-                Vector2 delta = new Vector2(dx, dy) * sampleOffset;
-
-                // Store texture coordinate offsets for the positive and negative taps.
-                sampleOffsets[i * 2 + 1] = delta;
-                sampleOffsets[i * 2 + 2] = -delta;
-            }
-
-            // Normalize the list of sample weightings, so they will always sum to one.
-            for (int i = 0; i < sampleWeights.Length; i++)
-            {
-                sampleWeights[i] /= totalWeights;
-            }
-
-            // Tell the effect about our new filter settings.
-            weightsParameter.SetValue(sampleWeights);
-            offsetsParameter.SetValue(sampleOffsets);
-        }
-
-
-        /// <summary>
-        /// Evaluates a single point on the gaussian falloff curve.
-        /// Used for setting up the blur filter weightings.
-        /// </summary>
-        float ComputeGaussian(float n)
-        {
-            float theta = Settings.BlurAmount;
-
-            return (float)((1.0 / Math.Sqrt(2 * Math.PI * theta)) *
-                           Math.Exp(-(n * n) / (2 * theta * theta)));
-        }
-
-
-        #endregion
-    }
-}
+//-----------------------------------------------------------------------------
+// BloomComponent.cs
+//
+// Microsoft XNA Community Game Platform
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+
+using System;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Content;
+using Microsoft.Xna.Framework.Graphics;
+
+namespace NetRumble
+{
+    /// <summary>
+    /// A DrawableGameComponent that will add bloom post-processing to what the previous
+    /// components have drawn.
+    /// </summary>
+    /// <remarks>
+    /// This public class is similar to one in the Bloom sample.
+    /// </remarks>
+    public class BloomComponent : DrawableGameComponent
+    {
+
+        ContentManager content;
+        SpriteBatch spriteBatch;
+
+        Effect bloomExtractEffect;
+        Effect bloomCombineEffect;
+        Effect gaussianBlurEffect;
+
+        RenderTarget2D sceneRenderTarget;
+        RenderTarget2D renderTarget1;
+        RenderTarget2D renderTarget2;
+
+
+        // Choose what display settings the bloom should use.
+        public BloomSettings Settings
+        {
+            get { return settings; }
+            set { settings = value; }
+        }
+
+        BloomSettings settings = BloomSettings.PresetSettings[0];
+
+
+        // Optionally displays one of the intermediate buffers used
+        // by the bloom postprocess, so you can see exactly what is
+        // being drawn into each rendertarget.
+        public enum IntermediateBuffer
+        {
+            PreBloom,
+            BlurredHorizontally,
+            BlurredBothWays,
+            FinalResult,
+        }
+
+        public IntermediateBuffer ShowBuffer
+        {
+            get { return showBuffer; }
+            set { showBuffer = value; }
+        }
+
+        IntermediateBuffer showBuffer = IntermediateBuffer.FinalResult;
+
+
+
+
+        public BloomComponent(Game game)
+            : base(game)
+        {
+            if (game == null)
+                throw new ArgumentNullException("game");
+
+            content = new ContentManager(game.Services, "Content/BloomPostprocess");
+        }
+
+
+        /// <summary>
+        /// Load your graphics content.
+        /// </summary>
+        protected override void LoadContent()
+        {
+            spriteBatch = new SpriteBatch(GraphicsDevice);
+
+			bloomExtractEffect = content.Load<Effect>("Effects/BloomExtract");
+			bloomCombineEffect = content.Load<Effect>("Effects/BloomCombine");
+			gaussianBlurEffect = content.Load<Effect>("Effects/GaussianBlur");
+
+            // Look up the resolution and format of our main backbuffer.
+            PresentationParameters pp = GraphicsDevice.PresentationParameters;
+
+            int width = pp.BackBufferWidth;
+            int height = pp.BackBufferHeight;
+
+            SurfaceFormat format = pp.BackBufferFormat;
+
+            // Create a texture for rendering the main scene, prior to applying bloom.
+            sceneRenderTarget = new RenderTarget2D(GraphicsDevice, width, height, false,
+                                                   format, pp.DepthStencilFormat, pp.MultiSampleCount,
+                                                   RenderTargetUsage.DiscardContents);
+
+            // Create two rendertargets for the bloom processing. These are half the
+            // size of the backbuffer, in order to minimize fillrate costs. Reducing
+            // the resolution in this way doesn't hurt quality, because we are going
+            // to be blurring the bloom images in any case.
+            width /= 2;
+            height /= 2;
+
+            renderTarget1 = new RenderTarget2D(GraphicsDevice, width, height, false, format, DepthFormat.None);
+            renderTarget2 = new RenderTarget2D(GraphicsDevice, width, height, false, format, DepthFormat.None);
+        }
+
+
+        /// <summary>
+        /// Unload your graphics content.
+        /// </summary>
+        protected override void UnloadContent()
+        {
+            content.Unload();
+        }
+
+
+
+        /// <summary>
+        /// This should be called at the very start of the scene rendering. The bloom
+        /// component uses it to redirect drawing into its custom rendertarget, so it
+        /// can capture the scene image in preparation for applying the bloom filter.
+        /// </summary>
+        public void BeginDraw()
+        {
+            GraphicsDevice.SetRenderTarget(sceneRenderTarget);
+        }
+
+        /// <summary>
+        /// This is where it all happens. Grabs a scene that has already been rendered,
+        /// and uses postprocess magic to add a glowing bloom effect over the top of it.
+        /// </summary>
+        public override void Draw(GameTime gameTime)
+        {
+            GraphicsDevice.SamplerStates[1] = SamplerState.LinearClamp;
+
+            // Pass 1: draw the scene into rendertarget 1, using a
+            // shader that extracts only the brightest parts of the image.
+            bloomExtractEffect.Parameters["BloomThreshold"].SetValue(
+                Settings.BloomThreshold);
+
+            DrawFullscreenQuad(sceneRenderTarget, renderTarget1,
+                               bloomExtractEffect,
+                               IntermediateBuffer.PreBloom);
+
+            // Pass 2: draw from rendertarget 1 into rendertarget 2,
+            // using a shader to apply a horizontal gaussian blur filter.
+            //SetBlurEffectParameters(1.0f / (float)renderTarget1.Width, 0);
+
+            DrawFullscreenQuad(renderTarget1, renderTarget2,
+                               gaussianBlurEffect,
+                               IntermediateBuffer.BlurredHorizontally);
+
+            // Pass 3: draw from rendertarget 2 back into rendertarget 1,
+            // using a shader to apply a vertical gaussian blur filter.
+            //SetBlurEffectParameters(0, 1.0f / (float)renderTarget1.Height);
+
+            DrawFullscreenQuad(renderTarget2, renderTarget1,
+                               gaussianBlurEffect,
+                               IntermediateBuffer.BlurredBothWays);
+
+            // Pass 4: draw both rendertarget 1 and the original scene
+            // image back into the main backbuffer, using a shader that
+            // combines them to produce the final bloomed result.
+            GraphicsDevice.SetRenderTarget(null);
+
+            EffectParameterCollection parameters = bloomCombineEffect.Parameters;
+            parameters["BloomIntensity"].SetValue(Settings.BloomIntensity);
+            parameters["BaseIntensity"].SetValue(Settings.BaseIntensity);
+            parameters["BloomSaturation"].SetValue(Settings.BloomSaturation);
+            parameters["BaseSaturation"].SetValue(Settings.BaseSaturation);
+
+            GraphicsDevice.Textures[1] = sceneRenderTarget;
+
+            Viewport viewport = GraphicsDevice.Viewport;
+
+            DrawFullscreenQuad(renderTarget1,
+                               viewport.Width, viewport.Height,
+                               bloomCombineEffect,
+                               IntermediateBuffer.FinalResult);
+//            DrawFullscreenQuad(sceneRenderTarget,
+//                               viewport.Width, viewport.Height,
+//                               bloomCombineEffect,
+//                               IntermediateBuffer.FinalResult);
+        }
+
+
+        /// <summary>
+        /// Helper for drawing a texture into a rendertarget, using
+        /// a custom shader to apply postprocessing effects.
+        /// </summary>
+        void DrawFullscreenQuad(Texture2D texture, RenderTarget2D renderTarget,
+                                Effect effect, IntermediateBuffer currentBuffer)
+        {
+            GraphicsDevice.SetRenderTarget(renderTarget);
+
+            DrawFullscreenQuad(texture,
+                               renderTarget.Width, renderTarget.Height,
+                               effect, currentBuffer);
+        }
+
+
+        /// <summary>
+        /// Helper for drawing a texture into the current rendertarget,
+        /// using a custom shader to apply postprocessing effects.
+        /// </summary>
+        void DrawFullscreenQuad(Texture2D texture, int width, int height,
+                                Effect effect, IntermediateBuffer currentBuffer)
+        {
+            // If the user has selected one of the show intermediate buffer options,
+            // we still draw the quad to make sure the image will end up on the screen,
+            // but might need to skip applying the custom pixel shader.
+            if (showBuffer < currentBuffer)
+            {
+                effect = null;
+            }
+			effect = null;
+            spriteBatch.Begin(0, BlendState.Opaque, null, null, null, effect);
+            spriteBatch.Draw(texture, new Rectangle(0, 0, width, height), Color.White);
+            spriteBatch.End();
+        }
+
+
+        /// <summary>
+        /// Computes sample weightings and texture coordinate offsets
+        /// for one pass of a separable gaussian blur filter.
+        /// </summary>
+        void SetBlurEffectParameters(float dx, float dy)
+        {
+            // Look up the sample weight and offset effect parameters.
+            EffectParameter weightsParameter, offsetsParameter;
+
+            weightsParameter = gaussianBlurEffect.Parameters["SampleWeights"];
+            offsetsParameter = gaussianBlurEffect.Parameters["SampleOffsets"];
+
+            // Look up how many samples our gaussian blur effect supports.
+            int sampleCount = weightsParameter.Elements.Count;
+
+            // Create temporary arrays for computing our filter settings.
+            float[] sampleWeights = new float[sampleCount];
+            Vector2[] sampleOffsets = new Vector2[sampleCount];
+
+            // The first sample always has a zero offset.
+            sampleWeights[0] = ComputeGaussian(0);
+            sampleOffsets[0] = new Vector2(0);
+
+            // Maintain a sum of all the weighting values.
+            float totalWeights = sampleWeights[0];
+
+            // Add pairs of additional sample taps, positioned
+            // along a line in both directions from the center.
+            for (int i = 0; i < sampleCount / 2; i++)
+            {
+                // Store weights for the positive and negative taps.
+                float weight = ComputeGaussian(i + 1);
+
+                sampleWeights[i * 2 + 1] = weight;
+                sampleWeights[i * 2 + 2] = weight;
+
+                totalWeights += weight * 2;
+
+                // To get the maximum amount of blurring from a limited number of
+                // pixel shader samples, we take advantage of the bilinear filtering
+                // hardware inside the texture fetch unit. If we position our texture
+                // coordinates exactly halfway between two texels, the filtering unit
+                // will average them for us, giving two samples for the price of one.
+                // This allows us to step in units of two texels per sample, rather
+                // than just one at a time. The 1.5 offset kicks things off by
+                // positioning us nicely in between two texels.
+                float sampleOffset = i * 2 + 1.5f;
+
+                Vector2 delta = new Vector2(dx, dy) * sampleOffset;
+
+                // Store texture coordinate offsets for the positive and negative taps.
+                sampleOffsets[i * 2 + 1] = delta;
+                sampleOffsets[i * 2 + 2] = -delta;
+            }
+
+            // Normalize the list of sample weightings, so they will always sum to one.
+            for (int i = 0; i < sampleWeights.Length; i++)
+            {
+                sampleWeights[i] /= totalWeights;
+            }
+
+            // Tell the effect about our new filter settings.
+            weightsParameter.SetValue(sampleWeights);
+            offsetsParameter.SetValue(sampleOffsets);
+        }
+
+
+        /// <summary>
+        /// Evaluates a single point on the gaussian falloff curve.
+        /// Used for setting up the blur filter weightings.
+        /// </summary>
+        float ComputeGaussian(float n)
+        {
+            float theta = Settings.BlurAmount;
+
+            return (float)((1.0 / Math.Sqrt(2 * Math.PI * theta)) *
+                           Math.Exp(-(n * n) / (2 * theta * theta)));
+        }
+
+
+    }
+}

+ 79 - 85
NetRumble/BloomPostprocess/BloomSettings.cs → NetRumble/Core/BloomPostprocess/BloomSettings.cs

@@ -1,85 +1,79 @@
-#region File Description
-//-----------------------------------------------------------------------------
-// BloomSettings.cs
-//
-// Microsoft XNA Community Game Platform
-// Copyright (C) Microsoft Corporation. All rights reserved.
-//-----------------------------------------------------------------------------
-#endregion
-
-#region Using Statements
-using System;
-#endregion
-
-namespace NetRumble
-{
-    /// <summary>
-    /// Class holds all the settings used to tweak the bloom effect.
-    /// </summary>
-    /// <remarks>
-    /// This public class is similar to one in the Bloom sample.
-    /// </remarks>
-    public class BloomSettings
-    {
-        #region Fields
-
-
-        // Name of a preset bloom setting, for display to the user.
-        public readonly string Name;
-
-
-        // Controls how bright a pixel needs to be before it will bloom.
-        // Zero makes everything bloom equally, while higher values select
-        // only brighter colors. Somewhere between 0.25 and 0.5 is good.
-        public readonly float BloomThreshold;
-
-
-        // Controls how much blurring is applied to the bloom image.
-        // The typical range is from 1 up to 10 or so.
-        public readonly float BlurAmount;
-
-
-        // Controls the amount of the bloom and base images that
-        // will be mixed into the final scene. Range 0 to 1.
-        public readonly float BloomIntensity;
-        public readonly float BaseIntensity;
-
-
-        // Independently control the color saturation of the bloom and
-        // base images. Zero is totally desaturated, 1.0 leaves saturation
-        // unchanged, while higher values increase the saturation level.
-        public readonly float BloomSaturation;
-        public readonly float BaseSaturation;
-
-
-        #endregion
-
-
-        /// <summary>
-        /// Constructs a new bloom settings descriptor.
-        /// </summary>
-        public BloomSettings(string name, float bloomThreshold, float blurAmount,
-                             float bloomIntensity, float baseIntensity,
-                             float bloomSaturation, float baseSaturation)
-        {
-            Name = name;
-            BloomThreshold = bloomThreshold;
-            BlurAmount = blurAmount;
-            BloomIntensity = bloomIntensity;
-            BaseIntensity = baseIntensity;
-            BloomSaturation = bloomSaturation;
-            BaseSaturation = baseSaturation;
-        }
-        
-
-        /// <summary>
-        /// Table of preset bloom settings, used by the sample program.
-        /// </summary>
-        public static BloomSettings[] PresetSettings =
-        {
-            //                Name           Thresh  Blur Bloom  Base  BloomSat BaseSat
-            new BloomSettings("NetRumble",     0.25f,  4,   1.25f, 1,    1,       1),
-            new BloomSettings("VectorRumble",  0f,     2,   3f,    1,    2,       1),
-        };
-    }
-}
+//-----------------------------------------------------------------------------
+// BloomSettings.cs
+//
+// Microsoft XNA Community Game Platform
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+
+using System;
+
+namespace NetRumble
+{
+    /// <summary>
+    /// Class holds all the settings used to tweak the bloom effect.
+    /// </summary>
+    /// <remarks>
+    /// This public class is similar to one in the Bloom sample.
+    /// </remarks>
+    public class BloomSettings
+    {
+
+
+        // Name of a preset bloom setting, for display to the user.
+        public readonly string Name;
+
+
+        // Controls how bright a pixel needs to be before it will bloom.
+        // Zero makes everything bloom equally, while higher values select
+        // only brighter colors. Somewhere between 0.25 and 0.5 is good.
+        public readonly float BloomThreshold;
+
+
+        // Controls how much blurring is applied to the bloom image.
+        // The typical range is from 1 up to 10 or so.
+        public readonly float BlurAmount;
+
+
+        // Controls the amount of the bloom and base images that
+        // will be mixed into the final scene. Range 0 to 1.
+        public readonly float BloomIntensity;
+        public readonly float BaseIntensity;
+
+
+        // Independently control the color saturation of the bloom and
+        // base images. Zero is totally desaturated, 1.0 leaves saturation
+        // unchanged, while higher values increase the saturation level.
+        public readonly float BloomSaturation;
+        public readonly float BaseSaturation;
+
+
+
+
+        /// <summary>
+        /// Constructs a new bloom settings descriptor.
+        /// </summary>
+        public BloomSettings(string name, float bloomThreshold, float blurAmount,
+                             float bloomIntensity, float baseIntensity,
+                             float bloomSaturation, float baseSaturation)
+        {
+            Name = name;
+            BloomThreshold = bloomThreshold;
+            BlurAmount = blurAmount;
+            BloomIntensity = bloomIntensity;
+            BaseIntensity = baseIntensity;
+            BloomSaturation = bloomSaturation;
+            BaseSaturation = baseSaturation;
+        }
+        
+
+        /// <summary>
+        /// Table of preset bloom settings, used by the sample program.
+        /// </summary>
+        public static BloomSettings[] PresetSettings =
+        {
+            //                Name           Thresh  Blur Bloom  Base  BloomSat BaseSat
+            new BloomSettings("NetRumble",     0.25f,  4,   1.25f, 1,    1,       1),
+            new BloomSettings("VectorRumble",  0f,     2,   3f,    1,    2,       1),
+        };
+    }
+}

+ 187 - 195
NetRumble/CollisionMath.cs → NetRumble/Core/CollisionMath.cs

@@ -1,195 +1,187 @@
-#region File Description
-//-----------------------------------------------------------------------------
-// CollisionMath.cs
-//
-// Microsoft XNA Community Game Platform
-// Copyright (C) Microsoft Corporation. All rights reserved.
-//-----------------------------------------------------------------------------
-#endregion
-
-#region Using Statements
-using System;
-using Microsoft.Xna.Framework;
-#endregion
-
-namespace NetRumble
-{
-    /// <summary>
-    /// A code container for collision-related mathematical functions.
-    /// </summary>
-    static public class CollisionMath
-    {
-        #region Helper Types
-
-
-        /// <summary>
-        /// Data defining a circle/line collision result.
-        /// </summary>
-        /// <remarks>Also used for circle/rectangles.</remarks>
-        public struct CircleLineCollisionResult
-        {
-            public bool Collision;
-            public Vector2 Point;
-            public Vector2 Normal;
-            public float Distance;
-        }
-
-        
-        #endregion
-
-
-        #region Collision Methods
-
-
-        /// <summary>
-        /// Determines the point of intersection between two line segments, 
-        /// as defined by four points.
-        /// </summary>
-        /// <param name="a">The first point on the first line segment.</param>
-        /// <param name="b">The second point on the first line segment.</param>
-        /// <param name="c">The first point on the second line segment.</param>
-        /// <param name="d">The second point on the second line segment.</param>
-        /// <param name="point">The output value with the interesection, if any.</param>
-        /// <remarks>The output parameter "point" is only valid
-        /// when the return value is true.</remarks>
-        /// <returns>True if intersecting, false otherwise.</returns>
-        public static bool LineLineIntersect(Vector2 a, Vector2 b, Vector2 c, 
-            Vector2 d, out Vector2 point)
-        {
-            point = Vector2.Zero;
-
-            double r, s;
-            double denominator = (b.X - a.X) * (d.Y - c.Y) - (b.Y - a.Y) * (d.X - c.X);
-
-            // If the denominator in above is zero, AB & CD are colinear
-            if (denominator == 0)
-            {
-                return false;
-            }
-
-            double numeratorR = (a.Y - c.Y) * (d.X - c.X) - (a.X - c.X) * (d.Y - c.Y);
-            r = numeratorR / denominator;
-
-            double numeratorS = (a.Y - c.Y) * (b.X - a.X) - (a.X - c.X) * (b.Y - a.Y);
-            s = numeratorS / denominator;
-
-            // non-intersecting
-            if (r < 0 || r > 1 || s < 0 || s > 1)
-            {
-                return false;
-            }
-
-            // find intersection point
-            point.X = (float)(a.X + (r * (b.X - a.X)));
-            point.Y = (float)(a.Y + (r * (b.Y - a.Y)));
-
-            return true;
-        }
-
-
-        /// <summary>
-        /// Determine if two circles intersect or contain each other.
-        /// </summary>
-        /// <param name="center1">The center of the first circle.</param>
-        /// <param name="radius1">The radius of the first circle.</param>
-        /// <param name="center2">The center of the second circle.</param>
-        /// <param name="radius2">The radius of the second circle.</param>
-        /// <returns>True if the circles intersect or contain one another.</returns>
-        public static bool CircleCircleIntersect(Vector2 center1, float radius1, 
-            Vector2 center2, float radius2)
-        {
-            Vector2 line = center2 - center1;
-            // we use LengthSquared to avoid a costly square-root call
-            return (line.LengthSquared() <= (radius1 + radius2) * (radius1 + radius2));
-        }
-
-
-        /// <summary>
-        /// Determines if a circle and line segment intersect, and if so, how they do.
-        /// </summary>
-        /// <param name="center">The center of the circle.</param>
-        /// <param name="radius">The radius of the circle.</param>
-        /// <param name="rectangle">The rectangle.</param>
-        /// <param name="result">The result data for the collision.</param>
-        /// <returns>True if a collision occurs, provided for convenience.</returns>
-        public static bool CircleRectangleCollide(Vector2 center, float radius,
-            Rectangle rectangle, ref CircleLineCollisionResult result)
-        {
-            float xVal = center.X;
-            if (xVal < rectangle.Left) xVal = rectangle.Left;
-            if (xVal > rectangle.Right) xVal = rectangle.Right;
-
-            float yVal = center.Y;
-            if (yVal < rectangle.Top) yVal = rectangle.Top;
-            if (yVal > rectangle.Bottom) yVal = rectangle.Bottom;
-
-            Vector2 direction = new Vector2(center.X-xVal,center.Y-yVal);
-            float distance = direction.Length();
-
-            if ((distance > 0) && (distance < radius))
-            {
-                result.Collision = true;
-                result.Distance = radius - distance;
-                result.Normal = Vector2.Normalize(direction);
-                result.Point = new Vector2(xVal, yVal);
-            }
-            else
-            {
-                result.Collision = false;
-            }
-
-            return result.Collision;
-        }
-
-
-        /// <summary>
-        /// Determines if a circle and line segment intersect, and if so, how they do.
-        /// </summary>
-        /// <param name="center">The center of the circle.</param>
-        /// <param name="radius">The radius of the circle.</param>
-        /// <param name="lineStart">The first point on the line segment.</param>
-        /// <param name="lineEnd">The second point on the line segment.</param>
-        /// <param name="result">The result data for the collision.</param>
-        /// <returns>True if a collision occurs, provided for convenience.</returns>
-        public static bool CircleLineCollide(Vector2 center, float radius,
-            Vector2 lineStart, Vector2 lineEnd, ref CircleLineCollisionResult result)
-        {
-            Vector2 AC = center - lineStart;
-            Vector2 AB = lineEnd - lineStart;
-            float ab2 = AB.LengthSquared();
-            if (ab2 <= 0f)
-            {
-                return false;
-            }
-            float acab = Vector2.Dot(AC, AB);
-            float t = acab / ab2;
-
-            if (t < 0.0f)
-                t = 0.0f;
-            else if (t > 1.0f)
-                t = 1.0f;
-
-            result.Point = lineStart + t * AB;
-            result.Normal = center - result.Point;
-
-            float h2 = result.Normal.LengthSquared();
-            float r2 = radius * radius;
-
-            if ((h2 > 0) && (h2 <= r2))
-            {
-                result.Normal.Normalize();
-                result.Distance = (radius - (center - result.Point).Length());
-                result.Collision = true;
-            }
-            else
-            {
-                result.Collision = false;
-            }
-
-            return result.Collision;
-        }
-
-
-        #endregion
-    }
-}
+//-----------------------------------------------------------------------------
+// CollisionMath.cs
+//
+// Microsoft XNA Community Game Platform
+// Copyright (C) Microsoft Corporation. All rights reserved.
+//-----------------------------------------------------------------------------
+
+using System;
+using Microsoft.Xna.Framework;
+
+namespace NetRumble
+{
+    /// <summary>
+    /// A code container for collision-related mathematical functions.
+    /// </summary>
+    static public class CollisionMath
+    {
+
+
+        /// <summary>
+        /// Data defining a circle/line collision result.
+        /// </summary>
+        /// <remarks>Also used for circle/rectangles.</remarks>
+        public struct CircleLineCollisionResult
+        {
+            public bool Collision;
+            public Vector2 Point;
+            public Vector2 Normal;
+            public float Distance;
+        }
+
+        
+
+
+
+
+        /// <summary>
+        /// Determines the point of intersection between two line segments, 
+        /// as defined by four points.
+        /// </summary>
+        /// <param name="a">The first point on the first line segment.</param>
+        /// <param name="b">The second point on the first line segment.</param>
+        /// <param name="c">The first point on the second line segment.</param>
+        /// <param name="d">The second point on the second line segment.</param>
+        /// <param name="point">The output value with the interesection, if any.</param>
+        /// <remarks>The output parameter "point" is only valid
+        /// when the return value is true.</remarks>
+        /// <returns>True if intersecting, false otherwise.</returns>
+        public static bool LineLineIntersect(Vector2 a, Vector2 b, Vector2 c, 
+            Vector2 d, out Vector2 point)
+        {
+            point = Vector2.Zero;
+
+            double r, s;
+            double denominator = (b.X - a.X) * (d.Y - c.Y) - (b.Y - a.Y) * (d.X - c.X);
+
+            // If the denominator in above is zero, AB & CD are colinear
+            if (denominator == 0)
+            {
+                return false;
+            }
+
+            double numeratorR = (a.Y - c.Y) * (d.X - c.X) - (a.X - c.X) * (d.Y - c.Y);
+            r = numeratorR / denominator;
+
+            double numeratorS = (a.Y - c.Y) * (b.X - a.X) - (a.X - c.X) * (b.Y - a.Y);
+            s = numeratorS / denominator;
+
+            // non-intersecting
+            if (r < 0 || r > 1 || s < 0 || s > 1)
+            {
+                return false;
+            }
+
+            // find intersection point
+            point.X = (float)(a.X + (r * (b.X - a.X)));
+            point.Y = (float)(a.Y + (r * (b.Y - a.Y)));
+
+            return true;
+        }
+
+
+        /// <summary>
+        /// Determine if two circles intersect or contain each other.
+        /// </summary>
+        /// <param name="center1">The center of the first circle.</param>
+        /// <param name="radius1">The radius of the first circle.</param>
+        /// <param name="center2">The center of the second circle.</param>
+        /// <param name="radius2">The radius of the second circle.</param>
+        /// <returns>True if the circles intersect or contain one another.</returns>
+        public static bool CircleCircleIntersect(Vector2 center1, float radius1, 
+            Vector2 center2, float radius2)
+        {
+            Vector2 line = center2 - center1;
+            // we use LengthSquared to avoid a costly square-root call
+            return (line.LengthSquared() <= (radius1 + radius2) * (radius1 + radius2));
+        }
+
+
+        /// <summary>
+        /// Determines if a circle and line segment intersect, and if so, how they do.
+        /// </summary>
+        /// <param name="center">The center of the circle.</param>
+        /// <param name="radius">The radius of the circle.</param>
+        /// <param name="rectangle">The rectangle.</param>
+        /// <param name="result">The result data for the collision.</param>
+        /// <returns>True if a collision occurs, provided for convenience.</returns>
+        public static bool CircleRectangleCollide(Vector2 center, float radius,
+            Rectangle rectangle, ref CircleLineCollisionResult result)
+        {
+            float xVal = center.X;
+            if (xVal < rectangle.Left) xVal = rectangle.Left;
+            if (xVal > rectangle.Right) xVal = rectangle.Right;
+
+            float yVal = center.Y;
+            if (yVal < rectangle.Top) yVal = rectangle.Top;
+            if (yVal > rectangle.Bottom) yVal = rectangle.Bottom;
+
+            Vector2 direction = new Vector2(center.X-xVal,center.Y-yVal);
+            float distance = direction.Length();
+
+            if ((distance > 0) && (distance < radius))
+            {
+                result.Collision = true;
+                result.Distance = radius - distance;
+                result.Normal = Vector2.Normalize(direction);
+                result.Point = new Vector2(xVal, yVal);
+            }
+            else
+            {
+                result.Collision = false;
+            }
+
+            return result.Collision;
+        }
+
+
+        /// <summary>
+        /// Determines if a circle and line segment intersect, and if so, how they do.
+        /// </summary>
+        /// <param name="center">The center of the circle.</param>
+        /// <param name="radius">The radius of the circle.</param>
+        /// <param name="lineStart">The first point on the line segment.</param>
+        /// <param name="lineEnd">The second point on the line segment.</param>
+        /// <param name="result">The result data for the collision.</param>
+        /// <returns>True if a collision occurs, provided for convenience.</returns>
+        public static bool CircleLineCollide(Vector2 center, float radius,
+            Vector2 lineStart, Vector2 lineEnd, ref CircleLineCollisionResult result)
+        {
+            Vector2 AC = center - lineStart;
+            Vector2 AB = lineEnd - lineStart;
+            float ab2 = AB.LengthSquared();
+            if (ab2 <= 0f)
+            {
+                return false;
+            }
+            float acab = Vector2.Dot(AC, AB);
+            float t = acab / ab2;
+
+            if (t < 0.0f)
+                t = 0.0f;
+            else if (t > 1.0f)
+                t = 1.0f;
+
+            result.Point = lineStart + t * AB;
+            result.Normal = center - result.Point;
+
+            float h2 = result.Normal.LengthSquared();
+            float r2 = radius * radius;
+
+            if ((h2 > 0) && (h2 <= r2))
+            {
+                result.Normal.Normalize();
+                result.Distance = (radius - (center - result.Point).Length());
+                result.Collision = true;
+            }
+            else
+            {
+                result.Collision = false;
+            }
+
+            return result.Collision;
+        }
+
+
+    }
+}

+ 0 - 0
NetRumble/Content/Audio/wav/asteroid_touch.wav → NetRumble/Core/Content/Audio/wav/asteroid_touch.wav


+ 0 - 0
NetRumble/Content/Audio/wav/asteroid_touch.xnb → NetRumble/Core/Content/Audio/wav/asteroid_touch.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/explosion_large.wav → NetRumble/Core/Content/Audio/wav/explosion_large.wav


+ 0 - 0
NetRumble/Content/Audio/wav/explosion_large.xnb → NetRumble/Core/Content/Audio/wav/explosion_large.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/explosion_medium.wav → NetRumble/Core/Content/Audio/wav/explosion_medium.wav


+ 0 - 0
NetRumble/Content/Audio/wav/explosion_medium.xnb → NetRumble/Core/Content/Audio/wav/explosion_medium.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/explosion_shockwave.wav → NetRumble/Core/Content/Audio/wav/explosion_shockwave.wav


+ 0 - 0
NetRumble/Content/Audio/wav/explosion_shockwave.xnb → NetRumble/Core/Content/Audio/wav/explosion_shockwave.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/fire_laser1.wav → NetRumble/Core/Content/Audio/wav/fire_laser1.wav


+ 0 - 0
NetRumble/Content/Audio/wav/fire_laser1.xnb → NetRumble/Core/Content/Audio/wav/fire_laser1.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/fire_laser2.wav → NetRumble/Core/Content/Audio/wav/fire_laser2.wav


+ 0 - 0
NetRumble/Content/Audio/wav/fire_laser2.xnb → NetRumble/Core/Content/Audio/wav/fire_laser2.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/fire_laser3.wav → NetRumble/Core/Content/Audio/wav/fire_laser3.wav


+ 0 - 0
NetRumble/Content/Audio/wav/fire_laser3.xnb → NetRumble/Core/Content/Audio/wav/fire_laser3.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/fire_rocket1.wav → NetRumble/Core/Content/Audio/wav/fire_rocket1.wav


+ 0 - 0
NetRumble/Content/Audio/wav/fire_rocket1.xnb → NetRumble/Core/Content/Audio/wav/fire_rocket1.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/fire_rocket2.wav → NetRumble/Core/Content/Audio/wav/fire_rocket2.wav


+ 0 - 0
NetRumble/Content/Audio/wav/fire_rocket2.xnb → NetRumble/Core/Content/Audio/wav/fire_rocket2.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/menu_scroll.wav → NetRumble/Core/Content/Audio/wav/menu_scroll.wav


+ 0 - 0
NetRumble/Content/Audio/wav/menu_scroll.xnb → NetRumble/Core/Content/Audio/wav/menu_scroll.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/menu_select.wav → NetRumble/Core/Content/Audio/wav/menu_select.wav


+ 0 - 0
NetRumble/Content/Audio/wav/menu_select.xnb → NetRumble/Core/Content/Audio/wav/menu_select.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/player_spawn.wav → NetRumble/Core/Content/Audio/wav/player_spawn.wav


+ 0 - 0
NetRumble/Content/Audio/wav/player_spawn.xnb → NetRumble/Core/Content/Audio/wav/player_spawn.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/powerup_spawn.wav → NetRumble/Core/Content/Audio/wav/powerup_spawn.wav


+ 0 - 0
NetRumble/Content/Audio/wav/powerup_spawn.xnb → NetRumble/Core/Content/Audio/wav/powerup_spawn.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/powerup_touch.wav → NetRumble/Core/Content/Audio/wav/powerup_touch.wav


+ 0 - 0
NetRumble/Content/Audio/wav/powerup_touch.xnb → NetRumble/Core/Content/Audio/wav/powerup_touch.xnb


+ 0 - 0
NetRumble/Content/Audio/wav/rocket.wav → NetRumble/Core/Content/Audio/wav/rocket.wav


+ 0 - 0
NetRumble/Content/Audio/wav/rocket.xnb → NetRumble/Core/Content/Audio/wav/rocket.xnb


BIN
NetRumble/Core/Content/Effects/Clouds.xnb


+ 47 - 47
NetRumble/Content/Fonts/MenuFont.spritefont → NetRumble/Core/Content/Fonts/MenuFont.spritefont

@@ -1,48 +1,48 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-This file contains an xml description of a font, and will be read by the XNA
-Framework Content Pipeline. Follow the comments to customize the appearance
-of the font in your game, and to change the characters which are available to draw
-with.
--->
-<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
-  <Asset Type="Graphics:FontDescription">
-
-    <!--
-    Modify this string to change the font that will be imported.
-    -->
-    <FontName>Verdana</FontName>
-
-    <!--
-    Size is a float value, measured in points. Modify this value to change
-    the size of the font.
-    -->
-    <Size>16</Size>
-
-    <!--
-    Spacing is a float value, measured in pixels. Modify this value to change
-    the amount of spacing in between characters.
-    -->
-    <Spacing>1</Spacing>
-
-    <!--
-    Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
-    and "Bold, Italic", and are case sensitive.
-    -->
-    <Style>Regular</Style>
-
-    <!--
-    CharacterRegions control what letters are available in the font. Every
-    character from Start to End will be built and made available for drawing. The
-    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
-    character set. The characters are ordered according to the Unicode standard.
-    See the documentation for more information.
-    -->
-    <CharacterRegions>
-      <CharacterRegion>
-        <Start>&#32;</Start>
-        <End>&#126;</End>
-      </CharacterRegion>
-    </CharacterRegions>
-  </Asset>
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+This file contains an xml description of a font, and will be read by the XNA
+Framework Content Pipeline. Follow the comments to customize the appearance
+of the font in your game, and to change the characters which are available to draw
+with.
+-->
+<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
+  <Asset Type="Graphics:FontDescription">
+
+    <!--
+    Modify this string to change the font that will be imported.
+    -->
+    <FontName>Verdana</FontName>
+
+    <!--
+    Size is a float value, measured in points. Modify this value to change
+    the size of the font.
+    -->
+    <Size>16</Size>
+
+    <!--
+    Spacing is a float value, measured in pixels. Modify this value to change
+    the amount of spacing in between characters.
+    -->
+    <Spacing>1</Spacing>
+
+    <!--
+    Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
+    and "Bold, Italic", and are case sensitive.
+    -->
+    <Style>Regular</Style>
+
+    <!--
+    CharacterRegions control what letters are available in the font. Every
+    character from Start to End will be built and made available for drawing. The
+    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
+    character set. The characters are ordered according to the Unicode standard.
+    See the documentation for more information.
+    -->
+    <CharacterRegions>
+      <CharacterRegion>
+        <Start>&#32;</Start>
+        <End>&#126;</End>
+      </CharacterRegion>
+    </CharacterRegions>
+  </Asset>
 </XnaContent>

+ 0 - 0
NetRumble/Content/Fonts/MenuFont.xnb → NetRumble/Core/Content/Fonts/MenuFont.xnb


+ 47 - 47
NetRumble/Content/Fonts/MessageBox.spritefont → NetRumble/Core/Content/Fonts/MessageBox.spritefont

@@ -1,48 +1,48 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-This file contains an xml description of a font, and will be read by the XNA
-Framework Content Pipeline. Follow the comments to customize the appearance
-of the font in your game, and to change the characters which are available to draw
-with.
--->
-<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
-  <Asset Type="Graphics:FontDescription">
-
-    <!--
-    Modify this string to change the font that will be imported.
-    -->
-    <FontName>Verdana</FontName>
-
-    <!--
-    Size is a float value, measured in points. Modify this value to change
-    the size of the font.
-    -->
-    <Size>16</Size>
-
-    <!--
-    Spacing is a float value, measured in pixels. Modify this value to change
-    the amount of spacing in between characters.
-    -->
-    <Spacing>1</Spacing>
-
-    <!--
-    Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
-    and "Bold, Italic", and are case sensitive.
-    -->
-    <Style>Regular</Style>
-
-    <!--
-    CharacterRegions control what letters are available in the font. Every
-    character from Start to End will be built and made available for drawing. The
-    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
-    character set. The characters are ordered according to the Unicode standard.
-    See the documentation for more information.
-    -->
-    <CharacterRegions>
-      <CharacterRegion>
-        <Start>&#32;</Start>
-        <End>&#126;</End>
-      </CharacterRegion>
-    </CharacterRegions>
-  </Asset>
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+This file contains an xml description of a font, and will be read by the XNA
+Framework Content Pipeline. Follow the comments to customize the appearance
+of the font in your game, and to change the characters which are available to draw
+with.
+-->
+<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
+  <Asset Type="Graphics:FontDescription">
+
+    <!--
+    Modify this string to change the font that will be imported.
+    -->
+    <FontName>Verdana</FontName>
+
+    <!--
+    Size is a float value, measured in points. Modify this value to change
+    the size of the font.
+    -->
+    <Size>16</Size>
+
+    <!--
+    Spacing is a float value, measured in pixels. Modify this value to change
+    the amount of spacing in between characters.
+    -->
+    <Spacing>1</Spacing>
+
+    <!--
+    Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
+    and "Bold, Italic", and are case sensitive.
+    -->
+    <Style>Regular</Style>
+
+    <!--
+    CharacterRegions control what letters are available in the font. Every
+    character from Start to End will be built and made available for drawing. The
+    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
+    character set. The characters are ordered according to the Unicode standard.
+    See the documentation for more information.
+    -->
+    <CharacterRegions>
+      <CharacterRegion>
+        <Start>&#32;</Start>
+        <End>&#126;</End>
+      </CharacterRegion>
+    </CharacterRegions>
+  </Asset>
 </XnaContent>

+ 0 - 0
NetRumble/Content/Fonts/MessageBox.xnb → NetRumble/Core/Content/Fonts/MessageBox.xnb


+ 0 - 0
NetRumble/Content/Fonts/NetRumbleFont.png → NetRumble/Core/Content/Fonts/NetRumbleFont.png


+ 0 - 0
NetRumble/Content/Fonts/NetRumbleFont.xnb → NetRumble/Core/Content/Fonts/NetRumbleFont.xnb


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


+ 0 - 0
NetRumble/GameThumbnail.png → NetRumble/Core/Content/GameThumbnail.png


+ 0 - 0
NetRumble/Content/One Step Beyond.wma → NetRumble/Core/Content/One Step Beyond.wma


+ 0 - 0
NetRumble/Content/One Step Beyond.xnb → NetRumble/Core/Content/One Step Beyond.xnb


+ 45 - 45
NetRumble/Content/Particles/laserExplosion.xml → NetRumble/Core/Content/Particles/laserExplosion.xml

@@ -1,46 +1,46 @@
-<?xml version="1.0"?>
-<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <Name>LaserExplosion</Name>
-  <Position>
-    <X>0</X>
-    <Y>0</Y>
-  </Position>
-  <ParticleSystems>
-    <ParticleSystem>
-      <Name>Smoke</Name>
-      <ParticleCount>36</ParticleCount>
-      <ParticlesPerSecond>256</ParticlesPerSecond>
-      <Duration>1</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/smoke</TextureName>
-      <BlendMode>AlphaBlend</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>0.5019608</X>
-        <Y>0.5019608</Y>
-        <Z>0.5019608</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>4</VelocityMinimum>
-      <VelocityMaximum>8</VelocityMaximum>
-      <AccelerationMinimum>-1</AccelerationMinimum>
-      <AccelerationMaximum>-2</AccelerationMaximum>
-      <ScaleMinimum>0.07</ScaleMinimum>
-      <ScaleMaximum>0.12</ScaleMaximum>
-      <OpacityMinimum>0.5</OpacityMinimum>
-      <OpacityMaximum>0.75</OpacityMaximum>
-      <DurationMinimum>1</DurationMinimum>
-      <DurationMaximum>1</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>6</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
-      <AngularVelocity>1.5</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.3</OpacityDeltaPerSecond>
-    </ParticleSystem>
-  </ParticleSystems>
+<?xml version="1.0"?>
+<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Name>LaserExplosion</Name>
+  <Position>
+    <X>0</X>
+    <Y>0</Y>
+  </Position>
+  <ParticleSystems>
+    <ParticleSystem>
+      <Name>Smoke</Name>
+      <ParticleCount>36</ParticleCount>
+      <ParticlesPerSecond>256</ParticlesPerSecond>
+      <Duration>1</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/smoke</TextureName>
+      <BlendMode>AlphaBlend</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>0.5019608</X>
+        <Y>0.5019608</Y>
+        <Z>0.5019608</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>4</VelocityMinimum>
+      <VelocityMaximum>8</VelocityMaximum>
+      <AccelerationMinimum>-1</AccelerationMinimum>
+      <AccelerationMaximum>-2</AccelerationMaximum>
+      <ScaleMinimum>0.07</ScaleMinimum>
+      <ScaleMaximum>0.12</ScaleMaximum>
+      <OpacityMinimum>0.5</OpacityMinimum>
+      <OpacityMaximum>0.75</OpacityMaximum>
+      <DurationMinimum>1</DurationMinimum>
+      <DurationMaximum>1</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>6</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
+      <AngularVelocity>1.5</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.3</OpacityDeltaPerSecond>
+    </ParticleSystem>
+  </ParticleSystems>
 </ParticleEffect>

+ 81 - 81
NetRumble/Content/Particles/mineExplosion.xml → NetRumble/Core/Content/Particles/mineExplosion.xml

@@ -1,82 +1,82 @@
-<?xml version="1.0"?>
-<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <Name>MineExplosion</Name>
-  <Position>
-    <X>0</X>
-    <Y>0</Y>
-  </Position>
-  <ParticleSystems>
-    <ParticleSystem>
-      <Name>Fire</Name>
-      <ParticleCount>128</ParticleCount>
-      <ParticlesPerSecond>2048</ParticlesPerSecond>
-      <Duration>2</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>1</X>
-        <Y>0.3019608</Y>
-        <Z>0.0654902</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>48</VelocityMinimum>
-      <VelocityMaximum>64</VelocityMaximum>
-      <AccelerationMinimum>-4</AccelerationMinimum>
-      <AccelerationMaximum>-16</AccelerationMaximum>
-      <ScaleMinimum>0.2</ScaleMinimum>
-      <ScaleMaximum>0.3</ScaleMaximum>
-      <OpacityMinimum>0.5</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>2</DurationMinimum>
-      <DurationMaximum>2</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>8</ReleaseDistanceMaximum>
-      <AngularVelocity>0</AngularVelocity>
-      <ScaleDeltaPerSecond>0.5</ScaleDeltaPerSecond>
-      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
-    </ParticleSystem>
-    <ParticleSystem>
-      <Name>Sparks</Name>
-      <ParticleCount>64</ParticleCount>
-      <ParticlesPerSecond>2048</ParticlesPerSecond>
-      <Duration>2</Duration>
-      <InitialDelay>0.05</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>1</X>
-        <Y>0.5</Y>
-        <Z>0.1254902</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>48</VelocityMinimum>
-      <VelocityMaximum>64</VelocityMaximum>
-      <AccelerationMinimum>-32</AccelerationMinimum>
-      <AccelerationMaximum>-32</AccelerationMaximum>
-      <ScaleMinimum>0.1</ScaleMinimum>
-      <ScaleMaximum>0.2</ScaleMaximum>
-      <OpacityMinimum>0.25</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>2</DurationMinimum>
-      <DurationMaximum>2</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
-      <AngularVelocity>0</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
-    </ParticleSystem>
-  </ParticleSystems>
+<?xml version="1.0"?>
+<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Name>MineExplosion</Name>
+  <Position>
+    <X>0</X>
+    <Y>0</Y>
+  </Position>
+  <ParticleSystems>
+    <ParticleSystem>
+      <Name>Fire</Name>
+      <ParticleCount>128</ParticleCount>
+      <ParticlesPerSecond>2048</ParticlesPerSecond>
+      <Duration>2</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>1</X>
+        <Y>0.3019608</Y>
+        <Z>0.0654902</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>48</VelocityMinimum>
+      <VelocityMaximum>64</VelocityMaximum>
+      <AccelerationMinimum>-4</AccelerationMinimum>
+      <AccelerationMaximum>-16</AccelerationMaximum>
+      <ScaleMinimum>0.2</ScaleMinimum>
+      <ScaleMaximum>0.3</ScaleMaximum>
+      <OpacityMinimum>0.5</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>2</DurationMinimum>
+      <DurationMaximum>2</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>8</ReleaseDistanceMaximum>
+      <AngularVelocity>0</AngularVelocity>
+      <ScaleDeltaPerSecond>0.5</ScaleDeltaPerSecond>
+      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
+    </ParticleSystem>
+    <ParticleSystem>
+      <Name>Sparks</Name>
+      <ParticleCount>64</ParticleCount>
+      <ParticlesPerSecond>2048</ParticlesPerSecond>
+      <Duration>2</Duration>
+      <InitialDelay>0.05</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>1</X>
+        <Y>0.5</Y>
+        <Z>0.1254902</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>48</VelocityMinimum>
+      <VelocityMaximum>64</VelocityMaximum>
+      <AccelerationMinimum>-32</AccelerationMinimum>
+      <AccelerationMaximum>-32</AccelerationMaximum>
+      <ScaleMinimum>0.1</ScaleMinimum>
+      <ScaleMaximum>0.2</ScaleMaximum>
+      <OpacityMinimum>0.25</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>2</DurationMinimum>
+      <DurationMaximum>2</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
+      <AngularVelocity>0</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
+    </ParticleSystem>
+  </ParticleSystems>
 </ParticleEffect>

+ 81 - 81
NetRumble/Content/Particles/rocketExplosion.xml → NetRumble/Core/Content/Particles/rocketExplosion.xml

@@ -1,82 +1,82 @@
-<?xml version="1.0"?>
-<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <Name>RocketExplosion</Name>
-  <Position>
-    <X>0</X>
-    <Y>0</Y>
-  </Position>
-  <ParticleSystems>
-    <ParticleSystem>
-      <Name>Fire</Name>
-      <ParticleCount>128</ParticleCount>
-      <ParticlesPerSecond>2048</ParticlesPerSecond>
-      <Duration>3</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>1</X>
-        <Y>0.5019608</Y>
-        <Z>0.1254902</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>50</VelocityMinimum>
-      <VelocityMaximum>200</VelocityMaximum>
-      <AccelerationMinimum>-4</AccelerationMinimum>
-      <AccelerationMaximum>-16</AccelerationMaximum>
-      <ScaleMinimum>0.25</ScaleMinimum>
-      <ScaleMaximum>0.50</ScaleMaximum>
-      <OpacityMinimum>0.5</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>3</DurationMinimum>
-      <DurationMaximum>3</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>16</ReleaseDistanceMaximum>
-      <AngularVelocity>0</AngularVelocity>
-      <ScaleDeltaPerSecond>0.5</ScaleDeltaPerSecond>
-      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
-    </ParticleSystem>
-    <ParticleSystem>
-      <Name>Sparks</Name>
-      <ParticleCount>64</ParticleCount>
-      <ParticlesPerSecond>2048</ParticlesPerSecond>
-      <Duration>3</Duration>
-      <InitialDelay>0.05</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>1</X>
-        <Y>1</Y>
-        <Z>0.1254902</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>150</VelocityMinimum>
-      <VelocityMaximum>200</VelocityMaximum>
-      <AccelerationMinimum>-32</AccelerationMinimum>
-      <AccelerationMaximum>-32</AccelerationMaximum>
-      <ScaleMinimum>0.2</ScaleMinimum>
-      <ScaleMaximum>0.4</ScaleMaximum>
-      <OpacityMinimum>0.25</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>3</DurationMinimum>
-      <DurationMaximum>3</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
-      <AngularVelocity>0</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
-    </ParticleSystem>
-  </ParticleSystems>
+<?xml version="1.0"?>
+<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Name>RocketExplosion</Name>
+  <Position>
+    <X>0</X>
+    <Y>0</Y>
+  </Position>
+  <ParticleSystems>
+    <ParticleSystem>
+      <Name>Fire</Name>
+      <ParticleCount>128</ParticleCount>
+      <ParticlesPerSecond>2048</ParticlesPerSecond>
+      <Duration>3</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>1</X>
+        <Y>0.5019608</Y>
+        <Z>0.1254902</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>50</VelocityMinimum>
+      <VelocityMaximum>200</VelocityMaximum>
+      <AccelerationMinimum>-4</AccelerationMinimum>
+      <AccelerationMaximum>-16</AccelerationMaximum>
+      <ScaleMinimum>0.25</ScaleMinimum>
+      <ScaleMaximum>0.50</ScaleMaximum>
+      <OpacityMinimum>0.5</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>3</DurationMinimum>
+      <DurationMaximum>3</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>16</ReleaseDistanceMaximum>
+      <AngularVelocity>0</AngularVelocity>
+      <ScaleDeltaPerSecond>0.5</ScaleDeltaPerSecond>
+      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
+    </ParticleSystem>
+    <ParticleSystem>
+      <Name>Sparks</Name>
+      <ParticleCount>64</ParticleCount>
+      <ParticlesPerSecond>2048</ParticlesPerSecond>
+      <Duration>3</Duration>
+      <InitialDelay>0.05</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>1</X>
+        <Y>1</Y>
+        <Z>0.1254902</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>150</VelocityMinimum>
+      <VelocityMaximum>200</VelocityMaximum>
+      <AccelerationMinimum>-32</AccelerationMinimum>
+      <AccelerationMaximum>-32</AccelerationMaximum>
+      <ScaleMinimum>0.2</ScaleMinimum>
+      <ScaleMaximum>0.4</ScaleMaximum>
+      <OpacityMinimum>0.25</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>3</DurationMinimum>
+      <DurationMaximum>3</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
+      <AngularVelocity>0</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
+    </ParticleSystem>
+  </ParticleSystems>
 </ParticleEffect>

+ 117 - 117
NetRumble/Content/Particles/rocketTrail.xml → NetRumble/Core/Content/Particles/rocketTrail.xml

@@ -1,118 +1,118 @@
-<?xml version="1.0"?>
-<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <Name>Rocket</Name>
-  <Position>
-    <X>0</X>
-    <Y>0</Y>
-  </Position>
-  <ParticleSystems>
-    <ParticleSystem>
-      <Name>Smoke</Name>
-      <ParticleCount>256</ParticleCount>
-      <ParticlesPerSecond>64</ParticlesPerSecond>
-      <Duration>3.40282347E+38</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/smoke</TextureName>
-      <BlendMode>AlphaBlend</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>0.5019608</X>
-        <Y>0.5019608</Y>
-        <Z>0.5019608</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>8</VelocityMinimum>
-      <VelocityMaximum>24</VelocityMaximum>
-      <AccelerationMinimum>0</AccelerationMinimum>
-      <AccelerationMaximum>0</AccelerationMaximum>
-      <ScaleMinimum>0.25</ScaleMinimum>
-      <ScaleMaximum>0.5</ScaleMaximum>
-      <OpacityMinimum>0.75</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>3</DurationMinimum>
-      <DurationMaximum>3</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>0.25</ScaleDeltaPerSecond>
-      <AngularVelocity>1</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
-    </ParticleSystem>
-    <ParticleSystem>
-      <Name>Fire</Name>
-      <ParticleCount>256</ParticleCount>
-      <ParticlesPerSecond>128</ParticlesPerSecond>
-      <Duration>3.40282347E+38</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>1</X>
-        <Y>0.5019608</Y>
-        <Z>0.2509804</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>8</VelocityMinimum>
-      <VelocityMaximum>12</VelocityMaximum>
-      <AccelerationMinimum>0</AccelerationMinimum>
-      <AccelerationMaximum>0</AccelerationMaximum>
-      <ScaleMinimum>0.75</ScaleMinimum>
-      <ScaleMaximum>1.0</ScaleMaximum>
-      <OpacityMinimum>1</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>1</DurationMinimum>
-      <DurationMaximum>1.5</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>0.25</ScaleDeltaPerSecond>
-      <AngularVelocity>0</AngularVelocity>
-      <OpacityDeltaPerSecond>-8</OpacityDeltaPerSecond>
-    </ParticleSystem>
-    <ParticleSystem>
-      <Name>Sparks</Name>
-      <ParticleCount>128</ParticleCount>
-      <ParticlesPerSecond>40</ParticlesPerSecond>
-      <Duration>3.40282347E+38</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/spark</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>1</X>
-        <Y>1</Y>
-        <Z>0.1254902</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>8</VelocityMinimum>
-      <VelocityMaximum>12</VelocityMaximum>
-      <AccelerationMinimum>0</AccelerationMinimum>
-      <AccelerationMaximum>0</AccelerationMaximum>
-      <ScaleMinimum>1.0</ScaleMinimum>
-      <ScaleMaximum>1.0</ScaleMaximum>
-      <OpacityMinimum>0.25</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>3</DurationMinimum>
-      <DurationMaximum>3</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
-      <AngularVelocity>0</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.33</OpacityDeltaPerSecond>
-    </ParticleSystem>
-  </ParticleSystems>
+<?xml version="1.0"?>
+<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Name>Rocket</Name>
+  <Position>
+    <X>0</X>
+    <Y>0</Y>
+  </Position>
+  <ParticleSystems>
+    <ParticleSystem>
+      <Name>Smoke</Name>
+      <ParticleCount>256</ParticleCount>
+      <ParticlesPerSecond>64</ParticlesPerSecond>
+      <Duration>3.40282347E+38</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/smoke</TextureName>
+      <BlendMode>AlphaBlend</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>0.5019608</X>
+        <Y>0.5019608</Y>
+        <Z>0.5019608</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>8</VelocityMinimum>
+      <VelocityMaximum>24</VelocityMaximum>
+      <AccelerationMinimum>0</AccelerationMinimum>
+      <AccelerationMaximum>0</AccelerationMaximum>
+      <ScaleMinimum>0.25</ScaleMinimum>
+      <ScaleMaximum>0.5</ScaleMaximum>
+      <OpacityMinimum>0.75</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>3</DurationMinimum>
+      <DurationMaximum>3</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>0.25</ScaleDeltaPerSecond>
+      <AngularVelocity>1</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
+    </ParticleSystem>
+    <ParticleSystem>
+      <Name>Fire</Name>
+      <ParticleCount>256</ParticleCount>
+      <ParticlesPerSecond>128</ParticlesPerSecond>
+      <Duration>3.40282347E+38</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>1</X>
+        <Y>0.5019608</Y>
+        <Z>0.2509804</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>8</VelocityMinimum>
+      <VelocityMaximum>12</VelocityMaximum>
+      <AccelerationMinimum>0</AccelerationMinimum>
+      <AccelerationMaximum>0</AccelerationMaximum>
+      <ScaleMinimum>0.75</ScaleMinimum>
+      <ScaleMaximum>1.0</ScaleMaximum>
+      <OpacityMinimum>1</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>1</DurationMinimum>
+      <DurationMaximum>1.5</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>0.25</ScaleDeltaPerSecond>
+      <AngularVelocity>0</AngularVelocity>
+      <OpacityDeltaPerSecond>-8</OpacityDeltaPerSecond>
+    </ParticleSystem>
+    <ParticleSystem>
+      <Name>Sparks</Name>
+      <ParticleCount>128</ParticleCount>
+      <ParticlesPerSecond>40</ParticlesPerSecond>
+      <Duration>3.40282347E+38</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/spark</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>1</X>
+        <Y>1</Y>
+        <Z>0.1254902</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>8</VelocityMinimum>
+      <VelocityMaximum>12</VelocityMaximum>
+      <AccelerationMinimum>0</AccelerationMinimum>
+      <AccelerationMaximum>0</AccelerationMaximum>
+      <ScaleMinimum>1.0</ScaleMinimum>
+      <ScaleMaximum>1.0</ScaleMaximum>
+      <OpacityMinimum>0.25</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>3</DurationMinimum>
+      <DurationMaximum>3</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
+      <AngularVelocity>0</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.33</OpacityDeltaPerSecond>
+    </ParticleSystem>
+  </ParticleSystems>
 </ParticleEffect>

+ 153 - 153
NetRumble/Content/Particles/shipExplosion.xml → NetRumble/Core/Content/Particles/shipExplosion.xml

@@ -1,154 +1,154 @@
-<?xml version="1.0"?>
-<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <Name>ShipExplosion</Name>
-  <Position>
-    <X>0</X>
-    <Y>0</Y>
-  </Position>
-  <ParticleSystems>
-    <ParticleSystem>
-      <Name>Wave</Name>
-      <ParticleCount>1</ParticleCount>
-      <ParticlesPerSecond>100</ParticlesPerSecond>
-      <Duration>4</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>0.7529412</X>
-        <Y>0.627451</Y>
-        <Z>0.5019608</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>0</VelocityMinimum>
-      <VelocityMaximum>0</VelocityMaximum>
-      <AccelerationMinimum>0</AccelerationMinimum>
-      <AccelerationMaximum>0</AccelerationMaximum>
-      <ScaleMinimum>0</ScaleMinimum>
-      <ScaleMaximum>0</ScaleMaximum>
-      <OpacityMinimum>0.75</OpacityMinimum>
-      <OpacityMaximum>0.75</OpacityMaximum>
-      <DurationMinimum>4</DurationMinimum>
-      <DurationMaximum>4</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>24</ScaleDeltaPerSecond>
-      <AngularVelocity>0</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
-    </ParticleSystem>
-    <ParticleSystem>
-      <Name>Smoke</Name>
-      <ParticleCount>320</ParticleCount>
-      <ParticlesPerSecond>1024</ParticlesPerSecond>
-      <Duration>4</Duration>
-      <InitialDelay>0.25</InitialDelay>
-      <TextureName>Textures/Particles/smoke</TextureName>
-      <BlendMode>AlphaBlend</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>0.5019608</X>
-        <Y>0.5019608</Y>
-        <Z>0.5019608</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>16</VelocityMinimum>
-      <VelocityMaximum>128</VelocityMaximum>
-      <AccelerationMinimum>-8</AccelerationMinimum>
-      <AccelerationMaximum>-32</AccelerationMaximum>
-      <ScaleMinimum>0.25</ScaleMinimum>
-      <ScaleMaximum>0.5</ScaleMaximum>
-      <OpacityMinimum>0.75</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>4</DurationMinimum>
-      <DurationMaximum>4</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>0.75</ScaleDeltaPerSecond>
-      <AngularVelocity>1.5</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.25</OpacityDeltaPerSecond>
-    </ParticleSystem>
-    <ParticleSystem>
-      <Name>Fire</Name>
-      <ParticleCount>512</ParticleCount>
-      <ParticlesPerSecond>2048</ParticlesPerSecond>
-      <Duration>4</Duration>
-      <InitialDelay>0.1</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>1</X>
-        <Y>0.5019608</Y>
-        <Z>0.1254902</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>16</VelocityMinimum>
-      <VelocityMaximum>128</VelocityMaximum>
-      <AccelerationMinimum>-8</AccelerationMinimum>
-      <AccelerationMaximum>-32</AccelerationMaximum>
-      <ScaleMinimum>0.5</ScaleMinimum>
-      <ScaleMaximum>0.75</ScaleMaximum>
-      <OpacityMinimum>0.25</OpacityMinimum>
-      <OpacityMaximum>0.75</OpacityMaximum>
-      <DurationMinimum>4</DurationMinimum>
-      <DurationMaximum>4</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>2.5</ScaleDeltaPerSecond>
-      <AngularVelocity>0</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
-    </ParticleSystem>
-    <ParticleSystem>
-      <Name>Sparks</Name>
-      <ParticleCount>256</ParticleCount>
-      <ParticlesPerSecond>1024</ParticlesPerSecond>
-      <Duration>4</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>0</X>
-        <Y>0</Y>
-      </Position>
-      <Color>
-        <X>1</X>
-        <Y>1</Y>
-        <Z>0.1254902</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>128</VelocityMinimum>
-      <VelocityMaximum>256</VelocityMaximum>
-      <AccelerationMinimum>-32</AccelerationMinimum>
-      <AccelerationMaximum>-64</AccelerationMaximum>
-      <ScaleMinimum>0.1</ScaleMinimum>
-      <ScaleMaximum>0.2</ScaleMaximum>
-      <OpacityMinimum>0.25</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>4</DurationMinimum>
-      <DurationMaximum>4</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
-      <AngularVelocity>0</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.33</OpacityDeltaPerSecond>
-    </ParticleSystem>
-  </ParticleSystems>
+<?xml version="1.0"?>
+<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Name>ShipExplosion</Name>
+  <Position>
+    <X>0</X>
+    <Y>0</Y>
+  </Position>
+  <ParticleSystems>
+    <ParticleSystem>
+      <Name>Wave</Name>
+      <ParticleCount>1</ParticleCount>
+      <ParticlesPerSecond>100</ParticlesPerSecond>
+      <Duration>4</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>0.7529412</X>
+        <Y>0.627451</Y>
+        <Z>0.5019608</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>0</VelocityMinimum>
+      <VelocityMaximum>0</VelocityMaximum>
+      <AccelerationMinimum>0</AccelerationMinimum>
+      <AccelerationMaximum>0</AccelerationMaximum>
+      <ScaleMinimum>0</ScaleMinimum>
+      <ScaleMaximum>0</ScaleMaximum>
+      <OpacityMinimum>0.75</OpacityMinimum>
+      <OpacityMaximum>0.75</OpacityMaximum>
+      <DurationMinimum>4</DurationMinimum>
+      <DurationMaximum>4</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>24</ScaleDeltaPerSecond>
+      <AngularVelocity>0</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
+    </ParticleSystem>
+    <ParticleSystem>
+      <Name>Smoke</Name>
+      <ParticleCount>320</ParticleCount>
+      <ParticlesPerSecond>1024</ParticlesPerSecond>
+      <Duration>4</Duration>
+      <InitialDelay>0.25</InitialDelay>
+      <TextureName>Textures/Particles/smoke</TextureName>
+      <BlendMode>AlphaBlend</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>0.5019608</X>
+        <Y>0.5019608</Y>
+        <Z>0.5019608</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>16</VelocityMinimum>
+      <VelocityMaximum>128</VelocityMaximum>
+      <AccelerationMinimum>-8</AccelerationMinimum>
+      <AccelerationMaximum>-32</AccelerationMaximum>
+      <ScaleMinimum>0.25</ScaleMinimum>
+      <ScaleMaximum>0.5</ScaleMaximum>
+      <OpacityMinimum>0.75</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>4</DurationMinimum>
+      <DurationMaximum>4</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>0.75</ScaleDeltaPerSecond>
+      <AngularVelocity>1.5</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.25</OpacityDeltaPerSecond>
+    </ParticleSystem>
+    <ParticleSystem>
+      <Name>Fire</Name>
+      <ParticleCount>512</ParticleCount>
+      <ParticlesPerSecond>2048</ParticlesPerSecond>
+      <Duration>4</Duration>
+      <InitialDelay>0.1</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>1</X>
+        <Y>0.5019608</Y>
+        <Z>0.1254902</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>16</VelocityMinimum>
+      <VelocityMaximum>128</VelocityMaximum>
+      <AccelerationMinimum>-8</AccelerationMinimum>
+      <AccelerationMaximum>-32</AccelerationMaximum>
+      <ScaleMinimum>0.5</ScaleMinimum>
+      <ScaleMaximum>0.75</ScaleMaximum>
+      <OpacityMinimum>0.25</OpacityMinimum>
+      <OpacityMaximum>0.75</OpacityMaximum>
+      <DurationMinimum>4</DurationMinimum>
+      <DurationMaximum>4</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>2.5</ScaleDeltaPerSecond>
+      <AngularVelocity>0</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
+    </ParticleSystem>
+    <ParticleSystem>
+      <Name>Sparks</Name>
+      <ParticleCount>256</ParticleCount>
+      <ParticlesPerSecond>1024</ParticlesPerSecond>
+      <Duration>4</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>0</X>
+        <Y>0</Y>
+      </Position>
+      <Color>
+        <X>1</X>
+        <Y>1</Y>
+        <Z>0.1254902</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>128</VelocityMinimum>
+      <VelocityMaximum>256</VelocityMaximum>
+      <AccelerationMinimum>-32</AccelerationMinimum>
+      <AccelerationMaximum>-64</AccelerationMaximum>
+      <ScaleMinimum>0.1</ScaleMinimum>
+      <ScaleMaximum>0.2</ScaleMaximum>
+      <OpacityMinimum>0.25</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>4</DurationMinimum>
+      <DurationMaximum>4</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>0</ScaleDeltaPerSecond>
+      <AngularVelocity>0</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.33</OpacityDeltaPerSecond>
+    </ParticleSystem>
+  </ParticleSystems>
 </ParticleEffect>

+ 81 - 81
NetRumble/Content/Particles/shipSpawn.xml → NetRumble/Core/Content/Particles/shipSpawn.xml

@@ -1,82 +1,82 @@
-<?xml version="1.0"?>
-<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
-  <Name>ParticleEffect</Name>
-  <Position>
-    <X>400</X>
-    <Y>300</Y>
-  </Position>
-  <ParticleSystems>
-    <ParticleSystem>
-      <Name>Noise</Name>
-      <ParticleCount>256</ParticleCount>
-      <ParticlesPerSecond>32</ParticlesPerSecond>
-      <Duration>0</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>400</X>
-        <Y>300</Y>
-      </Position>
-      <Color>
-        <X>0.7529412</X>
-        <Y>0.5019608</Y>
-        <Z>0.1254902</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>0</VelocityMinimum>
-      <VelocityMaximum>0</VelocityMaximum>
-      <AccelerationMinimum>0</AccelerationMinimum>
-      <AccelerationMaximum>0</AccelerationMaximum>
-      <ScaleMinimum>0</ScaleMinimum>
-      <ScaleMaximum>0</ScaleMaximum>
-      <OpacityMinimum>1</OpacityMinimum>
-      <OpacityMaximum>1</OpacityMaximum>
-      <DurationMinimum>3</DurationMinimum>
-      <DurationMaximum>3</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>32</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>0.5</ScaleDeltaPerSecond>
-      <AngularVelocity>0</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
-    </ParticleSystem>
-    <ParticleSystem>
-      <Name>Blast</Name>
-      <ParticleCount>8</ParticleCount>
-      <ParticlesPerSecond>1000</ParticlesPerSecond>
-      <Duration>1</Duration>
-      <InitialDelay>0</InitialDelay>
-      <TextureName>Textures/Particles/particle</TextureName>
-      <BlendMode>Additive</BlendMode>
-      <Position>
-        <X>400</X>
-        <Y>300</Y>
-      </Position>
-      <Color>
-        <X>0.25</X>
-        <Y>0.25</Y>
-        <Z>0.75</Z>
-        <W>1</W>
-      </Color>
-      <VelocityMinimum>0</VelocityMinimum>
-      <VelocityMaximum>0</VelocityMaximum>
-      <AccelerationMinimum>0</AccelerationMinimum>
-      <AccelerationMaximum>0</AccelerationMaximum>
-      <ScaleMinimum>0</ScaleMinimum>
-      <ScaleMaximum>0</ScaleMaximum>
-      <OpacityMinimum>1</OpacityMinimum>
-      <OpacityMaximum>0.75</OpacityMaximum>
-      <DurationMinimum>3</DurationMinimum>
-      <DurationMaximum>3</DurationMaximum>
-      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
-      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
-      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
-      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
-      <ScaleDeltaPerSecond>4</ScaleDeltaPerSecond>
-      <AngularVelocity>0</AngularVelocity>
-      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
-    </ParticleSystem>
-  </ParticleSystems>
+<?xml version="1.0"?>
+<ParticleEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <Name>ParticleEffect</Name>
+  <Position>
+    <X>400</X>
+    <Y>300</Y>
+  </Position>
+  <ParticleSystems>
+    <ParticleSystem>
+      <Name>Noise</Name>
+      <ParticleCount>256</ParticleCount>
+      <ParticlesPerSecond>32</ParticlesPerSecond>
+      <Duration>0</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>400</X>
+        <Y>300</Y>
+      </Position>
+      <Color>
+        <X>0.7529412</X>
+        <Y>0.5019608</Y>
+        <Z>0.1254902</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>0</VelocityMinimum>
+      <VelocityMaximum>0</VelocityMaximum>
+      <AccelerationMinimum>0</AccelerationMinimum>
+      <AccelerationMaximum>0</AccelerationMaximum>
+      <ScaleMinimum>0</ScaleMinimum>
+      <ScaleMaximum>0</ScaleMaximum>
+      <OpacityMinimum>1</OpacityMinimum>
+      <OpacityMaximum>1</OpacityMaximum>
+      <DurationMinimum>3</DurationMinimum>
+      <DurationMaximum>3</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>32</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>0.5</ScaleDeltaPerSecond>
+      <AngularVelocity>0</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
+    </ParticleSystem>
+    <ParticleSystem>
+      <Name>Blast</Name>
+      <ParticleCount>8</ParticleCount>
+      <ParticlesPerSecond>1000</ParticlesPerSecond>
+      <Duration>1</Duration>
+      <InitialDelay>0</InitialDelay>
+      <TextureName>Textures/Particles/particle</TextureName>
+      <BlendMode>Additive</BlendMode>
+      <Position>
+        <X>400</X>
+        <Y>300</Y>
+      </Position>
+      <Color>
+        <X>0.25</X>
+        <Y>0.25</Y>
+        <Z>0.75</Z>
+        <W>1</W>
+      </Color>
+      <VelocityMinimum>0</VelocityMinimum>
+      <VelocityMaximum>0</VelocityMaximum>
+      <AccelerationMinimum>0</AccelerationMinimum>
+      <AccelerationMaximum>0</AccelerationMaximum>
+      <ScaleMinimum>0</ScaleMinimum>
+      <ScaleMaximum>0</ScaleMaximum>
+      <OpacityMinimum>1</OpacityMinimum>
+      <OpacityMaximum>0.75</OpacityMaximum>
+      <DurationMinimum>3</DurationMinimum>
+      <DurationMaximum>3</DurationMaximum>
+      <ReleaseAngleMinimum>0</ReleaseAngleMinimum>
+      <ReleaseAngleMaximum>360</ReleaseAngleMaximum>
+      <ReleaseDistanceMinimum>0</ReleaseDistanceMinimum>
+      <ReleaseDistanceMaximum>0</ReleaseDistanceMaximum>
+      <ScaleDeltaPerSecond>4</ScaleDeltaPerSecond>
+      <AngularVelocity>0</AngularVelocity>
+      <OpacityDeltaPerSecond>-0.5</OpacityDeltaPerSecond>
+    </ParticleSystem>
+  </ParticleSystems>
 </ParticleEffect>

+ 0 - 0
NetRumble/Content/Textures/Particles/defaultParticle.PNG → NetRumble/Core/Content/Textures/Particles/defaultParticle.PNG


+ 0 - 0
NetRumble/Content/Textures/Particles/defaultParticle.xnb → NetRumble/Core/Content/Textures/Particles/defaultParticle.xnb


+ 0 - 0
NetRumble/Content/Textures/Particles/particle.png → NetRumble/Core/Content/Textures/Particles/particle.png


+ 0 - 0
NetRumble/Content/Textures/Particles/particle.xnb → NetRumble/Core/Content/Textures/Particles/particle.xnb


+ 0 - 0
NetRumble/Content/Textures/Particles/smoke.png → NetRumble/Core/Content/Textures/Particles/smoke.png


+ 0 - 0
NetRumble/Content/Textures/Particles/smoke.xnb → NetRumble/Core/Content/Textures/Particles/smoke.xnb


+ 0 - 0
NetRumble/Content/Textures/Particles/spark.png → NetRumble/Core/Content/Textures/Particles/spark.png


+ 0 - 0
NetRumble/Content/Textures/Particles/spark.xnb → NetRumble/Core/Content/Textures/Particles/spark.xnb


+ 0 - 0
NetRumble/Content/Textures/asteroid0.png → NetRumble/Core/Content/Textures/asteroid0.png


+ 0 - 0
NetRumble/Content/Textures/asteroid0.xnb → NetRumble/Core/Content/Textures/asteroid0.xnb


+ 0 - 0
NetRumble/Content/Textures/asteroid1.png → NetRumble/Core/Content/Textures/asteroid1.png


+ 0 - 0
NetRumble/Content/Textures/asteroid1.xnb → NetRumble/Core/Content/Textures/asteroid1.xnb


+ 0 - 0
NetRumble/Content/Textures/asteroid2.png → NetRumble/Core/Content/Textures/asteroid2.png


+ 0 - 0
NetRumble/Content/Textures/asteroid2.xnb → NetRumble/Core/Content/Textures/asteroid2.xnb


+ 0 - 0
NetRumble/Content/Textures/barrierEnd.png → NetRumble/Core/Content/Textures/barrierEnd.png


+ 0 - 0
NetRumble/Content/Textures/barrierEnd.xnb → NetRumble/Core/Content/Textures/barrierEnd.xnb


+ 0 - 0
NetRumble/Content/Textures/barrierPurple.png → NetRumble/Core/Content/Textures/barrierPurple.png


+ 0 - 0
NetRumble/Content/Textures/barrierPurple.xnb → NetRumble/Core/Content/Textures/barrierPurple.xnb


+ 0 - 0
NetRumble/Content/Textures/barrierRed.png → NetRumble/Core/Content/Textures/barrierRed.png


+ 0 - 0
NetRumble/Content/Textures/barrierRed.xnb → NetRumble/Core/Content/Textures/barrierRed.xnb


+ 0 - 0
NetRumble/Content/Textures/blank.png → NetRumble/Core/Content/Textures/blank.png


+ 0 - 0
NetRumble/Content/Textures/blank.xnb → NetRumble/Core/Content/Textures/blank.xnb


+ 0 - 0
NetRumble/Content/Textures/chatAble.png → NetRumble/Core/Content/Textures/chatAble.png


+ 0 - 0
NetRumble/Content/Textures/chatAble.xnb → NetRumble/Core/Content/Textures/chatAble.xnb


+ 0 - 0
NetRumble/Content/Textures/chatMute.png → NetRumble/Core/Content/Textures/chatMute.png


+ 0 - 0
NetRumble/Content/Textures/chatMute.xnb → NetRumble/Core/Content/Textures/chatMute.xnb


+ 0 - 0
NetRumble/Content/Textures/chatTalking.png → NetRumble/Core/Content/Textures/chatTalking.png


+ 0 - 0
NetRumble/Content/Textures/chatTalking.xnb → NetRumble/Core/Content/Textures/chatTalking.xnb


+ 0 - 0
NetRumble/Content/Textures/clouds.png → NetRumble/Core/Content/Textures/clouds.png


+ 0 - 0
NetRumble/Content/Textures/clouds.xnb → NetRumble/Core/Content/Textures/clouds.xnb


+ 0 - 0
NetRumble/Content/Textures/explosion.png → NetRumble/Core/Content/Textures/explosion.png


+ 0 - 0
NetRumble/Content/Textures/explosion.xnb → NetRumble/Core/Content/Textures/explosion.xnb


+ 0 - 0
NetRumble/Content/Textures/laser.png → NetRumble/Core/Content/Textures/laser.png


+ 0 - 0
NetRumble/Content/Textures/laser.xnb → NetRumble/Core/Content/Textures/laser.xnb


+ 0 - 0
NetRumble/Content/Textures/mine.png → NetRumble/Core/Content/Textures/mine.png


+ 0 - 0
NetRumble/Content/Textures/mine.xnb → NetRumble/Core/Content/Textures/mine.xnb


+ 0 - 0
NetRumble/Content/Textures/powerupDoubleLaser.png → NetRumble/Core/Content/Textures/powerupDoubleLaser.png


+ 0 - 0
NetRumble/Content/Textures/powerupDoubleLaser.xnb → NetRumble/Core/Content/Textures/powerupDoubleLaser.xnb


+ 0 - 0
NetRumble/Content/Textures/powerupRocket.png → NetRumble/Core/Content/Textures/powerupRocket.png


+ 0 - 0
NetRumble/Content/Textures/powerupRocket.xnb → NetRumble/Core/Content/Textures/powerupRocket.xnb


+ 0 - 0
NetRumble/Content/Textures/powerupTripleLaser.png → NetRumble/Core/Content/Textures/powerupTripleLaser.png


+ 0 - 0
NetRumble/Content/Textures/powerupTripleLaser.xnb → NetRumble/Core/Content/Textures/powerupTripleLaser.xnb


+ 0 - 0
NetRumble/Content/Textures/ready.png → NetRumble/Core/Content/Textures/ready.png


+ 0 - 0
NetRumble/Content/Textures/ready.xnb → NetRumble/Core/Content/Textures/ready.xnb


+ 0 - 0
NetRumble/Content/Textures/rocket.png → NetRumble/Core/Content/Textures/rocket.png


+ 0 - 0
NetRumble/Content/Textures/rocket.xnb → NetRumble/Core/Content/Textures/rocket.xnb


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio