156 lines
4.0 KiB
C#
156 lines
4.0 KiB
C#
using Godot;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using BITKit;
|
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal;
|
|
|
|
namespace BITFactory;
|
|
|
|
public partial class IDIS_RegisterService : Node
|
|
{
|
|
[ExportCategory("Services")]
|
|
[Export] private IDIS_Service service;
|
|
[Export] private IDIS_TemplateService templateService;
|
|
|
|
[ExportCategory("UI 绑定")]
|
|
[Export] private NodeBuilder templateIndexBuilder;
|
|
[Export] private LineEdit handleEdit;
|
|
[Export] private Button generateHandleButton;
|
|
[Export] private NodeBuilder templateFormatBuilder;
|
|
[Export] private Button registerButton;
|
|
[Export] private ProgressBar registerProgress;
|
|
|
|
[ExportCategory("Register Reference")]
|
|
[Export] private Control referenceContainer;
|
|
[Export] private Button addReferenceButton;
|
|
|
|
[ExportCategory("Hints")]
|
|
[Export] private Label hints;
|
|
|
|
private readonly List<(string format,string value,string category)> _currentValues = new();
|
|
private readonly List<string> _currentReferences = new();
|
|
|
|
public override void _Ready()
|
|
{
|
|
registerButton.Pressed += Register;
|
|
|
|
generateHandleButton.Pressed += ()=>handleEdit.Text = IDIS_Service.GenerateHandle();
|
|
|
|
addReferenceButton.Pressed += AddReferenceEdit;
|
|
|
|
handleEdit.Editable = false;
|
|
registerButton.Disabled = true;
|
|
|
|
Rebuild();
|
|
}
|
|
|
|
private void Rebuild()
|
|
{
|
|
if (Engine.IsEditorHint()) return;
|
|
templateIndexBuilder.Clear();
|
|
templateFormatBuilder.Clear();
|
|
foreach (var x in templateService.templates)
|
|
{
|
|
var container = templateIndexBuilder.Build<UXContainer>();
|
|
container.button.Text = x.TemplateName;
|
|
container.button.Pressed += () =>
|
|
{
|
|
Entry(x);
|
|
};
|
|
}
|
|
}
|
|
|
|
private void Entry(IDIS_Template template)
|
|
{
|
|
_currentValues.Clear();
|
|
templateFormatBuilder.Clear();
|
|
var currentIndex = 0;
|
|
foreach (var x in template.Formats)
|
|
{
|
|
var myIndex = currentIndex++;
|
|
|
|
_currentValues.Add((x.format, string.Empty, x.category));
|
|
|
|
var formatContainer = templateFormatBuilder.Build<UXContainer>();
|
|
|
|
formatContainer.labels[0].Text = x.format;
|
|
formatContainer.lineEdits[0].PlaceholderText = x.hint;
|
|
|
|
formatContainer.lineEdits[0].TextChanged += s =>
|
|
{
|
|
var value = _currentValues[myIndex];
|
|
value.value = s;
|
|
_currentValues[myIndex] = value;
|
|
};
|
|
}
|
|
|
|
handleEdit.Editable = true;
|
|
registerButton.Disabled = false;
|
|
}
|
|
|
|
private void AddReferenceEdit()
|
|
{
|
|
var lineEdit = new LineEdit();
|
|
|
|
var currentIndex = referenceContainer.GetChildCount();
|
|
|
|
_currentReferences.Add(string.Empty);
|
|
lineEdit.TextChanged += s =>
|
|
{
|
|
_currentReferences[currentIndex] = s;
|
|
};
|
|
|
|
lineEdit.Text = "88.123.99/";
|
|
|
|
referenceContainer.AddChild(lineEdit);
|
|
}
|
|
private void Register()
|
|
{
|
|
if (_currentValues.Any(x =>
|
|
string.IsNullOrEmpty(x.format) || string.IsNullOrEmpty(x.value) || string.IsNullOrEmpty(x.category)))
|
|
{
|
|
hints.SetTextAsync("请填写完整的数据格式");
|
|
return;
|
|
}
|
|
|
|
var handle = string.IsNullOrEmpty(handleEdit.Text) ? IDIS_Service.GenerateHandle() : handleEdit.Text;
|
|
var dataJson = JsonHelper.Get(_currentValues);
|
|
var referenceJson = JsonHelper.Get(_currentReferences);
|
|
|
|
BIT4Log.Log<IDIS_RegisterService>($"注册标识:{handle}");
|
|
BIT4Log.Log<IDIS_RegisterService>($"\n{dataJson}");
|
|
BIT4Log.Log<IDIS_RegisterService>("注册引用:");
|
|
BIT4Log.Log<IDIS_RegisterService>($"\n{referenceJson}");
|
|
|
|
hints.Text="正在注册...";
|
|
|
|
service.Register(handle);
|
|
foreach (var x in _currentValues)
|
|
{
|
|
service.Register(handle, x.format, x.value,x.category);
|
|
}
|
|
foreach (var x in _currentReferences)
|
|
{
|
|
service.RegisterReference(handle, x);
|
|
}
|
|
|
|
var tween = CreateTween();
|
|
registerButton.Disabled = true;
|
|
registerProgress.Value = 0;
|
|
tween.TweenProperty(registerProgress, "value", registerProgress.MaxValue, 0.5f);
|
|
tween.Finished+= () =>
|
|
{
|
|
registerProgress.Value = 0;
|
|
registerProgress.Visible = false;
|
|
registerButton.Disabled = false;
|
|
hints.Text = "注册成功";
|
|
tween.Stop();
|
|
};
|
|
tween.Play();
|
|
|
|
handleEdit.Text = string.Empty;
|
|
}
|
|
}
|