DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Rangefinder.c
См. документацию.
1class Rangefinder extends PoweredOptic_Base
2{
3 static const float RANGEFINDER_MAX_DISTANCE = 913.4856; //TODO adjust maximal distance to match real life rangefinder
4
5 protected ref Timer m_Timer;
7
9 {
10 }
11
13 {
14 m_IsActionActive = false;
15 }
16
17 // How frequently the measurement should be taken
19 {
20 return 0.5;
21 }
22
23 override void OnWorkStart()
24 {
25 if (GetGame().IsServer() && !m_IsActionActive) // incorrectly synchronized state from EM
26 StopWorkServer();
27
28 if( !GetGame().IsDedicatedServer())
29 {
30 PlayerBase player_this = PlayerBase.Cast( GetGame().GetPlayer() );
31 PlayerBase player_owner = PlayerBase.Cast( GetHierarchyRootPlayer() );
32
33 if ( player_this == player_owner )
34 {
36 }
37 }
38 }
39
40 override void OnWorkStop()
41 {
42 if( !GetGame().IsDedicatedServer())
43 {
44 PlayerBase player_this = PlayerBase.Cast( GetGame().GetPlayer() );
45 PlayerBase player_owner = PlayerBase.Cast( GetHierarchyRootPlayer() );
46
47 if ( player_this == player_owner )
48 {
50 }
51 }
52 }
53
55 {
56 if( !m_Timer )
57 {
59 }
60
61 m_RangeText = TextWidget.Cast( GetGame().GetWorkspace().CreateWidgets( "gui/layouts/gameplay/rangefinder_hud.layout" ) );
62
63 m_Timer.Run( GetMeasurementUpdateInterval(), this, "DoMeasurement", null, true );
64 }
65
67 {
68 if( m_Timer )
69 {
70 m_Timer.Stop();
71 }
72
73 if (m_RangeText)
74 {
75 delete m_RangeText;
76 }
77 }
78
79 // Measures the distance and returns result in formated string
81 {
82 PlayerBase player = GetPlayer();
83
84 if ( player )
85 {
88 vector contact_pos;
89 vector contact_dir;
90 int contactComponent;
91
92 DayZPhysics.RaycastRV( from, to, contact_pos, contact_dir, contactComponent, NULL , NULL, player, false, false, ObjIntersectIFire);
93
94 // Generate result
95 float dist = vector.Distance( from, contact_pos );
96 dist = Math.Round(dist);
97
98 if (dist < RANGEFINDER_MAX_DISTANCE)
99 {
100 if( dist < 10 )
101 m_RangeText.SetText( "00" + dist.ToString() );
102 else if( dist < 100 )
103 m_RangeText.SetText( "0" + dist.ToString() );
104 else
105 m_RangeText.SetText( dist.ToString() );
106 }
107 else
108 {
109 m_RangeText.SetText( "- - -" );
110 }
111 }
112 }
113
114 override void SetActions()
115 {
116 super.SetActions();
117
120 }
121
122 override void OnDebugSpawn()
123 {
124 GetInventory().CreateInInventory( "Battery9V" );
125 }
126}
void AddAction(typename actionName)
Определения AdvancedCommunication.c:220
void RemoveAction(typename actionName)
Определения AdvancedCommunication.c:252
PlayerBase GetPlayer()
Определения ModifierBase.c:51
proto native vector GetCurrentCameraPosition()
proto native vector GetCurrentCameraDirection()
static proto bool RaycastRV(vector begPos, vector endPos, out vector contactPos, out vector contactDir, out int contactComponent, set< Object > results=NULL, Object with=NULL, Object ignore=NULL, bool sorted=false, bool ground_only=false, int iType=ObjIntersectView, float radius=0.0, CollisionFlags flags=CollisionFlags.NEARESTCONTACT)
Raycasts world by given parameters.
Определения DayZPhysics.c:124
Определения EnMath.c:7
Определения PlayerBaseClient.c:2
override void SetActions()
Определения Rangefinder.c:114
void Rangefinder()
Определения Rangefinder.c:8
void ~Rangefinder()
Определения Rangefinder.c:12
static const float RANGEFINDER_MAX_DISTANCE
Определения Rangefinder.c:3
void DoMeasurement()
Определения Rangefinder.c:80
ref Timer m_Timer
Определения Rangefinder.c:5
void StopPeriodicMeasurement()
Определения Rangefinder.c:66
void StartPeriodicMeasurement()
Определения Rangefinder.c:54
override void OnDebugSpawn()
Определения Rangefinder.c:122
TextWidget m_RangeText
Определения Rangefinder.c:6
float GetMeasurementUpdateInterval()
Определения Rangefinder.c:18
override void OnWorkStop()
Определения Rangefinder.c:40
override void OnWorkStart()
Определения Rangefinder.c:23
Определения NVGoggles.c:2
Определения EnWidgets.c:220
Определения DayZPlayerImplement.c:63
proto string ToString(bool simple=true)
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
Определения EnConvert.c:106
proto native CGame GetGame()
static proto float Round(float f)
Returns mathematical round of value.
const int CALL_CATEGORY_GAMEPLAY
Определения tools.c:10