This commit is contained in:
2026-02-06 17:32:09 +08:00
2 changed files with 59 additions and 21 deletions

Binary file not shown.

View File

@@ -44,7 +44,29 @@ namespace ArachnaeSwarm
public ResearchProjectDef StoredResearch => storedResearch; public ResearchProjectDef StoredResearch => storedResearch;
public float Progress => progress; public float Progress => progress;
public bool IsLocked => storedResearch != null; public bool IsLocked
{
get
{
// 如果没有存储科技,则未锁定
if (storedResearch == null)
return false;
// 如果科技尚未完成,则锁定
if (!storedResearch.IsFinished)
return true;
// 检查是否还有其他试验卵存储同一科技
int otherBuildingsCount = manager?.GetBuildingCountForResearch(storedResearch) ?? 0;
// 如果还有其他试验卵存储同一科技,则允许解锁
if (otherBuildingsCount > 1)
return false;
// 否则,保持锁定
return true;
}
}
public bool IsResearching => isResearching && storedResearch != null && !storedResearch.IsFinished; public bool IsResearching => isResearching && storedResearch != null && !storedResearch.IsFinished;
// 获取研究速度 // 获取研究速度
@@ -126,6 +148,9 @@ namespace ArachnaeSwarm
return; return;
} }
// 同步本地进度到全局进度(确保进度条显示一致)
progress = Find.ResearchManager.GetProgress(storedResearch);
// 检查电力 // 检查电力
bool hasPower = powerComp == null || powerComp.PowerOn; bool hasPower = powerComp == null || powerComp.PowerOn;
@@ -159,11 +184,12 @@ namespace ArachnaeSwarm
{ {
if (storedResearch == null || storedResearch.IsFinished) return; if (storedResearch == null || storedResearch.IsFinished) return;
progress += amount;
// 获取全局进度 // 获取全局进度
float globalProgress = Find.ResearchManager.GetProgress(storedResearch); float globalProgress = Find.ResearchManager.GetProgress(storedResearch);
// 同步本地进度到全局进度
progress = globalProgress;
// 检查科技是否已完成 // 检查科技是否已完成
if (!storedResearch.IsFinished && progress >= storedResearch.baseCost) if (!storedResearch.IsFinished && progress >= storedResearch.baseCost)
{ {
@@ -187,6 +213,8 @@ namespace ArachnaeSwarm
if (toAdd > 0) if (toAdd > 0)
{ {
Find.ResearchManager.AddProgress(storedResearch, toAdd); Find.ResearchManager.AddProgress(storedResearch, toAdd);
// 更新本地进度以反映全局变化
progress = Find.ResearchManager.GetProgress(storedResearch);
} }
} }
} }
@@ -196,6 +224,7 @@ namespace ArachnaeSwarm
/// </summary> /// </summary>
public void StartResearch(ResearchProjectDef project) public void StartResearch(ResearchProjectDef project)
{ {
// 如果已经锁定且无法解锁,则返回
if (IsLocked) if (IsLocked)
{ {
Messages.Message("ResearchBlueprintReader_LockedBuilding".Translate(), Messages.Message("ResearchBlueprintReader_LockedBuilding".Translate(),
@@ -203,6 +232,15 @@ namespace ArachnaeSwarm
return; return;
} }
// 如果当前已存储一个已完成的科技,需要先从管理器中移除
if (storedResearch != null && storedResearch.IsFinished)
{
if (manager != null)
{
manager.OnBuildingDestroyed(this, storedResearch);
}
}
if (project == null || project.IsFinished || project.techprintCount <= 0) if (project == null || project.IsFinished || project.techprintCount <= 0)
return; return;