Use ObjectProviders for workers, tasks and energy providers, close #8
This commit is contained in:
parent
b11e924f3c
commit
65795fd2bb
|
@ -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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Reference in New Issue