3 static string SCENE_DEFAULT_NAME =
"default";
4 static string SCENE_SUFIX =
"scene";
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;
23 if ( instance == NULL )
32 if ( instance == NULL )
40 return PluginSceneManager.Cast(
GetPlugin( PluginSceneManager ) );
48 m_ModuleDeveloper = PluginDeveloper.Cast(
GetPlugin(PluginDeveloper) );
49 m_ModuleConfigScene = PluginConfigScene.Cast(
GetPlugin(PluginConfigScene) );
53 m_RulerActivated =
false;
72 if ( !IsMouseInScene() )
77 if ( GetSelectedSceneObject() )
79 GetSelectedSceneObject().AddRotation(GetRotationAngle() * wheel);
106 FreeCameraControlEnable();
108 m_ModuleDeveloper.ToggleFreeCameraBackPos();
118 if ( !IsMouseInScene() || !m_IsOpen )
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;
139 for (
int i = 0; i < objects.Count(); ++i )
141 Object obj = objects.Get(i);
147 if ( sc_object == NULL )
153 SelectObject( sc_object );
166 if ( IsRulerActivated() && GetSelectedSceneObject() == NULL )
180 if ( !IsMouseInScene() || !m_IsOpen )
185 if ( GetSelectedSceneObject() != NULL )
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;
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 )
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);
278 if ( !IsMouseInScene() || !m_IsOpen || m_ClassBrowserSelected ==
"" )
287 vector from = FreeDebugCamera.GetInstance().GetPosition();
289 vector to = from + ( dir * 10000 );
293 int contact_component;
297 SceneObject obj = m_SceneData.CreateSceneObject(m_ClassBrowserSelected, contact_pos);
316 SceneLoad( PluginMissionConfig.GetInstance().GetSceneEditorName() );
318 RestoreSceneObjectsLinks();
320 ExecuteInitScripts();
330 for (
int i = 0; i < scene_objects.Count(); 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() )
358 for (
int i = 0; i < scene_objects.Count(); i++ )
361 ExecuteEnforceScript( i, scene_object, scene_object.
GetInitScript() );
372 if (
GetGame().IsMultiplayer() )
417 if(
GetGame().GetUIManager().GetMenu() )
432 if(
GetGame().GetUIManager().GetMenu() )
441 SceneObject selected_obj = GetSelectedSceneObject();
443 if ( selected_obj != NULL )
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!");
476 if ( GetSelectedSceneObject() != NULL && GetSelectedSceneObject() == obj )
501 SceneObject selected_obj = GetSelectedSceneObject();
510 vector size = GetSelectedSceneObject().GetSize();
518 for (
int i = 0; i < attachments.Count(); i++ )
532 if ( GetSelectedSceneObject() )
534 GetSelectedSceneObject().SetRotation(dir);
545 SceneObject selected_obj = GetSelectedSceneObject();
562 SceneObject selected_obj = GetSelectedSceneObject();
579 SceneObject selected_obj = GetSelectedSceneObject();
581 if ( GetSelectedSceneObject() )
596 SceneObject selected_obj = GetSelectedSceneObject();
601 selected_obj.
SetHealth(
Math.
Clamp ( value, 0, selected_obj_EAI.GetMaxHealth(
"",
"") ));
612 SceneObject selected_obj = GetSelectedSceneObject();
616 vector cam_pos = FreeDebugCamera.GetInstance().GetPosition();
618 vector view_target = obj_pos;
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);
647 if ( GetSelectedSceneObject() )
649 GetSelectedSceneObject().AddAttachment(att_name);
660 if ( GetSelectedSceneObject() )
662 GetSelectedSceneObject().RemoveAttachment(e);
706 m_ModuleConfigDebugProfile.SetSceneEditorDrawSelection(draw);
716 return m_ModuleConfigDebugProfile.GetSceneEditorDrawSelection();
724 m_ModuleConfigDebugProfile.SetSceneEditorLoadPlayerPos(save);
732 return m_ModuleConfigDebugProfile.GetSceneEditorLoadPlayerPos();
740 m_ModuleConfigDebugProfile.SetSceneEditorRotationAngle(angle);
748 return m_ModuleConfigDebugProfile.GetSceneEditorRotationAngle();
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();
792 if ( scene_name == m_SceneData.GetNameScene() )
805 if ( scene_name == m_SceneData.GetNameScene() )
810 m_ModuleConfigScene.SceneDelete(scene_name);
822 m_ModuleConfigScene.SceneDuplicate(scene_name);
832 m_ModuleConfigScene.SceneRename(scene_name, new_name);
834 if ( scene_name == m_SceneData.GetNameScene() )
836 m_SceneData.SetNameScene(new_name);
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);
884 for (
int i = 0; i < scene_objects.Count(); i++ )
888 SelectObject( scene_objects.Get(i) );
889 SelectedObjectFocus();
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";
914 if ( IsRulerActivated() )
916 m_RulerActivated =
false;
920 m_RulerActivated =
true;
923 SceneEditorMenuCmdRefresh();
931 return m_RulerActivated;
939 vector point_pos = GetMousePositionInScene();
941 m_RulerPoints.Insert( point_pos );
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();
988 for (
int i = 0; i < scene_objects.Count(); i++ )
990 if ( GetSelectedSceneObject() == scene_objects.Get(i) )
1006 return m_SceneData.GetSceneObjects();
1019 return m_SceneData.GetScenePlayers();
1032 return m_SceneData.GetSceneObjectsAll();
1045 if ( scene_objects != NULL )
1047 if ( index > -1 && index < scene_objects.Count() )
1049 return scene_objects.Get( index );
1063 if ( scene_objects != NULL )
1065 for (
int i = 0; i <= scene_objects.Count(); ++i )
1085 return m_ModuleConfigScene.GetSceneList();
1099 if ( GetSelectedSceneObject() != NULL && GetSelectedSceneObject() == obj )
1104 m_SceneData.DeleteSceneObject(obj);
1108 SceneEditorMenuCmdPopup(
"You cant delete player!");
1147 if (
GetGame().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();
1231 if ( widget_under_mouse != NULL && widget_under_mouse.GetName() ==
"pnl_SceneControl" )
1244 RulerClearVisuals();
1246 for (
int i = 0; i < m_RulerPoints.Count(); ++i )
1248 vector pos1 = m_RulerPoints.Get(i);
1252 if ( i < m_RulerPoints.Count() - 1 )
1254 vector pos2 = m_RulerPoints.Get(i + 1);
1266 vector from = FreeDebugCamera.GetInstance().GetPosition();
1267 vector to = from + ( dir * 10000 );
1270 int contact_component;
@ PLAYER
indicates if driver is controlled by player
const CallID CALL_ID_SCENE_EDITOR_COMMAND
Param CallMethod(CallID call_id, Param params)
class OptionSelectorMultistate extends OptionSelector class_name
PluginBase GetPlugin(typename plugin_type)
proto native Input GetInput()
override ScriptCallQueue GetCallQueue(int call_category)
proto native vector GetPointerDirection()
Returns the direction where the mouse points, from the camera view.
proto native UIManager GetUIManager()
proto native bool ExecuteEnforceScript(string expression, string mainFnName)
Delevoper only: Executes Enforce Script expression, if there is an error, is printed into the script ...
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.
static Shape DrawLine(vector from, vector to, int color=0xFFFFFFFF, int flags=0)
static Shape DrawSphere(vector pos, float size=1, int color=0x1fff7f7f, ShapeFlags flags=ShapeFlags.TRANSP|ShapeFlags.NOOUTLINE)
static void EnableFreeCameraSceneEditor(PlayerBase player)
void SceneRename(string scene_name, string new_name)
ref array< Shape > m_RulerSpheres
void SetRotationAngle(int angle)
protected PluginConfigDebugProfile m_ModuleConfigDebugProfile
void SelectedObjectDuplicate()
void SelectedObjectSetDamage(float value)
void FreeCameraControlEnable()
void RestoreSceneObjectsLinks()
array< ref SceneObject > GetSceneObjects()
SceneObject Event_OnDoubleClick()
void Event_OnClickMiddle()
protected float m_TimeLastClickPress
bool SceneCanDelete(string scene_name)
protected bool m_IsDragging
void SelectedObjectAddAttachment(string att_name)
SceneData GetLoadedScene()
array< ref ScenePlayer > GetScenePlayers()
void SetLoadPlayerPos(bool save)
void SelectClassName(string class_name)
TStringArray GetSceneList()
void LinkSceneObjects(SceneObject scene_object1, SceneObject scene_object2)
protected ref array< Shape > m_ShapesSceneObjects
private bool IsMouseInScene()
void SceneDuplicate(string scene_name)
int GetSelectedSceneObjectIndex()
void SelectObject(SceneObject obj)
static PluginSceneManager instance
void OnMouseWheel(int wheel)
void DeleteSceneObject(SceneObject obj)
protected float m_TimeLastClickRelease
protected ref SceneData m_SceneData
protected PluginConfigScene m_ModuleConfigScene
void SelectedObjectSetPosX(float value)
void PluginSceneManager()
void UnlinkSceneObjects(SceneObject scene_object1, SceneObject scene_object2)
array< ref SceneObject > GetSceneObjectsAll()
protected void EditorUpdate()
bool SceneDelete(string scene_name)
SceneObject GetSceneObjectByEntity(EntityAI entity)
override void OnDestroy()
protected string m_ClassBrowserSelected
protected SceneObject m_SelectedObject
SceneObject GetSceneObjectByIndex(int index)
protected ref map< int, KeyBinding > m_KeyBindings
void SetDate(int year, int month, int day, int hour, int minute)
void SetWeather(float overcast, float rain, float fog, float wind_force)
void ExecuteEnforceScript(int index, SceneObject scene_object, string script)
void ExecuteInitScripts()
void FreeCameraControlDisable()
void SelectAndFocusPlayerObject()
bool AreSceneObjectsLinked(SceneObject scene_object1, SceneObject scene_object2)
private void DeselectObject()
void SceneLoad(string scene_name)
void SetDrawSelection(bool draw)
void DeleteSelectedObject()
ref array< Shape > m_RulerLines
ref array< vector > m_RulerPoints
void SelectedObjectSetRot(float dir)
SceneObject GetSelectedSceneObject()
protected PluginDeveloper m_ModuleDeveloper
void ~PluginSceneManager()
private vector GetMousePositionInScene()
void SelectedObjectRemoveAttachment(EntityAI e)
private void EditorUpdateRuler()
void SelectedObjectSetPosZ(float value)
private void SceneEditorMenuCmdPopup(string message)
void SelectedObjectSetPosY(float value)
private void SceneEditorMenuCmdRefresh()
static PluginSceneManager GetInstance()
private void SceneEditorMenuCmdSave()
void SelectedObjectFocus()
protected int m_PressedMouseID
bool IsLinkedWithSceneObject(SceneObject scene_object)
void SetRotation(float rot)
void EditorShapeDeselect()
void SetPosition(vector pos)
array< EntityAI > GetAttachments()
ref array< int > m_LinkedSceneObjectsIndices
void AddAttachment(string att_name)
void LinkSceneObject(SceneObject scene_object, bool draw_line=true)
void EditorLineAdd(SceneObject obj)
void SetHealth(float value)
array< SceneObject > GetLinkedSceneObjects()
void UnlinkSceneObject(SceneObject scene_object)
void EditorLineRemove(SceneObject obj)
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 ...
void ShowUICursor(bool visible)
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.
bool Back()
Close top window on windows stack, returns true when any window is closed.
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto float Normalize()
Normalizes vector. Returns length.
proto native CGame GetGame()
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 string STRING_EMPTY