Skip to content

Commit

Permalink
3.1.0: Tools on selected items, tool tweaks
Browse files Browse the repository at this point in the history
- "Haul urgently" and "Select similar" tools will now appear for selected items
- Haul+ work type can now be hidden with a new setting
- "Mine connected" action will now consider selected ores as designated
- "Haul urgently" context action changed to mark only items visible on screen
- Added German translation
- Updated Russian translation
  • Loading branch information
UnlimitedHugs committed May 29, 2017
1 parent d36f5c1 commit 0fb08b0
Show file tree
Hide file tree
Showing 23 changed files with 169 additions and 64 deletions.
5 changes: 5 additions & 0 deletions AllowTool.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@
<Compile Include="Source\Patches\DefOfHelper_RebindAll_Patch.cs" />
<Compile Include="Source\Patches\Designator_ProcessInput_Patch.cs" />
<Compile Include="Source\Patches\InspectGizmoGrid_DrawInspectGizmoGridFor_Patch.cs" />
<Compile Include="Source\Patches\ReverseDesignatorDatabase_Init_Patch.cs" />
<Compile Include="Source\ReverseDesignatorProvider.cs" />
<Compile Include="Source\UnlimitedDesignationDragger.cs" />
<Compile Include="Source\ThingDesignatorDef.cs" />
<Compile Include="Source\AI\WorkGiver_HaulUrgently.cs" />
Expand All @@ -98,6 +100,9 @@
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>RimWorldWin.exe</PostBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
Expand Down
2 changes: 1 addition & 1 deletion Mods/AllowTool/About/About.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<author>UnlimitedHugs</author>
<targetVersion>0.17.0</targetVersion>
<url>https://ludeon.com/forums/index.php?topic=17218.0</url>
<description>Version: 3.0.0
<description>Version: 3.1.0

A set of tools to make your life on the Rim a bit easier.
Easily forbid and unforbid items, select similar things, have things hauled urgently and affect the entire map with powerful new tool extensions.
Expand Down
2 changes: 1 addition & 1 deletion Mods/AllowTool/About/Version.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<VersionData>
<requiredLibraryVersion>3.0.2</requiredLibraryVersion>
<requiredLibraryVersion>3.1.0</requiredLibraryVersion>
<gitHubRepository>UnlimitedHugs/RimworldAllowTool</gitHubRepository>
</VersionData>
Binary file modified Mods/AllowTool/Assemblies/$HugsLibChecker.dll
Binary file not shown.
Binary file modified Mods/AllowTool/Assemblies/AllowTool.dll
Binary file not shown.
4 changes: 3 additions & 1 deletion Mods/AllowTool/Languages/English/Keyed/AllowToolStrings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
<setting_showToggles_btn>▼ Show settings ▼</setting_showToggles_btn>
<setting_showToolToggles_label>Enable or disable tools</setting_showToolToggles_label>
<setting_showProviderToggles_label>Enable or disable context menus</setting_showProviderToggles_label>
<setting_haulUrgentlyWorktype_label>Show "Haul+" work type</setting_haulUrgentlyWorktype_label>
<setting_haulUrgentlyWorktype_desc>When enabled, shows the work type for the "Haul urgently" tool in the Work tab.\nThe game must be restarted for this setting to take effect.</setting_haulUrgentlyWorktype_desc>

<SelectSimilar_cursor_needConstraint>Click to pick something</SelectSimilar_cursor_needConstraint>
<SelectSimilar_cursor_nowSelecting>Drag to select only: {0}</SelectSimilar_cursor_nowSelecting>
Expand All @@ -40,7 +42,7 @@
<Designator_context_similar_succ>Selected {0} similar things on the map.</Designator_context_similar_succ>
<Designator_context_similar_part>Selected {0} closest similar things out of {1} on the map</Designator_context_similar_part>
<Designator_context_similar_fail>Something must be selected to select similar things.</Designator_context_similar_fail>
<Designator_context_urgent>Haul all items urgently</Designator_context_urgent>
<Designator_context_urgent>Haul visible items urgently</Designator_context_urgent>
<Designator_context_urgent_succ>{0} items marked for urgent hauling.</Designator_context_urgent_succ>
<Designator_context_urgent_fail>Found no new items to haul.</Designator_context_urgent_fail>
<Designator_context_strip>Strip all enemies</Designator_context_strip>
Expand Down
12 changes: 6 additions & 6 deletions Mods/AllowTool/Languages/German/Keyed/AllowToolStrings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@

