offroadhatchback.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. class OffroadHatchback extends CarScript
  2. {
  3. protected ref UniversalTemperatureSource m_UTSource;
  4. protected ref UniversalTemperatureSourceSettings m_UTSSettings;
  5. protected ref UniversalTemperatureSourceLambdaEngine m_UTSLEngine;
  6. void OffroadHatchback()
  7. {
  8. //m_dmgContactCoef = 0.075;
  9. m_EngineStartOK = "offroad_engine_start_SoundSet";
  10. m_EngineStartBattery = "offroad_engine_failed_start_battery_SoundSet";
  11. m_EngineStartPlug = "offroad_engine_failed_start_sparkplugs_SoundSet";
  12. m_EngineStartFuel = "offroad_engine_failed_start_fuel_SoundSet";
  13. m_EngineStop = "offroad_engine_stop_SoundSet";
  14. m_EngineStopFuel = "offroad_engine_stop_fuel_SoundSet";
  15. m_CarDoorOpenSound = "offroad_door_open_SoundSet";
  16. m_CarDoorCloseSound = "offroad_door_close_SoundSet";
  17. m_CarSeatShiftInSound = "Offroad_SeatShiftIn_SoundSet";
  18. m_CarSeatShiftOutSound = "Offroad_SeatShiftOut_SoundSet";
  19. m_CarHornShortSoundName = "Offroad_Horn_Short_SoundSet";
  20. m_CarHornLongSoundName = "Offroad_Horn_SoundSet";
  21. SetEnginePos("0 0.7 1.2");
  22. }
  23. override void EEInit()
  24. {
  25. super.EEInit();
  26. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  27. {
  28. m_UTSSettings = new UniversalTemperatureSourceSettings();
  29. m_UTSSettings.m_ManualUpdate = true;
  30. m_UTSSettings.m_TemperatureItemCap = GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_MIDDLE;
  31. m_UTSSettings.m_TemperatureCap = 0;
  32. m_UTSSettings.m_RangeFull = 0.5;
  33. m_UTSSettings.m_RangeMax = 2;
  34. m_UTSLEngine = new UniversalTemperatureSourceLambdaEngine();
  35. m_UTSource = new UniversalTemperatureSource(this, m_UTSSettings, m_UTSLEngine);
  36. }
  37. }
  38. override void OnEngineStart()
  39. {
  40. super.OnEngineStart();
  41. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  42. {
  43. m_UTSource.SetDefferedActive(true, 20.0);
  44. }
  45. }
  46. override void OnEngineStop()
  47. {
  48. super.OnEngineStop();
  49. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  50. {
  51. m_UTSource.SetDefferedActive(false, 10.0);
  52. }
  53. }
  54. override void EOnPostSimulate(IEntity other, float timeSlice)
  55. {
  56. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  57. {
  58. if (m_UTSource.IsActive())
  59. {
  60. m_UTSource.Update(m_UTSSettings, m_UTSLEngine);
  61. }
  62. }
  63. }
  64. override int GetAnimInstance()
  65. {
  66. return VehicleAnimInstances.HATCHBACK;
  67. }
  68. override float GetTransportCameraDistance()
  69. {
  70. return 3.5;
  71. }
  72. override int GetSeatAnimationType( int posIdx )
  73. {
  74. switch (posIdx)
  75. {
  76. case 0:
  77. return DayZPlayerConstants.VEHICLESEAT_DRIVER;
  78. case 1:
  79. return DayZPlayerConstants.VEHICLESEAT_CODRIVER;
  80. case 2:
  81. return DayZPlayerConstants.VEHICLESEAT_PASSENGER_L;
  82. case 3:
  83. return DayZPlayerConstants.VEHICLESEAT_PASSENGER_R;
  84. }
  85. return 0;
  86. }
  87. override CarRearLightBase CreateRearLight()
  88. {
  89. return CarRearLightBase.Cast( ScriptedLightBase.CreateLight(OffroadHatchbackRearLight) );
  90. }
  91. override CarLightBase CreateFrontLight()
  92. {
  93. return CarLightBase.Cast( ScriptedLightBase.CreateLight(OffroadHatchbackFrontLight) );
  94. }
  95. override bool CanReleaseAttachment(EntityAI attachment)
  96. {
  97. if (!super.CanReleaseAttachment(attachment))
  98. {
  99. return false;
  100. }
  101. if (EngineIsOn() || GetCarDoorsState("NivaHood") == CarDoorState.DOORS_CLOSED)
  102. {
  103. string attType = attachment.GetType();
  104. if (attType == "CarRadiator" || attType == "CarBattery" || attType == "SparkPlug")
  105. {
  106. return false;
  107. }
  108. }
  109. return true;
  110. }
  111. override protected bool CanManipulateSpareWheel(string slotSelectionName)
  112. {
  113. return GetCarDoorsState("NivaHood") != CarDoorState.DOORS_CLOSED;
  114. }
  115. override bool CanDisplayAttachmentCategory( string category_name )
  116. {
  117. if (!super.CanDisplayAttachmentCategory(category_name))
  118. {
  119. return false;
  120. }
  121. category_name.ToLower();
  122. if (category_name.Contains("engine"))
  123. {
  124. if (GetCarDoorsState("NivaHood") == CarDoorState.DOORS_CLOSED)
  125. {
  126. return false;
  127. }
  128. }
  129. return true;
  130. }
  131. override bool CanDisplayCargo()
  132. {
  133. if (!super.CanDisplayCargo())
  134. {
  135. return false;
  136. }
  137. if (GetCarDoorsState("NivaTrunk") == CarDoorState.DOORS_CLOSED)
  138. {
  139. return false;
  140. }
  141. return true;
  142. }
  143. override int GetCarDoorsState(string slotType)
  144. {
  145. CarDoor carDoor;
  146. Class.CastTo(carDoor, FindAttachmentBySlotName(slotType));
  147. if (!carDoor)
  148. {
  149. return CarDoorState.DOORS_MISSING;
  150. }
  151. switch (slotType)
  152. {
  153. case "NivaDriverDoors":
  154. return TranslateAnimationPhaseToCarDoorState("DoorsDriver");
  155. case "NivaCoDriverDoors":
  156. return TranslateAnimationPhaseToCarDoorState("DoorsCoDriver");
  157. case "NivaHood":
  158. return TranslateAnimationPhaseToCarDoorState("DoorsHood");
  159. case "NivaTrunk":
  160. return TranslateAnimationPhaseToCarDoorState("DoorsTrunk");
  161. }
  162. return CarDoorState.DOORS_MISSING;
  163. }
  164. override bool CrewCanGetThrough(int posIdx)
  165. {
  166. CarDoor carDoor;
  167. switch (posIdx)
  168. {
  169. case 0:
  170. if (GetCarDoorsState("NivaDriverDoors") == CarDoorState.DOORS_CLOSED)
  171. return false;
  172. else if (GetAnimationPhase("SeatDriver") > 0.5)
  173. return false;
  174. return true;
  175. case 1:
  176. if (GetCarDoorsState("NivaCoDriverDoors") == CarDoorState.DOORS_CLOSED)
  177. return false;
  178. else if (GetAnimationPhase("SeatCoDriver") > 0.5)
  179. return false;
  180. return true;
  181. case 2:
  182. if (GetCarDoorsState("NivaDriverDoors") == CarDoorState.DOORS_CLOSED)
  183. return false;
  184. else if (GetAnimationPhase("SeatDriver") <= 0.5)
  185. return false;
  186. return true;
  187. case 3:
  188. if (GetCarDoorsState("NivaCoDriverDoors") == CarDoorState.DOORS_CLOSED)
  189. return false;
  190. else if (GetAnimationPhase("SeatCoDriver") <= 0.5)
  191. return false;
  192. return true;
  193. }
  194. return false;
  195. }
  196. override string GetDoorSelectionNameFromSeatPos(int posIdx)
  197. {
  198. switch (posIdx)
  199. {
  200. case 0:
  201. case 2:
  202. return "doors_driver";
  203. case 1:
  204. case 3:
  205. return "doors_codriver";
  206. }
  207. return super.GetDoorSelectionNameFromSeatPos(posIdx);
  208. }
  209. override string GetDoorInvSlotNameFromSeatPos(int posIdx)
  210. {
  211. switch (posIdx)
  212. {
  213. case 0:
  214. case 2:
  215. return "NivaDriverDoors";
  216. case 1:
  217. case 3:
  218. return "NivaCoDriverDoors";
  219. }
  220. return super.GetDoorInvSlotNameFromSeatPos(posIdx);
  221. }
  222. // 0 full ambient and engine sound
  223. // 1 zero ambient and engine sound
  224. override float OnSound(CarSoundCtrl ctrl, float oldValue)
  225. {
  226. float tempCap = 0.0;
  227. switch (ctrl)
  228. {
  229. case CarSoundCtrl.DOORS:
  230. float newValue = 0;
  231. if (GetCarDoorsState("NivaDriverDoors") == CarDoorState.DOORS_CLOSED)
  232. {
  233. newValue += 0.5;
  234. }
  235. if (GetCarDoorsState("NivaCoDriverDoors") == CarDoorState.DOORS_CLOSED)
  236. {
  237. newValue += 0.5;
  238. }
  239. if (GetCarDoorsState("NivaTrunk") == CarDoorState.DOORS_CLOSED)
  240. {
  241. newValue += 0.3;
  242. }
  243. if (GetHealthLevel("WindowFront") == GameConstants.STATE_RUINED)
  244. {
  245. newValue -= 0.6;
  246. }
  247. if (GetHealthLevel("WindowLR") == GameConstants.STATE_RUINED)
  248. {
  249. newValue -= 0.2;
  250. }
  251. if (GetHealthLevel("WindowRR") == GameConstants.STATE_RUINED)
  252. {
  253. newValue -= 0.2;
  254. }
  255. return Math.Clamp(newValue, 0, 1);
  256. break;
  257. }
  258. return super.OnSound(ctrl, oldValue);
  259. }
  260. override string GetAnimSourceFromSelection( string selection )
  261. {
  262. switch (selection)
  263. {
  264. case "doors_driver":
  265. return "DoorsDriver";
  266. case "doors_codriver":
  267. return "DoorsCoDriver";
  268. case "doors_hood":
  269. return "DoorsHood";
  270. case "doors_trunk":
  271. return "DoorsTrunk";
  272. case "seatback_driver":
  273. return "SeatDriver";
  274. case "seatback_codriver":
  275. return "SeatCoDriver";
  276. }
  277. return "";
  278. }
  279. override string GetDoorConditionPointFromSelection(string selection)
  280. {
  281. switch (selection)
  282. {
  283. case "seat_driver":
  284. case "seatback_driver":
  285. case "seat_cargo1":
  286. return "seat_con_1_1";
  287. case "seat_codriver":
  288. case "seatback_codriver":
  289. case "seat_cargo2":
  290. return "seat_con_2_1";
  291. }
  292. return "";
  293. }
  294. override int GetCrewIndex(string selection)
  295. {
  296. switch (selection)
  297. {
  298. case "seatback_driver":
  299. return 0;
  300. case "seatback_codriver":
  301. return 1;
  302. }
  303. return -1;
  304. }
  305. override bool IsVitalTruckBattery()
  306. {
  307. return false;
  308. }
  309. override bool IsVitalGlowPlug()
  310. {
  311. return false;
  312. }
  313. override bool CanReachSeatFromSeat(int currentSeat, int nextSeat)
  314. {
  315. if (nextSeat == 0 && GetAnimationPhase("SeatDriver") > 0.5)
  316. return false;
  317. if (nextSeat == 1 && GetAnimationPhase("SeatCoDriver") > 0.5)
  318. return false;
  319. switch (currentSeat)
  320. {
  321. case 0:
  322. return nextSeat == 1;
  323. case 1:
  324. return nextSeat == 0;
  325. case 2:
  326. return nextSeat == 3;
  327. case 3:
  328. return nextSeat == 2;
  329. }
  330. return false;
  331. }
  332. override bool CanReachDoorsFromSeat( string pDoorsSelection, int pCurrentSeat )
  333. {
  334. switch (pCurrentSeat)
  335. {
  336. case 0:
  337. return pDoorsSelection == "DoorsDriver";
  338. case 1:
  339. return pDoorsSelection == "DoorsCoDriver";
  340. case 2:
  341. return pDoorsSelection == "DoorsDriver";
  342. case 3:
  343. return pDoorsSelection == "DoorsCoDriver";
  344. }
  345. return false;
  346. }
  347. override int GetSeatIndexFromDoor( string pDoorSelection )
  348. {
  349. switch (pDoorSelection)
  350. {
  351. case "DoorsDriver":
  352. return 0;
  353. case "DoorsCoDriver":
  354. return 1;
  355. }
  356. return -1;
  357. }
  358. override void SetActions()
  359. {
  360. super.SetActions();
  361. AddAction(ActionAnimateSeats);
  362. }
  363. override void OnDebugSpawn()
  364. {
  365. SpawnUniversalParts();
  366. SpawnAdditionalItems();
  367. FillUpCarFluids();
  368. GetInventory().CreateInInventory("HatchbackWheel");
  369. GetInventory().CreateInInventory("HatchbackWheel");
  370. GetInventory().CreateInInventory("HatchbackWheel" );
  371. GetInventory().CreateInInventory("HatchbackWheel");
  372. GetInventory().CreateInInventory("HatchbackDoors_Driver");
  373. GetInventory().CreateInInventory("HatchbackDoors_CoDriver");
  374. GetInventory().CreateInInventory("HatchbackHood");
  375. GetInventory().CreateInInventory("HatchbackTrunk");
  376. //-----IN CAR CARGO
  377. GetInventory().CreateInInventory("HatchbackWheel");
  378. GetInventory().CreateInInventory("HatchbackWheel");
  379. }
  380. }
  381. class OffroadHatchback_White extends OffroadHatchback
  382. {
  383. override void OnDebugSpawn()
  384. {
  385. SpawnUniversalParts();
  386. SpawnAdditionalItems();
  387. FillUpCarFluids();
  388. GetInventory().CreateInInventory("HatchbackWheel");
  389. GetInventory().CreateInInventory("HatchbackWheel");
  390. GetInventory().CreateInInventory("HatchbackWheel");
  391. GetInventory().CreateInInventory("HatchbackWheel");
  392. GetInventory().CreateInInventory("HatchbackDoors_Driver_White");
  393. GetInventory().CreateInInventory("HatchbackDoors_CoDriver_White");
  394. GetInventory().CreateInInventory("HatchbackHood_White");
  395. GetInventory().CreateInInventory("HatchbackTrunk_White");
  396. //-----IN CAR CARGO
  397. GetInventory().CreateInInventory("HatchbackWheel");
  398. GetInventory().CreateInInventory("HatchbackWheel");
  399. }
  400. }
  401. class OffroadHatchback_Blue extends OffroadHatchback
  402. {
  403. override void OnDebugSpawn()
  404. {
  405. SpawnUniversalParts();
  406. SpawnAdditionalItems();
  407. FillUpCarFluids();
  408. GetInventory().CreateInInventory("HatchbackWheel");
  409. GetInventory().CreateInInventory("HatchbackWheel");
  410. GetInventory().CreateInInventory("HatchbackWheel");
  411. GetInventory().CreateInInventory("HatchbackWheel");
  412. GetInventory().CreateInInventory("HatchbackDoors_Driver_Blue");
  413. GetInventory().CreateInInventory("HatchbackDoors_CoDriver_Blue");
  414. GetInventory().CreateInInventory("HatchbackHood_Blue");
  415. GetInventory().CreateInInventory("HatchbackTrunk_Blue");
  416. //-----IN CAR CARGO
  417. GetInventory().CreateInInventory("HatchbackWheel");
  418. GetInventory().CreateInInventory("HatchbackWheel");
  419. }
  420. }