docs: add plugin setup guide

This commit is contained in:
2026-05-30 18:33:24 +12:00
parent f3db41c402
commit b61043a3fe
1776 changed files with 122386 additions and 2 deletions
@@ -0,0 +1,124 @@
#pragma once
#include "RE/H/hkBlockStream.h"
#include "RE/H/hkEnum.h"
#include "RE/H/hkFlags.h"
#include "RE/H/hkReferencedObject.h"
#include "RE/H/hkResult.h"
#include "RE/H/hkVector4.h"
#include "RE/H/hknpCollisionDispatchType.h"
#include "RE/H/hknpShapeType.h"
namespace RE
{
namespace hkcdGsk
{
struct Cache;
}
class hkAabb;
class hkcdVertex;
class hknpShapeSignals;
class hkRefCountedProperties;
class hknpSolverInfo;
class hkTransformf;
template <class, class>
class hkArray;
class hkDiagonalizedMassProperties;
class hkGeometry;
class hknpAabbQuery;
class hknpCdBody;
class hknpCollisionQueryContext;
class hknpCollisionQueryCollector;
class hknpPointQuery;
class hknpQueryFilterData;
class hknpRayCastQuery;
class hknpShapeCollector;
class hknpShapeKeyMask;
class hknpShapeQueryInfo;
class __declspec(novtable) alignas(0x10) hknpShape :
public hkReferencedObject // 00
{
public:
static constexpr auto RTTI{ RTTI::hknpShape };
static constexpr auto VTABLE{ VTABLE::hknpShape };
enum class FlagsEnum
{
kIsConvexShape = 1u << 0,
kIsConvexPolytopeShape = 1u << 1,
kIsCompositeShape = 1u << 2,
kIsHeightFieldShape = 1u << 3,
kUseSinglePointManifold = 1u << 4,
kIsInteriorTriangle = 1u << 5,
kSupportsCollisionsWithInteriorTriangles = 1u << 6,
kUseNormalToFindSupportPlane = 1u << 7,
kUseSmallFaceIndices = 1u << 8,
kNoGetShapeKeysOnSPU = 1u << 9,
kShapeNotSupportedOnSPU = 1u << 10,
kIsTriangleOrQuadShape = 1u << 11,
kIsQuadShape = 1u << 12
};
struct MassConfig
{
enum class Quality : std::int32_t
{
kLow = 0,
kMedium = 1,
kHigh = 2
};
Quality m_quality{ Quality::kHigh };
float m_inertiaFactor{ 1.5f };
float m_massOrNegativeDensity{ -1.0f };
};
static_assert(sizeof(MassConfig) == 0xC);
struct BuildSurfaceGeometryConfig;
struct GetShapeKeysConfig;
struct SdfContactPoint;
struct SdfQuery;
// add
virtual hknpShapeType::Enum GetType() const; // 04
virtual std::int32_t CalcSize() const; // 05
virtual void CalcAabb(const hkTransformf& a_transform, hkAabb& a_aabbOut) const; // 06
virtual hknpShapeSignals* GetMutationSignals(); // 07
virtual std::int32_t GetNumberOfSupportVertices() const; // 08
virtual const hkcdVertex* GetSupportVertices(hkcdVertex* a_vertexBuffer, std::int32_t a_bufferSize) const; // 09
virtual void GetSupportingVertex(const hkVector4f& a_direction, hkcdVertex* a_vertexBufferOut) const; // 0A
virtual void ConvertVertexIdsToVertices(const std::uint8_t* a_ids, std::int32_t a_numIDs, hkcdVertex* a_verticesOut) const; // 0B
virtual std::int32_t GetNumberOfFaces() const; // 0C
virtual void GetFaceInfo(std::int32_t a_faceID, hkVector4f& a_planeOut, std::int32_t& a_minAngleOut) const; // 0D
virtual std::int32_t GetFaceVertices(std::int32_t a_faceID, hkVector4f& a_planeOut, hkcdVertex* a_vertexBufferOut) const; // 0E
virtual std::int32_t GetSupportingFace(hkVector4f& a_direction, hkVector4f& a_surfacePoint, const hkcdGsk::Cache* a_gskCache, bool a_useB, std::uint32_t a_prevFaceID, hkVector4f& a_planeOut, std::int32_t& a_minAngleOut) const; // 0F
virtual float CalcMinAngleBetweenFaces() const; // 10
virtual void GetSignedDistances(const SdfQuery& a_query, SdfContactPoint* a_contactsOut) const; // 11
virtual std::int32_t GetSignedDistanceContacts(const hknpCdBody& a_queryBody, float a_maxDistance, std::int32_t a_vertexIdOffset, hkBlockStream<SdfContactPoint>::Writer& a_contactPointsOut) const; // 12
virtual hknpShapeKeyMask* CreateShapeKeyMask() const; // 13
virtual std::int32_t GetShapeKeys(std::uint32_t* a_shapeKeysOut, std::int32_t a_capacity, std::uint32_t a_previousKey, const GetShapeKeysConfig& a_config) const; // 14
virtual std::int32_t GetLeafShapes(const std::uint32_t* a_keys, std::int32_t a_numKeys, hknpShapeCollector* a_collector) const; // 15
virtual void CastRayImpl(hknpCollisionQueryContext* a_queryContext, const hknpRayCastQuery& a_query, const hknpQueryFilterData& a_targetShapeFilterData, const hknpShapeQueryInfo& a_targetShapeInfo, hknpCollisionQueryCollector* a_collector) const; // 16
virtual void QueryPointImpl(hknpCollisionQueryContext* a_queryContext, const hknpPointQuery& a_query, const hknpQueryFilterData& a_targetShapeFilterData, const hknpShapeQueryInfo& a_targetShapeInfo, hknpCollisionQueryCollector* a_collector) const; // 17
virtual void QueryAabbImpl(hknpCollisionQueryContext* a_queryContext, const hknpAabbQuery& a_query, const hknpShapeQueryInfo& a_queryShapeInfo, const hknpQueryFilterData& a_targetShapeFilterData, const hknpShapeQueryInfo& a_targetShapeInfo, hkArray<std::uint32_t, hkContainerHeapAllocator>* a_hits, hkAabb* a_nmpInOut) const; // 19
virtual void QueryAabbImpl(hknpCollisionQueryContext* a_queryContext, const hknpAabbQuery& a_query, const hknpShapeQueryInfo& a_queryShapeInfo, const hknpQueryFilterData& a_targetShapeFilterData, const hknpShapeQueryInfo& a_targetShapeInfo, hknpCollisionQueryCollector* a_collector, hkAabb* a_nmpInOut) const; // 18
virtual std::int32_t SelectLevelOfDetail(const hknpSolverInfo& a_si, const hknpCdBody& a_partner, std::int32_t a_previousLevelOfDetail) const; // 1A
virtual void BuildMassProperties(const MassConfig& a_massConfig, hkDiagonalizedMassProperties& a_massPropertiesOut) const; // 1B
virtual hkResult BuildSurfaceGeometry(const BuildSurfaceGeometryConfig& a_config, hkGeometry* a_geometryOut) const; // 1C
virtual void CheckConsistency() const; // 1D
// members
hkFlags<FlagsEnum, std::uint16_t> m_flags; // 0x10
std::uint8_t m_numShapeKeyBits; // 0x12
hkEnum<hknpCollisionDispatchType::Enum, std::uint8_t> m_dispatchType; // 0x13
float m_convexRadius; // 0x14
std::uintptr_t m_userData; // 0x18
hkRefCountedProperties* m_properties; // 0x20
std::byte m_pad28[0x08]; // 0x28
};
static_assert(sizeof(hknpShape) == 0x30);
}