Jelajahi Sumber

Proteus Robot Gem (#173)

* Proteus Robot gem.

Added Proteus robot Gem and assets.

Co-authored-by: Paweł Budziszewski <[email protected]>
Co-authored-by: Piotr Rząd <[email protected]>
Signed-off-by: Michał Pełka <[email protected]>

* Translated Proteus to be in the center of the prefab

Signed-off-by: Paweł Budziszewski <[email protected]>

* Cleaned names and added ros2 camera sensor

Signed-off-by: Paweł Budziszewski <[email protected]>

* Adjust namespaces to  default strategy

Signed-off-by: Michał Pełka <[email protected]>

---------

Signed-off-by: Michał Pełka <[email protected]>
Signed-off-by: Paweł Budziszewski <[email protected]>
Co-authored-by: Paweł Budziszewski <[email protected]>
Co-authored-by: Piotr Rząd <[email protected]>
Michał Pełka 2 tahun lalu
induk
melakukan
aa58404d0c
71 mengubah file dengan 1514 tambahan dan 0 penghapusan
  1. 13 0
      Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Front_Double_Lights.material
  2. 13 0
      Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Front_Light.material
  3. 13 0
      Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Indicator.material
  4. 18 0
      Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Proteus.material
  5. 13 0
      Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Rear_Lights.material
  6. 13 0
      Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Side_Lights.material
  7. 19 0
      Gems/ProteusRobot/Assets/Materials/Proteus_chassis_wheel.material
  8. 14 0
      Gems/ProteusRobot/Assets/Materials/Proteus_headLamp.material
  9. 4 0
      Gems/ProteusRobot/Assets/Materials/untitled.material
  10. 257 0
      Gems/ProteusRobot/Assets/Proteus.prefab
  11. 3 0
      Gems/ProteusRobot/Assets/Proteus2_chassis.fbx
  12. 3 0
      Gems/ProteusRobot/Assets/Proteus2_lift.fbx
  13. 3 0
      Gems/ProteusRobot/Assets/Proteus_chassis.fbx
  14. 151 0
      Gems/ProteusRobot/Assets/Proteus_chassis.fbx.assetinfo
  15. 3 0
      Gems/ProteusRobot/Assets/Proteus_wheel.fbx
  16. 88 0
      Gems/ProteusRobot/Assets/Proteus_wheel.fbx.assetinfo
  17. 45 0
      Gems/ProteusRobot/Assets/Scripts/ProteusRobot_inputs.inputbindings
  18. 3 0
      Gems/ProteusRobot/Assets/Textures/Lights_Emissive.png
  19. 3 0
      Gems/ProteusRobot/Assets/Textures/Proteus_BaseMap.png
  20. 3 0
      Gems/ProteusRobot/Assets/Textures/Proteus_MaskMap.png
  21. 3 0
      Gems/ProteusRobot/Assets/Textures/Proteus_MaskMap_A.png
  22. 3 0
      Gems/ProteusRobot/Assets/Textures/Proteus_MaskMap_R.png
  23. 3 0
      Gems/ProteusRobot/Assets/Textures/Proteus_Normal.png
  24. 18 0
      Gems/ProteusRobot/Assets/no_friction.physxmaterial
  25. 18 0
      Gems/ProteusRobot/Assets/robot_tire.physxmaterial
  26. 22 0
      Gems/ProteusRobot/CMakeLists.txt
  27. 210 0
      Gems/ProteusRobot/Code/CMakeLists.txt
  28. 31 0
      Gems/ProteusRobot/Code/Include/ProteusRobot/ProteusRobotBus.h
  29. 4 0
      Gems/ProteusRobot/Code/Platform/Android/PAL_android.cmake
  30. 3 0
      Gems/ProteusRobot/Code/Platform/Android/proteusrobot_api_files.cmake
  31. 8 0
      Gems/ProteusRobot/Code/Platform/Android/proteusrobot_private_files.cmake
  32. 8 0
      Gems/ProteusRobot/Code/Platform/Android/proteusrobot_shared_files.cmake
  33. 4 0
      Gems/ProteusRobot/Code/Platform/Linux/PAL_linux.cmake
  34. 3 0
      Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_api_files.cmake
  35. 3 0
      Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_editor_api_files.cmake
  36. 8 0
      Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_private_files.cmake
  37. 8 0
      Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_shared_files.cmake
  38. 4 0
      Gems/ProteusRobot/Code/Platform/Mac/PAL_mac.cmake
  39. 3 0
      Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_api_files.cmake
  40. 3 0
      Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_editor_api_files.cmake
  41. 8 0
      Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_private_files.cmake
  42. 8 0
      Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_shared_files.cmake
  43. 4 0
      Gems/ProteusRobot/Code/Platform/Windows/PAL_windows.cmake
  44. 3 0
      Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_api_files.cmake
  45. 3 0
      Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_editor_api_files.cmake
  46. 8 0
      Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_private_files.cmake
  47. 8 0
      Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_shared_files.cmake
  48. 4 0
      Gems/ProteusRobot/Code/Platform/iOS/PAL_ios.cmake
  49. 3 0
      Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_api_files.cmake
  50. 8 0
      Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_private_files.cmake
  51. 8 0
      Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_shared_files.cmake
  52. 17 0
      Gems/ProteusRobot/Code/Source/Clients/ProteusRobotModule.cpp
  53. 83 0
      Gems/ProteusRobot/Code/Source/Clients/ProteusRobotSystemComponent.cpp
  54. 47 0
      Gems/ProteusRobot/Code/Source/Clients/ProteusRobotSystemComponent.h
  55. 36 0
      Gems/ProteusRobot/Code/Source/ProteusRobotModuleInterface.h
  56. 38 0
      Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorModule.cpp
  57. 54 0
      Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorSystemComponent.cpp
  58. 33 0
      Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorSystemComponent.h
  59. 4 0
      Gems/ProteusRobot/Code/Tests/Clients/ProteusRobotTest.cpp
  60. 4 0
      Gems/ProteusRobot/Code/Tests/Tools/ProteusRobotEditorTest.cpp
  61. 4 0
      Gems/ProteusRobot/Code/proteusrobot_api_files.cmake
  62. 4 0
      Gems/ProteusRobot/Code/proteusrobot_editor_api_files.cmake
  63. 5 0
      Gems/ProteusRobot/Code/proteusrobot_editor_private_files.cmake
  64. 4 0
      Gems/ProteusRobot/Code/proteusrobot_editor_shared_files.cmake
  65. 4 0
      Gems/ProteusRobot/Code/proteusrobot_editor_tests_files.cmake
  66. 6 0
      Gems/ProteusRobot/Code/proteusrobot_private_files.cmake
  67. 4 0
      Gems/ProteusRobot/Code/proteusrobot_shared_files.cmake
  68. 4 0
      Gems/ProteusRobot/Code/proteusrobot_tests_files.cmake
  69. 18 0
      Gems/ProteusRobot/Registry/assetprocessor_settings.setreg
  70. 28 0
      Gems/ProteusRobot/gem.json
  71. 3 0
      Gems/ProteusRobot/preview.png

+ 13 - 0
Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Front_Double_Lights.material

@@ -0,0 +1,13 @@
+{
+    "materialType": "@gemroot:Atom_Feature_Common@/Assets/Materials/Types/StandardPBR.materialtype",
+    "materialTypeVersion": 5,
+    "propertyValues": {
+        "baseColor.textureMap": "../Textures/Lights_Emissive.png",
+        "emissive.enable": true,
+        "emissive.intensity": 7.0,
+        "emissive.textureMap": "../Textures/Lights_Emissive.png",
+        "normal.textureMap": "../Textures/Proteus_Normal.png",
+        "opacity.factor": 1.0,
+        "roughness.factor": 0.5
+    }
+}

+ 13 - 0
Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Front_Light.material

@@ -0,0 +1,13 @@
+{
+    "materialType": "@gemroot:Atom_Feature_Common@/Assets/Materials/Types/StandardPBR.materialtype",
+    "materialTypeVersion": 5,
+    "propertyValues": {
+        "baseColor.textureMap": "../Textures/Lights_Emissive.png",
+        "emissive.enable": true,
+        "emissive.intensity": 7.0,
+        "emissive.textureMap": "../Textures/Lights_Emissive.png",
+        "normal.textureMap": "../Textures/Proteus_Normal.png",
+        "opacity.factor": 1.0,
+        "roughness.factor": 0.5
+    }
+}

+ 13 - 0
Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Indicator.material

@@ -0,0 +1,13 @@
+{
+    "materialType": "@gemroot:Atom_Feature_Common@/Assets/Materials/Types/StandardPBR.materialtype",
+    "materialTypeVersion": 5,
+    "propertyValues": {
+        "baseColor.textureMap": "../Textures/Lights_Emissive.png",
+        "emissive.enable": true,
+        "emissive.intensity": 7.0,
+        "emissive.textureMap": "../Textures/Lights_Emissive.png",
+        "normal.textureMap": "../Textures/Proteus_Normal.png",
+        "opacity.factor": 1.0,
+        "roughness.factor": 0.5
+    }
+}

+ 18 - 0
Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Proteus.material

@@ -0,0 +1,18 @@
+{
+    "materialType": "@gemroot:Atom_Feature_Common@/Assets/Materials/Types/StandardPBR.materialtype",
+    "materialTypeVersion": 5,
+    "propertyValues": {
+        "baseColor.textureMap": "../Textures/Proteus_BaseMap.png",
+        "emissive.enable": true,
+        "emissive.intensity": 7.420000076293945,
+        "emissive.textureMap": "../Textures/Lights_Emissive.png",
+        "metallic.textureMap": "../Textures/Proteus_MaskMap_R.png",
+        "normal.textureMap": "../Textures/Proteus_Normal.png",
+        "opacity.factor": 1.0,
+        "roughness.factor": 0.5,
+        "roughness.lowerBound": 0.20000000298023224,
+        "roughness.textureMap": "../Textures/Proteus_MaskMap_A.png",
+        "roughness.upperBound": 0.9399999976158142,
+        "specularF0.factor": 0.5099999904632568
+    }
+}

+ 13 - 0
Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Rear_Lights.material

@@ -0,0 +1,13 @@
+{
+    "materialType": "@gemroot:Atom_Feature_Common@/Assets/Materials/Types/StandardPBR.materialtype",
+    "materialTypeVersion": 5,
+    "propertyValues": {
+        "baseColor.textureMap": "../Textures/Lights_Emissive.png",
+        "emissive.enable": true,
+        "emissive.intensity": 7.0,
+        "emissive.textureMap": "../Textures/Lights_Emissive.png",
+        "normal.textureMap": "../Textures/Proteus_Normal.png",
+        "opacity.factor": 1.0,
+        "roughness.factor": 0.5
+    }
+}

+ 13 - 0
Gems/ProteusRobot/Assets/Materials/Proteus_chassis_Side_Lights.material

@@ -0,0 +1,13 @@
+{
+    "materialType": "@gemroot:Atom_Feature_Common@/Assets/Materials/Types/StandardPBR.materialtype",
+    "materialTypeVersion": 5,
+    "propertyValues": {
+        "baseColor.textureMap": "../Textures/Lights_Emissive.png",
+        "emissive.enable": true,
+        "emissive.intensity": 7.0,
+        "emissive.textureMap": "../Textures/Lights_Emissive.png",
+        "normal.textureMap": "../Textures/Proteus_Normal.png",
+        "opacity.factor": 1.0,
+        "roughness.factor": 0.5
+    }
+}

+ 19 - 0
Gems/ProteusRobot/Assets/Materials/Proteus_chassis_wheel.material

@@ -0,0 +1,19 @@
+{
+    "materialType": "@gemroot:Atom_Feature_Common@/Assets/Materials/Types/StandardPBR.materialtype",
+    "materialTypeVersion": 5,
+    "propertyValues": {
+        "baseColor.textureBlendMode": "LinearLight",
+        "baseColor.textureMap": "../Textures/Proteus_BaseMap.png",
+        "emissive.enable": true,
+        "emissive.intensity": 7.420000076293945,
+        "emissive.textureMap": "../Textures/Lights_Emissive.png",
+        "metallic.textureMap": "../Textures/Proteus_MaskMap_R.png",
+        "normal.textureMap": "../Textures/Proteus_Normal.png",
+        "opacity.factor": 1.0,
+        "roughness.factor": 0.5,
+        "roughness.lowerBound": 0.20000000298023224,
+        "roughness.textureMap": "../Textures/Proteus_MaskMap_A.png",
+        "roughness.upperBound": 0.9399999976158142,
+        "specularF0.factor": 0.5099999904632568
+    }
+}

+ 14 - 0
Gems/ProteusRobot/Assets/Materials/Proteus_headLamp.material

@@ -0,0 +1,14 @@
+{
+    "materialType": "@gemroot:Atom_Feature_Common@/Assets/Materials/Types/StandardPBR.materialtype",
+    "materialTypeVersion": 5,
+    "propertyValues": {
+        "emissive.color": [
+            0.027573052793741226,
+            0.6679789423942566,
+            0.0,
+            1.0
+        ],
+        "emissive.enable": true,
+        "emissive.intensity": 7.860000133514404
+    }
+}

+ 4 - 0
Gems/ProteusRobot/Assets/Materials/untitled.material

@@ -0,0 +1,4 @@
+{
+    "materialType": "@gemroot:Atom_Feature_Common@/Assets/Materials/Types/StandardPBR.materialtype",
+    "materialTypeVersion": 5
+}

File diff ditekan karena terlalu besar
+ 257 - 0
Gems/ProteusRobot/Assets/Proteus.prefab


+ 3 - 0
Gems/ProteusRobot/Assets/Proteus2_chassis.fbx

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a62150544cf58a4527f317a0ea316d046f92fa90d38a61c0b2e99037095c59d0
+size 170876

+ 3 - 0
Gems/ProteusRobot/Assets/Proteus2_lift.fbx

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76809288546fa028f263dbdd20eacfe2730a90895dec38db826d5521ddf1fc3e
+size 79244

+ 3 - 0
Gems/ProteusRobot/Assets/Proteus_chassis.fbx

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4586a1c9a8e18c353d534b23222c6b1b1e11b3e842b7ed35f190548251999906
+size 225948

+ 151 - 0
Gems/ProteusRobot/Assets/Proteus_chassis.fbx.assetinfo

@@ -0,0 +1,151 @@
+{
+    "values": [
+        {
+            "$type": "{5B03C8E6-8CEE-4DA0-A7FA-CD88689DD45B} MeshGroup",
+            "id": "{C881D739-5AD7-5795-915C-E5E2A85CB9E0}",
+            "name": "Proteus_chassis",
+            "NodeSelectionList": {
+                "selectedNodes": [
+                    "RootNode.Proteus"
+                ],
+                "unselectedNodes": [
+                    {},
+                    "RootNode",
+                    "RootNode.WheelBack",
+                    "RootNode.WheelFront"
+                ]
+            },
+            "export method": 1,
+            "PhysicsMaterialSlots": {
+                "Slots": [
+                    {
+                        "Name": "Proteus"
+                    }
+                ]
+            }
+        },
+        {
+            "$type": "{07B356B7-3635-40B5-878A-FAC4EFD5AD86} MeshGroup",
+            "name": "Proteus_chassis",
+            "nodeSelectionList": {
+                "selectedNodes": [
+                    {},
+                    "RootNode",
+                    "RootNode.Proteus",
+                    "RootNode.WheelBack",
+                    "RootNode.WheelFront"
+                ]
+            },
+            "rules": {
+                "rules": [
+                    {
+                        "$type": "StaticMeshAdvancedRule",
+                        "vertexColorStreamName": "Col0"
+                    },
+                    {
+                        "$type": "MaterialRule"
+                    }
+                ]
+            },
+            "id": "{5B66A762-9687-5E87-AD1B-706B69996173}"
+        },
+        {
+            "$type": "{07B356B7-3635-40B5-878A-FAC4EFD5AD86} MeshGroup",
+            "name": "default_Proteus_chassis_DA9DBE87_1547_5F98_825B_BB5776FC2E64_",
+            "nodeSelectionList": {
+                "selectedNodes": [
+                    "RootNode.Proteus"
+                ],
+                "unselectedNodes": [
+                    "RootNode.WheelBack",
+                    "RootNode.WheelFront"
+                ]
+            },
+            "rules": {
+                "rules": [
+                    {
+                        "$type": "ProceduralMeshGroupRule"
+                    },
+                    {
+                        "$type": "UnmodifiableRule"
+                    },
+                    {
+                        "$type": "CoordinateSystemRule",
+                        "useAdvancedData": true
+                    },
+                    {
+                        "$type": "{6E796AC8-1484-4909-860A-6D3F22A7346F} LodRule"
+                    }
+                ]
+            },
+            "id": "{DA9DBE87-1547-5F98-825B-BB5776FC2E64}"
+        },
+        {
+            "$type": "{07B356B7-3635-40B5-878A-FAC4EFD5AD86} MeshGroup",
+            "name": "default_Proteus_chassis_F2316B03_A973_5DF0_9FAC_01F13A4EF1BF_",
+            "nodeSelectionList": {
+                "selectedNodes": [
+                    "RootNode.WheelBack"
+                ],
+                "unselectedNodes": [
+                    "RootNode.Proteus",
+                    "RootNode.WheelFront"
+                ]
+            },
+            "rules": {
+                "rules": [
+                    {
+                        "$type": "ProceduralMeshGroupRule"
+                    },
+                    {
+                        "$type": "UnmodifiableRule"
+                    },
+                    {
+                        "$type": "CoordinateSystemRule",
+                        "useAdvancedData": true
+                    },
+                    {
+                        "$type": "{6E796AC8-1484-4909-860A-6D3F22A7346F} LodRule"
+                    }
+                ]
+            },
+            "id": "{F2316B03-A973-5DF0-9FAC-01F13A4EF1BF}"
+        },
+        {
+            "$type": "{07B356B7-3635-40B5-878A-FAC4EFD5AD86} MeshGroup",
+            "name": "default_Proteus_chassis_07C13738_36F4_5638_A16E_33582EFA5AE2_",
+            "nodeSelectionList": {
+                "selectedNodes": [
+                    "RootNode.WheelFront"
+                ],
+                "unselectedNodes": [
+                    "RootNode.Proteus",
+                    "RootNode.WheelBack"
+                ]
+            },
+            "rules": {
+                "rules": [
+                    {
+                        "$type": "ProceduralMeshGroupRule"
+                    },
+                    {
+                        "$type": "UnmodifiableRule"
+                    },
+                    {
+                        "$type": "CoordinateSystemRule",
+                        "useAdvancedData": true
+                    },
+                    {
+                        "$type": "{6E796AC8-1484-4909-860A-6D3F22A7346F} LodRule"
+                    }
+                ]
+            },
+            "id": "{07C13738-36F4-5638-A16E-33582EFA5AE2}"
+        },
+        {
+            "$type": "PrefabGroup",
+            "name": "Assets/ProteusRobot/Proteus_chassis_fbx.procprefab",
+            "id": "{54641020-4DC4-5AEE-A44A-A6D9BD8C0CBA}"
+        }
+    ]
+}

+ 3 - 0
Gems/ProteusRobot/Assets/Proteus_wheel.fbx

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6937ad1b662f2688000526b7bf871af33aac1acd99cfe4535b8e2ce70e902983
+size 32124

+ 88 - 0
Gems/ProteusRobot/Assets/Proteus_wheel.fbx.assetinfo

@@ -0,0 +1,88 @@
+{
+    "values": [
+        {
+            "$type": "{5B03C8E6-8CEE-4DA0-A7FA-CD88689DD45B} MeshGroup",
+            "id": "{80311A34-6917-57C6-819B-8222047E8B5B}",
+            "name": "Proteus_wheel",
+            "NodeSelectionList": {
+                "selectedNodes": [
+                    "RootNode",
+                    "RootNode.WheelSide",
+                    "RootNode.WheelSide.transform",
+                    "RootNode.WheelSide.custom_properties",
+                    "RootNode.WheelSide.UVMap",
+                    "RootNode.WheelSide.Proteus"
+                ]
+            },
+            "export method": 1,
+            "PhysicsMaterialSlots": {
+                "Slots": [
+                    {
+                        "Name": "Proteus",
+                        "MaterialAsset": {
+                            "assetId": {
+                                "guid": "{74448F35-B8C8-5CF3-984C-58CF92889961}",
+                                "subId": 1
+                            },
+                            "assetHint": "assets/proteusrobot/robot_tire.physicsmaterial"
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "$type": "{07B356B7-3635-40B5-878A-FAC4EFD5AD86} MeshGroup",
+            "name": "Proteus_wheel",
+            "nodeSelectionList": {
+                "selectedNodes": [
+                    "RootNode",
+                    "RootNode.WheelSide",
+                    "RootNode.WheelSide.transform",
+                    "RootNode.WheelSide.custom_properties",
+                    "RootNode.WheelSide.UVMap",
+                    "RootNode.WheelSide.Proteus"
+                ]
+            },
+            "rules": {
+                "rules": [
+                    {
+                        "$type": "MaterialRule"
+                    }
+                ]
+            },
+            "id": "{B2B65532-24AA-559B-8C87-AA2E0EDD85E7}"
+        },
+        {
+            "$type": "{07B356B7-3635-40B5-878A-FAC4EFD5AD86} MeshGroup",
+            "name": "default_Proteus_wheel_2427710A_245B_51D6_BF38_B05455BE2C6F_",
+            "nodeSelectionList": {
+                "selectedNodes": [
+                    "RootNode.WheelSide"
+                ]
+            },
+            "rules": {
+                "rules": [
+                    {
+                        "$type": "ProceduralMeshGroupRule"
+                    },
+                    {
+                        "$type": "UnmodifiableRule"
+                    },
+                    {
+                        "$type": "CoordinateSystemRule",
+                        "useAdvancedData": true
+                    },
+                    {
+                        "$type": "{6E796AC8-1484-4909-860A-6D3F22A7346F} LodRule"
+                    }
+                ]
+            },
+            "id": "{2427710A-245B-51D6-BF38-B05455BE2C6F}"
+        },
+        {
+            "$type": "PrefabGroup",
+            "name": "Assets/ProteusRobot/Proteus_wheel_fbx.procprefab",
+            "id": "{1C55117B-259E-5770-8E5D-22594768E8AE}"
+        }
+    ]
+}

+ 45 - 0
Gems/ProteusRobot/Assets/Scripts/ProteusRobot_inputs.inputbindings

@@ -0,0 +1,45 @@
+<ObjectStream version="3">
+	<Class name="InputEventBindingsAsset" type="{25971C7A-26E2-4D08-A146-2EFCC1C36B0C}">
+		<Class name="InputEventBindings" field="Bindings" version="1" type="{14FFD4A8-AE46-4E23-B45B-6A7C4F787A91}">
+			<Class name="AZStd::vector&lt;InputEventGroup, allocator&gt;" field="Input Event Groups" type="{E7A38039-E414-5322-B384-210475DA7732}">
+				<Class name="InputEventGroup" field="element" version="1" type="{25143B7E-2FEC-4CC5-92FE-270B67E79734}">
+					<Class name="AZStd::string" field="Event Name" value="rotate" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+					<Class name="AZStd::vector&lt;InputSubComponent*, allocator&gt;" field="Event Generators" type="{7B0B6F41-794A-5CFF-8275-91A3137E747D}">
+						<Class name="InputEventMap" field="element" version="2" type="{A14EA0A3-F053-469D-840E-A70002F51384}">
+							<Class name="AZStd::string" field="Input Device Type" value="keyboard" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+							<Class name="AZStd::string" field="Input Name" value="keyboard_key_navigation_arrow_left" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+							<Class name="float" field="Event Value Multiplier" value="1.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+							<Class name="float" field="Dead Zone" value="0.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+						</Class>
+						<Class name="InputEventMap" field="element" version="2" type="{A14EA0A3-F053-469D-840E-A70002F51384}">
+							<Class name="AZStd::string" field="Input Device Type" value="keyboard" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+							<Class name="AZStd::string" field="Input Name" value="keyboard_key_navigation_arrow_right" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+							<Class name="float" field="Event Value Multiplier" value="-1.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+							<Class name="float" field="Dead Zone" value="0.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+						</Class>
+					</Class>
+					<Class name="bool" field="Exclude From Release" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+				</Class>
+				<Class name="InputEventGroup" field="element" version="1" type="{25143B7E-2FEC-4CC5-92FE-270B67E79734}">
+					<Class name="AZStd::string" field="Event Name" value="accelerate" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+					<Class name="AZStd::vector&lt;InputSubComponent*, allocator&gt;" field="Event Generators" type="{7B0B6F41-794A-5CFF-8275-91A3137E747D}">
+						<Class name="InputEventMap" field="element" version="2" type="{A14EA0A3-F053-469D-840E-A70002F51384}">
+							<Class name="AZStd::string" field="Input Device Type" value="keyboard" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+							<Class name="AZStd::string" field="Input Name" value="keyboard_key_navigation_arrow_up" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+							<Class name="float" field="Event Value Multiplier" value="1.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+							<Class name="float" field="Dead Zone" value="0.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+						</Class>
+						<Class name="InputEventMap" field="element" version="2" type="{A14EA0A3-F053-469D-840E-A70002F51384}">
+							<Class name="AZStd::string" field="Input Device Type" value="keyboard" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+							<Class name="AZStd::string" field="Input Name" value="keyboard_key_navigation_arrow_down" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+							<Class name="float" field="Event Value Multiplier" value="-1.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+							<Class name="float" field="Dead Zone" value="0.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+						</Class>
+					</Class>
+					<Class name="bool" field="Exclude From Release" value="false" type="{A0CA880C-AFE4-43CB-926C-59AC48496112}"/>
+				</Class>
+			</Class>
+		</Class>
+	</Class>
+</ObjectStream>
+

+ 3 - 0
Gems/ProteusRobot/Assets/Textures/Lights_Emissive.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d3634cb871cb49eea5d5091f97005d30e52f622d44cc69581f1db0515c07ec55
+size 69495

+ 3 - 0
Gems/ProteusRobot/Assets/Textures/Proteus_BaseMap.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f93207ec93a715bfdec6276754e3a36356b8f0dfc2cb2ea1a41d8424cdf52e7b
+size 1877037

+ 3 - 0
Gems/ProteusRobot/Assets/Textures/Proteus_MaskMap.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad1935486899cc0664f8d4aa428e626cb452dcfe639494fe420f96ee71ff62c0
+size 2267401

+ 3 - 0
Gems/ProteusRobot/Assets/Textures/Proteus_MaskMap_A.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:676539bb24018bd20e5102c6e5d14148ff418758bd4da0c2e281a73f54632993
+size 567314

+ 3 - 0
Gems/ProteusRobot/Assets/Textures/Proteus_MaskMap_R.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d0eb11cda9bae9e15686a8e0d23cb080afcf04fd1551fa9b0a00280d3003e86
+size 15927

+ 3 - 0
Gems/ProteusRobot/Assets/Textures/Proteus_Normal.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:619abbf812d9d8fa6f339bb43652cccf9e6eea882d61548a05f3ee945ec99b6c
+size 2543371

+ 18 - 0
Gems/ProteusRobot/Assets/no_friction.physxmaterial

@@ -0,0 +1,18 @@
+<ObjectStream version="3">
+	<Class name="PhysX::EditorMaterialAsset" version="2" type="{BC7B88B9-EE31-4FBF-A01E-2A93624C49D3}">
+		<Class name="AssetData" field="BaseClass1" version="1" type="{AF3F7D32-1536-422A-89F3-A11E1F5B5A9C}"/>
+		<Class name="PhysX::MaterialConfiguration" field="MaterialConfiguration" version="1" type="{66213D20-9862-465D-AF4F-2D94317161F6}">
+			<Class name="float" field="DynamicFriction" value="0.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+			<Class name="float" field="StaticFriction" value="0.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+			<Class name="float" field="Restitution" value="0.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+			<Class name="unsigned char" field="FrictionCombine" value="1" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
+			<Class name="unsigned char" field="RestitutionCombine" value="1" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
+			<Class name="float" field="Density" value="1000.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+			<Class name="Color" field="DebugColor" value="1.0000000 1.0000000 1.0000000 1.0000000" type="{7894072A-9050-4F0F-901B-34B1A0D29417}"/>
+		</Class>
+		<Class name="PhysicsLegacy::MaterialId" field="LegacyPhysicsMaterialId" version="1" type="{744CCE6C-9F69-4E2F-B950-DAB8514F870B}">
+			<Class name="AZ::Uuid" field="MaterialId" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+		</Class>
+	</Class>
+</ObjectStream>
+

+ 18 - 0
Gems/ProteusRobot/Assets/robot_tire.physxmaterial

@@ -0,0 +1,18 @@
+<ObjectStream version="3">
+	<Class name="PhysX::EditorMaterialAsset" version="2" type="{BC7B88B9-EE31-4FBF-A01E-2A93624C49D3}">
+		<Class name="AssetData" field="BaseClass1" version="1" type="{AF3F7D32-1536-422A-89F3-A11E1F5B5A9C}"/>
+		<Class name="PhysX::MaterialConfiguration" field="MaterialConfiguration" version="1" type="{66213D20-9862-465D-AF4F-2D94317161F6}">
+			<Class name="float" field="DynamicFriction" value="0.8000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+			<Class name="float" field="StaticFriction" value="0.8000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+			<Class name="float" field="Restitution" value="0.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+			<Class name="unsigned char" field="FrictionCombine" value="0" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
+			<Class name="unsigned char" field="RestitutionCombine" value="1" type="{72B9409A-7D1A-4831-9CFE-FCB3FADD3426}"/>
+			<Class name="float" field="Density" value="1000.0000000" type="{EA2C3E90-AFBE-44D4-A90D-FAAF79BAF93D}"/>
+			<Class name="Color" field="DebugColor" value="1.0000000 1.0000000 1.0000000 1.0000000" type="{7894072A-9050-4F0F-901B-34B1A0D29417}"/>
+		</Class>
+		<Class name="PhysicsLegacy::MaterialId" field="LegacyPhysicsMaterialId" version="1" type="{744CCE6C-9F69-4E2F-B950-DAB8514F870B}">
+			<Class name="AZ::Uuid" field="MaterialId" value="{00000000-0000-0000-0000-000000000000}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+		</Class>
+	</Class>
+</ObjectStream>
+

+ 22 - 0
Gems/ProteusRobot/CMakeLists.txt

@@ -0,0 +1,22 @@
+
+# Query the gem name from the gem.json file if possible
+# otherwise fallback to using ProteusRobot
+o3de_find_ancestor_gem_root(gem_path gem_name "${CMAKE_CURRENT_SOURCE_DIR}")
+if (NOT gem_name)
+    set(gem_name "ProteusRobot")
+endif()
+
+# Fallback to using the current source CMakeLists.txt directory as the gem root path
+if (NOT gem_path)
+    set(gem_path ${CMAKE_CURRENT_SOURCE_DIR})
+endif()
+
+set(gem_json ${gem_path}/gem.json)
+
+o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_SOURCE_DIR}/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
+
+ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
+
+add_subdirectory(Code)

+ 210 - 0
Gems/ProteusRobot/Code/CMakeLists.txt

@@ -0,0 +1,210 @@
+
+# Currently we are in the Code folder: ${CMAKE_CURRENT_LIST_DIR}
+# Get the platform specific folder ${pal_dir} for the current folder: ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}
+# Note: o3de_pal_dir will take care of the details for us, as this may be a restricted platform
+#       in which case it will see if that platform is present here or in the restricted folder.
+#       i.e. It could here in our gem : Gems/ProteusRobot/Code/Platform/<platorm_name>  or
+#            <restricted_folder>/<platform_name>/Gems/ProteusRobot/Code
+o3de_pal_dir(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
+
+# Now that we have the platform abstraction layer (PAL) folder for this folder, thats where we will find the
+# traits for this platform. Traits for a platform are defines for things like whether or not something in this gem
+# is supported by this platform.
+include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake)
+
+# Check to see if building the Gem Modules are supported for the current platform
+if(NOT PAL_TRAIT_PROTEUSROBOT_SUPPORTED)
+    return()
+endif()
+
+# The ${gem_name}.API target declares the common interface that users of this gem should depend on in their targets
+ly_add_target(
+    NAME ${gem_name}.API INTERFACE
+    NAMESPACE Gem
+    FILES_CMAKE
+        proteusrobot_api_files.cmake
+        ${pal_dir}/proteusrobot_api_files.cmake
+    INCLUDE_DIRECTORIES
+        INTERFACE
+            Include
+    BUILD_DEPENDENCIES
+        INTERFACE
+           AZ::AzCore
+)
+
+# The ${gem_name}.Private.Object target is an internal target
+# It should not be used outside of this Gems CMakeLists.txt
+ly_add_target(
+    NAME ${gem_name}.Private.Object STATIC
+    NAMESPACE Gem
+    FILES_CMAKE
+        proteusrobot_private_files.cmake
+        ${pal_dir}/proteusrobot_private_files.cmake
+    TARGET_PROPERTIES
+        O3DE_PRIVATE_TARGET TRUE
+    INCLUDE_DIRECTORIES
+        PRIVATE
+            Include
+            Source
+    BUILD_DEPENDENCIES
+        PUBLIC
+            AZ::AzCore
+            AZ::AzFramework
+)
+
+# Here add ${gem_name} target, it depends on the Private Object library and Public API interface
+ly_add_target(
+    NAME ${gem_name} ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
+    NAMESPACE Gem
+    FILES_CMAKE
+        proteusrobot_shared_files.cmake
+        ${pal_dir}/proteusrobot_shared_files.cmake
+    INCLUDE_DIRECTORIES
+        PUBLIC
+            Include
+        PRIVATE
+            Source
+    BUILD_DEPENDENCIES
+        PUBLIC
+            Gem::${gem_name}.API
+        PRIVATE
+            Gem::${gem_name}.Private.Object
+)
+
+# By default, we will specify that the above target ${gem_name} would be used by
+# Client and Server type targets when this gem is enabled.  If you don't want it
+# active in Clients or Servers by default, delete one of both of the following lines:
+ly_create_alias(NAME ${gem_name}.Clients NAMESPACE Gem TARGETS Gem::${gem_name})
+ly_create_alias(NAME ${gem_name}.Servers NAMESPACE Gem TARGETS Gem::${gem_name})
+ly_create_alias(NAME ${gem_name}.Unified NAMESPACE Gem TARGETS Gem::${gem_name})
+
+# For the Client and Server variants of ${gem_name} Gem, an alias to the ${gem_name}.API target will be made
+ly_create_alias(NAME ${gem_name}.Clients.API NAMESPACE Gem TARGETS Gem::${gem_name}.API)
+ly_create_alias(NAME ${gem_name}.Servers.API NAMESPACE Gem TARGETS Gem::${gem_name}.API)
+ly_create_alias(NAME ${gem_name}.Unified.API NAMESPACE Gem TARGETS Gem::${gem_name}.API)
+
+# If we are on a host platform, we want to add the host tools targets like the ${gem_name}.Editor MODULE target
+if(PAL_TRAIT_BUILD_HOST_TOOLS)
+    # The ${gem_name}.Editor.API target can be used by other gems that want to interact with the ${gem_name}.Editor module
+    ly_add_target(
+        NAME ${gem_name}.Editor.API INTERFACE
+        NAMESPACE Gem
+        FILES_CMAKE
+            proteusrobot_editor_api_files.cmake
+            ${pal_dir}/proteusrobot_editor_api_files.cmake
+        INCLUDE_DIRECTORIES
+            INTERFACE
+                Include
+        BUILD_DEPENDENCIES
+            INTERFACE
+                AZ::AzToolsFramework
+    )
+
+    # The ${gem_name}.Editor.Private.Object target is an internal target
+    # which is only to be used by this gems CMakeLists.txt and any subdirectories
+    # Other gems should not use this target
+    ly_add_target(
+        NAME ${gem_name}.Editor.Private.Object STATIC
+        NAMESPACE Gem
+        FILES_CMAKE
+            proteusrobot_editor_private_files.cmake
+        TARGET_PROPERTIES
+            O3DE_PRIVATE_TARGET TRUE
+        INCLUDE_DIRECTORIES
+            PRIVATE
+                Include
+                Source
+        BUILD_DEPENDENCIES
+            PUBLIC
+                AZ::AzToolsFramework
+                $<TARGET_OBJECTS:Gem::${gem_name}.Private.Object>
+    )
+
+    ly_add_target(
+        NAME ${gem_name}.Editor GEM_MODULE
+        NAMESPACE Gem
+        AUTOMOC
+        FILES_CMAKE
+            proteusrobot_editor_shared_files.cmake
+        INCLUDE_DIRECTORIES
+            PRIVATE
+                Source
+            PUBLIC
+                Include
+        BUILD_DEPENDENCIES
+            PUBLIC
+                Gem::${gem_name}.Editor.API
+            PRIVATE
+                Gem::${gem_name}.Editor.Private.Object
+    )
+
+    # By default, we will specify that the above target ${gem_name} would be used by
+    # Tool and Builder type targets when this gem is enabled.  If you don't want it
+    # active in Tools or Builders by default, delete one of both of the following lines:
+    ly_create_alias(NAME ${gem_name}.Tools    NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
+    ly_create_alias(NAME ${gem_name}.Builders NAMESPACE Gem TARGETS Gem::${gem_name}.Editor)
+
+    # For the Tools and Builders variants of ${gem_name} Gem, an alias to the ${gem_name}.Editor API target will be made
+    ly_create_alias(NAME ${gem_name}.Tools.API NAMESPACE Gem TARGETS Gem::${gem_name}.Editor.API)
+    ly_create_alias(NAME ${gem_name}.Builders.API NAMESPACE Gem TARGETS Gem::${gem_name}.Editor.API)
+
+endif()
+
+################################################################################
+# Tests
+################################################################################
+# See if globally, tests are supported
+if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
+    # We globally support tests, see if we support tests on this platform for ${gem_name}.Tests
+    if(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED)
+        # We support ${gem_name}.Tests on this platform, add dependency on the Private Object target
+        ly_add_target(
+            NAME ${gem_name}.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+            NAMESPACE Gem
+            FILES_CMAKE
+                proteusrobot_tests_files.cmake
+            INCLUDE_DIRECTORIES
+                PRIVATE
+                    Tests
+                    Source
+            BUILD_DEPENDENCIES
+                PRIVATE
+                    AZ::AzTest
+                    AZ::AzFramework
+                    Gem::${gem_name}.Private.Object
+        )
+
+        # Add ${gem_name}.Tests to googletest
+        ly_add_googletest(
+            NAME Gem::${gem_name}.Tests
+        )
+    endif()
+
+    # If we are a host platform we want to add tools test like editor tests here
+    if(PAL_TRAIT_BUILD_HOST_TOOLS)
+        # We are a host platform, see if Editor tests are supported on this platform
+        if(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED)
+            # We support ${gem_name}.Editor.Tests on this platform, add ${gem_name}.Editor.Tests target which depends on
+            # private ${gem_name}.Editor.Private.Object target
+            ly_add_target(
+                NAME ${gem_name}.Editor.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
+                NAMESPACE Gem
+                FILES_CMAKE
+                    proteusrobot_editor_tests_files.cmake
+                INCLUDE_DIRECTORIES
+                    PRIVATE
+                        Tests
+                        Source
+                BUILD_DEPENDENCIES
+                    PRIVATE
+                        AZ::AzTest
+                        Gem::${gem_name}.Private.Object
+            )
+
+            # Add ${gem_name}.Editor.Tests to googletest
+            ly_add_googletest(
+                NAME Gem::${gem_name}.Editor.Tests
+            )
+        endif()
+    endif()
+endif()

+ 31 - 0
Gems/ProteusRobot/Code/Include/ProteusRobot/ProteusRobotBus.h

@@ -0,0 +1,31 @@
+
+#pragma once
+
+#include <AzCore/EBus/EBus.h>
+#include <AzCore/Interface/Interface.h>
+
+namespace ProteusRobot
+{
+    class ProteusRobotRequests
+    {
+    public:
+        AZ_RTTI(ProteusRobotRequests, "{2480DA88-89C0-40D0-9C27-CA19C99FECC7}");
+        virtual ~ProteusRobotRequests() = default;
+        // Put your public methods here
+    };
+    
+    class ProteusRobotBusTraits
+        : public AZ::EBusTraits
+    {
+    public:
+        //////////////////////////////////////////////////////////////////////////
+        // EBusTraits overrides
+        static constexpr AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
+        static constexpr AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
+        //////////////////////////////////////////////////////////////////////////
+    };
+
+    using ProteusRobotRequestBus = AZ::EBus<ProteusRobotRequests, ProteusRobotBusTraits>;
+    using ProteusRobotInterface = AZ::Interface<ProteusRobotRequests>;
+
+} // namespace ProteusRobot

+ 4 - 0
Gems/ProteusRobot/Code/Platform/Android/PAL_android.cmake

@@ -0,0 +1,4 @@
+
+set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
+set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
+set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 3 - 0
Gems/ProteusRobot/Code/Platform/Android/proteusrobot_api_files.cmake

@@ -0,0 +1,3 @@
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/Android/proteusrobot_private_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for Android
+# i.e. ../Source/Android/ProteusRobotAndroid.cpp
+#      ../Source/Android/ProteusRobotAndroid.h
+#      ../Include/Android/ProteusRobotAndroid.h
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/Android/proteusrobot_shared_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for Android
+# i.e. ../Source/Android/ProteusRobotAndroid.cpp
+#      ../Source/Android/ProteusRobotAndroid.h
+#      ../Include/Android/ProteusRobotAndroid.h
+
+set(FILES
+)

+ 4 - 0
Gems/ProteusRobot/Code/Platform/Linux/PAL_linux.cmake

@@ -0,0 +1,4 @@
+
+set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
+set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
+set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 3 - 0
Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_api_files.cmake

@@ -0,0 +1,3 @@
+
+set(FILES
+)

+ 3 - 0
Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_editor_api_files.cmake

@@ -0,0 +1,3 @@
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_private_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for Linux
+# i.e. ../Source/Linux/ProteusRobotLinux.cpp
+#      ../Source/Linux/ProteusRobotLinux.h
+#      ../Include/Linux/ProteusRobotLinux.h
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_shared_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for Linux
+# i.e. ../Source/Linux/ProteusRobotLinux.cpp
+#      ../Source/Linux/ProteusRobotLinux.h
+#      ../Include/Linux/ProteusRobotLinux.h
+
+set(FILES
+)

+ 4 - 0
Gems/ProteusRobot/Code/Platform/Mac/PAL_mac.cmake

@@ -0,0 +1,4 @@
+
+set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
+set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
+set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 3 - 0
Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_api_files.cmake

@@ -0,0 +1,3 @@
+
+set(FILES
+)

+ 3 - 0
Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_editor_api_files.cmake

@@ -0,0 +1,3 @@
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_private_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for Mac
+# i.e. ../Source/Mac/ProteusRobotMac.cpp
+#      ../Source/Mac/ProteusRobotMac.h
+#      ../Include/Mac/ProteusRobotMac.h
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_shared_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for Mac
+# i.e. ../Source/Mac/ProteusRobotMac.cpp
+#      ../Source/Mac/ProteusRobotMac.h
+#      ../Include/Mac/ProteusRobotMac.h
+
+set(FILES
+)

+ 4 - 0
Gems/ProteusRobot/Code/Platform/Windows/PAL_windows.cmake

@@ -0,0 +1,4 @@
+
+set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
+set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
+set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 3 - 0
Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_api_files.cmake

@@ -0,0 +1,3 @@
+
+set(FILES
+)

+ 3 - 0
Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_editor_api_files.cmake

@@ -0,0 +1,3 @@
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_private_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for Windows
+# i.e. ../Source/Windows/ProteusRobotWindows.cpp
+#      ../Source/Windows/ProteusRobotWindows.h
+#      ../Include/Windows/ProteusRobotWindows.h
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_shared_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for Windows
+# i.e. ../Source/Windows/ProteusRobotWindows.cpp
+#      ../Source/Windows/ProteusRobotWindows.h
+#      ../Include/Windows/ProteusRobotWindows.h
+
+set(FILES
+)

+ 4 - 0
Gems/ProteusRobot/Code/Platform/iOS/PAL_ios.cmake

@@ -0,0 +1,4 @@
+
+set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
+set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
+set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 3 - 0
Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_api_files.cmake

@@ -0,0 +1,3 @@
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_private_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for iOS
+# i.e. ../Source/iOS/ProteusRobotiOS.cpp
+#      ../Source/iOS/ProteusRobotiOS.h
+#      ../Include/iOS/ProteusRobotiOS.h
+
+set(FILES
+)

+ 8 - 0
Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_shared_files.cmake

@@ -0,0 +1,8 @@
+
+# Platform specific files for iOS
+# i.e. ../Source/iOS/ProteusRobotiOS.cpp
+#      ../Source/iOS/ProteusRobotiOS.h
+#      ../Include/iOS/ProteusRobotiOS.h
+
+set(FILES
+)

+ 17 - 0
Gems/ProteusRobot/Code/Source/Clients/ProteusRobotModule.cpp

@@ -0,0 +1,17 @@
+
+
+#include <ProteusRobotModuleInterface.h>
+#include "ProteusRobotSystemComponent.h"
+
+namespace ProteusRobot
+{
+    class ProteusRobotModule
+        : public ProteusRobotModuleInterface
+    {
+    public:
+        AZ_RTTI(ProteusRobotModule, "{F9558D3E-566B-4824-8634-015F21864F5E}", ProteusRobotModuleInterface);
+        AZ_CLASS_ALLOCATOR(ProteusRobotModule, AZ::SystemAllocator, 0);
+    };
+}// namespace ProteusRobot
+
+AZ_DECLARE_MODULE_CLASS(Gem_ProteusRobot, ProteusRobot::ProteusRobotModule)

+ 83 - 0
Gems/ProteusRobot/Code/Source/Clients/ProteusRobotSystemComponent.cpp

@@ -0,0 +1,83 @@
+
+#include "ProteusRobotSystemComponent.h"
+
+#include <AzCore/Serialization/SerializeContext.h>
+#include <AzCore/Serialization/EditContext.h>
+#include <AzCore/Serialization/EditContextConstants.inl>
+
+namespace ProteusRobot
+{
+    void ProteusRobotSystemComponent::Reflect(AZ::ReflectContext* context)
+    {
+        if (AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context))
+        {
+            serialize->Class<ProteusRobotSystemComponent, AZ::Component>()
+                ->Version(0)
+                ;
+
+            if (AZ::EditContext* ec = serialize->GetEditContext())
+            {
+                ec->Class<ProteusRobotSystemComponent>("ProteusRobot", "[Description of functionality provided by this System Component]")
+                    ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
+                        ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("System"))
+                        ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
+                    ;
+            }
+        }
+    }
+
+    void ProteusRobotSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
+    {
+        provided.push_back(AZ_CRC_CE("ProteusRobotService"));
+    }
+
+    void ProteusRobotSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
+    {
+        incompatible.push_back(AZ_CRC_CE("ProteusRobotService"));
+    }
+
+    void ProteusRobotSystemComponent::GetRequiredServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& required)
+    {
+    }
+
+    void ProteusRobotSystemComponent::GetDependentServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& dependent)
+    {
+    }
+
+    ProteusRobotSystemComponent::ProteusRobotSystemComponent()
+    {
+        if (ProteusRobotInterface::Get() == nullptr)
+        {
+            ProteusRobotInterface::Register(this);
+        }
+    }
+
+    ProteusRobotSystemComponent::~ProteusRobotSystemComponent()
+    {
+        if (ProteusRobotInterface::Get() == this)
+        {
+            ProteusRobotInterface::Unregister(this);
+        }
+    }
+
+    void ProteusRobotSystemComponent::Init()
+    {
+    }
+
+    void ProteusRobotSystemComponent::Activate()
+    {
+        ProteusRobotRequestBus::Handler::BusConnect();
+        AZ::TickBus::Handler::BusConnect();
+    }
+
+    void ProteusRobotSystemComponent::Deactivate()
+    {
+        AZ::TickBus::Handler::BusDisconnect();
+        ProteusRobotRequestBus::Handler::BusDisconnect();
+    }
+
+    void ProteusRobotSystemComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time)
+    {
+    }
+
+} // namespace ProteusRobot

