Added RigidBody component

This commit is contained in:
Kah Wei 2022-10-22 23:00:50 +08:00
parent 885f22c984
commit 2bd633c11b
3 changed files with 350 additions and 0 deletions

View File

@ -221,6 +221,9 @@ namespace SHADE
T GetColliderBound(int index);
private:
/*-----------------------------------------------------------------------------*/
/* Data Members */
/*-----------------------------------------------------------------------------*/
System::Collections::Generic::List<ColliderBound^>^ subColliderList; // TODO: Update elements in this list if the list on native collider changes
};
}

View File

@ -0,0 +1,197 @@
/************************************************************************************//*!
\file RigidBody.cxx
\author Tng Kah Wei, kahwei.tng, 390009620
\par email: kahwei.tng\@digipen.edu
\date Oct 22, 2022
\brief Contains the definition of the functions of the managed RigidBody class.
Note: This file is written in C++17/CLI.
Copyright (C) 2022 DigiPen Institute of Technology.
Reproduction or disclosure of this file or its contents without the prior written consent
of DigiPen Institute of Technology is prohibited.
*//*************************************************************************************/
// Precompiled Headers
#include "SHpch.h"
// Primary Header
#include "RigidBody.hxx"
namespace SHADE
{
/*---------------------------------------------------------------------------------*/
/* Constructors */
/*---------------------------------------------------------------------------------*/
RigidBody::RigidBody(Entity entity)
: Component(entity)
{}
/*---------------------------------------------------------------------------------*/
/* Properties */
/*---------------------------------------------------------------------------------*/
bool RigidBody::IsGravityEnabled::get()
{
return GetNativeComponent()->IsGravityEnabled();
}
void RigidBody::IsGravityEnabled::set(bool value)
{
return GetNativeComponent()->SetGravityEnabled(value);
}
bool RigidBody::IsAllowedToSleep::get()
{
return GetNativeComponent()->IsAllowedToSleep();
}
void RigidBody::IsAllowedToSleep::set(bool value)
{
return GetNativeComponent()->SetIsAllowedToSleep(value);
}
RigidBody::Type RigidBody::BodyType::get()
{
return static_cast<Type>(GetNativeComponent()->GetType());
}
void RigidBody::BodyType::set(Type value)
{
return GetNativeComponent()->SetType(static_cast<SHRigidBodyComponent::Type>(value));
}
float RigidBody::Mass::get()
{
return GetNativeComponent()->GetMass();
}
void RigidBody::Mass::set(float value)
{
return GetNativeComponent()->SetMass(value);
}
float RigidBody::Drag::get()
{
return GetNativeComponent()->GetDrag();
}
void RigidBody::Drag::set(float value)
{
return GetNativeComponent()->SetDrag(value);
}
float RigidBody::AngularDrag::get()
{
return GetNativeComponent()->GetAngularDrag();
}
void RigidBody::AngularDrag::set(float value)
{
return GetNativeComponent()->SetAngularDrag(value);
}
bool RigidBody::FreezePositionX::get()
{
return GetNativeComponent()->GetFreezePositionX();
}
void RigidBody::FreezePositionX::set(bool value)
{
return GetNativeComponent()->SetFreezePositionX(value);
}
bool RigidBody::FreezePositionY::get()
{
return GetNativeComponent()->GetFreezePositionY();
}
void RigidBody::FreezePositionY::set(bool value)
{
return GetNativeComponent()->SetFreezePositionY(value);
}
bool RigidBody::FreezePositionZ::get()
{
return GetNativeComponent()->GetFreezePositionZ();
}
void RigidBody::FreezePositionZ::set(bool value)
{
return GetNativeComponent()->SetFreezePositionZ(value);
}
bool RigidBody::FreezeRotationX::get()
{
return GetNativeComponent()->GetFreezeRotationX();
}
void RigidBody::FreezeRotationX::set(bool value)
{
return GetNativeComponent()->SetFreezeRotationX(value);
}
bool RigidBody::FreezeRotationY::get()
{
return GetNativeComponent()->GetFreezeRotationY();
}
void RigidBody::FreezeRotationY::set(bool value)
{
return GetNativeComponent()->SetFreezeRotationY(value);
}
bool RigidBody::FreezeRotationZ::get()
{
return GetNativeComponent()->GetFreezeRotationZ();
}
void RigidBody::FreezeRotationZ::set(bool value)
{
return GetNativeComponent()->SetFreezeRotationZ(value);
}
Vector3 RigidBody::LinearVelocity::get()
{
return Convert::ToCLI(GetNativeComponent()->GetLinearVelocity());
}
void RigidBody::LinearVelocity::set(Vector3 value)
{
return GetNativeComponent()->SetLinearVelocity(Convert::ToNative(value));
}
Vector3 RigidBody::AngularVelocity::get()
{
return Convert::ToCLI(GetNativeComponent()->GetAngularVelocity());
}
void RigidBody::AngularVelocity::set(Vector3 value)
{
return GetNativeComponent()->SetAngularVelocity(Convert::ToNative(value));
}
Vector3 RigidBody::Force::get()
{
return Convert::ToCLI(GetNativeComponent()->GetForce());
}
Vector3 RigidBody::Torque::get()
{
return Convert::ToCLI(GetNativeComponent()->GetTorque());
}
/*---------------------------------------------------------------------------------*/
/* Force Functions */
/*---------------------------------------------------------------------------------*/
void RigidBody::AddForce(Vector3 force)
{
GetNativeComponent()->AddForce(Convert::ToNative(force));
}
void RigidBody::AddForceAtLocalPos(Vector3 force, Vector3 localPos)
{
GetNativeComponent()->AddForceAtLocalPos(Convert::ToNative(force), Convert::ToNative(localPos));
}
void RigidBody::AddForceAtWorldPos(Vector3 force, Vector3 worldPos)
{
GetNativeComponent()->AddForceAtWorldPos(Convert::ToNative(force), Convert::ToNative(worldPos));
}
void RigidBody::AddRelativeForce(Vector3 relativeForce)
{
GetNativeComponent()->AddRelativeForce(Convert::ToNative(relativeForce));
}
void RigidBody::AddRelativeForceAtLocalPos(Vector3 relativeForce, Vector3 localPos)
{
GetNativeComponent()->AddRelativeForceAtLocalPos(Convert::ToNative(relativeForce), Convert::ToNative(localPos));
}
void RigidBody::AddRelativeForceAtWorldPos(Vector3 relativeForce, Vector3 worldPos)
{
GetNativeComponent()->AddRelativeForceAtWorldPos(Convert::ToNative(relativeForce), Convert::ToNative(worldPos));
}
/*---------------------------------------------------------------------------------*/
/* Torque Functions */
/*---------------------------------------------------------------------------------*/
void RigidBody::AddTorque(Vector3 torque)
{
GetNativeComponent()->AddTorque(Convert::ToNative(torque));
}
void RigidBody::AddRelativeTorque(Vector3 relativeTorque)
{
GetNativeComponent()->AddRelativeTorque(Convert::ToNative(relativeTorque));
}
}

