【a】可视化剧本编辑器 10.StoryEditor
This commit is contained in:
43
Assets/10.StoryEditor/RunTime/Player/Node/BeginNodePlayer.cs
Normal file
43
Assets/10.StoryEditor/RunTime/Player/Node/BeginNodePlayer.cs
Normal file
@@ -0,0 +1,43 @@
|
||||
using System.Collections.Generic;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo.StoryEditor
|
||||
{
|
||||
public class BeginNodePlayer : NodePlayer
|
||||
{
|
||||
public new BeginNodeData Data;
|
||||
public List<NodePlayer> Next = new();
|
||||
|
||||
public BeginNodePlayer(GraphPlayer graph, BeginNodeData data) : base(graph, data)
|
||||
{
|
||||
Data = data;
|
||||
}
|
||||
|
||||
public override bool Connect()
|
||||
{
|
||||
Debug.Log("BeginNodePlayer: Connect");
|
||||
if (!base.Connect())
|
||||
return false;
|
||||
|
||||
Data.next.ForEach(index => Next.Add(Graph.Nodes[index]));
|
||||
Next.ForEach(node => node.Connect());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override async UniTask Execute()
|
||||
{
|
||||
Init();
|
||||
Debug.Log($"开始执行剧本: {Graph.Name}");
|
||||
await base.Execute();
|
||||
await MoveNext();
|
||||
}
|
||||
|
||||
public override UniTask MoveNext()
|
||||
{
|
||||
Next.ForEach(node => node?.Execute());
|
||||
return base.MoveNext();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a5fb5ecf3bf3ef64996bd3a7905884f1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
38
Assets/10.StoryEditor/RunTime/Player/Node/EndNodePlayer.cs
Normal file
38
Assets/10.StoryEditor/RunTime/Player/Node/EndNodePlayer.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using System.Collections.Generic;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo.StoryEditor
|
||||
{
|
||||
public class EndNodePlayer : NodePlayer
|
||||
{
|
||||
public new EndNodeData Data;
|
||||
|
||||
public List<NodePlayer> Pre = new();
|
||||
|
||||
public EndNodePlayer(GraphPlayer graph, EndNodeData data) : base(graph, data)
|
||||
{
|
||||
Data = data;
|
||||
}
|
||||
|
||||
public override bool Connect()
|
||||
{
|
||||
if(!base.Connect())
|
||||
return false;
|
||||
|
||||
Data.pre.ForEach(index => Pre.Add(Graph.Nodes[index]));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override UniTask Execute()
|
||||
{
|
||||
Init();
|
||||
Debug.Log($"剧本执行完成: {Graph.Name}");
|
||||
// 标记剧本完成
|
||||
Graph.Finished = true;
|
||||
ScriptPlayer.ReleaseGraph();
|
||||
return base.Execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6894cd8522d600447966dc11b2a13905
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
66
Assets/10.StoryEditor/RunTime/Player/Node/FlowNodePlayer.cs
Normal file
66
Assets/10.StoryEditor/RunTime/Player/Node/FlowNodePlayer.cs
Normal file
@@ -0,0 +1,66 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Cysharp.Threading.Tasks;
|
||||
|
||||
namespace Stary.Evo.StoryEditor
|
||||
{
|
||||
public class FlowNodePlayer : NodePlayer
|
||||
{
|
||||
public new FlowNodeData Data;
|
||||
|
||||
public List<NodePlayer> Pre = new();
|
||||
public List<NodePlayer> Next = new();
|
||||
|
||||
/// <summary>
|
||||
/// 后续连接执行类型
|
||||
/// </summary>
|
||||
public NodeExecuteType ExecuteType;
|
||||
|
||||
public FlowNodePlayer(GraphPlayer graph, FlowNodeData data) : base(graph, data)
|
||||
{
|
||||
Data = data;
|
||||
ExecuteType = data.executeType;
|
||||
}
|
||||
|
||||
public override bool Connect()
|
||||
{
|
||||
if(!base.Connect())
|
||||
return false;
|
||||
|
||||
Data.pre.ForEach(index => Pre.Add(Graph.Nodes[index]));
|
||||
Data.next.ForEach(index => Next.Add(Graph.Nodes[index]));
|
||||
Next.ForEach(node => node.Connect());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 开始执行
|
||||
/// </summary>
|
||||
public override async UniTask Execute()
|
||||
{
|
||||
await base.Execute();
|
||||
await MoveNext();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 向下继续执行
|
||||
/// </summary>
|
||||
public override async UniTask MoveNext()
|
||||
{
|
||||
// 异步执行(并行)
|
||||
if (ExecuteType == NodeExecuteType.Async)
|
||||
{
|
||||
Next.ForEach(node => node?.Execute());
|
||||
}
|
||||
// 同步执行(串行)
|
||||
else
|
||||
{
|
||||
foreach (var node in Next.Where(node => node != null))
|
||||
{
|
||||
await node.Execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 58805d324b439d242a445138bc3a33a2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
65
Assets/10.StoryEditor/RunTime/Player/Node/NodePlayer.cs
Normal file
65
Assets/10.StoryEditor/RunTime/Player/Node/NodePlayer.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using Cysharp.Threading.Tasks;
|
||||
|
||||
namespace Stary.Evo.StoryEditor
|
||||
{
|
||||
public class NodePlayer
|
||||
{
|
||||
/// <summary>
|
||||
/// 节点名称
|
||||
/// </summary>
|
||||
protected string Name;
|
||||
/// <summary>
|
||||
/// 图表
|
||||
/// </summary>
|
||||
protected GraphPlayer Graph;
|
||||
/// <summary>
|
||||
/// 数据
|
||||
/// </summary>
|
||||
protected NodeData Data;
|
||||
|
||||
/// <summary>
|
||||
/// 初始化标志
|
||||
/// </summary>
|
||||
protected bool Initialized;
|
||||
|
||||
public NodePlayer(GraphPlayer graph, NodeData data)
|
||||
{
|
||||
Graph = graph;
|
||||
Name = data.name;
|
||||
Data = data;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 连接节点
|
||||
/// </summary>
|
||||
public virtual bool Connect()
|
||||
{
|
||||
if(Initialized)
|
||||
return false;
|
||||
Initialized = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 初始化
|
||||
/// </summary>
|
||||
public virtual void Init() => Graph.CurrentNodes.Add(this);
|
||||
|
||||
/// <summary>
|
||||
/// 开始执行
|
||||
/// </summary>
|
||||
public virtual UniTask Execute()
|
||||
{
|
||||
Graph.CurrentNodes.Remove(this);
|
||||
return UniTask.CompletedTask;
|
||||
}
|
||||
/// <summary>
|
||||
/// 向下继续执行
|
||||
/// </summary>
|
||||
public virtual UniTask MoveNext() => UniTask.CompletedTask;
|
||||
/// <summary>
|
||||
/// 停止执行
|
||||
/// </summary>
|
||||
public virtual UniTask Stop() => UniTask.CompletedTask;
|
||||
}
|
||||
}
|
||||
11
Assets/10.StoryEditor/RunTime/Player/Node/NodePlayer.cs.meta
Normal file
11
Assets/10.StoryEditor/RunTime/Player/Node/NodePlayer.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2b76627cea0be464c864e744ae0f0b45
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,32 @@
|
||||
using Cysharp.Threading.Tasks;
|
||||
|
||||
namespace Stary.Evo.StoryEditor
|
||||
{
|
||||
public class ScriptParagraphNodePlayer : FlowNodePlayer
|
||||
{
|
||||
public new ScriptParagraphNodeData Data;
|
||||
|
||||
/// <summary>
|
||||
/// 字幕路径
|
||||
/// </summary>
|
||||
public ResourcePathData CaptionPath;
|
||||
/// <summary>
|
||||
/// 语音路径
|
||||
/// </summary>
|
||||
public ResourcePathData AudioPath;
|
||||
|
||||
public ScriptParagraphNodePlayer(GraphPlayer graph, ScriptParagraphNodeData data) : base(graph, data)
|
||||
{
|
||||
Data = data;
|
||||
CaptionPath = data.captionPath;
|
||||
AudioPath = data.audioPath;
|
||||
}
|
||||
|
||||
public override async UniTask Execute()
|
||||
{
|
||||
Init();
|
||||
await ScriptPlayer.PlayScriptPara(this, Graph.Cts.Token);
|
||||
await base.Execute();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b263f1eba1f46094cab95e1c34ff2605
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user