class DBMTimers {
public static int NumBars
{
get { return Lua.GetReturnVal<int>("return DBM.Bars.numBars", 0); }
}
public static IEnumerable<DBMTimerBar> Bars
{
get
{
var barIds =
Lua.GetReturnVal<string>(
"t={} for bar in pairs(DBM.Bars.bars) do table.insert(t, bar.id) end return (table.concat(t,'@!@'))",
0);
foreach (var barId in barIds.Split(new[]{"@!@"}, StringSplitOptions.RemoveEmptyEntries))
{
yield return new DBMTimerBar(barId);
}
}
}
internal class DBMTimerBar
{
public string Id { get; private set; }
public DBMTimerBar(string barId)
{
Id = barId;
}
public bool Dead { get { return Lua.GetReturnVal<bool>(FindBarAndExecute(Id, "return bar.dead"), 0); } }
public bool Dummy { get { return Lua.GetReturnVal<bool>(FindBarAndExecute(Id, "return bar.dummy"), 0); } }
public bool Flashing { get { return Lua.GetReturnVal<bool>(FindBarAndExecute(Id, "return bar.flashing"), 0); } }
public bool Enlarged { get { return Lua.GetReturnVal<bool>(FindBarAndExecute(Id, "return bar.enlarged"), 0); } }
public bool FadingIn { get { return Lua.GetReturnVal<bool>(FindBarAndExecute(Id, "return bar.fadingIn"), 0); } }
public float LuaTimeLeft { get { return Lua.GetReturnVal<float>(FindBarAndExecute(Id, "return bar.timer"), 0); } }
public float LuaTotalTime { get { return Lua.GetReturnVal<float>(FindBarAndExecute(Id, "return bar.totalTime"), 0); } }
public TimeSpan TotalTime { get { return TimeSpan.FromSeconds(LuaTotalTime); } }
public TimeSpan TimeLeft { get { return TimeSpan.FromSeconds(LuaTimeLeft); } }
public void Cancel()
{
Lua.DoString(FindBarAndExecute(Id, "bar:Cancel()"));
}
public override string ToString()
{
return string.Format("Id: {0}, TotalTime: {1}, TimeLeft: {2}", Id, TotalTime, TimeLeft);
}
}
static string FindBarAndExecute(string id, string doStuff)
{
return string.Format("for bar in pairs(DBM.Bars.bars) do if '{0}' == bar.id then {1} end end",
id,
doStuff);
}
}