Merge remote-tracking branch 'origin/main' into SP3-2-Physics

This commit is contained in:
Diren D Bharwani 2022-11-23 15:08:37 +08:00
commit ef0243c335
7 changed files with 266 additions and 185 deletions

View File

@ -23,6 +23,7 @@ public class RaccoonShowcase : Script
[Range(-5, 5)] [Range(-5, 5)]
public List<int> intList = new List<int>(new int[] { 2, 8, 2, 6, 8, 0, 1 }); public List<int> intList = new List<int>(new int[] { 2, 8, 2, 6, 8, 0, 1 });
public List<Light.Type> enumList = new List<Light.Type>(new Light.Type[] { Light.Type.Point, Light.Type.Directional, Light.Type.Ambient }); public List<Light.Type> enumList = new List<Light.Type>(new Light.Type[] { Light.Type.Point, Light.Type.Directional, Light.Type.Ambient });
public List<int> nullList;
public FontAsset fontAsset; public FontAsset fontAsset;
public MeshAsset mesh; public MeshAsset mesh;
public MaterialAsset matAsset; public MaterialAsset matAsset;

View File

@ -61,8 +61,13 @@ namespace SHADE
SHVkInstance::Init(true, false, true); SHVkInstance::Init(true, false, true);
#endif #endif
// Get Physical Device and Construct Logical Device // Get Physical Device
physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST); physicalDevice = SHVkInstance::CreatePhysicalDevice(SH_PHYSICAL_DEVICE_TYPE::BEST);
if (!physicalDevice->GetVkPhysicalDevice())
{
throw std::runtime_error("[Graphics System] No supported Vulkan 1.3 compatible GPU was detected!");
}
// Construct Logical Device
device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice); device = SHVkInstance::CreateLogicalDevice({ SHQueueParams(SH_Q_FAM::GRAPHICS, SH_QUEUE_SELECT::DEDICATED), SHQueueParams(SH_Q_FAM::TRANSFER, SH_QUEUE_SELECT::DEDICATED) }, physicalDevice);
// Construct surface // Construct surface

View File

