Terrain speed modifiers
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user