<Forbid_area_success>{0} Gegenstände verboten.</Forbid_area_success>
<Forbid_area_failure>Keine zu verbietenden Gegenstände gefunden.</Forbid_area_failure>

<Allow_all_success>{0} Dinge auf der Karte erlaubt.</Allow_all_success>
<Allow_all_failure>Keine verbotenden Dinge gefunden.</Allow_all_failure>

<Mass_Select_success>Wählte {0} {1} auf der Karte.</Mass_Select_success>

<setting_showTool_label>Zeige Werkzeug: {0}</setting_showTool_label>
<setting_showTool_desc>Wenn aktiviert, wird das Bezeichner Werkzeug im Baumenü erscheinen.</setting_showTool_desc>
<setting_globalHotkeys_label>Nutze globale Hotkeys</setting_globalHotkeys_label>
Expand All @@ -27,15 +27,15 @@
<setting_showToggles_btn>▼ Zeige Einstellungen ▼</setting_showToggles_btn>
<setting_showToolToggles_label>Aktiviere oder Deaktiviere Werkzeuge</setting_showToolToggles_label>
<setting_showProviderToggles_label>Aktiviere oder Deaktiviere Umfeldmenüs</setting_showProviderToggles_label>

<SelectSimilar_cursor_needConstraint>Klick um etwas auzuheben</SelectSimilar_cursor_needConstraint>
<SelectSimilar_cursor_nowSelecting>Ziehe um lediglich: {0} auszuwählen</SelectSimilar_cursor_nowSelecting>
<SelectSimilar_cursor_limit>Auswahllimit erreicht</SelectSimilar_cursor_limit>
<SelectSimilar_numMoreTypes>({0} mehr)</SelectSimilar_numMoreTypes>

<Haul_urgently_success>{0} Gegenstände werden dringends getragen.</Haul_urgently_success>
<Haul_urgently_failure>Keine Gegenstände zum tragen gefunden.</Haul_urgently_failure>

<Designator_context_similar>Wählt ähnliche Dinge in der Karte aus</Designator_context_similar>
<Designator_context_similar_succ>Wählte {0} ähnliche Gegenstände auf der Karte.</Designator_context_similar_succ>
<Designator_context_similar_part>Wählte {0} der nächsten ähnlichen Dinge von {1} auf der Karte</Designator_context_similar_part>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@
Удерживать Ctrl чтобы снять запрещение также со зданий.
Удерживать Shift чтобы снять запрещение также со скелетов и несвежих трупов.</AllowAllDesignator.description>

<MassSelectDesignator.label>Массовое выделение</MassSelectDesignator.label>
<MassSelectDesignator.description>Выделяет все предметы в указанной области, игнорируя все ограничения.
Удерживать Shift чтобы добавить указанные предметы к уже выделенным.
Удерживать Control/Option чтобы выделить только предметы того же типа, что и уже выделенные.
Удерживать Alt чтобы выделить предметы одного типа по всей карте.</MassSelectDesignator.description>
<SelectSimilarDesignator.label>Выделить схожие</SelectSimilarDesignator.label>
<SelectSimilarDesignator.description>Выделяет только предметы, схожие с уже выделенными.
Удерживать Shift чтобы выделить дополнительные типы.
Удерживать Alt чтобы игнорировать ограничение кол-ва выделенных предметов.</SelectSimilarDesignator.description>

<HaulUrgentlyDesignator.label>Срочный перенос</HaulUrgentlyDesignator.label>
<HaulUrgentlyDesignator.description>Выделяет предметы, которые должны быть перенесены прежде любых других работ.
Удерживать Shift прервать текущие работы и начать переносить немедленно.</HaulUrgentlyDesignator.description>

</LanguageData>
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@

<DesignatorAllowAll.label>Инструмент: Разрешить всё</DesignatorAllowAll.label>

