2.4.2 & zone times proper

This commit is contained in:
Milxnor
2023-03-21 15:20:11 -04:00
parent 6d14b42a4f
commit 97ab80fef0
36 changed files with 1237 additions and 270 deletions

View File

@@ -4,16 +4,13 @@
#include "NameTypes.h"
#include "reboot.h"
#include "DataTable.h"
class UCurveTable : public UObject
enum class ECurveTableMode : unsigned char
{
public:
};
struct FCurveTableRowHandle
{
UCurveTable* CurveTable;
FName RowName;
Empty,
SimpleCurves,
RichCurves
};
struct FSimpleCurveKey
@@ -24,7 +21,7 @@ struct FSimpleCurveKey
struct FIndexedCurve
{
};
struct FRealCurve : public FIndexedCurve
@@ -38,4 +35,60 @@ struct FSimpleCurve : public FRealCurve
static auto KeysOffset = FindOffsetStruct("/Script/Engine.SimpleCurve", "Keys");
return *(TArray<FSimpleCurveKey>*)(__int64(this) + KeysOffset);
}
};
class UCurveTable : public UObject
{
public:
static int GetCurveTableSize()
{
static auto CurveTableClass = FindObject<UClass>("/Script/Engine.CurveTable");
return CurveTableClass->GetPropertiesSize();
}
ECurveTableMode GetCurveTableMode() const
{
static auto CurveTableModeOffset = GetCurveTableSize() - 8;
return *(ECurveTableMode*)(__int64(this) + CurveTableModeOffset);
}
void* GetKey(const FName& RowName, int Index)
{
auto CurveTableMode = GetCurveTableMode();
LOG_INFO(LogDev, "RowName {} CurveTableMode {} Size {}", RowName.ComparisonIndex.Value ? RowName.ToString() : "InvalidComparision", (int)CurveTableMode, GetCurveTableSize());
if (CurveTableMode == ECurveTableMode::SimpleCurves)
{
auto& RowMap = ((UDataTable*)this)->GetRowMap<FSimpleCurve>(); // its the same offset so
auto Curve = RowMap.Find(RowName);
auto& Keys = Curve->GetKeys();
return Keys.Num() > Index ? &Curve->GetKeys().at(Index) : nullptr;
}
else if (CurveTableMode == ECurveTableMode::RichCurves)
{
}
return nullptr;
}
float GetValueOfKey(void* Key)
{
if (!Key)
return 0.f;
auto CurveTableMode = GetCurveTableMode();
if (CurveTableMode == ECurveTableMode::SimpleCurves) return ((FSimpleCurveKey*)Key)->Value;
else if (CurveTableMode == ECurveTableMode::RichCurves) return 0.f;
return 0.f;
}
};
struct FCurveTableRowHandle
{
UCurveTable* CurveTable;
FName RowName;
};