2
0

BsScriptAnimationCurve.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptAnimationCurve.h"
  4. #include "BsMonoUtil.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsAnimationCurve.h"
  8. using namespace std::placeholders;
  9. namespace BansheeEngine
  10. {
  11. ScriptKeyFrame::ScriptKeyFrame(MonoObject* instance)
  12. :ScriptObject(instance)
  13. { }
  14. void ScriptKeyFrame::initRuntimeData()
  15. {
  16. // Do nothing
  17. }
  18. ScriptAnimationCurve::ScriptAnimationCurve(MonoObject* instance, const SPtr<TAnimationCurve<float>>& curve)
  19. :ScriptObject(instance), mCurve(curve)
  20. { }
  21. void ScriptAnimationCurve::initRuntimeData()
  22. {
  23. metaData.scriptClass->addInternalCall("Internal_Create", &ScriptAnimationCurve::internal_Create);
  24. metaData.scriptClass->addInternalCall("Internal_GetKeyFrames", &ScriptAnimationCurve::internal_GetKeyFrames);
  25. metaData.scriptClass->addInternalCall("Internal_SetKeyFrames", &ScriptAnimationCurve::internal_SetKeyFrames);
  26. metaData.scriptClass->addInternalCall("Internal_Evaluate", &ScriptAnimationCurve::internal_Evaluate);
  27. }
  28. void ScriptAnimationCurve::internal_Create(MonoObject* instance, MonoArray* keyFrames)
  29. {
  30. ScriptArray inArray(keyFrames);
  31. UINT32 numKeyframes = inArray.size();
  32. Vector<TKeyframe<float>> nativeKeyframes(numKeyframes);
  33. memcpy(nativeKeyframes.data(), (UINT8*)inArray.getRawPtr<TKeyframe<float>>(),
  34. numKeyframes * sizeof(TKeyframe<float>));
  35. SPtr<TAnimationCurve<float>> curve = bs_shared_ptr_new<TAnimationCurve<float>>(nativeKeyframes);
  36. new (bs_alloc<ScriptAnimationCurve>()) ScriptAnimationCurve(instance, curve);
  37. }
  38. MonoArray* ScriptAnimationCurve::internal_GetKeyFrames(ScriptAnimationCurve* thisPtr)
  39. {
  40. UINT32 numKeyframes = thisPtr->mCurve->getNumKeyFrames();
  41. ScriptArray output = ScriptArray::create<ScriptKeyFrame>(numKeyframes);
  42. for (UINT32 i = 0; i < numKeyframes; i++)
  43. output.set(i, thisPtr->mCurve->getKeyFrame(i));
  44. return output.getInternal();
  45. }
  46. void ScriptAnimationCurve::internal_SetKeyFrames(ScriptAnimationCurve* thisPtr, MonoArray* keyFrames)
  47. {
  48. ScriptArray inArray(keyFrames);
  49. UINT32 numKeyframes = inArray.size();
  50. Vector<TKeyframe<float>> nativeKeyframes(numKeyframes);
  51. memcpy(nativeKeyframes.data(), (UINT8*)inArray.getRawPtr<TKeyframe<float>>(),
  52. numKeyframes * sizeof(TKeyframe<float>));
  53. thisPtr->mCurve = bs_shared_ptr_new<TAnimationCurve<float>>(nativeKeyframes);
  54. }
  55. float ScriptAnimationCurve::internal_Evaluate(ScriptAnimationCurve* thisPtr, float time, bool loop)
  56. {
  57. return thisPtr->mCurve->evaluate(time, loop);
  58. }
  59. }