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)); }
private static IEnumerable <ComponentType> GetDynamicAccess(ref BlobVariant blobVariant) { var hash = blobVariant.As <DynamicComponentData>().StableHash; var typeIndex = TypeManager.GetTypeIndexFromStableTypeHash(hash); return(ComponentType.FromTypeIndex(typeIndex).Yield()); }
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>()); }
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)); }
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 })); }
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>();
public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant) { return(Writer.Allocate(ref builder, ref blobVariant)); }
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>();
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)); }
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);
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)); }
public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant) { return(Allocate <T>(ref builder, ref blobVariant, NodeObject, ValueFieldName)); }
private static IEnumerable <ComponentType> GetComponentAccessDefault(ref BlobVariant _) => Enumerable.Empty <ComponentType>();
public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant, INodeDataBuilder self, ITreeNode <INodeDataBuilder>[] tree) { blobVariant.VariantId = GuidHashCode(GUID); return(builder.Allocate(ref blobVariant, Value)); }
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())); }
public IntPtr Allocate(ref BlobBuilder builder, ref BlobVariant blobVariant) { blobVariant.VariantId = GuidHashCode(GUID); return(builder.Allocate(ref blobVariant, Value)); }