3 static string SCENE_DEFAULT_NAME =
"default";
4 static string SCENE_SUFIX =
"scene";
6 static PluginSceneManager instance;
9 ref array<vector> m_RulerPoints;
10 ref array<Shape> m_RulerLines;
11 ref array<Shape> m_RulerSpheres;
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;
21 void PluginSceneManager()
23 if ( instance == NULL )
30 void ~PluginSceneManager()
32 if ( instance == NULL )
38 static PluginSceneManager GetInstance()
40 return PluginSceneManager.Cast(
GetPlugin( PluginSceneManager ) );
48 m_ModuleDeveloper = PluginDeveloper.Cast(
GetPlugin(PluginDeveloper) );
49 m_ModuleConfigScene = PluginConfigScene.Cast(
GetPlugin(PluginConfigScene) );
50 m_ModuleConfigDebugProfile = PluginConfigDebugProfile.Cast(
GetPlugin(PluginConfigDebugProfile) );
53 m_RulerActivated =
false;
54 m_RulerPoints =
new array<vector>;
55 m_RulerLines =
new array<Shape>;
56 m_RulerSpheres =
new array<Shape>;
70 void OnMouseWheel(
int wheel)
72 if ( !IsMouseInScene() )
77 if ( GetSelectedSceneObject() )
79 GetSelectedSceneObject().AddRotation(GetRotationAngle() * wheel);
88 void OnUIEditorOpened()
92 DeveloperFreeCamera.EnableFreeCameraSceneEditor( PlayerBase.Cast(
g_Game.GetPlayer() ) );
102 void OnUIEditorClosed()
106 FreeCameraControlEnable();
108 m_ModuleDeveloper.ToggleFreeCameraBackPos();
118 if ( !IsMouseInScene() || !m_IsOpen )
124 vector dir =
g_Game.GetPointerDirection();
127 vector from = FreeDebugCamera.GetInstance().GetPosition();
129 vector to = from + ( dir * 10000 );
133 int contact_component;
134 set<Object> objects =
new set<Object>;
135 bool selected =
false;
137 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component, objects) )
139 for (
int i = 0; i < objects.Count(); ++i )
141 Object obj = objects.Get(i);
145 SceneObject sc_object = SceneObject.Cast( m_SceneData.GetSceneObjectByEntityAI(
EntityAI.Cast( obj ) ) );
147 if ( sc_object == NULL )
153 SelectObject( sc_object );
166 if ( IsRulerActivated() && GetSelectedSceneObject() == NULL )
178 void Event_OnClickMiddle()
180 if ( !IsMouseInScene() || !m_IsOpen )
185 if ( GetSelectedSceneObject() != NULL )
188 vector dir =
g_Game.GetPointerDirection();
191 vector from = FreeDebugCamera.GetInstance().GetPosition();
193 vector to = from + ( dir * 10000 );
197 int contact_component;
198 set<Object> objects =
new set<Object>;
199 bool selected =
false;
201 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component, objects) )
203 for (
int i = 0; i < objects.Count(); ++i )
205 Object obj = objects.Get(i);
210 SceneObject scene_object = m_SceneData.GetSceneObjectByEntityAI(eai);
214 if ( scene_object != NULL && scene_object != GetSelectedSceneObject() )
216 if ( !AreSceneObjectsLinked(GetSelectedSceneObject(), scene_object) )
218 LinkSceneObjects( GetSelectedSceneObject(), scene_object );
222 UnlinkSceneObjects( GetSelectedSceneObject(), scene_object );
228 SceneEditorMenuCmdPopup(
"I am sorry. You cant create link on player!");
243 if ( !IsMouseInScene() || !m_IsOpen )
248 if ( GetSelectedSceneObject() != NULL )
251 vector dir =
g_Game.GetPointerDirection();
254 vector from = FreeDebugCamera.GetInstance().GetPosition();
256 vector to = from + ( dir * 10000 );
260 int contact_component;
264 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component, NULL, NULL, NULL,
false,
true) )
266 GetSelectedSceneObject().SetPosition(contact_pos);
276 SceneObject Event_OnDoubleClick()
278 if ( !IsMouseInScene() || !m_IsOpen || m_ClassBrowserSelected ==
"" )
284 vector dir =
g_Game.GetPointerDirection();
287 vector from = FreeDebugCamera.GetInstance().GetPosition();
289 vector to = from + ( dir * 10000 );
293 int contact_component;
295 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component) )
297 SceneObject obj = m_SceneData.CreateSceneObject(m_ClassBrowserSelected, contact_pos);
316 SceneLoad( PluginMissionConfig.GetInstance().GetSceneEditorName() );
318 RestoreSceneObjectsLinks();
320 ExecuteInitScripts();
326 void RestoreSceneObjectsLinks()
328 array<ref SceneObject> scene_objects = GetSceneObjects();
330 for (
int i = 0; i < scene_objects.Count(); i++ )
332 SceneObject scene_object = scene_objects.Get(i);
335 if (linked_scene_objects_indices)
337 for (
int j = 0; j < linked_scene_objects_indices.Count(); j++ )
339 int index = linked_scene_objects_indices.Get(j);
340 if ( index >= 0 && index < scene_objects.Count() )
355 void ExecuteInitScripts()
357 array<ref SceneObject> scene_objects = GetSceneObjects();
358 for (
int i = 0; i < scene_objects.Count(); i++ )
360 SceneObject scene_object = scene_objects.Get(i);
361 ExecuteEnforceScript( i, scene_object, scene_object.
GetInitScript() );
372 if (
g_Game.IsMultiplayer() )
380 g_Game.GetUIManager().Back();
409 void FreeCameraControlEnable()
412 g_Game.GetInput().ChangeGameFocus(-1);
415 g_Game.GetUIManager().ShowUICursor(
false);
417 if(
g_Game.GetUIManager().GetMenu() )
418 g_Game.GetUIManager().GetMenu().OnHide();
424 void FreeCameraControlDisable()
427 g_Game.GetInput().ChangeGameFocus(1);
430 g_Game.GetUIManager().ShowUICursor(
true);
432 if(
g_Game.GetUIManager().GetMenu() )
433 g_Game.GetUIManager().GetMenu().OnShow();
439 void DeleteSelectedObject()
441 SceneObject selected_obj = GetSelectedSceneObject();
443 if ( selected_obj != NULL )
447 array<ref SceneObject> scene_objects = GetSceneObjects();
448 for (
int i = 0; i < scene_objects.Count(); i++ )
450 if ( AreSceneObjectsLinked(scene_objects.Get(i), selected_obj) )
452 UnlinkSceneObjects(scene_objects.Get(i), selected_obj);
456 m_SceneData.DeleteSceneObject(selected_obj);
458 scene_objects.RemoveItem(selected_obj);
464 SceneEditorMenuCmdPopup(
"You cant delete player!");
474 void SelectObject(SceneObject obj)
476 if ( GetSelectedSceneObject() != NULL && GetSelectedSceneObject() == obj )
491 SceneObject GetSelectedSceneObject()
499 void SelectedObjectDuplicate()
501 SceneObject selected_obj = GetSelectedSceneObject();
510 vector size = GetSelectedSceneObject().GetSize();
514 SceneObject obj = m_SceneData.CreateSceneObject(selected_obj.
GetTypeName(), new_pos );
518 for (
int i = 0; i < attachments.Count(); i++ )
530 void SelectedObjectSetRot(
float dir)
532 if ( GetSelectedSceneObject() )
534 GetSelectedSceneObject().SetRotation(dir);
543 void SelectedObjectSetPosX(
float value)
545 SceneObject selected_obj = GetSelectedSceneObject();
560 void SelectedObjectSetPosY(
float value)
562 SceneObject selected_obj = GetSelectedSceneObject();
577 void SelectedObjectSetPosZ(
float value)
579 SceneObject selected_obj = GetSelectedSceneObject();
581 if ( GetSelectedSceneObject() )
594 void SelectedObjectSetDamage(
float value)
596 SceneObject selected_obj = GetSelectedSceneObject();
601 selected_obj.
SetHealth(Math.Clamp ( value, 0, selected_obj_EAI.GetMaxHealth(
"",
"") ));
610 void SelectedObjectFocus()
612 SceneObject selected_obj = GetSelectedSceneObject();
616 vector cam_pos = FreeDebugCamera.GetInstance().GetPosition();
618 vector view_target = obj_pos;
620 vector obj_size = selected_obj.
GetSize();
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 );
628 view_target[1] = view_target[1] + (obj_size[1] * 0.5);
630 vector cam_dir = view_target - cam_pos;
633 FreeDebugCamera.GetInstance().SetPosition(cam_pos);
634 FreeDebugCamera.GetInstance().SetDirection(cam_dir);
645 void SelectedObjectAddAttachment(
string att_name)
647 if ( GetSelectedSceneObject() )
649 GetSelectedSceneObject().AddAttachment(att_name);
658 void SelectedObjectRemoveAttachment(
EntityAI e)
660 if ( GetSelectedSceneObject() )
662 GetSelectedSceneObject().RemoveAttachment(e);
671 void LinkSceneObjects(SceneObject scene_object1, SceneObject scene_object2)
680 void UnlinkSceneObjects(SceneObject scene_object1, SceneObject scene_object2)
689 bool AreSceneObjectsLinked(SceneObject scene_object1, SceneObject scene_object2)
704 void SetDrawSelection(
bool draw)
706 m_ModuleConfigDebugProfile.SetSceneEditorDrawSelection(draw);
714 bool GetDrawSelection()
716 return m_ModuleConfigDebugProfile.GetSceneEditorDrawSelection();
722 void SetLoadPlayerPos(
bool save)
724 m_ModuleConfigDebugProfile.SetSceneEditorLoadPlayerPos(save);
730 bool GetLoadPlayerPos()
732 return m_ModuleConfigDebugProfile.GetSceneEditorLoadPlayerPos();
738 void SetRotationAngle(
int angle)
740 m_ModuleConfigDebugProfile.SetSceneEditorRotationAngle(angle);
746 int GetRotationAngle()
748 return m_ModuleConfigDebugProfile.GetSceneEditorRotationAngle();
754 void SceneLoad(
string scene_name)
758 PluginMissionConfig.GetInstance().SetSceneEditorName(scene_name);
759 m_SceneData = m_ModuleConfigScene.SceneDataLoad(scene_name);
781 m_ModuleConfigScene.ClearParams();
782 m_ModuleConfigScene.SceneDataSave(m_SceneData);
783 SceneEditorMenuCmdSave();
790 bool SceneCanDelete(
string scene_name)
792 if ( scene_name == m_SceneData.GetNameScene() )
803 bool SceneDelete(
string scene_name)
805 if ( scene_name == m_SceneData.GetNameScene() )
810 m_ModuleConfigScene.SceneDelete(scene_name);
820 void SceneDuplicate(
string scene_name)
822 m_ModuleConfigScene.SceneDuplicate(scene_name);
830 void SceneRename(
string scene_name,
string new_name)
832 m_ModuleConfigScene.SceneRename(scene_name, new_name);
834 if ( scene_name == m_SceneData.GetNameScene() )
836 m_SceneData.SetNameScene(new_name);
845 string SceneGetName()
849 return m_SceneData.GetNameScene();
858 void SetWeather(
float overcast,
float rain,
float fog,
float wind_force)
860 m_SceneData.SetInitOvercast(overcast);
861 m_SceneData.SetInitRain(rain);
862 m_SceneData.SetInitFog(fog);
863 m_SceneData.SetInitWindForce(wind_force);
869 void SetDate(
int year,
int month,
int day,
int hour,
int minute )
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);
881 void SelectAndFocusPlayerObject()
883 array<ref SceneObject> scene_objects = GetSceneObjects();
884 for (
int i = 0; i < scene_objects.Count(); i++ )
886 if ( scene_objects.Get(i).GetObject() ==
g_Game.GetPlayer() )
888 SelectObject( scene_objects.Get(i) );
889 SelectedObjectFocus();
898 void ExecuteEnforceScript(
int index, SceneObject scene_object,
string script )
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";
905 g_Game.ExecuteEnforceScript(wrapped_script,
"scMngMain");
914 if ( IsRulerActivated() )
916 m_RulerActivated =
false;
920 m_RulerActivated =
true;
923 SceneEditorMenuCmdRefresh();
929 bool IsRulerActivated()
931 return m_RulerActivated;
939 vector point_pos = GetMousePositionInScene();
941 m_RulerPoints.Insert( point_pos );
949 void RulerClearVisuals()
951 for (
int i = 0; i < m_RulerLines.Count(); ++i )
953 m_RulerLines.Get(i).Destroy();
955 m_RulerLines.Clear();
957 for (
int j = 0; j < m_RulerSpheres.Count(); ++j )
959 m_RulerSpheres.Get(j).Destroy();
961 m_RulerSpheres.Clear();
969 m_RulerPoints.Clear();
977 SceneData GetLoadedScene()
985 int GetSelectedSceneObjectIndex()
987 array<ref SceneObject> scene_objects = GetSceneObjects();
988 for (
int i = 0; i < scene_objects.Count(); i++ )
990 if ( GetSelectedSceneObject() == scene_objects.Get(i) )
1002 array<ref SceneObject> GetSceneObjects()
1006 return m_SceneData.GetSceneObjects();
1015 array<ref ScenePlayer> GetScenePlayers()
1019 return m_SceneData.GetScenePlayers();
1028 array<ref SceneObject> GetSceneObjectsAll()
1032 return m_SceneData.GetSceneObjectsAll();
1041 SceneObject GetSceneObjectByIndex(
int index )
1043 array<ref SceneObject> scene_objects = GetSceneObjects();
1045 if ( scene_objects != NULL )
1047 if ( index > -1 && index < scene_objects.Count() )
1049 return scene_objects.Get( index );
1059 SceneObject GetSceneObjectByEntity(
EntityAI entity )
1061 array<ref SceneObject> scene_objects = GetSceneObjects();
1063 if ( scene_objects != NULL )
1065 for (
int i = 0; i <= scene_objects.Count(); ++i )
1067 SceneObject obj = scene_objects.Get(i);
1085 return m_ModuleConfigScene.GetSceneList();
1091 void DeleteSceneObject(SceneObject obj)
1099 if ( GetSelectedSceneObject() != NULL && GetSelectedSceneObject() == obj )
1104 m_SceneData.DeleteSceneObject(obj);
1108 SceneEditorMenuCmdPopup(
"You cant delete player!");
1117 protected PluginDeveloper m_ModuleDeveloper;
1137 private void DeselectObject()
1147 if (
g_Game.IsMultiplayer() )
1155 for (
int i = 0; i < objects.Count(); ++i )
1166 if ( GetSelectedSceneObject() && GetSelectedSceneObject() == obj )
1168 if ( GetDrawSelection() )
1178 for ( j = 0; j < linked_scene_objects.Count(); j++ )
1187 if (linked_scene_objects)
1189 for ( j = 0; j < linked_scene_objects.Count(); j++ )
1197 SceneEditorMenuCmdRefresh();
1203 private void SceneEditorMenuCmdRefresh()
1211 private void SceneEditorMenuCmdPopup(
string message)
1219 private void SceneEditorMenuCmdSave()
1227 private bool IsMouseInScene()
1229 Widget widget_under_mouse = GetWidgetUnderCursor();
1231 if ( widget_under_mouse != NULL && widget_under_mouse.GetName() ==
"pnl_SceneControl" )
1242 private void EditorUpdateRuler()
1244 RulerClearVisuals();
1246 for (
int i = 0; i < m_RulerPoints.Count(); ++i )
1248 vector pos1 = m_RulerPoints.Get(i);
1250 m_RulerSpheres.Insert(
Debug.DrawSphere(pos1, 0.1));
1252 if ( i < m_RulerPoints.Count() - 1 )
1254 vector pos2 = m_RulerPoints.Get(i + 1);
1255 m_RulerLines.Insert(
Debug.DrawLine(pos1, pos2));
1263 private vector GetMousePositionInScene()
1265 vector dir =
g_Game.GetPointerDirection();
1266 vector from = FreeDebugCamera.GetInstance().GetPosition();
1267 vector to = from + ( dir * 10000 );
1270 int contact_component;
1272 if ( DayZPhysics.RaycastRV(from, to, contact_pos, contact_dir, contact_component) )
@ PLAYER
indicates if driver is controlled by player
Plugin interface for controlling of agent pool system.
SceneObject m_SelectedObject
ref array< ref KeyBinding > m_KeyBindings
ref SceneData m_SceneData
ref array< Shape > m_ShapesSceneObjects
float m_TimeLastClickRelease
float m_TimeLastClickPress
string m_ClassBrowserSelected
PluginConfigScene m_ModuleConfigScene
PluginConfigDebugProfile m_ModuleConfigDebugProfile
void EditorShapeDeselect()
array< SceneObject > GetLinkedSceneObjects()
bool IsLinkedWithSceneObject(SceneObject scene_object)
void SetRotation(float rot)
ref array< int > m_LinkedSceneObjectsIndices
void SetHealth(float value)
void AddAttachment(string att_name)
void EditorLineAdd(SceneObject obj)
void LinkSceneObject(SceneObject scene_object, bool draw_line=true)
void EditorLineRemove(SceneObject obj)
array< EntityAI > GetAttachments()
void SetPosition(vector pos)
void UnlinkSceneObject(SceneObject scene_object)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
const CallID CALL_ID_SCENE_EDITOR_COMMAND
Param CallMethod(CallID call_id, Param params)
array< string > TStringArray
proto native vector Vector(float x, float y, float z)
Vector constructor from components.
void OnInit()
Callback for user defined initialization. Called for all suites during TestHarness....
const string STRING_EMPTY
class OptionSelectorMultistate extends OptionSelector class_name
override void OnDestroy()
PluginBase GetPlugin(typename plugin_type)