Exemple #1
0
            private unsafe void UpdateBoxes()
            {
                var       valueBox  = (InputBox)GetBox(0);
                const int firstBox  = 2;
                const int maxBoxes  = 40;
                bool      isInvalid = false;
                var       data      = Utils.GetEmptyArray <byte>();

                if (valueBox.HasAnyConnection)
                {
                    var valueType = valueBox.CurrentType;
                    if (valueType.IsEnum)
                    {
                        // Get enum entries
                        var entries = new List <EnumComboBox.Entry>();
                        EnumComboBox.BuildEntriesDefault(valueType.Type, entries);

                        // Setup switch value inputs
                        int        id   = firstBox;
                        ScriptType type = new ScriptType();
                        for (; id < maxBoxes; id++)
                        {
                            var box = GetBox(id);
                            if (box == null)
                            {
                                break;
                            }
                            if (box.HasAnyConnection)
                            {
                                type = box.Connections[0].CurrentType;
                                break;
                            }
                        }
                        id = firstBox;
                        for (; id < entries.Count + firstBox; id++)
                        {
                            var e   = entries[id - firstBox];
                            var box = AddBox(false, id, id - 1, e.Name, type, true);
                            if (!string.IsNullOrEmpty(e.Tooltip))
                            {
                                box.TooltipText = e.Tooltip;
                            }
                        }
                        for (; id < maxBoxes; id++)
                        {
                            var box = GetBox(id);
                            if (box == null)
                            {
                                break;
                            }
                            RemoveElement(box);
                        }

                        // Setup output
                        var outputBox = (OutputBox)GetBox(1);
                        outputBox.CurrentType = type;

                        // Build data about enum entries values for the runtime
                        if (Values[0] is byte[] dataPrev && dataPrev.Length == entries.Count * 4)
                        {
                            data = dataPrev;
                        }
                        else
                            data = new byte[entries.Count * 4];
                        fixed(byte *dataPtr = data)
                        {
                            int *dataValues = (int *)dataPtr;

                            for (int i = 0; i < entries.Count; i++)
                            {
                                dataValues[i] = entries[i].Value;
                            }
                        }
                    }
                    else
                    {
                        // Not an enum
                        isInvalid = true;
                    }
                }