DayZ 1.24
Loading...
Searching...
No Matches
SceneObject.c
Go to the documentation of this file.
2{
3 static const int COLOR_OBJ_BBOX_NORMAL = 0x00000000;
4 static const int COLOR_OBJ_BBOX_SELECT = 0x1f007C00;
5
8 protected string m_InitScript;
9 protected string m_ObjectName;
10 protected string m_ObjectNameOrigin;
11
14
16
17 //========================================
18 // SceneObject
19 //========================================
21 {
23 {
25
26 bool is_ai = GetGame().IsKindOf(obj_name, "DZ_LightAI");
27
28 PluginDeveloper module_dev = PluginDeveloper.Cast(GetPlugin(PluginDeveloper));
29 EntityAI e = module_dev.SpawnEntityOnGroundPos(PluginSceneManager.PLAYER, obj_name, 100, 0.0, pos);
30
31 if (e != NULL)
32 {
33 if (e.IsInherited(ItemBase))
34 {
35 ItemBase item = ItemBase.Cast(e);
36 if (item.HasQuantity())
37 item.SetQuantity(item.GetQuantityMax());
38 }
39
40 m_ObjectName = e.GetType();
42 }
43 else if (obj_name != "player")
44 return NULL;
45 }
46
50
51 return this;
52 }
53
54 //----------------------------------------
55 // GetObject
56 //----------------------------------------
58 {
59 return m_ObjectPtr;
60 }
61
62 //----------------------------------------
63 // GetName
64 //----------------------------------------
65 string GetName()
66 {
67 return m_ObjectName;
68 }
69
70 //----------------------------------------
71 // IsPlayer
72 //----------------------------------------
73 bool IsPlayer()
74 {
75 return false;
76 }
77
78 //----------------------------------------
79 // GetInitScript
80 //----------------------------------------
82 {
83 return m_InitScript;
84 }
85
86 //----------------------------------------
87 // SetInitScript
88 //----------------------------------------
90 {
92 }
93
94 //========================================
95 // EditorShapeUpdatePos
96 //========================================
98 {
100 {
101 vector mat[4];
102 GetObject().GetTransform(mat);
103
104 if (m_DebugShapeBBox != NULL)
105 m_DebugShapeBBox.SetMatrix(mat);
106 }
107 }
108
109 //========================================
110 // EditorShapeSetColor
111 //========================================
113 {
115 m_DebugShapeBBox.SetColor(color);
116 }
117
118 //========================================
119 // EditorShapeSelect
120 //========================================
125
126 //========================================
127 // EditorShapeDeselect
128 //========================================
133
134 //========================================
135 // GetSize
136 //========================================
138 {
139 vector size = Vector(1, 1, 1);
140 vector min_max[2];
141
142 if (GetObject())
143 {
144 GetObject().GetCollisionBox(min_max);
145
146 size[0] = min_max[1][0] - min_max[0][0];
147 size[2] = min_max[1][2] - min_max[0][2];
148 size[1] = min_max[1][1] - min_max[0][1];
149
150 return size;
151 }
152 else
153 Print("Error: SceneObject " + m_ObjectNameOrigin + " dont has game object.");
154
155 return size;
156 }
157
158 //========================================
159 // EditorShapeAdd
160 //========================================
162 {
163 if (m_DebugShapeBBox != NULL)
164 return;
165
166 vector min = "0 0 0";
167 vector max = "0 0 0";
168
169 vector size = GetSize();
170
171 float width = size[0];
172 float height = size[1];
173 float length = size[2];
174
175 float width_h = width * 0.5;
176 float lenght_h = length * 0.5;
177
178 min[0] = -width_h;
179 min[1] = 0;
180 min[2] = -lenght_h;
181
182 max[0] = width_h;
183 max[1] = height;
184 max[2] = lenght_h;
185
186 //Log("EditorShapeAdd -> "+m_ObjectPtr.Ptr().GetType());
187
191 }
192
193 //========================================
194 // EditorShapeRemove
195 //========================================
197 {
198 if (m_DebugShapeBBox != NULL)
199 {
200 m_DebugShapeBBox.Destroy();
202 }
203 }
204
205 //========================================
206 // EditorLineRemove
207 //========================================
209 {
210 for (int i = 0; i < m_LinkedSceneObjectsShapes.Count(); i++)
211 {
212 if (m_LinkedSceneObjectsShapes.GetKey(i) == obj)
213 {
214 m_LinkedSceneObjectsShapes.GetElement(i).Destroy();
215 m_LinkedSceneObjectsShapes.Remove(obj);
216 break;
217 }
218 }
219 }
220
221 //========================================
222 // EditorLineAdd
223 //========================================
225 {
226 if (obj.GetObject() != NULL && GetObject() != NULL)
227 {
228 if (m_LinkedSceneObjectsShapes.Contains(obj))
229 EditorLineRemove(obj);
230
231 vector pos1 = obj.GetSize();
232 pos1[0] = 0; pos1[1] = pos1[1] / 2; pos1[2] = 0;
233 pos1 = pos1 + obj.GetObject().GetPosition();
234
235 vector pos2 = GetSize();
236 pos2[0] = 0; pos2[1] = pos2[1] / 2; pos2[2] = 0;
237 pos2 = pos2 + GetObject().GetPosition();
238
240 }
241 }
242
243 //========================================
244 // LinkEntityAI
245 //========================================
247 {
248 m_ObjectPtr = e;
249 }
250
251 //========================================
252 // IsLinkedWithSceneObject
253 //========================================
255 {
257 if (index >= 0)
258 return true;
259 else
260 return false;
261 }
262
263 //========================================
264 // LinkEntityAI
265 //========================================
275
276 //========================================
277 // UnlinkSceneObject
278 //========================================
288
289 //========================================
290 // UnlinkAll
291 //========================================
293 {
295
296 if (link_count > 0)
297 {
298 for (int i = 0; i < link_count; ++i)
299 PluginSceneManager.GetInstance().UnlinkSceneObjects(this, GetLinkedSceneObject(0));
300 }
301 }
302
303 //========================================
304 // GetLinkedSceneObjects
305 //========================================
310
311 //========================================
312 // GetLinkedSceneObjectsCount
313 //========================================
315 {
316 return m_LinkedSceneObjects.Count();
317 }
318
319 //========================================
320 // GetLinkedSceneObject
321 //========================================
323 {
324 return m_LinkedSceneObjects.Get(i);
325 }
326
327 //========================================
328 // GetLinkedObject
329 //========================================
331 {
333 }
334
335 //========================================
336 // Destructor
337 //========================================
339 {
341 {
342 GetGame().ObjectDelete(m_ObjectPtr);
344 }
345
346 for (int i = 0; i < m_LinkedSceneObjects.Count(); i++)
348
350 }
351
352 //========================================
353 // GetTypeName
354 //========================================
355 string GetTypeName()
356 {
357 return m_ObjectPtr.GetType();
358 }
359
360 //========================================
361 // PlaceOnSurface
362 //========================================
364 {
365 if (m_ObjectPtr)
366 {
367 if (GetGame().IsClient() && GetGame().IsMultiplayer())
368 {
369 Param par = new Param3<string, EntityAI, Param>("PlaceOnSurface", m_ObjectPtr, NULL);
371 }
372 else
373 m_ObjectPtr.PlaceOnSurface();
374 }
375 }
376
377 //========================================
378 // SetPosition
379 //========================================
381 {
382 if (m_ObjectPtr)
383 {
384 if (GetGame().IsClient() && GetGame().IsMultiplayer())
385 {
388 }
389 else
390 m_ObjectPtr.SetPosition(pos);
391 }
394 }
395
396 //========================================
397 // GetPosition
398 //========================================
400 {
401 if (m_ObjectPtr)
402 return m_ObjectPtr.GetPosition();
403 return Vector(0, 0, 0);
404 }
405
406 //========================================
407 // GetHealth
408 //========================================
409 float GetHealth()
410 {
411 if (m_ObjectPtr)
412 return m_ObjectPtr.GetHealth("", "");
413 return 0;
414 }
415
416 //========================================
417 // GetHealth
418 //========================================
420 {
421 if (m_ObjectPtr)
422 return m_ObjectPtr.GetMaxHealth("", "");
423 return 0;
424 }
425
426 //========================================
427 // SetHealth
428 //========================================
429 void SetHealth(float value)
430 {
431 if (m_ObjectPtr)
432 {
433 if (GetGame().IsClient() && GetGame().IsMultiplayer())
434 {
437 }
438 else
439 m_ObjectPtr.SetHealth("", "", value);
440 }
441 }
442
443 //========================================
444 // GetPositionAsString
445 //========================================
447 {
448 if (m_ObjectPtr)
449 return m_ObjectPtr.GetPosition().ToString(false);
450 return Vector(0, 0, 0).ToString(false);
451 }
452
453 //========================================
454 // SetPositionAsString
455 //========================================
457 {
458 SetPosition(string_pos.ToVector());
459 }
460
461 //========================================
462 // GetRotation
463 //========================================
465 {
466 if (m_ObjectPtr)
467 {
468 vector v = m_ObjectPtr.GetOrientation();
469 return v[0];
470 }
471
472 return 0;
473 }
474
475 //========================================
476 // SetRotation
477 //========================================
478 void SetRotation(float rot)
479 {
480 if (m_ObjectPtr)
481 {
482 vector v = m_ObjectPtr.GetOrientation();
483 v[0] = rot;
484 m_ObjectPtr.SetOrientation(v);
486 }
487 }
488
490 {
491 GetGame().RPCSingleParam(GetGame().GetPlayer(), ERPCs.RPC_SYNC_SCENE_OBJECT, p, true, NULL);
492 }
493
494 //========================================
495 // AddRotation
496 //========================================
498 {
499 if (m_ObjectPtr)
500 {
501 if (GetGame().IsClient() && GetGame().IsMultiplayer())
502 {
505 }
506 else
507 {
508 vector v = m_ObjectPtr.GetOrientation();
509 v[0] = v[0] + add_rot;
510 m_ObjectPtr.SetOrientation(v);
511
513 }
514 }
515 }
516
517 //========================================
518 // AddRotation
519 //========================================
521 {
522 GetObject().GetInventory().CreateAttachment(att_name);
523 }
524
525 //========================================
526 // CanAttachment
527 //========================================
529 {
530 return GetObject().GetInventory().CanAddAttachment(e);
531 }
532
533 //========================================
534 // AddRotation
535 //========================================
537 {
538 GetGame().ObjectDelete(e);
539 }
540
541 //========================================
542 // GetAttachments
543 //========================================
545 {
547
548 for (int i = 0; i < GetObject().GetInventory().AttachmentCount(); ++i)
549 ret.Insert(GetObject().GetInventory().GetAttachmentFromIndex(i));
550
551 return ret;
552 }
553
554 //========================================
555 // GetConfigAttachments
556 //========================================
558 {
559 string type_name = GetTypeName();
561
562 string cfg_path;
563
564 if (GetGame().ConfigIsExisting(CFG_VEHICLESPATH + " " + type_name))
565 cfg_path = CFG_VEHICLESPATH + " " + type_name + " attachments";
566 else if (GetGame().ConfigIsExisting(CFG_WEAPONSPATH + " " + type_name))
567 cfg_path = CFG_WEAPONSPATH + " " + type_name + " attachments";
568 else if (GetGame().ConfigIsExisting(CFG_MAGAZINESPATH + " " + type_name))
569 cfg_path = CFG_MAGAZINESPATH + " " + type_name + " attachments";
570
571 GetGame().ConfigGetTextArray(cfg_path, cfg_attachments);
572
573 return cfg_attachments;
574 }
575}
ERPCs
Definition ERPCs.c:2
PlayerBase GetPlayer()
PluginBase GetPlugin(typename plugin_type)
Definition Debug.c:14
static Shape DrawBox(vector pos1, vector pos2, int color=0x1fff7f7f)
Definition Debug.c:401
static Shape DrawArrow(vector from, vector to, float size=0.5, int color=0xFFFFFFFF, int flags=0)
Definition Debug.c:511
Base Param Class with no parameters. Used as general purpose parameter overloaded with Param1 to Para...
Definition param.c:12
void AddRotation(float add_rot)
int GetLinkedSceneObjectsCount()
void EditorShapeDeselect()
array< SceneObject > GetLinkedSceneObjects()
EntityAI m_ObjectPtr
Definition SceneObject.c:6
ref array< SceneObject > m_LinkedSceneObjects
Definition SceneObject.c:12
SceneObject GetLinkedSceneObject(int i)
bool IsLinkedWithSceneObject(SceneObject scene_object)
void LinkEntityAI(EntityAI e)
float GetHealth()
void SetInitScript(string init_script)
Definition SceneObject.c:89
void EditorShapeSelect()
EntityAI GetLinkedObject(int i)
string m_ObjectName
Definition SceneObject.c:9
TStringArray GetConfigAttachments()
void SetRotation(float rot)
Shape m_DebugShapeBBox
Definition SceneObject.c:7
string GetTypeName()
ref array< int > m_LinkedSceneObjectsIndices
Definition SceneObject.c:15
bool IsPlayer()
Definition SceneObject.c:73
void SetPositionAsString(string string_pos)
void UnlinkAll()
void SetHealth(float value)
float GetRotation()
void EditorShapeUpdatePos()
Definition SceneObject.c:97
void RemoveAttachment(EntityAI e)
void AddAttachment(string att_name)
static const int COLOR_OBJ_BBOX_NORMAL
Definition SceneObject.c:3
string m_InitScript
Definition SceneObject.c:8
void EditorLineAdd(SceneObject obj)
void EditorShapeSetColor(int color)
string GetName()
Definition SceneObject.c:65
void LinkSceneObject(SceneObject scene_object, bool draw_line=true)
void EditorShapeRemove()
void EditorLineRemove(SceneObject obj)
string GetPositionAsString()
array< EntityAI > GetAttachments()
bool CanAttachment(EntityAI e)
void SetPosition(vector pos)
vector GetPosition()
SceneObject Init(string obj_name, vector pos)
Definition SceneObject.c:20
ref map< SceneObject, Shape > m_LinkedSceneObjectsShapes
Definition SceneObject.c:13
void ~SceneObject()
vector GetSize()
void SceneObjectSynch(Param p)
string GetInitScript()
Definition SceneObject.c:81
void EditorShapeAdd()
EntityAI GetObject()
Definition SceneObject.c:57
static const int COLOR_OBJ_BBOX_SELECT
Definition SceneObject.c:4
string m_ObjectNameOrigin
Definition SceneObject.c:10
void UnlinkSceneObject(SceneObject scene_object)
void PlaceOnSurface()
float GetMaxHealth()
proto native CGame GetGame()
proto void Print(void var)
Prints content of variable to console/log.
class DiagMenu Shape
don't call destructor directly. Use Destroy() instead
array< string > TStringArray
Definition EnScript.c:666
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
const string CFG_VEHICLESPATH
Definition constants.c:209
const string CFG_WEAPONSPATH
Definition constants.c:210
const string CFG_MAGAZINESPATH
Definition constants.c:211
const string STRING_EMPTY
Definition constants.c:54