civiliansedan.c 11 KB

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