#pragma once #include "RE/H/hkArray.h" #include "RE/H/hkBitField.h" #include "RE/H/hkBlockStream.h" #include "RE/H/hkBool.h" #include "RE/H/hkEnum.h" #include "RE/H/hkIntSpaceUtil.h" #include "RE/H/hkRefPtr.h" #include "RE/H/hkReferencedObject.h" #include "RE/H/hkSimdFloat32.h" #include "RE/H/hkVector4.h" #include "RE/H/hknpBodyManager.h" #include "RE/H/hknpCollisionFlags.h" #include "RE/H/hknpConstraintManager.h" #include "RE/H/hknpContactSolverType.h" #include "RE/H/hknpMotionManager.h" #include "RE/H/hknpShapeManager.h" #include "RE/H/hknpSolverInfo.h" #include "RE/H/hknpThreadSafetyCheck.h" #include "RE/H/hknpWorldCinfo.h" #include "RE/H/hknpWorldSignals.h" namespace RE { class hkBlockStreamAllocator; class hknpActionManager; class hknpBodyQualityLibrary; class hknpBroadPhase; class hknpCollisionCacheManager; class hknpCollisionDispatcher; class hknpCollisionQueryDispatcherBase; class hknpConstraintAtomSolver; class hknpContactConstraintSolver; class hknpDeactivationManager; class hknpEventDispatcher; class hknpInternalCommandProcessor; class hknpMaterialLibrary; class hknpModifierManager; class hknpMotionPropertiesLibrary; class hknpNullShapeTagCodec; class hknpPostCollideTask; class hknpPostSolveTask; class hknpShapeTagCodec; class hknpSimulation; class hknpSimulationContext; class hknpSolverSumVelocity; class hknpSolverVelocity; class hknpSpaceSplitter; class hkPrimaryCommandDispatcher; class hkSecondaryCommandDispatcher; class hknpWorld : public hkReferencedObject { public: enum class AdditionMode : std::int32_t { kDoNotAddBody = 0, kAddBodyNow = 1, kAddBodyInNextStep = 2 }; enum class RebuildCachesMode : std::int32_t { kRebuild = 0, kKeep = 1 }; enum class SimulationStage : std::int32_t { kDone = 1, kPreCollide = 2, kCollide = 4, kPostCollide = 8, kPreSolve = 10, kSolve = 20, kPostSolve = 40 }; using AdditionFlagsEnum = hkcdRayQueryFlags::Enum; using LeavingBroadPhaseBehavior = hknpWorldCinfo::LeavingBroadPhaseBehavior; using SimulationType = hknpWorldCinfo::SimulationType; void AddBodies(hknpBodyId* a_ids, std::uint32_t a_idCount, AdditionMode a_additionMode, hkFlags a_additionFlags) { using func_t = decltype(&hknpWorld::AddBodies); static REL::Relocation func{ ID::hknpWorld::AddBodies }; func(this, a_ids, a_idCount, a_additionMode, a_additionFlags); } hknpBodyId& CreateBody(const hknpBodyCinfo& a_cInfo, AdditionMode a_additionMode = AdditionMode::kAddBodyNow, hkFlags a_additionFlags = AdditionFlagsEnum::kNoFlags) { using func_t = hknpBodyId&(hknpWorld*, hknpBodyId&, const hknpBodyCinfo&, AdditionMode, hkFlags); static REL::Relocation func{ ID::hknpWorld::CreateBody }; hknpBodyId bodyId; return func(this, bodyId, a_cInfo, a_additionMode, a_additionFlags); } hknpMotionId& CreateMotion(const hknpMotionCinfo& a_cInfo) { using func_t = hknpMotionId&(hknpWorld*, hknpMotionId&, const hknpMotionCinfo&); static REL::Relocation func{ ID::hknpWorld::CreateMotion }; hknpMotionId motionId; return func(this, motionId, a_cInfo); } void DisableBodyFlags(hknpBodyId a_bodyId, hknpCollisionFlags a_enabledFlags, RebuildCachesMode a_cacheBehavior = RebuildCachesMode::kRebuild) { using func_t = decltype(&hknpWorld::DisableBodyFlags); static REL::Relocation func{ ID::hknpWorld::DisableBodyFlags }; func(this, a_bodyId, a_enabledFlags, a_cacheBehavior); } void EnableBodyFlags(hknpBodyId a_bodyId, hknpCollisionFlags a_enabledFlags, RebuildCachesMode a_cacheBehavior = RebuildCachesMode::kRebuild) { using func_t = decltype(&hknpWorld::EnableBodyFlags); static REL::Relocation func{ ID::hknpWorld::EnableBodyFlags }; func(this, a_bodyId, a_enabledFlags, a_cacheBehavior); } hknpActionManager* GetActionManager() { using func_t = decltype(&hknpWorld::GetActionManager); static REL::Relocation func{ ID::hknpWorld::GetActionManager }; return func(this); } void SetBodyCollisionFilterInfo(hknpBodyId a_bodyId, std::uint32_t a_collisionFilterInfo, RebuildCachesMode a_cacheBehavior = RebuildCachesMode::kRebuild) { using func_t = decltype(&hknpWorld::SetBodyCollisionFilterInfo); static REL::Relocation func{ ID::hknpWorld::SetBodyCollisionFilterInfo }; func(this, a_bodyId, a_collisionFilterInfo, a_cacheBehavior); } void SetBodyMotion(hknpBodyId a_bodyId, hknpMotionId a_motionId, RebuildCachesMode a_cacheBehavior = RebuildCachesMode::kRebuild) { using func_t = decltype(&hknpWorld::SetBodyMotion); static REL::Relocation func{ ID::hknpWorld::SetBodyMotion }; func(this, a_bodyId, a_motionId, a_cacheBehavior); } // members hknpBodyManager m_bodyManager; // 0x010 hknpMotionManager m_motionManager; // 0x0D8 hknpConstraintManager m_constraintManager; // 0x120 hknpModifierManager* m_modifierManager; // 0x150 hkRefPtr m_persistentStreamAllocator; // 0x158 hkBlockStreamAllocator* m_stepLocalStreamAllocator; // 0x160 hknpSimulation* m_simulation; // 0x168 hknpSpaceSplitter* m_spaceSplitter; // 0x170 hknpBroadPhase* m_broadPhase; // 0x178 hkIntSpaceUtil m_intSpaceUtil; // 0x180 hkSimdFloat32 m_collisionTolerance; // 0x1E0 hknpCollisionCacheManager* m_collisionCacheManager; // 0x1F0 hknpCollisionDispatcher* m_collisionDispatcher; // 0x1F8 hknpCollisionQueryDispatcherBase* m_collisionQueryDispatcher; // 0x200 hkBool m_contactCachingEnabled; // 0x208 hkBlockStream m_lastFrameContactData; // 0x210 hknpContactSolverType::Enum m_contactSolverType; // 0x310 hknpContactConstraintSolver* m_contactSolver; // 0x318 hknpConstraintAtomSolver* m_constraintAtomSolver; // 0x320 hknpSolverInfo m_solverInfo; // 0x330 hkBool m_enableSolverDynamicScheduling; // 0x470 hkArray m_solverVelocities; // 0x478 hkArray m_solverSumVelocities; // 0x488 hkBool m_deactivationEnabled; // 0x498 hknpDeactivationManager* m_deactivationManager; // 0x4A0 hkBool m_deleteCachesOnDeactivation; // 0x4A8 hknpWorldSignals m_signals; // 0x4B0 hkPrimaryCommandDispatcher* m_commandDispatcher; // 0x598 hkRefPtr m_traceDispatcher; // 0x5A0 std::uint16_t m_userData; // 0x5A8 hkVector4f m_gravity; // 0x5B0 hkRefPtr m_defaultModifierSet; // 0x5C0 hkRefPtr m_materialLibrary; // 0x5C8 hkRefPtr m_motionPropertiesLibrary; // 0x5D0 hkRefPtr m_qualityLibrary; // 0x5D8 hkBitField m_dirtyMaterials; // 0x5E0 hkBitField m_dirtyQualities; // 0x5F8 hknpShapeManager m_shapeManager; // 0x610 hkRefPtr m_shapeTagCodec; // 0x638 hknpNullShapeTagCodec* m_nullShapeTagCodec; // 0x640 hkRefPtr m_eventDispatcher; // 0x648 hkRefPtr m_internalPhysicsCommandDispatcher; // 0x650 hkBool m_consistencyChecksEnabled; // 0x658 hknpPostCollideTask* m_postCollideTask; // 0x660 hknpPostSolveTask* m_postSolveTask; // 0x668 hkEnum m_simulationStage; // 0x670 hknpSimulationContext* m_simulationContext; // 0x678 hknpActionManager* m_actionManager; // 0x680 hkEnum m_simulationType; // 0x688 hkBool m_mergeEventsBeforeDispatch; // 0x689 hkEnum m_leavingBroadPhaseBehavior; // 0x68A hknpThreadSafetyCheck m_threadSafetyCheck; // 0x690 }; static_assert(sizeof(hknpWorld) == 0x6D0); }