Add DynamicFacingInit.

This commit is contained in:
teees
2016-06-05 11:44:19 +01:00
committed by Paul Chote
parent 8724ed29bc
commit 4fa3ecfafb
10 changed files with 110 additions and 34 deletions

View File

@@ -9,6 +9,7 @@
*/
#endregion
using System;
using System.Collections.Generic;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
@@ -42,6 +43,45 @@ namespace OpenRA.Mods.Common.Graphics
public U Get<T, U>() where T : IActorInit<U> { return dict.Get<T>().Value(World); }
public bool Contains<T>() where T : IActorInit { return dict.Contains<T>(); }
public Func<WRot> GetOrientation()
{
var facingInfo = Actor.TraitInfoOrDefault<IFacingInfo>();
if (facingInfo == null)
return () => WRot.Zero;
// Dynamic facing takes priority
var dynamicInit = dict.GetOrDefault<DynamicFacingInit>();
if (dynamicInit != null)
{
// TODO: Account for terrain slope
var getFacing = dynamicInit.Value(null);
return () => WRot.FromFacing(getFacing());
}
// Fall back to initial actor facing if an Init isn't available
var facingInit = dict.GetOrDefault<FacingInit>();
var facing = facingInit != null ? facingInit.Value(null) : facingInfo.GetInitialFacing();
var orientation = WRot.FromFacing(facing);
return () => orientation;
}
public Func<int> GetFacing()
{
var facingInfo = Actor.TraitInfoOrDefault<IFacingInfo>();
if (facingInfo == null)
return () => 0;
// Dynamic facing takes priority
var dynamicInit = dict.GetOrDefault<DynamicFacingInit>();
if (dynamicInit != null)
return dynamicInit.Value(null);
// Fall back to initial actor facing if an Init isn't available
var facingInit = dict.GetOrDefault<FacingInit>();
var facing = facingInit != null ? facingInit.Value(null) : facingInfo.GetInitialFacing();
return () => facing;
}
public DamageState GetDamageState()
{
var health = dict.GetOrDefault<HealthInit>();