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

58 lines
1.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using BITKit;
using Microsoft.CodeAnalysis.CSharp.Scripting;
using Microsoft.CodeAnalysis.Scripting;
using NodeCanvas.Framework;
using UnityEngine;
namespace Net.Project.B.NodeCanvas
{
public abstract class DataTask<T> : ActionTask
{
public BBParameter<string> key;
public BBParameter<string> script;
protected override async void OnExecute()
{
var currentValue = Data.Get<T>(key.value);
var options = ScriptOptions.Default
.WithImports("System")
.WithReferences(typeof(object).Assembly);
var stringValue = currentValue?.ToString();
if (currentValue is string s)
{
stringValue = $"\"{s}\"";
}else if (currentValue is null)
{
stringValue = "null";
}
var code = script.value.Replace("x", stringValue);
var result = await CSharpScript.EvaluateAsync<T>(code,options);
Data.Set(key.value,result);
EndAction(true);
}
}
public class StringDataTask : DataTask<string>
{
}
public class IntDataTask : DataTask<int>
{
}
public class FloatDataTask : DataTask<float>
{
}
}