+ 47 - 0
Gems/ProteusRobot/Code/Source/Clients/ProteusRobotSystemComponent.h

@@ -0,0 +1,47 @@
+
+#pragma once
+
+#include <AzCore/Component/Component.h>
+#include <AzCore/Component/TickBus.h>
+#include <ProteusRobot/ProteusRobotBus.h>
+
+namespace ProteusRobot
+{
+    class ProteusRobotSystemComponent
+        : public AZ::Component
+        , protected ProteusRobotRequestBus::Handler
+        , public AZ::TickBus::Handler
+    {
+    public:
+        AZ_COMPONENT(ProteusRobotSystemComponent, "{250B4B63-AF8F-4DC0-BF73-9880E8BEA444}");
+
+        static void Reflect(AZ::ReflectContext* context);
+
+        static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
+        static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible);
+        static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required);
+        static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent);
+
+        ProteusRobotSystemComponent();
+        ~ProteusRobotSystemComponent();
+
+    protected:
+        ////////////////////////////////////////////////////////////////////////
+        // ProteusRobotRequestBus interface implementation
+
+        ////////////////////////////////////////////////////////////////////////
+
+        ////////////////////////////////////////////////////////////////////////
+        // AZ::Component interface implementation
+        void Init() override;
+        void Activate() override;
+        void Deactivate() override;
+        ////////////////////////////////////////////////////////////////////////
+
+        ////////////////////////////////////////////////////////////////////////
+        // AZTickBus interface implementation
+        void OnTick(float deltaTime, AZ::ScriptTimePoint time) override;
+        ////////////////////////////////////////////////////////////////////////
+    };
+
+} // namespace ProteusRobot

