Skip to content

Commit dcc2721

Browse files
authored
generate serializable node data for each node data (#168)
- generate serializable node data for each node data - `BTDynamicNode` for building tree. - `BTDynamicDebugView` for displaying debug info.
1 parent db19d25 commit dcc2721

File tree

226 files changed

+1499
-7224
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

226 files changed

+1499
-7224
lines changed

Packages/builder.component/Editor/ComponentFieldCodeGenerator.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,19 @@ public bool ShouldGenerate(FieldInfo fi)
5656
{
5757
if (!fi.FieldType.IsGenericType) return false;
5858
var variantType = fi.FieldType.GetGenericTypeDefinition();
59-
if (variantType == typeof(BlobVariantReader<>)) return true;
60-
if (variantType == typeof(BlobVariantWriter<>)) return true;
61-
if (variantType == typeof(BlobVariantReaderAndWriter<>)) return true;
59+
if (variantType == typeof(BlobVariantRO<>)) return true;
60+
if (variantType == typeof(BlobVariantWO<>)) return true;
61+
if (variantType == typeof(BlobVariantRW<>)) return true;
6262
return false;
6363
}
6464

6565
public string GenerateField(FieldInfo fi)
6666
{
6767
var valueType = fi.FieldType.GetGenericArguments()[0];
6868
var variantType = fi.FieldType.GetGenericTypeDefinition();
69-
if (variantType == typeof(BlobVariantReaderAndWriter<>))
69+
if (variantType == typeof(BlobVariantRW<>))
7070
return $"public {VariantInterfaceNamespace}.SerializedVariantRW<{valueType.FullName}> {fi.Name};";
71-
if (variantType == typeof(BlobVariantReader<>))
71+
if (variantType == typeof(BlobVariantRO<>))
7272
return $"public {VariantInterfaceNamespace}.SerializedVariantRO<{valueType.FullName}> {fi.Name};";
7373
return $"public {VariantInterfaceNamespace}.SerializedVariantWO<{valueType.FullName}> {fi.Name};";
7474
}

Packages/builder.component/Editor/NodeComponentTemplateCode.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,17 @@ public string Generate(Type nodeType, IEnumerable<INodeDataFieldCodeGenerator> f
1919
using EntitiesBT.Attributes;
2020
using Unity.Entities;
2121
using static EntitiesBT.Variant.Utilities;
22+
using UnityEngine;
23+
using System;
2224
2325
namespace EntitiesBT.Components
2426
{{
27+
[Obsolete(""Use BTDynamicNode"")]
2528
public class {className} : BTNode<{nodeType.FullName}>
2629
{{
30+
[Header(""obsolete: use BTDynamicNode"")]
31+
private int _;
32+
2733
{string.Join(Environment.NewLine + " ", fieldStrings)}
2834
protected override void Build(ref {nodeType.FullName} data, BlobBuilder builder, ITreeNode<INodeDataBuilder>[] tree)
2935
{{

Packages/builder.component/Editor/SerializedTypeDrawer.cs

Lines changed: 0 additions & 39 deletions
This file was deleted.

Packages/builder.component/Editor/VariantNodeObjectAttributeDrawer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten
2727
var nodeObject = (INodeDataBuilder)property.GetSiblingFieldValue(_attribute.NodeObjectFieldName);
2828
if (!Equals(nodeObject, _nodeObject))
2929
{
30-
var readerType = typeof(BlobVariantReader<>).MakeGenericType(_genericType);
31-
var rwType = typeof(BlobVariantReaderAndWriter<>).MakeGenericType(_genericType);
30+
var readerType = typeof(BlobVariantRO<>).MakeGenericType(_genericType);
31+
var rwType = typeof(BlobVariantRW<>).MakeGenericType(_genericType);
3232
_nodeObject = nodeObject;
3333
_options = nodeObject == null
3434
? new string[0]
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System;
2+
using System.Reflection;
3+
using EntitiesBT.Attributes;
4+
using EntitiesBT.Core;
5+
using EntitiesBT.Nodes;
6+
using Unity.Entities;
7+
using UnityEngine;
8+
9+
namespace EntitiesBT.Components
10+
{
11+
public class BTDynamicNode : BTNode
12+
{
13+
[SerializeReference]
14+
[SerializeReferenceDrawer(RenamePatter = @"^.*(\.|_|/)(\w+)(\+\w+)?$||$2", CategoryName = nameof(CategoryName))]
15+
[OnValueChanged(nameof(OnNodeChanged))]
16+
public ISerializableNodeData NodeData;
17+
18+
protected override Type NodeType => NodeData?.NodeType ?? typeof(ZeroNode);
19+
20+
protected override unsafe void Build(void* dataPtr, BlobBuilder blobBuilder, ITreeNode<INodeDataBuilder>[] builders)
21+
{
22+
NodeData?.Build(dataPtr, blobBuilder, Self, builders);
23+
}
24+
25+
private void OnNodeChanged()
26+
{
27+
name = NodeData?.NodeType?.Name ?? "[Null]";
28+
}
29+
30+
private string CategoryName(Type type)
31+
{
32+
for (;;)
33+
{
34+
if (type == null) return "";
35+
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(SerializableNodeData<>))
36+
return type.GetGenericArguments()[0].GetCustomAttribute<BehaviorNodeAttribute>()?.Type.ToString() ?? "";
37+
type = type.BaseType;
38+
}
39+
}
40+
}
41+
}

Packages/builder.component/Runtime/BTDynamicNode.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/builder.component/Runtime/Components/BTHasComponent.cs

Lines changed: 0 additions & 18 deletions
This file was deleted.

Packages/builder.component/Runtime/Components/BTHasComponent.cs.meta

Lines changed: 0 additions & 11 deletions
This file was deleted.

Packages/builder.component/Runtime/Variant/NodeVariant.cs renamed to Packages/builder.component/Runtime/NodeVariant.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ private static unsafe void WriteVariableFunc<T, TNodeBlob, TBlackboard>(ref Blob
5151
{
5252
ref var data = ref blobVariant.As<DynamicNodeRefData>();
5353
var ptr = blob.GetRuntimeDataPtr(data.Index);
54-
ref var variable = ref UnsafeUtility.AsRef<BlobVariantReader<T>>(IntPtr.Add(ptr, data.Offset).ToPointer());
54+
ref var variable = ref UnsafeUtility.AsRef<BlobVariantRO<T>>(IntPtr.Add(ptr, data.Offset).ToPointer());
5555
// TODO: check writable on editor?
5656
variable.Value.WriteWithRefFallback(index, ref blob, ref bb, value);
5757
}
@@ -73,7 +73,7 @@ private static unsafe T GetRuntimeNodeVariable<T, TNodeBlob, TBlackboard>(ref Bl
7373
{
7474
ref var data = ref blobVariant.As<DynamicNodeRefData>();
7575
var ptr = blob.GetRuntimeDataPtr(data.Index);
76-
ref var variable = ref UnsafeUtility.AsRef<BlobVariantReader<T>>(IntPtr.Add(ptr, data.Offset).ToPointer());
76+
ref var variable = ref UnsafeUtility.AsRef<BlobVariantRO<T>>(IntPtr.Add(ptr, data.Offset).ToPointer());
7777
return variable.Read(index, ref blob, ref bb);
7878
}
7979

@@ -122,7 +122,7 @@ ref BlobBuilder builder
122122
{
123123
blobVariant.VariantId = GuidHashCode(ID_RUNTIME_NODE);
124124
}
125-
else if (fieldType == typeof(BlobVariantReader<T>) || fieldType == typeof(BlobVariantReaderAndWriter<T>))
125+
else if (fieldType == typeof(BlobVariantRO<T>) || fieldType == typeof(BlobVariantRW<T>))
126126
{
127127
blobVariant.VariantId = GuidHashCode(ID_RUNTIME_NODE_VARIANT);
128128
}
@@ -133,8 +133,8 @@ ref BlobBuilder builder
133133
}
134134

135135
var fieldOffset = Marshal.OffsetOf(nodeType, valueFieldName).ToInt32();
136-
if (fieldType == typeof(BlobVariantReaderAndWriter<T>))
137-
fieldOffset += Marshal.OffsetOf(typeof(BlobVariantReaderAndWriter<T>) , nameof(BlobVariantReaderAndWriter<T>.Reader)).ToInt32();
136+
if (fieldType == typeof(BlobVariantRW<T>))
137+
fieldOffset += Marshal.OffsetOf(typeof(BlobVariantRW<T>) , nameof(BlobVariantRW<T>.Reader)).ToInt32();
138138
return builder.Allocate(ref blobVariant, new DynamicNodeRefData{ Index = index, Offset = fieldOffset});
139139
}
140140
}

0 commit comments

Comments
 (0)