void FSkookumScriptEditor::StartupModule() { // Get pointer to runtime module m_runtime_p = FModuleManager::Get().GetModule("SkookumScriptRuntime"); // Tell runtime that editor is present (needed even in commandlet mode as we might have to demand-load blueprints) get_runtime()->set_editor_interface(this); // Clear contents of scripts folder for a fresh start // Won't work here if project has several maps using different blueprints //FString directory_to_delete(m_scripts_path / TEXT("Object")); //IFileManager::Get().DeleteDirectory(*directory_to_delete, false, true); // Reset super classes m_used_classes.Empty(); // Label used to extract package path from Sk class meta file m_package_name_key = TEXT("// UE4 Package Name: \""); m_package_path_key = TEXT("// UE4 Package Path: \""); // String to insert into/remove from Sk project ini file m_editable_ini_settings_p = TEXT("Editable=false\r\nCanMakeEditable=true\r\n"); if (IsRunningCommandlet()) { // Tell runtime to start skookum now get_runtime()->startup_skookum(); } else { // Hook up delegates m_on_asset_loaded_handle = FCoreUObjectDelegates::OnAssetLoaded.AddRaw(this, &FSkookumScriptEditor::on_asset_loaded); m_on_object_modified_handle = FCoreUObjectDelegates::OnObjectModified.AddRaw(this, &FSkookumScriptEditor::on_object_modified); m_on_map_opened_handle = FEditorDelegates::OnMapOpened.AddRaw(this, &FSkookumScriptEditor::on_map_opened); m_on_new_asset_created_handle = FEditorDelegates::OnNewAssetCreated.AddRaw(this, &FSkookumScriptEditor::on_new_asset_created); m_on_assets_deleted_handle = FEditorDelegates::OnAssetsDeleted.AddRaw(this, &FSkookumScriptEditor::on_assets_deleted); m_on_asset_post_import_handle = FEditorDelegates::OnAssetPostImport.AddRaw(this, &FSkookumScriptEditor::on_asset_post_import); FAssetRegistryModule & asset_registry = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(AssetRegistryConstants::ModuleName); m_on_asset_added_handle = asset_registry.Get().OnAssetAdded().AddRaw(this, &FSkookumScriptEditor::on_asset_added); m_on_asset_renamed_handle = asset_registry.Get().OnAssetRenamed().AddRaw(this, &FSkookumScriptEditor::on_asset_renamed); m_on_in_memory_asset_created_handle = asset_registry.Get().OnInMemoryAssetCreated().AddRaw(this, &FSkookumScriptEditor::on_in_memory_asset_created); m_on_in_memory_asset_deleted_handle = asset_registry.Get().OnInMemoryAssetDeleted().AddRaw(this, &FSkookumScriptEditor::on_in_memory_asset_deleted); //--------------------------------------------------------------------------------------- // UI extension // Register commands and styles FSkookumScriptEditorCommands::Register(); FSlateStyleRegistry::UnRegisterSlateStyle(FSkookumStyles::GetStyleSetName()); // Hot reload hack FSkookumStyles::Initialize(); // Button commands m_button_commands = MakeShareable(new FUICommandList); m_button_commands->MapAction( FSkookumScriptEditorCommands::Get().m_skookum_button, FExecuteAction::CreateRaw(this, &FSkookumScriptEditor::on_skookum_button_clicked), FCanExecuteAction()); // Add to level tool bar m_level_tool_bar_extender = MakeShareable(new FExtender); m_level_tool_bar_extension = m_level_tool_bar_extender->AddToolBarExtension("Compile", EExtensionHook::After, m_button_commands, FToolBarExtensionDelegate::CreateRaw(this, &FSkookumScriptEditor::add_skookum_button_to_level_tool_bar)); FLevelEditorModule & level_editor_module = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor"); m_level_extension_manager = level_editor_module.GetToolBarExtensibilityManager(); m_level_extension_manager->AddExtender(m_level_tool_bar_extender); // Add to blueprint tool bar m_blueprint_tool_bar_extender = MakeShareable(new FExtender); m_blueprint_tool_bar_extension = m_blueprint_tool_bar_extender->AddToolBarExtension("Asset", EExtensionHook::After, m_button_commands, FToolBarExtensionDelegate::CreateRaw(this, &FSkookumScriptEditor::add_skookum_button_to_blueprint_tool_bar)); FBlueprintEditorModule & blueprint_editor_module = FModuleManager::LoadModuleChecked<FBlueprintEditorModule>("Kismet"); m_blueprint_extension_manager = blueprint_editor_module.GetMenuExtensibilityManager(); m_blueprint_extension_manager->AddExtender(m_blueprint_tool_bar_extender); } }