基因试验卵完成研究后,如果还有其他试验卵存储同一科技,就可以重新选择新的研究项目
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -44,7 +44,29 @@ namespace ArachnaeSwarm
|
||||
|
||||
public ResearchProjectDef StoredResearch => storedResearch;
|
||||
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;
|
||||
|
||||
// 获取研究速度
|
||||
@@ -118,22 +140,25 @@ namespace ArachnaeSwarm
|
||||
protected override void Tick()
|
||||
{
|
||||
base.Tick();
|
||||
|
||||
|
||||
// 如果没有储存科技或者科技已完成,不进行研究
|
||||
if (storedResearch == null || storedResearch.IsFinished)
|
||||
{
|
||||
isResearching = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 同步本地进度到全局进度(确保进度条显示一致)
|
||||
progress = Find.ResearchManager.GetProgress(storedResearch);
|
||||
|
||||
// 检查电力
|
||||
bool hasPower = powerComp == null || powerComp.PowerOn;
|
||||
|
||||
|
||||
// 如果正在研究且有储存的科技,则增加进度
|
||||
if (hasPower && isResearching)
|
||||
{
|
||||
float speed = ResearchSpeed;
|
||||
|
||||
|
||||
// 应用电力效率
|
||||
if (powerComp != null && powerComp.PowerNet != null)
|
||||
{
|
||||
@@ -149,7 +174,7 @@ namespace ArachnaeSwarm
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 增加进度
|
||||
AddResearchProgress(speed / 60f);
|
||||
}
|
||||
@@ -158,25 +183,26 @@ namespace ArachnaeSwarm
|
||||
private void AddResearchProgress(float amount)
|
||||
{
|
||||
if (storedResearch == null || storedResearch.IsFinished) return;
|
||||
|
||||
progress += amount;
|
||||
|
||||
|
||||
// 获取全局进度
|
||||
float globalProgress = Find.ResearchManager.GetProgress(storedResearch);
|
||||
|
||||
|
||||
// 同步本地进度到全局进度
|
||||
progress = globalProgress;
|
||||
|
||||
// 检查科技是否已完成
|
||||
if (!storedResearch.IsFinished && progress >= storedResearch.baseCost)
|
||||
{
|
||||
// 完成科技
|
||||
Find.ResearchManager.AddProgress(storedResearch, storedResearch.baseCost - globalProgress);
|
||||
|
||||
|
||||
// 停止研究
|
||||
isResearching = false;
|
||||
|
||||
|
||||
// 发送消息
|
||||
Messages.Message("ResearchBlueprintReader_ResearchCompleted".Translate(storedResearch.LabelCap),
|
||||
MessageTypeDefOf.PositiveEvent);
|
||||
|
||||
|
||||
ArachnaeLog.Debug($"[ResearchBlueprintReader] Research completed: {storedResearch.defName}");
|
||||
}
|
||||
else
|
||||
@@ -187,6 +213,8 @@ namespace ArachnaeSwarm
|
||||
if (toAdd > 0)
|
||||
{
|
||||
Find.ResearchManager.AddProgress(storedResearch, toAdd);
|
||||
// 更新本地进度以反映全局变化
|
||||
progress = Find.ResearchManager.GetProgress(storedResearch);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -196,37 +224,47 @@ namespace ArachnaeSwarm
|
||||
/// </summary>
|
||||
public void StartResearch(ResearchProjectDef project)
|
||||
{
|
||||
// 如果已经锁定且无法解锁,则返回
|
||||
if (IsLocked)
|
||||
{
|
||||
Messages.Message("ResearchBlueprintReader_LockedBuilding".Translate(),
|
||||
Messages.Message("ResearchBlueprintReader_LockedBuilding".Translate(),
|
||||
MessageTypeDefOf.RejectInput);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 如果当前已存储一个已完成的科技,需要先从管理器中移除
|
||||
if (storedResearch != null && storedResearch.IsFinished)
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
manager.OnBuildingDestroyed(this, storedResearch);
|
||||
}
|
||||
}
|
||||
|
||||
if (project == null || project.IsFinished || project.techprintCount <= 0)
|
||||
return;
|
||||
|
||||
|
||||
// 检查前置条件
|
||||
if (!AreAllPrerequisitesCompleted(project))
|
||||
{
|
||||
Messages.Message("ResearchBlueprintReader_PrerequisitesNotMet".Translate(),
|
||||
Messages.Message("ResearchBlueprintReader_PrerequisitesNotMet".Translate(),
|
||||
MessageTypeDefOf.RejectInput);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// 立即绑定科技
|
||||
storedResearch = project;
|
||||
progress = Find.ResearchManager.GetProgress(project);
|
||||
isResearching = true;
|
||||
researchStartTime = Find.TickManager.TicksGame;
|
||||
|
||||
|
||||
// 通知管理器
|
||||
if (manager != null)
|
||||
{
|
||||
manager.RegisterResearch(this, project);
|
||||
}
|
||||
|
||||
Messages.Message("ResearchBlueprintReader_ResearchStarted".Translate(project.LabelCap),
|
||||
|
||||
Messages.Message("ResearchBlueprintReader_ResearchStarted".Translate(project.LabelCap),
|
||||
MessageTypeDefOf.NeutralEvent);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user