+ 36 - 0
Gems/ProteusRobot/Code/Source/ProteusRobotModuleInterface.h

@@ -0,0 +1,36 @@
+
+#include <AzCore/Memory/SystemAllocator.h>
+#include <AzCore/Module/Module.h>
+#include <Clients/ProteusRobotSystemComponent.h>
+
+namespace ProteusRobot
+{
+    class ProteusRobotModuleInterface
+        : public AZ::Module
+    {
+    public:
+        AZ_RTTI(ProteusRobotModuleInterface, "{C2853683-8867-42E4-BAF8-6BAE29CB53E1}", AZ::Module);
+        AZ_CLASS_ALLOCATOR(ProteusRobotModuleInterface, AZ::SystemAllocator, 0);
+
+        ProteusRobotModuleInterface()
+        {
+            // Push results of [MyComponent]::CreateDescriptor() into m_descriptors here.
+            // Add ALL components descriptors associated with this gem to m_descriptors.
+            // This will associate the AzTypeInfo information for the components with the the SerializeContext, BehaviorContext and EditContext.
+            // This happens through the [MyComponent]::Reflect() function.
+            m_descriptors.insert(m_descriptors.end(), {
+                ProteusRobotSystemComponent::CreateDescriptor(),
+                });
+        }
+
+        /**
+         * Add required SystemComponents to the SystemEntity.
+         */
+        AZ::ComponentTypeList GetRequiredSystemComponents() const override
+        {
+            return AZ::ComponentTypeList{
+                azrtti_typeid<ProteusRobotSystemComponent>(),
+            };
+        }
+    };
+}// namespace ProteusRobot

