Skip to content

Commit ce9dfc2

Browse files
committed
Refactor async quest management into modular system
Fix for: #539 Resolved the issue in the quest cache system by introducing a removal list that's processed after each async tick on the map. And I started refactoring the async quest handling with the following goals in mind: - Removed reliance on static quest cache data. - Reorganized logic into non-static classes for better maintainability. - Added a QuestManagerAsync, modeled after RimWorld’s source code. - Abstracted the dependency on AsyncTimeComp via an interface — with the idea that time handling might eventually be tied to factions or players across maps. - Simplified and clarified some complex LINQ queries. - Aimed to make the code more expressive and easier to follow. - Added TODOs for items discovered during testing. Cheers
1 parent f0221d0 commit ce9dfc2

11 files changed

+420
-310
lines changed

Source/Client/AsyncTime/AsyncTimeComp.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
using HarmonyLib;
2+
using Multiplayer.Client.Factions;
3+
using Multiplayer.Client.Patches;
4+
using Multiplayer.Client.Quests;
5+
using Multiplayer.Client.Saving;
6+
using Multiplayer.Client.Util;
27
using Multiplayer.Common;
38
using RimWorld;
49
using RimWorld.Planet;
510
using System;
611
using System.Collections.Generic;
712
using Verse;
8-
using Multiplayer.Client.Comp;
9-
using Multiplayer.Client.Factions;
10-
using Multiplayer.Client.Patches;
11-
using Multiplayer.Client.Saving;
12-
using Multiplayer.Client.Util;
1313

1414
namespace Multiplayer.Client
1515
{
16-
public class AsyncTimeComp : IExposable, ITickable
16+
public class AsyncTimeComp : IExposable, ITickable, IAsyncQuestContext
1717
{
1818
public static Map tickingMap;
1919
public static Map executingCmdMap;
@@ -429,7 +429,12 @@ public void QuestManagerTickAsyncTime()
429429
{
430430
if (!Multiplayer.GameComp.asyncTime || Paused) return;
431431

432-
MultiplayerAsyncQuest.TickMapQuests(this);
432+
Multiplayer.QuestManagerAsync.TickQuestsAsync(this);
433+
}
434+
435+
public string GetQuestContextInfo()
436+
{
437+
return $"AsyncTimeComp for Map: {map.Index}; faction {map.ParentFaction}";
433438
}
434439
}
435440

@@ -439,5 +444,4 @@ public enum DesignatorMode : byte
439444
MultiCell,
440445
Thing
441446
}
442-
443447
}

Source/Client/AsyncTime/AsyncWorldTimeComp.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
41
using HarmonyLib;
52
using Multiplayer.Client.Comp;
63
using Multiplayer.Client.Desyncs;
@@ -10,6 +7,9 @@
107
using Multiplayer.Common;
118
using RimWorld;
129
using RimWorld.Planet;
10+
using System;
11+
using System.Collections.Generic;
12+
using System.Linq;
1313
using UnityEngine;
1414
using Verse;
1515

@@ -102,6 +102,7 @@ public void Tick()
102102
try
103103
{
104104
Find.TickManager.DoSingleTick();
105+
TickAsyncWorldQuests();
105106
worldTicks++;
106107
Multiplayer.WorldComp.TickWorldSessions();
107108

@@ -135,6 +136,14 @@ public void Tick()
135136
}
136137
}
137138

139+
private void TickAsyncWorldQuests()
140+
{
141+
if(Multiplayer.GameComp.asyncTime)
142+
{
143+
Multiplayer.QuestManagerAsync.TickWorldQuests();
144+
}
145+
}
146+
138147
public void PreContext()
139148
{
140149
Find.TickManager.CurTimeSpeed = DesiredTimeSpeed;

Source/Client/AsyncTime/MultiplayerAsyncQuest.cs

Lines changed: 0 additions & 299 deletions
This file was deleted.

0 commit comments

Comments
 (0)