pluginuniversaltemperaturesourceserver.c 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. class PluginUniversalTemperatureSourceServer extends PluginBase
  2. {
  3. const int INTERVAL = 1; //! [s]
  4. const float LOOKUP_RADIUS = 20; //! [m]
  5. protected float m_AccuTime;
  6. protected ref set<PlayerBase> m_ClientList;
  7. protected ref array<ref UTemperatureSourceDebug> m_UTemperatureSourceDebugs;
  8. void PluginUniversalTemperatureSourceServer()
  9. {
  10. m_ClientList = new set<PlayerBase>();
  11. m_UTemperatureSourceDebugs = new array<ref UTemperatureSourceDebug>();
  12. }
  13. override void OnUpdate(float delta_time)
  14. {
  15. if (m_ClientList.Count() > 0)
  16. {
  17. m_AccuTime += delta_time;
  18. if (m_AccuTime > INTERVAL)
  19. {
  20. m_AccuTime = 0;
  21. SendDebug();
  22. }
  23. }
  24. }
  25. void GatherTemperatureSources(PlayerBase player)
  26. {
  27. m_UTemperatureSourceDebugs.Clear();
  28. if (!player)
  29. return;
  30. vector playerPos = player.GetPosition();
  31. array<Object> nearestObjects = new array<Object>();
  32. GetGame().GetObjectsAtPosition(playerPos, LOOKUP_RADIUS, nearestObjects, null);
  33. UTemperatureSource uts;
  34. UTemperatureSourceDebug utsd;
  35. foreach (Object nearestObject : nearestObjects)
  36. {
  37. EntityAI ent = EntityAI.Cast(nearestObject);
  38. if (ent && ent.IsUniversalTemperatureSource() && ent != player)
  39. {
  40. uts = ent.GetUniversalTemperatureSource();
  41. utsd = new UTemperatureSourceDebug();
  42. utsd.AddHeader(ent.GetType());
  43. utsd.Add("position", uts.GetPosition().ToString(false));
  44. utsd.Add("fullrange", uts.GetFullRange().ToString());
  45. utsd.Add("maxrange", uts.GetMaxRange().ToString());
  46. utsd.Add("temperatureCap", uts.GetTemperatureCap().ToString());
  47. utsd.Add("temperatureItemCap", uts.GetTemperatureItemCap().ToString());
  48. utsd.Commit();
  49. m_UTemperatureSourceDebugs.Insert(utsd);
  50. }
  51. }
  52. if (player.GetItemInHands() && player.GetItemInHands().IsUniversalTemperatureSource())
  53. {
  54. uts = player.GetItemInHands().GetUniversalTemperatureSource();
  55. utsd = new UTemperatureSourceDebug();
  56. utsd.AddHeader(player.GetItemInHands().GetType());
  57. utsd.Add("position", uts.GetPosition().ToString(false));
  58. utsd.Add("fullrange", uts.GetFullRange().ToString());
  59. utsd.Add("maxrange", uts.GetMaxRange().ToString());
  60. utsd.Add("temperatureCap", uts.GetTemperatureCap().ToString());
  61. utsd.Add("temperatureItemCap", uts.GetTemperatureItemCap().ToString());
  62. utsd.Commit();
  63. m_UTemperatureSourceDebugs.Insert(utsd);
  64. }
  65. }
  66. void SendDebug()
  67. {
  68. int clientCount = m_ClientList.Count();
  69. foreach (PlayerBase player : m_ClientList)
  70. {
  71. if (player)
  72. {
  73. GatherTemperatureSources(player);
  74. ScriptRPC rpc = new ScriptRPC();
  75. rpc.Write(m_UTemperatureSourceDebugs);
  76. rpc.Send(player, ERPCs.DEV_UTS_DEBUG_DATA, true, player.GetIdentity());
  77. }
  78. else
  79. m_ClientList.RemoveItem(player);
  80. }
  81. }
  82. void OnRequestReceived(PlayerBase player, bool enable)
  83. {
  84. int index = m_ClientList.Find(player);
  85. if (enable)
  86. {
  87. m_ClientList.Insert(player);
  88. }
  89. else if (index != -1 && m_ClientList.Count() > 0)
  90. {
  91. m_ClientList.Remove(index);
  92. }
  93. }
  94. void OnRPC(ParamsReadContext ctx, PlayerBase player)
  95. {
  96. bool enable;
  97. ctx.Read(enable);
  98. OnRequestReceived(player, enable);
  99. }
  100. }