+ 38 - 0
Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorModule.cpp

@@ -0,0 +1,38 @@
+
+#include <ProteusRobotModuleInterface.h>
+#include "ProteusRobotEditorSystemComponent.h"
+
+namespace ProteusRobot
+{
+    class ProteusRobotEditorModule
+        : public ProteusRobotModuleInterface
+    {
+    public:
+        AZ_RTTI(ProteusRobotEditorModule, "{F9558D3E-566B-4824-8634-015F21864F5E}", ProteusRobotModuleInterface);
+        AZ_CLASS_ALLOCATOR(ProteusRobotEditorModule, AZ::SystemAllocator, 0);
+
+        ProteusRobotEditorModule()
+        {
+            // Push results of [MyComponent]::CreateDescriptor() into m_descriptors here.
+            // Add ALL components descriptors associated with this gem to m_descriptors.
+            // This will associate the AzTypeInfo information for the components with the the SerializeContext, BehaviorContext and EditContext.
+            // This happens through the [MyComponent]::Reflect() function.
+            m_descriptors.insert(m_descriptors.end(), {
+                ProteusRobotEditorSystemComponent::CreateDescriptor(),
+            });
+        }
+
+        /**
+         * Add required SystemComponents to the SystemEntity.
+         * Non-SystemComponents should not be added here
+         */
+        AZ::ComponentTypeList GetRequiredSystemComponents() const override
+        {
+            return AZ::ComponentTypeList {
+                azrtti_typeid<ProteusRobotEditorSystemComponent>(),
+            };
+        }
+    };
+}// namespace ProteusRobot
+
+AZ_DECLARE_MODULE_CLASS(Gem_ProteusRobot, ProteusRobot::ProteusRobotEditorModule)

