Merge branch 'master' of https://git.ra3battle.cn/Kalospacer/ArachnaeSwarm
This commit is contained in:
Binary file not shown.
@@ -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;
|
||||||
|
|
||||||
// 获取研究速度
|
// 获取研究速度
|
||||||
@@ -118,22 +140,25 @@ namespace ArachnaeSwarm
|
|||||||
protected override void Tick()
|
protected override void Tick()
|
||||||
{
|
{
|
||||||
base.Tick();
|
base.Tick();
|
||||||
|
|
||||||
// 如果没有储存科技或者科技已完成,不进行研究
|
// 如果没有储存科技或者科技已完成,不进行研究
|
||||||
if (storedResearch == null || storedResearch.IsFinished)
|
if (storedResearch == null || storedResearch.IsFinished)
|
||||||
{
|
{
|
||||||
isResearching = false;
|
isResearching = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 同步本地进度到全局进度(确保进度条显示一致)
|
||||||
|
progress = Find.ResearchManager.GetProgress(storedResearch);
|
||||||
|
|
||||||
// 检查电力
|
// 检查电力
|
||||||
bool hasPower = powerComp == null || powerComp.PowerOn;
|
bool hasPower = powerComp == null || powerComp.PowerOn;
|
||||||
|
|
||||||
// 如果正在研究且有储存的科技,则增加进度
|
// 如果正在研究且有储存的科技,则增加进度
|
||||||
if (hasPower && isResearching)
|
if (hasPower && isResearching)
|
||||||
{
|
{
|
||||||
float speed = ResearchSpeed;
|
float speed = ResearchSpeed;
|
||||||
|
|
||||||
// 应用电力效率
|
// 应用电力效率
|
||||||
if (powerComp != null && powerComp.PowerNet != null)
|
if (powerComp != null && powerComp.PowerNet != null)
|
||||||
{
|
{
|
||||||
@@ -149,7 +174,7 @@ namespace ArachnaeSwarm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 增加进度
|
// 增加进度
|
||||||
AddResearchProgress(speed / 60f);
|
AddResearchProgress(speed / 60f);
|
||||||
}
|
}
|
||||||
@@ -158,25 +183,26 @@ namespace ArachnaeSwarm
|
|||||||
private void AddResearchProgress(float amount)
|
private void AddResearchProgress(float amount)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
// 完成科技
|
// 完成科技
|
||||||
Find.ResearchManager.AddProgress(storedResearch, storedResearch.baseCost - globalProgress);
|
Find.ResearchManager.AddProgress(storedResearch, storedResearch.baseCost - globalProgress);
|
||||||
|
|
||||||
// 停止研究
|
// 停止研究
|
||||||
isResearching = false;
|
isResearching = false;
|
||||||
|
|
||||||
// 发送消息
|
// 发送消息
|
||||||
Messages.Message("ResearchBlueprintReader_ResearchCompleted".Translate(storedResearch.LabelCap),
|
Messages.Message("ResearchBlueprintReader_ResearchCompleted".Translate(storedResearch.LabelCap),
|
||||||
MessageTypeDefOf.PositiveEvent);
|
MessageTypeDefOf.PositiveEvent);
|
||||||
|
|
||||||
ArachnaeLog.Debug($"[ResearchBlueprintReader] Research completed: {storedResearch.defName}");
|
ArachnaeLog.Debug($"[ResearchBlueprintReader] Research completed: {storedResearch.defName}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -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,37 +224,47 @@ 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(),
|
||||||
MessageTypeDefOf.RejectInput);
|
MessageTypeDefOf.RejectInput);
|
||||||
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;
|
||||||
|
|
||||||
// 检查前置条件
|
// 检查前置条件
|
||||||
if (!AreAllPrerequisitesCompleted(project))
|
if (!AreAllPrerequisitesCompleted(project))
|
||||||
{
|
{
|
||||||
Messages.Message("ResearchBlueprintReader_PrerequisitesNotMet".Translate(),
|
Messages.Message("ResearchBlueprintReader_PrerequisitesNotMet".Translate(),
|
||||||
MessageTypeDefOf.RejectInput);
|
MessageTypeDefOf.RejectInput);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 立即绑定科技
|
// 立即绑定科技
|
||||||
storedResearch = project;
|
storedResearch = project;
|
||||||
progress = Find.ResearchManager.GetProgress(project);
|
progress = Find.ResearchManager.GetProgress(project);
|
||||||
isResearching = true;
|
isResearching = true;
|
||||||
researchStartTime = Find.TickManager.TicksGame;
|
researchStartTime = Find.TickManager.TicksGame;
|
||||||
|
|
||||||
// 通知管理器
|
// 通知管理器
|
||||||
if (manager != null)
|
if (manager != null)
|
||||||
{
|
{
|
||||||
manager.RegisterResearch(this, project);
|
manager.RegisterResearch(this, project);
|
||||||
}
|
}
|
||||||
|
|
||||||
Messages.Message("ResearchBlueprintReader_ResearchStarted".Translate(project.LabelCap),
|
Messages.Message("ResearchBlueprintReader_ResearchStarted".Translate(project.LabelCap),
|
||||||
MessageTypeDefOf.NeutralEvent);
|
MessageTypeDefOf.NeutralEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user