Fan website of IMMORTAL: Gates of Pyre.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

99 lines
2.8 KiB

using Model.Entity;
using Model.Entity.Data;
using Model.MemoryTester;
using static Services.IMemoryTesterService;
namespace Services.Immortal;
public enum MemoryTesterEvent {
OnVerify,
OnRefresh
}
public class MemoryTesterService : IMemoryTesterService {
private readonly List<MemoryEntityModel> memoryEntities = MemoryEntityModel.TestData;
private readonly List<MemoryQuestionModel> memoryQuestions = MemoryQuestionModel.TestData;
private readonly Random random = new();
private event MemoryAction OnChange = null!;
public void Subscribe(MemoryAction action) {
OnChange += action;
}
public void Unsubscribe(MemoryAction action) {
OnChange -= action;
}
public void GenerateQuiz() {
memoryEntities.Clear();
memoryQuestions.Clear();
//TODO redo this
var units = (from entity in EntityModel.GetListOnlyHotkey()
where entity.EntityType == EntityType.Army
where entity.Weapons().Count > 0
select entity).OrderBy(entity => random.Next()).Take(4).ToList();
var entityIndex = 0;
var questionIndex = 0;
foreach (var unit in units) {
memoryEntities.Add(new MemoryEntityModel {
Id = ++entityIndex,
Name = unit.Info().Name
});
var weaponIndex = 0;
foreach (var weapon in unit.Weapons()) {
weaponIndex++;
memoryQuestions.Add(new MemoryQuestionModel {
Id = ++questionIndex,
MemoryEntityModelId = entityIndex,
Name = $"Range (Weapon {weaponIndex})",
Answer = weapon.Range,
IsRevealed = entityIndex == 1 || entityIndex == 3
});
}
memoryQuestions.Add(new MemoryQuestionModel {
Id = ++questionIndex,
MemoryEntityModelId = entityIndex,
Name = "Speed",
Answer = (int)unit.Movement().Speed,
IsRevealed = entityIndex == 1 || entityIndex == 2
});
}
NotifyDataChanged(MemoryTesterEvent.OnRefresh);
}
public List<MemoryEntityModel> GetEntities() {
return memoryEntities;
}
public List<MemoryQuestionModel> GetQuestions() {
return memoryQuestions;
}
public void Update(MemoryQuestionModel memoryQuestion) {
memoryQuestions[memoryQuestion.Id - 1].Guess = memoryQuestion.Guess;
}
public void Verify() {
NotifyDataChanged(MemoryTesterEvent.OnVerify);
}
//public delegate void MemoryAction(MemoryTesterActions memoryAction);
private void NotifyDataChanged(MemoryTesterEvent memoryAction) {
OnChange?.Invoke(memoryAction);
}
}