71 lines
2.3 KiB
C#
71 lines
2.3 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using BITKit;
|
|
using BITKit.Entities;
|
|
using BITKit.UX;
|
|
using Cysharp.Threading.Tasks;
|
|
using Net.Project.B.Quest;
|
|
using UnityEngine;
|
|
using UnityEngine.UIElements;
|
|
|
|
namespace Net.Project.B.PDA.App
|
|
{
|
|
public class AppQuest: PDAApp<Quest>
|
|
{
|
|
private readonly IQuestService _questService;
|
|
protected override string DocumentPath=>"ui_app_quest";
|
|
|
|
[UXBindPath("quest-container")] private VisualElement _questContainer;
|
|
|
|
private VisualTreeAsset _template;
|
|
|
|
private readonly Dictionary<int, VisualElement> _visualElements = new();
|
|
|
|
public AppQuest(IQuestService questService)
|
|
{
|
|
_questService = questService;
|
|
|
|
_questService.OnQuestCreatedOrUpdated += OnQuestCreatedOrUpdated;
|
|
}
|
|
|
|
private void OnQuestCreatedOrUpdated(IQuestData arg1, QuestState arg2, QuestState arg3)
|
|
{
|
|
if(_visualElements.TryGetValue(arg1.Identity, out var ve) is false)
|
|
{
|
|
_visualElements[arg1.Identity] =ve = _questContainer.Create(_template);
|
|
}
|
|
SetUp(ve,arg1);
|
|
}
|
|
|
|
public override async UniTask InitializeAsync()
|
|
{
|
|
await base.InitializeAsync();
|
|
|
|
UXUtils.Inject(this,RootVisualElement);
|
|
_template = _questContainer.Q<TemplateContainer>().templateSource;
|
|
_questContainer.Clear();
|
|
|
|
foreach (var (id, questData) in _questService.Quests)
|
|
{
|
|
var container = _visualElements[id] = _questContainer.Create(_template);
|
|
SetUp(container, questData);
|
|
}
|
|
}
|
|
|
|
private static void SetUp(VisualElement container, IQuestData questData)
|
|
{
|
|
BITApp.ServiceProvider.QueryComponents(out IEntitiesService entitiesService);
|
|
|
|
container.Get<Label>().text = questData.Name;
|
|
container.Get<Label>(1).text = questData.Description;
|
|
|
|
if (entitiesService.TryGetEntity(questData.Identity, out var questEntity) &&
|
|
questEntity.ServiceProvider.QueryComponents(out IQuestNode questNode))
|
|
{
|
|
container.AddToClassList(questNode.GetType().Name);
|
|
}
|
|
}
|
|
}
|
|
}
|