+ 54 - 0
Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorSystemComponent.cpp

@@ -0,0 +1,54 @@
+
+#include <AzCore/Serialization/SerializeContext.h>
+#include "ProteusRobotEditorSystemComponent.h"
+
+namespace ProteusRobot
+{
+    void ProteusRobotEditorSystemComponent::Reflect(AZ::ReflectContext* context)
+    {
+        if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
+        {
+            serializeContext->Class<ProteusRobotEditorSystemComponent, ProteusRobotSystemComponent>()
+                ->Version(0);
+        }
+    }
+
+    ProteusRobotEditorSystemComponent::ProteusRobotEditorSystemComponent() = default;
+
+    ProteusRobotEditorSystemComponent::~ProteusRobotEditorSystemComponent() = default;
+
+    void ProteusRobotEditorSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
+    {
+        BaseSystemComponent::GetProvidedServices(provided);
+        provided.push_back(AZ_CRC_CE("ProteusRobotEditorService"));
+    }
+
+    void ProteusRobotEditorSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
+    {
+        BaseSystemComponent::GetIncompatibleServices(incompatible);
+        incompatible.push_back(AZ_CRC_CE("ProteusRobotEditorService"));
+    }
+
+    void ProteusRobotEditorSystemComponent::GetRequiredServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& required)
+    {
+        BaseSystemComponent::GetRequiredServices(required);
+    }
+
+    void ProteusRobotEditorSystemComponent::GetDependentServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& dependent)
+    {
+        BaseSystemComponent::GetDependentServices(dependent);
+    }
+
+    void ProteusRobotEditorSystemComponent::Activate()
+    {
+        ProteusRobotSystemComponent::Activate();
+        AzToolsFramework::EditorEvents::Bus::Handler::BusConnect();
+    }
+
+    void ProteusRobotEditorSystemComponent::Deactivate()
+    {
+        AzToolsFramework::EditorEvents::Bus::Handler::BusDisconnect();
+        ProteusRobotSystemComponent::Deactivate();
+    }
+
+} // namespace ProteusRobot

