Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
pluginscenemanager.c
Go to the documentation of this file.
1class PluginSceneManager extends PluginBase
2{
3 static string SCENE_DEFAULT_NAME = "default";
4 static string SCENE_SUFIX = "scene";
5 static PlayerBase PLAYER;
6 static PluginSceneManager instance;
7
8 bool m_RulerActivated;
9 ref array<vector> m_RulerPoints;
10 ref array<Shape> m_RulerLines;
11 ref array<Shape> m_RulerSpheres;
12
13 static const int SCENE_EDITOR_CMD_REFRESH = 0;
14 static const int SCENE_EDITOR_CMD_POPUP = 1;
15 static const int SCENE_EDITOR_CMD_SAVE = 2;
16
17 //---------------------------------------------------------------------------------
18 // >> Public scope
19
20 // System Events
21 void PluginSceneManager()
22 {
23 if ( instance == NULL )
24 {
25 instance = this;
26 }
27 }
28
29 // System Events
30 void ~PluginSceneManager()
31 {
32 if ( instance == NULL )
33 {
34 instance = this;
35 }
36 }
37
38 static PluginSceneManager GetInstance()
39 {
40 return PluginSceneManager.Cast( GetPlugin( PluginSceneManager ) );
41 }
42
43 //==========================================
44 // OnInit (System Event)
45 //==========================================
46 override void OnInit()
47 {
48 m_ModuleDeveloper = PluginDeveloper.Cast( GetPlugin(PluginDeveloper) );
49 m_ModuleConfigScene = PluginConfigScene.Cast( GetPlugin(PluginConfigScene) );
50 m_ModuleConfigDebugProfile = PluginConfigDebugProfile.Cast( GetPlugin(PluginConfigDebugProfile) );
51
52 //Ruler
53 m_RulerActivated = false;
54 m_RulerPoints = new array<vector>;
55 m_RulerLines = new array<Shape>;
56 m_RulerSpheres = new array<Shape>;
57 }
58
59 //==========================================
60 // OnDestroy (destructor)
61 //==========================================
62 override void OnDestroy()
63 {
64 SceneUnload();
65 }
66
67 //==========================================
68 // OnMouseWheel
69 //==========================================
70 void OnMouseWheel(int wheel)
71 {
72 if ( !IsMouseInScene() )
73 {
74 return;
75 }
76
77 if ( GetSelectedSceneObject() )
78 {
79 GetSelectedSceneObject().AddRotation(GetRotationAngle() * wheel);
80 }
81
82 EditorUpdate();
83 }
84
85 //==========================================
86 // OnUIEditorOpened
87 //==========================================
88 void OnUIEditorOpened()
89 {
90 m_IsOpen = true;
91
92 DeveloperFreeCamera.EnableFreeCameraSceneEditor( PlayerBase.Cast( GetGame().GetPlayer() ) );
93
94 GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Call(this.FreeCameraControlDisable);
95
96 EditorUpdate();
97 }
98
99 //==========================================
100 // OnUIEditorClosed
101 //==========================================
102 void OnUIEditorClosed()
103 {
104 m_IsOpen = false;
105
106 FreeCameraControlEnable();
107
108 m_ModuleDeveloper.ToggleFreeCameraBackPos();
109
110 EditorUpdate();
111 }
112
113 //::::::::::::::::::::::::::::::::::::::::::
114 // Event_OnClick
115 //::::::::::::::::::::::::::::::::::::::::::
116 void Event_OnClick()
117 {
118 if ( !IsMouseInScene() || !m_IsOpen )
119 {
120 return;
121 }
122
123 // Direction Vector from current active Camera
124 vector dir = GetGame().GetPointerDirection();
125
126 // Raycast from
127 vector from = FreeDebugCamera.GetInstance().GetPosition();
128 // Raycast to
129 vector to = from + ( dir * 10000 );
130 // Raycast out parameter
131 vector contact_pos;
132 vector contact_dir;
133 int contact_component;
134 set<Object> objects = new set<Object>;
135 bool selected = false;
136
137 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component, objects) )
138 {
139 for ( int i = 0; i < objects.Count(); ++i )
140 {
141 Object obj = objects.Get(i);
142
143 if ( obj.IsInherited( EntityAI ) )
144 {
145 SceneObject sc_object = SceneObject.Cast( m_SceneData.GetSceneObjectByEntityAI(EntityAI.Cast( obj ) ) );
146
147 if ( sc_object == NULL )
148 {
149 //sc_object = m_SceneData.AddObject(obj);
150 return;
151 }
152
153 SelectObject( sc_object );
154 selected = true;
155
156 break;
157 }
158 }
159 }
160
161 if ( !selected )
162 {
163 DeselectObject();
164
165 // Ruler
166 if ( IsRulerActivated() && GetSelectedSceneObject() == NULL )
167 {
168 RulerAddPoint();
169 }
170 }
171
172 EditorUpdate();
173 }
174
175 //::::::::::::::::::::::::::::::::::::::::::
176 // Event_OnClickMiddle
177 //::::::::::::::::::::::::::::::::::::::::::
178 void Event_OnClickMiddle()
179 {
180 if ( !IsMouseInScene() || !m_IsOpen )
181 {
182 return;
183 }
184
185 if ( GetSelectedSceneObject() != NULL )
186 {
187 // Direction Vector from current active Camera
188 vector dir = GetGame().GetPointerDirection();
189
190 // Raycast from
191 vector from = FreeDebugCamera.GetInstance().GetPosition();
192 // Raycast to
193 vector to = from + ( dir * 10000 );
194 // Raycast out parameter
195 vector contact_pos;
196 vector contact_dir;
197 int contact_component;
198 set<Object> objects = new set<Object>;
199 bool selected = false;
200
201 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component, objects) )
202 {
203 for ( int i = 0; i < objects.Count(); ++i )
204 {
205 Object obj = objects.Get(i);
206
207 if ( obj.IsInherited( EntityAI ) )
208 {
209 EntityAI eai = EntityAI.Cast( obj );
210 SceneObject scene_object = m_SceneData.GetSceneObjectByEntityAI(eai);
211
212 if ( !scene_object.IsPlayer() )
213 {
214 if ( scene_object != NULL && scene_object != GetSelectedSceneObject() )
215 {
216 if ( !AreSceneObjectsLinked(GetSelectedSceneObject(), scene_object) )
217 {
218 LinkSceneObjects( GetSelectedSceneObject(), scene_object );
219 }
220 else
221 {
222 UnlinkSceneObjects( GetSelectedSceneObject(), scene_object );
223 }
224 }
225 }
226 else
227 {
228 SceneEditorMenuCmdPopup("I am sorry. You cant create link on player!");
229 }
230 }
231 }
232 }
233 }
234
235 EditorUpdate();
236 }
237
238 //::::::::::::::::::::::::::::::::::::::::::
239 // Event_OnDrag
240 //::::::::::::::::::::::::::::::::::::::::::
241 void Event_OnDrag()
242 {
243 if ( !IsMouseInScene() || !m_IsOpen )
244 {
245 return;
246 }
247
248 if ( GetSelectedSceneObject() != NULL )
249 {
250 // Direction Vector from current active Camera
251 vector dir = GetGame().GetPointerDirection();
252
253 // Raycast from
254 vector from = FreeDebugCamera.GetInstance().GetPosition();
255 // Raycast to
256 vector to = from + ( dir * 10000 );
257 // Raycast out parameter
258 vector contact_pos;
259 vector contact_dir;
260 int contact_component;
261
262 //Raycast(vector begPos, vector endPos, out vector contactPos, out vector contactDir, out int contactComponent, out set<Object> results = NULL, Object with = NULL, Object ignore = NULL, bool sorted = false, bool ground_only = false, int iType = ObjIntersectView, float radius = 0.0);
263
264 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component, NULL, NULL, NULL, false, true) )
265 {
266 GetSelectedSceneObject().SetPosition(contact_pos);
267 }
268
269 EditorUpdate();
270 }
271 }
272
273 //::::::::::::::::::::::::::::::::::::::::::
274 // Event_OnDoubleClick
275 //::::::::::::::::::::::::::::::::::::::::::
276 SceneObject Event_OnDoubleClick()
277 {
278 if ( !IsMouseInScene() || !m_IsOpen || m_ClassBrowserSelected == "" )
279 {
280 return null;
281 }
282
283 // Direction Vector from current active Camera
284 vector dir = GetGame().GetPointerDirection();
285
286 // Raycast from
287 vector from = FreeDebugCamera.GetInstance().GetPosition();
288 // Raycast to
289 vector to = from + ( dir * 10000 );
290 // Raycast out parameter
291 vector contact_pos;
292 vector contact_dir;
293 int contact_component;
294
295 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component) )
296 {
297 SceneObject obj = m_SceneData.CreateSceneObject(m_ClassBrowserSelected, contact_pos);
298
299 if ( obj != NULL )
300 {
301 SelectObject(obj);
302 return obj;
303 }
304 }
305
306 return NULL;
307 }
308
309 //==========================================
310 // Load
311 //==========================================
312 void InitLoad()
313 {
314 PLAYER = PlayerBase.Cast( GetGame().GetPlayer() );
315
316 SceneLoad( PluginMissionConfig.GetInstance().GetSceneEditorName() );
317
318 RestoreSceneObjectsLinks();
319
320 ExecuteInitScripts();
321 }
322
323 //==========================================
324 // RestoreSceneObjectsLinks
325 //==========================================
326 void RestoreSceneObjectsLinks()
327 {
328 array<ref SceneObject> scene_objects = GetSceneObjects();
329
330 for ( int i = 0; i < scene_objects.Count(); i++ )
331 {
332 SceneObject scene_object = scene_objects.Get(i);
333
334 array<int> linked_scene_objects_indices = scene_object.m_LinkedSceneObjectsIndices;
335 if (linked_scene_objects_indices)
336 {
337 for ( int j = 0; j < linked_scene_objects_indices.Count(); j++ )
338 {
339 int index = linked_scene_objects_indices.Get(j);
340 if ( index >= 0 && index < scene_objects.Count() )
341 {
342 scene_object.LinkSceneObject( scene_objects.Get(index), false );
343
344//PrintString("Load link: "+ ToString(scene_object.GetObject()) +" <-> "+ ToString(scene_objects.Get(index).GetObject()) );
345 }
346 }
347 }
348 scene_object.m_LinkedSceneObjectsIndices = NULL;
349 }
350 }
351
352 //==========================================
353 // ExecuteInitScripts
354 //==========================================
355 void ExecuteInitScripts()
356 {
357 array<ref SceneObject> scene_objects = GetSceneObjects();
358 for ( int i = 0; i < scene_objects.Count(); i++ )
359 {
360 SceneObject scene_object = scene_objects.Get(i);
361 ExecuteEnforceScript( i, scene_object, scene_object.GetInitScript() );
362 }
363 }
364
365 //==========================================
366 // EditorToggle
367 //==========================================
368 void EditorToggle()
369 {
370 //Log("EditorToggle");
371
372 if ( GetGame().IsMultiplayer() )
373 {
374 return;
375 }
376
377 if ( IsOpened() )
378 {
379 // Close UI Scene Editor Menu
380 GetGame().GetUIManager().Back();
381 }
382 else
383 {
384 // Open UI Scene Editor Menu
385 GetGame().GetUIManager().EnterScriptedMenu(MENU_SCENE_EDITOR, NULL);
386 EditorUpdate();
387 }
388 }
389
390 //==========================================
391 // IsOpened
392 //==========================================
393 bool IsOpened()
394 {
395 return m_IsOpen;
396 }
397
398 //==========================================
399 // SelectClassName
400 //==========================================
401 void SelectClassName(string class_name)
402 {
403 m_ClassBrowserSelected = class_name;
404 }
405
406 //==========================================
407 // FreeCameraControlEnable
408 //==========================================
409 void FreeCameraControlEnable()
410 {
411 // Enable Camera control
412 GetGame().GetInput().ChangeGameFocus(-1);
413
414 // Disable Cursor
415 GetGame().GetUIManager().ShowUICursor(false);
416
417 if( GetGame().GetUIManager().GetMenu() )
418 GetGame().GetUIManager().GetMenu().OnHide();
419 }
420
421 //==========================================
422 // FreeCameraControlDisable
423 //==========================================
424 void FreeCameraControlDisable()
425 {
426 // Disable Camera control
427 GetGame().GetInput().ChangeGameFocus(1);
428
429 // Enable Cursor
430 GetGame().GetUIManager().ShowUICursor(true);
431
432 if( GetGame().GetUIManager().GetMenu() )
433 GetGame().GetUIManager().GetMenu().OnShow();
434 }
435
436 //==========================================
437 // DeleteSelectedObject
438 //==========================================
439 void DeleteSelectedObject()
440 {
441 SceneObject selected_obj = GetSelectedSceneObject();
442
443 if ( selected_obj != NULL )
444 {
445 if ( !selected_obj.IsPlayer() )
446 {
447 array<ref SceneObject> scene_objects = GetSceneObjects();
448 for ( int i = 0; i < scene_objects.Count(); i++ )
449 {
450 if ( AreSceneObjectsLinked(scene_objects.Get(i), selected_obj) )
451 {
452 UnlinkSceneObjects(scene_objects.Get(i), selected_obj);
453 }
454 }
455
456 m_SceneData.DeleteSceneObject(selected_obj);
457
458 scene_objects.RemoveItem(selected_obj);
459
460 DeselectObject();
461 }
462 else
463 {
464 SceneEditorMenuCmdPopup("You cant delete player!");
465 }
466 }
467
468 EditorUpdate();
469 }
470
471 //==========================================
472 // SelectObject
473 //==========================================
474 void SelectObject(SceneObject obj)
475 {
476 if ( GetSelectedSceneObject() != NULL && GetSelectedSceneObject() == obj )
477 {
478 return;
479 }
480
481 DeselectObject();
482
483 m_SelectedObject = obj;
484
485 EditorUpdate();
486 }
487
488 //==========================================
489 // GetSelectedSceneObject
490 //==========================================
491 SceneObject GetSelectedSceneObject()
492 {
493 return m_SelectedObject;
494 }
495
496 //==========================================
497 // SelectedObjectDuplicate
498 //==========================================
499 void SelectedObjectDuplicate()
500 {
501 SceneObject selected_obj = GetSelectedSceneObject();
502
503 if ( selected_obj )
504 {
505 if ( selected_obj.GetObject() == PLAYER )
506 {
507 return;
508 }
509
510 vector size = GetSelectedSceneObject().GetSize();
511
512 vector new_pos = selected_obj.GetPosition() + Vector(1, 0, 1) + size;
513
514 SceneObject obj = m_SceneData.CreateSceneObject(selected_obj.GetTypeName(), new_pos );
515 obj.SetRotation(selected_obj.GetRotation());
516
517 array<EntityAI> attachments = selected_obj.GetAttachments();
518 for ( int i = 0; i < attachments.Count(); i++ )
519 {
520 obj.AddAttachment( attachments.Get(i).GetType() );
521 }
522
523 SelectObject(obj);
524 }
525 }
526
527 //==========================================
528 // SelectedObjectSetRot
529 //==========================================
530 void SelectedObjectSetRot(float dir)
531 {
532 if ( GetSelectedSceneObject() )
533 {
534 GetSelectedSceneObject().SetRotation(dir);
535
536 EditorUpdate();
537 }
538 }
539
540 //==========================================
541 // SelectedObjectSetPosX
542 //==========================================
543 void SelectedObjectSetPosX(float value)
544 {
545 SceneObject selected_obj = GetSelectedSceneObject();
546
547 if ( selected_obj )
548 {
549 vector v = selected_obj.GetPosition();
550 v[0] = value;
551 selected_obj.SetPosition(v);
552
553 EditorUpdate();
554 }
555 }
556
557 //==========================================
558 // SelectedObjectSetPosY
559 //==========================================
560 void SelectedObjectSetPosY(float value)
561 {
562 SceneObject selected_obj = GetSelectedSceneObject();
563
564 if ( selected_obj )
565 {
566 vector v = selected_obj.GetPosition();
567 v[1] = value;
568 selected_obj.SetPosition(v);
569
570 EditorUpdate();
571 }
572 }
573
574 //==========================================
575 // SelectedObjectSetPosZ
576 //==========================================
577 void SelectedObjectSetPosZ(float value)
578 {
579 SceneObject selected_obj = GetSelectedSceneObject();
580
581 if ( GetSelectedSceneObject() )
582 {
583 vector v = selected_obj.GetPosition();
584 v[2] = value;
585 selected_obj.SetPosition(v);
586
587 EditorUpdate();
588 }
589 }
590
591 //==========================================
592 // SelectedObjectSetDamage
593 //==========================================
594 void SelectedObjectSetDamage(float value)
595 {
596 SceneObject selected_obj = GetSelectedSceneObject();
597 EntityAI selected_obj_EAI = selected_obj.GetObject();
598
599 if ( selected_obj )
600 {
601 selected_obj.SetHealth(Math.Clamp ( value, 0, selected_obj_EAI.GetMaxHealth("", "") ));
602
603 EditorUpdate();
604 }
605 }
606
607 //==========================================
608 // SelectedObjectFocus
609 //==========================================
610 void SelectedObjectFocus()
611 {
612 SceneObject selected_obj = GetSelectedSceneObject();
613
614 if ( selected_obj )
615 {
616 vector cam_pos = FreeDebugCamera.GetInstance().GetPosition();
617 vector obj_pos = selected_obj.GetPosition();
618 vector view_target = obj_pos;
619
620 vector obj_size = selected_obj.GetSize();
621
622 cam_pos = obj_pos;
623
624 cam_pos[0] = cam_pos[0] + ( obj_size[0] * 2 );
625 cam_pos[1] = cam_pos[1] + obj_size[1] + 0.5;
626 cam_pos[2] = cam_pos[2] + ( obj_size[2] * 2 );
627
628 view_target[1] = view_target[1] + (obj_size[1] * 0.5);
629
630 vector cam_dir = view_target - cam_pos;
631 cam_dir.Normalize();
632
633 FreeDebugCamera.GetInstance().SetPosition(cam_pos);
634 FreeDebugCamera.GetInstance().SetDirection(cam_dir);
635
636 //vector debug_pos = cam_pos + (cam_dir * 50);
637 //Debug.DrawLine(cam_pos, debug_pos);
638 //Debug.DrawSphere(cam_pos);
639 }
640 }
641
642 //==========================================
643 // SelectedObjectAddAttachment
644 //==========================================
645 void SelectedObjectAddAttachment(string att_name)
646 {
647 if ( GetSelectedSceneObject() )
648 {
649 GetSelectedSceneObject().AddAttachment(att_name);
650 }
651
652 EditorUpdate();
653 }
654
655 //==========================================
656 // SelectedObjectRemoveAttachment
657 //==========================================
658 void SelectedObjectRemoveAttachment(EntityAI e)
659 {
660 if ( GetSelectedSceneObject() )
661 {
662 GetSelectedSceneObject().RemoveAttachment(e);
663 }
664
665 EditorUpdate();
666 }
667
668 //==========================================
669 // LinkSceneObjects
670 //==========================================
671 void LinkSceneObjects(SceneObject scene_object1, SceneObject scene_object2)
672 {
673 scene_object1.LinkSceneObject(scene_object2);
674 scene_object2.LinkSceneObject(scene_object1);
675 }
676
677 //==========================================
678 // UnlinkSceneObjects
679 //==========================================
680 void UnlinkSceneObjects(SceneObject scene_object1, SceneObject scene_object2)
681 {
682 scene_object1.UnlinkSceneObject(scene_object2);
683 scene_object2.UnlinkSceneObject(scene_object1);
684 }
685
686 //==========================================
687 // AreSceneObjectsLinked
688 //==========================================
689 bool AreSceneObjectsLinked(SceneObject scene_object1, SceneObject scene_object2)
690 {
691 if ( scene_object1.IsLinkedWithSceneObject(scene_object2) && scene_object2.IsLinkedWithSceneObject(scene_object1) )
692 {
693 return true;
694 }
695 else
696 {
697 return false;
698 }
699 }
700
701 //==========================================
702 // SetDrawSelection
703 //==========================================
704 void SetDrawSelection(bool draw)
705 {
706 m_ModuleConfigDebugProfile.SetSceneEditorDrawSelection(draw);
707
708 EditorUpdate();
709 }
710
711 //==========================================
712 // GetDrawSelection
713 //==========================================
714 bool GetDrawSelection()
715 {
716 return m_ModuleConfigDebugProfile.GetSceneEditorDrawSelection();
717 }
718
719 //==========================================
720 // SetLoadPlayerPos
721 //==========================================
722 void SetLoadPlayerPos(bool save)
723 {
724 m_ModuleConfigDebugProfile.SetSceneEditorLoadPlayerPos(save);
725 }
726
727 //==========================================
728 // SetLoadPlayerPos
729 //==========================================
730 bool GetLoadPlayerPos()
731 {
732 return m_ModuleConfigDebugProfile.GetSceneEditorLoadPlayerPos();
733 }
734
735 //==========================================
736 // SetRotationAngle
737 //==========================================
738 void SetRotationAngle(int angle)
739 {
740 m_ModuleConfigDebugProfile.SetSceneEditorRotationAngle(angle);
741 }
742
743 //==========================================
744 // GetRotationAngle
745 //==========================================
746 int GetRotationAngle()
747 {
748 return m_ModuleConfigDebugProfile.GetSceneEditorRotationAngle();
749 }
750
751 //==========================================
752 // SceneLoad
753 //==========================================
754 void SceneLoad(string scene_name)
755 {
756 SceneUnload();
757
758 PluginMissionConfig.GetInstance().SetSceneEditorName(scene_name);
759 m_SceneData = m_ModuleConfigScene.SceneDataLoad(scene_name);
760
761 if ( !(GetGame().IsMultiplayer() && GetGame().IsServer()) )
762 {
763 EditorUpdate();
764 }
765 }
766
767 //==========================================
768 // SceneUnload
769 //==========================================
770 void SceneUnload()
771 {
772 m_SceneData = NULL;
773 DeselectObject();
774 }
775
776 //==========================================
777 // SceneSave
778 //==========================================
779 void SceneSave()
780 {
781 m_ModuleConfigScene.ClearParams();
782 m_ModuleConfigScene.SceneDataSave(m_SceneData);
783 SceneEditorMenuCmdSave();
784 EditorUpdate();
785 }
786
787 //==========================================
788 // SceneDelete
789 //==========================================
790 bool SceneCanDelete(string scene_name)
791 {
792 if ( scene_name == m_SceneData.GetNameScene() )
793 {
794 return false;
795 }
796
797 return true;
798 }
799
800 //==========================================
801 // SceneDelete
802 //==========================================
803 bool SceneDelete(string scene_name)
804 {
805 if ( scene_name == m_SceneData.GetNameScene() )
806 {
807 return false;
808 }
809
810 m_ModuleConfigScene.SceneDelete(scene_name);
811
812 EditorUpdate();
813
814 return true;
815 }
816
817 //==========================================
818 // SceneDelete
819 //==========================================
820 void SceneDuplicate(string scene_name)
821 {
822 m_ModuleConfigScene.SceneDuplicate(scene_name);
823
824 EditorUpdate();
825 }
826
827 //==========================================
828 // SceneRename
829 //==========================================
830 void SceneRename(string scene_name, string new_name)
831 {
832 m_ModuleConfigScene.SceneRename(scene_name, new_name);
833
834 if ( scene_name == m_SceneData.GetNameScene() )
835 {
836 m_SceneData.SetNameScene(new_name);
837 }
838
839 EditorUpdate();
840 }
841
842 //==========================================
843 // SceneGetName
844 //==========================================
845 string SceneGetName()
846 {
847 if ( m_SceneData )
848 {
849 return m_SceneData.GetNameScene();
850 }
851
852 return STRING_EMPTY;
853 }
854
855 //==========================================
856 // SetWeather
857 //==========================================
858 void SetWeather(float overcast, float rain, float fog, float wind_force)
859 {
860 m_SceneData.SetInitOvercast(overcast);
861 m_SceneData.SetInitRain(rain);
862 m_SceneData.SetInitFog(fog);
863 m_SceneData.SetInitWindForce(wind_force);
864 }
865
866 //==========================================
867 // SetDate
868 //==========================================
869 void SetDate( int year, int month, int day, int hour, int minute )
870 {
871 m_SceneData.SetInitYear(year);
872 m_SceneData.SetInitMonth(month);
873 m_SceneData.SetInitDay(day);
874 m_SceneData.SetInitHour(hour);
875 m_SceneData.SetInitMinute(minute);
876 }
877
878 //==========================================
879 // SelectAndFocusPlayerObject
880 //==========================================
881 void SelectAndFocusPlayerObject()
882 {
883 array<ref SceneObject> scene_objects = GetSceneObjects();
884 for ( int i = 0; i < scene_objects.Count(); i++ )
885 {
886 if ( scene_objects.Get(i).GetObject() == GetGame().GetPlayer() )
887 {
888 SelectObject( scene_objects.Get(i) );
889 SelectedObjectFocus();
890 break;
891 }
892 }
893 }
894
895 //------------------------------------------
896 // ExecuteEnforceScript
897 //------------------------------------------
898 void ExecuteEnforceScript( int index, SceneObject scene_object, string script )
899 {
900 if ( script != "" )
901 {
902 string cls = scene_object.GetObject().ClassName();
903 string wrapped_script = "void scMngMain() \n{\n PluginSceneManager se = GetPlugin(Type(\"PluginSceneManager\")); \n SceneObject this_obj = se.GetSceneObjectByIndex(" + index.ToString() + "); \n " + cls + " this_eai = this_obj.GetObject(); \n " + script + "\n}\n";
904
905 GetGame().ExecuteEnforceScript(wrapped_script, "scMngMain");
906 }
907 }
908
909 //==========================================
910 // RulerToggle
911 //==========================================
912 void RulerToggle()
913 {
914 if ( IsRulerActivated() )
915 {
916 m_RulerActivated = false;
917 }
918 else
919 {
920 m_RulerActivated = true;
921 }
922
923 SceneEditorMenuCmdRefresh();
924 }
925
926 //==========================================
927 // ActivateRuler
928 //==========================================
929 bool IsRulerActivated()
930 {
931 return m_RulerActivated;
932 }
933
934 //==========================================
935 // RulerAddPoint
936 //==========================================
937 void RulerAddPoint()
938 {
939 vector point_pos = GetMousePositionInScene();
940
941 m_RulerPoints.Insert( point_pos );
942
943 EditorUpdateRuler();
944 }
945
946 //------------------------------------------
947 // RulerClearVisuals
948 //------------------------------------------
949 void RulerClearVisuals()
950 {
951 for ( int i = 0; i < m_RulerLines.Count(); ++i )
952 {
953 m_RulerLines.Get(i).Destroy();
954 }
955 m_RulerLines.Clear();
956
957 for ( int j = 0; j < m_RulerSpheres.Count(); ++j )
958 {
959 m_RulerSpheres.Get(j).Destroy();
960 }
961 m_RulerSpheres.Clear();
962 }
963
964 //------------------------------------------
965 // RulerDelete
966 //------------------------------------------
967 void RulerDelete()
968 {
969 m_RulerPoints.Clear();
970
971 EditorUpdateRuler();
972 }
973
974 //==========================================
975 // GetLoadedScene
976 //==========================================
977 SceneData GetLoadedScene()
978 {
979 return m_SceneData;
980 }
981
982 //==========================================
983 // GetSelectedSceneObjectIndex
984 //==========================================
985 int GetSelectedSceneObjectIndex()
986 {
987 array<ref SceneObject> scene_objects = GetSceneObjects();
988 for ( int i = 0; i < scene_objects.Count(); i++ )
989 {
990 if ( GetSelectedSceneObject() == scene_objects.Get(i) )
991 {
992 return i;
993 }
994 }
995
996 return -1;
997 }
998
999 //==========================================
1000 // GetSceneObjects
1001 //==========================================
1002 array<ref SceneObject> GetSceneObjects()
1003 {
1004 if ( m_SceneData )
1005 {
1006 return m_SceneData.GetSceneObjects();
1007 }
1008
1009 return NULL;
1010 }
1011
1012 //==========================================
1013 // GetScenePlayers
1014 //==========================================
1015 array<ref ScenePlayer> GetScenePlayers()
1016 {
1017 if ( m_SceneData )
1018 {
1019 return m_SceneData.GetScenePlayers();
1020 }
1021
1022 return NULL;
1023 }
1024
1025 //==========================================
1026 // GetSceneObjectsAll
1027 //==========================================
1028 array<ref SceneObject> GetSceneObjectsAll()
1029 {
1030 if ( m_SceneData )
1031 {
1032 return m_SceneData.GetSceneObjectsAll();
1033 }
1034
1035 return NULL;
1036 }
1037
1038 //==========================================
1039 // GetSceneObjectByIndex
1040 //==========================================
1041 SceneObject GetSceneObjectByIndex( int index )
1042 {
1043 array<ref SceneObject> scene_objects = GetSceneObjects();
1044
1045 if ( scene_objects != NULL )
1046 {
1047 if ( index > -1 && index < scene_objects.Count() )
1048 {
1049 return scene_objects.Get( index );
1050 }
1051 }
1052
1053 return NULL;
1054 }
1055
1056 //==========================================
1057 // GetSceneObjectByEntity
1058 //==========================================
1059 SceneObject GetSceneObjectByEntity( EntityAI entity )
1060 {
1061 array<ref SceneObject> scene_objects = GetSceneObjects();
1062
1063 if ( scene_objects != NULL )
1064 {
1065 for ( int i = 0; i <= scene_objects.Count(); ++i )
1066 {
1067 SceneObject obj = scene_objects.Get(i);
1068 EntityAI e = obj.GetObject();
1069
1070 if ( e == entity )
1071 {
1072 return obj;
1073 }
1074 }
1075 }
1076
1077 return NULL;
1078 }
1079
1080 //==========================================
1081 // GetSceneList
1082 //==========================================
1083 TStringArray GetSceneList()
1084 {
1085 return m_ModuleConfigScene.GetSceneList();
1086 }
1087
1088 //==========================================
1089 // DeleteSceneObject
1090 //==========================================
1091 void DeleteSceneObject(SceneObject obj)
1092 {
1093 if ( obj != NULL )
1094 {
1095 if ( obj.GetObject() != GetGame().GetPlayer() )
1096 {
1097 obj.UnlinkAll();
1098
1099 if ( GetSelectedSceneObject() != NULL && GetSelectedSceneObject() == obj )
1100 {
1101 DeselectObject();
1102 }
1103
1104 m_SceneData.DeleteSceneObject(obj);
1105 }
1106 else
1107 {
1108 SceneEditorMenuCmdPopup("You cant delete player!");
1109 }
1110 }
1111
1112 EditorUpdate();
1113 }
1114
1115 //---------------------------------------------------------------------------------
1116 // >> Protected scope
1117 protected PluginDeveloper m_ModuleDeveloper;
1118 protected PluginConfigScene m_ModuleConfigScene;
1120
1121 //---------------------------------------------------------------------------------
1122 // >> protected Scope
1123 protected float m_TimeLastClickRelease;
1124 protected float m_TimeLastClickPress;
1125 protected int m_PressedMouseID;
1126 protected bool m_IsDragging;
1129 protected ref SceneData m_SceneData;
1131 protected string m_ClassBrowserSelected;
1132 protected bool m_IsOpen;
1133
1134 //------------------------------------------
1135 // DeselectObject
1136 //------------------------------------------
1137 private void DeselectObject()
1138 {
1139 m_SelectedObject = NULL;
1140 }
1141
1142 //------------------------------------------
1143 // EditorUpdate
1144 //------------------------------------------
1145 protected void EditorUpdate()
1146 {
1147 if ( GetGame().IsMultiplayer() )
1148 {
1149 return;
1150 }
1151
1152 array<ref SceneObject> objects = GetSceneObjects();
1153 if( !objects )
1154 return;
1155 for ( int i = 0; i < objects.Count(); ++i )
1156 {
1157 SceneObject obj = objects.Get(i);
1158
1159 array<SceneObject> linked_scene_objects = obj.GetLinkedSceneObjects();
1160 int j;
1161
1162 if ( IsOpened() )
1163 {
1164 obj.EditorShapeAdd();
1165
1166 if ( GetSelectedSceneObject() && GetSelectedSceneObject() == obj )
1167 {
1168 if ( GetDrawSelection() )
1169 {
1170 obj.EditorShapeSelect();
1171 }
1172 }
1173 else
1174 {
1175 obj.EditorShapeDeselect();
1176 }
1177
1178 for ( j = 0; j < linked_scene_objects.Count(); j++ )
1179 {
1180 obj.EditorLineAdd( linked_scene_objects.Get(j) );
1181 }
1182 }
1183 else
1184 {
1185 obj.EditorShapeRemove();
1186
1187 if (linked_scene_objects)
1188 {
1189 for ( j = 0; j < linked_scene_objects.Count(); j++ )
1190 {
1191 obj.EditorLineRemove( linked_scene_objects.Get(j) );
1192 }
1193 }
1194 }
1195 }
1196
1197 SceneEditorMenuCmdRefresh();
1198 }
1199
1200 //------------------------------------------
1201 // SceneEditorMenuRefresh
1202 //------------------------------------------
1203 private void SceneEditorMenuCmdRefresh()
1204 {
1205 CallMethod(CALL_ID_SCENE_EDITOR_COMMAND, new Param2<int, Param>(SCENE_EDITOR_CMD_REFRESH, NULL));
1206 }
1207
1208 //------------------------------------------
1209 // SceneEditorMenuCmdPopup
1210 //------------------------------------------
1211 private void SceneEditorMenuCmdPopup(string message)
1212 {
1213 CallMethod(CALL_ID_SCENE_EDITOR_COMMAND, new Param2<int, Param1<string>>(SCENE_EDITOR_CMD_POPUP, new Param1<string>(message)));
1214 }
1215
1216 //------------------------------------------
1217 // SceneEditorMenuCmdSave
1218 //------------------------------------------
1219 private void SceneEditorMenuCmdSave()
1220 {
1221 CallMethod(CALL_ID_SCENE_EDITOR_COMMAND, new Param2<int, Param>(SCENE_EDITOR_CMD_SAVE, NULL));
1222 }
1223
1224 //------------------------------------------
1225 // IsMouseInScene
1226 //------------------------------------------
1227 private bool IsMouseInScene()
1228 {
1229 Widget widget_under_mouse = GetWidgetUnderCursor();
1230
1231 if ( widget_under_mouse != NULL && widget_under_mouse.GetName() == "pnl_SceneControl" )
1232 {
1233 return true;
1234 }
1235
1236 return false;
1237 }
1238
1239 //------------------------------------------
1240 // EditorUpdateRuler
1241 //------------------------------------------
1242 private void EditorUpdateRuler()
1243 {
1244 RulerClearVisuals();
1245
1246 for ( int i = 0; i < m_RulerPoints.Count(); ++i )
1247 {
1248 vector pos1 = m_RulerPoints.Get(i);
1249
1250 m_RulerSpheres.Insert(Debug.DrawSphere(pos1, 0.1));
1251
1252 if ( i < m_RulerPoints.Count() - 1 )
1253 {
1254 vector pos2 = m_RulerPoints.Get(i + 1);
1255 m_RulerLines.Insert(Debug.DrawLine(pos1, pos2));
1256 }
1257 }
1258 }
1259
1260 //------------------------------------------
1261 // GetMousePositionInScene
1262 //------------------------------------------
1263 private vector GetMousePositionInScene()
1264 {
1265 vector dir = GetGame().GetPointerDirection();
1266 vector from = FreeDebugCamera.GetInstance().GetPosition();
1267 vector to = from + ( dir * 10000 );
1268 vector contact_pos;
1269 vector contact_dir;
1270 int contact_component;
1271
1272 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component) )
1273 {
1274 return contact_pos;
1275 }
1276
1277 return "0 0 0";
1278 }
1279}
bool IsOpened()
@ PLAYER
indicates if driver is controlled by player
Definition boat.c:9
Definition debug.c:2
Definition enmath.c:7
Plugin interface for controlling of agent pool system.
Definition pluginbase.c:2
SceneObject m_SelectedObject
ref SceneData m_SceneData
ref array< Shape > m_ShapesSceneObjects
string m_ClassBrowserSelected
PluginConfigScene m_ModuleConfigScene
PluginConfigDebugProfile m_ModuleConfigDebugProfile
ref map< int, KeyBinding > m_KeyBindings
void EditorShapeDeselect()
array< SceneObject > GetLinkedSceneObjects()
bool IsLinkedWithSceneObject(SceneObject scene_object)
void EditorShapeSelect()
void SetRotation(float rot)
string GetTypeName()
ref array< int > m_LinkedSceneObjectsIndices
Definition sceneobject.c:15
bool IsPlayer()
Definition sceneobject.c:75
void UnlinkAll()
void SetHealth(float value)
float GetRotation()
void AddAttachment(string att_name)
void EditorLineAdd(SceneObject obj)
void LinkSceneObject(SceneObject scene_object, bool draw_line=true)
void EditorShapeRemove()
void EditorLineRemove(SceneObject obj)
array< EntityAI > GetAttachments()
void SetPosition(vector pos)
vector GetPosition()
vector GetSize()
string GetInitScript()
Definition sceneobject.c:83
void EditorShapeAdd()
EntityAI GetObject()
Definition sceneobject.c:59
void UnlinkSceneObject(SceneObject scene_object)
override void OnShow()
override void OnHide()
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
const CallID CALL_ID_SCENE_EDITOR_COMMAND
Definition dispatcher.c:9
Param CallMethod(CallID call_id, Param params)
Definition dispatcher.c:36
proto native CGame GetGame()
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
const int MENU_SCENE_EDITOR
Definition constants.c:177
void OnInit()
Callback for user defined initialization. Called for all suites during TestHarness....
Definition freezestate.c:81
const string STRING_EMPTY
Definition constants.c:54
const int CALL_CATEGORY_SYSTEM
Definition tools.c:8
PlayerBase GetPlayer()
class OptionSelectorMultistate extends OptionSelector class_name
override void OnDestroy()
void Event_OnClick()
PluginBase GetPlugin(typename plugin_type)
Widget m_SelectedObject
Definition radialmenu.c:16