tlrlight.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. class TLRLight extends Switchable_Base
  2. {
  3. PistollightLight m_Light;
  4. static int REFLECTOR_ID = 1;
  5. static int GLASS_ID = 0;
  6. static string LIGHT_OFF_GLASS = "dz\\gear\\tools\\data\\flashlight_glass.rvmat";
  7. static string LIGHT_OFF_REFLECTOR = "dz\\weapons\\attachments\\data\\TLS3.rvmat";
  8. static string LIGHT_ON_GLASS = "dz\\gear\\tools\\data\\flashlight_glass_on.rvmat";
  9. static string LIGHT_ON_REFLECTOR = "dz\\weapons\\attachments\\data\\TLS3_on.rvmat";
  10. override ScriptedLightBase GetLight()
  11. {
  12. return m_Light;
  13. }
  14. override bool CanPutAsAttachment( EntityAI parent )
  15. {
  16. if(!super.CanPutAsAttachment(parent)) {return false;}
  17. if ( !parent.IsKindOf("PlateCarrierHolster") && !parent.IsKindOf("PlateCarrierComplete") && !parent.IsKindOf("CarrierHolsterSolo") && !parent.IsKindOf("ChestHolster") )
  18. {
  19. return true;
  20. }
  21. return false;
  22. }
  23. override void OnWorkStart()
  24. {
  25. if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() ) // Client side
  26. {
  27. m_Light = PistollightLight.Cast( ScriptedLightBase.CreateLight(PistollightLight, "0 0 0", 0.08) ); // Position is zero because light is attached on parent immediately.
  28. m_Light.AttachOnMemoryPoint(this, "beamStart", "beamEnd");
  29. SetObjectMaterial(GLASS_ID, LIGHT_ON_GLASS);
  30. SetObjectMaterial(REFLECTOR_ID, LIGHT_ON_REFLECTOR);
  31. }
  32. }
  33. override void OnWork( float consumed_energy )
  34. {
  35. if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() ) // Client side
  36. {
  37. Battery9V battery = Battery9V.Cast( GetCompEM().GetEnergySource() );
  38. if (battery && m_Light)
  39. {
  40. float efficiency = battery.GetEfficiency0To1();
  41. if ( efficiency < 1 )
  42. {
  43. m_Light.SetIntensity( efficiency, GetCompEM().GetUpdateInterval() );
  44. }
  45. else
  46. {
  47. m_Light.SetIntensity( 1, 0 );
  48. }
  49. }
  50. }
  51. }
  52. override void OnWorkStop()
  53. {
  54. if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() ) // Client side
  55. {
  56. if (m_Light)
  57. m_Light.FadeOut();
  58. m_Light = NULL;
  59. SetObjectMaterial(GLASS_ID, LIGHT_OFF_GLASS);
  60. SetObjectMaterial(REFLECTOR_ID, LIGHT_OFF_REFLECTOR);
  61. }
  62. }
  63. // Inventory manipulation
  64. override void OnInventoryExit(Man player)
  65. {
  66. super.OnInventoryExit(player);
  67. if ( GetCompEM().IsWorking() )
  68. {
  69. if (player)
  70. {
  71. vector ori_rotate = player.GetOrientation();
  72. ori_rotate = ori_rotate + Vector(270,0,0);
  73. SetOrientation(ori_rotate);
  74. }
  75. }
  76. }
  77. override void SetActions()
  78. {
  79. super.SetActions();
  80. AddAction(ActionTurnOnWhileInHands);
  81. AddAction(ActionTurnOffWhileInHands);
  82. }
  83. override bool IsLightSource()
  84. {
  85. return true;
  86. }
  87. }