mirror of
https://github.com/MaddyThorson/StrawberryBF.git
synced 2025-02-18 11:38:28 +08:00
More console progress
This commit is contained in:
parent
9de0160957
commit
75364ade37
@ -66,6 +66,34 @@ namespace Strawberry
|
|||||||
return current >= startDelay && (current - startDelay) % (interval * 2) >= interval;
|
return current >= startDelay && (current - startDelay) % (interval * 2) >= interval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public String StringArgs(String str, Object[] args)
|
||||||
|
{
|
||||||
|
for (let i < args.Count)
|
||||||
|
{
|
||||||
|
if (args[i] is delegate void(String))
|
||||||
|
{
|
||||||
|
let del = args[i] as delegate void(String);
|
||||||
|
let argStr = scope:: String();
|
||||||
|
del(argStr);
|
||||||
|
args[i] = argStr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i < args.Count)
|
||||||
|
{
|
||||||
|
String arg = scope String();
|
||||||
|
String num = scope String("{x}");
|
||||||
|
i.ToString(arg);
|
||||||
|
num.Replace("x", arg);
|
||||||
|
|
||||||
|
arg.Clear();
|
||||||
|
args[i].ToString(arg);
|
||||||
|
str.Replace(num, arg);
|
||||||
|
}
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
[Inline]
|
[Inline]
|
||||||
static public void Log()
|
static public void Log()
|
||||||
{
|
{
|
||||||
@ -88,23 +116,7 @@ namespace Strawberry
|
|||||||
Debug.WriteLine(string);
|
Debug.WriteLine(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
static private String StringArgs(String str, Object[] args)
|
[Inline]
|
||||||
{
|
|
||||||
for (let i < args.Count)
|
|
||||||
{
|
|
||||||
String arg = scope String();
|
|
||||||
String num = scope String("{x}");
|
|
||||||
i.ToString(arg);
|
|
||||||
num.Replace("x", arg);
|
|
||||||
|
|
||||||
arg.Clear();
|
|
||||||
args[i].ToString(arg);
|
|
||||||
str.Replace(num, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
static public void Log(StringView str, params Object[] args)
|
static public void Log(StringView str, params Object[] args)
|
||||||
{
|
{
|
||||||
let string = StringArgs(scope String(str), args);
|
let string = StringArgs(scope String(str), args);
|
||||||
|
@ -5,6 +5,7 @@ using Strawberry;
|
|||||||
|
|
||||||
namespace Strawberry
|
namespace Strawberry
|
||||||
{
|
{
|
||||||
|
[AttributeUsage(.Method, .AlwaysIncludeTarget | .ReflectAttribute)]
|
||||||
public struct CommandAttribute : Attribute
|
public struct CommandAttribute : Attribute
|
||||||
{
|
{
|
||||||
public String Name;
|
public String Name;
|
||||||
@ -48,7 +49,6 @@ namespace Strawberry
|
|||||||
commands.Add(attr.Value.Name, new CommandInfo(method, attr.Value));
|
commands.Add(attr.Value.Name, new CommandInfo(method, attr.Value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Calc.Log(commands.Count);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void Dispose()
|
static public void Dispose()
|
||||||
@ -57,7 +57,9 @@ namespace Strawberry
|
|||||||
delete entry;
|
delete entry;
|
||||||
DeleteContainerAndItems!(commandHistory);
|
DeleteContainerAndItems!(commandHistory);
|
||||||
DeleteContainerAndItems!(messages);
|
DeleteContainerAndItems!(messages);
|
||||||
DeleteDictionaryAndKeysAndItems!(commands);
|
for (let c in commands.Values)
|
||||||
|
delete c;
|
||||||
|
delete commands;
|
||||||
}
|
}
|
||||||
|
|
||||||
static public bool Enabled
|
static public bool Enabled
|
||||||
@ -87,7 +89,6 @@ namespace Strawberry
|
|||||||
Log(string);
|
Log(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
[AlwaysInclude]
|
|
||||||
[Reflect]
|
[Reflect]
|
||||||
[Command("clear", "Clears the console window")]
|
[Command("clear", "Clears the console window")]
|
||||||
static public void Clear()
|
static public void Clear()
|
||||||
@ -123,12 +124,14 @@ namespace Strawberry
|
|||||||
{
|
{
|
||||||
let list = String.StackSplit!(line, ' ');
|
let list = String.StackSplit!(line, ' ');
|
||||||
list.RemoveAll(scope => String.IsNullOrWhiteSpace);
|
list.RemoveAll(scope => String.IsNullOrWhiteSpace);
|
||||||
Calc.Log("hey {0}");
|
|
||||||
|
|
||||||
if (commands.ContainsKey(list[0]))
|
if (commands.ContainsKey(list[0]))
|
||||||
{
|
{
|
||||||
Log(line);
|
Log(line);
|
||||||
//Do it
|
let args = scope String[list.Count - 1];
|
||||||
|
for (let i < args.Count)
|
||||||
|
args[i] = list[i + 1];
|
||||||
|
commands[list[0]].Call(args);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Log("Command '{0}' not recognized.", list[0]);
|
Log("Command '{0}' not recognized.", list[0]);
|
||||||
@ -170,13 +173,58 @@ namespace Strawberry
|
|||||||
|
|
||||||
private class CommandInfo
|
private class CommandInfo
|
||||||
{
|
{
|
||||||
public delegate void(String[]) Action ~ delete _;
|
|
||||||
public String Help;
|
public String Help;
|
||||||
public String Usage ~ delete _;
|
public String Usage ~ delete _;
|
||||||
|
public MethodInfo Method;
|
||||||
|
|
||||||
public this(MethodInfo method, CommandAttribute attr)
|
public this(MethodInfo method, CommandAttribute attr)
|
||||||
{
|
{
|
||||||
Help = attr.Help;
|
Help = attr.Help;
|
||||||
|
Method = method;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Call(String[] args)
|
||||||
|
{
|
||||||
|
let objs = scope Object[Method.ParamCount];
|
||||||
|
for (let i < objs.Count)
|
||||||
|
{
|
||||||
|
if (i < args.Count)
|
||||||
|
objs[i] = Convert(args[i], Method.GetParamType(i));
|
||||||
|
else
|
||||||
|
objs[i] = Method.GetParamType(i).CreateValueDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
Method.Invoke(null, objs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static private Object Convert(String str, Type type)
|
||||||
|
{
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case typeof(StringView):
|
||||||
|
return str;
|
||||||
|
|
||||||
|
case typeof(int):
|
||||||
|
return int.Parse(str).Value;
|
||||||
|
|
||||||
|
case typeof(float):
|
||||||
|
return float.Parse(str).Value;
|
||||||
|
|
||||||
|
case typeof(bool):
|
||||||
|
return bool.Parse(str).Value;
|
||||||
|
|
||||||
|
case typeof(String):
|
||||||
|
Runtime.FatalError("String arguments not supported in commands. Use StringView instead.");
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
let name = scope String();
|
||||||
|
type.GetName(name);
|
||||||
|
let error = Calc.StringArgs("{0} type arguments not supported in commands.", scope Object[] { name });
|
||||||
|
Runtime.FatalError(error);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user