@ -35,7 +35,7 @@ namespace SHADE
SHVec3 const SHVec3::Back { 0.0f, 0.0f, -1.0f }; SHVec3 const SHVec3::Back { 0.0f, 0.0f, -1.0f };
SHVec3 const SHVec3::UnitX { 1.0f, 0.0f, 0.0f }; SHVec3 const SHVec3::UnitX { 1.0f, 0.0f, 0.0f };
SHVec3 const SHVec3::UnitY { 0.0f, 1.0f, 0.0f }; SHVec3 const SHVec3::UnitY { 0.0f, 1.0f, 0.0f };
SHVec3 const SHVec3::UnitZ { 0.0f, 0.0f, 1.0f }; SHVec3 const SHVec3::UnitZ { 0.0f, 0.0f, -1.0f };
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/* Constructors & Destructor Definitions */ /* Constructors & Destructor Definitions */
@ -411,6 +411,14 @@ namespace SHADE
return result; return result;
} }
SHVec3 SHVec3::Rotate(const SHVec3& v, const SHQuaternion& q) noexcept
{
SHVec3 result;
XMStoreFloat3(&result, XMVector3Rotate(v, q));
return result;
}
SHVec3 SHVec3::RotateX(const SHVec3& v, float angleInRad) noexcept SHVec3 SHVec3::RotateX(const SHVec3& v, float angleInRad) noexcept
{ {
SHVec3 result; SHVec3 result;

View File

@ -25,6 +25,8 @@ namespace SHADE
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/* Forward Declarations */ /* Forward Declarations */
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
class SHQuaternion;
class SHMatrix; class SHMatrix;
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
@ -136,6 +138,7 @@ namespace SHADE
[[nodiscard]] static SHVec3 Project (const SHVec3& v, const SHVec3& u) noexcept; [[nodiscard]] static SHVec3 Project (const SHVec3& v, const SHVec3& u) noexcept;
[[nodiscard]] static SHVec3 Reflect (const SHVec3& v, const SHVec3& normal) noexcept; [[nodiscard]] static SHVec3 Reflect (const SHVec3& v, const SHVec3& normal) noexcept;
[[nodiscard]] static SHVec3 Rotate (const SHVec3& v, const SHVec3& axis, float angleInRad) noexcept; [[nodiscard]] static SHVec3 Rotate (const SHVec3& v, const SHVec3& axis, float angleInRad) noexcept;
[[nodiscard]] static SHVec3 Rotate (const SHVec3& v, const SHQuaternion& q) noexcept;
[[nodiscard]] static SHVec3 RotateX (const SHVec3& v, float angleInRad) noexcept; [[nodiscard]] static SHVec3 RotateX (const SHVec3& v, float angleInRad) noexcept;
[[nodiscard]] static SHVec3 RotateY (const SHVec3& v, float angleInRad) noexcept; [[nodiscard]] static SHVec3 RotateY (const SHVec3& v, float angleInRad) noexcept;
[[nodiscard]] static SHVec3 RotateZ (const SHVec3& v, float angleInRad) noexcept; [[nodiscard]] static SHVec3 RotateZ (const SHVec3& v, float angleInRad) noexcept;

View File

@ -1,16 +1,12 @@
/************************************************************************************//*! /****************************************************************************************
\file Transform.cxx * \file Transform.cxx
\author Tng Kah Wei, kahwei.tng, 390009620 * \author Diren D Bharwani, diren.dbharwani, 390002520
\par email: kahwei.tng\@digipen.edu * \brief Implementation for the managed Transform class.
\date Sep 23, 2022 *
\brief Contains the definition of the functions of the managed Transform class. * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
* disclosure of this file or its contents without the prior written consent
Note: This file is written in C++17/CLI. * of DigiPen Institute of Technology is prohibited.
****************************************************************************************/
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 // Precompiled Headers
#include "SHpch.h" #include "SHpch.h"
// Primary Header // Primary Header
@ -18,80 +14,116 @@ of DigiPen Institute of Technology is prohibited.
namespace SHADE namespace SHADE
{ {
/*---------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/* Constructors */
/*-----------------------------------------------------------------------------------*/
Transform::Transform(Entity entity)
: Component(entity)
{}
/*-----------------------------------------------------------------------------------*/
/* Properties */ /* Properties */
/*---------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
Vector3 Transform::LocalPosition::get() Vector3 Transform::LocalPosition::get()
{ {
return Convert::ToCLI(GetNativeComponent()->GetLocalPosition()); return Convert::ToCLI(GetNativeComponent()->GetLocalPosition());
} }
void Transform::LocalPosition::set(Vector3 val) void Transform::LocalPosition::set(Vector3 val)
{ {
GetNativeComponent()->SetLocalPosition(Convert::ToNative(val)); GetNativeComponent()->SetLocalPosition(Convert::ToNative(val));
} }
Quaternion Transform::LocalRotation::get() Quaternion Transform::LocalRotation::get()
{ {
return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation()); return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation());
} }
void Transform::LocalRotation::set(Quaternion val) void Transform::LocalRotation::set(Quaternion val)
{ {
GetNativeComponent()->SetLocalOrientation(Convert::ToNative(val)); GetNativeComponent()->SetLocalOrientation(Convert::ToNative(val));
} }
Vector3 Transform::LocalEulerAngles::get() Vector3 Transform::LocalEulerAngles::get()
{ {
return Convert::ToCLI(GetNativeComponent()->GetLocalRotation()); return Convert::ToCLI(GetNativeComponent()->GetLocalRotation());
} }
void Transform::LocalEulerAngles::set(Vector3 val) void Transform::LocalEulerAngles::set(Vector3 val)
{ {
GetNativeComponent()->SetLocalRotation(Convert::ToNative(val)); GetNativeComponent()->SetLocalRotation(Convert::ToNative(val));
} }
Vector3 Transform::LocalScale::get() Vector3 Transform::LocalScale::get()
{ {
return Convert::ToCLI(GetNativeComponent()->GetLocalScale()); return Convert::ToCLI(GetNativeComponent()->GetLocalScale());
} }
void Transform::LocalScale::set(Vector3 val) void Transform::LocalScale::set(Vector3 val)
{ {
GetNativeComponent()->SetLocalScale(Convert::ToNative(val)); GetNativeComponent()->SetLocalScale(Convert::ToNative(val));
} }
Vector3 Transform::GlobalPosition::get() Vector3 Transform::GlobalPosition::get()
{ {
return Convert::ToCLI(GetNativeComponent()->GetWorldPosition()); return Convert::ToCLI(GetNativeComponent()->GetWorldPosition());
} }
void Transform::GlobalPosition::set(Vector3 val) void Transform::GlobalPosition::set(Vector3 val)
{ {
GetNativeComponent()->SetWorldPosition(Convert::ToNative(val)); GetNativeComponent()->SetWorldPosition(Convert::ToNative(val));
} }
Quaternion Transform::GlobalRotation::get() Quaternion Transform::GlobalRotation::get()
{ {
return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation()); return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation());
} }
void Transform::GlobalRotation::set(Quaternion val) void Transform::GlobalRotation::set(Quaternion val)
{ {
GetNativeComponent()->SetWorldOrientation(Convert::ToNative(val)); GetNativeComponent()->SetWorldOrientation(Convert::ToNative(val));
} }
Vector3 Transform::GlobalEulerAngles::get() Vector3 Transform::GlobalEulerAngles::get()
{ {
return Convert::ToCLI(GetNativeComponent()->GetWorldRotation()); return Convert::ToCLI(GetNativeComponent()->GetWorldRotation());
} }
void Transform::GlobalEulerAngles::set(Vector3 val) void Transform::GlobalEulerAngles::set(Vector3 val)
{ {
GetNativeComponent()->SetWorldRotation(Convert::ToNative(val)); GetNativeComponent()->SetWorldRotation(Convert::ToNative(val));
} }
Vector3 Transform::GlobalScale::get() Vector3 Transform::GlobalScale::get()
{ {
return Convert::ToCLI(GetNativeComponent()->GetWorldScale()); return Convert::ToCLI(GetNativeComponent()->GetWorldScale());
} }
void Transform::GlobalScale::set(Vector3 val) void Transform::GlobalScale::set(Vector3 val)
{ {
GetNativeComponent()->SetWorldScale(Convert::ToNative(val)); GetNativeComponent()->SetWorldScale(Convert::ToNative(val));
} }
/*---------------------------------------------------------------------------------*/ Vector3 Transform::Forward::get()
/* Constructors */ {
/*---------------------------------------------------------------------------------*/ const SHVec3 DIRECTION = SHVec3::Rotate(SHVec3::UnitZ, Convert::ToNative(GlobalRotation));
Transform::Transform(Entity entity) return Convert::ToCLI(DIRECTION);
: Component(entity) }
{}
/*-----------------------------------------------------------------------------------*/
/* Usage Function Definitions */
/*-----------------------------------------------------------------------------------*/
void Transform::LookAt(Vector3 target)
{
GlobalRotation.SetLookRotation(target - GlobalPosition, Vector3::Up);
}
void Transform::LookAt(Vector3 target, Vector3 up)
{
GlobalRotation.SetLookRotation(target - GlobalPosition, up);
}
} }

View File

@ -1,17 +1,12 @@
/************************************************************************************//*! /****************************************************************************************
\file Transform.hxx * \file Transform.hxx
\author Tng Kah Wei, kahwei.tng, 390009620 * \author Diren D Bharwani, diren.dbharwani, 390002520
\par email: kahwei.tng\@digipen.edu * \brief Interface for the managed Transform class.
\date Sep 23, 2022 *
\brief Contains the definition of the managed Transform class with the * \copyright Copyright (C) 2022 DigiPen Institute of Technology. Reproduction or
declaration of functions for working with it. * disclosure of this file or its contents without the prior written consent
* of DigiPen Institute of Technology is prohibited.
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 #pragma once
// Project Includes // Project Includes
@ -28,6 +23,87 @@ namespace SHADE
/// </summary> /// </summary>
public ref class Transform : public Component<SHTransformComponent> public ref class Transform : public Component<SHTransformComponent>
{ {
public:
/*-----------------------------------------------------------------------------*/
/* Properties */
/*-----------------------------------------------------------------------------*/
/// <summary>
/// Local position stored by this Transform.
/// </summary>
property Vector3 LocalPosition
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Local rotation quaternion stored by this Transform.
/// </summary>
property Quaternion LocalRotation
{
Quaternion get();
void set(Quaternion val);
}
/// <summary>
/// Local euler angle rotations stored by this Transform.
/// </summary>
property Vector3 LocalEulerAngles
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Local scale stored by this Transform.
/// </summary>
property Vector3 LocalScale
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Global position stored by this Transform.
/// </summary>
property Vector3 GlobalPosition
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Global rotation quaternion stored by this Transform.
/// </summary>
property Quaternion GlobalRotation
{
Quaternion get();
void set(Quaternion val);
}
/// <summary>
/// Global euler angle rotations stored by this Transform.
/// </summary>
property Vector3 GlobalEulerAngles
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Global scale stored by this Transform.
/// </summary>
property Vector3 GlobalScale
{
Vector3 get();
void set(Vector3 val);
}
property Vector3 Forward
{
Vector3 get();
}
internal: internal:
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
/* Constructors */ /* Constructors */
@ -41,72 +117,22 @@ namespace SHADE
public: public:
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
/* Properties */ /* Usage Functions */
/*-----------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------*/
/// <summary> /// <summary>
/// Local position stored by this Transform. /// Rotates the transform to look at a target.
/// This function
/// </summary> /// </summary>
property Vector3 LocalPosition /// <param name="target"> The target to look at. </param>
{ void LookAt(Vector3 target);
Vector3 get();
void set(Vector3 val);
}
/// <summary> /// <summary>
/// Local rotation quaternion stored by this Transform. /// Rotates the transform to look at a target.
/// </summary> /// </summary>
property Quaternion LocalRotation /// <param name="target"> The target to look at. </param>
{ /// <param name="up"> The up vector to rotate about. </param>
Quaternion get(); void LookAt(Vector3 target, Vector3 up);
void set(Quaternion val);
}
/// <summary>
/// Local euler angle rotations stored by this Transform.
/// </summary>
property Vector3 LocalEulerAngles
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Local scale stored by this Transform.
/// </summary>
property Vector3 LocalScale
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Global position stored by this Transform.
/// </summary>
property Vector3 GlobalPosition
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Global rotation quaternion stored by this Transform.
/// </summary>
property Quaternion GlobalRotation
{
Quaternion get();
void set(Quaternion val);
}
/// <summary>
/// Global euler angle rotations stored by this Transform.
/// </summary>
property Vector3 GlobalEulerAngles
{
Vector3 get();
void set(Vector3 val);
}
/// <summary>
/// Global scale stored by this Transform.
/// </summary>
property Vector3 GlobalScale
{
Vector3 get();
void set(Vector3 val);
}
}; };
} }

View File

@ -189,6 +189,12 @@ namespace SHADE
System::Type^ listType = field->FieldType->GenericTypeArguments[0]; System::Type^ listType = field->FieldType->GenericTypeArguments[0];
RangeAttribute^ rangeAttrib = hasAttribute<RangeAttribute^>(field); RangeAttribute^ rangeAttrib = hasAttribute<RangeAttribute^>(field);
System::Collections::IList^ iList = safe_cast<System::Collections::IList^>(field->GetValue(object)); System::Collections::IList^ iList = safe_cast<System::Collections::IList^>(field->GetValue(object));
if (iList == nullptr)
{
// Create if the list does not exist
iList = safe_cast<System::Collections::IList^>(System::Activator::CreateInstance(field->FieldType));
field->SetValue(object, iList);
}
if (SHEditorUI::CollapsingHeader(Convert::ToNative(field->Name), &isHovered)) if (SHEditorUI::CollapsingHeader(Convert::ToNative(field->Name), &isHovered))
{ {