shelter.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. class ShelterBase extends TentBase
  2. {
  3. static const string SITE_OBJECT_TYPE = "ShelterSite";
  4. void ShelterBase()
  5. {
  6. m_ShowAnimationsWhenPitched.Insert("Body");
  7. m_ShowAnimationsWhenPacked.Insert("Body");
  8. m_HalfExtents = Vector(0.8, 0.15, 1.3);
  9. }
  10. override void SetActions()
  11. {
  12. super.SetActions();
  13. RemoveAction(ActionTogglePlaceObject);
  14. RemoveAction(ActionToggleTentOpen);
  15. RemoveAction(ActionPackTent);
  16. RemoveAction(ActionDeployObject);
  17. AddAction(ActionDeconstructShelter);
  18. }
  19. override void EEInit()
  20. {
  21. super.EEInit();
  22. TryPitch(true, true);
  23. }
  24. void Deconstruct()
  25. {
  26. StaticConstructionMethods.SpawnConstructionMaterialPiles(this, null, GetMaterialPath(), GetShelterVariant());
  27. SpawnKit();
  28. Delete();
  29. }
  30. string GetMaterialPath()
  31. {
  32. return string.Format("%1 %2 Construction site %3 Materials", CFG_VEHICLESPATH, SITE_OBJECT_TYPE, GetShelterVariant());
  33. }
  34. string GetShelterVariant()
  35. {
  36. return "";
  37. }
  38. void SpawnKit()
  39. {
  40. ItemBase constructionKit = ItemBase.Cast(GetGame().CreateObjectEx("ShelterKit", GetPosition(), ECE_PLACE_ON_SURFACE));
  41. constructionKit.SetHealth01("", "", GetHealth01());
  42. }
  43. override bool IsPlayerInside(PlayerBase player, string selection)
  44. {
  45. vector player_pos = player.GetPosition();
  46. vector shelter_pos = GetPosition();
  47. vector ref_dir = GetDirection();
  48. ref_dir[1] = 0;
  49. ref_dir.Normalize();
  50. vector x[2];
  51. vector b1,b2;
  52. GetCollisionBox(x);
  53. b1 = x[0];
  54. b2 = x[1];
  55. vector dir_to_shelter = shelter_pos - player_pos;
  56. dir_to_shelter[1] = 0;
  57. float len = dir_to_shelter.Length();
  58. dir_to_shelter.Normalize();
  59. vector ref_dir_angle = ref_dir.VectorToAngles();
  60. vector dir_to_shelter_angle = dir_to_shelter.VectorToAngles();
  61. vector test_angles = dir_to_shelter_angle - ref_dir_angle;
  62. vector test_position = test_angles.AnglesToVector() * len;
  63. if (test_position[0] < b1[0] || test_position[0] > b2[0] || test_position[2] < 0.2 || test_position[2] > 2.2 )
  64. {
  65. return false;
  66. }
  67. else
  68. {
  69. return true;
  70. }
  71. }
  72. }
  73. class ShelterFabric extends ShelterBase
  74. {
  75. override string GetShelterVariant()
  76. {
  77. return "fabric";
  78. }
  79. }
  80. class ShelterLeather extends ShelterBase
  81. {
  82. override string GetShelterVariant()
  83. {
  84. return "leather";
  85. }
  86. }
  87. class ShelterStick extends ShelterBase
  88. {
  89. override string GetShelterVariant()
  90. {
  91. return "stick";
  92. }
  93. }