コード例 #1
0
            public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant)
            {
                blobVariant.VariantId = GuidHashCode(GUID);
                var          type         = ScriptableObject.GetType();
                FieldInfo    fieldInfo    = null;
                PropertyInfo propertyInfo = null;

                if (ScriptableObject != null)
                {
                    fieldInfo = type.GetField(ScriptableObjectValueName, BindingFlags.Instance | BindingFlags.Public);
                }
                if (fieldInfo == null)
                {
                    propertyInfo = type.GetProperty(ScriptableObjectValueName, BindingFlags.Instance | BindingFlags.Public);
                }

                if ((fieldInfo == null || fieldInfo.FieldType != typeof(T)) &&
                    (propertyInfo == null || !propertyInfo.CanRead || propertyInfo.PropertyType != typeof(T)))
                {
                    Debug.LogError($"{ScriptableObject.name}.{ScriptableObjectValueName} is not valid");
                    throw new ArgumentException();
                }

                var value = fieldInfo?.GetValue(ScriptableObject) ?? propertyInfo?.GetValue(ScriptableObject);

                return(builder.Allocate(ref blobVariant, (T)value));
            }
コード例 #2
0
        private static IEnumerable <ComponentType> GetDynamicAccess(ref BlobVariant blobVariant)
        {
            var hash      = blobVariant.As <DynamicComponentData>().StableHash;
            var typeIndex = TypeManager.GetTypeIndexFromStableTypeHash(hash);

            return(ComponentType.FromTypeIndex(typeIndex).Yield());
        }
コード例 #3
0
 private static ref T GetDataRef <T, TNodeBlob, TBlackboard>(ref BlobVariant blobVariant, int index, ref TNodeBlob blob, ref TBlackboard bb)
     where T : unmanaged
     where TNodeBlob : struct, INodeBlob
     where TBlackboard : struct, IBlackboard
 {
     return(ref blobVariant.As <T>());
 }
コード例 #4
0
ファイル: NodeVariant.cs プロジェクト: quabug/EntitiesBT
 private static ref T GetRuntimeNodeData <T, TNodeBlob, TBlackboard>(ref BlobVariant blobVariant, int index, ref TNodeBlob blob, ref TBlackboard bb)
     where T : unmanaged
     where TNodeBlob : struct, INodeBlob
     where TBlackboard : struct, IBlackboard
 {
     return(ref GetValue <T>(ref blobVariant, blob.GetRuntimeDataPtr));
 }
コード例 #5
0
            public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant)
            {
                blobVariant.VariantId = GuidHashCode(GUID);
                var data = GetTypeHashAndFieldOffset(ComponentValueName);

                if (data.Type != typeof(T) || data.Hash == 0)
                {
                    Debug.LogError($"{nameof(ComponentVariant)}({ComponentValueName}) is not valid, fallback to ConstantValue");
                    throw new ArgumentException();
                }
                return(builder.Allocate(ref blobVariant, new DynamicComponentData {
                    StableHash = data.Hash, Offset = data.Offset
                }));
            }
コード例 #6
0
 private static T GetData <T, TNodeBlob, TBlackboard>(ref BlobVariant blobVariant, int index, ref TNodeBlob blob, ref TBlackboard bb)
     where T : unmanaged
     where TNodeBlob : struct, INodeBlob
     where TBlackboard : struct, IBlackboard
 {
     ref var data = ref blobVariant.As <DynamicComponentData>();
コード例 #7
0
 public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant)
 {
     return(Writer.Allocate(ref builder, ref blobVariant));
 }
コード例 #8
0
ファイル: NodeVariant.cs プロジェクト: longde123/EntitiesBT
 private static unsafe void WriteVariableFunc <T, TNodeBlob, TBlackboard>(ref BlobVariant blobVariant, int index, ref TNodeBlob blob, ref TBlackboard bb, T value)
     where T : unmanaged
     where TNodeBlob : struct, INodeBlob
     where TBlackboard : struct, IBlackboard
 {
     ref var data     = ref blobVariant.Value <DynamicNodeRefData>();
コード例 #9
0
ファイル: NodeVariant.cs プロジェクト: longde123/EntitiesBT
 public unsafe IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] tree)
 {
     return(Allocate <T>(ref builder, ref blobVariant, self, tree, NodeObject, ValueFieldName));
 }
コード例 #10
0
ファイル: NodeVariant.cs プロジェクト: quabug/EntitiesBT
 private static void WriteVariableFunc <T, TNodeBlob, TBlackboard>(ref BlobVariant blobVariant, int index, ref TNodeBlob blob, ref TBlackboard bb, T value)
     where T : unmanaged
     where TNodeBlob : struct, INodeBlob
     where TBlackboard : struct, IBlackboard
 {
     ref var variant = ref GetVariant <T, TNodeBlob>(ref blobVariant, ref blob);
コード例 #11
0
ファイル: NodeVariant.cs プロジェクト: quabug/EntitiesBT
 private static IntPtr GetRuntimeNodeDataPointerRO <TNodeBlob, TBlackboard>(ref BlobVariant blobVariant, int index, ref TNodeBlob blob, ref TBlackboard bb)
     where TNodeBlob : struct, INodeBlob
     where TBlackboard : struct, IBlackboard
 {
     return(GetValuePtr(ref blobVariant, blob.GetRuntimeDataPtr));
 }
コード例 #12
0
ファイル: NodeVariant.cs プロジェクト: quabug/EntitiesBT
 public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant)
 {
     return(Allocate <T>(ref builder, ref blobVariant, NodeObject, ValueFieldName));
 }
コード例 #13
0
 private static IEnumerable <ComponentType> GetComponentAccessDefault(ref BlobVariant _) => Enumerable.Empty <ComponentType>();
コード例 #14
0
ファイル: LocalVariant.cs プロジェクト: longde123/EntitiesBT
 public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] tree)
 {
     blobVariant.VariantId = GuidHashCode(GUID);
     return(builder.Allocate(ref blobVariant, Value));
 }
コード例 #15
0
ファイル: LocalVariant.cs プロジェクト: quabug/EntitiesBT
 private static unsafe IntPtr GetPointer <TNodeBlob, TBlackboard>(ref BlobVariant blobVariant, int index, ref TNodeBlob blob, ref TBlackboard bb)
     where TNodeBlob : struct, INodeBlob
     where TBlackboard : struct, IBlackboard
 {
     return(new IntPtr(blobVariant.AsPointer()));
 }
コード例 #16
0
ファイル: LocalVariant.cs プロジェクト: quabug/EntitiesBT
 public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant)
 {
     blobVariant.VariantId = GuidHashCode(GUID);
     return(builder.Allocate(ref blobVariant, Value));
 }