Files
Net.Like.Xue.Tokyo/Packages-Local/Com.Project.B.Unity/PDA/AppQuest.cs
2025-06-24 23:49:13 +08:00

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);
}
}
}
}