Files
basic-computer-games/84_Super_Star_Trek/csharp/Systems/LibraryComputer.cs
2022-03-22 17:55:44 +11:00

46 lines
1.2 KiB
C#

using Games.Common.IO;
using SuperStarTrek.Commands;
using SuperStarTrek.Space;
using SuperStarTrek.Systems.ComputerFunctions;
namespace SuperStarTrek.Systems;
internal class LibraryComputer : Subsystem
{
private readonly IReadWrite _io;
private readonly ComputerFunction[] _functions;
internal LibraryComputer(IReadWrite io, params ComputerFunction[] functions)
: base("Library-Computer", Command.COM, io)
{
_io = io;
_functions = functions;
}
protected override bool CanExecuteCommand() => IsOperational("Computer disabled");
protected override CommandResult ExecuteCommandCore(Quadrant quadrant)
{
var index = GetFunctionIndex();
_io.WriteLine();
_functions[index].Execute(quadrant);
return CommandResult.Ok;
}
private int GetFunctionIndex()
{
while (true)
{
var index = (int)_io.ReadNumber("Computer active and waiting command");
if (index >= 0 && index <= 5) { return index; }
for (int i = 0; i < _functions.Length; i++)
{
_io.WriteLine($" {i} = {_functions[i].Description}");
}
}
}
}