MultilayerPerceptronComponent.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <Components/MultilayerPerceptronComponent.h>
  10. #include <MachineLearning/IMachineLearning.h>
  11. #include <AzCore/RTTI/RTTI.h>
  12. #include <AzCore/RTTI/BehaviorContext.h>
  13. #include <AzCore/Serialization/EditContext.h>
  14. #include <AzCore/Serialization/SerializeContext.h>
  15. namespace MachineLearning
  16. {
  17. void MultilayerPerceptronComponent::Reflect(AZ::ReflectContext* context)
  18. {
  19. if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  20. {
  21. serializeContext->Class<MultilayerPerceptronComponent>()
  22. ->Version(0)
  23. ->Field("Model", &MultilayerPerceptronComponent::m_model)
  24. ;
  25. if (AZ::EditContext* editContext = serializeContext->GetEditContext())
  26. {
  27. editContext->Class<MultilayerPerceptronComponent>("Multilayer Perceptron", "")
  28. ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
  29. ->Attribute(AZ::Edit::Attributes::Category, "MachineLearning")
  30. ->Attribute(AZ::Edit::Attributes::Icon, "Editor/Icons/Components/NeuralNetwork.svg")
  31. ->Attribute(AZ::Edit::Attributes::ViewportIcon, "Editor/Icons/Components/Viewport/NeuralNetwork.svg")
  32. ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC_CE("Game"))
  33. ->DataElement(AZ::Edit::UIHandlers::Default, &MultilayerPerceptronComponent::m_model, "Model", "This is the machine-learning model provided by this component")
  34. ;
  35. }
  36. }
  37. auto behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context);
  38. if (behaviorContext)
  39. {
  40. behaviorContext->Class<MultilayerPerceptronComponent>("MultilayerPerceptron Component")->
  41. Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)->
  42. Attribute(AZ::Script::Attributes::Module, "machineLearning")->
  43. Attribute(AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::ListOnly)->
  44. Constructor<>()->
  45. Attribute(AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value)->
  46. Property("Model", BehaviorValueProperty(&MultilayerPerceptronComponent::m_model))
  47. ;
  48. behaviorContext->EBus<MultilayerPerceptronComponentRequestBus>("Multilayer perceptron requests")
  49. ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
  50. ->Attribute(AZ::Script::Attributes::Module, "machinelearning")
  51. ->Attribute(AZ::Script::Attributes::Category, "MachineLearning")
  52. ->Event("Get model", &MachineLearning::MultilayerPerceptronComponentRequestBus::Events::GetModel)
  53. ;
  54. }
  55. }
  56. void MultilayerPerceptronComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
  57. {
  58. provided.push_back(AZ_CRC("MultilayerPerceptronService"));
  59. }
  60. MultilayerPerceptronComponent::MultilayerPerceptronComponent()
  61. {
  62. m_handle.reset(&m_model);
  63. MachineLearningInterface::Get()->RegisterModel(m_handle);
  64. }
  65. MultilayerPerceptronComponent::~MultilayerPerceptronComponent()
  66. {
  67. MachineLearningInterface::Get()->UnregisterModel(m_handle);
  68. }
  69. void MultilayerPerceptronComponent::Activate()
  70. {
  71. MultilayerPerceptronComponentRequestBus::Handler::BusConnect(GetEntityId());
  72. }
  73. void MultilayerPerceptronComponent::Deactivate()
  74. {
  75. MultilayerPerceptronComponentRequestBus::Handler::BusDisconnect();
  76. }
  77. INeuralNetworkPtr MultilayerPerceptronComponent::GetModel()
  78. {
  79. return m_handle;
  80. }
  81. }