public override void OnUpdate()
            {
                WorldSide localSide = World_AIW2.Instance.GetLocalSide();

                if (localSide == null)
                {
                    return;
                }
                ArcenUI_ButtonSet     elementAsType    = (ArcenUI_ButtonSet)Element;
                Window_InGameTechMenu windowController = (Window_InGameTechMenu)Element.Window.Controller;

                if (elementAsType.Buttons.Count <= 0)
                {
                    elementAsType.ClearButtons();

                    List <TechMenu> menus     = TechMenuTable.Instance.Rows;
                    int             menuIndex = 0;
                    for (int x = 0; x < menus.Count; x++)
                    {
                        TechMenu item = menus[x];
                        if (item.DoNotShowOnTechMenu)
                        {
                            continue;
                        }
                        bMenuSelectionItem newButtonController = new bMenuSelectionItem(x);
                        Vector2            offset;
                        offset.x = menuIndex * elementAsType.ButtonWidth;
                        offset.y = 0;
                        Vector2 size;
                        size.x = elementAsType.ButtonWidth;
                        size.y = elementAsType.ButtonHeight;
                        elementAsType.AddButton(newButtonController, size, offset);
                        menuIndex++;
                    }

                    windowController.MenuIndexChangedSinceLastButtonSetUpdate = true;
                }
            }
            public override void OnUpdate()
            {
                WorldSide localSide = World_AIW2.Instance.GetLocalSide();

                if (localSide == null)
                {
                    return;
                }
                ArcenUI_ButtonSet     elementAsType    = (ArcenUI_ButtonSet)Element;
                Window_InGameTechMenu windowController = (Window_InGameTechMenu)Element.Window.Controller;

                if (windowController.MenuIndexChangedSinceLastButtonSetUpdate)
                {
                    elementAsType.ClearButtons();

                    TechMenu menu = TechMenuTable.Instance.Rows[windowController.CurrentMenuIndex];
                    if (menu != null)
                    {
                        int shownColumnCount = 0;
                        for (int x = 0; x < menu.Columns.Count; x++)
                        {
                            bool haveShownAnythingInThisColumn = false;
                            List <TechTypeData> column         = menu.Columns[x];
                            for (int y = 0; y < column.Count; y++)
                            {
                                TechTypeData item = column[y];
                                if (item.NotOnMainTechMenu)
                                {
                                    continue;
                                }
                                if (item.Prerequisite != null)
                                {
                                    TechTypeData prereq   = item.Prerequisite;
                                    bool         foundOne = false;
                                    while (prereq != null)
                                    {
                                        if ((prereq.Prerequisite == null && !prereq.NotOnMainTechMenu) || localSide.GetHasResearched(prereq))
                                        {
                                            foundOne = true;
                                            break;
                                        }
                                        prereq = prereq.Prerequisite;
                                    }
                                    if (!foundOne)
                                    {
                                        continue;
                                    }
                                }
                                //if ( localSide.GetCanResearch( item ) != ArcenRejectionReason.Unknown &&
                                //     !localSide.UnlockedTechs.Contains( item ) )
                                //    continue;
                                haveShownAnythingInThisColumn = true;
                                bTechItem newButtonController = new bTechItem(item);
                                Vector2   offset;
                                offset.x = shownColumnCount * elementAsType.ButtonWidth;
                                offset.y = y * elementAsType.ButtonHeight;
                                Vector2 size;
                                size.x = elementAsType.ButtonWidth;
                                size.y = elementAsType.ButtonHeight;
                                elementAsType.AddButton(newButtonController, size, offset);
                            }
                            if (haveShownAnythingInThisColumn)
                            {
                                shownColumnCount++;
                            }
                        }
                    }

                    elementAsType.ActuallyPutItemsBackInPoolThatAreStillCleared();

                    windowController.MenuIndexChangedSinceLastButtonSetUpdate = false;
                }
            }
 public Window_InGameTechMenu()
 {
     Instance            = this;
     this.OnlyShowInGame = true;
 }