+ 33 - 0
Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorSystemComponent.h

@@ -0,0 +1,33 @@
+
+#pragma once
+
+#include <AzToolsFramework/API/ToolsApplicationAPI.h>
+
+#include <Clients/ProteusRobotSystemComponent.h>
+
+namespace ProteusRobot
+{
+    /// System component for ProteusRobot editor
+    class ProteusRobotEditorSystemComponent
+        : public ProteusRobotSystemComponent
+        , protected AzToolsFramework::EditorEvents::Bus::Handler
+    {
+        using BaseSystemComponent = ProteusRobotSystemComponent;
+    public:
+        AZ_COMPONENT(ProteusRobotEditorSystemComponent, "{1AD25C4B-B8F7-4C54-BF46-3F5A9E02E90B}", BaseSystemComponent);
+        static void Reflect(AZ::ReflectContext* context);
+
+        ProteusRobotEditorSystemComponent();
+        ~ProteusRobotEditorSystemComponent();
+
+    private:
+        static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
+        static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible);
+        static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required);
+        static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent);
+
+        // AZ::Component
+        void Activate() override;
+        void Deactivate() override;
+    };
+} // namespace ProteusRobot

+ 4 - 0
Gems/ProteusRobot/Code/Tests/Clients/ProteusRobotTest.cpp

