2
0

ConsoleCommands.inl 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  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. #include <AzCore/Component/ComponentApplicationBus.h>
  9. #include <AzCore/Console/IConsole.h>
  10. #include <AzCore/Math/MathScriptHelpers.h>
  11. #include <AzCore/std/smart_ptr/make_shared.h>
  12. #include <SimulationInterfaces/SimulationEntityManagerRequestBus.h>
  13. #include <SimulationInterfaces/SimulationMangerRequestBus.h>
  14. namespace SimulationInterfacesCommands
  15. {
  16. using namespace SimulationInterfaces;
  17. static void simulationinterfaces_GetEntities(const AZ::ConsoleCommandContainer& arguments)
  18. {
  19. AZ::Outcome<EntityNameList, FailedResult> entities;
  20. SimulationEntityManagerRequestBus::BroadcastResult(
  21. entities, &SimulationEntityManagerRequestBus::Events::GetEntities, EntityFilters());
  22. if (!entities.IsSuccess())
  23. {
  24. AZ_Printf("SimulationInterfacesConsole", "Failed to get entities: %s\n", entities.GetError().m_errorString.c_str());
  25. return;
  26. }
  27. for (const auto& entity : entities.GetValue())
  28. {
  29. AZ_Printf("SimulationInterfacesConsole", " - %s\n", entity.c_str());
  30. }
  31. }
  32. static void simulationinterfaces_Pause(const AZ::ConsoleCommandContainer& arguments)
  33. {
  34. SimulationManagerRequestBus::Broadcast(&SimulationManagerRequestBus::Events::SetSimulationPaused, true);
  35. }
  36. static void simulationinterfaces_Resume(const AZ::ConsoleCommandContainer& arguments)
  37. {
  38. SimulationManagerRequestBus::Broadcast(&SimulationManagerRequestBus::Events::SetSimulationPaused, false);
  39. }
  40. static void simulationinterfaces_Step(const AZ::ConsoleCommandContainer& arguments)
  41. {
  42. if (arguments.empty())
  43. {
  44. AZ_Printf("SimulationInterfacesConsole", "simulationinterfaces_Step <number of steps>\n");
  45. return;
  46. }
  47. uint32_t steps = AZStd::stoi(AZStd::string(arguments[0]));
  48. SimulationManagerRequestBus::Broadcast(&SimulationManagerRequestBus::Events::StepSimulation, steps);
  49. }
  50. static void simulationinterfaces_GetEntitiesSphere(const AZ::ConsoleCommandContainer& arguments)
  51. {
  52. float sphereShape = 10.f;
  53. AZ::Vector3 position = AZ::Vector3::CreateZero();
  54. sphereShape = arguments.empty() ? 10.f : (AZStd::stof(AZStd::string(arguments[0])));
  55. position.SetX(arguments.size() > 1 ? (AZStd::stof(AZStd::string(arguments[1]))) : 0.f);
  56. position.SetY(arguments.size() > 2 ? (AZStd::stof(AZStd::string(arguments[2]))) : 0.f);
  57. position.SetZ(arguments.size() > 3 ? (AZStd::stof(AZStd::string(arguments[3]))) : 0.f);
  58. AZ_Printf("SimulationInterfacesConsole", "simulationinterfaces_GetEntities in radius %f \n", sphereShape);
  59. AZ_Printf("SimulationInterfacesConsole", "position %f %f %f \n", position.GetX(), position.GetY(), position.GetZ());
  60. EntityFilters filter;
  61. filter.m_boundsShape = AZStd::make_shared<Physics::SphereShapeConfiguration>(sphereShape);
  62. AZ::Outcome<EntityNameList, FailedResult> entities;
  63. SimulationEntityManagerRequestBus::BroadcastResult(entities, &SimulationEntityManagerRequestBus::Events::GetEntities, filter);
  64. if (!entities.IsSuccess())
  65. {
  66. AZ_Printf("SimulationInterfacesConsole", "Failed to get entities: %s\n", entities.GetError().m_errorString.c_str());
  67. return;
  68. }
  69. for (const auto& entity : entities.GetValue())
  70. {
  71. AZ_Printf("SimulationInterfacesConsole", " - %s\n", entity.c_str());
  72. }
  73. }
  74. static void simulationinterfaces_GetEntityState(const AZ::ConsoleCommandContainer& arguments)
  75. {
  76. if (arguments.empty())
  77. {
  78. AZ_Printf("SimulationInterfacesConsole", "simulationinterfaces_GetEntityState requires entity name\n");
  79. return;
  80. }
  81. const AZStd::string entityName = arguments[0];
  82. AZ_Printf("SimulationInterfacesConsole", "simulationinterfaces_GetEntityState %s\n", entityName.c_str());
  83. AZ::Outcome<EntityState, FailedResult> entityStateResult;
  84. SimulationEntityManagerRequestBus::BroadcastResult(
  85. entityStateResult, &SimulationEntityManagerRequestBus::Events::GetEntityState, entityName);
  86. if (!entityStateResult.IsSuccess())
  87. {
  88. AZ_Printf(
  89. "SimulationInterfacesConsole", "Failed to get entity state: %s\n", entityStateResult.GetError().m_errorString.c_str());
  90. return;
  91. }
  92. const auto& entityState = entityStateResult.GetValue();
  93. AZ_Printf("SimulationInterfacesConsole", "Entity %s\n", entityName.c_str());
  94. AZ_Printf("SimulationInterfacesConsole", "Pose %s\n", AZ::Vector3ToString(entityState.m_pose.GetTranslation()).c_str());
  95. AZ_Printf("SimulationInterfacesConsole", "Rotation %s \n", AZ::QuaternionToString(entityState.m_pose.GetRotation()).c_str());
  96. const AZ::Vector3 euler = entityState.m_pose.GetRotation().GetEulerDegrees();
  97. AZ_Printf("SimulationInterfacesConsole", "Rotation (euler) %s\n", AZ::Vector3ToString(euler).c_str());
  98. AZ_Printf("SimulationInterfacesConsole", "Twist Linear %s\n", AZ::Vector3ToString(entityState.m_twistLinear).c_str());
  99. AZ_Printf("SimulationInterfacesConsole", "Twist Angular %s\n", AZ::Vector3ToString(entityState.m_twistAngular).c_str());
  100. }
  101. static void simulationinterfaces_SetStateXYZ(const AZ::ConsoleCommandContainer& arguments)
  102. {
  103. if (arguments.empty())
  104. {
  105. AZ_Printf("SimulationInterfacesConsole", "simulationinterfaces_GetEntityState requires entity name\n");
  106. return;
  107. }
  108. const AZStd::string entityName = arguments[0];
  109. AZ::Vector3 position = AZ::Vector3::CreateZero();
  110. position.SetX(arguments.size() > 1 ? (AZStd::stof(AZStd::string(arguments[1]))) : 0.f);
  111. position.SetY(arguments.size() > 2 ? (AZStd::stof(AZStd::string(arguments[2]))) : 0.f);
  112. position.SetZ(arguments.size() > 3 ? (AZStd::stof(AZStd::string(arguments[3]))) : 0.f);
  113. EntityState entityState{};
  114. entityState.m_pose = AZ::Transform::CreateIdentity();
  115. entityState.m_pose.SetTranslation(position);
  116. AZ::Outcome<void, FailedResult> result;
  117. SimulationEntityManagerRequestBus::BroadcastResult(
  118. result, &SimulationEntityManagerRequestBus::Events::SetEntityState, entityName, entityState);
  119. if (!result.IsSuccess())
  120. {
  121. AZ_Printf("SimulationInterfacesConsole", "Failed to set entity state: %s\n", result.GetError().m_errorString.c_str());
  122. return;
  123. }
  124. AZ_Printf("SimulationInterfacesConsole", "Entity %s state set\n", entityName.c_str());
  125. }
  126. static void simulationinterfaces_DeleteEntity(const AZ::ConsoleCommandContainer& arguments)
  127. {
  128. if (arguments.empty())
  129. {
  130. AZ_Printf("SimulationInterfacesConsole", "simulationinterfaces_DeleteEntity requires entity name\n");
  131. return;
  132. }
  133. const AZStd::string entityName = arguments[0];
  134. DeletionCompletedCb cb = [](const AZ::Outcome<void, FailedResult>& result)
  135. {
  136. if (result.IsSuccess())
  137. {
  138. AZ_Printf("SimulationInterfacesConsole", "Entity deleted\n");
  139. }
  140. else
  141. {
  142. AZ_Printf("SimulationInterfacesConsole", "Failed to delete entity: %s\n", result.GetError().m_errorString.c_str());
  143. }
  144. };
  145. SimulationEntityManagerRequestBus::Broadcast(&SimulationEntityManagerRequestBus::Events::DeleteEntity, entityName, cb);
  146. }
  147. static void simulationinterfaces_GetSpawnables(const AZ::ConsoleCommandContainer& arguments)
  148. {
  149. AZ_Printf("SimulationInterfacesConsole", "simulationinterfaces_GetSpawnables\n");
  150. AZ::Outcome<SpawnableList, FailedResult> spawnables;
  151. SimulationEntityManagerRequestBus::BroadcastResult(spawnables, &SimulationEntityManagerRequestBus::Events::GetSpawnables);
  152. if (!spawnables.IsSuccess())
  153. {
  154. AZ_Printf("SimulationInterfacesConsole", "Failed to get spawnables: %s\n", spawnables.GetError().m_errorString.c_str());
  155. return;
  156. }
  157. for (const auto& spawnable : spawnables.GetValue())
  158. {
  159. AZ_Printf("SimulationInterfaces", " - %s\n", spawnable.m_uri.c_str());
  160. }
  161. }
  162. static void simulationinterfaces_Spawn(const AZ::ConsoleCommandContainer& arguments)
  163. {
  164. if (arguments.size() < 2)
  165. {
  166. AZ_Printf("SimulationInterfacesConsole", "simulationinterface_Spawn minimal :\n");
  167. AZ_Printf("SimulationInterfacesConsole", " simulationinterface_Spawn <name> <uri>\n");
  168. AZ_Printf("SimulationInterfacesConsole", "simulationinterface_Spawn optional :\n");
  169. AZ_Printf("SimulationInterfacesConsole", " simulationinterface_Spawn <name> <uri> <namespace> <x> <y> <z> \n");
  170. return;
  171. }
  172. AZStd::string name = arguments[0];
  173. AZStd::string uri = arguments[1];
  174. AZStd::string entityNamespace = arguments.size() > 2 ? arguments[2] : "";
  175. AZ::Transform initialPose = AZ::Transform::CreateIdentity();
  176. if (arguments.size() > 5)
  177. {
  178. initialPose.SetTranslation(AZ::Vector3(
  179. AZStd::stof(AZStd::string(arguments[3])),
  180. AZStd::stof(AZStd::string(arguments[4])),
  181. AZStd::stof(AZStd::string(arguments[5]))));
  182. }
  183. SpawnCompletedCb completedCb = [](const AZ::Outcome<AZStd::string, FailedResult>& result)
  184. {
  185. if (!result.IsSuccess())
  186. {
  187. AZ_Printf("SimulationInterfacesConsole", "Failed to spawn entity: %s\n", result.GetError().m_errorString.c_str());
  188. return;
  189. }
  190. AZ_Printf("SimulationInterfacesConsole", "Entity spawned and registered : %s\n", result.GetValue().c_str());
  191. };
  192. constexpr bool allowRename = true;
  193. SimulationEntityManagerRequestBus::Broadcast(
  194. &SimulationEntityManagerRequestBus::Events::SpawnEntity, name, uri, entityNamespace, initialPose, allowRename, completedCb);
  195. AZ_Printf("SimulationInterfacesConsole", "simulationinterface_Spawn %s %s\n", name.c_str(), uri.c_str());
  196. }
  197. static void simulationinterfaces_ReloadLevel(const AZ::ConsoleCommandContainer& arguments)
  198. {
  199. SimulationManagerRequests::ReloadLevelCallback cb = []()
  200. {
  201. AZ_Printf("SimulationInterfacesConsole", "Reload level completed\n");
  202. };
  203. SimulationManagerRequestBus::Broadcast(&SimulationManagerRequestBus::Events::ReloadLevel, cb);
  204. }
  205. static void simulationinterfaces_DeleteAll(const AZ::ConsoleCommandContainer& arguments)
  206. {
  207. DeletionCompletedCb cb = [](const AZ::Outcome<void, FailedResult>& result)
  208. {
  209. if (result.IsSuccess())
  210. {
  211. AZ_Printf("SimulationInterfacesConsole", "All spawned entities deleted\n");
  212. }
  213. else
  214. {
  215. AZ_Printf(
  216. "SimulationInterfacesConsole", "Failed to delete all spawned entities: %s\n", result.GetError().m_errorString.c_str());
  217. }
  218. };
  219. SimulationEntityManagerRequestBus::Broadcast(&SimulationEntityManagerRequestBus::Events::DeleteAllEntities, cb);
  220. }
  221. AZ_CONSOLEFREEFUNC(
  222. simulationinterfaces_GetEntities, AZ::ConsoleFunctorFlags::DontReplicate, "Get all simulated entities in the scene.");
  223. AZ_CONSOLEFREEFUNC(simulationinterfaces_Pause, AZ::ConsoleFunctorFlags::DontReplicate, "Pause simulation.");
  224. AZ_CONSOLEFREEFUNC(simulationinterfaces_Resume, AZ::ConsoleFunctorFlags::DontReplicate, "Resume simulation.");
  225. AZ_CONSOLEFREEFUNC(simulationinterfaces_Step, AZ::ConsoleFunctorFlags::DontReplicate, "Step simulation.");
  226. AZ_CONSOLEFREEFUNC(
  227. simulationinterfaces_GetEntitiesSphere, AZ::ConsoleFunctorFlags::DontReplicate, "Get all simulated entities in the radius.");
  228. AZ_CONSOLEFREEFUNC(simulationinterfaces_GetEntityState, AZ::ConsoleFunctorFlags::DontReplicate, "Get state of the entity.");
  229. AZ_CONSOLEFREEFUNC(simulationinterfaces_SetStateXYZ, AZ::ConsoleFunctorFlags::DontReplicate, "Set state of the entity.");
  230. AZ_CONSOLEFREEFUNC(simulationinterfaces_DeleteEntity, AZ::ConsoleFunctorFlags::DontReplicate, "Delete entity.");
  231. AZ_CONSOLEFREEFUNC(
  232. simulationinterfaces_GetSpawnables, AZ::ConsoleFunctorFlags::DontReplicate, "Get all spawnable entities in the scene.");
  233. AZ_CONSOLEFREEFUNC(simulationinterfaces_Spawn, AZ::ConsoleFunctorFlags::DontReplicate, "Spawn entity.");
  234. AZ_CONSOLEFREEFUNC(simulationinterfaces_ReloadLevel, AZ::ConsoleFunctorFlags::DontReplicate, "Reload level.");
  235. AZ_CONSOLEFREEFUNC(simulationinterfaces_DeleteAll, AZ::ConsoleFunctorFlags::DontReplicate, "Remove all spawned entities.");
  236. } // namespace SimulationInterfacesCommands