DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
PluginSceneManager.c
См. документацию.
1class PluginSceneManager extends PluginBase
2{
3 static string SCENE_DEFAULT_NAME = "default";
4 static string SCENE_SUFIX = "scene";
7
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
22 {
23 if ( instance == NULL )
24 {
25 instance = this;
26 }
27 }
28
29 // System Events
31 {
32 if ( instance == NULL )
33 {
34 instance = this;
35 }
36 }
37
42
43 //==========================================
44 // OnInit (System Event)
45 //==========================================
46 override void OnInit()
47 {
49 m_ModuleConfigScene = PluginConfigScene.Cast( GetPlugin(PluginConfigScene) );
51
52 //Ruler
53 m_RulerActivated = false;
57 }
58
59 //==========================================
60 // OnDestroy (destructor)
61 //==========================================
62 override void OnDestroy()
63 {
65 }
66
67 //==========================================
68 // OnMouseWheel
69 //==========================================
70 void OnMouseWheel(int wheel)
71 {
72 if ( !IsMouseInScene() )
73 {
74 return;
75 }
76
78 {
79 GetSelectedSceneObject().AddRotation(GetRotationAngle() * wheel);
80 }
81
83 }
84
85 //==========================================
86 // OnUIEditorOpened
87 //==========================================
98
99 //==========================================
100 // OnUIEditorClosed
101 //==========================================
103 {
104 m_IsOpen = false;
105
107
108 m_ModuleDeveloper.ToggleFreeCameraBackPos();
109
110 EditorUpdate();
111 }
112
113 //::::::::::::::::::::::::::::::::::::::::::
114 // Event_OnClick
115 //::::::::::::::::::::::::::::::::::::::::::
117 {
118 if ( !IsMouseInScene() || !m_IsOpen )
119 {
120 return;
121 }
122
123 // Direction Vector from current active Camera
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 {
164
165 // Ruler
166 if ( IsRulerActivated() && GetSelectedSceneObject() == NULL )
167 {
169 }
170 }
171
172 EditorUpdate();
173 }
174
175 //::::::::::::::::::::::::::::::::::::::::::
176 // Event_OnClickMiddle
177 //::::::::::::::::::::::::::::::::::::::::::
179 {
180 if ( !IsMouseInScene() || !m_IsOpen )
181 {
182 return;
183 }
184
185 if ( GetSelectedSceneObject() != NULL )
186 {
187 // Direction Vector from current active Camera
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 {
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 //::::::::::::::::::::::::::::::::::::::::::
242 {
243 if ( !IsMouseInScene() || !m_IsOpen )
244 {
245 return;
246 }
247
248 if ( GetSelectedSceneObject() != NULL )
249 {
250 // Direction Vector from current active Camera
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 //::::::::::::::::::::::::::::::::::::::::::
277 {
278 if ( !IsMouseInScene() || !m_IsOpen || m_ClassBrowserSelected == "" )
279 {
280 return null;
281 }
282
283 // Direction Vector from current active Camera
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
319
321 }
322
323 //==========================================
324 // RestoreSceneObjectsLinks
325 //==========================================
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 //==========================================
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 //==========================================
369 {
370 //Log("EditorToggle");
371
372 if ( GetGame().IsMultiplayer() )
373 {
374 return;
375 }
376
377 if ( IsOpened() )
378 {
379 // Close UI Scene Editor Menu
381 }
382 else
383 {
384 // Open UI Scene Editor Menu
386 EditorUpdate();
387 }
388 }
389
390 //==========================================
391 // IsOpened
392 //==========================================
393 bool IsOpened()
394 {
395 return m_IsOpen;
396 }
397
398 //==========================================
399 // SelectClassName
400 //==========================================
405
406 //==========================================
407 // FreeCameraControlEnable
408 //==========================================
410 {
411 // Enable Camera control
413
414 // Disable Cursor
416
417 if( GetGame().GetUIManager().GetMenu() )
419 }
420
421 //==========================================
422 // FreeCameraControlDisable
423 //==========================================
425 {
426 // Disable Camera control
428
429 // Enable Cursor
431
432 if( GetGame().GetUIManager().GetMenu() )
434 }
435
436 //==========================================
437 // DeleteSelectedObject
438 //==========================================
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
461 }
462 else
463 {
464 SceneEditorMenuCmdPopup("You cant delete player!");
465 }
466 }
467
468 EditorUpdate();
469 }
470
471 //==========================================
472 // SelectObject
473 //==========================================
475 {
476 if ( GetSelectedSceneObject() != NULL && GetSelectedSceneObject() == obj )
477 {
478 return;
479 }
480
482
483 m_SelectedObject = obj;
484
485 EditorUpdate();
486 }
487
488 //==========================================
489 // GetSelectedSceneObject
490 //==========================================
495
496 //==========================================
497 // SelectedObjectDuplicate
498 //==========================================
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 {
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
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 //==========================================
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 {
648 {
649 GetSelectedSceneObject().AddAttachment(att_name);
650 }
651
652 EditorUpdate();
653 }
654
655 //==========================================
656 // SelectedObjectRemoveAttachment
657 //==========================================
659 {
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 //==========================================
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 //==========================================
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 //==========================================
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 //==========================================
771 {
772 m_SceneData = NULL;
774 }
775
776 //==========================================
777 // SceneSave
778 //==========================================
780 {
781 m_ModuleConfigScene.ClearParams();
782 m_ModuleConfigScene.SceneDataSave(m_SceneData);
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 //==========================================
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 //==========================================
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) );
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 //==========================================
913 {
914 if ( IsRulerActivated() )
915 {
916 m_RulerActivated = false;
917 }
918 else
919 {
920 m_RulerActivated = true;
921 }
922
924 }
925
926 //==========================================
927 // ActivateRuler
928 //==========================================
930 {
931 return m_RulerActivated;
932 }
933
934 //==========================================
935 // RulerAddPoint
936 //==========================================
938 {
939 vector point_pos = GetMousePositionInScene();
940
941 m_RulerPoints.Insert( point_pos );
942
944 }
945
946 //------------------------------------------
947 // RulerClearVisuals
948 //------------------------------------------
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 //------------------------------------------
968 {
969 m_RulerPoints.Clear();
970
972 }
973
974 //==========================================
975 // GetLoadedScene
976 //==========================================
978 {
979 return m_SceneData;
980 }
981
982 //==========================================
983 // GetSelectedSceneObjectIndex
984 //==========================================
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 //==========================================
1003 {
1004 if ( m_SceneData )
1005 {
1006 return m_SceneData.GetSceneObjects();
1007 }
1008
1009 return NULL;
1010 }
1011
1012 //==========================================
1013 // GetScenePlayers
1014 //==========================================
1016 {
1017 if ( m_SceneData )
1018 {
1019 return m_SceneData.GetScenePlayers();
1020 }
1021
1022 return NULL;
1023 }
1024
1025 //==========================================
1026 // GetSceneObjectsAll
1027 //==========================================
1029 {
1030 if ( m_SceneData )
1031 {
1032 return m_SceneData.GetSceneObjectsAll();
1033 }
1034
1035 return NULL;
1036 }
1037
1038 //==========================================
1039 // GetSceneObjectByIndex
1040 //==========================================
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 //==========================================
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 //==========================================
1084 {
1085 return m_ModuleConfigScene.GetSceneList();
1086 }
1087
1088 //==========================================
1089 // DeleteSceneObject
1090 //==========================================
1092 {
1093 if ( obj != NULL )
1094 {
1095 if ( obj.GetObject() != GetGame().GetPlayer() )
1096 {
1097 obj.UnlinkAll();
1098
1099 if ( GetSelectedSceneObject() != NULL && GetSelectedSceneObject() == obj )
1100 {
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
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
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
1198 }
1199
1200 //------------------------------------------
1201 // SceneEditorMenuRefresh
1202 //------------------------------------------
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 //------------------------------------------
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 {
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 //------------------------------------------
1264 {
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()
Определения BaseBuildingBase.c:1635
map
Определения ControlsXboxNew.c:4
const CallID CALL_ID_SCENE_EDITOR_COMMAND
Определения Dispatcher.c:9
Param CallMethod(CallID call_id, Param params)
Определения Dispatcher.c:36
PlayerBase GetPlayer()
Определения ModifierBase.c:51
class OptionSelectorMultistate extends OptionSelector class_name
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:316
proto native UIManager GetUIManager()
override ScriptCallQueue GetCallQueue(int call_category)
Определения DayZGame.c:1187
proto native vector GetPointerDirection()
Returns the direction where the mouse points, from the camera view.
proto native bool ExecuteEnforceScript(string expression, string mainFnName)
Delevoper only: Executes Enforce Script expression, if there is an error, is printed into the script ...
proto native Input GetInput()
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
static Shape DrawSphere(vector pos, float size=1, int color=0x1fff7f7f, ShapeFlags flags=ShapeFlags.TRANSP|ShapeFlags.NOOUTLINE)
Определения Debug.c:319
static Shape DrawLine(vector from, vector to, int color=0xFFFFFFFF, int flags=0)
Определения Debug.c:382
Определения Debug.c:2
static void EnableFreeCameraSceneEditor(PlayerBase player)
Определения DeveloperFreeCamera.c:18
Определения Building.c:6
proto native void ChangeGameFocus(int add, int input_device=-1)
Change game focus number.
Определения EnMath.c:7
Определения ObjectTyped.c:2
Определения PPEConstants.c:68
Определения PlayerBaseClient.c:2
void SelectAndFocusPlayerObject()
Определения PluginSceneManager.c:881
void ExecuteInitScripts()
Определения PluginSceneManager.c:355
static const int SCENE_EDITOR_CMD_POPUP
Определения PluginSceneManager.c:14
void SetRotationAngle(int angle)
Определения PluginSceneManager.c:738
static bool m_IsOpen
Определения PluginCameraTools.c:4
void OnUIEditorOpened()
Определения PluginSceneManager.c:88
void RulerDelete()
Определения PluginSceneManager.c:967
SceneObject m_SelectedObject
Определения PluginSceneManager.c:1130
int GetRotationAngle()
Определения PluginSceneManager.c:746
bool SceneCanDelete(string scene_name)
Определения PluginSceneManager.c:790
void SetLoadPlayerPos(bool save)
Определения PluginSceneManager.c:722
void SelectedObjectDuplicate()
Определения PluginSceneManager.c:499
bool GetLoadPlayerPos()
Определения PluginSceneManager.c:730
void ~PluginSceneManager()
Определения PluginSceneManager.c:30
override void OnInit()
Определения PluginSceneManager.c:46
ref array< ref KeyBinding > m_KeyBindings
Определения PluginKeyBinding.c:281
void Event_OnClickMiddle()
Определения PluginSceneManager.c:178
ref SceneData m_SceneData
Определения PluginSceneManager.c:1129
array< ref ScenePlayer > GetScenePlayers()
Определения PluginSceneManager.c:1015
void EditorToggle()
Определения PluginSceneManager.c:368
bool m_IsDragging
Определения PluginSceneManager.c:1126
void DeselectObject()
Определения PluginSceneManager.c:1137
void OnMouseWheel(int wheel)
Определения PluginSceneManager.c:70
void RestoreSceneObjectsLinks()
Определения PluginSceneManager.c:326
void DeleteSceneObject(SceneObject obj)
Определения PluginSceneManager.c:1091
void SelectedObjectSetDamage(float value)
Определения PluginSceneManager.c:594
bool IsRulerActivated()
Определения PluginSceneManager.c:929
void SceneLoad(string scene_name)
Определения PluginSceneManager.c:754
void SelectedObjectSetPosZ(float value)
Определения PluginSceneManager.c:577
void LinkSceneObjects(SceneObject scene_object1, SceneObject scene_object2)
Определения PluginSceneManager.c:671
void EditorUpdate()
Определения PluginSceneManager.c:1145
TStringArray GetSceneList()
Определения PluginSceneManager.c:1083
void SceneDuplicate(string scene_name)
Определения PluginSceneManager.c:820
bool SceneDelete(string scene_name)
Определения PluginSceneManager.c:803
SceneObject GetSceneObjectByIndex(int index)
Определения PluginSceneManager.c:1041
SceneObject Event_OnDoubleClick()
Определения PluginSceneManager.c:276
void SetDrawSelection(bool draw)
Определения PluginSceneManager.c:704
void SelectedObjectSetPosX(float value)
Определения PluginSceneManager.c:543
void PluginSceneManager()
Определения PluginSceneManager.c:21
SceneObject GetSceneObjectByEntity(EntityAI entity)
Определения PluginSceneManager.c:1059
array< ref SceneObject > GetSceneObjects()
Определения PluginSceneManager.c:1002
void SelectedObjectFocus()
Определения PluginSceneManager.c:610
void SceneEditorMenuCmdSave()
Определения PluginSceneManager.c:1219
ref array< Shape > m_ShapesSceneObjects
Определения PluginSceneManager.c:1127
void SelectedObjectSetPosY(float value)
Определения PluginSceneManager.c:560
bool IsMouseInScene()
Определения PluginSceneManager.c:1227
void Event_OnClick()
Определения PluginSceneManager.c:116
static string SCENE_DEFAULT_NAME
Определения PluginSceneManager.c:3
ref array< Shape > m_RulerLines
Определения PluginSceneManager.c:10
void SceneEditorMenuCmdRefresh()
Определения PluginSceneManager.c:1203
array< ref SceneObject > GetSceneObjectsAll()
Определения PluginSceneManager.c:1028
void SelectObject(SceneObject obj)
Определения PluginSceneManager.c:474
void FreeCameraControlDisable()
Определения PluginSceneManager.c:424
void RulerAddPoint()
Определения PluginSceneManager.c:937
static const int SCENE_EDITOR_CMD_SAVE
Определения PluginSceneManager.c:15
void ExecuteEnforceScript(int index, SceneObject scene_object, string script)
Определения PluginSceneManager.c:898
float m_TimeLastClickRelease
Определения PluginSceneManager.c:1123
vector GetMousePositionInScene()
Определения PluginSceneManager.c:1263
float m_TimeLastClickPress
Определения PluginSceneManager.c:1124
void RulerToggle()
Определения PluginSceneManager.c:912
ref array< vector > m_RulerPoints
Определения PluginSceneManager.c:9
void EditorUpdateRuler()
Определения PluginSceneManager.c:1242
static string SCENE_SUFIX
Определения PluginSceneManager.c:4
string SceneGetName()
Определения PluginSceneManager.c:845
SceneObject GetSelectedSceneObject()
Определения PluginSceneManager.c:491
string m_ClassBrowserSelected
Определения PluginSceneManager.c:1131
PluginDeveloper m_ModuleDeveloper
Определения PluginCharPlacement.c:3
override void OnDestroy()
Определения PluginSceneManager.c:62
void OnUIEditorClosed()
Определения PluginSceneManager.c:102
void SelectedObjectAddAttachment(string att_name)
Определения PluginSceneManager.c:645
bool IsOpened()
Определения PluginSceneManager.c:393
void UnlinkSceneObjects(SceneObject scene_object1, SceneObject scene_object2)
Определения PluginSceneManager.c:680
PluginConfigScene m_ModuleConfigScene
Определения PluginSceneManager.c:1118
void InitLoad()
Определения PluginSceneManager.c:312
void PluginDeveloper()
Определения PluginDeveloper.c:49
bool GetDrawSelection()
Определения PluginSceneManager.c:714
static PlayerBase PLAYER
Определения PluginSceneManager.c:5
void SceneUnload()
Определения PluginSceneManager.c:770
int m_PressedMouseID
Определения PluginSceneManager.c:1125
bool m_RulerActivated
Определения PluginSceneManager.c:8
SceneData GetLoadedScene()
Определения PluginSceneManager.c:977
static const int SCENE_EDITOR_CMD_REFRESH
Определения PluginSceneManager.c:13
void Event_OnDrag()
Определения PluginSceneManager.c:241
void SceneSave()
Определения PluginSceneManager.c:779
bool AreSceneObjectsLinked(SceneObject scene_object1, SceneObject scene_object2)
Определения PluginSceneManager.c:689
void SceneRename(string scene_name, string new_name)
Определения PluginSceneManager.c:830
void DeleteSelectedObject()
Определения PluginSceneManager.c:439
void RulerClearVisuals()
Определения PluginSceneManager.c:949
static PluginKeyBinding instance
Определения PluginKeyBinding.c:16
void SetWeather(float overcast, float rain, float fog, float wind_force)
Определения PluginSceneManager.c:858
PluginConfigDebugProfile m_ModuleConfigDebugProfile
Определения PluginSceneManager.c:1119
static PluginSceneManager GetInstance()
Определения PluginSceneManager.c:38
void FreeCameraControlEnable()
Определения PluginSceneManager.c:409
void SelectedObjectSetRot(float dir)
Определения PluginSceneManager.c:530
void SelectedObjectRemoveAttachment(EntityAI e)
Определения PluginSceneManager.c:658
void SelectClassName(string class_name)
Определения PluginSceneManager.c:401
void SetDate(int year, int month, int day, int hour, int minute)
Определения PluginSceneManager.c:869
ref array< Shape > m_RulerSpheres
Определения PluginSceneManager.c:11
void SceneEditorMenuCmdPopup(string message)
Определения PluginSceneManager.c:1211
int GetSelectedSceneObjectIndex()
Определения PluginSceneManager.c:985
Определения PluginBase.c:2
Определения SceneData.c:2
void EditorShapeDeselect()
Определения SceneObject.c:135
array< SceneObject > GetLinkedSceneObjects()
Определения SceneObject.c:324
bool IsLinkedWithSceneObject(SceneObject scene_object)
Определения SceneObject.c:264
void EditorShapeSelect()
Определения SceneObject.c:127
void SetRotation(float rot)
Определения SceneObject.c:504
string GetTypeName()
Определения SceneObject.c:375
ref array< int > m_LinkedSceneObjectsIndices
Определения SceneObject.c:15
bool IsPlayer()
Определения SceneObject.c:75
void UnlinkAll()
Определения SceneObject.c:308
void SetHealth(float value)
Определения SceneObject.c:453
float GetRotation()
Определения SceneObject.c:490
void AddAttachment(string att_name)
Определения SceneObject.c:546
void EditorLineAdd(SceneObject obj)
Определения SceneObject.c:232
void LinkSceneObject(SceneObject scene_object, bool draw_line=true)
Определения SceneObject.c:280
void EditorShapeRemove()
Определения SceneObject.c:204
void EditorLineRemove(SceneObject obj)
Определения SceneObject.c:216
array< EntityAI > GetAttachments()
Определения SceneObject.c:570
void SetPosition(vector pos)
Определения SceneObject.c:402
vector GetPosition()
Определения SceneObject.c:423
vector GetSize()
Определения SceneObject.c:143
string GetInitScript()
Определения SceneObject.c:83
void EditorShapeAdd()
Определения SceneObject.c:169
EntityAI GetObject()
Определения SceneObject.c:59
void UnlinkSceneObject(SceneObject scene_object)
Определения SceneObject.c:295
Определения SceneObject.c:2
proto void Call(func fn, void param1=NULL, void param2=NULL, void param3=NULL, void param4=NULL, void param5=NULL, void param6=NULL, void param7=NULL, void param8=NULL, void param9=NULL)
adds call into the queue with given parameters and arguments (arguments are held in memory until the ...
proto native UIScriptedMenu GetMenu()
Returns most-top open menu.
proto native UIScriptedMenu EnterScriptedMenu(int id, UIMenuPanel parent)
Create & open menu with specific id (see MenuID) and set its parent.
void ShowUICursor(bool visible)
Определения UIManager.c:244
bool Back()
Close top window on windows stack, returns true when any window is closed.
Определения UIManager.c:62
override void OnShow()
Определения CameraToolsMenu.c:99
override void OnHide()
Определения CameraToolsMenu.c:109
Определения EnWidgets.c:190
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto float Normalize()
Normalizes vector. Returns length.
Определения EnConvert.c:106
proto native CGame GetGame()
array< string > TStringArray
Определения EnScript.c:685
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
const int MENU_SCENE_EDITOR
Определения constants.c:177
const string STRING_EMPTY
Определения constants.c:54
const int CALL_CATEGORY_SYSTEM
Определения tools.c:8
proto native Widget GetWidgetUnderCursor()