예제 #1
0
        private void ResearchTechnologyClientPass(BinaryReader dataFromServer)
        {
            ReadResearchTechnologyOrder(dataFromServer, out var recipeId);

            Simulation.Data.TechnologyDefinition definition = Databases.Instance.TechnologyDefinitions[recipeId];

            this.ApplyResearchTechnologyOrder(definition);
        }
예제 #2
0
        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.");
            }
        }
예제 #3
0
        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;
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }