/Aurora/BotManager/BotPrimController.cs

https://bitbucket.org/VirtualReality/software-testing · C# · 157 lines · 132 code · 23 blank · 2 comment · 12 complexity · f23a559062333a8e24122355a6df4dc7 MD5 · raw file

  1. using Aurora.Framework;
  2. using Aurora.Framework.ClientInterfaces;
  3. using Aurora.Framework.Modules;
  4. using Aurora.Framework.Physics;
  5. using Aurora.Framework.SceneInfo;
  6. using Aurora.Framework.SceneInfo.Entities;
  7. using OpenMetaverse;
  8. namespace Aurora.BotManager
  9. {
  10. public class BotPrimController : IBotController
  11. {
  12. private ISceneEntity m_object;
  13. private Bot m_bot;
  14. private bool m_run;
  15. private float m_speed = 1;
  16. private bool m_hasStoppedMoving = false;
  17. public BotPrimController(ISceneEntity obj, Bot bot)
  18. {
  19. m_object = obj;
  20. m_bot = bot;
  21. }
  22. public string Name
  23. {
  24. get { return m_object.Name; }
  25. }
  26. public UUID UUID
  27. {
  28. get { return m_object.UUID; }
  29. }
  30. public bool SetAlwaysRun
  31. {
  32. get { return m_run; }
  33. set { m_run = value; }
  34. }
  35. public bool ForceFly
  36. {
  37. get { return false; }
  38. set { }
  39. }
  40. public PhysicsActor PhysicsActor
  41. {
  42. get { return m_object.RootChild.PhysActor; }
  43. }
  44. public bool CanMove
  45. {
  46. get { return true; }
  47. }
  48. public Vector3 AbsolutePosition
  49. {
  50. get { return m_object.AbsolutePosition; }
  51. }
  52. public void SendChatMessage(int sayType, string message, int channel)
  53. {
  54. IChatModule chatModule = m_object.Scene.RequestModuleInterface<IChatModule>();
  55. if (chatModule != null)
  56. chatModule.SimChat(message, (ChatTypeEnum) sayType, channel,
  57. m_object.RootChild.AbsolutePosition, m_object.Name, m_object.UUID, false,
  58. m_object.Scene);
  59. }
  60. public void SendInstantMessage(GridInstantMessage im)
  61. {
  62. IMessageTransferModule m_TransferModule =
  63. m_object.Scene.RequestModuleInterface<IMessageTransferModule>();
  64. if (m_TransferModule != null)
  65. m_TransferModule.SendInstantMessage(im);
  66. }
  67. public void Close()
  68. {
  69. }
  70. public void OnBotAgentUpdate(Vector3 toward, uint controlFlag, Quaternion bodyRotation)
  71. {
  72. OnBotAgentUpdate(toward, controlFlag, bodyRotation, true);
  73. }
  74. public void OnBotAgentUpdate(Vector3 toward, uint controlFlag, Quaternion bodyRotation, bool isMoving)
  75. {
  76. if (isMoving)
  77. m_hasStoppedMoving = false;
  78. m_object.AbsolutePosition += toward*(m_speed*(1f/45f));
  79. m_object.ScheduleGroupTerseUpdate();
  80. }
  81. public void UpdateMovementAnimations(bool sendTerseUpdate)
  82. {
  83. if (sendTerseUpdate)
  84. m_object.ScheduleGroupTerseUpdate();
  85. }
  86. public void Teleport(OpenMetaverse.Vector3 pos)
  87. {
  88. m_object.AbsolutePosition = pos;
  89. }
  90. public IScene GetScene()
  91. {
  92. return m_object.Scene;
  93. }
  94. public void StopMoving(bool fly, bool clearPath)
  95. {
  96. if (m_hasStoppedMoving)
  97. return;
  98. m_hasStoppedMoving = true;
  99. m_bot.State = BotState.Idle;
  100. //Clear out any nodes
  101. if (clearPath)
  102. m_bot.m_nodeGraph.Clear();
  103. //Send the stop message
  104. m_bot.m_movementFlag = (uint) AgentManager.ControlFlags.NONE;
  105. if (fly)
  106. m_bot.m_movementFlag |= (uint) AgentManager.ControlFlags.AGENT_CONTROL_FLY;
  107. OnBotAgentUpdate(Vector3.Zero, m_bot.m_movementFlag, m_bot.m_bodyDirection, false);
  108. if (m_object.RootChild.PhysActor != null)
  109. m_object.RootChild.PhysActor.ForceSetVelocity(Vector3.Zero);
  110. }
  111. public void SetSpeedModifier(float speed)
  112. {
  113. if (speed > 4)
  114. speed = 4;
  115. m_speed = speed;
  116. }
  117. public void SetDrawDistance(float draw)
  118. {
  119. }
  120. public void StandUp()
  121. {
  122. }
  123. public void Jump()
  124. {
  125. m_bot.m_nodeGraph.Clear();
  126. m_bot.m_nodeGraph.FollowIndefinitely = false;
  127. m_bot.m_nodeGraph.Add(m_object.AbsolutePosition + new Vector3(0, 0, 1.5f), TravelMode.Walk);
  128. m_bot.m_nodeGraph.Add(m_object.AbsolutePosition, TravelMode.Walk);
  129. m_bot.ForceCloseToPoint = true;
  130. m_bot.m_closeToPoint = 0.1f;
  131. m_bot.GetNextDestination();
  132. }
  133. }
  134. }