diff --git a/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs b/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs new file mode 100644 index 0000000000..19770a56ff --- /dev/null +++ b/OpenRA.Mods.RA/Crates/LevelUpCrateAction.cs @@ -0,0 +1,45 @@ +#region Copyright & License Information +/* + * Copyright 2007,2009,2010 Chris Forbes, Robert Pepperell, Matthew Bowra-Dean, Paul Chote, Alli Witheford. + * This file is part of OpenRA. + * + * OpenRA is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OpenRA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OpenRA. If not, see . + */ +#endregion + +namespace OpenRA.Mods.RA +{ + class LevelUpCrateActionInfo : CrateActionInfo + { + public override object Create(ActorInitializer init) { return new LevelUpCrateAction(init.self, this); } + } + + class LevelUpCrateAction : CrateAction + { + public LevelUpCrateAction(Actor self, LevelUpCrateActionInfo info) + : base(self,info) {} + + public override void Activate(Actor collector) + { + collector.World.AddFrameEndTask(w => + { + var gainsExperience = collector.traits.GetOrDefault(); + if (gainsExperience != null) + gainsExperience.GiveOneLevel(); + }); + + base.Activate(collector); + } + } +} diff --git a/OpenRA.Mods.RA/GainsExperience.cs b/OpenRA.Mods.RA/GainsExperience.cs index 1a9e89600f..33ee67a511 100644 --- a/OpenRA.Mods.RA/GainsExperience.cs +++ b/OpenRA.Mods.RA/GainsExperience.cs @@ -58,6 +58,12 @@ namespace OpenRA.Mods.RA [Sync] int Level = 0; + public void GiveOneLevel() + { + if (Level < Levels.Count()) + GiveExperience(Levels[Level] - Experience); + } + public void GiveExperience(int amount) { Experience += amount; diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 8535ad5591..bf6f38d76f 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -1,4 +1,4 @@ - + Debug @@ -89,6 +89,7 @@ +