From eb4580ccbe57e16bbf1da3d8641c335ade54045f Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Thu, 30 Dec 2021 16:37:09 -0800 Subject: [PATCH] Add 'additive selection' toggle, so that users coming from Hammer can make it so WorldSpawn unselects things before making a new selection. --- src/mainframe.cpp | 18 +++++++++ src/selection.cpp | 6 +++ tools/vmap/shaders.c | 87 +------------------------------------------- 3 files changed, 26 insertions(+), 85 deletions(-) diff --git a/src/mainframe.cpp b/src/mainframe.cpp index 3a763b4..867b8ff 100644 --- a/src/mainframe.cpp +++ b/src/mainframe.cpp @@ -1960,6 +1960,7 @@ ui::MenuItem create_edit_menu() create_menu_item_with_mnemonic(menu, "Select _touching", "SelectTouching"); create_check_menu_item_with_mnemonic(menu, "Auto-Expand Selection", "ToggleExpansion"); + create_check_menu_item_with_mnemonic(menu, "Additive Selection", "ToggleAddSelect"); auto convert_menu = create_sub_menu_with_mnemonic(menu, "E_xpand Selection"); /*if (g_Layout_enableOpenStepUX.m_value) { @@ -3124,6 +3125,20 @@ void Texdef_ToggleExpansion() g_expansion_status_changed(); } +/* eukara: requested by Xylemon */ +bool g_addselect_enabled = true; +Callback g_addselect_status_changed; +ConstReferenceCaller &), PropertyImpl::Export> g_addselect_caller( + g_addselect_enabled); +ToggleItem g_addselect_item(g_addselect_caller); + +void Texdef_ToggleAddSelect() +{ + g_addselect_enabled = !g_addselect_enabled; + g_addselect_item.update(); + g_addselect_status_changed(); +} + #include "preferencesystem.h" #include "stringio.h" @@ -3195,6 +3210,9 @@ void MainFrame_Construct() GlobalToggles_insert("ToggleExpansion", makeCallbackF(Texdef_ToggleExpansion), ToggleItem::AddCallbackCaller(g_expansion_item)); + GlobalToggles_insert("ToggleAddSelect", makeCallbackF(Texdef_ToggleAddSelect), + ToggleItem::AddCallbackCaller(g_addselect_item)); + GlobalToggles_insert("ToggleClipper", makeCallbackF(ClipperMode), ToggleItem::AddCallbackCaller(g_clipper_button), Accelerator('X')); diff --git a/src/selection.cpp b/src/selection.cpp index bf2c00a..eeaca18 100644 --- a/src/selection.cpp +++ b/src/selection.cpp @@ -53,6 +53,8 @@ #include "grid.h" +void Selection_Deselect(void); + TextOutputStream &ostream_write(TextOutputStream &t, const Vector4 &v) { return t << "[ " << v.x() << " " << v.y() << " " << v.z() << " " << v.w() << " ]"; @@ -2761,6 +2763,7 @@ void Scene_SelectAll_Component(bool select, SelectionSystem::EComponentMode comp GlobalSceneGraph().traverse(select_all_component(select, componentMode)); } extern bool g_expansion_enabled; +extern bool g_addselect_enabled; void Scene_ExpandSelectionToEntities(); @@ -3095,6 +3098,9 @@ void SelectPoint(const View &view, const float device_point[2], const float devi if (!selector.failed()) { switch (modifier) { case RadiantSelectionSystem::eToggle: { + if (g_addselect_enabled == false) + Selection_Deselect(); + SelectableSortedSet::iterator best = selector.begin(); // toggle selection of the object with least depth if ((*best).second->isSelected()) { diff --git a/tools/vmap/shaders.c b/tools/vmap/shaders.c index 5f457ca..b9ff02d 100644 --- a/tools/vmap/shaders.c +++ b/tools/vmap/shaders.c @@ -1078,6 +1078,7 @@ shaderInfo_t *ShaderInfoForShader( const char *shaderName ){ GetMatTokenAppend( shaderText, qfalse ); /* don't do anything with health */ } +#if 0 /* ydnar: enemy territory implicit shaders */ else if ( !Q_stricmp( mattoken, "implicitMap" ) ) { si->implicitMap = IM_OPAQUE; @@ -1111,7 +1112,7 @@ shaderInfo_t *ShaderInfoForShader( const char *shaderName ){ strcpy( si->implicitImagePath, mattoken ); } } - +#endif /* ----------------------------------------------------------------- image directives @@ -1160,90 +1161,6 @@ shaderInfo_t *ShaderInfoForShader( const char *shaderName ){ GetMatTokenAppend( shaderText, qfalse ); } - /* ----------------------------------------------------------------- - q3map_* directives - ----------------------------------------------------------------- */ - - /* q3map_sun - color will be normalized, so it doesn't matter what range you use - intensity falls off with angle but not distance 100 is a fairly bright sun - degree of 0 = from the east, 90 = north, etc. altitude of 0 = sunrise/set, 90 = noon */ -#if 0 - else if ( !Q_stricmp( mattoken, "vmap_sun" ) || !Q_stricmp( mattoken, "q3map_sun" ) || !Q_stricmp( mattoken, "q3map_sunExt" ) ) { - float a, b; - sun_t *sun; - qboolean ext = qfalse; - - /* ydnar: extended sun directive? */ - if ( !Q_stricmp( mattoken, "q3map_sunext" ) || !Q_stricmp( mattoken, "vmap_sun" ) ) { - ext = qtrue; - } - - /* allocate sun */ - sun = safe_malloc( sizeof( *sun ) ); - memset( sun, 0, sizeof( *sun ) ); - - /* set style */ - sun->style = si->lightStyle; - - /* get color */ - GetTokenAppend( shaderText, qfalse ); - sun->color[ 0 ] = atof( mattoken ); - GetTokenAppend( shaderText, qfalse ); - sun->color[ 1 ] = atof( mattoken ); - GetTokenAppend( shaderText, qfalse ); - sun->color[ 2 ] = atof( mattoken ); - - if ( colorsRGB ) { - sun->color[0] = Image_LinearFloatFromsRGBFloat( sun->color[0] ); - sun->color[1] = Image_LinearFloatFromsRGBFloat( sun->color[1] ); - sun->color[2] = Image_LinearFloatFromsRGBFloat( sun->color[2] ); - } - - /* normalize it */ - ColorNormalize( sun->color, sun->color ); - - /* scale color by brightness */ - GetTokenAppend( shaderText, qfalse ); - sun->photons = atof( mattoken ); - - /* get sun angle/elevation */ - GetTokenAppend( shaderText, qfalse ); - a = atof( mattoken ); - a = a / 180.0f * Q_PI; - - GetTokenAppend( shaderText, qfalse ); - b = atof( mattoken ); - b = b / 180.0f * Q_PI; - - sun->direction[ 0 ] = cos( a ) * cos( b ); - sun->direction[ 1 ] = sin( a ) * cos( b ); - sun->direction[ 2 ] = sin( b ); - - /* get filter radius from shader */ - sun->filterRadius = si->lightFilterRadius; - - /* ydnar: get sun angular deviance/samples */ - if ( ext && TokenAvailable() ) { - GetTokenAppend( shaderText, qfalse ); - sun->deviance = atof( mattoken ); - sun->deviance = sun->deviance / 180.0f * Q_PI; - - GetTokenAppend( shaderText, qfalse ); - sun->numSamples = atoi( mattoken ); - } - - /* store sun */ - sun->next = si->sun; - si->sun = sun; - - /* apply sky surfaceparm */ - ApplySurfaceParm( "sky", &si->contentFlags, &si->surfaceFlags, &si->compileFlags ); - - /* don't process any more mattokens on this line */ - continue; - } -#endif /* match q3map_ */ else if ( !Q_strncasecmp( mattoken, "q3map_", 6 ) || !Q_strncasecmp( mattoken, "vmap_", 5 ) ) { /* ydnar: vmap_baseMaterial (inherit this shader's parameters) */