Ejemplo n.º 1
0
        private void DestroyFactoryClientPass(BinaryReader dataFromServer)
        {
            ReadDestroyFactoryOrder(dataFromServer, out var recipeId);

            Simulation.Data.RecipeDefinition definition = Databases.Instance.RecipeDefinitions[recipeId];

            this.ApplyDestroyFactoryOrder(definition);
        }
Ejemplo n.º 2
0
        private void ApplyDestroyFactoryOrder(Simulation.Data.RecipeDefinition definition)
        {
            this.Resources[(int)ResourceType.AssemblingMachine1].Amount += new Number(1);

            var factory = this.Factories.Find(match => match.Definition == definition);

            factory.Count--;
        }
Ejemplo n.º 3
0
        private void CraftRecipeClientPass(BinaryReader dataFromServer)
        {
            ReadCraftRecipeOrder(dataFromServer, out var recipeId);

            Simulation.Data.RecipeDefinition definition = Databases.Instance.RecipeDefinitions[recipeId];

            this.ApplyCraftRecipeOrder(definition);
        }
Ejemplo n.º 4
0
        public bool CanCreateFactory(Simulation.Data.RecipeDefinition definition)
        {
            if (this.Resources[(int)ResourceType.AssemblingMachine1].Amount < new Number(1))
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 5
0
        private void ApplyCraftRecipeOrder(Simulation.Data.RecipeDefinition definition)
        {
            foreach (var resource in definition.Inputs)
            {
                this.Resources[(int)resource.Name].Amount -= resource.Amount;
            }

            this.ConstructionQueue.Add(new CraftTask(definition));
        }
Ejemplo n.º 6
0
        public bool CanCraftRecipe(Simulation.Data.RecipeDefinition definition)
        {
            bool resourcePrerequisites = true;

            foreach (var resource in definition.Inputs)
            {
                resourcePrerequisites &= resource.Amount <= this.Resources[(int)resource.Name].Amount;
            }

            return(resourcePrerequisites);
        }
Ejemplo n.º 7
0
        public async Task PostDestroyFactoryOrder(Simulation.Data.RecipeDefinition definition)
        {
            var header = GameClient.Instance.WriteOrderHeader(OrderType.DestroyFactory);

            WriteDestroyFactoryOrder(GameClient.Instance.Writer, definition.Id);

            header = await GameClient.Instance.PostOrder(header);

            if (header.Status != OrderStatus.Executed)
            {
                throw new System.Exception("Craft recipe order failed.");
            }
        }
Ejemplo n.º 8
0
        private void ApplyCreateFactoryOrder(Simulation.Data.RecipeDefinition definition)
        {
            this.Resources[(int)ResourceType.AssemblingMachine1].Amount -= new Number(1);

            var factory = this.Factories.Find(match => match.Definition == definition);

            if (factory == null)
            {
                factory = new Factory(definition);
                this.Factories.Add(factory);
            }

            factory.Count++;
        }
Ejemplo n.º 9
0
        public bool IsRecipeAvailable(Simulation.Data.RecipeDefinition definition)
        {
            foreach (var technology in TechnologyStatesByDefinition)
            {
                foreach (var unlock in technology.Key.Unlocks)
                {
                    if (unlock == definition)
                    {
                        return(technology.Value == ResearchStatus.Done);
                    }
                }
            }

            return(true);
        }
Ejemplo n.º 10
0
        private OrderStatus DestroyFactoryServerPass(BinaryReader dataFromClient, BinaryWriter dataToClient)
        {
            ReadDestroyFactoryOrder(dataFromClient, out var recipeId);

            Simulation.Data.RecipeDefinition definition = Databases.Instance.RecipeDefinitions[recipeId];

            if (!this.CanDestroyFactory(definition))
            {
                return(OrderStatus.Refused);
            }

            this.ApplyDestroyFactoryOrder(definition);

            WriteDestroyFactoryOrder(dataToClient, recipeId);

            return(OrderStatus.Validated);
        }
Ejemplo n.º 11
0
        private void DisplayRecipeTooltip(Simulation.Data.RecipeDefinition recipeDefinition)
        {
            const int titleHeight = 26;
            const int lineHeight  = 20;
            const int margin      = 5;
            int       marginCount = 5;

            // Inputs
            this.inputs.Definitions = recipeDefinition.Inputs.Cast <object>();
            var inputTransform = this.inputs.GetComponent <RectTransform>();

            inputTransform.sizeDelta = new Vector2(inputTransform.sizeDelta.x, titleHeight + recipeDefinition.Inputs.Length * lineHeight);

            // Outputs
            this.outputs.Definitions = recipeDefinition.Outputs.Cast <object>();
            var outputTransform = this.outputs.GetComponent <RectTransform>();

            outputTransform.anchoredPosition = new Vector2(outputTransform.anchoredPosition.x, inputTransform.anchoredPosition.y - inputTransform.rect.height - margin);
            outputTransform.sizeDelta        = new Vector2(outputTransform.sizeDelta.x, titleHeight + recipeDefinition.Outputs.Length * lineHeight);

            // Duration
            this.duration.text = recipeDefinition.Duration.ToString();
            var durationTransform = this.duration.transform.parent.GetComponent <RectTransform>();

            durationTransform.anchoredPosition = new Vector2(durationTransform.anchoredPosition.x, outputTransform.anchoredPosition.y - outputTransform.rect.height - margin);

            // Description.
            var descriptionTransform = this.recipeDescription.GetComponent <RectTransform>();

            this.recipeDescription.text = recipeDefinition.Description;
            if (string.IsNullOrEmpty(recipeDefinition.Description))
            {
                descriptionTransform.sizeDelta = new Vector2(descriptionTransform.sizeDelta.x, 0);
                marginCount--;
            }
            else
            {
                descriptionTransform.sizeDelta = new Vector2(descriptionTransform.sizeDelta.x, 44);
            }

            this.recipeTooltip.sizeDelta = new Vector2(this.recipeTooltip.sizeDelta.x, inputTransform.rect.height + outputTransform.rect.height + descriptionTransform.rect.height + titleHeight + marginCount * margin);
        }
Ejemplo n.º 12
0
 public Factory(Simulation.Data.RecipeDefinition definition)
 {
     this.Definition = definition;
 }
Ejemplo n.º 13
0
 public bool CanDestroyFactory(Simulation.Data.RecipeDefinition definition)
 {
     return(this.Factories.Any(factory => factory.Definition == definition && factory.Count > 0));
 }
Ejemplo n.º 14
0
 public CraftTask(Simulation.Data.RecipeDefinition definition)
 {
     this.Definition = definition;
 }