Skip to content

Commit

Permalink
3.1.1: New feature tweaks
Browse files Browse the repository at this point in the history
- Context menu actions now properly respect fogged tiles
- Context action on "Select similar" on selected items should now work properly
- Added second "Haul urgently" context action for hauling all items on map
- Updated HugsLibChecker to correctly report missing library version
  • Loading branch information
UnlimitedHugs committed May 29, 2017
1 parent 0fb08b0 commit be71d84
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 12 deletions.
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.1.0
<description>Version: 3.1.1

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
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 @@ -42,7 +42,9 @@
<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 visible items urgently</Designator_context_urgent>
<Designator_context_urgent>Haul all items urgently</Designator_context_urgent>
<Designator_context_urgent_visible>Haul visible items urgently</Designator_context_urgent_visible>
<Designator_context_urgent_all>Haul all map items urgently</Designator_context_urgent_all>
<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
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.1.0")]
[assembly: AssemblyFileVersion("3.1.0")]
[assembly: AssemblyVersion("3.1.1")]
[assembly: AssemblyFileVersion("3.1.1")]
6 changes: 5 additions & 1 deletion Source/Context/BaseDesignatorMenuProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ protected virtual IEnumerable<FloatMenuOption> ListMenuEntries(Designator design
public virtual void ContextMenuAction(Designator designator, Map map) {
int hitCount = 0;
foreach (var thing in map.listerThings.ThingsInGroup(DesingatorRequestGroup)) {
if (designator.CanDesignateThing(thing).Accepted) {
if (ValidForDesignation(thing) && designator.CanDesignateThing(thing).Accepted) {
designator.DesignateThing(thing);
hitCount++;
}
Expand Down Expand Up @@ -92,6 +92,10 @@ protected virtual FloatMenuOption MakeMenuOption(Designator designator, string l
return opt;
}

protected bool ValidForDesignation(Thing thing) {
return thing != null && thing.def != null && thing.Map != null && !thing.Map.fogGrid.IsFogged(thing.Position);
}

protected void InvokeActionWithErrorHandling(MenuActionMethod action, Designator designator) {
try {
var map = Find.VisibleMap;
Expand Down
28 changes: 25 additions & 3 deletions Source/Context/MenuProvider_HaulUrgently.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using System;
using RimWorld;
using System.Collections.Generic;
using UnityEngine;
using Verse;

Expand All @@ -21,12 +21,34 @@ protected override ThingRequestGroup DesingatorRequestGroup {
get { return ThingRequestGroup.HaulableEver; }
}

// skip rock chunks in designation, select only visible on screen
protected override IEnumerable<FloatMenuOption> ListMenuEntries(Designator designator) {
yield return MakeMenuOption(designator, "Designator_context_urgent_visible", HaulVisibleAction);
yield return MakeMenuOption(designator, "Designator_context_urgent_all", HaulEverythingAction);
}

// hotkey activation
public override void ContextMenuAction(Designator designator, Map map) {
HaulVisibleAction(designator, map);
}

// skip rock chunks in designation, select only visible on screen
private void HaulVisibleAction(Designator designator, Map map) {
var visibleRect = GetVisibleMapRect();
DesignateWithPredicate(designator,map, thing => visibleRect.Contains(thing.Position));
}

private void HaulEverythingAction(Designator designator, Map map) {
DesignateWithPredicate(designator, map);
}

private void DesignateWithPredicate(Designator designator, Map map, Func<Thing, bool> shouldDesignateThing = null) {
int hitCount = 0;
foreach (var thing in map.listerThings.ThingsInGroup(DesingatorRequestGroup)) {
if (visibleRect.Contains(thing.Position) && designator.CanDesignateThing(thing).Accepted && !thing.def.designateHaulable) {
if (ValidForDesignation(thing) &&
designator.CanDesignateThing(thing).Accepted &&
!thing.def.designateHaulable &&
(shouldDesignateThing == null || shouldDesignateThing(thing))) {

designator.DesignateThing(thing);
hitCount++;
}
Expand Down
1 change: 1 addition & 0 deletions Source/Context/MenuProvider_SelectSimilar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public override Type HandledDesignatorType {

public override void ContextMenuAction(Designator designator, Map map) {
var des = (Designator_SelectSimilar) designator;
des = des.GetNonReverseVersion();
if (Find.Selector.NumSelected == 0) {
Messages.Message("Designator_context_similar_fail".Translate(), MessageSound.RejectInput);
return;
Expand Down
19 changes: 15 additions & 4 deletions Source/Designators/Designator_SelectSimilar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,26 +49,37 @@ public override void Selected() {
ReindexSelectionConstraints();
}

// ensure we used the proper designator for the context action, that does not have its constraints removed
public Designator_SelectSimilar GetNonReverseVersion() {
return !reverseDesignatorMode ? this : (Designator_SelectSimilar) AllowToolController.Instance.TryGetDesignator(AllowToolDefOf.SelectSimilarDesignator);
}

// used by dragger and reverse designator. We want the reverse designator to always show, but ignoring constraints breaks the context action
public override AcceptanceReport CanDesignateThing(Thing thing) {
return thing.def != null &&
thing.def.selectable &&
thing.def.label != null &&
!BlockedByFog(thing.Position, thing.Map) &&
(reverseDesignatorMode || ThingMatchesSelectionConstraints(thing) || AllowToolController.Instance.Dragger.SelectingSingleCell) && // this allows us to select items that don't match the selection conststraints if we are not dragging, only clicking
SelectionLimitAllowsAdditionalThing();
(reverseDesignatorMode || SelectionLimitAllowsAdditionalThing());
}

public override void DesignateThing(Thing t) {
TrySelectThing(t);
}

protected override void FinalizeDesignationSucceeded() {
if (reverseDesignatorMode) {
Log.Message("xx");
// intercept call from the reverse designator button
// activate the regualar select similar designator for the player to select more items
var selectSimilarNonReverse = AllowToolController.Instance.TryGetDesignator(AllowToolDefOf.SelectSimilarDesignator);
var selectSimilarNonReverse = GetNonReverseVersion();
if (Find.DesignatorManager.SelectedDesignator != selectSimilarNonReverse) {
// debounce multiple selected items
Find.DesignatorManager.Select(selectSimilarNonReverse);
}
}
TrySelectThing(t);
}
base.FinalizeDesignationSucceeded();
}

public override void DesignateSingleCell(IntVec3 cell) {
Expand Down

0 comments on commit be71d84

Please sign in to comment.