Use ObjectProviders for workers, tasks and energy providers, close #8

This commit is contained in:
Lucidiot 2018-08-22 07:38:20 +02:00
parent b11e924f3c
commit 65795fd2bb
No known key found for this signature in database
GPG Key ID: AE3F7205692FA205
8 changed files with 23 additions and 24 deletions

View File

@ -25,7 +25,7 @@ namespace LyokoCMD.CommandLine.Commands
Console.WriteLine("Énergie utilisée {0} unités", sc.UsedEnergy.ToString().PadLeft(10));
Console.WriteLine("Énergie disponible {0} unités", sc.AvailableEnergy.ToString().PadLeft(10));
Console.WriteLine();
Console.WriteLine(Text.BuildTable(sc.EnergyProviders.ToArray()));
Console.WriteLine(Text.BuildTable(sc.EnergyProviders.All()));
}
}
}

View File

@ -28,7 +28,7 @@ suspend Suspendre un service.
switch (args[0].Trim().ToLower())
{
case "list":
Console.WriteLine(Text.BuildTable(sc.Workers.ToArray()));
Console.WriteLine(Text.BuildTable(sc.Workers.All()));
break;
case "start":
foreach (string name in args.Skip(1))

View File

@ -43,7 +43,7 @@ cooling status État du système de refroidissement";
);
if (!sc.Running) return;
Console.WriteLine("{0} service(s) en cours d'exécution, {1} au total",
sc.Workers.Count(w => w.Running), sc.Workers.Count);
sc.Workers.All().Count(w => w.Running), sc.Workers.Count);
Console.WriteLine($"{sc.Tasks.Count} tâche(s) disponible(s)");
Console.WriteLine("{0} % d'énergie utilisée", Math.Round((sc.UsedEnergy / sc.TotalEnergy) * 100));
break;

View File

@ -16,7 +16,7 @@ namespace LyokoCMD.CommandLine.Commands
{
Supercomputer sc = Game.Objects.Get<Supercomputer>();
if (!sc.Running) throw new InvalidOperationException("Impossible de se connecter au supercalculateur.");
if (args.Length < 1) Console.WriteLine(Text.BuildTable(sc.Tasks.ToArray()));
if (args.Length < 1) Console.WriteLine(Text.BuildTable(sc.Tasks.All()));
else sc.RunTask(args[0], args.Skip(1).ToArray());
}
}

View File

@ -14,7 +14,7 @@ namespace LyokoCMD.Sim
public static void registerObjects()
{
Supercomputer sc = new Supercomputer();
sc.EnergyProviders.Add(new NuclearCell());
sc.EnergyProviders.Register(new NuclearCell());
// Lyoko
VirtualWorld lyoko = new VirtualWorldBuilder("Lyoko")
.AddSector("Territoire Montagne", "montagne")
@ -25,7 +25,7 @@ namespace LyokoCMD.Sim
.AddWayTowers()
.AddSector("5ème territoire", "cinq", true, 1)
.Build();
sc.Workers.Add(new VirtualWorldWorker(lyoko));
sc.Workers.Register(new VirtualWorldWorker(lyoko));
Objects.Register(lyoko, "Lyoko");
// Lyokoguerriers
Human aelita = new Human("Aelita", true) {DNAStatus = DNAStatus.Missing};
@ -38,14 +38,13 @@ namespace LyokoCMD.Sim
Objects.Register(new Vehicle("Overbike"), "Overbike");
Objects.Register(new Vehicle("Overwing"), "Overwing");
// Virtualisation
sc.Tasks.Add(new VirtualizationTask());
sc.Tasks.Register(new VirtualizationTask());
// Retour vers le passé
TimeWarpEnergyProvider tw = new TimeWarpEnergyProvider();
sc.EnergyProviders.Add(tw);
Objects.Register(tw);
sc.Tasks.Add(new TimeWarpTask());
sc.EnergyProviders.Register(tw);
sc.Tasks.Register(new TimeWarpTask());
sc.Workers.Register(new TimeWarpWorker());
Objects.Register(sc);
sc.Workers.Add(new TimeWarpWorker());
}
}
}

View File

