class SceneEditorMenu extends UIScriptedMenu { //--------------------------------------------------------------------------------- // >> Public Scope static const int POPUP_ID_SCENE_MANAGER = 0; static const int POPUP_ID_SCENE_SETTINGS = 1; static const int POPUP_ID_SCENE_NEW = 2; static const int POPUP_ID_SCENE_RENAME = 3; static const int POPUP_ID_SCENE_DELETE = 4; static const int POPUP_ID_NOTIFY = 5; static const int POPUP_ID_EDITOR_SETTINGS = 6; static const int POPUP_ID_INIT_SCRIPT = 7; static const int POPUP_ID_POSITION_MANAGER = 8; static const int POPUP_ID_PRESET_NEW = 9; static const int POPUP_ID_PRESET_RENAME = 10; static const int POPUP_ID_CONFIGS = 11; const string CONST_DEFAULT_PRESET_PREFIX = "[Default]"; // Render specific Preset Items void RenderPresets() { m_PresetsTextListbox.ClearItems(); int i; TBoolArray preset_params; // load fixed presets list TStringArray presets_array = m_ConfigDebugProfileFixed.GetPresets(); for ( i = 0; i < presets_array.Count(); i++ ) { m_PresetsTextListbox.AddItem( "["+presets_array.Get(i)+"]", new PresetParams ( presets_array.Get(i), true, false), 0); } // load custom presets list TStringArray custom_presets_array = m_ConfigDebugProfile.GetPresets(); for ( i = 0; i < custom_presets_array.Count(); i++ ) { m_PresetsTextListbox.AddItem( custom_presets_array.Get(i), new PresetParams ( custom_presets_array.Get(i),false, false), 0); } string default_preset = m_ConfigDebugProfile.GetDefaultPreset(); if ( default_preset != "" ) { // if is fixed int index = GetPresetIndexByName( default_preset ); if ( IsPresetFixed( default_preset) ) { default_preset = "[" + default_preset + "]"; } PresetParams preset_params_array; if( index > -1 && index < m_PresetsTextListbox.GetNumItems() ) { m_PresetsTextListbox.GetItemData( index, 0, preset_params_array ); m_PresetsTextListbox.SetItem( index, default_preset + CONST_DEFAULT_PRESET_PREFIX, preset_params_array, 0 ); } } } bool IsPresetFixed( string preset_name ) { int preset_index = GetPresetIndexByName( preset_name); PresetParams item_params_array; if ( preset_index > -1 && preset_index < m_PresetsTextListbox.GetNumItems() ) { m_PresetsTextListbox.GetItemData( preset_index, 0, item_params_array ); return item_params_array.param2; } return false; } int GetPresetIndexByName( string preset_name ) { int i; for ( i = 0; i < m_PresetsTextListbox.GetNumItems(); i++ ) { PresetParams item_params_array; m_PresetsTextListbox.GetItemData( i, 0, item_params_array ); if ( item_params_array.param1 == preset_name ) { return i; } } return -1; } void NewPreset( string preset_name ) { m_ConfigDebugProfile.PresetAdd( preset_name ); RefreshLists(); } void DeletePreset() { if ( GetCurrentPresetIndex() != -1 ) { bool result = m_ConfigDebugProfile.PresetRemove( GetCurrentPresetName() ); RefreshLists(); } } void SetDefaultPreset( int preset_index ) { // remove previous default parameter string default_preset = m_ConfigDebugProfile.GetDefaultPreset(); if ( default_preset != "" ) { int index = GetPresetIndexByName( default_preset ); // if is fixed if ( IsPresetFixed( default_preset) ) { default_preset = "[" + default_preset + "]"; } PresetParams prev_preset_params_array; if( index > -1 && index < m_PresetsTextListbox.GetNumItems() ) { m_PresetsTextListbox.GetItemData( index, 0, prev_preset_params_array ); prev_preset_params_array.param3 = false; // remove DEFAULT m_PresetsTextListbox.SetItem( index, default_preset, prev_preset_params_array, 0 ); } } // set preset on preset_index to default // if is fixed string preset_name = GetCurrentPresetName(); if ( IsPresetFixed( preset_name) ) { preset_name = "[" + preset_name + "]"; } // set new default preset PresetParams preset_params_array; index = GetCurrentPresetIndex(); if ( index > -1 && index < m_PresetsTextListbox.GetNumItems() ) { m_PresetsTextListbox.GetItemData( index, 0, preset_params_array ); preset_params_array.param3 = true; // DEFAULT m_PresetsTextListbox.SetItem( index, preset_name + CONST_DEFAULT_PRESET_PREFIX, preset_params_array, 0 ); } // store preset m_ConfigDebugProfile.SetDefaultPreset( GetCurrentPresetName() ); } void RefreshLists() { RenderPresets(); RenderPresetItems(); } void RenamePreset( string new_preset_name ) { if ( GetCurrentPresetIndex() != -1 ) { bool result = m_ConfigDebugProfile.PresetRename( GetCurrentPresetName(), new_preset_name ); RefreshLists(); } } // Render specific Preset Items void RenderPresetItems() { // load preset items list int i; m_PresetItemsTextListbox.ClearItems(); if ( GetCurrentPresetIndex() != -1 ) { bool isFixed = IsCurrentPresetFixed(); TStringArray preset_array = new TStringArray; if ( isFixed ) { m_ConfigDebugProfileFixed.GetPresetItems( GetCurrentPresetName(), preset_array ); } else { m_ConfigDebugProfile.GetPresetItems( GetCurrentPresetName(), preset_array ); } if ( preset_array ) { for ( i = 0; i < preset_array.Count(); i++) { m_PresetItemsTextListbox.AddItem( preset_array.Get(i), NULL, 0); } } } } string GetCurrentPresetName() { int index = GetCurrentPresetIndex(); // load preset items list if ( index > -1 && index < m_PresetsTextListbox.GetNumItems() ) { PresetParams item_params_array; m_PresetsTextListbox.GetItemData( index, 0, item_params_array ); return item_params_array.param1; } return ""; } string GetCurrentItemName() { if ( GetCurrentItemIndex() != -1 ) { string item_name; m_PresetItemsTextListbox.GetItemText( GetCurrentItemIndex(), 0, item_name ); return item_name; } return ""; } string GetCurrentObjectName() { int selected_row_index = m_ClWgtLbxClassesList.GetSelectedRow(); if ( selected_row_index != -1 ) { string item_name; m_ClWgtLbxClassesList.GetItemText( selected_row_index, 0, item_name ); return item_name; } return ""; } int GetCurrentPresetIndex() { return m_PresetsTextListbox.GetSelectedRow(); } int GetCurrentItemIndex() { return m_PresetItemsTextListbox.GetSelectedRow(); } bool IsCurrentPresetFixed() { int index = GetCurrentPresetIndex(); if ( index > -1 && index < m_PresetsTextListbox.GetNumItems() ) { PresetParams item_params_array; m_PresetsTextListbox.GetItemData( index, 0, item_params_array ); return item_params_array.param2; } return -1; } void AddItemToPreset() { int selected_row_index = m_ClWgtLbxClassesList.GetSelectedRow(); if ( selected_row_index != -1 && GetCurrentPresetIndex() != -1 ) { string item_name; m_ClWgtLbxClassesList.GetItemText( selected_row_index, 0, item_name ); m_ConfigDebugProfile.ItemAddToPreset( GetCurrentPresetName(), item_name); RenderPresetItems(); } } void RemoveItemFromPreset() { if ( GetCurrentItemIndex() != -1 && GetCurrentPresetIndex() != -1 ) { m_ConfigDebugProfile.ItemRemoveFromPreset( GetCurrentPresetName(), GetCurrentItemIndex() ); RenderPresetItems(); } } /// spawn preset items into inventory void SetPreset( bool clear_inventory, string preset_name) { int i; if ( GetCurrentPresetIndex() != -1 ) { bool is_preset_fixed = IsCurrentPresetFixed(); TStringArray preset_array = new TStringArray; if ( is_preset_fixed ) { m_ConfigDebugProfileFixed.GetPresetItems( preset_name, preset_array ); } else { m_ConfigDebugProfile.GetPresetItems( preset_name, preset_array ); } PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() ); if ( clear_inventory ) { m_Developer.ClearInventory(player); } for ( i = 0; i < preset_array.Count(); i++) { float health = -1; int quantity = -1; if ( is_preset_fixed ) { health = m_ConfigDebugProfileFixed.GetItemHealth( preset_name, i ); quantity = m_ConfigDebugProfileFixed.GetItemQuantity( preset_name, i ); } else { health = m_ConfigDebugProfile.GetItemHealth( preset_name, i ); quantity = m_ConfigDebugProfile.GetItemQuantity( preset_name, i ); } m_Developer.SpawnEntityInPlayerInventory(player, preset_array.Get(i), health, quantity); } } } void ItemMoveUp() { int new_index = GetCurrentItemIndex() - 1; if ( GetCurrentItemIndex() != -1 && GetCurrentPresetIndex() != -1 && new_index > -1) { m_ConfigDebugProfile.SwapItem( GetCurrentPresetName(), GetCurrentItemIndex(), new_index ); RenderPresetItems(); m_PresetItemsTextListbox.SelectRow (new_index); } } void ItemMoveDown() { int new_index = GetCurrentItemIndex() + 1; if ( GetCurrentItemIndex() != -1 && GetCurrentPresetIndex() != -1 && new_index < m_PresetItemsTextListbox.GetNumItems() ) { m_ConfigDebugProfile.SwapItem( GetCurrentPresetName(), GetCurrentItemIndex(), new_index ); RenderPresetItems(); m_PresetItemsTextListbox.SelectRow (new_index); } } void SaveProfileSpawnDistance() { if ( m_ConfigDebugProfile && m_SpawnDistanceEditBox ) { m_ConfigDebugProfile.SetSpawnDistance( m_SpawnDistanceEditBox.GetText().ToFloat() ); } } // Overrided Parent Functions //============================================ // UseMouse (override) //============================================ override bool UseMouse() { return true; } //============================================ // UseKeyboard (override) //============================================ override bool UseKeyboard() { return true; } // System Events //============================================ // SceneEditorMenu //============================================ void SceneEditorMenu() { m_ModuleSceneManager = PluginSceneManager.Cast( GetPlugin(PluginSceneManager) ); m_ModuleSceneManager.OnUIEditorOpened(); m_Popups = new map; m_SlObjectsList = new map; m_OpenedPopups = new TIntArray; m_ClClassesList = new TStringArray; } //============================================ // ~SceneEditorMenu //============================================ void ~SceneEditorMenu() { PopupCloseAll(); if ( IsModuleExist(PluginSceneManager) ) { m_ModuleSceneManager.OnUIEditorClosed(); m_ModuleSceneManager = NULL; } m_NotifyFadeTimer.Stop(); } //============================================ // Init //============================================ override Widget Init() { // Create Main layout menu layoutRoot = GetGame().GetWorkspace().CreateWidgets("gui/layouts/scene_editor/day_z_scene_editor.layout"); m_WgtPnlWrapper = layoutRoot.FindAnyWidget("pnl_presets_wrapper_outer"); m_SlWgtLoadedScene = TextWidget.Cast( layoutRoot.FindAnyWidget("txt_left_label_loaded_scene") ); // Find ListTextBoxWidget for objects list m_SlWgtLbxObjectsList = TextListboxWidget.Cast(layoutRoot.FindAnyWidget("txtlist_left_items") ); // Find Edit Box for shearching in object list m_SlWgtEbxFilter = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("edit_left_search_item") ); // Find Select Button for selecting in object list m_SlWgtSelect = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_left_select") ); m_SlWgtFocus = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_left_focus") ); // Find Popup main panel m_WgtPopupsMain = layoutRoot.FindAnyWidget("pnl_popups"); // Find Poups backgroudn m_WgtPopupsBg = layoutRoot.FindAnyWidget("pnl_popup_bg"); // Find Edit Box for shearching in class list m_ClWgtEbxFilter = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("edit_left_search_class") ); // Find ListTextBoxWidget for class list m_ClWgtLbxClassesList = TextListboxWidget.Cast(layoutRoot.FindAnyWidget("txtlist_left_classes") ); // Find Buttons m_WgtBtnSceneManager = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_top_scene_manager") ); m_WgtBtnPositionManager = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_top_position_manager") ); m_WgtBtnSceneSettings = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_top_settings") ); m_ClWgtButtonAddAtt = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_left_cl_add_attachment") ); m_WgtBtnSceneSave = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_top_save_scene") ); m_WgtBtnEditorSettings = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_top_editor_settings") ); m_WgtBtnEditInitScript = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_right_prop_pos_iscr_value") ); m_WgtBtnDeleteRuler = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_delete_ruler") ); m_WgtBtnLeftPresets = ButtonWidget.Cast(layoutRoot.FindAnyWidget("btn_left_presets") ); // Find Widgets for properties m_PrWgtClassName = TextWidget.Cast(layoutRoot.FindAnyWidget("txt_right_prop_class_value") ); m_PrWgtPoxX = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("ebx_right_prop_pos_x_value") ); m_PrWgtPoxY = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("ebx_right_prop_pos_y_value") ); m_PrWgtPoxZ = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("ebx_right_prop_pos_z_value") ); m_PrWgtDir = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("ebx_right_prop_pos_dir_value") ); m_PrWgtDmg = EditBoxWidget.Cast(layoutRoot.FindAnyWidget("ebx_right_prop_pos_hlt_value") ); m_PrWgtAttRoot = layoutRoot.FindAnyWidget("pnl_right_inspector_attachments"); m_PrWgtAttTitle = layoutRoot.FindAnyWidget("pnl_att_title"); m_PrWidgetsAttachments = new array; // Notify m_NotifyWgtPanel = layoutRoot.FindAnyWidget("pnl_notify"); m_NotifyWgtPanel.SetAlpha(0.0); m_NotifyFadeTimer = new WidgetFadeTimer; // Register Poups m_Popups.Insert(POPUP_ID_SCENE_MANAGER, new UIPopupScriptSceneManager(layoutRoot.FindAnyWidget("pnl_popup_scene_manager"))); m_Popups.Insert(POPUP_ID_POSITION_MANAGER, new UIPopupScriptPositionManager(layoutRoot.FindAnyWidget("pnl_popup_position_manager"))); m_Popups.Insert(POPUP_ID_SCENE_SETTINGS, new UIPopupScriptSceneSettings(layoutRoot.FindAnyWidget("pnl_popup_settings")) ); m_Popups.Insert(POPUP_ID_SCENE_NEW, new UIPopupScriptSceneNew(layoutRoot.FindAnyWidget("pnl_popup_scene_new")) ); m_Popups.Insert(POPUP_ID_SCENE_RENAME, new UIPopupScriptSceneRename(layoutRoot.FindAnyWidget("pnl_popup_scene_rename")) ); m_Popups.Insert(POPUP_ID_SCENE_DELETE, new UIPopupScriptSceneDelete(layoutRoot.FindAnyWidget("pnl_popup_scene_delete")) ); m_Popups.Insert(POPUP_ID_NOTIFY, new UIPopupScriptNotify(layoutRoot.FindAnyWidget("pnl_popup_notify")) ); m_Popups.Insert(POPUP_ID_EDITOR_SETTINGS, new UIPopupScriptEditorSettings(layoutRoot.FindAnyWidget("pnl_popup_editor_settings"))); m_Popups.Insert(POPUP_ID_INIT_SCRIPT, new UIPopupScriptInitScript(layoutRoot.FindAnyWidget("pnl_popup_init_script"))); m_Popups.Insert(POPUP_ID_PRESET_NEW, new UIPopupScriptPresetNew(layoutRoot.FindAnyWidget("pnl_popup_preset_new"))); m_Popups.Insert(POPUP_ID_PRESET_RENAME, new UIPopupScriptPresetRename(layoutRoot.FindAnyWidget("pnl_popup_preset_rename"))); m_Popups.Insert(POPUP_ID_CONFIGS, new UIPopupScriptConfigs(layoutRoot.FindAnyWidget("pnl_popup_configs"))); m_PresetsTextListbox = TextListboxWidget.Cast( layoutRoot.FindAnyWidget("pnl_presets") ); m_PresetItemsTextListbox = TextListboxWidget.Cast( layoutRoot.FindAnyWidget("pnl_preset_items") ); m_ConfigDebugProfileFixed = PluginConfigDebugProfileFixed.Cast( GetPlugin(PluginConfigDebugProfileFixed) ); m_ConfigDebugProfile = PluginConfigDebugProfile.Cast( GetPlugin(PluginConfigDebugProfile) ); m_PresetAddItemtButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_add_to_preset") ); m_PresetRemoveItemButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_remove_from_preset") ); m_SpawnOnGroundButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_spawn_on_ground") ); m_SpawnInInventoryButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_spawn_in_inventory") ); m_SpawnAsAttachmentButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_spawn_as_attachment") ); m_UpButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_up") ); m_DownButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_down") ); m_Developer = PluginDeveloper.Cast( GetPlugin(PluginDeveloper) ); m_QuantityEditBox = EditBoxWidget.Cast( layoutRoot.FindAnyWidget("txt_quantity_value") ); m_DamageEditBox = EditBoxWidget.Cast( layoutRoot.FindAnyWidget("txt_damage_value") ); m_SpawnDistanceEditBox = EditBoxWidget.Cast( layoutRoot.FindAnyWidget("txt_distance_value") ); m_PresetNewButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_new") ); m_PresetDeleteButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_delete") ); m_PresetRenameButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_rename") ); m_PresetSetDefaultButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_default") ); m_CopyToClipboardButton = ButtonWidget.Cast( layoutRoot.FindAnyWidget("btn_copy_to_clipboard") ); m_ConfigsButton = EditBoxWidget.Cast( layoutRoot.FindAnyWidget("btn_top_configs") ); m_SpawnDistanceEditBox.SetText( m_ConfigDebugProfile.GetSpawnDistance().ToString() ); RenderPresets(); UpdateListObjects(); UpdateListClasses(); PopupHideAll(); return layoutRoot; } override bool OnDoubleClick( Widget w, int x, int y, int button ) { if( w == m_PresetItemsTextListbox || w == m_PresetsTextListbox || w == m_ClWgtLbxClassesList ) { SaveProfileSpawnDistance(); //float distance = m_SpawnDistanceEditBox.GetText().ToFloat(); if ( m_SelectedObjectIsPreset ) { SetPreset( true, m_SelectedObject); return true; } else { float health = -1; int quantity = -1; if(GetCurrentItemIndex() != -1) { health = m_ConfigDebugProfile.GetItemHealth( GetCurrentPresetName(), GetCurrentItemIndex() ); quantity = m_ConfigDebugProfile.GetItemQuantity( GetCurrentPresetName(), GetCurrentItemIndex() ); } m_Developer.SpawnEntityInPlayerInventory( PlayerBase.Cast( GetGame().GetPlayer() ), m_SelectedObject, health, quantity); return true; } } return false; } //============================================ // OnClick //============================================ override bool OnClick(Widget w, int x, int y, int button) { super.OnClick(w, x, y, button); int row_index; if ( w == m_WgtBtnSceneManager ) { PopupOpen(POPUP_ID_SCENE_MANAGER, Param.Cast( NULL ) ); return true; } else if( w == m_ConfigsButton ) { PopupOpen( POPUP_ID_CONFIGS, NULL ); return true; } else if( w == m_PresetsTextListbox ) { RenderPresetItems(); m_SelectedObjectIsPreset = true; m_SelectedObject = GetCurrentPresetName(); return true; } else if ( w == m_PresetSetDefaultButton ) { if ( GetCurrentPresetName() != "" ) { SetDefaultPreset( GetCurrentPresetIndex() ); } return true; } else if ( w == m_PresetNewButton ) { PopupOpen( POPUP_ID_PRESET_NEW, NULL ); RefreshLists(); return true; } else if ( w == m_PresetRenameButton ) { PopupOpen( POPUP_ID_PRESET_RENAME, NULL ); return true; } else if( w == m_CopyToClipboardButton ) { GetGame().CopyToClipboard( m_SelectedObject ); return true; } else if ( w == m_PresetDeleteButton ) { if ( GetCurrentPresetName() != "" ) { DeletePreset(); } return true; } else if( w == m_SpawnOnGroundButton || w == m_SpawnAsAttachmentButton || w == m_SpawnInInventoryButton ) { SaveProfileSpawnDistance(); float distance = m_SpawnDistanceEditBox.GetText().ToFloat(); float health = -1; int quantity = -1; if( GetCurrentItemIndex() != -1 ) { health = m_ConfigDebugProfile.GetItemHealth( GetCurrentPresetName(), GetCurrentItemIndex() ); quantity = m_ConfigDebugProfile.GetItemQuantity( GetCurrentPresetName(), GetCurrentItemIndex() ); } switch ( w ) { case m_SpawnOnGroundButton: { if ( m_SelectedObjectIsPreset ) { // SpawnPresetOnGround ;//SetPreset( true, m_SelectedObject, spawn_type, distance ); } else m_Developer.SpawnEntityOnCursorDir( PlayerBase.Cast( GetGame().GetPlayer() ), m_SelectedObject, quantity, distance, health ); break; } case m_SpawnAsAttachmentButton: { Man player = GetGame().GetPlayer(); vector rayStart = GetGame().GetCurrentCameraPosition(); vector rayEnd = rayStart + GetGame().GetCurrentCameraDirection() * 1.5; vector hitPos; vector hitNormal; int hitComponentIndex; ref set hitObjects = new set; DayZPhysics.RaycastRV(rayStart, rayEnd, hitPos, hitNormal, hitComponentIndex, hitObjects, NULL, player); Object target = NULL; if( hitObjects.Count() ) target = hitObjects.Get(0); if ( target != NULL && target.IsInherited(EntityAI) ) { EntityAI att_parent = EntityAI.Cast( target ); m_Developer.SpawnEntityAsAttachment( PlayerBase.Cast( player ), att_parent, m_SelectedObject, health, quantity); } else { m_Developer.SpawnEntityAsAttachment( PlayerBase.Cast( player ), player, m_SelectedObject, health, quantity); } break; } case m_SpawnInInventoryButton: { m_Developer.SpawnEntityInPlayerInventory( PlayerBase.Cast( GetGame().GetPlayer() ), m_SelectedObject, health, quantity); break; } } return true; } else if( w == m_PresetItemsTextListbox ) { m_SelectedObjectIsPreset = false; m_SelectedObject = GetCurrentItemName(); if( GetCurrentItemIndex() != -1 ) { float item_health = m_ConfigDebugProfile.GetItemHealth( GetCurrentPresetName(), GetCurrentItemIndex() ); int item_quantity = m_ConfigDebugProfile.GetItemQuantity( GetCurrentPresetName(), GetCurrentItemIndex() ); m_DamageEditBox.SetText( item_health.ToString() ); m_QuantityEditBox.SetText( item_quantity.ToString() ); } return true; } else if( w == m_UpButton ) { ItemMoveUp(); return true; } else if( w == m_DownButton ) { ItemMoveDown(); return true; } else if( w == m_WgtBtnLeftPresets ) { if( m_WgtPnlWrapper.IsVisible() ) { m_WgtPnlWrapper.Show(false); m_WgtBtnLeftPresets.SetText("Presets >>"); } else { m_WgtPnlWrapper.Show(true); m_WgtBtnLeftPresets.SetText("Presets <<"); } return true; } else if ( w == m_PresetAddItemtButton ) { AddItemToPreset(); return true; } else if ( w == m_PresetRemoveItemButton ) { RemoveItemFromPreset(); return true; } else if ( w == m_WgtBtnPositionManager ) { m_PopupScriptPositionManager = UIPopupScriptPositionManager.Cast( PopupOpen( POPUP_ID_POSITION_MANAGER, Param.Cast( NULL ) ) ); return true; } else if ( w == m_WgtBtnSceneSettings ) { PopupOpen(POPUP_ID_SCENE_SETTINGS, NULL); return true; } else if ( w == m_SlWgtSelect ) { row_index = m_SlWgtLbxObjectsList.GetSelectedRow(); if ( m_SlObjectsList.Count() > 0 && m_SlObjectsList.Count() > row_index ) { m_ModuleSceneManager.SelectObject(m_SlObjectsList.GetElement(row_index)); } return true; } else if ( w == m_SlWgtFocus ) { m_ModuleSceneManager.SelectedObjectFocus(); return true; } else if ( w == m_WgtBtnSceneSave ) { m_ModuleSceneManager.SceneSave(); return true; } else if ( w == m_WgtBtnEditorSettings ) { PopupOpen(POPUP_ID_EDITOR_SETTINGS, NULL); return true; } else if ( w == m_WgtBtnEditInitScript ) { Param2 param = new Param2( m_ModuleSceneManager.GetSelectedSceneObjectIndex(), m_ModuleSceneManager.GetSelectedSceneObject() ); PopupOpen(POPUP_ID_INIT_SCRIPT, param); return true; } else if ( w == m_WgtBtnDeleteRuler ) { m_ModuleSceneManager.RulerDelete(); return true; } bool ret = ComponentsOnClick(w, x, y, button); return ret; } //============================================ // OnChange //============================================ override bool OnChange(Widget w, int x, int y, bool finished) { super.OnChange(w, x, y, finished); if (w == m_ClWgtEbxFilter) { UpdateListClasses(); return true; } else if (w == m_SlWgtEbxFilter) { UpdateListObjects(); return true; } else if ( w == m_PrWgtPoxX && finished ) { m_ModuleSceneManager.SelectedObjectSetPosX(m_PrWgtPoxX.GetText().ToFloat()); } else if ( w == m_PrWgtPoxY && finished ) { m_ModuleSceneManager.SelectedObjectSetPosY(m_PrWgtPoxY.GetText().ToFloat()); } else if ( w == m_PrWgtPoxZ && finished ) { m_ModuleSceneManager.SelectedObjectSetPosZ(m_PrWgtPoxZ.GetText().ToFloat()); } else if ( w == m_PrWgtDir && finished ) { m_ModuleSceneManager.SelectedObjectSetRot(m_PrWgtDir.GetText().ToFloat()); return true; } else if ( w == m_PrWgtDmg && finished ) { m_ModuleSceneManager.SelectedObjectSetDamage(m_PrWgtDmg.GetText().ToFloat()); return true; } else if ( w == m_QuantityEditBox ) { m_ConfigDebugProfile.SetItemQuantity( GetCurrentPresetName(), GetCurrentItemIndex(), m_QuantityEditBox.GetText().ToInt() ); return true; } else if ( w == m_DamageEditBox ) { m_ConfigDebugProfile.SetItemHealth( GetCurrentPresetName(), GetCurrentItemIndex(), m_DamageEditBox.GetText().ToFloat() ); return true; } bool ret = ComponentsOnChange(w, x, y, finished); return false; } override void OnShow() { GetGame().GetMission().AddActiveInputExcludes({"menu"}); } override void OnHide() { GetGame().GetMission().RemoveActiveInputExcludes({"menu"},true); } //============================================ // OnMouseWheel //============================================ override bool OnMouseWheel(Widget w, int x, int y, int wheel) { super.OnMouseWheel(w, x, y, wheel); m_ModuleSceneManager.OnMouseWheel(wheel); return true; } //============================================ // OnItemSelected //============================================ override bool OnItemSelected(Widget w, int x, int y, int row, int column, int oldRow, int oldColumn) { super.OnItemSelected(w, x, y, row, column, oldRow, oldColumn); if ( w == m_ClWgtLbxClassesList ) { string selected_class_name; m_ClWgtLbxClassesList.GetItemText( m_ClWgtLbxClassesList.GetSelectedRow(), 0, selected_class_name ); m_ModuleSceneManager.SelectClassName(selected_class_name); SceneObject obj_selected = m_ModuleSceneManager.GetSelectedSceneObject(); m_SelectedObject = GetCurrentObjectName(); m_SelectedObjectIsPreset = false; } else if ( w == m_SlWgtLbxObjectsList ) { int row_index = m_SlWgtLbxObjectsList.GetSelectedRow(); if ( m_SlObjectsList && row_index > -1 && m_SlObjectsList.Count() > 0 && m_SlObjectsList.Count() > row_index ) { m_ModuleSceneManager.SelectObject(m_SlObjectsList.GetElement(row_index)); } } if( m_PopupScriptPositionManager != NULL ) { m_PopupScriptPositionManager.OnItemSelected(w, x, y, row, column, oldRow, oldColumn); } return true; } // Scripted Events //============================================ // PopupOpen //============================================ UIPopupScript PopupOpen(int popup_id, Param param) { // Open background image (black transparent) under popups if ( m_OpenedPopups.Count() == 0 ) { m_WgtPopupsMain.Show(true); m_WgtPopupsBg.Show(true); } else { int popup_curr_id = m_OpenedPopups.Get(m_OpenedPopups.Count() - 1); m_Popups.Get(popup_curr_id).Show(false); } m_OpenedPopups.Insert(popup_id); UIPopupScript popup = m_Popups.Get(popup_id); popup.Show(true); popup.OnOpen(param); return popup; } //============================================ // PopupBack //============================================ UIPopupScript PopupBack() { if ( m_OpenedPopups.Count() > 0 ) { int popup_curr_id = m_OpenedPopups.Get(m_OpenedPopups.Count() - 1); m_Popups.Get(popup_curr_id).Show(false); m_Popups.Get(popup_curr_id).OnClose(); m_OpenedPopups.Remove(m_OpenedPopups.Count() - 1); if ( m_OpenedPopups.Count() > 0 ) { int ppp_id = m_OpenedPopups.Get(m_OpenedPopups.Count() - 1); m_Popups.Get(ppp_id).Show(true); m_Popups.Get(ppp_id).OnOpen(NULL); return m_Popups.Get(ppp_id); } } m_WgtPopupsMain.Show(false); m_WgtPopupsBg.Show(false); return NULL; } //============================================ // PopupCloseAll //============================================ void PopupCloseAll() { if ( m_OpenedPopups.Count() > 0 ) { int popup_curr_id = m_OpenedPopups.Get(m_OpenedPopups.Count() - 1); m_Popups.Get(popup_curr_id).Show(false); m_Popups.Get(popup_curr_id).OnClose(); m_OpenedPopups.Clear(); } } //============================================ // ToggleVisibility (Show/Hide of editor) //============================================ void ToggleVisibility() { m_WgtRoot.Show( m_ModuleSceneManager.IsOpened() ); } //============================================ // Refresh //============================================ override void Refresh() { UpdateListObjects(); string class_name = "n/a"; string pos_x = "n/a"; string pos_y = "n/a"; string pos_z = "n/a"; string rot = "n/a"; string hlt = "n/a"; // Clear attachments for ( int i = 0; i < m_PrWidgetsAttachments.Count(); ++i ) { m_PrWidgetsAttachments.Get(i).Hide(); } if ( m_ModuleSceneManager.GetSelectedSceneObject() ) { SceneObject obj = m_ModuleSceneManager.GetSelectedSceneObject(); vector v = obj.GetPosition(); class_name = obj.GetTypeName(); pos_x = v[0].ToString(); pos_y = v[1].ToString(); pos_z = v[2].ToString(); rot = obj.GetRotation().ToString(); hlt = obj.GetHealth().ToString(); ref TStringArray attachments_slots = obj.GetConfigAttachments(); float prop_h = 0.03; float prop_count = attachments_slots.Count(); float prop_root_h = prop_h * (prop_count + 1); float line_h = 1.0 / (prop_count + 1); m_PrWgtAttRoot.SetSize(1, prop_root_h); m_PrWgtAttTitle.SetSize(1, line_h); EntityAI e = m_ModuleSceneManager.GetSelectedSceneObject().GetObject(); map attachments_in_slots = GetItemNamesForSlots(attachments_slots); for ( int j = 0; j < attachments_in_slots.Count(); ++j ) { TStringArray attachments_in_slot = attachments_in_slots.GetElement(j); UIPropertyAttachment ui_prop = GetFreeUIPropertyAttchament(); ui_prop.Show(m_ModuleSceneManager.GetSelectedSceneObject().GetObject(), attachments_in_slots.GetKey(j), attachments_in_slot); ui_prop.SetPos( 0, (1 + j) * line_h ); ui_prop.SetSize( 1, line_h ); } m_WgtBtnEditInitScript.Enable( true ); } else { m_WgtBtnEditInitScript.Enable( false ); } m_PrWgtClassName.SetText(class_name); m_PrWgtPoxX.SetText(pos_x); m_PrWgtPoxY.SetText(pos_y); m_PrWgtPoxZ.SetText(pos_z); m_PrWgtDir.SetText(rot); m_PrWgtDmg.SetText(hlt); m_SlWgtLoadedScene.SetText("Loaded Scene: "+m_ModuleSceneManager.SceneGetName()); //Ruler if ( m_ModuleSceneManager.IsRulerActivated() ) { m_WgtBtnDeleteRuler.SetColor( 0xFF5DE028 ); } else { m_WgtBtnDeleteRuler.SetColor( 0xFFFFFFFF ); } } void SceneEditorCommand( Param params ) { Param2 p = Param2.Cast( params ); int cmd_id = p.param1; switch ( cmd_id ) { case PluginSceneManager.SCENE_EDITOR_CMD_REFRESH: Refresh(); break; case PluginSceneManager.SCENE_EDITOR_CMD_SAVE: m_NotifyWgtPanel.SetAlpha(1.0); m_NotifyFadeTimer.FadeOut(m_NotifyWgtPanel, 2, true); break; } } //--------------------------------------------------------------------------------- // >> Protected Scope protected Widget m_WgtRoot; protected PluginSceneManager m_ModuleSceneManager; //--------------------------------------------------------------------------------- // >> protected Scope // Top Panel protected ButtonWidget m_WgtBtnSceneManager; protected ButtonWidget m_WgtBtnSceneSettings; protected ButtonWidget m_WgtBtnSceneSave; protected ButtonWidget m_WgtBtnEditorSettings; protected ButtonWidget m_WgtBtnDeleteRuler; // Popups protected Widget m_WgtPopupsMain; protected Widget m_WgtPopupsBg; protected ref TIntArray m_OpenedPopups; protected ref map m_Popups; // Scene Object List protected TextWidget m_SlWgtLoadedScene; protected string m_SlSelectedClass; protected ref map m_SlObjectsList; protected TextListboxWidget m_SlWgtLbxObjectsList; protected EditBoxWidget m_SlWgtEbxFilter; protected ButtonWidget m_SlWgtSelect; protected ButtonWidget m_SlWgtFocus; // Config Class List protected string m_ClSelectedClass; protected ref TStringArray m_ClClassesList; protected EditBoxWidget m_ClWgtEbxFilter; protected TextListboxWidget m_ClWgtLbxClassesList; protected ButtonWidget m_ClWgtButtonAddAtt; // Properties protected TextWidget m_PrWgtClassName; protected EditBoxWidget m_PrWgtPoxX; protected EditBoxWidget m_PrWgtPoxY; protected EditBoxWidget m_PrWgtPoxZ; protected EditBoxWidget m_PrWgtDir; protected EditBoxWidget m_PrWgtDmg; protected ButtonWidget m_WgtBtnEditInitScript; protected Widget m_PrWgtAttRoot; protected Widget m_PrWgtAttTitle; protected ref array m_PrWidgetsAttachments; // Notify protected ref WidgetFadeTimer m_NotifyFadeTimer; protected Widget m_NotifyWgtPanel; //Other protected TextListboxWidget m_PresetsTextListbox; protected TextListboxWidget m_PresetItemsTextListbox; protected ButtonWidget m_PresetAddItemtButton; protected ButtonWidget m_PresetRemoveItemButton; protected ButtonWidget m_SpawnOnGroundButton; protected ButtonWidget m_SpawnInInventoryButton; protected ButtonWidget m_SpawnAsAttachmentButton; protected ButtonWidget m_UpButton; protected ButtonWidget m_DownButton; protected ButtonWidget m_PresetNewButton; protected ButtonWidget m_PresetDeleteButton; protected ButtonWidget m_PresetRenameButton; protected ButtonWidget m_PresetSetDefaultButton; protected ButtonWidget m_CopyToClipboardButton; protected EditBoxWidget m_DamageEditBox; protected EditBoxWidget m_QuantityEditBox; protected EditBoxWidget m_SpawnDistanceEditBox; protected EditBoxWidget m_ConfigsButton; protected Widget m_WgtPnlWrapper; protected ButtonWidget m_WgtBtnLeftPresets; protected ButtonWidget m_WgtBtnPositionManager; protected string m_SelectedObject; protected bool m_SelectedObjectIsPreset; protected PluginDeveloper m_Developer; protected UIPopupScriptPositionManager m_PopupScriptPositionManager; protected PluginConfigDebugProfileFixed m_ConfigDebugProfileFixed; protected PluginConfigDebugProfile m_ConfigDebugProfile; //---- Functions protected void RefreshByLocalProfile(); //-------------------------------------------- // UpdateListObjects //-------------------------------------------- private void UpdateListObjects() { m_SlObjectsList = GetFiltredSceneObjects(m_SlWgtEbxFilter.GetText(), m_SlObjectsList); m_SlWgtLbxObjectsList.ClearItems(); int row = -1; SceneObject selected_object = m_ModuleSceneManager.GetSelectedSceneObject(); for ( int i = 0; i < m_SlObjectsList.Count(); ++i ) { SceneObject scene_obj = m_SlObjectsList.GetElement(i); if ( selected_object != NULL && selected_object == scene_obj ) { row = i; } m_SlWgtLbxObjectsList.AddItem(scene_obj.GetTypeName(), NULL, 0); } m_SlWgtLbxObjectsList.SelectRow(row); } //-------------------------------------------- // UpdateListClasses //-------------------------------------------- protected void UpdateListClasses() { m_ClClassesList = GetFiltredConfigClasses(m_ClWgtEbxFilter.GetText(), m_ClClassesList); m_ClWgtLbxClassesList.ClearItems(); for ( int i = 0; i < m_ClClassesList.Count(); ++i ) { m_ClWgtLbxClassesList.AddItem(m_ClClassesList.Get(i), NULL, 0); } } //-------------------------------------------- // GetFiltredSceneObjects //-------------------------------------------- protected map GetFiltredSceneObjects( string search_string, map array_ret ) { array scene_objects = m_ModuleSceneManager.GetSceneObjectsAll(); search_string.ToLower(); array_ret.Clear(); if( scene_objects != NULL ) { for ( int i=0; i < scene_objects.Count(); ++i ) { SceneObject sc_obj = scene_objects.Get(i); string obj_name = sc_obj.GetTypeName(); obj_name.ToLower(); if ( obj_name.Contains(search_string)) { array_ret.Insert(i, sc_obj); } } } return array_ret; } //-------------------------------------------- // GetFiltredConfigClasses //-------------------------------------------- TStringArray GetFiltredConfigClasses( string search_string, TStringArray array_ret ) { TStringArray searching_in = new TStringArray; searching_in.Insert(CFG_VEHICLESPATH); searching_in.Insert(CFG_WEAPONSPATH); searching_in.Insert(CFG_MAGAZINESPATH); array_ret.Clear(); search_string.ToLower(); for ( int s = 0; s < searching_in.Count(); ++s ) { string config_path = searching_in.Get(s); int objects_count = g_Game.ConfigGetChildrenCount(config_path); for (int i = 0; i < objects_count; i++) { string childName; g_Game.ConfigGetChildName(config_path, i, childName); int scope = g_Game.ConfigGetInt(config_path + " " + childName + " scope"); if ( scope == 0 ) { continue; } string nchName = childName; nchName.ToLower(); if ( nchName.Contains(search_string)) { array_ret.Insert(childName); } } } return array_ret; } //-------------------------------------------- // PopupClose //-------------------------------------------- private void PopupClose(int popup_id) { } //-------------------------------------------- // PopupCloseAll //-------------------------------------------- private void PopupHideAll() { for ( int i = 0; i < m_Popups.Count(); ++i ) { m_Popups.Get(i).Show(false); } m_WgtPopupsMain.Show(false); m_WgtPopupsBg.Show(false); } //-------------------------------------------- // ComponentsOnClick //-------------------------------------------- private bool ComponentsOnClick(Widget w, int x, int y, int button) { for ( int i = 0; i < m_Popups.Count(); ++i ) { if ( m_Popups.Get(i).OnClick(w, x, y, button) ) { return true; } } for ( int j = 0; j < m_PrWidgetsAttachments.Count(); ++j ) { if ( m_PrWidgetsAttachments.Get(j).OnClick(w, x, y, button) ) { return true; } } return false; } //-------------------------------------------- // ComponentsOnChange //-------------------------------------------- private bool ComponentsOnChange(Widget w, int x, int y, bool finished) { for ( int i = 0; i < m_Popups.Count(); ++i ) { if ( m_Popups.Get(i).OnChange(w, x, y, finished) ) { return true; } } return false; } //-------------------------------------------- // GetFreeUIPropertyAttchament //-------------------------------------------- UIPropertyAttachment GetFreeUIPropertyAttchament() { for ( int i = 0; i < m_PrWidgetsAttachments.Count(); ++i ) { UIPropertyAttachment ui_comp = m_PrWidgetsAttachments.Get(i); if ( !ui_comp.IsVisible() ) { return ui_comp; } } UIPropertyAttachment ui_prop = new UIPropertyAttachment(m_PrWgtAttRoot); m_PrWidgetsAttachments.Insert(ui_prop); return ui_prop; } //-------------------------------------------- // GetItemNamesForSlots //-------------------------------------------- private map GetItemNamesForSlots(TStringArray slots) { TStringArray searching_in = new TStringArray; searching_in.Insert(CFG_VEHICLESPATH); searching_in.Insert(CFG_WEAPONSPATH); searching_in.Insert(CFG_MAGAZINESPATH); map array_ret = new map; for ( int m = 0; m < slots.Count(); ++m ) { array_ret.Insert(slots.Get(m), new TStringArray); } TStringArray inv_slots = new TStringArray; string inv_slot; string childName; for ( int s = 0; s < searching_in.Count(); ++s ) { string config_path = searching_in.Get(s); int objects_count = g_Game.ConfigGetChildrenCount(config_path); for (int i = 0; i < objects_count; i++) { g_Game.ConfigGetChildName(config_path, i, childName); g_Game.ConfigGetTextArray(config_path + " " + childName + " inventorySlot", inv_slots); if ( inv_slots.Count() > 0 ) { for ( int j = 0; j < inv_slots.Count(); ++j ) { inv_slot = ""; inv_slot = inv_slots.Get(j); for ( int k = 0; k < slots.Count(); ++k ) { string finding_slot_type = slots.Get(k); if ( inv_slot == finding_slot_type ) { array_ret.Get(finding_slot_type).Insert(childName); } } } } else { inv_slot = ""; g_Game.ConfigGetText(config_path + " " + childName + " inventorySlot", inv_slot); if ( inv_slot != "" ) { for ( int l = 0; l < slots.Count(); ++l ) { string finding_slot_type_2 = slots.Get(l); if ( inv_slot == finding_slot_type_2 ) { array_ret.Get(finding_slot_type_2).Insert(childName); } } } } } } return array_ret; } }