BsScriptMorphShapes.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptMorphShapes.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoField.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoClass.h"
  8. #include "BsMonoManager.h"
  9. #include "BsMonoUtil.h"
  10. #include "BsMorphShapes.h"
  11. using namespace std::placeholders;
  12. namespace bs
  13. {
  14. ScriptMorphShapes::ScriptMorphShapes(MonoObject* managedInstance, const SPtr<MorphShapes>& morphShapes)
  15. :ScriptObject(managedInstance), mMorphShapes(morphShapes)
  16. { }
  17. void ScriptMorphShapes::initRuntimeData()
  18. {
  19. metaData.scriptClass->addInternalCall("Internal_GetChannels", &ScriptMorphShapes::internal_GetChannels);
  20. }
  21. MonoObject* ScriptMorphShapes::create(const SPtr<MorphShapes>& morphShapes)
  22. {
  23. MonoObject* instance = metaData.scriptClass->createInstance();
  24. new (bs_alloc<ScriptMorphShapes>()) ScriptMorphShapes(instance, morphShapes);
  25. return instance;
  26. }
  27. MonoArray* ScriptMorphShapes::internal_GetChannels(ScriptMorphShapes* thisPtr)
  28. {
  29. SPtr<MorphShapes> morphShapes = thisPtr->getInternal();
  30. UINT32 numChannels = morphShapes->getNumChannels();
  31. ScriptArray scriptArray = ScriptArray::create<ScriptMorphChannel>(numChannels);
  32. for (UINT32 i = 0; i < numChannels; i++)
  33. {
  34. MonoObject* monoChannel = ScriptMorphChannel::toManaged(morphShapes->getChannel(i));
  35. scriptArray.set(i, monoChannel);
  36. }
  37. return scriptArray.getInternal();
  38. }
  39. ScriptMorphChannel::ScriptMorphChannel(MonoObject* instance)
  40. :ScriptObject(instance)
  41. { }
  42. void ScriptMorphChannel::initRuntimeData()
  43. { }
  44. MonoObject* ScriptMorphChannel::toManaged(const SPtr<MorphChannel>& value)
  45. {
  46. MonoString* monoName = MonoUtil::stringToMono(value->getName());
  47. UINT32 numShapes = value->getNumShapes();
  48. ScriptArray shapeArray = ScriptArray::create<ScriptMorphShape>(numShapes);
  49. for(UINT32 i = 0; i < numShapes; i++)
  50. {
  51. MonoObject* managedShape = ScriptMorphShape::toManaged(value->getShape(i));
  52. shapeArray.set(i, managedShape);
  53. }
  54. void* params[2] = { monoName, shapeArray.getInternal() };
  55. return metaData.scriptClass->createInstance("string,MorphShape[]", params);
  56. }
  57. ScriptMorphShape::ScriptMorphShape(MonoObject* instance)
  58. :ScriptObject(instance)
  59. { }
  60. void ScriptMorphShape::initRuntimeData()
  61. { }
  62. MonoObject* ScriptMorphShape::toManaged(const SPtr<MorphShape>& value)
  63. {
  64. MonoString* monoName = MonoUtil::stringToMono(value->getName());
  65. float weight = value->getWeight();
  66. void* params[2] = { monoName, &weight };
  67. return metaData.scriptClass->createInstance("string,single", params);
  68. }
  69. }