14
14
#include < AzCore/RTTI/BehaviorContext.h>
15
15
#include < AzCore/Serialization/EditContext.h>
16
16
#include < AzCore/Serialization/SerializeContext.h>
17
+ #include < AzCore/Console/ILogger.h>
17
18
18
19
namespace MachineLearning
19
20
{
@@ -23,32 +24,21 @@ namespace MachineLearning
23
24
{
24
25
serializeContext->Class <MultilayerPerceptronComponent>()
25
26
->Version (0 )
27
+ ->Field (" Asset" , &MultilayerPerceptronComponent::m_asset)
26
28
->Field (" Model" , &MultilayerPerceptronComponent::m_model)
27
29
;
28
-
29
- if (AZ::EditContext* editContext = serializeContext->GetEditContext ())
30
- {
31
- editContext->Class <MultilayerPerceptronComponent>(" Multilayer Perceptron" , " " )
32
- ->ClassElement (AZ::Edit::ClassElements::EditorData, " " )
33
- ->Attribute (AZ::Edit::Attributes::Category, " MachineLearning" )
34
- ->Attribute (AZ::Edit::Attributes::Icon, " Editor/Icons/Components/NeuralNetwork.svg" )
35
- ->Attribute (AZ::Edit::Attributes::ViewportIcon, " Editor/Icons/Components/Viewport/NeuralNetwork.svg" )
36
- ->Attribute (AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC_CE (" Game" ))
37
- ->DataElement (AZ::Edit::UIHandlers::Default, &MultilayerPerceptronComponent::m_model, " Model" , " This is the machine-learning model provided by this component" )
38
- ;
39
- }
40
30
}
41
31
42
32
auto behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context);
43
33
if (behaviorContext)
44
34
{
45
- behaviorContext->Class <MultilayerPerceptronComponent>(" MultilayerPerceptron Component" )->
46
- Attribute (AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)->
47
- Attribute (AZ::Script::Attributes::Module, " machineLearning" )->
48
- Attribute (AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::ListOnly)->
49
- Constructor<>()->
50
- Attribute (AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value)->
51
- Property (" Model" , BehaviorValueProperty (&MultilayerPerceptronComponent::m_model))
35
+ behaviorContext->Class <MultilayerPerceptronComponent>(" MultilayerPerceptron Component" )
36
+ -> Attribute (AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
37
+ -> Attribute (AZ::Script::Attributes::Module, " machineLearning" )
38
+ -> Attribute (AZ::Script::Attributes::ExcludeFrom, AZ::Script::Attributes::ExcludeFlags::ListOnly)
39
+ -> Constructor <>()
40
+ -> Attribute (AZ::Script::Attributes::Storage, AZ::Script::Attributes::StorageType::Value)
41
+ -> Property (" Model" , BehaviorValueProperty (&MultilayerPerceptronComponent::m_model))
52
42
;
53
43
54
44
behaviorContext->EBus <MultilayerPerceptronComponentRequestBus>(" Multilayer perceptron requests" )
@@ -79,15 +69,63 @@ namespace MachineLearning
79
69
void MultilayerPerceptronComponent::Activate ()
80
70
{
81
71
MultilayerPerceptronComponentRequestBus::Handler::BusConnect (GetEntityId ());
72
+ AssetChanged ();
82
73
}
83
74
84
75
void MultilayerPerceptronComponent::Deactivate ()
85
76
{
77
+ AZ::Data::AssetBus::Handler::BusDisconnect ();
86
78
MultilayerPerceptronComponentRequestBus::Handler::BusDisconnect ();
87
79
}
88
80
89
81
INeuralNetworkPtr MultilayerPerceptronComponent::GetModel ()
90
82
{
91
83
return m_handle;
92
84
}
85
+
86
+ void MultilayerPerceptronComponent::AssetChanged ()
87
+ {
88
+ AZ::Data::AssetBus::Handler::BusDisconnect ();
89
+ if (m_asset.GetStatus () == AZ::Data::AssetData::AssetStatus::Error ||
90
+ m_asset.GetStatus () == AZ::Data::AssetData::AssetStatus::NotLoaded)
91
+ {
92
+ m_asset.QueueLoad ();
93
+ }
94
+ AZ::Data::AssetBus::Handler::BusConnect (m_asset.GetId ());
95
+ }
96
+
97
+ void MultilayerPerceptronComponent::AssetCleared ()
98
+ {
99
+ ;
100
+ }
101
+
102
+ void MultilayerPerceptronComponent::OnAssetReady (AZ::Data::Asset<AZ::Data::AssetData> asset)
103
+ {
104
+ ModelAsset* modelAsset = asset.GetAs <ModelAsset>();
105
+ if ((asset == m_asset) && (modelAsset != nullptr ))
106
+ {
107
+ m_model = *modelAsset;
108
+ }
109
+ }
110
+
111
+ void MultilayerPerceptronComponent::OnAssetReloaded (AZ::Data::Asset<AZ::Data::AssetData> asset)
112
+ {
113
+ OnAssetReady (asset);
114
+ }
115
+
116
+ void MultilayerPerceptronComponent::OnAssetError (AZ::Data::Asset<AZ::Data::AssetData> asset)
117
+ {
118
+ if (asset == m_asset)
119
+ {
120
+ AZLOG_WARN (" OnAssetError: %s" , asset.GetHint ().c_str ());
121
+ }
122
+ }
123
+
124
+ void MultilayerPerceptronComponent::OnAssetReloadError (AZ::Data::Asset<AZ::Data::AssetData> asset)
125
+ {
126
+ if (asset == m_asset)
127
+ {
128
+ AZLOG_WARN (" OnAssetReloadError: %s" , asset.GetHint ().c_str ());
129
+ }
130
+ }
93
131
}
0 commit comments