Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 115 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# Build Folders
bin/
obj/

# Rider Specific
.idea/
*.sln.iml

# Visual Studio Code Specific
.vscode/

# Visual Studio Specific
.vs/

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# Mono Auto Generated Files
mono_crash.*

# Windows image file caches
Thumbs.db
ehthumbs.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# macOS files
.DS_Store
.AppleDouble
.LSOverride

# UNIX files
.Trashes
.nfs*

# Certificate files
*.pfx
*.p12

# Azure Pipelines
.azuredevops/

# Node.js folders
node_modules/

# JetBrains Rider config files
.idea/

# Microsoft Azure Web App
.project

# Windows Installer files
*.cab
*.msi
*.msm
*.msp

# VS Code specific settings
.vscode/

# Rider specific settings
.idea/

# Logs
*.log

# Environment variables
.env

# .NET user secrets
secrets.json

# Local history for Visual Studio Code
.history/

# Coverage Reports
coverage/
*.coverage
*.coveragexml
*.log

# Crash and other diagnostic reports
*.crash
*.diagsession
*.dmp
*.hl
*.dmp
*.lst
*.mdmp

# Docker files
docker-compose.override.yml

# Resharper files
_ReSharper.Caches/

# Temporary folders
tmp/
temp/

# Other general exclusions
*.lock
*.swp
*.bak
*.orig
*.rej
*~
2 changes: 1 addition & 1 deletion Source/RimWar/Options/Controller.cs
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ public override void DoSettingsWindowContents(Rect canvas)
TooltipHandler.TipRegion(rowRect6, "RW_eventFrequencyInfo".Translate());
num++;
Rect rowRect4 = UIHelper.GetRowRect(rowRect6, rowHeight, num);
Settings.Instance.settlementScanRangeDivider = Mathf.RoundToInt(Widgets.HorizontalSlider(rowRect4, Settings.Instance.settlementScanRangeDivider, 200, 20, false, "RW_scanRange".Translate() + " " + Mathf.RoundToInt(1000 / Settings.Instance.settlementScanRangeDivider), "Close", "Far", 1f));
Settings.Instance.settlementScanRangeDivider = Mathf.RoundToInt(Widgets.HorizontalSlider(rowRect4, Settings.Instance.settlementScanRangeDivider, 20, 200, false, "RW_scanRange".Translate() + " " + Mathf.RoundToInt(1000 / Settings.Instance.settlementScanRangeDivider), "Far", "Close", 1f));
TooltipHandler.TipRegion(rowRect4, "RW_scanRangeInfo".Translate());
num++;
Rect rowRect3 = UIHelper.GetRowRect(rowRect4, rowHeight, num);
Expand Down
37 changes: 35 additions & 2 deletions Source/RimWar/Planet/RimWarSettlementComp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using RimWar;
using RimWorld;
using RimWorld.Planet;
using System.Threading;
//using FactionColonies;

namespace RimWar.Planet
Expand Down Expand Up @@ -282,28 +283,38 @@ public int ReinforcementPoints

