157 lines
3.9 KiB
C#
157 lines
3.9 KiB
C#
using Godot;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.InteropServices;
|
|
using BITKit;
|
|
|
|
namespace BITFactory;
|
|
|
|
public partial class IDIS_RegisterService : Node
|
|
{
|
|
[ExportCategory("Services")]
|
|
[Export] private IDIS_Service service;
|
|
[Export] private IDIS_TemplateService templateService;
|
|
|
|
[ExportCategory("TemplateList")]
|
|
[Export] private ItemList templateList;
|
|
|
|
[ExportCategory("Register Data")]
|
|
[Export] private LineEdit handleEdit;
|
|
[Export] private Button generateHandleButton;
|
|
[Export] private Control registerContainer;
|
|
[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 Dictionary<int, KeyValuePair<string, string>> _currentValues = new();
|
|
private readonly List<string> _currentReferences = new();
|
|
|
|
public override void _Ready()
|
|
{
|
|
templateList.ItemClicked += OnItemClicked;
|
|
|
|
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;
|
|
templateList.Clear();
|
|
foreach (var x in templateService.templates)
|
|
{
|
|
templateList.AddItem(x.TemplateName);
|
|
}
|
|
}
|
|
|
|
private void OnItemClicked(long index, Vector2 atPosition, long mouseButtonIndex)
|
|
{
|
|
MathNode.RemoveAllChild(registerContainer);
|
|
MathNode.RemoveAllChild(referenceContainer);
|
|
|
|
var template = templateService.templates[(int)index];
|
|
|
|
|
|
var grid = new GridContainer();
|
|
grid.Columns = 2;
|
|
grid.AddThemeConstantOverride("h_separation", 64);
|
|
|
|
registerContainer.AddChild(grid);
|
|
|
|
_currentValues.Clear();
|
|
|
|
var _dirIndex = 0;
|
|
foreach (var x in template.Formats)
|
|
{
|
|
var label = new Label();
|
|
var lineEdit = new LineEdit();
|
|
|
|
var myIndex = _dirIndex++;
|
|
|
|
label.Text = x.format;
|
|
|
|
lineEdit.PlaceholderText = x.hint;
|
|
lineEdit.SizeFlagsHorizontal = Control.SizeFlags.ExpandFill;
|
|
|
|
_currentValues.Add(myIndex, new KeyValuePair<string, string>(x.format, x.hint));
|
|
|
|
lineEdit.TextChanged += (s) => { _currentValues[myIndex] = new KeyValuePair<string, string>(x.format, s); };
|
|
|
|
grid.AddChild(label);
|
|
grid.AddChild(lineEdit);
|
|
}
|
|
|
|
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()
|
|
{
|
|
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.Value.Key, x.Value.Value);
|
|
}
|
|
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.Play();
|
|
|
|
handleEdit.Text = string.Empty;
|
|
}
|
|
}
|