private static ConstructionInfo ParseContainingFile(string constructionCost)
        {
            ConstructionInfo result = null;

            var indexOfFileHeader = constructionCost.IndexOf("[[", StringComparison.OrdinalIgnoreCase);
            var valueString       = constructionCost.Substring(0, indexOfFileHeader).Trim();
            var temp = constructionCost.Remove(0, indexOfFileHeader);

            if (!double.TryParse(valueString, out double value))
            {
            }

            temp = temp.Replace("[[File:", string.Empty); //filename with space? .Replace(" ", string.Empty)
            var splitted = temp.Split(new[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
            var tempName = splitted[0];

            var unit = new CostUnit
            {
                Type = CostUnitType.File,
                Name = tempName.Trim()
            };

            result = new ConstructionInfo
            {
                Value = value,
                Unit  = unit
            };

            return(result);
        }
        private object Create(Type typeToCreate, ConstructionInfo info)
        {
            Type instantiatedType = info.Type;

            object[] parms = info.ParameterValues;

            // For each constructor parameter that was not provided in the call to Register,
            // retrive an object of the parameter type.
            for (int i = 0; i < info.Parameters.Length; i++)
            {
                if (!info.Parameters[i].IsValueSet)
                {
                    parms[i] = Get(info.Parameters[i].Type);
                }
            }

            ConstructorInfo ctor = instantiatedType.GetConstructor(info.ParameterTypes);

            if (ctor == null)
            {
                throw new InvalidOperationException("Constructor for type '" + instantiatedType.Name + "' was not found.");
            }

            return(ctor.Invoke(parms));
        }
        private static ConstructionInfo ParseContainingInfoIcon(string constructionCost)
        {
            ConstructionInfo result = null;

            if (!double.TryParse(constructionCost.Split(new[] { "{{" }, StringSplitOptions.RemoveEmptyEntries)[0], out double value))
            {
            }

            var splittedInfo = constructionCost.Split(new[] { "{{" }, StringSplitOptions.RemoveEmptyEntries);

            var unit = new CostUnit();

            if (splittedInfo[1].Contains("Infoicon"))
            {
                unit.Type = CostUnitType.InfoIcon;
            }
            else
            {
                unit.Type = CostUnitType.Unknown;
            }

            unit.Name = splittedInfo[1].Replace("}}", string.Empty).Replace("Infoicon", string.Empty).Trim();

            result = new ConstructionInfo
            {
                Value = double.Parse(splittedInfo[0]),
                Unit  = unit,
            };


            return(result);
        }
Esempio n. 4
0
        ConstructionInfo FindConstruction(IItemCollection primary, IItemCollection secondary, ItemType mainItem, CharClass charClass, out bool canBuild)
        {
            canBuild = false;
            ConstructionInfo best = null;

            if (constructions.ContainsKey(mainItem))
            {
                for (int i = 0; i < constructions[mainItem].Count; i++)
                {
                    ConstructionInfo construction = constructions[mainItem][i];
                    if (!construction.Classes[(int)charClass])
                    {
                        continue;
                    }

                    if (CanConstruct(primary, secondary, construction))
                    {
                        best     = construction;
                        canBuild = true;
                        break;
                    }
                    else if (best == null && MainItemsAvailable(primary, secondary, construction))
                    {
                        best = construction;
                    }
                }
            }

            return(best);
        }
        private static ConstructionInfo ParseContainingInfoIcon(string constructionCost)
        {
            ConstructionInfo result = null;

            var splittedInfo = constructionCost.Split(new[] { WIKITEXT_LINK_START }, StringSplitOptions.RemoveEmptyEntries);

            if (!double.TryParse(splittedInfo[0], out double parsedValue))
            {
                logger.Warn($"could not parse construction cost: \"{constructionCost}\"");
            }

            var unit = new CostUnit();

            if (splittedInfo[1].Contains("Infoicon"))
            {
                unit.Type = CostUnitType.InfoIcon;
            }
            else
            {
                unit.Type = CostUnitType.Unknown;
            }

            unit.Name = splittedInfo[1].Replace(WIKITEXT_LINK_END, string.Empty).Replace("Infoicon", string.Empty).Trim();

            result = new ConstructionInfo
            {
                Value = parsedValue,
                Unit  = unit,
            };


            return(result);
        }
Esempio n. 6
0
    private void SetPlacesToAttachTo()
    {
        ConstructionInfo constructionInfo = (ConstructionInfo)this.m_Info;

        for (int i = 0; i < constructionInfo.m_PlaceToAttachToNames.Count; i++)
        {
            this.m_PlacesToAttachToNames.Add(constructionInfo.m_PlaceToAttachToNames[i]);
        }
    }
Esempio n. 7
0
        bool MainItemsAvailable(IItemCollection primary, IItemCollection secondary, ConstructionInfo construction)
        {
            for (int i = 0; i < construction.MainItems.Length; i++)
            {
                if (primary.Contains(construction.MainItems[i]) || secondary.Contains(construction.MainItems[i]))
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 8
0
    public void Build(PlayerVO ower, E_Building buildingType, MainBaseVO mainBaseVO)
    {
        IBuildingVO buildingVO = null;
        Vector3Int  center     = default;
        int         radius     = 0;
        int         count      = 0;

        if (mainBaseVO != null)
        {
            center = mainBaseVO.tilePositon;
            radius = mainBaseVO.radius;
        }
        switch (buildingType)
        {
        case E_Building.None:
            break;

        case E_Building.MainBase:
            buildingVO = new MainBaseVO();
            count      = GetBuildMainbasePositionClose(_ConstructionInfos, ower);
            break;

        case E_Building.FarmLand:
            buildingVO = new FarmLandVO();
            count      = GetBuildPosition(_ConstructionInfos, center, radius, buildingVO.rect);
            break;

        case E_Building.GoldMine:
            buildingVO = new GoldMineVO();
            count      = GetBuildPosition(_ConstructionInfos, center, radius, buildingVO.rect);
            break;

        case E_Building.MilitaryCamp:
            buildingVO = new MilitaryCampVO();
            count      = GetBuildPosition(_ConstructionInfos, center, radius, buildingVO.rect);
            break;

        default:
            break;
        }
        ConstructionInfo constructionInfo = _SelectConstructionHandler(_ConstructionInfos, count, 0);

        if (constructionInfo.isRotation)
        {
            buildingVO.Rotate();
        }
        buildingVO.tilePositon = constructionInfo.position;
        var msgParam = TwoMsgParamsPool <PlayerVO, IBuildingVO> .Instance.Pop();

        msgParam.InitParams(ower, buildingVO);
        sender.Invoke(GlobalSetting.Cmd_ConfirmConstruction, msgParam);
    }
Esempio n. 9
0
    private void SetPlacesToAttach()
    {
        ConstructionInfo constructionInfo = (ConstructionInfo)this.m_Info;

        for (int i = 0; i < constructionInfo.m_PlaceToAttachNames.Count; i++)
        {
            string    name      = constructionInfo.m_PlaceToAttachNames[i];
            Transform transform = base.gameObject.transform.FindDeepChild(name);
            if (transform != null)
            {
                this.m_PlacesToAttach.Add(transform);
            }
        }
    }
Esempio n. 10
0
        public Construction GetConstruction(Character technician, IItemCollection roomItems, Item mainItem)
        {
            int index = 3; // TODO

            bool canBuild = false;

            ConstructionInfo construction = FindConstruction(technician.Items, roomItems, mainItem.Type, technician.Class, out canBuild);

            Conversation conv = new Conversation();

            if (construction == null)
            {
                conv.Text = ResourceManager.GetStrings("men_" + defaultDialog.ToString("D3") + "?s" + index);
            }
            else
            {
                conv.Text = ResourceManager.GetStrings("men_" + construction.Dialog.ToString("D3") + "?s" + index);

                string[] repl = new string[] { "|E", "|F", "|G", "|H" };

                for (int i = 0; i < conv.Text.Length; i++)
                {
                    conv.Text[i] = conv.Text[i].Replace("|I", BurntimeClassic.Instance.Game.ItemTypes[construction.Result].Text);
                    for (int j = 0; j < construction.Items.Length; j++)
                    {
                        conv.Text[i] = conv.Text[i].Replace(repl[j], BurntimeClassic.Instance.Game.ItemTypes[construction.Items[j]].Text);
                    }
                }
            }

            conv.Choices = new ConversationChoice[3];

            conv.Choices[0] = new ConversationChoice();
            conv.Choices[1] = new ConversationChoice();
            if (canBuild)
            {
                conv.Choices[1].Action = new ConversationAction(ConversationActionType.Yes);
                conv.Choices[1].Text   = ResourceManager.GetString("burn?501").Replace("|I", BurntimeClassic.Instance.Game.ItemTypes[construction.Result].Text);
            }
            conv.Choices[2]        = new ConversationChoice();
            conv.Choices[2].Action = new ConversationAction(ConversationActionType.No);
            conv.Choices[2].Text   = ResourceManager.GetString("burn?503");

            Construction constr = new Construction();

            constr.Dialog       = conv;
            constr.construction = construction;
            return(constr);
        }
        private static ConstructionInfo ParseConstructionInfo(string constructionCost)
        {
            ConstructionInfo result = null;

            if (constructionCost.Contains("[[File:"))
            {
                result = ParseContainingFile(constructionCost);
            }
            else
            {
                result = ParseContainingInfoIcon(constructionCost);
            }

            return(result);
        }
Esempio n. 12
0
        public Constructions(ConfigFile file)
        {
            defaultDialog = file[""].GetInt("dialog");

            ConfigSection[] sections = file.GetAllSections();

            foreach (ConfigSection section in sections)
            {
                ConstructionInfo c = new ConstructionInfo();
                c.Result    = section.Name;
                c.Dialog    = section.GetInt("dialog");
                c.Items     = section.GetStrings("items");
                c.Tools     = section.GetStrings("tools");
                c.MainItems = section.GetStrings("main_items");
                c.Classes   = new bool[(int)CharClass.Count];

                string[] classNames = section.GetStrings("class");

                foreach (string name in classNames)
                {
                    try
                    {
                        CharClass enumValue = (CharClass)System.Enum.Parse(typeof(CharClass), name, true);
                        c.Classes[(int)enumValue] = true;
                    }
                    catch
                    {
                        Burntime.Platform.Log.Warning("Class not found in construction: " + name + "!");
                        continue;
                    }
                }

                foreach (string item in c.MainItems)
                {
                    if (!constructions.ContainsKey(item))
                    {
                        constructions.Add(item, new List <ConstructionInfo>());
                    }

                    constructions[item].Add(c);
                }
            }
        }
Esempio n. 13
0
        bool CanConstruct(IItemCollection primary, IItemCollection secondary, ConstructionInfo construction)
        {
            for (int i = 0; i < construction.Items.Length; i++)
            {
                if (!primary.Contains(construction.Items[i]) && !secondary.Contains(construction.Items[i]))
                {
                    return(false);
                }
            }

            for (int i = 0; i < construction.Tools.Length; i++)
            {
                if (!primary.Contains(construction.Tools[i]) && !secondary.Contains(construction.Tools[i]))
                {
                    return(false);
                }
            }

            return(true);
        }
Esempio n. 14
0
        private static IEnumerable <MappingInfo> AnalyzeLoadMethod(SemanticModel semanticModel, ISymbol loadMethod)
        {
            var syntaxNode    = loadMethod.DeclaringSyntaxReferences.Single().GetSyntax();
            var methodSymbols = syntaxNode.DescendantNodes()
                                .OfType <InvocationExpressionSyntax>()
                                .Select(invocationExpressionSyntax =>
                                        semanticModel.GetSymbolInfo(invocationExpressionSyntax.Expression).Symbol as IMethodSymbol)
                                .Where(e => e != null &&
                                       e.GetFullMetadataName() == ExternalLibraryInformation.Module.Register.FullName &&
                                       e.Parameters.IsEmpty);

            foreach (var mapping in methodSymbols.Select(e => e.TypeArguments)
                     .Where(typeArguments =>
                            typeArguments.Length == ExternalLibraryInformation.Module.RegisterMethodsGenericCount))
            {
                if (!(mapping[0] is INamedTypeSymbol from))
                {
                    throw new AnalyzerException(
                              $"Implementation is invalid: {mapping[0].ToDisplayString()}");
                }

                if (!from.Constructors.Any())
                {
                    throw new AnalyzerException(
                              $"Implementation has no constructor: {mapping[0].ToDisplayString()}");
                }

                var constructionInfos = from.Constructors.Select(constructor =>
                                                                 ConstructionInfo.Create(
                                                                     constructor.Parameters.Select(
                                                                         parameter => ParameterInfo.Create(parameter.Type.GetFullMetadataName()))
                                                                     .ToList()))
                                        .ToList();
                var fromInfo = FromInfo.Create(from.GetFullMetadataName(), constructionInfos);

                var to     = mapping[1];
                var toInfo = ToInfo.Create(to.GetFullMetadataName());

                yield return(MappingInfo.Create(fromInfo, toInfo));
            }
        }
Esempio n. 15
0
    private void SetupSurroundingConstructions()
    {
        Bounds coumpoundObjectBounds = General.GetCoumpoundObjectBounds(base.gameObject);

        DebugRender.DrawBox(coumpoundObjectBounds, Color.blue);
        List <Construction> list = new List <Construction>();

        for (int i = 0; i < Construction.s_EnabledConstructions.Count; i++)
        {
            Construction construction = Construction.s_EnabledConstructions[i];
            if (construction.gameObject.activeSelf && construction.m_Info != null)
            {
                float magnitude = (construction.gameObject.transform.position - base.gameObject.transform.position).magnitude;
                if (magnitude <= 10f)
                {
                    float paramsMulRadius = ((ConstructionInfo)construction.m_Info).m_ParamsMulRadius;
                    if (paramsMulRadius >= 0f)
                    {
                        if (magnitude < paramsMulRadius)
                        {
                            list.Add(construction);
                        }
                    }
                    else
                    {
                        Bounds coumpoundObjectBounds2 = General.GetCoumpoundObjectBounds(construction.gameObject);
                        DebugRender.DrawBox(coumpoundObjectBounds2, Color.blue);
                        if (coumpoundObjectBounds2.Intersects(coumpoundObjectBounds))
                        {
                            list.Add(construction);
                        }
                    }
                }
            }
        }
        if (this.m_RestingPlace)
        {
            float num = ((ConstructionInfo)this.m_RestingPlace.m_Info).m_RestingParamsMul;
            for (int j = 0; j < list.Count; j++)
            {
                ConstructionInfo constructionInfo = (ConstructionInfo)list[j].m_Info;
                if (list[j] != null && list[j].HasRestInfluence())
                {
                    num *= constructionInfo.m_RestingParamsMul;
                }
            }
            this.m_ParamsMul = num;
        }
        this.m_Shelter = null;
        this.m_Firecamps.Clear();
        foreach (Construction construction2 in list)
        {
            if (construction2.GetType() == typeof(Firecamp))
            {
                this.m_Firecamps.Add((Firecamp)construction2);
            }
            else if (construction2.m_Info.m_ID.ToString().ToLower().Contains("shelter"))
            {
                this.m_Shelter = construction2;
            }
        }
    }
Esempio n. 16
0
    private ConstructionInfo SelectConstructionInfoByGreedy(ConstructionInfo constructionArray, int count, int fromIndex = 0)
    {
        //TODO 获取加成最大者

        return(default);
 internal QuantizedBvh(ConstructionInfo info)
 {
 }