ConsoleCommands.inl 12 KB

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