Added CallbackAction and CallbackEvent
This commit is contained in:
parent
8772ce0cea
commit
9896c5c913
|
@ -0,0 +1,48 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file CallbackAction.cxx
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Sep 20, 2022
|
||||||
|
\brief Contains the definition of the functions for the CallbackAction managed
|
||||||
|
class.
|
||||||
|
|
||||||
|
Note: This file is written in C++17/CLI.
|
||||||
|
|
||||||
|
Copyright (C) 2021 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 "CallbackAction.hxx"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Constructors */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
generic<typename T1>
|
||||||
|
CallbackAction<T1>::CallbackAction(System::Reflection::MethodInfo^ method)
|
||||||
|
: CallbackAction(method, nullptr)
|
||||||
|
{}
|
||||||
|
generic<typename T1>
|
||||||
|
CallbackAction<T1>::CallbackAction(System::Reflection::MethodInfo^ method, System::Object^ obj)
|
||||||
|
: method { method }
|
||||||
|
, object { obj }
|
||||||
|
{
|
||||||
|
paramArray = gcnew cli::array<System::Object^>(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Usage Functions */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
generic<typename T1>
|
||||||
|
void CallbackAction<T1>::Invoke(T1 param1)
|
||||||
|
{
|
||||||
|
// Set parameters
|
||||||
|
paramArray[0] = safe_cast<System::Object^>(param1);
|
||||||
|
// Invoke
|
||||||
|
method->Invoke(object, paramArray);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,57 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file CallbackAction.hxx
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Sep 20, 2021
|
||||||
|
\brief Contains the definition of the managed CallbackAction 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.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Holds a function and their associated object for invoking later.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T1">Type of the first parameter.</typeparam>
|
||||||
|
generic<typename T1>
|
||||||
|
public ref class CallbackAction
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Constructors */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a CallbackAction with the specified static method.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="method">MethodInfo representing the method to call.</param>
|
||||||
|
/// <param name="obj">Object to call the method on. Set null if static.</param>
|
||||||
|
CallbackAction(System::Reflection::MethodInfo^ method);
|
||||||
|
/// <summary>
|
||||||
|
/// Constructs a CallbackAction with the specified instance method and object
|
||||||
|
/// which will invoke the method.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="method">MethodInfo representing the method to call.</param>
|
||||||
|
/// <param name="obj">Object to call the method on.</param>
|
||||||
|
CallbackAction(System::Reflection::MethodInfo^ method, System::Object^ obj);
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Usage Functions */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// Invokes this action with the specified parameters.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="param1"></param>
|
||||||
|
void Invoke(T1 param1);
|
||||||
|
|
||||||
|
private:
|
||||||
|
System::Reflection::MethodInfo^ method;
|
||||||
|
cli::array<System::Object^>^ paramArray;
|
||||||
|
System::Object^ object;
|
||||||
|
};
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file CallbackEvent.cxx
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Sep 20, 2022
|
||||||
|
\brief Contains the definition of the functions for the CallbackEvent managed
|
||||||
|
class.
|
||||||
|
|
||||||
|
Note: This file is written in C++17/CLI.
|
||||||
|
|
||||||
|
Copyright (C) 2021 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 "CallbackEvent.hxx"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Constructors */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
generic<typename T1>
|
||||||
|
CallbackEvent<T1>::CallbackEvent()
|
||||||
|
{
|
||||||
|
actions = gcnew System::Collections::Generic::List<CallbackAction<T1> ^>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Properties */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
generic<typename T1>
|
||||||
|
System::Collections::Generic::IEnumerable<CallbackAction<T1>^>^ CallbackEvent<T1>::Actions::get()
|
||||||
|
{
|
||||||
|
return actions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
/* Usage Functions */
|
||||||
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
generic<typename T1>
|
||||||
|
void CallbackEvent<T1>::AddAction(CallbackAction<T1>^ action)
|
||||||
|
{
|
||||||
|
actions->Add(action);
|
||||||
|
}
|
||||||
|
generic<typename T1>
|
||||||
|
void CallbackEvent<T1>::AddAction(System::Reflection::MethodInfo^ method)
|
||||||
|
{
|
||||||
|
actions->Add(gcnew CallbackAction<T1>(method));
|
||||||
|
}
|
||||||
|
generic<typename T1>
|
||||||
|
void CallbackEvent<T1>::AddAction(System::Reflection::MethodInfo^ method, System::Object^ object)
|
||||||
|
{
|
||||||
|
actions->Add(gcnew CallbackAction<T1>(method, object));
|
||||||
|
}
|
||||||
|
generic<typename T1>
|
||||||
|
void CallbackEvent<T1>::RemoveAction(CallbackAction<T1>^ action)
|
||||||
|
{
|
||||||
|
actions->Remove(action);
|
||||||
|
}
|
||||||
|
generic<typename T1>
|
||||||
|
void CallbackEvent<T1>::Invoke(T1 param1)
|
||||||
|
{
|
||||||
|
for each (CallbackAction<T1>^ action in actions)
|
||||||
|
{
|
||||||
|
action->Invoke(param1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,85 @@
|
||||||
|
/************************************************************************************//*!
|
||||||
|
\file CallbackEvent.hxx
|
||||||
|
\author Tng Kah Wei, kahwei.tng, 390009620
|
||||||
|
\par email: kahwei.tng\@digipen.edu
|
||||||
|
\date Sep 20, 2021
|
||||||
|
\brief Contains the definition of the managed CallbackEvent 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.
|
||||||
|
*//*************************************************************************************/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CallbackAction.hxx"
|
||||||
|
|
||||||
|
namespace SHADE
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Holds a set of CallbackActions that can be invoked together at a later time.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T1">Type of the first parameter.</typeparam>
|
||||||
|
generic<typename T1>
|
||||||
|
public ref class CallbackEvent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Constructors */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// Default Constructor
|
||||||
|
/// </summary>
|
||||||
|
CallbackEvent();
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Properties */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// Read only access to the list of Actions
|
||||||
|
/// </summary>
|
||||||
|
property System::Collections::Generic::IEnumerable<CallbackAction<T1>^>^ Actions
|
||||||
|
{
|
||||||
|
System::Collections::Generic::IEnumerable<CallbackAction<T1>^>^ get();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Usage Functions */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/// <summary>
|
||||||
|
/// Adds the specified CallbackAction to the CallbackEvent.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="action">CallbackAction to add.</param>
|
||||||
|
void AddAction(CallbackAction<T1>^ action);
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a specified static method as a CallbackAction to the CallbackEvent.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="method">Method to add.</param>
|
||||||
|
void AddAction(System::Reflection::MethodInfo^ method);
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a specified instance method and associated object as a CallbackAction to
|
||||||
|
/// the CallbackEvent.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="method">Method to add.</param>
|
||||||
|
/// <param name="object">Object that will call the specified method.</param>
|
||||||
|
void AddAction(System::Reflection::MethodInfo^ method, System::Object^ object);
|
||||||
|
/// <summary>
|
||||||
|
/// Removes the specified CallbackAction from the CallbackEvent.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="">CallbackAction to remove.</param>
|
||||||
|
void RemoveAction(CallbackAction<T1>^ action);
|
||||||
|
/// <summary>
|
||||||
|
/// Invokes all CallbackActions registered with this CallbackEvent with the
|
||||||
|
/// specified parameters.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="param1"></param>
|
||||||
|
void Invoke(T1 param1);
|
||||||
|
|
||||||
|
private:
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Data Members */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
System::Collections::Generic::List<CallbackAction<T1>^>^ actions;
|
||||||
|
};
|
||||||
|
}
|
|
@ -19,7 +19,7 @@ of DigiPen Institute of Technology is prohibited.
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
///<summary>
|
///<summary>
|
||||||
/// CLR version of the the PlushieEngine's Vector2 class that represents a
|
/// CLR version of the the SHADE Engine's Vector2 class that represents a
|
||||||
/// 2-Dimensional Vector. Designed to closely match Unity's Vector2 struct.
|
/// 2-Dimensional Vector. Designed to closely match Unity's Vector2 struct.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)]
|
[System::Runtime::InteropServices::StructLayout(System::Runtime::InteropServices::LayoutKind::Sequential)]
|
||||||
|
|
Loading…
Reference in New Issue