civiliansedan.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. class CivilianSedan extends CarScript
  2. {
  3. protected ref UniversalTemperatureSource m_UTSource;
  4. protected ref UniversalTemperatureSourceSettings m_UTSSettings;
  5. protected ref UniversalTemperatureSourceLambdaEngine m_UTSLEngine;
  6. void CivilianSedan()
  7. {
  8. //m_dmgContactCoef = 0.065;
  9. m_EngineStartOK = "CivilianSedan_engine_start_SoundSet";
  10. m_EngineStartBattery = "CivilianSedan_engine_failed_start_battery_SoundSet";
  11. m_EngineStartPlug = "CivilianSedan_engine_failed_start_sparkplugs_SoundSet";
  12. m_EngineStartFuel = "CivilianSedan_engine_failed_start_fuel_SoundSet";
  13. m_EngineStopFuel = "offroad_engine_stop_fuel_SoundSet";
  14. m_CarDoorOpenSound = "offroad_door_open_SoundSet";
  15. m_CarDoorCloseSound = "offroad_door_close_SoundSet";
  16. m_CarHornShortSoundName = "CivilianSedan_Horn_Short_SoundSet";
  17. m_CarHornLongSoundName = "CivilianSedan_Horn_SoundSet";
  18. SetEnginePos("0 0.7 1.6");
  19. }
  20. override void EEInit()
  21. {
  22. super.EEInit();
  23. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  24. {
  25. m_UTSSettings = new UniversalTemperatureSourceSettings();
  26. m_UTSSettings.m_ManualUpdate = true;
  27. m_UTSSettings.m_TemperatureItemCap = GameConstants.ITEM_TEMPERATURE_NEUTRAL_ZONE_MIDDLE;
  28. m_UTSSettings.m_TemperatureCap = 0;
  29. m_UTSSettings.m_RangeFull = 0.5;
  30. m_UTSSettings.m_RangeMax = 2;
  31. m_UTSLEngine = new UniversalTemperatureSourceLambdaEngine();
  32. m_UTSource = new UniversalTemperatureSource(this, m_UTSSettings, m_UTSLEngine);
  33. }
  34. }
  35. override void OnEngineStart()
  36. {
  37. super.OnEngineStart();
  38. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  39. {
  40. m_UTSource.SetDefferedActive(true, 20.0);
  41. }
  42. }
  43. override void OnEngineStop()
  44. {
  45. super.OnEngineStop();
  46. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  47. {
  48. m_UTSource.SetDefferedActive(false, 10.0);
  49. }
  50. }
  51. override void EOnPostSimulate(IEntity other, float timeSlice)
  52. {
  53. if (GetGame().IsServer() || !GetGame().IsMultiplayer())
  54. {
  55. if (m_UTSource.IsActive())
  56. {
  57. m_UTSource.Update(m_UTSSettings, m_UTSLEngine);
  58. }
  59. }
  60. }
  61. override int GetAnimInstance()
  62. {
  63. return VehicleAnimInstances.SEDAN;
  64. }
  65. override float GetTransportCameraDistance()
  66. {
  67. return 4.5;
  68. }
  69. override int GetSeatAnimationType(int posIdx)
  70. {
  71. switch (posIdx)
  72. {
  73. case 0:
  74. return DayZPlayerConstants.VEHICLESEAT_DRIVER;
  75. case 1:
  76. return DayZPlayerConstants.VEHICLESEAT_CODRIVER;
  77. case 2:
  78. return DayZPlayerConstants.VEHICLESEAT_PASSENGER_L;
  79. case 3:
  80. return DayZPlayerConstants.VEHICLESEAT_PASSENGER_R;
  81. }
  82. return 0;
  83. }
  84. // Override for car-specific light type
  85. override CarLightBase CreateFrontLight()
  86. {
  87. return CarLightBase.Cast( ScriptedLightBase.CreateLight(CivilianSedanFrontLight) );
  88. }
  89. // Override for car-specific light type
  90. override CarRearLightBase CreateRearLight()
  91. {
  92. return CarRearLightBase.Cast( ScriptedLightBase.CreateLight(CivilianSedanRearLight) );
  93. }
  94. override bool CanReleaseAttachment( EntityAI attachment )
  95. {
  96. if( !super.CanReleaseAttachment( attachment ) )
  97. return false;
  98. string attType = attachment.GetType();
  99. if ( EngineIsOn() || GetCarDoorsState("CivSedanHood") == CarDoorState.DOORS_CLOSED )
  100. {
  101. if ( attType == "CarRadiator" || attType == "CarBattery" || attType == "SparkPlug")
  102. return false;
  103. }
  104. return true;
  105. }
  106. override protected bool CanManipulateSpareWheel(string slotSelectionName)
  107. {
  108. return GetCarDoorsState("CivSedanTrunk") != CarDoorState.DOORS_CLOSED;
  109. }
  110. override bool CanDisplayAttachmentCategory(string category_name)
  111. {
  112. //super
  113. if (!super.CanDisplayAttachmentCategory(category_name))
  114. return false;
  115. //
  116. category_name.ToLower();
  117. if (category_name.Contains("engine"))
  118. {
  119. if (GetCarDoorsState("CivSedanHood") == CarDoorState.DOORS_CLOSED)
  120. return false;
  121. }
  122. return true;
  123. }
  124. override bool CanDisplayCargo()
  125. {
  126. if ( !super.CanDisplayCargo() )
  127. return false;
  128. if ( GetCarDoorsState("CivSedanTrunk") == CarDoorState.DOORS_CLOSED )
  129. return false;
  130. return true;
  131. }
  132. override int GetCarDoorsState( string slotType )
  133. {
  134. CarDoor carDoor;
  135. Class.CastTo( carDoor, FindAttachmentBySlotName( slotType ) );
  136. if (!carDoor)
  137. {
  138. return CarDoorState.DOORS_MISSING;
  139. }
  140. switch (slotType)
  141. {
  142. case "CivSedanDriverDoors":
  143. return TranslateAnimationPhaseToCarDoorState("DoorsDriver");
  144. break;
  145. case "CivSedanCoDriverDoors":
  146. return TranslateAnimationPhaseToCarDoorState("DoorsCoDriver");
  147. break;
  148. case "CivSedanCargo1Doors":
  149. return TranslateAnimationPhaseToCarDoorState("DoorsCargo1");
  150. break;
  151. case "CivSedanCargo2Doors":
  152. return TranslateAnimationPhaseToCarDoorState("DoorsCargo2");
  153. break;
  154. case "CivSedanTrunk":
  155. return TranslateAnimationPhaseToCarDoorState("DoorsTrunk");
  156. break;
  157. case "CivSedanHood":
  158. return TranslateAnimationPhaseToCarDoorState("DoorsHood");
  159. break;
  160. }
  161. return CarDoorState.DOORS_MISSING;
  162. }
  163. override bool CrewCanGetThrough( int posIdx )
  164. {
  165. switch( posIdx )
  166. {
  167. case 0:
  168. if ( GetCarDoorsState("CivSedanDriverDoors") == CarDoorState.DOORS_CLOSED )
  169. return false;
  170. return true;
  171. break;
  172. case 1:
  173. if ( GetCarDoorsState("CivSedanCoDriverDoors") == CarDoorState.DOORS_CLOSED )
  174. return false;
  175. return true;
  176. break;
  177. case 2:
  178. if ( GetCarDoorsState("CivSedanCargo1Doors") == CarDoorState.DOORS_CLOSED )
  179. return false;
  180. return true;
  181. break;
  182. case 3:
  183. if ( GetCarDoorsState("CivSedanCargo2Doors") == CarDoorState.DOORS_CLOSED )
  184. return false;
  185. return true;
  186. break;
  187. }
  188. return false;
  189. }
  190. override string GetDoorSelectionNameFromSeatPos(int posIdx)
  191. {
  192. switch( posIdx )
  193. {
  194. case 0:
  195. return "doors_driver";
  196. break;
  197. case 1:
  198. return "doors_codriver";
  199. break;
  200. case 2:
  201. return "doors_cargo1";
  202. break;
  203. case 3:
  204. return "doors_cargo2";
  205. break;
  206. }
  207. return super.GetDoorSelectionNameFromSeatPos(posIdx);
  208. }
  209. override string GetDoorInvSlotNameFromSeatPos(int posIdx)
  210. {
  211. switch( posIdx )
  212. {
  213. case 0:
  214. return "CivSedanDriverDoors";
  215. break;
  216. case 1:
  217. return "CivSedanCoDriverDoors";
  218. break;
  219. case 2:
  220. return "CivSedanCargo1Doors";
  221. break;
  222. case 3:
  223. return "CivSedanCargo2Doors";
  224. break;
  225. }
  226. return super.GetDoorInvSlotNameFromSeatPos(posIdx);
  227. }
  228. // 0 full ambient and engine sound
  229. // 1 zero ambient and engine sound
  230. override float OnSound(CarSoundCtrl ctrl, float oldValue)
  231. {
  232. switch (ctrl)
  233. {
  234. case CarSoundCtrl.DOORS:
  235. float newValue = 0;
  236. if (GetCarDoorsState("CivSedanDriverDoors") == CarDoorState.DOORS_CLOSED)
  237. {
  238. newValue += 0.25;
  239. }
  240. if (GetCarDoorsState("CivSedanCoDriverDoors") == CarDoorState.DOORS_CLOSED)
  241. {
  242. newValue += 0.25;
  243. }
  244. if (GetCarDoorsState("CivSedanCargo1Doors") == CarDoorState.DOORS_CLOSED)
  245. {
  246. newValue += 0.25;
  247. }
  248. if (GetCarDoorsState("CivSedanCargo2Doors") == CarDoorState.DOORS_CLOSED)
  249. {
  250. newValue += 0.25;
  251. }
  252. if (GetHealthLevel("WindowFront") == GameConstants.STATE_RUINED)
  253. {
  254. newValue -= 0.6;
  255. }
  256. if (GetHealthLevel("WindowBack") == GameConstants.STATE_RUINED)
  257. {
  258. newValue -= 0.6;
  259. }
  260. return Math.Clamp(newValue, 0, 1);
  261. break;
  262. }
  263. return super.OnSound(ctrl, oldValue);
  264. }
  265. override string GetAnimSourceFromSelection(string selection)
  266. {
  267. switch (selection)
  268. {
  269. case "doors_driver":
  270. return "DoorsDriver";
  271. case "doors_codriver":
  272. return "DoorsCoDriver";
  273. case "doors_cargo1":
  274. return "DoorsCargo1";
  275. case "doors_cargo2":
  276. return "DoorsCargo2";
  277. case "doors_hood":
  278. return "DoorsHood";
  279. case "doors_trunk":
  280. return "DoorsTrunk";
  281. }
  282. return "";
  283. }
  284. override bool IsVitalTruckBattery()
  285. {
  286. return false;
  287. }
  288. override bool IsVitalGlowPlug()
  289. {
  290. return false;
  291. }
  292. override bool CanReachSeatFromSeat(int currentSeat, int nextSeat)
  293. {
  294. switch (currentSeat)
  295. {
  296. case 0:
  297. return nextSeat == 1;
  298. case 1:
  299. return nextSeat == 0;
  300. case 2:
  301. return nextSeat == 3;
  302. case 3:
  303. return nextSeat == 2;
  304. }
  305. return false;
  306. }
  307. override bool CanReachDoorsFromSeat( string pDoorsSelection, int pCurrentSeat )
  308. {
  309. switch (pCurrentSeat)
  310. {
  311. case 0:
  312. return pDoorsSelection == "DoorsDriver";
  313. case 1:
  314. return pDoorsSelection == "DoorsCoDriver";
  315. case 2:
  316. return pDoorsSelection == "DoorsCargo1";
  317. case 3:
  318. return pDoorsSelection == "DoorsCargo2";
  319. }
  320. return false;
  321. }
  322. override void OnDebugSpawn()
  323. {
  324. SpawnUniversalParts();
  325. SpawnAdditionalItems();
  326. FillUpCarFluids();
  327. GetInventory().CreateInInventory("CivSedanWheel");
  328. GetInventory().CreateInInventory("CivSedanWheel");
  329. GetInventory().CreateInInventory("CivSedanWheel");
  330. GetInventory().CreateInInventory("CivSedanWheel");
  331. GetInventory().CreateInInventory("CivSedanDoors_Driver");
  332. GetInventory().CreateInInventory("CivSedanDoors_CoDriver");
  333. GetInventory().CreateInInventory("CivSedanDoors_BackLeft");
  334. GetInventory().CreateInInventory("CivSedanDoors_BackRight");
  335. GetInventory().CreateInInventory("CivSedanHood");
  336. GetInventory().CreateInInventory("CivSedanTrunk");
  337. //-----IN CAR CARGO
  338. GetInventory().CreateInInventory("CivSedanWheel");
  339. GetInventory().CreateInInventory("CivSedanWheel");
  340. }
  341. override float GetPushForceCoefficientMultiplier()
  342. {
  343. return 1.5;
  344. }
  345. }
  346. class CivilianSedan_Wine extends CivilianSedan
  347. {
  348. override void OnDebugSpawn()
  349. {
  350. SpawnUniversalParts();
  351. SpawnAdditionalItems();
  352. FillUpCarFluids();
  353. GetInventory().CreateInInventory("CivSedanWheel");
  354. GetInventory().CreateInInventory("CivSedanWheel");
  355. GetInventory().CreateInInventory("CivSedanWheel");
  356. GetInventory().CreateInInventory("CivSedanWheel");
  357. GetInventory().CreateInInventory("CivSedanDoors_Driver_Wine");
  358. GetInventory().CreateInInventory("CivSedanDoors_CoDriver_Wine");
  359. GetInventory().CreateInInventory("CivSedanDoors_BackLeft_Wine");
  360. GetInventory().CreateInInventory("CivSedanDoors_BackRight_Wine");
  361. GetInventory().CreateInInventory("CivSedanHood_Wine");
  362. GetInventory().CreateInInventory("CivSedanTrunk_Wine");
  363. //-----IN CAR CARGO
  364. GetInventory().CreateInInventory("CivSedanWheel");
  365. GetInventory().CreateInInventory("CivSedanWheel");
  366. }
  367. }
  368. class CivilianSedan_Black extends CivilianSedan
  369. {
  370. override void OnDebugSpawn()
  371. {
  372. SpawnUniversalParts();
  373. SpawnAdditionalItems();
  374. FillUpCarFluids();
  375. GetInventory().CreateInInventory("CivSedanWheel");
  376. GetInventory().CreateInInventory("CivSedanWheel");
  377. GetInventory().CreateInInventory("CivSedanWheel");
  378. GetInventory().CreateInInventory("CivSedanWheel");
  379. GetInventory().CreateInInventory("CivSedanDoors_Driver_Black");
  380. GetInventory().CreateInInventory("CivSedanDoors_CoDriver_Black");
  381. GetInventory().CreateInInventory("CivSedanDoors_BackLeft_Black");
  382. GetInventory().CreateInInventory("CivSedanDoors_BackRight_Black");
  383. GetInventory().CreateInInventory("CivSedanHood_Black");
  384. GetInventory().CreateInInventory("CivSedanTrunk_Black");
  385. //-----IN CAR CARGO
  386. GetInventory().CreateInInventory("CivSedanWheel");
  387. GetInventory().CreateInInventory("CivSedanWheel");
  388. }
  389. }