Пример #1
0
        private static void FailedToFind(string objectToFind)
        {
            FObjectInitializer currentInitializer = FUObjectThreadContext.TopInitializer();
            UClass             unrealClass        = currentInitializer.IsNull ? null : currentInitializer.GetClass();

            string message = string.Format("CDO Constructor ({0}): Failed to find {1}\n",
                                           (unrealClass != null ? unrealClass.GetName() : "Unknown"), objectToFind);

            Log(ELogVerbosity.Error, message);
        }
Пример #2
0
        /// <summary>
        /// Gets ObjectInitializer for the currently constructed object. Can only be used inside of a constructor of UObject-derived class.
        /// </summary>
        public static FObjectInitializer Get()
        {
            FObjectInitializer result            = new FObjectInitializer();
            IntPtr             objectInitializer = Native_FObjectInitializer.Get();

            if (objectInitializer != IntPtr.Zero)
            {
                result.NativeObject            = Native_FObjectInitializer.GetObj(objectInitializer);
                result.NativeObjectInitializer = objectInitializer;
            }
            return(result);
        }
Пример #3
0
        private static void CheckFoundViaRedirect(UObject obj, string pathName, string objectToFind)
        {
            UObjectRedirector redir = UObject.FindObject <UObjectRedirector>(ObjectOuter.AnyPackage, pathName);

            if (redir != null && redir.DestinationObject == obj)
            {
                string             str = obj.GetFullName().Replace(" ", "'") + "'";
                FObjectInitializer currentInitializer = FUObjectThreadContext.TopInitializer();
                UClass             unrealClass        = currentInitializer.IsNull ? null : currentInitializer.GetClass();

                string message = string.Format("CDO Constructor ({0}): Followed redirector ({1}), change code to new path ({2])\n",
                                               (unrealClass != null ? unrealClass.GetName() : "Unknown"), objectToFind, str);
                Log(ELogVerbosity.Warning, message);
            }
        }
Пример #4
0
        private void Constructor(IntPtr objectInitializerPtr)
        {
            Native_UClass.Call_ClassConstructor(ParentClass, objectInitializerPtr);
            FObjectInitializer objectInitializer = new FObjectInitializer(objectInitializerPtr);

            IntPtr sharpStaticClass = Native_USharpClass.StaticClass();
            IntPtr unrealClass      = Native_FObjectInitializer.GetClass(objectInitializerPtr);
            IntPtr sharpClass       = unrealClass;

            while (sharpClass != IntPtr.Zero && !Native_UObjectBaseUtility.IsA(sharpClass, sharpStaticClass))
            {
                sharpClass = Native_UClass.GetSuperClass(sharpClass);
            }

            System.Diagnostics.Debug.Assert(sharpClass != IntPtr.Zero);
        }
Пример #5
0
        private static T NewObject <T>(
            bool checkClass,
            ObjectOuter outer,
            UClass unrealClass,
            FName name         = default(FName),
            EObjectFlags flags = EObjectFlags.NoFlags,
            UObject template   = null,
            bool copyTransientsFromClassDefaults = false,
            IntPtr instanceGraph = default(IntPtr)) where T : UObject
        {
            if (unrealClass == null)
            {
                return(null);
            }

            if (!outer.IsAnyPackage && outer.Object == null)
            {
                outer.Object = GetTransientPackage();
            }

            if (name == FName.None)
            {
                FObjectInitializer.AssertIfInConstructor(outer.Object);
            }

            if (checkClass)
            {
                // DO_CHECK
                // Class was specified explicitly, so needs to be validated
                if (Native_UObjectGlobals.CheckIsClassChildOf_Internal != null)
                {
                    UClass parentClass = UClass.GetClass <T>();
                    Native_UObjectGlobals.CheckIsClassChildOf_Internal(
                        parentClass == null ? IntPtr.Zero : parentClass.Address,
                        unrealClass == null ? IntPtr.Zero : unrealClass.Address);
                }
            }

            return(GCHelper.Find <T>(Native_UObjectGlobals.StaticConstructObject_Internal(
                                         unrealClass == null ? IntPtr.Zero : unrealClass.Address,
                                         outer.Address, ref name, flags, EInternalObjectFlags.None,
                                         template == null ? IntPtr.Zero : template.Address,
                                         copyTransientsFromClassDefaults,
                                         instanceGraph)));
        }
Пример #6
0
 public virtual void Initialize(FObjectInitializer initializer)
 {
 }
Пример #7
0
 /// <summary>
 /// Push new FObjectInitializer on stack.
 /// </summary>
 /// <param name="initializer">Object initializer to push.</param>
 public static void PushInitializer(FObjectInitializer initializer)
 {
     Native_FUObjectThreadContext.PushInitializer(initializer.Address);
 }
Пример #8
0
 protected AHelloWorld(FObjectInitializer initializer)
     : base(initializer)
 {
 }
Пример #9
0
 public override void Initialize(FObjectInitializer initializer)
 {
     FMessage.Log("Hello from TestBitObj");
     base.Initialize(initializer);
 }