diff --git a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
index ccab2ed6e6..ed6428e559 100644
--- a/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
+++ b/OpenRA.Mods.Cnc/OpenRA.Mods.Cnc.csproj
@@ -70,18 +70,18 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
diff --git a/OpenRA.Mods.Cnc/ProductionAirdrop.cs b/OpenRA.Mods.Cnc/Traits/Buildings/ProductionAirdrop.cs
similarity index 97%
rename from OpenRA.Mods.Cnc/ProductionAirdrop.cs
rename to OpenRA.Mods.Cnc/Traits/Buildings/ProductionAirdrop.cs
index c72b0e2205..e356840124 100644
--- a/OpenRA.Mods.Cnc/ProductionAirdrop.cs
+++ b/OpenRA.Mods.Cnc/Traits/Buildings/ProductionAirdrop.cs
@@ -11,11 +11,11 @@
using System.Linq;
using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.Cnc
+namespace OpenRA.Mods.Cnc.Traits
{
[Desc("Deliver the unit in production via skylift.")]
public class ProductionAirdropInfo : ProductionInfo
diff --git a/OpenRA.Mods.Cnc/TiberiumRefinery.cs b/OpenRA.Mods.Cnc/Traits/Buildings/TiberiumRefinery.cs
similarity index 96%
rename from OpenRA.Mods.Cnc/TiberiumRefinery.cs
rename to OpenRA.Mods.Cnc/Traits/Buildings/TiberiumRefinery.cs
index e20b69d410..bb8c982c57 100644
--- a/OpenRA.Mods.Cnc/TiberiumRefinery.cs
+++ b/OpenRA.Mods.Cnc/Traits/Buildings/TiberiumRefinery.cs
@@ -11,7 +11,7 @@
using OpenRA.Mods.RA;
using OpenRA.Traits;
-namespace OpenRA.Mods.Cnc
+namespace OpenRA.Mods.Cnc.Traits
{
public class TiberiumRefineryInfo : OreRefineryInfo
{
diff --git a/OpenRA.Mods.Cnc/PoisonedByTiberium.cs b/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs
similarity index 97%
rename from OpenRA.Mods.Cnc/PoisonedByTiberium.cs
rename to OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs
index 1925498054..84c32b65f6 100644
--- a/OpenRA.Mods.Cnc/PoisonedByTiberium.cs
+++ b/OpenRA.Mods.Cnc/Traits/PoisonedByTiberium.cs
@@ -13,7 +13,7 @@ using OpenRA.Traits;
using OpenRA.Mods.RA;
using OpenRA.GameRules;
-namespace OpenRA.Mods.Cnc
+namespace OpenRA.Mods.Cnc.Traits
{
class PoisonedByTiberiumInfo : ITraitInfo
{
diff --git a/OpenRA.Mods.Cnc/Render/RenderGunboat.cs b/OpenRA.Mods.Cnc/Traits/Render/RenderGunboat.cs
similarity index 100%
rename from OpenRA.Mods.Cnc/Render/RenderGunboat.cs
rename to OpenRA.Mods.Cnc/Traits/Render/RenderGunboat.cs
diff --git a/OpenRA.Mods.Cnc/Render/WithCargo.cs b/OpenRA.Mods.Cnc/Traits/Render/WithCargo.cs
similarity index 98%
rename from OpenRA.Mods.Cnc/Render/WithCargo.cs
rename to OpenRA.Mods.Cnc/Traits/Render/WithCargo.cs
index 1604b517f3..548b01b750 100644
--- a/OpenRA.Mods.Cnc/Render/WithCargo.cs
+++ b/OpenRA.Mods.Cnc/Traits/Render/WithCargo.cs
@@ -15,7 +15,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.RA;
using OpenRA.Traits;
-namespace OpenRA.Mods.Cnc
+namespace OpenRA.Mods.Cnc.Traits
{
[Desc("Renders the cargo loaded into the unit.")]
public class WithCargoInfo : ITraitInfo, Requires, Requires
diff --git a/OpenRA.Mods.Cnc/Render/WithDeliveryAnimation.cs b/OpenRA.Mods.Cnc/Traits/Render/WithDeliveryAnimation.cs
similarity index 100%
rename from OpenRA.Mods.Cnc/Render/WithDeliveryAnimation.cs
rename to OpenRA.Mods.Cnc/Traits/Render/WithDeliveryAnimation.cs
diff --git a/OpenRA.Mods.Cnc/Render/WithFire.cs b/OpenRA.Mods.Cnc/Traits/Render/WithFire.cs
similarity index 97%
rename from OpenRA.Mods.Cnc/Render/WithFire.cs
rename to OpenRA.Mods.Cnc/Traits/Render/WithFire.cs
index 9c97d9526e..2bb049a80f 100644
--- a/OpenRA.Mods.Cnc/Render/WithFire.cs
+++ b/OpenRA.Mods.Cnc/Traits/Render/WithFire.cs
@@ -12,7 +12,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Traits;
-namespace OpenRA.Mods.Cnc
+namespace OpenRA.Mods.Cnc.Traits
{
[Desc("Renders a flame sprite on top of the actor.")]
class WithFireInfo : ITraitInfo, Requires
diff --git a/OpenRA.Mods.Cnc/Render/WithRoof.cs b/OpenRA.Mods.Cnc/Traits/Render/WithRoof.cs
similarity index 96%
rename from OpenRA.Mods.Cnc/Render/WithRoof.cs
rename to OpenRA.Mods.Cnc/Traits/Render/WithRoof.cs
index 134d79016d..672e1bc317 100644
--- a/OpenRA.Mods.Cnc/Render/WithRoof.cs
+++ b/OpenRA.Mods.Cnc/Traits/Render/WithRoof.cs
@@ -12,7 +12,7 @@ using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Traits;
-namespace OpenRA.Mods.Cnc
+namespace OpenRA.Mods.Cnc.Traits
{
[Desc("Provides an overlay for the Tiberian Dawn hover craft.")]
public class WithRoofInfo : ITraitInfo, Requires
diff --git a/OpenRA.Mods.Cnc/SpawnViceroid.cs b/OpenRA.Mods.Cnc/Traits/SpawnViceroid.cs
similarity index 97%
rename from OpenRA.Mods.Cnc/SpawnViceroid.cs
rename to OpenRA.Mods.Cnc/Traits/SpawnViceroid.cs
index eef1e03700..3c2e252c6a 100644
--- a/OpenRA.Mods.Cnc/SpawnViceroid.cs
+++ b/OpenRA.Mods.Cnc/Traits/SpawnViceroid.cs
@@ -12,7 +12,7 @@ using System.Linq;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.Cnc
+namespace OpenRA.Mods.Cnc.Traits
{
class SpawnViceroidInfo : ITraitInfo
{
diff --git a/OpenRA.Mods.Cnc/IonCannonPower.cs b/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs
similarity index 98%
rename from OpenRA.Mods.Cnc/IonCannonPower.cs
rename to OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs
index 99da3beead..678c1037a7 100644
--- a/OpenRA.Mods.Cnc/IonCannonPower.cs
+++ b/OpenRA.Mods.Cnc/Traits/SupportPowers/IonCannonPower.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.RA.Activities;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.Cnc
+namespace OpenRA.Mods.Cnc.Traits
{
class IonCannonPowerInfo : SupportPowerInfo
{
diff --git a/OpenRA.Mods.Common/Effects/NukeLaunch.cs b/OpenRA.Mods.Common/Effects/NukeLaunch.cs
index 8c0eebc7ba..8f0ef74060 100644
--- a/OpenRA.Mods.Common/Effects/NukeLaunch.cs
+++ b/OpenRA.Mods.Common/Effects/NukeLaunch.cs
@@ -13,6 +13,7 @@ using System.Linq;
using OpenRA.Effects;
using OpenRA.GameRules;
using OpenRA.Graphics;
+using OpenRA.Mods.Common.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Effects
diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
index 1117b04de5..354671b53c 100644
--- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
+++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj
@@ -79,40 +79,40 @@
-
-
-
-
-
-
-
-
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenRA.Mods.Common/Modifiers/DisabledOverlay.cs b/OpenRA.Mods.Common/Traits/Modifiers/DisabledOverlay.cs
similarity index 96%
rename from OpenRA.Mods.Common/Modifiers/DisabledOverlay.cs
rename to OpenRA.Mods.Common/Traits/Modifiers/DisabledOverlay.cs
index 2036ed3b13..a622cefbd2 100644
--- a/OpenRA.Mods.Common/Modifiers/DisabledOverlay.cs
+++ b/OpenRA.Mods.Common/Traits/Modifiers/DisabledOverlay.cs
@@ -12,7 +12,7 @@ using System.Collections.Generic;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.Common
+namespace OpenRA.Mods.Common.Traits
{
[Desc("Use together with CanPowerDown/RequiresPower on buildings or Husk for vehicles.")]
public class DisabledOverlayInfo : TraitInfo { }
diff --git a/OpenRA.Mods.Common/Modifiers/HiddenUnderFog.cs b/OpenRA.Mods.Common/Traits/Modifiers/HiddenUnderFog.cs
similarity index 96%
rename from OpenRA.Mods.Common/Modifiers/HiddenUnderFog.cs
rename to OpenRA.Mods.Common/Traits/Modifiers/HiddenUnderFog.cs
index 94915d7935..4f928b148a 100644
--- a/OpenRA.Mods.Common/Modifiers/HiddenUnderFog.cs
+++ b/OpenRA.Mods.Common/Traits/Modifiers/HiddenUnderFog.cs
@@ -13,7 +13,7 @@ using System.Linq;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.Common
+namespace OpenRA.Mods.Common.Traits
{
[Desc("The actor stays invisible under fog of war.")]
public class HiddenUnderFogInfo : TraitInfo { }
diff --git a/OpenRA.Mods.Common/Modifiers/UpgradeOverlay.cs b/OpenRA.Mods.Common/Traits/Modifiers/UpgradeOverlay.cs
similarity index 97%
rename from OpenRA.Mods.Common/Modifiers/UpgradeOverlay.cs
rename to OpenRA.Mods.Common/Traits/Modifiers/UpgradeOverlay.cs
index 3801461cfa..abefe185b8 100644
--- a/OpenRA.Mods.Common/Modifiers/UpgradeOverlay.cs
+++ b/OpenRA.Mods.Common/Traits/Modifiers/UpgradeOverlay.cs
@@ -12,7 +12,7 @@ using System.Collections.Generic;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.Common
+namespace OpenRA.Mods.Common.Traits
{
[Desc("Display a colored overlay when a timed upgrade is active.")]
public class UpgradeOverlayInfo : ITraitInfo
diff --git a/OpenRA.Mods.Common/PaletteEffects/CloakPaletteEffect.cs b/OpenRA.Mods.Common/Traits/PaletteEffects/CloakPaletteEffect.cs
similarity index 96%
rename from OpenRA.Mods.Common/PaletteEffects/CloakPaletteEffect.cs
rename to OpenRA.Mods.Common/Traits/PaletteEffects/CloakPaletteEffect.cs
index fafa707da9..cee5e6b95a 100644
--- a/OpenRA.Mods.Common/PaletteEffects/CloakPaletteEffect.cs
+++ b/OpenRA.Mods.Common/Traits/PaletteEffects/CloakPaletteEffect.cs
@@ -13,7 +13,7 @@ using System.Drawing;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.Common
+namespace OpenRA.Mods.Common.Traits
{
public class CloakPaletteEffectInfo : TraitInfo { }
diff --git a/OpenRA.Mods.Common/PaletteEffects/LightPaletteRotator.cs b/OpenRA.Mods.Common/Traits/PaletteEffects/LightPaletteRotator.cs
similarity index 97%
rename from OpenRA.Mods.Common/PaletteEffects/LightPaletteRotator.cs
rename to OpenRA.Mods.Common/Traits/PaletteEffects/LightPaletteRotator.cs
index 4adc6c6833..6eda0e0366 100644
--- a/OpenRA.Mods.Common/PaletteEffects/LightPaletteRotator.cs
+++ b/OpenRA.Mods.Common/Traits/PaletteEffects/LightPaletteRotator.cs
@@ -13,7 +13,7 @@ using System.Linq;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.Common
+namespace OpenRA.Mods.Common.Traits
{
[Desc("Palette effect used for blinking \"animations\" on actors.")]
class LightPaletteRotatorInfo : ITraitInfo
diff --git a/OpenRA.Mods.Common/PaletteEffects/MenuPaletteEffect.cs b/OpenRA.Mods.Common/Traits/PaletteEffects/MenuPaletteEffect.cs
similarity index 98%
rename from OpenRA.Mods.Common/PaletteEffects/MenuPaletteEffect.cs
rename to OpenRA.Mods.Common/Traits/PaletteEffects/MenuPaletteEffect.cs
index 7469df6ca1..1f3924d79f 100644
--- a/OpenRA.Mods.Common/PaletteEffects/MenuPaletteEffect.cs
+++ b/OpenRA.Mods.Common/Traits/PaletteEffects/MenuPaletteEffect.cs
@@ -13,7 +13,7 @@ using System.Drawing;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.Common
+namespace OpenRA.Mods.Common.Traits
{
[Desc("Fades the world from/to black at the start/end of the game, and can (optionally) desaturate the world")]
public class MenuPaletteEffectInfo : ITraitInfo
diff --git a/OpenRA.Mods.Common/PaletteEffects/NukePaletteEffect.cs b/OpenRA.Mods.Common/Traits/PaletteEffects/NukePaletteEffect.cs
similarity index 97%
rename from OpenRA.Mods.Common/PaletteEffects/NukePaletteEffect.cs
rename to OpenRA.Mods.Common/Traits/PaletteEffects/NukePaletteEffect.cs
index e11c49afca..e30f476fa7 100644
--- a/OpenRA.Mods.Common/PaletteEffects/NukePaletteEffect.cs
+++ b/OpenRA.Mods.Common/Traits/PaletteEffects/NukePaletteEffect.cs
@@ -13,7 +13,7 @@ using System.Drawing;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.Common
+namespace OpenRA.Mods.Common.Traits
{
[Desc("Apply palette full screen rotations during atom bomb explosions. Add this to the world actor.")]
class NukePaletteEffectInfo : TraitInfo { }
diff --git a/OpenRA.Mods.Common/PaletteEffects/WaterPaletteRotation.cs b/OpenRA.Mods.Common/Traits/PaletteEffects/WaterPaletteRotation.cs
similarity index 97%
rename from OpenRA.Mods.Common/PaletteEffects/WaterPaletteRotation.cs
rename to OpenRA.Mods.Common/Traits/PaletteEffects/WaterPaletteRotation.cs
index 31ca1ed226..5187e09e23 100644
--- a/OpenRA.Mods.Common/PaletteEffects/WaterPaletteRotation.cs
+++ b/OpenRA.Mods.Common/Traits/PaletteEffects/WaterPaletteRotation.cs
@@ -13,7 +13,7 @@ using System.Linq;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.Common
+namespace OpenRA.Mods.Common.Traits
{
[Desc("Palette effect used for sprinkle \"animations\" on terrain tiles.")]
class WaterPaletteRotationInfo : ITraitInfo
diff --git a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
index 2da8f3cf31..5530059d4a 100644
--- a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
+++ b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj
@@ -68,24 +68,24 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
diff --git a/OpenRA.Mods.D2k/DamagedWithoutFoundation.cs b/OpenRA.Mods.D2k/Traits/Buildings/DamagedWithoutFoundation.cs
similarity index 98%
rename from OpenRA.Mods.D2k/DamagedWithoutFoundation.cs
rename to OpenRA.Mods.D2k/Traits/Buildings/DamagedWithoutFoundation.cs
index 471280179c..58f7a0e2fb 100644
--- a/OpenRA.Mods.D2k/DamagedWithoutFoundation.cs
+++ b/OpenRA.Mods.D2k/Traits/Buildings/DamagedWithoutFoundation.cs
@@ -12,7 +12,7 @@ using System.Linq;
using OpenRA.GameRules;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Reduces health points over time when the actor is placed on unsafe terrain.")]
class DamagedWithoutFoundationInfo : ITraitInfo, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithBuildingPlacedOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithBuildingPlacedOverlay.cs
similarity index 98%
rename from OpenRA.Mods.D2k/Render/WithBuildingPlacedOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithBuildingPlacedOverlay.cs
index 54bf93bfb1..0c51d31c06 100644
--- a/OpenRA.Mods.D2k/Render/WithBuildingPlacedOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithBuildingPlacedOverlay.cs
@@ -13,7 +13,7 @@ using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Rendered when the actor constructed a building.")]
public class WithBuildingPlacedOverlayInfo : ITraitInfo, Requires, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs
similarity index 98%
rename from OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs
index c270d3d9be..ce49224c9e 100644
--- a/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Mods.RA;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Rendered together with the \"make\" animation.")]
public class WithCrumbleOverlayInfo : ITraitInfo, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithDeliveryOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs
similarity index 98%
rename from OpenRA.Mods.D2k/Render/WithDeliveryOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs
index 332daad28d..03c20f070d 100644
--- a/OpenRA.Mods.D2k/Render/WithDeliveryOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithDeliveryOverlay.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Rendered when ProductionAirdrop is in progress.")]
public class WithDeliveryOverlayInfo : ITraitInfo, Requires, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithDockingOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithDockingOverlay.cs
similarity index 98%
rename from OpenRA.Mods.D2k/Render/WithDockingOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithDockingOverlay.cs
index 9d467a03fe..a8a8a291b6 100644
--- a/OpenRA.Mods.D2k/Render/WithDockingOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithDockingOverlay.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.Common.Traits.Render;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Rendered when a harvester is docked.")]
public class WithDockingOverlayInfo : ITraitInfo, Requires, Requires
diff --git a/OpenRA.Mods.D2k/Render/WithProductionOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithProductionOverlay.cs
similarity index 99%
rename from OpenRA.Mods.D2k/Render/WithProductionOverlay.cs
rename to OpenRA.Mods.D2k/Traits/Render/WithProductionOverlay.cs
index a6e4a3761e..33ec45444e 100644
--- a/OpenRA.Mods.D2k/Render/WithProductionOverlay.cs
+++ b/OpenRA.Mods.D2k/Traits/Render/WithProductionOverlay.cs
@@ -16,7 +16,7 @@ using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k.Render
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Renders an animation when the Production trait of the actor is activated.",
"Works both with per player ClassicProductionQueue and per building ProductionQueue, but needs any of these.")]
diff --git a/OpenRA.Mods.D2k/ThrowsShrapnel.cs b/OpenRA.Mods.D2k/Traits/ThrowsShrapnel.cs
similarity index 98%
rename from OpenRA.Mods.D2k/ThrowsShrapnel.cs
rename to OpenRA.Mods.D2k/Traits/ThrowsShrapnel.cs
index 624089e8c3..14aabae722 100644
--- a/OpenRA.Mods.D2k/ThrowsShrapnel.cs
+++ b/OpenRA.Mods.D2k/Traits/ThrowsShrapnel.cs
@@ -12,7 +12,7 @@ using System.Linq;
using OpenRA.GameRules;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Throws particles when the actor is destroyed that do damage on impact.")]
public class ThrowsShrapnelInfo : ITraitInfo
diff --git a/OpenRA.Mods.D2k/World/ChooseBuildTabOnSelect.cs b/OpenRA.Mods.D2k/Traits/World/ChooseBuildTabOnSelect.cs
similarity index 98%
rename from OpenRA.Mods.D2k/World/ChooseBuildTabOnSelect.cs
rename to OpenRA.Mods.D2k/Traits/World/ChooseBuildTabOnSelect.cs
index cd4c8ce9ea..8537910eb7 100644
--- a/OpenRA.Mods.D2k/World/ChooseBuildTabOnSelect.cs
+++ b/OpenRA.Mods.D2k/Traits/World/ChooseBuildTabOnSelect.cs
@@ -14,7 +14,7 @@ using OpenRA.Mods.RA;
using OpenRA.Traits;
using OpenRA.Widgets;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
class ChooseBuildTabOnSelectInfo : ITraitInfo
{
diff --git a/OpenRA.Mods.D2k/World/D2kResourceLayer.cs b/OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs
similarity index 99%
rename from OpenRA.Mods.D2k/World/D2kResourceLayer.cs
rename to OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs
index fbead559bb..d3770b257b 100644
--- a/OpenRA.Mods.D2k/World/D2kResourceLayer.cs
+++ b/OpenRA.Mods.D2k/Traits/World/D2kResourceLayer.cs
@@ -14,7 +14,7 @@ using System.Linq;
using OpenRA.Mods.RA;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Used to render spice with round borders.")]
public class D2kResourceLayerInfo : TraitInfo { }
diff --git a/OpenRA.Mods.D2k/World/FogPaletteFromR8.cs b/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs
similarity index 98%
rename from OpenRA.Mods.D2k/World/FogPaletteFromR8.cs
rename to OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs
index 7196303898..24225deaca 100644
--- a/OpenRA.Mods.D2k/World/FogPaletteFromR8.cs
+++ b/OpenRA.Mods.D2k/Traits/World/FogPaletteFromR8.cs
@@ -13,7 +13,7 @@ using OpenRA.FileSystem;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
class FogPaletteFromR8Info : ITraitInfo
{
diff --git a/OpenRA.Mods.D2k/World/PaletteFromR8.cs b/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs
similarity index 97%
rename from OpenRA.Mods.D2k/World/PaletteFromR8.cs
rename to OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs
index d544747761..4b49a9c8f7 100644
--- a/OpenRA.Mods.D2k/World/PaletteFromR8.cs
+++ b/OpenRA.Mods.D2k/Traits/World/PaletteFromR8.cs
@@ -13,7 +13,7 @@ using OpenRA.FileSystem;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
class PaletteFromR8Info : ITraitInfo
{
diff --git a/OpenRA.Mods.D2k/World/PaletteFromScaledPalette.cs b/OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs
similarity index 98%
rename from OpenRA.Mods.D2k/World/PaletteFromScaledPalette.cs
rename to OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs
index ab8a0e0da6..406fcc13b5 100644
--- a/OpenRA.Mods.D2k/World/PaletteFromScaledPalette.cs
+++ b/OpenRA.Mods.D2k/Traits/World/PaletteFromScaledPalette.cs
@@ -12,7 +12,7 @@ using System.Drawing;
using OpenRA.Graphics;
using OpenRA.Traits;
-namespace OpenRA.Mods.D2k
+namespace OpenRA.Mods.D2k.Traits
{
[Desc("Create a palette by applying a scale and offset to the colors in another palette.")]
class PaletteFromScaledPaletteInfo : ITraitInfo
diff --git a/OpenRA.Mods.RA/AI/HackyAI.cs b/OpenRA.Mods.RA/AI/HackyAI.cs
index bd1ed93781..577d65afd8 100644
--- a/OpenRA.Mods.RA/AI/HackyAI.cs
+++ b/OpenRA.Mods.RA/AI/HackyAI.cs
@@ -14,7 +14,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Mods.Common;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Mods.RA.Move;
using OpenRA.Mods.Common.Power;
diff --git a/OpenRA.Mods.RA/AI/Squad.cs b/OpenRA.Mods.RA/AI/Squad.cs
index 0ae0b05f0e..3083bb8786 100644
--- a/OpenRA.Mods.RA/AI/Squad.cs
+++ b/OpenRA.Mods.RA/AI/Squad.cs
@@ -10,6 +10,8 @@
using System.Collections.Generic;
using System.Linq;
+using OpenRA.Mods.RA;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Support;
using OpenRA.Traits;
@@ -39,7 +41,7 @@ namespace OpenRA.Mods.RA.AI
this.world = bot.world;
this.random = bot.random;
this.type = type;
- this.target = Traits.Target.FromActor(target);
+ this.target = OpenRA.Traits.Target.FromActor(target);
fsm = new StateMachine();
switch (type)
@@ -68,7 +70,7 @@ namespace OpenRA.Mods.RA.AI
public Actor Target
{
get { return target.Actor; }
- set { target = Traits.Target.FromActor(value); }
+ set { target = OpenRA.Traits.Target.FromActor(value); }
}
public bool TargetIsValid
diff --git a/OpenRA.Mods.RA/AI/States/AirStates.cs b/OpenRA.Mods.RA/AI/States/AirStates.cs
index 235bb00b92..12ca987d88 100644
--- a/OpenRA.Mods.RA/AI/States/AirStates.cs
+++ b/OpenRA.Mods.RA/AI/States/AirStates.cs
@@ -11,7 +11,7 @@
using System.Collections.Generic;
using System.Linq;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.AI
diff --git a/OpenRA.Mods.RA/AI/States/StateBase.cs b/OpenRA.Mods.RA/AI/States/StateBase.cs
index 677829b2e2..601fec2837 100644
--- a/OpenRA.Mods.RA/AI/States/StateBase.cs
+++ b/OpenRA.Mods.RA/AI/States/StateBase.cs
@@ -12,7 +12,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Air/FallsToEarth.cs b/OpenRA.Mods.RA/Activities/Air/FallToEarth.cs
old mode 100755
new mode 100644
similarity index 71%
rename from OpenRA.Mods.RA/Air/FallsToEarth.cs
rename to OpenRA.Mods.RA/Activities/Air/FallToEarth.cs
index f35654c5e9..004138ccd8
--- a/OpenRA.Mods.RA/Air/FallsToEarth.cs
+++ b/OpenRA.Mods.RA/Activities/Air/FallToEarth.cs
@@ -1,4 +1,4 @@
-#region Copyright & License Information
+#region Copyright & License Information
/*
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
@@ -10,31 +10,12 @@
using System.Linq;
using OpenRA.GameRules;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
- class FallsToEarthInfo : ITraitInfo
- {
- [WeaponReference]
- public readonly string Explosion = "UnitExplode";
-
- public readonly bool Spins = true;
- public readonly bool Moves = false;
- public readonly WRange Velocity = new WRange(43);
-
- public object Create(ActorInitializer init) { return new FallsToEarth(init.self, this); }
- }
-
- class FallsToEarth
- {
- public FallsToEarth(Actor self, FallsToEarthInfo info)
- {
- self.QueueActivity(false, new FallToEarth(self, info));
- }
- }
-
- class FallToEarth : Activity
+ public class FallToEarth : Activity
{
int acceleration = 0;
int spin = 0;
diff --git a/OpenRA.Mods.RA/Air/Fly.cs b/OpenRA.Mods.RA/Activities/Air/Fly.cs
old mode 100755
new mode 100644
similarity index 97%
rename from OpenRA.Mods.RA/Air/Fly.cs
rename to OpenRA.Mods.RA/Activities/Air/Fly.cs
index 3408d634fa..f246e6c33e
--- a/OpenRA.Mods.RA/Air/Fly.cs
+++ b/OpenRA.Mods.RA/Activities/Air/Fly.cs
@@ -9,9 +9,10 @@
#endregion
using System.Collections.Generic;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
public class Fly : Activity
{
diff --git a/OpenRA.Mods.RA/Air/FlyAttack.cs b/OpenRA.Mods.RA/Activities/Air/FlyAttack.cs
old mode 100755
new mode 100644
similarity index 95%
rename from OpenRA.Mods.RA/Air/FlyAttack.cs
rename to OpenRA.Mods.RA/Activities/Air/FlyAttack.cs
index 0fdd308156..68e830b091
--- a/OpenRA.Mods.RA/Air/FlyAttack.cs
+++ b/OpenRA.Mods.RA/Activities/Air/FlyAttack.cs
@@ -8,9 +8,10 @@
*/
#endregion
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
public class FlyAttack : Activity
{
diff --git a/OpenRA.Mods.RA/Air/FlyCircle.cs b/OpenRA.Mods.RA/Activities/Air/FlyCircle.cs
similarity index 91%
rename from OpenRA.Mods.RA/Air/FlyCircle.cs
rename to OpenRA.Mods.RA/Activities/Air/FlyCircle.cs
index 621d2aa97b..badb3f5878 100644
--- a/OpenRA.Mods.RA/Air/FlyCircle.cs
+++ b/OpenRA.Mods.RA/Activities/Air/FlyCircle.cs
@@ -8,9 +8,10 @@
*/
#endregion
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
public class FlyCircle : Activity
{
diff --git a/OpenRA.Mods.RA/Activities/FlyFollow.cs b/OpenRA.Mods.RA/Activities/Air/FlyFollow.cs
similarity index 97%
rename from OpenRA.Mods.RA/Activities/FlyFollow.cs
rename to OpenRA.Mods.RA/Activities/Air/FlyFollow.cs
index 83ea6a0fa1..f9d005325b 100644
--- a/OpenRA.Mods.RA/Activities/FlyFollow.cs
+++ b/OpenRA.Mods.RA/Activities/Air/FlyFollow.cs
@@ -8,7 +8,7 @@
*/
#endregion
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Activities
diff --git a/OpenRA.Mods.RA/Air/FlyTimed.cs b/OpenRA.Mods.RA/Activities/Air/FlyTimed.cs
old mode 100755
new mode 100644
similarity index 94%
rename from OpenRA.Mods.RA/Air/FlyTimed.cs
rename to OpenRA.Mods.RA/Activities/Air/FlyTimed.cs
index 07963698c0..61442b5c7d
--- a/OpenRA.Mods.RA/Air/FlyTimed.cs
+++ b/OpenRA.Mods.RA/Activities/Air/FlyTimed.cs
@@ -8,9 +8,10 @@
*/
#endregion
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
public class FlyTimed : Activity
{
diff --git a/OpenRA.Mods.RA/Air/HeliAttack.cs b/OpenRA.Mods.RA/Activities/Air/HeliAttack.cs
old mode 100755
new mode 100644
similarity index 95%
rename from OpenRA.Mods.RA/Air/HeliAttack.cs
rename to OpenRA.Mods.RA/Activities/Air/HeliAttack.cs
index ab3950453e..ec045eb571
--- a/OpenRA.Mods.RA/Air/HeliAttack.cs
+++ b/OpenRA.Mods.RA/Activities/Air/HeliAttack.cs
@@ -8,9 +8,10 @@
*/
#endregion
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
public class HeliAttack : Activity
{
diff --git a/OpenRA.Mods.RA/Air/HeliFly.cs b/OpenRA.Mods.RA/Activities/Air/HeliFly.cs
old mode 100755
new mode 100644
similarity index 97%
rename from OpenRA.Mods.RA/Air/HeliFly.cs
rename to OpenRA.Mods.RA/Activities/Air/HeliFly.cs
index e9df2f7d92..37c0f424fd
--- a/OpenRA.Mods.RA/Air/HeliFly.cs
+++ b/OpenRA.Mods.RA/Activities/Air/HeliFly.cs
@@ -9,9 +9,10 @@
#endregion
using System.Collections.Generic;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
class HeliFly : Activity
{
diff --git a/OpenRA.Mods.RA/Air/HeliLand.cs b/OpenRA.Mods.RA/Activities/Air/HeliLand.cs
old mode 100755
new mode 100644
similarity index 92%
rename from OpenRA.Mods.RA/Air/HeliLand.cs
rename to OpenRA.Mods.RA/Activities/Air/HeliLand.cs
index e5edc77800..23cf807699
--- a/OpenRA.Mods.RA/Air/HeliLand.cs
+++ b/OpenRA.Mods.RA/Activities/Air/HeliLand.cs
@@ -8,9 +8,10 @@
*/
#endregion
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
class HeliLand : Activity
{
diff --git a/OpenRA.Mods.RA/Air/HeliReturn.cs b/OpenRA.Mods.RA/Activities/Air/HeliReturn.cs
old mode 100755
new mode 100644
similarity index 96%
rename from OpenRA.Mods.RA/Air/HeliReturn.cs
rename to OpenRA.Mods.RA/Activities/Air/HeliReturn.cs
index 5fa2924f02..4d9760ee4b
--- a/OpenRA.Mods.RA/Air/HeliReturn.cs
+++ b/OpenRA.Mods.RA/Activities/Air/HeliReturn.cs
@@ -9,10 +9,10 @@
#endregion
using System.Linq;
-using OpenRA.Mods.RA.Activities;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
public class HeliReturn : Activity
{
diff --git a/OpenRA.Mods.RA/Air/Land.cs b/OpenRA.Mods.RA/Activities/Air/Land.cs
old mode 100755
new mode 100644
similarity index 94%
rename from OpenRA.Mods.RA/Air/Land.cs
rename to OpenRA.Mods.RA/Activities/Air/Land.cs
index 8f9ffa59ca..a313bd3257
--- a/OpenRA.Mods.RA/Air/Land.cs
+++ b/OpenRA.Mods.RA/Activities/Air/Land.cs
@@ -8,9 +8,10 @@
*/
#endregion
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
public class Land : Activity
{
diff --git a/OpenRA.Mods.RA/Activities/Air/ResupplyAircraft.cs b/OpenRA.Mods.RA/Activities/Air/ResupplyAircraft.cs
new file mode 100644
index 0000000000..eff39c53ad
--- /dev/null
+++ b/OpenRA.Mods.RA/Activities/Air/ResupplyAircraft.cs
@@ -0,0 +1,34 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using OpenRA.Mods.RA.Traits;
+using OpenRA.Primitives;
+using OpenRA.Traits;
+
+namespace OpenRA.Mods.RA.Activities
+{
+ public class ResupplyAircraft : Activity
+ {
+ public override Activity Tick(Actor self)
+ {
+ var aircraft = self.Trait();
+ var host = aircraft.GetActorBelow();
+
+ if (host == null)
+ return NextActivity;
+
+ return Util.SequenceActivities(
+ aircraft.GetResupplyActivities(host).Append(NextActivity).ToArray());
+ }
+ }
+}
diff --git a/OpenRA.Mods.RA/Air/ReturnToBase.cs b/OpenRA.Mods.RA/Activities/Air/ReturnToBase.cs
old mode 100755
new mode 100644
similarity index 98%
rename from OpenRA.Mods.RA/Air/ReturnToBase.cs
rename to OpenRA.Mods.RA/Activities/Air/ReturnToBase.cs
index e5410c21b2..a876978857
--- a/OpenRA.Mods.RA/Air/ReturnToBase.cs
+++ b/OpenRA.Mods.RA/Activities/Air/ReturnToBase.cs
@@ -10,9 +10,10 @@
using System;
using System.Linq;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
public class ReturnToBase : Activity
{
diff --git a/OpenRA.Mods.RA/Air/TakeOff.cs b/OpenRA.Mods.RA/Activities/Air/TakeOff.cs
similarity index 94%
rename from OpenRA.Mods.RA/Air/TakeOff.cs
rename to OpenRA.Mods.RA/Activities/Air/TakeOff.cs
index cc8be21817..85d53dbce3 100644
--- a/OpenRA.Mods.RA/Air/TakeOff.cs
+++ b/OpenRA.Mods.RA/Activities/Air/TakeOff.cs
@@ -9,9 +9,10 @@
#endregion
using OpenRA.Mods.Common;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Activities
{
public class TakeOff : Activity
{
diff --git a/OpenRA.Mods.RA/Attack/AttackGarrisoned.cs b/OpenRA.Mods.RA/Attack/AttackGarrisoned.cs
index 6e60626e91..0cfeba787f 100644
--- a/OpenRA.Mods.RA/Attack/AttackGarrisoned.cs
+++ b/OpenRA.Mods.RA/Attack/AttackGarrisoned.cs
@@ -13,7 +13,9 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits.Render;
+using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Render;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
@@ -140,7 +142,7 @@ namespace OpenRA.Mods.RA
return;
var pos = self.CenterPosition;
- var targetYaw = WAngle.FromFacing(Traits.Util.GetFacing(target.CenterPosition - self.CenterPosition, 0));
+ var targetYaw = WAngle.FromFacing(OpenRA.Traits.Util.GetFacing(target.CenterPosition - self.CenterPosition, 0));
foreach (var a in Armaments)
{
@@ -160,7 +162,7 @@ namespace OpenRA.Mods.RA
var sequence = a.Info.MuzzleSequence;
if (a.Info.MuzzleSplitFacings > 0)
- sequence += Traits.Util.QuantizeFacing(muzzleFacing, a.Info.MuzzleSplitFacings).ToString();
+ sequence += OpenRA.Traits.Util.QuantizeFacing(muzzleFacing, a.Info.MuzzleSplitFacings).ToString();
var muzzleFlash = new AnimationWithOffset(muzzleAnim,
() => PortOffset(self, port),
diff --git a/OpenRA.Mods.RA/Cargo.cs b/OpenRA.Mods.RA/Cargo.cs
index f88a948e04..de7167f0ae 100644
--- a/OpenRA.Mods.RA/Cargo.cs
+++ b/OpenRA.Mods.RA/Cargo.cs
@@ -13,8 +13,8 @@ using System.Linq;
using System.Collections.Generic;
using OpenRA.Traits;
using OpenRA.Primitives;
-using OpenRA.Mods.RA.Air;
using OpenRA.Mods.RA.Activities;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Mods.Common.Orders;
namespace OpenRA.Mods.RA
diff --git a/OpenRA.Mods.RA/CrateSpawner.cs b/OpenRA.Mods.RA/CrateSpawner.cs
index c01188c484..140a737238 100644
--- a/OpenRA.Mods.RA/CrateSpawner.cs
+++ b/OpenRA.Mods.RA/CrateSpawner.cs
@@ -11,7 +11,7 @@
using System;
using System.Linq;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Primitives;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Effects/GpsDot.cs b/OpenRA.Mods.RA/Effects/GpsDot.cs
index 1228c70912..6c598fc777 100644
--- a/OpenRA.Mods.RA/Effects/GpsDot.cs
+++ b/OpenRA.Mods.RA/Effects/GpsDot.cs
@@ -12,7 +12,7 @@ using System;
using System.Collections.Generic;
using OpenRA.Effects;
using OpenRA.Graphics;
-using OpenRA.Mods.Common;
+using OpenRA.Mods.Common.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
index e564035462..30ee595c3d 100644
--- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
+++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj
@@ -80,7 +80,20 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -112,9 +125,6 @@
-
-
-
@@ -126,21 +136,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -306,6 +301,15 @@
+
+
+
+
+
+
+
+
+
@@ -381,7 +385,6 @@
-
@@ -428,7 +431,6 @@
-
diff --git a/OpenRA.Mods.RA/ParaDrop.cs b/OpenRA.Mods.RA/ParaDrop.cs
index 80888a3c61..5e4a0ad51d 100644
--- a/OpenRA.Mods.RA/ParaDrop.cs
+++ b/OpenRA.Mods.RA/ParaDrop.cs
@@ -11,7 +11,7 @@
using System;
using System.Collections.Generic;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Mods.RA.Effects;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs
index 40a59d9a26..18c640e335 100644
--- a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs
+++ b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs
@@ -13,6 +13,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits.Render;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
@@ -79,7 +80,7 @@ namespace OpenRA.Mods.RA.Render
return;
if (a.Info.MuzzleSplitFacings > 0)
- sequence += Traits.Util.QuantizeFacing(getFacing(), a.Info.MuzzleSplitFacings).ToString();
+ sequence += OpenRA.Traits.Util.QuantizeFacing(getFacing(), a.Info.MuzzleSplitFacings).ToString();
visible[barrel] = true;
anims[barrel].Animation.PlayThen(sequence, () => visible[barrel] = false);
diff --git a/OpenRA.Mods.RA/Render/WithShadow.cs b/OpenRA.Mods.RA/Render/WithShadow.cs
index ec8723b94b..7a32064b1a 100644
--- a/OpenRA.Mods.RA/Render/WithShadow.cs
+++ b/OpenRA.Mods.RA/Render/WithShadow.cs
@@ -12,7 +12,8 @@ using System;
using System.Collections.Generic;
using System.Linq;
using OpenRA.Graphics;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Activities;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Traits;
namespace OpenRA.Mods.RA.Render
diff --git a/OpenRA.Mods.RA/Reservable.cs b/OpenRA.Mods.RA/Reservable.cs
index 386c1d768e..13deff87e3 100755
--- a/OpenRA.Mods.RA/Reservable.cs
+++ b/OpenRA.Mods.RA/Reservable.cs
@@ -9,7 +9,7 @@
#endregion
using System;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Scripting/Global/ActorGlobal.cs b/OpenRA.Mods.RA/Scripting/Global/ActorGlobal.cs
index 43f08dc9aa..2224a1009e 100644
--- a/OpenRA.Mods.RA/Scripting/Global/ActorGlobal.cs
+++ b/OpenRA.Mods.RA/Scripting/Global/ActorGlobal.cs
@@ -11,7 +11,8 @@
using System.Linq;
using Eluant;
using OpenRA.Mods.Common;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Activities;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Primitives;
diff --git a/OpenRA.Mods.RA/Scripting/Global/ReinforcementsGlobal.cs b/OpenRA.Mods.RA/Scripting/Global/ReinforcementsGlobal.cs
index 0e9462bd57..c17a186509 100644
--- a/OpenRA.Mods.RA/Scripting/Global/ReinforcementsGlobal.cs
+++ b/OpenRA.Mods.RA/Scripting/Global/ReinforcementsGlobal.cs
@@ -18,7 +18,7 @@ using OpenRA.Traits;
using OpenRA.Scripting;
using OpenRA.Effects;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
namespace OpenRA.Mods.RA.Scripting
{
diff --git a/OpenRA.Mods.RA/Scripting/Global/UtilsGlobal.cs b/OpenRA.Mods.RA/Scripting/Global/UtilsGlobal.cs
index 7686a3bd95..96180de80f 100644
--- a/OpenRA.Mods.RA/Scripting/Global/UtilsGlobal.cs
+++ b/OpenRA.Mods.RA/Scripting/Global/UtilsGlobal.cs
@@ -11,6 +11,7 @@
using System.Linq;
using Eluant;
using OpenRA.Scripting;
+using OpenRA.Traits;
namespace OpenRA.Mods.RA.Scripting
{
@@ -78,7 +79,7 @@ namespace OpenRA.Mods.RA.Scripting
[Desc("Expands the given footprint one step along the coordinate axes, and (if requested) diagonals.")]
public CPos[] ExpandFootprint(CPos[] footprint, bool allowDiagonal)
{
- return Traits.Util.ExpandFootprint(footprint, allowDiagonal).ToArray();
+ return Util.ExpandFootprint(footprint, allowDiagonal).ToArray();
}
[Desc("Returns a random integer x in the range low <= x < high.")]
diff --git a/OpenRA.Mods.RA/Scripting/Properties/HelicopterProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/HelicopterProperties.cs
index 4095939090..808c134880 100644
--- a/OpenRA.Mods.RA/Scripting/Properties/HelicopterProperties.cs
+++ b/OpenRA.Mods.RA/Scripting/Properties/HelicopterProperties.cs
@@ -8,7 +8,8 @@
*/
#endregion
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Activities;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Scripting;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Scripting/Properties/PlaneProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/PlaneProperties.cs
index d459b77d52..768f3658e5 100644
--- a/OpenRA.Mods.RA/Scripting/Properties/PlaneProperties.cs
+++ b/OpenRA.Mods.RA/Scripting/Properties/PlaneProperties.cs
@@ -8,7 +8,8 @@
*/
#endregion
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Activities;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Scripting;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Scripting/Properties/TransportProperties.cs b/OpenRA.Mods.RA/Scripting/Properties/TransportProperties.cs
index 670ffbb266..57380c680e 100644
--- a/OpenRA.Mods.RA/Scripting/Properties/TransportProperties.cs
+++ b/OpenRA.Mods.RA/Scripting/Properties/TransportProperties.cs
@@ -10,7 +10,7 @@
using System.Linq;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Scripting;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs b/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs
index fdfe835f31..89badcd4a4 100644
--- a/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs
+++ b/OpenRA.Mods.RA/SupportPowers/AirstrikePower.cs
@@ -13,7 +13,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Mods.Common.Effects;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs b/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs
index 133b7ff262..8f504c76df 100644
--- a/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs
+++ b/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs
@@ -13,7 +13,7 @@ using System.Collections.Generic;
using System.Linq;
using OpenRA.Mods.Common.Effects;
using OpenRA.Mods.RA.Activities;
-using OpenRA.Mods.RA.Air;
+using OpenRA.Mods.RA.Traits;
using OpenRA.Primitives;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Air/Aircraft.cs b/OpenRA.Mods.RA/Traits/Air/Aircraft.cs
similarity index 96%
rename from OpenRA.Mods.RA/Air/Aircraft.cs
rename to OpenRA.Mods.RA/Traits/Air/Aircraft.cs
index 2e0ba3f40f..b4fac4825d 100644
--- a/OpenRA.Mods.RA/Air/Aircraft.cs
+++ b/OpenRA.Mods.RA/Traits/Air/Aircraft.cs
@@ -12,12 +12,13 @@ using System;
using System.Collections.Generic;
using System.Linq;
using OpenRA.Mods.Common.Orders;
+using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Primitives;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Traits
{
public class AircraftInfo : ITraitInfo, IFacingInfo, IOccupySpaceInfo, UsesInit, UsesInit
{
@@ -296,21 +297,6 @@ namespace OpenRA.Mods.RA.Air
}
}
- public class ResupplyAircraft : Activity
- {
- public override Activity Tick(Actor self)
- {
- var aircraft = self.Trait();
- var host = aircraft.GetActorBelow();
-
- if (host == null)
- return NextActivity;
-
- return Util.SequenceActivities(
- aircraft.GetResupplyActivities(host).Append(NextActivity).ToArray());
- }
- }
-
class AircraftMoveOrderTargeter : IOrderTargeter
{
public string OrderID { get { return "Move"; } }
diff --git a/OpenRA.Mods.RA/Air/AttackHeli.cs b/OpenRA.Mods.RA/Traits/Air/AttackHeli.cs
old mode 100755
new mode 100644
similarity index 89%
rename from OpenRA.Mods.RA/Air/AttackHeli.cs
rename to OpenRA.Mods.RA/Traits/Air/AttackHeli.cs
index b14bb33bf4..79bc7c647b
--- a/OpenRA.Mods.RA/Air/AttackHeli.cs
+++ b/OpenRA.Mods.RA/Traits/Air/AttackHeli.cs
@@ -8,9 +8,11 @@
*/
#endregion
+using OpenRA.Mods.RA;
+using OpenRA.Mods.RA.Activities;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Traits
{
class AttackHeliInfo : AttackFrontalInfo
{
diff --git a/OpenRA.Mods.RA/Air/AttackPlane.cs b/OpenRA.Mods.RA/Traits/Air/AttackPlane.cs
old mode 100755
new mode 100644
similarity index 92%
rename from OpenRA.Mods.RA/Air/AttackPlane.cs
rename to OpenRA.Mods.RA/Traits/Air/AttackPlane.cs
index 6025e8a27d..ff1b593f93
--- a/OpenRA.Mods.RA/Air/AttackPlane.cs
+++ b/OpenRA.Mods.RA/Traits/Air/AttackPlane.cs
@@ -8,9 +8,11 @@
*/
#endregion
+using OpenRA.Mods.RA;
+using OpenRA.Mods.RA.Activities;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Traits
{
class AttackPlaneInfo : AttackFrontalInfo
{
diff --git a/OpenRA.Mods.RA/Traits/Air/FallsToEarth.cs b/OpenRA.Mods.RA/Traits/Air/FallsToEarth.cs
new file mode 100644
index 0000000000..2f89eeaef4
--- /dev/null
+++ b/OpenRA.Mods.RA/Traits/Air/FallsToEarth.cs
@@ -0,0 +1,38 @@
+#region Copyright & License Information
+/*
+ * Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
+ * This file is part of OpenRA, which is free software. It is made
+ * available to you under the terms of the GNU General Public License
+ * as published by the Free Software Foundation. For more information,
+ * see COPYING.
+ */
+#endregion
+
+using System.Linq;
+using OpenRA.GameRules;
+using OpenRA.Mods.RA;
+using OpenRA.Mods.RA.Activities;
+using OpenRA.Traits;
+
+namespace OpenRA.Mods.RA.Traits
+{
+ public class FallsToEarthInfo : ITraitInfo
+ {
+ [WeaponReference]
+ public readonly string Explosion = "UnitExplode";
+
+ public readonly bool Spins = true;
+ public readonly bool Moves = false;
+ public readonly WRange Velocity = new WRange(43);
+
+ public object Create(ActorInitializer init) { return new FallsToEarth(init.self, this); }
+ }
+
+ public class FallsToEarth
+ {
+ public FallsToEarth(Actor self, FallsToEarthInfo info)
+ {
+ self.QueueActivity(false, new FallToEarth(self, info));
+ }
+ }
+}
diff --git a/OpenRA.Mods.RA/Air/FlyAwayOnIdle.cs b/OpenRA.Mods.RA/Traits/Air/FlyAwayOnIdle.cs
similarity index 92%
rename from OpenRA.Mods.RA/Air/FlyAwayOnIdle.cs
rename to OpenRA.Mods.RA/Traits/Air/FlyAwayOnIdle.cs
index 71df7075f6..2d51542247 100644
--- a/OpenRA.Mods.RA/Air/FlyAwayOnIdle.cs
+++ b/OpenRA.Mods.RA/Traits/Air/FlyAwayOnIdle.cs
@@ -8,10 +8,11 @@
*/
#endregion
+using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Leave the map when idle.")]
class FlyAwayOnIdleInfo : TraitInfo { }
diff --git a/OpenRA.Mods.RA/Air/Helicopter.cs b/OpenRA.Mods.RA/Traits/Air/Helicopter.cs
similarity index 98%
rename from OpenRA.Mods.RA/Air/Helicopter.cs
rename to OpenRA.Mods.RA/Traits/Air/Helicopter.cs
index bc2dc46471..2e303216ea 100644
--- a/OpenRA.Mods.RA/Air/Helicopter.cs
+++ b/OpenRA.Mods.RA/Traits/Air/Helicopter.cs
@@ -12,10 +12,11 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
+using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Traits
{
class HelicopterInfo : AircraftInfo, IMoveInfo
{
diff --git a/OpenRA.Mods.RA/Air/Plane.cs b/OpenRA.Mods.RA/Traits/Air/Plane.cs
similarity index 98%
rename from OpenRA.Mods.RA/Air/Plane.cs
rename to OpenRA.Mods.RA/Traits/Air/Plane.cs
index ba159fc8c7..591f110368 100644
--- a/OpenRA.Mods.RA/Air/Plane.cs
+++ b/OpenRA.Mods.RA/Traits/Air/Plane.cs
@@ -10,10 +10,11 @@
using System;
using System.Drawing;
+using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Traits
{
public class PlaneInfo : AircraftInfo, IMoveInfo
{
diff --git a/OpenRA.Mods.RA/Air/ReturnOnIdle.cs b/OpenRA.Mods.RA/Traits/Air/ReturnOnIdle.cs
old mode 100755
new mode 100644
similarity index 97%
rename from OpenRA.Mods.RA/Air/ReturnOnIdle.cs
rename to OpenRA.Mods.RA/Traits/Air/ReturnOnIdle.cs
index 133b3487ea..5483d354f9
--- a/OpenRA.Mods.RA/Air/ReturnOnIdle.cs
+++ b/OpenRA.Mods.RA/Traits/Air/ReturnOnIdle.cs
@@ -9,11 +9,12 @@
#endregion
using System.Linq;
+using OpenRA.Mods.RA;
using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Buildings;
using OpenRA.Traits;
-namespace OpenRA.Mods.RA.Air
+namespace OpenRA.Mods.RA.Traits
{
[Desc("Return to a player owned RearmBuildings. If none available, head back to base and circle over it.")]
class ReturnOnIdleInfo : TraitInfo { }
diff --git a/OpenRA.Mods.RA/Air/TargetableAircraft.cs b/OpenRA.Mods.RA/Traits/Air/TargetableAircraft.cs
old mode 100755
new mode 100644
similarity index 89%
rename from OpenRA.Mods.RA/Air/TargetableAircraft.cs
rename to OpenRA.Mods.RA/Traits/Air/TargetableAircraft.cs
index f7a7259685..de13199744
--- a/OpenRA.Mods.RA/Air/TargetableAircraft.cs
+++ b/OpenRA.Mods.RA/Traits/Air/TargetableAircraft.cs
@@ -8,7 +8,11 @@
*/
#endregion
-namespace OpenRA.Mods.RA.Air
+using System.Collections.Generic;
+using OpenRA.Mods.RA;
+using OpenRA.Traits;
+
+namespace OpenRA.Mods.RA.Traits
{
public class TargetableAircraftInfo : TargetableUnitInfo
{
diff --git a/OpenRA.Mods.RA/Widgets/Logic/Ingame/LeaveMapLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/Ingame/LeaveMapLogic.cs
index 1e23af0af3..e64d472361 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/Ingame/LeaveMapLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/Ingame/LeaveMapLogic.cs
@@ -11,7 +11,7 @@
using System;
using System.Drawing;
using System.Linq;
-using OpenRA.Mods.Common;
+using OpenRA.Mods.Common.Traits;
using OpenRA.Mods.RA.Scripting;
using OpenRA.Network;
using OpenRA.Traits;
diff --git a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs
index 7b0286c4c6..5e933a9f7e 100644
--- a/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs
+++ b/OpenRA.Mods.RA/Widgets/Logic/IngameMenuLogic.cs
@@ -10,7 +10,7 @@
using System;
using OpenRA.Graphics;
-using OpenRA.Mods.Common;
+using OpenRA.Mods.Common.Traits;
using OpenRA.Mods.Common.Widgets;
using OpenRA.Widgets;
diff --git a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj
index 406af22135..0abe436556 100644
--- a/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj
+++ b/OpenRA.Mods.TS/OpenRA.Mods.TS.csproj
@@ -55,12 +55,12 @@
-
-
-
-
+
+
+
+