|
|
|
|
@@ -564,6 +564,73 @@ static Task<SceneValidationProbeResult> ValidateSceneOperationsAsync(SceneValida
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (string.Equals(operation.Method, "SetVisible", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
handler.ResetVisibleTask();
|
|
|
|
|
sceneObject.SetVisible(operation.Visible ? 1 : 0);
|
|
|
|
|
if (!WaitForTaskWithMessagePump(handler.VisibleTask, options.Connection.Timeout))
|
|
|
|
|
{
|
|
|
|
|
results.Add(new SceneOperationValidationResult(
|
|
|
|
|
operation.ObjectName,
|
|
|
|
|
operation.Method,
|
|
|
|
|
DescribeOperationPayload(operation),
|
|
|
|
|
"TIMEOUT",
|
|
|
|
|
"OnSetVisible timed out."));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var callbackResult = handler.VisibleTask.Result;
|
|
|
|
|
results.Add(new SceneOperationValidationResult(
|
|
|
|
|
operation.ObjectName,
|
|
|
|
|
operation.Method,
|
|
|
|
|
DescribeOperationPayload(operation),
|
|
|
|
|
callbackResult.ToString(),
|
|
|
|
|
string.Empty));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (string.Equals(operation.Method, "SetStyleColor", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
if (sceneObject is not IKAStyle style)
|
|
|
|
|
{
|
|
|
|
|
results.Add(new SceneOperationValidationResult(
|
|
|
|
|
operation.ObjectName,
|
|
|
|
|
operation.Method,
|
|
|
|
|
DescribeOperationPayload(operation),
|
|
|
|
|
"NOT_A_STYLE_OBJECT",
|
|
|
|
|
"Object does not implement IKAStyle."));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handler.ResetStyleColorTask();
|
|
|
|
|
style.SetStyleColor(
|
|
|
|
|
ParseStyleType(operation.StyleType),
|
|
|
|
|
operation.Order,
|
|
|
|
|
operation.R,
|
|
|
|
|
operation.G,
|
|
|
|
|
operation.B,
|
|
|
|
|
operation.A);
|
|
|
|
|
if (!WaitForTaskWithMessagePump(handler.StyleColorTask, options.Connection.Timeout))
|
|
|
|
|
{
|
|
|
|
|
results.Add(new SceneOperationValidationResult(
|
|
|
|
|
operation.ObjectName,
|
|
|
|
|
operation.Method,
|
|
|
|
|
DescribeOperationPayload(operation),
|
|
|
|
|
"TIMEOUT",
|
|
|
|
|
"OnSetStyleColor timed out."));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var callbackResult = handler.StyleColorTask.Result;
|
|
|
|
|
results.Add(new SceneOperationValidationResult(
|
|
|
|
|
operation.ObjectName,
|
|
|
|
|
operation.Method,
|
|
|
|
|
DescribeOperationPayload(operation),
|
|
|
|
|
callbackResult.ToString(),
|
|
|
|
|
string.Empty));
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
handler.ResetSetValueTask();
|
|
|
|
|
sceneObject.SetValue(operation.Value ?? string.Empty);
|
|
|
|
|
if (!WaitForTaskWithMessagePump(handler.SetValueTask, options.Connection.Timeout))
|
|
|
|
|
@@ -1023,11 +1090,34 @@ static List<SceneValidationOperation> LoadValidationOperations(SceneValidationOp
|
|
|
|
|
|
|
|
|
|
static string DescribeOperationPayload(SceneValidationOperation operation)
|
|
|
|
|
{
|
|
|
|
|
if (string.Equals(operation.Method, "SetVisible", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return $"visible={operation.Visible}";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (string.Equals(operation.Method, "SetStyleColor", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
{
|
|
|
|
|
return $"styleType={operation.StyleType}, order={operation.Order}, rgba=({operation.R}, {operation.G}, {operation.B}, {operation.A})";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return string.Equals(operation.Method, "SetCounterNumberKey", StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
? $"keyIndex={operation.KeyIndex}, number={operation.Number:0.###}"
|
|
|
|
|
: operation.Value ?? string.Empty;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static eKStyleType ParseStyleType(string? value)
|
|
|
|
|
{
|
|
|
|
|
return (value ?? string.Empty).Trim().ToLowerInvariant() switch
|
|
|
|
|
{
|
|
|
|
|
"face" => eKStyleType.STYLE_TYPE_FACE,
|
|
|
|
|
"edge" => eKStyleType.STYLE_TYPE_EDGE,
|
|
|
|
|
"shadow" => eKStyleType.STYLE_TYPE_SHADOW,
|
|
|
|
|
"underline" => eKStyleType.STYLE_TYPE_UNDERLINE,
|
|
|
|
|
"frame" => eKStyleType.STYLE_TYPE_FRAME,
|
|
|
|
|
_ => throw new ArgumentException($"Unsupported style type: {value}")
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void WriteSceneValidationMarkdown(SceneValidationOptions options, IReadOnlyList<SceneOperationValidationResult> results)
|
|
|
|
|
{
|
|
|
|
|
Directory.CreateDirectory(Path.GetDirectoryName(options.OutputPath)!);
|
|
|
|
|
@@ -1477,6 +1567,20 @@ internal sealed class SceneValidationOperation
|
|
|
|
|
public int KeyIndex { get; set; }
|
|
|
|
|
|
|
|
|
|
public double Number { get; set; }
|
|
|
|
|
|
|
|
|
|
public string? StyleType { get; set; }
|
|
|
|
|
|
|
|
|
|
public int Order { get; set; }
|
|
|
|
|
|
|
|
|
|
public int R { get; set; }
|
|
|
|
|
|
|
|
|
|
public int G { get; set; }
|
|
|
|
|
|
|
|
|
|
public int B { get; set; }
|
|
|
|
|
|
|
|
|
|
public int A { get; set; } = 255;
|
|
|
|
|
|
|
|
|
|
public bool Visible { get; set; }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal sealed record SceneOperationValidationResult(string ObjectName, string Method, string Payload, string Result, string Detail);
|
|
|
|
|
@@ -1490,6 +1594,8 @@ internal sealed class ProbeEventHandler : KAEventHandler
|
|
|
|
|
private TaskCompletionSource<eKResult> _loadSceneTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
private TaskCompletionSource<eKResult> _unloadSceneTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
private TaskCompletionSource<eKResult> _counterNumberKeyTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
private TaskCompletionSource<eKResult> _styleColorTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
private TaskCompletionSource<eKResult> _visibleTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
private TaskCompletionSource<eKResult> _setValueTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
private TaskCompletionSource<ObjectInfosProbeResult> _objectInfosTask = new(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
private IKAScene? _sceneToQueryOnLoad;
|
|
|
|
|
@@ -1504,6 +1610,10 @@ internal sealed class ProbeEventHandler : KAEventHandler
|
|
|
|
|
|
|
|
|
|
public Task<eKResult> CounterNumberKeyTask => _counterNumberKeyTask.Task;
|
|
|
|
|
|
|
|
|
|
public Task<eKResult> StyleColorTask => _styleColorTask.Task;
|
|
|
|
|
|
|
|
|
|
public Task<eKResult> VisibleTask => _visibleTask.Task;
|
|
|
|
|
|
|
|
|
|
public Task<eKResult> SetValueTask => _setValueTask.Task;
|
|
|
|
|
|
|
|
|
|
public Task<ObjectInfosProbeResult> ObjectInfosTask => _objectInfosTask.Task;
|
|
|
|
|
@@ -1514,6 +1624,10 @@ internal sealed class ProbeEventHandler : KAEventHandler
|
|
|
|
|
|
|
|
|
|
public void ResetCounterNumberKeyTask() => _counterNumberKeyTask = new TaskCompletionSource<eKResult>(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
|
|
|
|
|
public void ResetStyleColorTask() => _styleColorTask = new TaskCompletionSource<eKResult>(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
|
|
|
|
|
public void ResetVisibleTask() => _visibleTask = new TaskCompletionSource<eKResult>(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
|
|
|
|
|
public void ResetSetValueTask() => _setValueTask = new TaskCompletionSource<eKResult>(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
|
|
|
|
|
public void ResetObjectInfosTask() => _objectInfosTask = new TaskCompletionSource<ObjectInfosProbeResult>(TaskCreationOptions.RunContinuationsAsynchronously);
|
|
|
|
|
@@ -1657,12 +1771,28 @@ internal sealed class ProbeEventHandler : KAEventHandler
|
|
|
|
|
public void OnQuerySceneEffectType(eKResult Result, string SceneName, int bInEffect, eKEffectType EffectType, int Duration) { }
|
|
|
|
|
public void OnQueryDuration(eKResult Result, string SceneName, string AnimationName, int Duration) { }
|
|
|
|
|
public void OnQueryContentsOfTextObjects(eKResult Result, string SceneName, KAStrings pTexts) { }
|
|
|
|
|
public void OnSetStyleColor(eKResult Result, string SceneName, string ObjectName) { }
|
|
|
|
|
public void OnSetStyleColor(eKResult Result, string SceneName, string ObjectName)
|
|
|
|
|
{
|
|
|
|
|
if (Result != eKResult.RESULT_ERROR_NO_VARIABLE_OBJECT)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"[SDK] OnSetStyleColor result={Result} scene={SceneName} object={ObjectName}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_styleColorTask.TrySetResult(Result);
|
|
|
|
|
}
|
|
|
|
|
public void OnSetStyleTexture(eKResult Result, string SceneName, string ObjectName) { }
|
|
|
|
|
public void OnSetFaceTextColor(eKResult Result, string SceneName, string ObjectName) { }
|
|
|
|
|
public void OnSetEdgeTextColor(eKResult Result, string SceneName, string ObjectName) { }
|
|
|
|
|
public void OnSetShadowTextColor(eKResult Result, string SceneName, string ObjectName) { }
|
|
|
|
|
public void OnSetVisible(eKResult Result, string SceneName, string ObjectName) { }
|
|
|
|
|
public void OnSetVisible(eKResult Result, string SceneName, string ObjectName)
|
|
|
|
|
{
|
|
|
|
|
if (Result != eKResult.RESULT_ERROR_NO_VARIABLE_OBJECT)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"[SDK] OnSetVisible result={Result} scene={SceneName} object={ObjectName}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_visibleTask.TrySetResult(Result);
|
|
|
|
|
}
|
|
|
|
|
public void OnSetValue(eKResult Result, string SceneName, string ObjectName)
|
|
|
|
|
{
|
|
|
|
|
if (Result != eKResult.RESULT_ERROR_NO_VARIABLE_OBJECT)
|
|
|
|
|
|