private void ResearchTechnologyClientPass(BinaryReader dataFromServer) { ReadResearchTechnologyOrder(dataFromServer, out var recipeId); Simulation.Data.TechnologyDefinition definition = Databases.Instance.TechnologyDefinitions[recipeId]; this.ApplyResearchTechnologyOrder(definition); }
public async Task PostResearchTechnologyOrder(Simulation.Data.TechnologyDefinition definition) { var header = GameClient.Instance.WriteOrderHeader(OrderType.ResearchTechnology); WriteResearchTechnologyOrder(GameClient.Instance.Writer, definition.Id); header = await GameClient.Instance.PostOrder(header); if (header.Status != OrderStatus.Executed) { throw new System.Exception("Craft recipe order failed."); } }
private void ApplyResearchTechnologyOrder(Simulation.Data.TechnologyDefinition definition) { if (!this.CanResearchTechnology(definition)) { return; } foreach (var resource in definition.Costs) { this.Resources[(int)resource.Name].Amount -= resource.Amount; } this.TechnologyStatesByDefinition[definition] = ResearchStatus.Done; }
public bool CanResearchTechnology(Simulation.Data.TechnologyDefinition definition) { if (this.TechnologyStatesByDefinition[definition] != ResearchStatus.Available) { return(false); } bool resourcePrerequisites = true; foreach (var resource in definition.Costs) { resourcePrerequisites &= resource.Amount <= this.Resources[(int)resource.Name].Amount; } return(resourcePrerequisites); }
private OrderStatus ResearchTechnologyServerPass(BinaryReader dataFromClient, BinaryWriter dataToClient) { ReadResearchTechnologyOrder(dataFromClient, out var recipeId); Simulation.Data.TechnologyDefinition definition = Databases.Instance.TechnologyDefinitions[recipeId]; if (!this.CanResearchTechnology(definition)) { return(OrderStatus.Refused); } this.ApplyResearchTechnologyOrder(definition); WriteResearchTechnologyOrder(dataToClient, recipeId); return(OrderStatus.Validated); }
private void DisplayTechnologyTooltip(Simulation.Data.TechnologyDefinition technologyDefinition) { const int titleHeight = 26; const int lineHeight = 20; const int margin = 5; int marginCount = 4; // Inputs this.costs.Definitions = technologyDefinition.Costs.Cast <object>(); var costsTransform = this.costs.GetComponent <RectTransform>(); costsTransform.sizeDelta = new Vector2(costsTransform.sizeDelta.x, titleHeight + technologyDefinition.Costs.Length * lineHeight); // Unlocks this.unlocks.Definitions = technologyDefinition.Unlocks; var unlocksTransform = this.outputs.GetComponent <RectTransform>(); unlocksTransform.anchoredPosition = new Vector2(unlocksTransform.anchoredPosition.x, costsTransform.anchoredPosition.y - costsTransform.rect.height - margin); unlocksTransform.sizeDelta = new Vector2(unlocksTransform.sizeDelta.x, titleHeight + technologyDefinition.Unlocks.Length * lineHeight); // Description. var descriptionTransform = this.technologyDescription.GetComponent <RectTransform>(); this.technologyDescription.text = technologyDefinition.Description; if (string.IsNullOrEmpty(technologyDefinition.Description)) { descriptionTransform.sizeDelta = new Vector2(descriptionTransform.sizeDelta.x, 0); marginCount--; } else { descriptionTransform.sizeDelta = new Vector2(descriptionTransform.sizeDelta.x, 44); } this.technologyTooltip.sizeDelta = new Vector2(this.technologyTooltip.sizeDelta.x, costsTransform.rect.height + unlocksTransform.rect.height + descriptionTransform.rect.height + marginCount * margin); }