<DesignatorMassSelect.label>Инструмент: Массовое выделение</DesignatorMassSelect.label>
<DesignatorSelectSimilar.label>Инструмент: Выделить схожие</DesignatorSelectSimilar.label>

<DesignatorHaulUrgently.label>Инструмент: Срочный перенос</DesignatorHaulUrgently.label>

<ToolContextMenuAction.label>Действие контекстного меню</ToolContextMenuAction.label>

</LanguageData>

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" ?>
<LanguageData>

<HaulingUrgent.labelShort>Перенос+</HaulingUrgent.labelShort>
<HaulingUrgent.pawnLabel>Срочный переносчик</HaulingUrgent.pawnLabel>
<HaulingUrgent.gerundLabel>Срочно переносится</HaulingUrgent.gerundLabel>
<HaulingUrgent.description>Перенос высокого приоритета. Применяется к предметам помеченным инструментом "Срочный перенос".\nДобавлено модом Allow Tool.</HaulingUrgent.description>
<HaulingUrgent.verb>Срочно перенести</HaulingUrgent.verb>

</LanguageData>
4 changes: 3 additions & 1 deletion Mods/AllowTool/Languages/Russian/Keyed/AllowToolStrings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
<setting_showToggles_btn>▼ Открыть настройки ▼</setting_showToggles_btn>
<setting_showToolToggles_label>Включить или отключить инструменты</setting_showToolToggles_label>
<setting_showProviderToggles_label>Включить или отключить контекстные меню</setting_showProviderToggles_label>
<setting_haulUrgentlyWorktype_label>Отображать тип работы "Перенос+"</setting_haulUrgentlyWorktype_label>
<setting_haulUrgentlyWorktype_desc>Если включено, панель настроек работ отображает дополнительный тип работы для инструмента срочного переноса. Требуется перезапуск.</setting_haulUrgentlyWorktype_desc>

