Move classes into Program class.
This commit is contained in:
parent
497f5887bd
commit
eac331b4ee
|
@ -4,40 +4,43 @@ using System.Collections.Generic;
|
||||||
|
|
||||||
namespace IngameScript
|
namespace IngameScript
|
||||||
{
|
{
|
||||||
public class ConfigParser
|
partial class Program
|
||||||
{
|
{
|
||||||
private Dictionary<string, string> _config;
|
public class ConfigParser
|
||||||
private IMyTerminalBlock _input;
|
|
||||||
|
|
||||||
public ConfigParser(IMyTerminalBlock input)
|
|
||||||
{
|
{
|
||||||
_input = input;
|
private Dictionary<string, string> _config;
|
||||||
_config = new Dictionary<string, string>();
|
private IMyTerminalBlock _input;
|
||||||
Parse();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get a config value, or a default value.
|
public ConfigParser(IMyTerminalBlock input)
|
||||||
// that also does type inference, but the type of `defaultValue` must contain a `Parse()` method.
|
|
||||||
public T GetValue<T>(string key, T defaultValue)
|
|
||||||
{
|
|
||||||
if (!_config.ContainsKey(key))
|
|
||||||
{
|
{
|
||||||
return defaultValue;
|
_input = input;
|
||||||
|
_config = new Dictionary<string, string>();
|
||||||
|
Parse();
|
||||||
}
|
}
|
||||||
return (T)Convert.ChangeType(_config[key], typeof(T));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only call this method manually if you are monitoring CustomData for changes.
|
// Get a config value, or a default value.
|
||||||
public void Parse()
|
// that also does type inference, but the type of `defaultValue` must contain a `Parse()` method.
|
||||||
{
|
public T GetValue<T>(string key, T defaultValue)
|
||||||
_config.Clear();
|
|
||||||
string[] lines = _input.CustomData.Split('\n');
|
|
||||||
foreach (string line in lines)
|
|
||||||
{
|
{
|
||||||
string[] tokens = line.Split('=');
|
if (!_config.ContainsKey(key))
|
||||||
if (tokens.Length != 2) continue;
|
{
|
||||||
_config[tokens[0]] = tokens[1];
|
return defaultValue;
|
||||||
|
|
||||||
|
}
|
||||||
|
return (T)Convert.ChangeType(_config[key], typeof(T));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only call this method manually if you are monitoring CustomData for changes.
|
||||||
|
public void Parse()
|
||||||
|
{
|
||||||
|
_config.Clear();
|
||||||
|
string[] lines = _input.CustomData.Split('\n');
|
||||||
|
foreach (string line in lines)
|
||||||
|
{
|
||||||
|
string[] tokens = line.Split('=');
|
||||||
|
if (tokens.Length != 2) continue;
|
||||||
|
_config[tokens[0]] = tokens[1];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,70 +8,82 @@ using System.Text;
|
||||||
|
|
||||||
namespace IngameScript
|
namespace IngameScript
|
||||||
{
|
{
|
||||||
public class Console
|
partial class Program
|
||||||
{
|
{
|
||||||
private MyGridProgram _program;
|
public interface IConsole
|
||||||
private int _maxLines;
|
|
||||||
private List<string> _buffer;
|
|
||||||
|
|
||||||
private const int DefaultMaxLines = 10;
|
|
||||||
|
|
||||||
public Console(MyGridProgram program)
|
|
||||||
{
|
{
|
||||||
_program = program;
|
void Print(string text);
|
||||||
_buffer = new List<string>();
|
void PrintLower(string text);
|
||||||
|
|
||||||
// Check the PB's custom data for a maxlines directive.
|
|
||||||
ConfigParser config = new ConfigParser(_program.Me);
|
|
||||||
_maxLines = config.GetValue("ConsoleMaxLines", DefaultMaxLines);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public PrefixedConsole CreatePrefixedConsole(string prefix)
|
public class Console : IConsole
|
||||||
{
|
{
|
||||||
return new PrefixedConsole(this, prefix);
|
private MyGridProgram _program;
|
||||||
|
private int _maxLines;
|
||||||
|
private List<string> _buffer;
|
||||||
|
|
||||||
|
private const int DefaultMaxLines = 10;
|
||||||
|
|
||||||
|
public Console(MyGridProgram program)
|
||||||
|
{
|
||||||
|
_program = program;
|
||||||
|
_buffer = new List<string>();
|
||||||
|
|
||||||
|
// Check the PB's custom data for a maxlines directive.
|
||||||
|
ConfigParser config = new ConfigParser(_program.Me);
|
||||||
|
_maxLines = config.GetValue("ConsoleMaxLines", DefaultMaxLines);
|
||||||
|
}
|
||||||
|
|
||||||
|
public PrefixedConsole CreatePrefixedConsole(string prefix)
|
||||||
|
{
|
||||||
|
return new PrefixedConsole(this, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Print(string text)
|
||||||
|
{
|
||||||
|
_program.Echo(text);
|
||||||
|
_program.Me.GetSurface(0).WriteText(writeToBuffer(text));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Text written with this method goes to the lower screen / keyboard,
|
||||||
|
// with no buffering.
|
||||||
|
public void PrintLower(string text)
|
||||||
|
{
|
||||||
|
_program.Me.GetSurface(1).WriteText(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Adds the text to the buffer, trims the top if necessary, and builds a printable
|
||||||
|
// string.
|
||||||
|
private string writeToBuffer(string text)
|
||||||
|
{
|
||||||
|
_buffer.Add(text);
|
||||||
|
if (_buffer.Count > _maxLines) _buffer.RemoveAt(0);
|
||||||
|
StringBuilder result = new StringBuilder("", 800);
|
||||||
|
foreach (string line in _buffer) result.AppendLine(line);
|
||||||
|
return result.ToString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Print(string text)
|
// This class is necessary because we need to keep a *single* buffer
|
||||||
|
// to write to. So we can ask the primary Console for a prefixer.
|
||||||
|
public class PrefixedConsole : IConsole
|
||||||
{
|
{
|
||||||
_program.Echo(text);
|
private IConsole _console;
|
||||||
_program.Me.GetSurface(0).WriteText(writeToBuffer(text));
|
private string _prefix;
|
||||||
}
|
|
||||||
|
|
||||||
// Text written with this method goes to the lower screen / keyboard,
|
public PrefixedConsole(IConsole console, string prefix)
|
||||||
// with no buffering.
|
{
|
||||||
public void PrintLower(string text)
|
_console = console;
|
||||||
{
|
_prefix = prefix + ": ";
|
||||||
_program.Me.GetSurface(1).WriteText(text);
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Adds the text to the buffer, trims the top if necessary, and builds a printable
|
public void Print(string text)
|
||||||
// string.
|
{
|
||||||
private string writeToBuffer(string text)
|
_console.Print(_prefix + text);
|
||||||
{
|
}
|
||||||
_buffer.Add(text);
|
|
||||||
if (_buffer.Count > _maxLines) _buffer.RemoveAt(0);
|
|
||||||
StringBuilder result = new StringBuilder("", 800);
|
|
||||||
foreach (string line in _buffer) result.AppendLine(line);
|
|
||||||
return result.ToString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This class is necessary because we need to keep a *single* buffer
|
// sub-consoles can't print to the ephemeral display
|
||||||
// to write to. So we can ask the primary Console for a prefixer.
|
public void PrintLower(string text) { }
|
||||||
public class PrefixedConsole
|
|
||||||
{
|
|
||||||
private Console _console;
|
|
||||||
private string _prefix;
|
|
||||||
|
|
||||||
public PrefixedConsole(Console console, string prefix)
|
|
||||||
{
|
|
||||||
_console = console;
|
|
||||||
_prefix = prefix + ": ";
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Print(string text)
|
|
||||||
{
|
|
||||||
_console.Print(_prefix + text);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user