@@ -0,0 +1,4 @@
+
+#include <AzTest/AzTest.h>
+
+AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV);

+ 4 - 0
Gems/ProteusRobot/Code/Tests/Tools/ProteusRobotEditorTest.cpp

@@ -0,0 +1,4 @@
+
+#include <AzTest/AzTest.h>
+
+AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV);

+ 4 - 0
Gems/ProteusRobot/Code/proteusrobot_api_files.cmake

@@ -0,0 +1,4 @@
+
+set(FILES
+    Include/ProteusRobot/ProteusRobotBus.h
+)

+ 4 - 0
Gems/ProteusRobot/Code/proteusrobot_editor_api_files.cmake

@@ -0,0 +1,4 @@
+
+
+set(FILES
+)

+ 5 - 0
Gems/ProteusRobot/Code/proteusrobot_editor_private_files.cmake

@@ -0,0 +1,5 @@
+
+set(FILES
+    Source/Tools/ProteusRobotEditorSystemComponent.cpp
+    Source/Tools/ProteusRobotEditorSystemComponent.h
+)

+ 4 - 0
Gems/ProteusRobot/Code/proteusrobot_editor_shared_files.cmake

@@ -0,0 +1,4 @@
+
+set(FILES
+    Source/Tools/ProteusRobotEditorModule.cpp
+)

