59 lines
1.4 KiB
C#
59 lines
1.4 KiB
C#
public class Research
|
|
{
|
|
public ResearchData data;
|
|
public double elapsedResearchTime = 0;
|
|
public bool paidResources = false;
|
|
public ResearchState state;
|
|
|
|
public Research(ResearchData data)
|
|
{
|
|
this.data = data;
|
|
state = data.Id == "basics" ? ResearchState.RESEARCHED : ResearchState.UNDEFINED;
|
|
}
|
|
|
|
public ResearchResult Execute(double delta)
|
|
{
|
|
if (!paidResources)
|
|
{
|
|
if (!CanStart()) return ResearchResult.FAILED;
|
|
|
|
PayResources();
|
|
paidResources = true;
|
|
}
|
|
|
|
elapsedResearchTime += delta;
|
|
if (elapsedResearchTime >= data.CraftTime)
|
|
{
|
|
Complete();
|
|
return ResearchResult.FINISHED;
|
|
}
|
|
return ResearchResult.RESEARCHING;
|
|
}
|
|
|
|
public bool CanStart()
|
|
{
|
|
return GameData.inventory.CanCraft(data.Inputs, 1);
|
|
}
|
|
|
|
public void PayResources()
|
|
{
|
|
foreach (Ingredient ingredient in data.Inputs)
|
|
{
|
|
GameData.inventory.RemoveItem(ingredient.Item, ingredient.Amount);
|
|
}
|
|
}
|
|
|
|
public void Complete()
|
|
{
|
|
if (state == ResearchState.RESEARCHED) return;
|
|
|
|
state = ResearchState.RESEARCHED;
|
|
GameData.robotStats.Apply(data.Effects);
|
|
}
|
|
|
|
public static string GetReadableName(string input)
|
|
{
|
|
return ItemData.GetReadableName(input);
|
|
}
|
|
}
|