private List<RimWorld.Planet.Settlement> settlementsInRange;
private List<Settlement> tmpSettlementsInRange;
private Mutex tmpSettlementsMutex;
private Mutex rangeSettlementsMutex;
public List<RimWorld.Planet.Settlement> OtherSettlementsInRange
{
get
{
if (this.settlementsInRange == null)
{
this.rangeSettlementsMutex.WaitOne();
this.settlementsInRange = new List<RimWorld.Planet.Settlement>();
this.settlementsInRange.Clear();
this.rangeSettlementsMutex.ReleaseMutex();
}
if(tmpSettlementsInRange == null)
if (tmpSettlementsInRange == null)
{
this.tmpSettlementsMutex.WaitOne();
tmpSettlementsInRange = new List<Settlement>();
tmpSettlementsInRange.Clear();
this.tmpSettlementsMutex.ReleaseMutex();
}
this.rangeSettlementsMutex.WaitOne();
settlementsInRange.Clear();
this.rangeSettlementsMutex.ReleaseMutex();
AddTmpSettlementsToMain();
//settlementsInRange.AddRange(tmpSettlementsInRange);
if (this.settlementsInRange.Count == 0 || this.nextSettlementScan <= Find.TickManager.TicksGame)
{
if (Options.Settings.Instance.threadingEnabled)
{
this.tmpSettlementsMutex.WaitOne();
tmpSettlementsInRange.Clear();
this.tmpSettlementsMutex.ReleaseMutex();
Options.SettingsRef settingsRef = new Options.SettingsRef();
this.nextSettlementScan = Find.TickManager.TicksGame + settingsRef.settlementScanDelay;
WorldComponent_PowerTracker.tasker.Register(() =>
Expand All @@ -322,7 +333,9 @@ public List<RimWorld.Planet.Settlement> OtherSettlementsInRange
}
else
{
this.tmpSettlementsMutex.WaitOne();
tmpSettlementsInRange.Clear();
this.tmpSettlementsMutex.ReleaseMutex();
Options.SettingsRef settingsRef = new Options.SettingsRef();
List<RimWorld.Planet.Settlement> scanSettlements = WorldUtility.GetRimWorldSettlementsInRange(this.parent.Tile, SettlementScanRange);
if (scanSettlements != null && scanSettlements.Count > 0)
Expand All @@ -331,7 +344,9 @@ public List<RimWorld.Planet.Settlement> OtherSettlementsInRange
{
if (scanSettlements[i] != this.parent)
{
this.tmpSettlementsMutex.WaitOne();
tmpSettlementsInRange.Add(scanSettlements[i]);
this.tmpSettlementsMutex.ReleaseMutex();
}
}
}
Expand All @@ -348,6 +363,7 @@ public List<RimWorld.Planet.Settlement> OtherSettlementsInRange

private void AddTmpSettlementsToMain()
{
this.rangeSettlementsMutex.WaitOne();
try
{
foreach (Settlement s in tmpSettlementsInRange)
Expand All @@ -359,25 +375,30 @@ private void AddTmpSettlementsToMain()
}
}
catch { }
this.rangeSettlementsMutex.ReleaseMutex();
}

private void AddSettlementsToTmp(List<RimWorld.Planet.Settlement> scanSettlements)
{
this.tmpSettlementsMutex.WaitOne();
for (int i = 0; i < scanSettlements.Count; i++)
{
if (scanSettlements[i] != this.parent)
{
tmpSettlementsInRange.Add(scanSettlements[i]);
}
}
this.tmpSettlementsMutex.ReleaseMutex();
}

public List<RimWorld.Planet.Settlement> NearbyHostileSettlements
{
get
{
List<RimWorld.Planet.Settlement> tmpSettlements = new List<RimWorld.Planet.Settlement>();
this.tmpSettlementsMutex.WaitOne();
tmpSettlements.Clear();
this.tmpSettlementsMutex.ReleaseMutex();
if (OtherSettlementsInRange != null && OtherSettlementsInRange.Count > 0)
{
try
Expand All @@ -387,7 +408,9 @@ public List<RimWorld.Planet.Settlement> NearbyHostileSettlements
RimWarSettlementComp rwsc = OtherSettlementsInRange[i].GetComponent<RimWarSettlementComp>();
if (OtherSettlementsInRange[i] != null && rwsc != null && rwsc.RimWarPoints > 0 && OtherSettlementsInRange[i].Faction != null && OtherSettlementsInRange[i].Faction.HostileTo(this.parent.Faction))
{
this.tmpSettlementsMutex.WaitOne();
tmpSettlements.Add(OtherSettlementsInRange[i]);
this.tmpSettlementsMutex.ReleaseMutex();
}
}
}
Expand All @@ -405,6 +428,7 @@ public List<Settlement> PlayerSettlementsInRange
get
{
List<Settlement> tmpPlayerSettlements = new List<Settlement>();
this.tmpSettlementsMutex.WaitOne();
tmpPlayerSettlements.Clear();
foreach(Settlement s in NearbyHostileSettlements)
{
Expand All @@ -413,6 +437,7 @@ public List<Settlement> PlayerSettlementsInRange
tmpPlayerSettlements.Add(s);
}
}
this.tmpSettlementsMutex.ReleaseMutex();
return tmpPlayerSettlements;
}
}
Expand Down Expand Up @@ -441,7 +466,9 @@ public List<RimWorld.Planet.Settlement> NearbyFriendlySettlements
get
{
List<RimWorld.Planet.Settlement> tmpSettlements = new List<RimWorld.Planet.Settlement>();
this.tmpSettlementsMutex.WaitOne();
tmpSettlements.Clear();
this.tmpSettlementsMutex.ReleaseMutex();
if (OtherSettlementsInRange != null && OtherSettlementsInRange.Count > 0)
{
try
Expand All @@ -451,8 +478,10 @@ public List<RimWorld.Planet.Settlement> NearbyFriendlySettlements
RimWarSettlementComp rwsc = OtherSettlementsInRange[i].GetComponent<RimWarSettlementComp>();
if (OtherSettlementsInRange[i] != null && rwsc != null && rwsc.RimWarPoints > 0 && !OtherSettlementsInRange[i].Faction.HostileTo(this.parent.Faction))
{
this.tmpSettlementsMutex.WaitOne();
//Log.Message(OtherSettlementsInRange[i].Label);
tmpSettlements.Add(OtherSettlementsInRange[i]);
this.tmpSettlementsMutex.ReleaseMutex();
}
}
}
Expand All @@ -468,6 +497,7 @@ public List<RimWorld.Planet.Settlement> NearbyFriendlySettlements
public List<RimWorld.Planet.Settlement> NearbyFriendlySettlementsWithinRange(float range)
{
List<RimWorld.Planet.Settlement> tmpSettlements = new List<RimWorld.Planet.Settlement>();
this.tmpSettlementsMutex.WaitOne();
tmpSettlements.Clear();
List<Settlement> allSettlements = Find.WorldObjects.Settlements;
if(allSettlements != null && allSettlements.Count > 0)
Expand All @@ -482,6 +512,7 @@ public List<RimWorld.Planet.Settlement> NearbyFriendlySettlements
}
}
}
this.tmpSettlementsMutex.ReleaseMutex();
return tmpSettlements;
}

Expand All @@ -490,6 +521,8 @@ public override void Initialize(WorldObjectCompProperties props)
base.Initialize(props);
this.settlementsInRange = new List<RimWorld.Planet.Settlement>();
this.settlementsInRange.Clear();
this.tmpSettlementsMutex = new Mutex();
this.rangeSettlementsMutex = new Mutex();
}

public override void CompTick()
Expand Down Expand Up @@ -894,4 +927,4 @@ public override void PostDrawExtraSelectionOverlays()
//}

}
}
}
Loading