<SelectSimilar_cursor_needConstraint>Клик для выделения предмета</SelectSimilar_cursor_needConstraint>
<SelectSimilar_cursor_nowSelecting>Будет выделено только: {0}</SelectSimilar_cursor_nowSelecting>
Expand All @@ -40,7 +42,7 @@
<Designator_context_similar_succ>Выделено {0} схожих предметов на карте.</Designator_context_similar_succ>
<Designator_context_similar_part>Выделено {0} из доступных {1} схожих предметов на карте.</Designator_context_similar_part>
<Designator_context_similar_fail>Что-нибудь должно быть уже выделено чтобы найти и выделить схожие предметов.</Designator_context_similar_fail>
<Designator_context_urgent>Срочно перенести все предметы</Designator_context_urgent>
<Designator_context_urgent>Срочно перенести видимые предметы</Designator_context_urgent>
<Designator_context_urgent_succ>{0} предметов отмечено для срочного переноса.</Designator_context_urgent_succ>
<Designator_context_urgent_fail>Не найдено предметов нуждающихся в переносе.</Designator_context_urgent_fail>
<Designator_context_strip>Снять одежду со всех врагов</Designator_context_strip>
Expand Down
4 changes: 2 additions & 2 deletions Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("3.0.0")]
[assembly: AssemblyFileVersion("3.0.0")]
[assembly: AssemblyVersion("3.1.0")]
[assembly: AssemblyFileVersion("3.1.0")]
41 changes: 26 additions & 15 deletions Source/AllowToolController.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using AllowTool.Context;
using Harmony;
Expand All @@ -18,16 +19,17 @@ public class AllowToolController : ModBase {
internal const string ModId = "AllowTool";
internal const string DesignatorHandleNamePrefix = "show";
internal const string HarmonyInstanceId = "HugsLib.AllowTool";
private const string HaulWorktypeSettingName = "haulUrgentlyWorktype";

public static FieldInfo ResolvedDesignatorsField;
public static FieldInfo ReverseDesignatorDatabaseDesListField;
public static AllowToolController Instance { get; private set; }

internal static HarmonyInstance HarmonyInstance { get; set; }

// called before implied def generation
public static void HideHaulUrgentlyWorkTypeIfDisabled() {
var haulUrgentlyHandleName = DesignatorHandleNamePrefix + AllowToolDefOf.HaulUrgentlyDesignator.defName; // DefOf's are already filled in
var peekValue = HugsLibController.SettingsManager.GetModSettings(ModId).PeekValue(haulUrgentlyHandleName); // handles will be created later- just peek for now
var peekValue = HugsLibController.SettingsManager.GetModSettings(ModId).PeekValue(HaulWorktypeSettingName); // handles will be created later- just peek for now
if (peekValue == "False") {
AllowToolDefOf.HaulingUrgent.visible = false;
}
Expand Down Expand Up @@ -65,7 +67,7 @@ private AllowToolController() {

public override void Initialize() {
Dragger = new UnlimitedDesignationDragger();
InitReflectionFields();
PrepareReflection();
}

public override void Update() {
Expand Down Expand Up @@ -106,14 +108,25 @@ public override void MapLoaded(Map map) {

public override void SettingsChanged() {
foreach (var entry in activeDesignators) {
entry.designator.SetVisible(GetDesignatorHandleValue(entry.designator.def));
entry.designator.SetVisible(IsDesignatorEnabledInSettings(entry.designator.def));
}
}

public bool IsDesignatorEnabledInSettings(ThingDesignatorDef def) {
SettingHandle<bool> handle;
designatorToggleHandles.TryGetValue(DesignatorHandleNamePrefix + def.defName, out handle);
return handle == null || handle.Value;
}

public Designator_SelectableThings TryGetDesignator(ThingDesignatorDef def) {
return activeDesignators.Select(e => e.designator).FirstOrDefault(d => d.def == def);
}

private void PrepareSettingsHandles() {
settingGlobalHotkeys = Settings.GetHandle("globalHotkeys", "setting_globalHotkeys_label".Translate(), "setting_globalHotkeys_desc".Translate(), true);
ContextOverlaySetting = Settings.GetHandle("contextOverlay", "setting_contextOverlay_label".Translate(), "setting_contextOverlay_desc".Translate(), true);
ContextWatermarkSetting = Settings.GetHandle("contextWatermark", "setting_contextWatermark_label".Translate(), "setting_contextWatermark_desc".Translate(), true);
Settings.GetHandle(HaulWorktypeSettingName, "setting_haulUrgentlyWorktype_label".Translate(), "setting_haulUrgentlyWorktype_desc".Translate(), true);
SelectionLimitSetting = Settings.GetHandle("selectionLimit", "setting_selectionLimit_label".Translate(), "setting_selectionLimit_desc".Translate(), 200, Validators.IntRangeValidator(50, 100000));
SelectionLimitSetting.SpinnerIncrement = 50;
// designators
Expand Down Expand Up @@ -156,7 +169,7 @@ private void InjectDesignators() {
if (insertIndex >= 0) {
var designator = (Designator_SelectableThings)Activator.CreateInstance(designatorDef.designatorClass, designatorDef);
resolvedDesignators.Insert(insertIndex + 1, designator);
designator.SetVisible(GetDesignatorHandleValue(designatorDef));
designator.SetVisible(IsDesignatorEnabledInSettings(designatorDef));
activeDesignators.Add(new DesignatorEntry(designator, designatorDef.hotkeyDef));
numDesignatorsInjected++;
} else {
Expand All @@ -169,15 +182,13 @@ private void InjectDesignators() {
}
}

private void InitReflectionFields() {
ResolvedDesignatorsField = typeof (DesignationCategoryDef).GetField("resolvedDesignators", BindingFlags.NonPublic | BindingFlags.Instance);
if (ResolvedDesignatorsField == null) Logger.Error("failed to reflect DesignationCategoryDef.resolvedDesignators");
}

private bool GetDesignatorHandleValue(ThingDesignatorDef def) {
SettingHandle<bool> handle;
designatorToggleHandles.TryGetValue(DesignatorHandleNamePrefix + def.defName, out handle);
return handle == null || handle.Value;
private void PrepareReflection() {
ResolvedDesignatorsField = typeof(DesignationCategoryDef).GetField("resolvedDesignators", HugsLibUtility.AllBindingFlags);
ReverseDesignatorDatabaseDesListField = typeof(ReverseDesignatorDatabase).GetField("desList", HugsLibUtility.AllBindingFlags);
if (ResolvedDesignatorsField == null || ResolvedDesignatorsField.FieldType != typeof(List<Designator>)
|| ReverseDesignatorDatabaseDesListField == null || ReverseDesignatorDatabaseDesListField.FieldType != typeof(List<Designator>)) {
Logger.Error("Failed to reflect required members");
}
}

private void CheckForHotkeyPresses() {
Expand All @@ -189,7 +200,7 @@ private void CheckForHotkeyPresses() {
for (int i = 0; i < activeDesignators.Count; i++) {
var entry = activeDesignators[i];
if(entry.key == null || !entry.key.JustPressed || !entry.designator.Visible) continue;
activeDesignators[i].designator.ProcessInput(Event.current);
Find.DesignatorManager.Select(entry.designator);
break;
}
}
Expand Down
1 change: 1 addition & 0 deletions Source/AllowToolDefOf.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ public static class AllowToolDefOf {

// designators
public static ThingDesignatorDef HaulUrgentlyDesignator;
public static ThingDesignatorDef SelectSimilarDesignator;

// work types
public static WorkTypeDef HaulingUrgent;
Expand Down
2 changes: 1 addition & 1 deletion Source/AllowToolEarlyInit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace AllowTool {
/// <summary>
/// Get out patches in early on, so that we can get our foot in before implied defs are generated
/// Get our patches applied early on, so that we can get our foot in before implied defs are generated
/// </summary>
public class AllowToolEarlyInit : Mod {
public AllowToolEarlyInit(ModContentPack content) : base(content) {
Expand Down
2 changes: 1 addition & 1 deletion Source/Context/MenuProvider_Cancel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ protected void RemoveDesignationsAction(Designator designator, Map map) {
}
manager.RemoveDesignation(des);
}
Messages.Message("Designator_context_cancel_desig_msg".Translate(hitCountThings, hitCountTiles), MessageSound.Standard);
Messages.Message("Designator_context_cancel_desig_msg".Translate(hitCountThings, hitCountTiles), MessageSound.Benefit);
}

protected void RemoveBlueprintsAction(Designator designator, Map map) {
Expand Down
22 changes: 20 additions & 2 deletions Source/Context/MenuProvider_HaulUrgently.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System;
using RimWorld;
using UnityEngine;
using Verse;

namespace AllowTool.Context {
Expand All @@ -19,16 +21,32 @@ protected override ThingRequestGroup DesingatorRequestGroup {
get { return ThingRequestGroup.HaulableEver; }
}

// skip rock chunks in designation
// skip rock chunks in designation, select only visible on screen
public override void ContextMenuAction(Designator designator, Map map) {
var visibleRect = GetVisibleMapRect();
int hitCount = 0;
foreach (var thing in map.listerThings.ThingsInGroup(DesingatorRequestGroup)) {
if (designator.CanDesignateThing(thing).Accepted && !thing.def.designateHaulable) {
if (visibleRect.Contains(thing.Position) && designator.CanDesignateThing(thing).Accepted && !thing.def.designateHaulable) {
designator.DesignateThing(thing);
hitCount++;
}
}
ReportActionResult(hitCount);
}

// code swiped from ThingSelectionUtility
private static CellRect GetVisibleMapRect() {
var screenRect = new Rect(0f, 0f, UI.screenWidth, UI.screenHeight);
var screenLoc1 = new Vector2(screenRect.x, UI.screenHeight - screenRect.y);
var screenLoc2 = new Vector2(screenRect.x + screenRect.width, UI.screenHeight - (screenRect.y + screenRect.height));
var corner1 = UI.UIToMapPosition(screenLoc1);
var corner2 = UI.UIToMapPosition(screenLoc2);
return new CellRect {
minX = Mathf.FloorToInt(corner1.x),
minZ = Mathf.FloorToInt(corner2.z),
maxX = Mathf.FloorToInt(corner2.x),
maxZ = Mathf.FloorToInt(corner1.z)
};
}
}
}
Loading

0 comments on commit 0fb08b0

Please sign in to comment.