Added LookAt & Forward to C# Transforms

This commit is contained in:
Diren D Bharwani 2022-11-23 14:57:48 +08:00
parent 7202551838
commit 0aaf5b7e79
2 changed files with 241 additions and 183 deletions

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
{ {
/*---------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
/* Properties */ /* Constructors */
/*---------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
Vector3 Transform::LocalPosition::get()
{
return Convert::ToCLI(GetNativeComponent()->GetLocalPosition());
}
void Transform::LocalPosition::set(Vector3 val)
{
GetNativeComponent()->SetLocalPosition(Convert::ToNative(val));
}
Quaternion Transform::LocalRotation::get()
{
return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation());
}
void Transform::LocalRotation::set(Quaternion val)
{
GetNativeComponent()->SetLocalOrientation(Convert::ToNative(val));
}
Vector3 Transform::LocalEulerAngles::get()
{
return Convert::ToCLI(GetNativeComponent()->GetLocalRotation());
}
void Transform::LocalEulerAngles::set(Vector3 val)
{
GetNativeComponent()->SetLocalRotation(Convert::ToNative(val));
}
Vector3 Transform::LocalScale::get()
{
return Convert::ToCLI(GetNativeComponent()->GetLocalScale());
} Transform::Transform(Entity entity)
void Transform::LocalScale::set(Vector3 val) : Component(entity)
{ {}
GetNativeComponent()->SetLocalScale(Convert::ToNative(val));
} /*-----------------------------------------------------------------------------------*/
Vector3 Transform::GlobalPosition::get() /* Properties */
{ /*-----------------------------------------------------------------------------------*/
return Convert::ToCLI(GetNativeComponent()->GetWorldPosition()); Vector3 Transform::LocalPosition::get()
} {
void Transform::GlobalPosition::set(Vector3 val) return Convert::ToCLI(GetNativeComponent()->GetLocalPosition());
{ }
GetNativeComponent()->SetWorldPosition(Convert::ToNative(val));
} void Transform::LocalPosition::set(Vector3 val)
Quaternion Transform::GlobalRotation::get() {
{ GetNativeComponent()->SetLocalPosition(Convert::ToNative(val));
return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation()); }
}
void Transform::GlobalRotation::set(Quaternion val) Quaternion Transform::LocalRotation::get()
{ {
GetNativeComponent()->SetWorldOrientation(Convert::ToNative(val)); return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation());
} }
Vector3 Transform::GlobalEulerAngles::get()
{ void Transform::LocalRotation::set(Quaternion val)
return Convert::ToCLI(GetNativeComponent()->GetWorldRotation()); {
} GetNativeComponent()->SetLocalOrientation(Convert::ToNative(val));
void Transform::GlobalEulerAngles::set(Vector3 val) }
{
GetNativeComponent()->SetWorldRotation(Convert::ToNative(val)); Vector3 Transform::LocalEulerAngles::get()
} {
Vector3 Transform::GlobalScale::get() return Convert::ToCLI(GetNativeComponent()->GetLocalRotation());
{ }
return Convert::ToCLI(GetNativeComponent()->GetWorldScale());
void Transform::LocalEulerAngles::set(Vector3 val)
{
GetNativeComponent()->SetLocalRotation(Convert::ToNative(val));
}
Vector3 Transform::LocalScale::get()
{
return Convert::ToCLI(GetNativeComponent()->GetLocalScale());
}
void Transform::LocalScale::set(Vector3 val)
{
GetNativeComponent()->SetLocalScale(Convert::ToNative(val));
}
Vector3 Transform::GlobalPosition::get()
{
return Convert::ToCLI(GetNativeComponent()->GetWorldPosition());
}
void Transform::GlobalPosition::set(Vector3 val)
{
GetNativeComponent()->SetWorldPosition(Convert::ToNative(val));
}
Quaternion Transform::GlobalRotation::get()
{
return Convert::ToCLI(GetNativeComponent()->GetLocalOrientation());
}
void Transform::GlobalRotation::set(Quaternion val)
{
GetNativeComponent()->SetWorldOrientation(Convert::ToNative(val));
}
Vector3 Transform::GlobalEulerAngles::get()
{
return Convert::ToCLI(GetNativeComponent()->GetWorldRotation());
}
void Transform::GlobalEulerAngles::set(Vector3 val)
{
GetNativeComponent()->SetWorldRotation(Convert::ToNative(val));
}
Vector3 Transform::GlobalScale::get()
{
return Convert::ToCLI(GetNativeComponent()->GetWorldScale());
}
void Transform::GlobalScale::set(Vector3 val)
{
GetNativeComponent()->SetWorldScale(Convert::ToNative(val));
}
Vector3 Transform::Forward::get()
{
const SHVec3 DIRECTION = SHVec3::Rotate(SHVec3::UnitZ, Convert::ToNative(GlobalRotation));
return Convert::ToCLI(DIRECTION);
}
/*-----------------------------------------------------------------------------------*/
/* 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);
}
}
void Transform::GlobalScale::set(Vector3 val)
{
GetNativeComponent()->SetWorldScale(Convert::ToNative(val));
}
/*---------------------------------------------------------------------------------*/
/* Constructors */
/*---------------------------------------------------------------------------------*/
Transform::Transform(Entity entity)
: Component(entity)
{}
} }

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
@ -23,90 +18,121 @@ of DigiPen Institute of Technology is prohibited.
namespace SHADE namespace SHADE
{ {
/// <summary>
/// CLR version of the SHADE Engine's TransformComponent.
/// </summary>
public ref class Transform : public Component<SHTransformComponent>
{
public:
/*-----------------------------------------------------------------------------*/
/* Properties */
/*-----------------------------------------------------------------------------*/
/// <summary> /// <summary>
/// CLR version of the SHADE Engine's TransformComponent. /// Local position stored by this Transform.
/// </summary> /// </summary>
public ref class Transform : public Component<SHTransformComponent> property Vector3 LocalPosition
{ {
internal: Vector3 get();
/*-----------------------------------------------------------------------------*/ void set(Vector3 val);
/* Constructors */ }
/*-----------------------------------------------------------------------------*/
/// <summary>
/// Constructs a Transform Component that represents a native Transform component
/// tied to the specified Entity.
/// </summary>
/// <param name="entity">Entity that this Component will be tied to.</param>
Transform(Entity entity);
public: /// <summary>
/*-----------------------------------------------------------------------------*/ /// Local rotation quaternion stored by this Transform.
/* Properties */ /// </summary>
/*-----------------------------------------------------------------------------*/ property Quaternion LocalRotation
/// <summary> {
/// Local position stored by this Transform. Quaternion get();
/// </summary> void set(Quaternion val);
property Vector3 LocalPosition }
{
Vector3 get(); /// <summary>
void set(Vector3 val); /// Local euler angle rotations stored by this Transform.
} /// </summary>
/// <summary> property Vector3 LocalEulerAngles
/// Local rotation quaternion stored by this Transform. {
/// </summary> Vector3 get();
property Quaternion LocalRotation void set(Vector3 val);
{ }
Quaternion get();
void set(Quaternion val); /// <summary>
} /// Local scale stored by this Transform.
/// <summary> /// </summary>
/// Local euler angle rotations stored by this Transform. property Vector3 LocalScale
/// </summary> {
property Vector3 LocalEulerAngles Vector3 get();
{ void set(Vector3 val);
Vector3 get(); }
void set(Vector3 val);
} /// <summary>
/// <summary> /// Global position stored by this Transform.
/// Local scale stored by this Transform. /// </summary>
/// </summary> property Vector3 GlobalPosition
property Vector3 LocalScale {
{ Vector3 get();
Vector3 get(); void set(Vector3 val);
void set(Vector3 val); }
}
/// <summary> /// <summary>
/// Global position stored by this Transform. /// Global rotation quaternion stored by this Transform.
/// </summary> /// </summary>
property Vector3 GlobalPosition property Quaternion GlobalRotation
{ {
Vector3 get(); Quaternion get();
void set(Vector3 val); void set(Quaternion val);
} }
/// <summary>
/// Global rotation quaternion stored by this Transform. /// <summary>
/// </summary> /// Global euler angle rotations stored by this Transform.
property Quaternion GlobalRotation /// </summary>
{ property Vector3 GlobalEulerAngles
Quaternion get(); {
void set(Quaternion val); Vector3 get();
} void set(Vector3 val);
/// <summary> }
/// Global euler angle rotations stored by this Transform.
/// </summary> /// <summary>
property Vector3 GlobalEulerAngles /// Global scale stored by this Transform.
{ /// </summary>
Vector3 get(); property Vector3 GlobalScale
void set(Vector3 val); {
} Vector3 get();
/// <summary> void set(Vector3 val);
/// Global scale stored by this Transform. }
/// </summary>
property Vector3 GlobalScale property Vector3 Forward
{ {
Vector3 get(); Vector3 get();
void set(Vector3 val); }
}
}; internal:
/*-----------------------------------------------------------------------------*/
/* Constructors */
/*-----------------------------------------------------------------------------*/
/// <summary>
/// Constructs a Transform Component that represents a native Transform component
/// tied to the specified Entity.
/// </summary>
/// <param name="entity">Entity that this Component will be tied to.</param>
Transform(Entity entity);
public:
/*-----------------------------------------------------------------------------*/
/* Usage Functions */
/*-----------------------------------------------------------------------------*/
/// <summary>
/// Rotates the transform to look at a target.
/// This function
/// </summary>
/// <param name="target"> The target to look at. </param>
void LookAt(Vector3 target);
/// <summary>
/// Rotates the transform to look at a target.
/// </summary>
/// <param name="target"> The target to look at. </param>
/// <param name="up"> The up vector to rotate about. </param>
void LookAt(Vector3 target, Vector3 up);
};
} }