Add DynamicFacingInit.
This commit is contained in:
@@ -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>();
|
||||
|
||||
Reference in New Issue
Block a user