leopard8352
2023-12-04 1022134d2d3817c0c8c55d56b8401ea3aacacfbf
no message
已修改5个文件
70 ■■■■ 文件已修改
Source/ObjectPool/ObjectPool.Build.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ObjectPool/Private/ObjectPool.cpp 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ObjectPool/Private/UserWidgetObjectPool.cpp 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ObjectPool/Public/BaseUObjectPool.h 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ObjectPool/Public/BaseUserWidgetObjectPool.h 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/ObjectPool/ObjectPool.Build.cs
@@ -39,6 +39,7 @@
                "Slate",
                "SlateCore",
                "UMG",
                // "UnrealEd",
                // ... add private dependencies that you statically link with here ...    
            }
            );
@@ -50,5 +51,10 @@
                // ... add any modules that your module loads dynamically here ...
            }
            );
        if (Target.Type == TargetRules.TargetType.Editor)
        {
            PublicDependencyModuleNames.AddRange(new string[] { "UnrealEd" });
        }
    }
}
Source/ObjectPool/Private/ObjectPool.cpp
@@ -2,6 +2,8 @@
#include "ObjectPool.h"
// #include "Editor.h"
#define LOCTEXT_NAMESPACE "FObjectPoolModule"
void FObjectPoolModule::StartupModule()
Source/ObjectPool/Private/UserWidgetObjectPool.cpp
@@ -2,3 +2,5 @@
#include "UserWidgetObjectPool.h"
Source/ObjectPool/Public/BaseUObjectPool.h
@@ -37,32 +37,34 @@
     */
    virtual void InitPointer();
    /**
     * @brief 清理所需的指针,在GameInstance被销毁时调用
     * @brief 清理所需的指针,在GameInstance被销毁时(Shutdown)时调用
     */
    virtual void ClearPointer();
protected:
    virtual T* CreateNewObject();
    /**
     * @brief 还在栈内的数据
     */
    TArray<T*> ArrayData;
    /**
     * @brief 所有数据
     */
    TArray<T*> TotalArrayData;
};
template <typename T>
T* BaseUObjectPool<T>::Pop_Impl()
{
    if (ArrayData.Num() != 0)
    {
        const auto r = ArrayData.Pop();
        OnPrePop_Impl(r);
        return r;
    }
    else
    {
        const auto r = CreateNewObject();
        OnPrePop_Impl(r);
        return r;
    }
    T* r = ArrayData.Num() == 0 ? CreateNewObject() : ArrayData.Pop();
    OnPrePop_Impl(r);
    const auto o = reinterpret_cast<UObject*>(r);
    o->AddToRoot();
    TotalArrayData.AddUnique(r);
    return r;
}
template <typename T>
@@ -96,10 +98,16 @@
template <typename T>
void BaseUObjectPool<T>::ClearPointer()
{
    for (const auto o : TotalArrayData)
    {
        reinterpret_cast<UObject*>(o)->RemoveFromRoot();
    }
}
template <typename T>
T* BaseUObjectPool<T>::CreateNewObject()
{
    const auto o = NewObject<T>();
    reinterpret_cast<UObject*>(o)->AddToRoot();
    return NewObject<T>();
}
Source/ObjectPool/Public/BaseUserWidgetObjectPool.h
@@ -7,13 +7,8 @@
{
public:
    virtual T* CreateNewObject() override;
    // virtual void OnPrePop_Impl(T* t) override;
    // virtual void OnPrePush_Impl(T* t) override;
public:
    APlayerController* PlayerController = nullptr;
    TSubclassOf<UUserWidget> UserWidgetCls = nullptr;
    // int32 ZOrder = 1024;
};
template <typename T>
@@ -21,17 +16,8 @@
{
    check(PlayerController)
    check(UserWidgetCls)
    return reinterpret_cast<T*>(CreateWidget(PlayerController,UserWidgetCls));
    const auto r = reinterpret_cast<T*>(CreateWidget(PlayerController,UserWidgetCls));
    reinterpret_cast<UObject*>(r)->AddToRoot();
    this->TotalArrayData.Add(r);
    return r;
}
// template <typename T>
// void BaseUserWidgetObjectPool<T>::OnPrePop_Impl(T* t)
// {
//     reinterpret_cast<UUserWidget*>(t)->AddToViewport(ZOrder);
// }
//
// template <typename T>
// void BaseUserWidgetObjectPool<T>::OnPrePush_Impl(T* t)
// {
//     reinterpret_cast<UUserWidget*>(t)->RemoveFromParent();
// }