gpsreceiver.c 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. class GPSReceiver : ItemGPS
  2. {
  3. const string DISPLAY_TEXTURE_PATH_FORMAT = "dz\\gear\\navigation\\data\\GPS_%1_ca.paa";
  4. const string ANIM_PHASE_DISPLAY_HIDE = "DisplayState";
  5. protected ref set<string> m_DisplayGridSelections;
  6. protected ref set<string> m_DisplayAltSelections;
  7. protected ref map<int, string> m_DisplayNumericSignTextureMap;
  8. //! cache
  9. protected ref array<int> m_OrderedPositionNumbersLast;
  10. protected ref array<int> m_AltitudeNumbersLast;
  11. void GPSReceiver()
  12. {
  13. m_OrderedPositionNumbersLast = new array<int>;
  14. m_AltitudeNumbersLast = new array<int>;
  15. int i;
  16. for (i = 0; i < MapNavigationBehaviour.DISPLAY_GRID_POS_MAX_CHARS_COUNT * 2; ++i)
  17. {
  18. m_OrderedPositionNumbersLast.Insert(0);
  19. }
  20. for (i = 0; i < MapNavigationBehaviour.DISPLAY_ALT_MAX_CHARS_COUNT; ++i)
  21. {
  22. m_AltitudeNumbersLast.Insert(0);
  23. }
  24. m_DisplayGridSelections = new set<string>();
  25. m_DisplayGridSelections.Insert("grid_1_0");
  26. m_DisplayGridSelections.Insert("grid_1_1");
  27. m_DisplayGridSelections.Insert("grid_1_2");
  28. m_DisplayGridSelections.Insert("grid_2_0");
  29. m_DisplayGridSelections.Insert("grid_2_1");
  30. m_DisplayGridSelections.Insert("grid_2_2");
  31. m_DisplayAltSelections = new set<string>();
  32. m_DisplayAltSelections.Insert("alt_0");
  33. m_DisplayAltSelections.Insert("alt_1");
  34. m_DisplayAltSelections.Insert("alt_2");
  35. m_DisplayAltSelections.Insert("alt_3");
  36. m_DisplayNumericSignTextureMap = new map<int, string>();
  37. for (i = -1; i < 11; i++)
  38. {
  39. string texturePath = string.Format(DISPLAY_TEXTURE_PATH_FORMAT, i);
  40. //! translate numerical -1 to `-` texture
  41. if (i == -1)
  42. {
  43. texturePath = string.Format(DISPLAY_TEXTURE_PATH_FORMAT, "dash");
  44. }
  45. m_DisplayNumericSignTextureMap.Insert(i, texturePath);
  46. }
  47. }
  48. protected void PositionalUpdate()
  49. {
  50. UpdateDisplayPosition();
  51. UpdateDisplayElevation();
  52. }
  53. //! need to be overriden, otherwise the item will be turned off when moved to cargo
  54. override void OnMovedInsideCargo(EntityAI container);
  55. override void SetActions()
  56. {
  57. super.SetActions();
  58. AddAction(ActionTurnOnWhileInHands);
  59. AddAction(ActionTurnOffWhileInHands);
  60. }
  61. override bool IsTurnedOn()
  62. {
  63. return GetCompEM() && GetCompEM().IsWorking();
  64. }
  65. //------------------------------------------------------------------------------
  66. override void OnWorkStart()
  67. {
  68. UpdateDisplayState(true);
  69. if (GetHierarchyRoot())
  70. {
  71. PlayerBase pb = PlayerBase.Cast(GetHierarchyRoot());
  72. if (pb)
  73. {
  74. pb.MapNavigationItemInPossession(this);
  75. }
  76. }
  77. }
  78. override void OnWorkStop()
  79. {
  80. UpdateDisplayState(false);
  81. if (GetHierarchyRoot())
  82. {
  83. PlayerBase pb = PlayerBase.Cast(GetHierarchyRoot());
  84. if (pb)
  85. {
  86. pb.MapNavigationItemNotInPossession(this);
  87. }
  88. }
  89. }
  90. override void OnWork(float consumed_energy)
  91. {
  92. PositionalUpdate();
  93. }
  94. //------------------------------------------------------------------------------
  95. protected void UpdateDisplayState(bool pIsTurnedOn)
  96. {
  97. SetAnimationPhaseNow(ANIM_PHASE_DISPLAY_HIDE, !pIsTurnedOn);
  98. }
  99. protected void UpdateDisplayPosition()
  100. {
  101. int selectionIndex;
  102. string selectionName;
  103. array<int> orderedPositionNumbers = MapNavigationBehaviour.OrderedPositionNumbersFromGridCoords(this);
  104. if (orderedPositionNumbers.DifferentAtPosition(m_OrderedPositionNumbersLast) != INDEX_NOT_FOUND)
  105. {
  106. for (int i = 0; i < m_DisplayGridSelections.Count(); ++i)
  107. {
  108. selectionName = m_DisplayGridSelections.Get(i);
  109. selectionIndex = GetHiddenSelection(selectionName);
  110. SetObjectTexture(selectionIndex, m_DisplayNumericSignTextureMap.Get(orderedPositionNumbers.Get(i)));
  111. }
  112. m_OrderedPositionNumbersLast = orderedPositionNumbers;
  113. }
  114. }
  115. protected void UpdateDisplayElevation()
  116. {
  117. int selectionIndex;
  118. string selectionName;
  119. array<int> altitudeNumbers = MapNavigationBehaviour.OrderedAltitudeNumbersPosition(this);
  120. if (altitudeNumbers.DifferentAtPosition(m_AltitudeNumbersLast) != INDEX_NOT_FOUND)
  121. {
  122. for (int i = 0; i < m_DisplayAltSelections.Count(); ++i)
  123. {
  124. selectionName = m_DisplayAltSelections.Get(i);
  125. selectionIndex = GetHiddenSelection(selectionName);
  126. SetObjectTexture(selectionIndex, m_DisplayNumericSignTextureMap.Get(altitudeNumbers.Get(i)));
  127. }
  128. m_AltitudeNumbersLast = altitudeNumbers;
  129. }
  130. }
  131. protected int GetHiddenSelection(string selection)
  132. {
  133. int idx = GetHiddenSelectionIndex(selection);
  134. if (idx != INDEX_NOT_FOUND)
  135. {
  136. return idx;
  137. }
  138. else
  139. {
  140. return 0;
  141. }
  142. }
  143. //================================================================
  144. // DEBUG
  145. //================================================================
  146. override void OnDebugSpawn()
  147. {
  148. Battery9V.Cast(GetInventory().CreateInInventory("Battery9V"));
  149. }
  150. }