flashlight.c 2.2 KB

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