View File

@ -0,0 +1,150 @@
/************************************************************************************//*!
\file RigidBody.hxx
\author Tng Kah Wei, kahwei.tng, 390009620
\par email: kahwei.tng\@digipen.edu
\date Oct 22, 2022
\brief Contains the definition of the managed Collider class with the
declaration of functions for working with it.
Note: This file is written in C++17/CLI.
Copyright (C) 2022 DigiPen Institute of Technology.
Reproduction or disclosure of this file or its contents without the prior written consent
of DigiPen Institute of Technology is prohibited.
*//*************************************************************************************/
#pragma once
// External Dependencies
#include "Physics/Components/SHRigidBodyComponent.h"
// Project Includes
#include "Components/Component.hxx"
namespace SHADE
{
/// <summary>
/// CLR version of the the SHADE Engine's SHRigidBodyComponent.
/// </summary>
public ref class RigidBody : public Component<SHRigidBodyComponent>
{
internal:
/*-----------------------------------------------------------------------------*/
/* Constructors */
/*-----------------------------------------------------------------------------*/
/// <summary>
/// Constructs a RigidBody Component that represents a native
/// SHRigidBodyComponent component tied to the specified Entity.
/// </summary>
/// <param name="entity">Entity that this Component will be tied to.</param>
RigidBody(Entity entity);
public:
/*-----------------------------------------------------------------------------*/
/* Type Definitions */
/*-----------------------------------------------------------------------------*/
enum class Type
{
Static,
Kinematic,
Dynamic
};
/*-----------------------------------------------------------------------------*/
/* Properties */
/*-----------------------------------------------------------------------------*/
property bool IsGravityEnabled
{
bool get();
void set(bool value);
}
property bool IsAllowedToSleep
{
bool get();
void set(bool value);
}
property Type BodyType
{
Type get();
void set(Type value);
}
property float Mass
{
float get();
void set(float value);
}
property float Drag
{
float get();
void set(float value);
}
property float AngularDrag
{
float get();
void set(float value);
}
property bool FreezePositionX
{
bool get();
void set(bool value);
}
property bool FreezePositionY
{
bool get();
void set(bool value);
}
property bool FreezePositionZ
{
bool get();
void set(bool value);
}
property bool FreezeRotationX
{
bool get();
void set(bool value);
}
property bool FreezeRotationY
{
bool get();
void set(bool value);
}
property bool FreezeRotationZ
{
bool get();
void set(bool value);
}
property Vector3 LinearVelocity
{
Vector3 get();
void set(Vector3 value);
}
property Vector3 AngularVelocity
{
Vector3 get();
void set(Vector3 value);
}
property Vector3 Force
{
Vector3 get();
}
property Vector3 Torque
{
Vector3 get();
}
/*-----------------------------------------------------------------------------*/
/* Force Functions */
/*-----------------------------------------------------------------------------*/
void AddForce(Vector3 force);
void AddForceAtLocalPos(Vector3 force, Vector3 localPos);
void AddForceAtWorldPos(Vector3 force, Vector3 worldPos);
void AddRelativeForce(Vector3 relativeForce);
void AddRelativeForceAtLocalPos(Vector3 relativeForce, Vector3 localPos);
void AddRelativeForceAtWorldPos(Vector3 relativeForce, Vector3 worldPos);
/*-----------------------------------------------------------------------------*/
/* Torque Functions */
/*-----------------------------------------------------------------------------*/
void AddTorque(Vector3 force);
void AddRelativeTorque(Vector3 relativeForce);
};
}