Dayz Explorer  1.24.157551 (v105080)
Dayz Code Explorer by Zeroy
pluginscenemanager.c
Go to the documentation of this file.
1 class 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;
1119  protected PluginConfigDebugProfile m_ModuleConfigDebugProfile;
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;
1127  protected ref array<Shape> m_ShapesSceneObjects;
1128  protected ref map<int, KeyBinding> m_KeyBindings;
1129  protected ref SceneData m_SceneData;
1130  protected SceneObject m_SelectedObject;
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 }
Param2
Definition: ppeconstants.c:66
GetGame
proto native CGame GetGame()
CALL_CATEGORY_SYSTEM
const int CALL_CATEGORY_SYSTEM
Definition: tools.c:8
STRING_EMPTY
const string STRING_EMPTY
Definition: constants.c:54
MENU_SCENE_EDITOR
const int MENU_SCENE_EDITOR
Definition: constants.c:167
GetWidgetUnderCursor
proto native Widget GetWidgetUnderCursor()
Event_OnClick
void Event_OnClick()
Definition: plugindayzcreatureaidebug.c:595
DeveloperFreeCamera
Definition: developerfreecamera.c:1
PluginConfigDebugProfile
Definition: pluginconfigdebugprofilefixed.c:1
CALL_ID_SCENE_EDITOR_COMMAND
const CallID CALL_ID_SCENE_EDITOR_COMMAND
Definition: dispatcher.c:9
CallMethod
Param CallMethod(CallID call_id, Param params)
Definition: dispatcher.c:36
SceneObject
Definition: sceneobject.c:1
PluginBase
Definition: pluginadminlog.c:1
GetPlugin
PluginBase GetPlugin(typename plugin_type)
Definition: pluginmanager.c:316
PlayerBase
Definition: playerbaseclient.c:1
map
map
Definition: controlsxboxnew.c:3
vector
Definition: enconvert.c:105
Object
Definition: objecttyped.c:1
class_name
class OptionSelectorMultistate extends OptionSelector class_name
array< vector >
PLAYER
@ PLAYER
Definition: edryingincrementcategory.c:4
GetPlayer
protected void GetPlayer()
Definition: crosshairselector.c:127
Debug
Definition: debug.c:13
DayZPhysics
Definition: dayzphysics.c:123
OnInit
void OnInit()
Definition: aibehaviour.c:49
Widget
Definition: enwidgets.c:189
Math
Definition: enmath.c:6
m_SelectedObject
protected Widget m_SelectedObject
Definition: radialmenu.c:16
m_IsDragging
bool m_IsDragging
Definition: pluginitemdiagnostic.c:57
Vector
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
OnDestroy
override void OnDestroy()
Definition: plugindayzcreatureaidebug.c:113
EntityAI
Definition: building.c:5
IsOpened
bool IsOpened()
Definition: inventorymenu.c:136
SceneData
Definition: scenedata.c:1