@ -17,7 +17,7 @@ namespace LyokoCMD.Sim
set => _DNAStatus = value;
}
public new bool CanMaterialize => _DNAStatus == DNAStatus.Normal;
public override bool CanMaterialize => _DNAStatus == DNAStatus.Normal;
public Human(string name, bool annexProgram = false) : base(name)
{

View File

@ -17,15 +17,15 @@ namespace LyokoCMD.Sim
public bool Cooling => _Cooling;
private const double BaseTemperature = 90.0;
public List<EnergyProvider> EnergyProviders = new List<EnergyProvider>();
public List<SCWorker> Workers = new List<SCWorker>();
public List<SCTask> Tasks = new List<SCTask>();
public ObjectsRegistry<EnergyProvider> EnergyProviders = new ObjectsRegistry<EnergyProvider>();
public ObjectsRegistry<SCWorker> Workers = new ObjectsRegistry<SCWorker>();
public ObjectsRegistry<SCTask> Tasks = new ObjectsRegistry<SCTask>();
public double Temperature => Math.Round((Running ? BaseTemperature : 20.0) + (Cooling ? -70 : 0) + (UsedEnergy / 100), 1);
public double TotalEnergy => EnergyProviders.Sum(e => e.AvailableEnergy);
public double TotalEnergy => EnergyProviders.All().Sum(e => e.AvailableEnergy);
public double UsedEnergy => Workers.Where(w => w.Running).Sum(w => w.RequiredEnergy);
public double UsedEnergy => Workers.All().Where(w => w.Running).Sum(w => w.RequiredEnergy);
public double AvailableEnergy => TotalEnergy - UsedEnergy;
@ -34,7 +34,7 @@ namespace LyokoCMD.Sim
public void Stop()
{
Console.WriteLine("Arrêt des services...");
Workers.Where(w => w.Running).ForEach(w => w.Stop());
Workers.All().Where(w => w.Running).ForEach(w => w.Stop());
_Running = false;
}
@ -44,8 +44,8 @@ namespace LyokoCMD.Sim
public SCTask GetTask(String name)
{
if (!Tasks.Exists(t => t.Name.ToLower() == name.ToLower())) throw new ArgumentException("Tâche introuvable");
return Tasks.Find(t => t.Name.ToLower() == name.ToLower());
if (!Tasks.All().Any(t => t.Name.ToLower() == name.ToLower())) throw new ArgumentException("Tâche introuvable");
return Tasks.All().First(t => t.Name.ToLower() == name.ToLower());
}
public void RunTask(string name) => RunTask(name, new string[] { });
@ -53,7 +53,7 @@ namespace LyokoCMD.Sim
public void RunTask(String name, string[] args)
{
if (!Running) throw new InvalidOperationException("Impossible d'exécuter une tâche sur un supercalculateur éteint");
if (!Tasks.Exists(t => t.Name.ToLower() == name.ToLower())) throw new ArgumentException("Tâche introuvable");
if (!Tasks.All().Any(t => t.Name.ToLower() == name.ToLower())) throw new ArgumentException("Tâche introuvable");
SCTask task = GetTask(name);
if (task.RequiredEnergy > AvailableEnergy) throw new InvalidOperationException("Pas assez d'énergie pour exécuter la tâche");
task.Run(args);
@ -61,8 +61,8 @@ namespace LyokoCMD.Sim
public SCWorker GetWorker(String name)
{
if (!Workers.Exists(w => w.Name.ToLower() == name.ToLower())) throw new ArgumentException("Service introuvable");
return Workers.Find(w => w.Name.ToLower() == name.ToLower());
if (!Workers.All().Any(w => w.Name.ToLower() == name.ToLower())) throw new ArgumentException("Service introuvable");
return Workers.All().First(w => w.Name.ToLower() == name.ToLower());
}
public void StartWorker(String name)

View File

@ -20,7 +20,7 @@ namespace LyokoCMD.Sim.Virtual
public Coordinates Coordinates => _Coordinates;
protected bool _CanMaterialize;
public bool CanMaterialize => _CanMaterialize;
public virtual bool CanMaterialize => _CanMaterialize;
protected Virtualizable(string name, Coordinates coords = null, bool canMaterialize = true)
{