Files
Convention-Unity/Convention/[Visual]/Workflow/Nodes/StartNodes/ResourceNode.cs

76 lines
2.4 KiB
C#
Raw Normal View History

2025-07-24 15:41:28 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using Convention.WindowsUI;
using Convention.WindowsUI.Variant;
using UnityEngine;
namespace Convention.Workflow
{
[Serializable, ArgPackage]
public class ResourceNodeInfo : StartNodeInfo
{
[NonSerialized] private string l_resource = WorkflowManager.Transformer(nameof(resource));
[InspectorDraw(InspectorDrawType.Text, true, true, nameGenerater: nameof(l_resource))]
public string resource = "unknown";
public ResourceNodeInfo() : this("") { }
public ResourceNodeInfo(string resource, string outmappingName = "value")
{
this.resource = resource;
this.outmapping = new()
{
{
outmappingName, new NodeSlotInfo()
{
slotName = outmappingName,
typeIndicator = "string",
IsInmappingSlot = false,
}
}
};
this.inmapping = new();
this.title = "Resource";
}
protected override NodeInfo CreateTemplate()
{
return new ResourceNodeInfo();
}
protected override void CloneValues([In] NodeInfo clonen)
{
((ResourceNodeInfo)clonen).resource = this.resource;
base.CloneValues(clonen);
}
}
public class ResourceNode : StartNode, IText
{
[Resources, OnlyNotNullMode] public ModernUIInputField InputField;
[Content, OnlyPlayMode] public bool isEditing = false;
public ResourceNodeInfo MyResourceNodeInfo => this.info as ResourceNodeInfo;
public string text { get => ((IText)this.InputField).text; set => ((IText)this.InputField).text = value; }
protected override void Start()
{
base.Start();
InputField.InputFieldSource.Source.onSelect.AddListener(_ => isEditing = true);
InputField.InputFieldSource.Source.onEndEdit.AddListener(str =>
{
MyResourceNodeInfo.resource = str;
isEditing = false;
});
}
private void LateUpdate()
{
if (info != null && this.isEditing == false && RectTransformExtension.IsVisible(this.rectTransform))
{
this.text = this.MyResourceNodeInfo.resource;
}
}
}
}