Terrain speed modifiers

This commit is contained in:
Paul Chote
2010-04-17 20:42:42 +12:00
committed by Chris Forbes
parent 4a6c32bd9c
commit fcf8eb2726
14 changed files with 58 additions and 26 deletions

View File

@@ -22,6 +22,7 @@ using System;
using System.Drawing;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.GameRules;
namespace OpenRA.Traits
{
@@ -138,16 +139,25 @@ namespace OpenRA.Traits
return new Renderable(s, loc.Round(), pal);
}
public static float GetEffectiveSpeed(Actor self)
{
public static float GetEffectiveSpeed(Actor self, UnitMovementType umt)
{
var unitInfo = self.Info.Traits.GetOrDefault<UnitInfo>();
if( unitInfo == null ) return 0f;
var terrain = 1f;
if (umt != UnitMovementType.Fly)
{
var tt = self.World.GetTerrainType(self.Location);
terrain = Rules.TerrainTypes[tt].GetSpeedModifier(umt)*self.World.WorldActor.traits
.WithInterface<ICustomTerrain>()
.Select(t => t.GetSpeedModifier(self.Location, umt))
.Product();
}
var modifier = self.traits
.WithInterface<ISpeedModifier>()
.Select(t => t.GetSpeedModifier())
.Product();
return unitInfo.Speed * modifier;
return unitInfo.Speed * terrain * modifier;
}
public static IActivity SequenceActivities(params IActivity[] acts)