speed up production if multiple buildings of the same type exist

This commit is contained in:
Matthias Mailänder
2013-01-19 23:54:53 +01:00
parent d4ea8aad8d
commit ecd4ff68a4
3 changed files with 31 additions and 2 deletions

View File

@@ -8,6 +8,7 @@
*/ */
#endregion #endregion
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Buildings;
@@ -71,5 +72,30 @@ namespace OpenRA.Mods.RA
} }
return false; return false;
} }
public override int GetBuildTime(String unitString)
{
var unit = Rules.Info[unitString];
if (unit == null || ! unit.Traits.Contains<BuildableInfo>())
return 0;
if (self.World.LobbyInfo.GlobalSettings.AllowCheats && self.Owner.PlayerActor.Trait<DeveloperMode>().FastBuild) return 0;
var cost = unit.Traits.Contains<ValuedInfo>() ? unit.Traits.Get<ValuedInfo>().Cost : 0;
var selfsameBuildings = self.World.ActorsWithTrait<Production>()
.Where(p => p.Trait.Info.Produces.Contains(unit.Traits.Get<BuildableInfo>().Queue))
.Where(p => p.Actor.Owner == self.Owner).ToArray();
var speedUp = 1 - (selfsameBuildings.First().Trait.Info.SpeedUp * (selfsameBuildings.Count() - 1))
.Clamp(0, selfsameBuildings.First().Trait.Info.MaxSpeedUp);
var time = cost
* Info.BuildSpeed
* (25 * 60) /* frames per min */
* speedUp
/ 1000;
return (int) time;
}
} }
} }

View File

@@ -253,7 +253,7 @@ namespace OpenRA.Mods.RA
} }
} }
public int GetBuildTime(String unitString) virtual public int GetBuildTime(String unitString)
{ {
var unit = Rules.Info[unitString]; var unit = Rules.Info[unitString];
if (unit == null || ! unit.Traits.Contains<BuildableInfo>()) if (unit == null || ! unit.Traits.Contains<BuildableInfo>())
@@ -263,7 +263,7 @@ namespace OpenRA.Mods.RA
var cost = unit.Traits.Contains<ValuedInfo>() ? unit.Traits.Get<ValuedInfo>().Cost : 0; var cost = unit.Traits.Contains<ValuedInfo>() ? unit.Traits.Get<ValuedInfo>().Cost : 0;
var time = cost var time = cost
* Info.BuildSpeed * Info.BuildSpeed
* (25 * 60) /* frames per min */ /* todo: build acceleration, if we do that */ * (25 * 60) /* frames per min */
/ 1000; / 1000;
if (unit.Traits.Contains<CustomBuildTimeValueInfo>()) if (unit.Traits.Contains<CustomBuildTimeValueInfo>())

View File

@@ -22,6 +22,9 @@ namespace OpenRA.Mods.RA
{ {
public readonly string[] Produces = { }; public readonly string[] Produces = { };
public readonly float SpeedUp = 0;
public readonly float MaxSpeedUp = 0;
public virtual object Create(ActorInitializer init) { return new Production(this); } public virtual object Create(ActorInitializer init) { return new Production(this); }
} }