2#include "../component.h"
3#include <DirectXMath.h>
5using namespace DirectX;
16 m_Velocity = XMVectorZero();
17 m_Acceleration = XMVectorZero();
18 m_PreviousPosition = XMVectorZero();
20 m_BoundingRadius = 1.0f;
22 m_IsPhysicsEnabled =
false;
23 m_GravityEnabled =
true;
48 void Update(
float deltaTime)
override {
49 if (!m_IsPhysicsEnabled)
return;
52 m_Velocity = m_Velocity + m_Acceleration * deltaTime;
55 if (m_UpdatePositionCallback) {
56 m_UpdatePositionCallback(m_Velocity * deltaTime);
70 void LaunchObject(
float alpha,
float initialStretch,
float springConstant) {
72 const float gravity = -9.81f;
75 float alphaRadians = alpha * (XM_PI / 180.0f);
78 float scaleFactor = 200.0f;
81 float velocityMagnitude = initialStretch * sqrtf(springConstant / m_Mass) *
82 sqrtf(1.0f - powf((m_Mass * gravity * sinf(alphaRadians) /
83 (springConstant * initialStretch)), 2.0f));
86 velocityMagnitude *= scaleFactor;
89 XMVECTOR velocity = XMVectorSet(
90 velocityMagnitude * cosf(alphaRadians),
91 velocityMagnitude * sinf(alphaRadians),
200 XMVECTOR m_Acceleration;
201 XMVECTOR m_PreviousPosition;
203 float m_BoundingRadius;
205 bool m_IsPhysicsEnabled;
206 bool m_GravityEnabled;
209 std::function<void(XMVECTOR)> m_UpdatePositionCallback;
void LaunchObject(float alpha, float initialStretch, float springConstant)
void SetGravityEnabled(bool enabled)
bool IsGravityEnabled() const
void SetAcceleration(XMVECTOR acceleration)
void SetVelocity(XMVECTOR velocity)
void Update(float deltaTime) override
void SetUpdatePositionCallback(std::function< void(XMVECTOR)> callback)
void SetPreviousPosition(XMVECTOR position)
bool IsPhysicsEnabled() const
void Initialize() override
void SetGrounded(bool isGrounded)
void SetBoundingRadius(float radius)
XMVECTOR GetVelocity() const
float GetBoundingRadius() const
XMVECTOR GetAcceleration() const
XMVECTOR GetPreviousPosition() const
void SetPhysicsEnabled(bool enabled)