DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
UniversalLight.c
См. документацию.
1class UniversalLight extends Switchable_Base
2{
3 UniversallightLight m_Light;
4
5 static int REFLECTOR_ID = 1;
6 static int GLASS_ID = 2;
7
8 static string LIGHT_OFF_GLASS = "dz\\gear\\tools\\data\\flashlight_glass.rvmat";
9 static string LIGHT_OFF_REFLECTOR = "dz\\weapons\\attachments\\data\\m4_flashlight.rvmat";
10 static string LIGHT_ON_GLASS = "dz\\gear\\tools\\data\\flashlight_glass_on.rvmat";
11 static string LIGHT_ON_REFLECTOR = "dz\\weapons\\attachments\\data\\m4_flashlight_on.rvmat";
12
14
19
21 {
22 return m_Light;
23 }
24
25 override bool CanPutAsAttachment( EntityAI parent )
26 {
27 if ( !super.CanPutAsAttachment(parent) ) {return false;}
28
29 bool req_attachment = false;
30 bool rail_attachment_found = false;
31 int slot_id;
32 ItemBase attachment;
33 for ( int i = 0; i < parent.GetInventory().GetAttachmentSlotsCount(); i++ )
34 {
35 slot_id = parent.GetInventory().GetAttachmentSlotId(i);
36 if ( m_AttachmentSlotsCheck.Find(slot_id) != -1 )
37 {
38 req_attachment = true;
39 attachment = ItemBase.Cast(parent.GetInventory().FindAttachment(slot_id));
40 if ( attachment && attachment.ConfigIsExisting("hasRailFunctionality") && attachment.ConfigGetBool("hasRailFunctionality") )
41 rail_attachment_found = true;
42 }
43 }
44 return !req_attachment || (req_attachment && rail_attachment_found);
45 }
46
47 override void OnWorkStart()
48 {
49 if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() ) // Client side
50 {
51 m_Light = UniversallightLight.Cast( ScriptedLightBase.CreateLight(UniversallightLight, "0 0 0", 0.08) ); // Position is zero because light is attached on parent immediately.
52 m_Light.AttachOnMemoryPoint(this, "beamStart", "beamEnd");
53 SetObjectMaterial(GLASS_ID, LIGHT_ON_GLASS);
54 SetObjectMaterial(REFLECTOR_ID, LIGHT_ON_REFLECTOR);
55 }
56 }
57
58 override void OnWork( float consumed_energy )
59 {
60 if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() ) // Client side
61 {
62 Battery9V battery = Battery9V.Cast( GetCompEM().GetEnergySource() );
63
64 if (battery && m_Light)
65 {
66 float efficiency = battery.GetEfficiency0To1();
67
68 if ( efficiency < 1 )
69 {
70 m_Light.SetIntensity( efficiency, GetCompEM().GetUpdateInterval() );
71 }
72 else
73 {
74 m_Light.SetIntensity( 1, 0 );
75 }
76 }
77 }
78 }
79
80 override void OnWorkStop()
81 {
82 if ( !GetGame().IsServer() || !GetGame().IsMultiplayer() ) // Client side
83 {
84 if (m_Light)
85 m_Light.FadeOut();
86
87 m_Light = NULL;
88
89 SetObjectMaterial(GLASS_ID, LIGHT_OFF_GLASS);
90 SetObjectMaterial(REFLECTOR_ID, LIGHT_OFF_REFLECTOR);
91 }
92 }
93
94 // Inventory manipulation
95 override void OnInventoryExit(Man player)
96 {
97 super.OnInventoryExit(player);
98
99 if ( GetCompEM().IsWorking() )
100 {
101 if (player)
102 {
103 vector ori_rotate = player.GetOrientation();
104 ori_rotate = ori_rotate + Vector(270,0,0);
105 SetOrientation(ori_rotate);
106 }
107 }
108 }
109
110 override void SetActions()
111 {
112 super.SetActions();
115 }
116
117 override bool IsLightSource()
118 {
119 return true;
120 }
121
124 {
125 if (!AttSlots)
126 {
127 AttSlots = new array<int>;
128 AttSlots.Insert(InventorySlots.GetSlotIdFromString("weaponHandguardM4"));
129 AttSlots.Insert(InventorySlots.GetSlotIdFromString("weaponHandguardAK"));
130 AttSlots.Insert(InventorySlots.GetSlotIdFromString("weaponHandguardMP5"));
131 }
132 }
133}
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
float GetEfficiency0To1()
Returns efficiency of this battery. The value is synchronized from server to all clients and is accur...
Определения Battery9V.c:13
Определения Battery9V.c:2
Определения Building.c:6
static proto native int GetSlotIdFromString(string slot_name)
converts string to slot_id
provides access to slot configuration
Определения InventorySlots.c:6
Определения InventoryItem.c:731
override void OnWork(float consumed_energy)
Определения UniversalLight.c:58
static string LIGHT_OFF_GLASS
Определения TLRLight.c:8
override void OnInventoryExit(Man player)
Определения UniversalLight.c:95
override ScriptedLightBase GetLight()
Определения UniversalLight.c:20
override void OnWorkStart()
Определения UniversalLight.c:47
static int GLASS_ID
Определения TLRLight.c:6
override void SetActions()
Определения UniversalLight.c:110
PistollightLight m_Light
Определения TLRLight.c:3
void UniversalLight()
Определения UniversalLight.c:15
override void OnWorkStop()
Определения UniversalLight.c:80
void InitAttachmentsSlotsToCheck(out array< int > AttSlots)
Enter att slot types to check on attach.
Определения UniversalLight.c:123
static int REFLECTOR_ID
Определения TLRLight.c:5
static string LIGHT_OFF_REFLECTOR
Определения TLRLight.c:9
static string LIGHT_ON_GLASS
Определения TLRLight.c:10
static string LIGHT_ON_REFLECTOR
Определения TLRLight.c:11
override bool CanPutAsAttachment(EntityAI parent)
Определения UniversalLight.c:25
override bool IsLightSource()
Определения UniversalLight.c:117
ref array< int > m_AttachmentSlotsCheck
Определения UniversalLight.c:13
Определения Chainsaw.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения EnConvert.c:106
proto native CGame GetGame()
proto native vector Vector(float x, float y, float z)
Vector constructor from components.