mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-23 07:29:02 -08:00
48 lines
1.4 KiB
C#
48 lines
1.4 KiB
C#
using SuperStarTrek.Commands;
|
|
using SuperStarTrek.Space;
|
|
using SuperStarTrek.Systems.ComputerFunctions;
|
|
|
|
namespace SuperStarTrek.Systems
|
|
{
|
|
internal class LibraryComputer : Subsystem
|
|
{
|
|
private readonly Output _output;
|
|
private readonly Input _input;
|
|
private readonly ComputerFunction[] _functions;
|
|
|
|
internal LibraryComputer(Output output, Input input, params ComputerFunction[] functions)
|
|
: base("Library-Computer", Command.COM, output)
|
|
{
|
|
_output = output;
|
|
_input = input;
|
|
_functions = functions;
|
|
}
|
|
|
|
protected override bool CanExecuteCommand() => IsOperational("Computer disabled");
|
|
|
|
protected override CommandResult ExecuteCommandCore(Quadrant quadrant)
|
|
{
|
|
var index = GetFunctionIndex();
|
|
_output.NextLine();
|
|
|
|
_functions[index].Execute(quadrant);
|
|
|
|
return CommandResult.Ok;
|
|
}
|
|
|
|
private int GetFunctionIndex()
|
|
{
|
|
while (true)
|
|
{
|
|
var index = (int)_input.GetNumber("Computer active and waiting command");
|
|
if (index >= 0 && index <= 5) { return index; }
|
|
|
|
for (int i = 0; i < _functions.Length; i++)
|
|
{
|
|
_output.WriteLine($" {i} = {_functions[i].Description}");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|