Expose WAngle to Lua API and deprecate old Facing.

This commit is contained in:
Paul Chote
2020-06-10 20:53:44 +01:00
committed by reaperrr
parent 0349435650
commit a98e460257
6 changed files with 121 additions and 12 deletions

View File

@@ -75,6 +75,20 @@ namespace OpenRA.Mods.Common.Scripting
return init;
}
// HACK: Forward compatibility for future WAngle facings
var facingInit = init as FacingInit;
if (facingInit != null)
{
WAngle angle;
if (value.TryGetClrValue(out angle))
{
facingInit.Initialize(angle.Facing);
return facingInit;
}
Game.Debug("Initializing Facing with integers is deprecated. Use Angle instead.");
}
var initializers = initType.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.Where(m => m.Name == "Initialize" && m.GetParameters().Length == 1);

View File

@@ -0,0 +1,34 @@
#region Copyright & License Information
/*
* Copyright 2007-2020 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using OpenRA.Scripting;
namespace OpenRA.Mods.Common.Scripting.Global
{
[ScriptGlobal("Angle")]
public class AngleGlobal : ScriptGlobal
{
public AngleGlobal(ScriptContext context)
: base(context) { }
public WAngle North { get { return WAngle.Zero; } }
public WAngle NorthWest { get { return new WAngle(128); } }
public WAngle West { get { return new WAngle(256); } }
public WAngle SouthWest { get { return new WAngle(384); } }
public WAngle South { get { return new WAngle(512); } }
public WAngle SouthEast { get { return new WAngle(640); } }
public WAngle East { get { return new WAngle(768); } }
public WAngle NorthEast { get { return new WAngle(896); } }
[Desc("Create an arbitrary angle.")]
public WAngle New(int a) { return new WAngle(a); }
}
}

View File

@@ -19,13 +19,18 @@ namespace OpenRA.Mods.Common.Scripting.Global
public FacingGlobal(ScriptContext context)
: base(context) { }
public int North { get { return 0; } }
public int NorthWest { get { return 32; } }
public int West { get { return 64; } }
public int SouthWest { get { return 96; } }
public int South { get { return 128; } }
public int SouthEast { get { return 160; } }
public int East { get { return 192; } }
public int NorthEast { get { return 224; } }
void Deprecated()
{
Game.Debug("The Facing table is deprecated. Use Angle instead.");
}
public int North { get { Deprecated(); return 0; } }
public int NorthWest { get { Deprecated(); return 32; } }
public int West { get { Deprecated(); return 64; } }
public int SouthWest { get { Deprecated(); return 96; } }
public int South { get { Deprecated(); return 128; } }
public int SouthEast { get { Deprecated(); return 160; } }
public int East { get { Deprecated(); return 192; } }
public int NorthEast { get { Deprecated(); return 224; } }
}
}

View File

@@ -122,14 +122,14 @@ namespace OpenRA.Mods.Common.Scripting
public WPos CenterPosition { get { return Self.CenterPosition; } }
[Desc("The direction that the actor is facing.")]
public int Facing
public WAngle Facing
{
get
{
if (facing == null)
throw new LuaException("Actor '{0}' doesn't define a facing".F(Self));
return facing.Facing.Facing;
return facing.Facing;
}
}