+ 4 - 0
Gems/ProteusRobot/Code/proteusrobot_editor_tests_files.cmake

@@ -0,0 +1,4 @@
+
+set(FILES
+    Tests/Tools/ProteusRobotEditorTest.cpp
+)

+ 6 - 0
Gems/ProteusRobot/Code/proteusrobot_private_files.cmake

@@ -0,0 +1,6 @@
+
+set(FILES
+    Source/ProteusRobotModuleInterface.h
+    Source/Clients/ProteusRobotSystemComponent.cpp
+    Source/Clients/ProteusRobotSystemComponent.h
+)

+ 4 - 0
Gems/ProteusRobot/Code/proteusrobot_shared_files.cmake

@@ -0,0 +1,4 @@
+
+set(FILES
+    Source/Clients/ProteusRobotModule.cpp
+)

+ 4 - 0
Gems/ProteusRobot/Code/proteusrobot_tests_files.cmake

@@ -0,0 +1,4 @@
+
+set(FILES
+    Tests/Clients/ProteusRobotTest.cpp
+)

+ 18 - 0
Gems/ProteusRobot/Registry/assetprocessor_settings.setreg

@@ -0,0 +1,18 @@
+{
+    "Amazon": {
+        "AssetProcessor": {
+            "Settings": {
+                "ScanFolder ProteusRobot/Assets": {
+                    "watch": "@GEMROOT:ProteusRobot@/Assets",
+                    "recursive": 1,
+                    "order": 101
+                },
+                "ScanFolder ProteusRobot/Registry": {
+                    "watch": "@GEMROOT:ProteusRobot@/Registry",
+                    "recursive": 1,
+                    "order": 102
+                }
+            }
+        }
+    }
+}

+ 28 - 0
Gems/ProteusRobot/gem.json

@@ -0,0 +1,28 @@
+{
+    "gem_name": "ProteusRobot",
+    "version": "1.0.0",
+    "display_name": "ProteusRobot",
+    "license": "License used i.e. Apache-2.0 or MIT",
+    "license_url": "Link to the license web site i.e. https://opensource.org/licenses/Apache-2.0",
+    "origin": "The name of the originator or creator",
+    "origin_url": "The website for this Gem",
+    "type": "Code",
+    "summary": "A short description of this Gem",
+    "canonical_tags": [
+        "Gem"
+    ],
+    "user_tags": [
+        "ProteusRobot"
+    ],
+    "platforms": [
+        ""
+    ],
+    "icon_path": "preview.png",
+    "requirements": "Notice of any requirements for this Gem i.e. This requires X other gem",
+    "documentation_url": "Link to any documentation of your Gem",
+    "dependencies": [],
+    "repo_uri": "",
+    "compatible_engines": [],
+    "engine_api_dependencies": [],
+    "restricted": "ProteusRobot"
+}

+ 3 - 0
Gems/ProteusRobot/preview.png

@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e2408737fe2bba9016b8bfaf0e09ba7624ab298720c51307a51cec1c816ebd7
+size 125915

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini