Exemplo n.º 1
0
        public void CloneBuilding(BuildingItem item, string cloneName, int level)
        {
            Configuration.Theme theme = selectedTheme;

            if (!theme.containsBuilding(cloneName))
            {
                Configuration.Building clone = new Configuration.Building(cloneName);
                clone.baseName = item.isCloned ? item.building.baseName : item.name;
                clone.level    = level;

                selectedTheme.buildings.Add(clone);
                m_isDistrictThemesDirty = true;

                // Refresh building list
                List <BuildingItem> list = GetBuildingItemList(theme);
                m_themes[theme] = list;

                m_buildingSelection.selectedIndex = -1;
                m_buildingSelection.rowsData      = Filter(list);

                // Select cloned item if displayed
                for (int i = 0; i < m_buildingSelection.rowsData.m_size; i++)
                {
                    BuildingItem buildingItem = m_buildingSelection.rowsData.m_buffer[i] as BuildingItem;
                    if (buildingItem.building == clone)
                    {
                        m_buildingSelection.selectedIndex = i;
                        m_buildingSelection.DisplayAt(i);
                        UpdateBuildingInfo(list[i]);
                        break;
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void Display(object data, bool isRowOdd)
        {
            SetupControls();

            float maxLabelWidth = width - 120;

            m_building  = data as BuildingItem;
            m_name.text = m_building.displayName;
            if (m_building.prefab == null)
            {
                m_name.text += " (Not Loaded)";
            }
            m_name.label.textColor     = m_building.GetStatusColor();
            m_name.label.isInteractive = false;
            m_name.isChecked           = m_building.included;

            m_level.text = m_building.level == 0 ? null : "L" + m_building.level;
            m_size.text  = m_building.sizeAsString;

            if (m_building.category != Category.None)
            {
                m_category.atlas      = UIUtils.GetAtlas(CategoryIcons.atlases[(int)m_building.category]);
                m_category.spriteName = CategoryIcons.spriteNames[(int)m_building.category];
                m_category.tooltip    = CategoryIcons.tooltips[(int)m_building.category];
                m_category.isVisible  = true;
            }
            else
            {
                m_category.isVisible = false;
            }

            if (m_building.steamID != null)
            {
                m_steamIcon.tooltip   = m_building.steamID;
                m_steamIcon.isVisible = true;

                maxLabelWidth -= 30;

                m_name.label.relativePosition = new Vector3(52, 2);
            }
            else
            {
                m_steamIcon.isVisible = false;

                m_name.label.relativePosition = new Vector3(22, 2);
            }

            if (isRowOdd)
            {
                background.backgroundSprite = "UnlockingItemBackground";
                background.color            = new Color32(0, 0, 0, 128);
            }
            else
            {
                background.backgroundSprite = null;
            }


            UIUtils.TruncateLabel(m_name.label, maxLabelWidth);
        }
        private void CheckValidity()
        {
            if (!m_name.text.IsNullOrWhiteSpace())
            {
                int.TryParse(m_level.selectedValue.Replace("Level ", ""), out m_selectedLevel);

                string prefix = "{{" + UIThemeManager.instance.selectedTheme.name + "}}.";
                string suffix = " L" + m_selectedLevel + " " + m_item.sizeAsString;

                m_cloneName = prefix + BuildingItem.CleanName(m_name.text) + suffix;

                m_ok.isEnabled = !UIThemeManager.instance.selectedTheme.containsBuilding(m_cloneName) && m_selectedLevel != m_item.level;

                if (m_ok.isEnabled && m_item.isCloned)
                {
                    BuildingItem baseItem = UIThemeManager.instance.GetBuildingItem(m_item.building.baseName);
                    m_ok.isEnabled = baseItem != null && baseItem.level != m_selectedLevel;
                }

                if (m_ok.isEnabled)
                {
                    m_ok.tooltip = null;
                }
                else
                {
                    m_ok.tooltip = "Building already exists with that level";
                }
            }
            else
            {
                m_ok.isEnabled = false;
                m_ok.tooltip   = "Please enter a name";
            }
        }
Exemplo n.º 4
0
        private List <BuildingItem> GetBuildingItemList(Configuration.Theme theme)
        {
            List <BuildingItem> list = new List <BuildingItem>();

            // List of all growables prefabs
            Dictionary <string, BuildingItem> buildingDictionary = new Dictionary <string, BuildingItem>();

            for (uint i = 0; i < PrefabCollection <BuildingInfo> .PrefabCount(); i++)
            {
                BuildingInfo prefab = PrefabCollection <BuildingInfo> .GetPrefab(i);

                if (prefab != null && prefab.m_placementStyle == ItemClass.Placement.Automatic)
                {
                    BuildingItem item = new BuildingItem();
                    item.prefab = PrefabCollection <BuildingInfo> .GetPrefab(i);

                    buildingDictionary.Add(item.name, item);

                    if (!BuildingVariationManager.instance.IsVariation(item.name))
                    {
                        list.Add(item);
                    }
                }
            }

            // Combine growables with buildings in configuration
            Configuration.Building[] buildings = theme.buildings.ToArray();
            for (int i = 0; i < buildings.Length; i++)
            {
                if (buildingDictionary.ContainsKey(buildings[i].name))
                {
                    // Associate building with prefab
                    BuildingItem item = buildingDictionary[buildings[i].name];
                    item.building = buildings[i];

                    if (!list.Contains(item))
                    {
                        list.Add(item);
                    }
                }
                else
                {
                    // Prefab not found, adding building without prefab

                    if (buildings[i].dlc != null && !Steam.IsDlcInstalled(Convert.ToUInt32(buildings[i].dlc)))
                    {
                        continue;
                    }

                    BuildingItem item = new BuildingItem();
                    item.building = buildings[i];
                    list.Add(item);
                }
            }

            // Sorting
            list.Sort(BuildingCompare);
            return(list);
        }
Exemplo n.º 5
0
 public void Plop(BuildingItem mItem)
 {
     var buildingTool = ToolsModifierControl.SetTool <BuildingTool>();
     {
         buildingTool.m_prefab   = mItem.prefab;
         buildingTool.m_relocate = 0;
     }
 }
Exemplo n.º 6
0
        public void Show(BuildingItem item)
        {
            m_item = item;

            m_noOption.isVisible           = false;
            m_include.isVisible            = false;
            m_spawnRate.parent.isVisible   = false;
            m_upgradeName.parent.isVisible = false;
            m_baseName.parent.isVisible    = false;
            m_plop.isVisible    = false;
            m_destroy.isVisible = false;

            if (m_item == null)
            {
                m_noOption.isVisible = true;
                return;
            }

            m_include.isVisible = true;
            m_include.isChecked = m_item.included;

            m_spawnRate.text             = "10";
            m_spawnRate.parent.isVisible = true;

            m_upgradeName.text             = "";
            m_upgradeBuilding              = null;
            m_upgradeName.parent.isVisible = m_item.level < m_item.maxLevel;

            if (m_item.building != null)
            {
                m_spawnRate.text = m_item.building.spawnRate.ToString();

                if (m_item.building.upgradeName != null && m_item.level < m_item.maxLevel)
                {
                    m_upgradeBuilding = UIThemeManager.instance.GetBuildingItem(m_item.building.upgradeName);
                    if (m_upgradeBuilding != null)
                    {
                        m_upgradeName.text = m_upgradeBuilding.displayName;
                    }
                }

                if (m_item.isCloned)
                {
                    m_baseBuilding = UIThemeManager.instance.GetBuildingItem(m_item.building.baseName);
                    if (m_baseBuilding != null)
                    {
                        m_baseName.text = m_baseBuilding.displayName;
                    }
                    m_baseName.parent.isVisible = true;
                }
            }

            if (m_item.prefab != null)
            {
                m_plop.isVisible    = true;
                m_destroy.isVisible = true;
            }
        }
Exemplo n.º 7
0
        public void Display(object data, bool isRowOdd)
        {
            SetupControls();

            m_building  = data as BuildingItem;
            m_name.text = m_building.displayName;

            UIUtils.TruncateLabel(m_name, width - 40);
            m_size.text = m_building.sizeAsString;

            backgroundSprite = null;
        }
        protected override void OnVisibilityChanged()
        {
            base.OnVisibilityChanged();

            UIComponent modalEffect = GetUIView().panelsLibraryModalEffect;

            if (isVisible)
            {
                if (UIThemeManager.instance.selectedBuilding == null)
                {
                    UIView.PopModal();
                    Hide();
                    return;
                }

                m_item = UIThemeManager.instance.selectedBuilding;

                // Name
                m_name.text = m_item.displayName;

                // Level
                int maxLevel = m_item.maxLevel;
                m_level.items = new string[0];
                for (int i = 1; i <= maxLevel; i++)
                {
                    m_level.AddItem("Level " + i);
                }
                m_level.selectedIndex = (m_item.level < maxLevel) ? m_item.level : 0;

                CheckValidity();

                if (modalEffect != null)
                {
                    modalEffect.Show(false);
                    ValueAnimator.Animate("NewThemeModalEffect", delegate(float val)
                    {
                        modalEffect.opacity = val;
                    }, new AnimatedFloat(0f, 1f, 0.7f, EasingType.CubicEaseOut));
                }
            }
            else if (modalEffect != null)
            {
                ValueAnimator.Animate("NewThemeModalEffect", delegate(float val)
                {
                    modalEffect.opacity = val;
                }, new AnimatedFloat(1f, 0f, 0.7f, EasingType.CubicEaseOut), delegate
                {
                    modalEffect.Hide();
                });
            }
        }
Exemplo n.º 9
0
        public void ChangeUpgradeBuilding(BuildingItem building)
        {
            CreateBuilding(selectedBuilding);
            if (building == null)
            {
                selectedBuilding.building.upgradeName = null;
            }
            else
            {
                selectedBuilding.building.upgradeName = building.name;
            }

            m_isDistrictThemesDirty = true;
        }
Exemplo n.º 10
0
        public void ChangeBuildingStatus(BuildingItem item, bool include)
        {
            if (include == item.included)
            {
                return;
            }

            CreateBuilding(item);
            item.building.include = include;

            m_isDistrictThemesDirty = true;

            m_themeSelection.Refresh();
            m_buildingSelection.Refresh();
        }
Exemplo n.º 11
0
        public void Show(BuildingItem item)
        {
            m_item = item;

            if(item == null)
            {
                m_noInfo.isVisible = true;
                m_category.isVisible = false;
                m_level.isVisible = false;
                m_size.isVisible = false;
            }
            else
            {
                m_noInfo.isVisible = false;

                Category category = m_item.category;
                if(category != Category.None)
                {
                    m_category.text = _categoryNames[(int)category];
                    m_category.isVisible = true;
                }
                else
                {
                    m_category.isVisible = false;
                }

                if (!item.level.IsNullOrWhiteSpace())
                {
                    m_level.text = item.level.Replace("L", "Level ");
                    m_level.isVisible = true;
                }
                else
                {
                    m_level.isVisible = false;
                }

                if (!item.size.IsNullOrWhiteSpace())
                {
                    m_size.text = item.size.Replace("L", "Level ");
                    m_size.isVisible = true;
                }
                else
                {
                    m_size.isVisible = false;
                }
            }
        }
Exemplo n.º 12
0
        private void CreateBuilding(BuildingItem item)
        {
            if (item.building != null)
            {
                return;
            }

            Configuration.Building building = new Configuration.Building(item.name);
            building.baseName = BuildingVariationManager.instance.GetBasePrefabName(item.name);
            building.include  = false;

            if (!selectedTheme.containsBuilding(building.name))
            {
                selectedTheme.buildings.Add(building);
                item.building = building;
            }
        }
Exemplo n.º 13
0
        public void Display(object data, bool isRowOdd)
        {
            SetupControls();

            float maxLabelWidth = width - 120;

            m_building = data as BuildingItem;
            m_name.text = m_building.displayName;
            m_name.label.textColor = m_building.GetStatusColor();
            m_name.label.isInteractive = false;
            m_name.isChecked = m_building.included;

            m_level.text = m_building.level;
            m_size.text = m_building.size;

            if(m_building.steamID != null)
            {
                m_steamIcon.tooltip = m_building.steamID;
                m_steamIcon.isVisible = true;

                maxLabelWidth -= 30;

                m_name.label.relativePosition = new Vector3(52, 2);
            }
            else
            {
                m_steamIcon.isVisible = false;

                m_name.label.relativePosition = new Vector3(22, 2);
            }

            if (isRowOdd)
            {
                background.backgroundSprite = "UnlockingItemBackground";
                background.color = new Color32(0, 0, 0, 128);
            }
            else
            {
                background.backgroundSprite = null;
            }

            UIUtils.TruncateLabel(m_name.label, maxLabelWidth);
        }
Exemplo n.º 14
0
        public void ShowDropDown()
        {
            Category category = m_item.category;

            if (category == Category.None && m_item.isCloned)
            {
                BuildingItem item = UIThemeManager.instance.GetBuildingItem(m_item.building.baseName);
                if (item != null)
                {
                    category = item.category;
                }
            }

            FastList <object> list = UIThemeManager.instance.GetBuildingsFiltered(category, m_item.level + 1, m_item.size, m_upgradeName.text);

            if (m_dropDownList == null)
            {
                m_dropDownList                    = UIFastList.Create <UIDropDownItem>(GetRootContainer());
                m_dropDownList.width              = m_upgradeName.width;
                m_dropDownList.rowHeight          = 30;
                m_dropDownList.autoHideScrollbar  = true;
                m_dropDownList.canSelect          = true;
                m_dropDownList.selectOnMouseEnter = true;
                m_dropDownList.canFocus           = true;
                m_dropDownList.backgroundSprite   = "GenericPanelLight";
                m_dropDownList.backgroundColor    = new Color32(45, 52, 61, 255);
                m_dropDownList.absolutePosition   = m_upgradeName.absolutePosition + new Vector3(0, m_upgradeName.height);
            }

            m_dropDownList.height    = Mathf.Min(list.m_size * 30, 150);
            m_dropDownList.rowsData  = list;
            m_dropDownList.isVisible = list.m_size > 0;
            if (m_dropDownList.isVisible)
            {
                m_dropDownList.selectedIndex = 0;
            }
            else
            {
                m_dropDownList.selectedIndex = -1;
            }
        }
Exemplo n.º 15
0
        public void DestroyAll(BuildingItem m_item)
        {
            var simulationManager = SimulationManager.instance.AddAction(() =>
            {
                var buildings = BuildingManager.instance.m_buildings.m_buffer;
                for (ushort buildingId = 0; buildingId < buildings.Length; buildingId++)
                {
                    var building = buildings[buildingId];
                    if (building.Info == null)
                    {
                        continue;
                    }

                    if (building.Info.name != m_item.name)
                    {
                        continue;
                    }

                    Destroy(buildingId, building);
                }
            });
        }
Exemplo n.º 16
0
        public FastList <object> GetBuildingsFiltered(Category category, int level, Vector2 size, string name)
        {
            List <BuildingItem> list     = m_themes[selectedTheme];
            FastList <object>   filtered = new FastList <object>();

            for (int i = 0; i < list.Count; i++)
            {
                BuildingItem item = (BuildingItem)list[i];

                // Category
                if (category != Category.None && item.category != category)
                {
                    continue;
                }

                // Level
                if (item.level != level)
                {
                    continue;
                }

                // size
                if (item.size.x != size.x || item.size.y > size.y)
                {
                    continue;
                }

                // Name
                if (!item.name.ToLower().Contains(name.ToLower()))
                {
                    continue;
                }

                filtered.Add(item);
            }

            return(filtered);
        }
Exemplo n.º 17
0
        private static int BuildingCompare(BuildingItem a, BuildingItem b)
        {
            // Sort by category > displayName > level > size > name
            int compare = (int)a.category - (int)b.category;

            if (compare == 0)
            {
                compare = a.displayName.CompareTo(b.displayName);
            }
            if (compare == 0)
            {
                compare = a.level.CompareTo(b.level);
            }
            if (compare == 0)
            {
                compare = a.sizeAsString.CompareTo(b.sizeAsString);
            }
            if (compare == 0)
            {
                compare = a.name.CompareTo(b.name);
            }

            return(compare);
        }
Exemplo n.º 18
0
        public void ChangeBuildingStatus(BuildingItem item, bool include)
        {
            if (include == item.included) return;

            CreateBuilding(item);
            item.building.include = include;

            m_isDistrictThemesDirty = true;

            m_themeSelection.Refresh();
            m_buildingSelection.Refresh();
        }
Exemplo n.º 19
0
        public void CloneBuilding(BuildingItem item, string cloneName, int level)
        {
            Configuration.Theme theme = selectedTheme;

            if (!theme.containsBuilding(cloneName))
            {
                Configuration.Building clone = new Configuration.Building(cloneName);
                clone.baseName = item.isCloned ? item.building.baseName : item.name;
                clone.level = level;

                selectedTheme.buildings.Add(clone);
                m_isDistrictThemesDirty = true;

                // Refresh building list
                List<BuildingItem> list = GetBuildingItemList(theme);
                m_themes[theme] = list;

                m_buildingSelection.selectedIndex = -1;
                m_buildingSelection.rowsData = Filter(list);

                // Select cloned item if displayed
                for (int i = 0; i < m_buildingSelection.rowsData.m_size; i++)
                {
                    BuildingItem buildingItem = m_buildingSelection.rowsData.m_buffer[i] as BuildingItem;
                    if (buildingItem.building == clone)
                    {
                        m_buildingSelection.selectedIndex = i;
                        m_buildingSelection.DisplayAt(i);
                        UpdateBuildingInfo(list[i]);
                        break;
                    }
                }
            }
        }
Exemplo n.º 20
0
        protected override void OnVisibilityChanged()
        {
            base.OnVisibilityChanged();

            UIComponent modalEffect = GetUIView().panelsLibraryModalEffect;

            if (isVisible)
            {
                if (UIThemeManager.instance.selectedBuilding == null)
                {
                    UIView.PopModal();
                    Hide();
                    return;
                }

                m_item = UIThemeManager.instance.selectedBuilding;

                // Name
                m_name.text = m_item.displayName;

                // Level
                int maxLevel = m_item.maxLevel;
                m_level.items = new string[0];
                for (int i = 1; i <= maxLevel; i++ ) m_level.AddItem("Level " + i);
                m_level.selectedIndex = (m_item.level < maxLevel) ? m_item.level : 0;

                CheckValidity();

                if (modalEffect != null)
                {
                    modalEffect.Show(false);
                    ValueAnimator.Animate("NewThemeModalEffect", delegate(float val)
                    {
                        modalEffect.opacity = val;
                    }, new AnimatedFloat(0f, 1f, 0.7f, EasingType.CubicEaseOut));
                }
            }
            else if (modalEffect != null)
            {
                ValueAnimator.Animate("NewThemeModalEffect", delegate(float val)
                {
                    modalEffect.opacity = val;
                }, new AnimatedFloat(1f, 0f, 0.7f, EasingType.CubicEaseOut), delegate
                {
                    modalEffect.Hide();
                });
            }
        }
Exemplo n.º 21
0
        private List<BuildingItem> GetBuildingItemList(Configuration.Theme theme)
        {
            // List of all growables prefabs
            Dictionary<string, BuildingItem> buildingDictionary = new Dictionary<string, BuildingItem>();
            for (uint i = 0; i < PrefabCollection<BuildingInfo>.PrefabCount(); i++)
            {
                BuildingInfo prefab = PrefabCollection<BuildingInfo>.GetPrefab(i);
                if (prefab != null && prefab.m_placementStyle == ItemClass.Placement.Automatic)
                {
                    BuildingItem item = new BuildingItem();
                    item.prefab = PrefabCollection<BuildingInfo>.GetPrefab(i);
                    buildingDictionary.Add(item.name, item);
                }
            }

            // Combine growables with buildings in configuration
            List<BuildingItem> list = buildingDictionary.Values.ToList<BuildingItem>();

            Configuration.Building[] buildings = theme.buildings.ToArray();
            for (int i = 0; i < buildings.Length; i++)
            {
                if (buildingDictionary.ContainsKey(buildings[i].name))
                {
                    // Associate building with prefab
                    BuildingItem item = buildingDictionary[buildings[i].name];
                    item.building = buildings[i];
                    // TODO: better fix
                    if (!item.building.include) item.building.isBuiltIn = true;
                }
                else
                {
                    // Prefab not found, adding building without prefab
                    BuildingItem item = new BuildingItem();
                    item.building = buildings[i];
                    list.Add(item);
                }
            }

            // Sorting
            list.Sort(BuildingCompare);
            return list;
        }
Exemplo n.º 22
0
        private static int BuildingCompare(BuildingItem a, BuildingItem b)
        {
            // Sort by category > displayName > level > size > name
            int compare = (int)a.category - (int)b.category;
            if (compare == 0) compare = a.displayName.CompareTo(b.displayName);
            if (compare == 0) compare = a.level.CompareTo(b.level);
            if (compare == 0) compare = a.sizeAsString.CompareTo(b.sizeAsString);
            if (compare == 0) compare = a.name.CompareTo(b.name);

            return compare;
        }
Exemplo n.º 23
0
 public void UpdateBuildingInfo(BuildingItem item)
 {
     m_buildingPreview.Show(item);
     m_buildingOptions.Show(item);
 }
Exemplo n.º 24
0
        public void Show(BuildingItem item)
        {
            if (m_item == item) return;

            m_item = item;
            m_renderPrefab = (m_item == null) ? null : m_item.prefab;

            // Preview
            if (m_renderPrefab != null && m_renderPrefab.m_mesh != null)
            {
                m_previewRenderer.cameraRotation = 210f;
                m_previewRenderer.zoom = 4f;
                m_previewRenderer.mesh = m_renderPrefab.m_mesh;
                m_previewRenderer.material = m_renderPrefab.m_material;

                RenderPreview();

                m_preview.texture = m_previewRenderer.texture;

                m_noPreview.isVisible = false;
            }
            else
            {
                m_preview.texture = null;
                m_noPreview.isVisible = true;
            }

            m_buildingName.isVisible = false;
            m_categoryIcon.isVisible = false;
            m_level.isVisible = false;
            m_size.isVisible = false;

            if(item == null) return;

            // Name
            m_buildingName.isVisible = true;
            m_buildingName.text = m_item.displayName;
            UIUtils.TruncateLabel(m_buildingName, width - 45);
            m_buildingName.autoHeight = true;

            // Category icon
            Category category = m_item.category;
            if (category != Category.None)
            {
                m_categoryIcon.atlas = UIUtils.GetAtlas(CategoryIcons.atlases[(int)category]);
                m_categoryIcon.spriteName = CategoryIcons.spriteNames[(int)category];
                m_categoryIcon.tooltip = CategoryIcons.tooltips[(int)category];
                m_categoryIcon.isVisible = true;
            }

            // Level
            if (m_item.level != 0)
            {
                m_level.text = "Level " + m_item.level;
                m_level.isVisible = true;
            }

            // Size
            if (m_item.size != Vector2.zero)
            {
                m_size.text = m_item.sizeAsString;
                m_size.isVisible = true;

                m_size.autoSize = true;
                m_size.relativePosition = new Vector3(width - m_size.width - 7, height - 20);
            }
        }
Exemplo n.º 25
0
        public void Show(BuildingItem item)
        {
            m_item = item;

            m_noOption.isVisible = false;
            m_include.isVisible = false;
            m_spawnRate.parent.isVisible = false;
            m_upgradeName.parent.isVisible = false;
            m_baseName.parent.isVisible = false;

            if (m_item == null)
            {
                m_noOption.isVisible = true;
                return;
            }

            m_include.isVisible = true;
            m_include.isChecked = m_item.included;

            m_spawnRate.text = "10";
            m_spawnRate.parent.isVisible = true;

            m_upgradeName.text = "";
            m_upgradeBuilding = null;
            m_upgradeName.parent.isVisible = m_item.level < m_item.maxLevel;

            if (m_item.building != null)
            {
                m_spawnRate.text = m_item.building.spawnRate.ToString();


                if (m_item.building.upgradeName != null && m_item.level < m_item.maxLevel)
                {
                    m_upgradeBuilding = UIThemeManager.instance.GetBuildingItem(m_item.building.upgradeName);
                    if (m_upgradeBuilding != null) m_upgradeName.text = m_upgradeBuilding.displayName;
                }

                if (m_item.isCloned)
                {
                    m_baseBuilding = UIThemeManager.instance.GetBuildingItem(m_item.building.baseName);
                    if (m_baseBuilding != null) m_baseName.text = m_baseBuilding.displayName;
                    m_baseName.parent.isVisible = true;
                }
            }
        }
Exemplo n.º 26
0
        public void Display(object data, bool isRowOdd)
        {
            SetupControls();

            m_building = data as BuildingItem;
            m_name.text = m_building.displayName;

            UIUtils.TruncateLabel(m_name, width - 40);
            m_size.text = m_building.sizeAsString;

            backgroundSprite = null;
        }
Exemplo n.º 27
0
        public void Show(BuildingItem item)
        {
            if (m_item == item)
            {
                return;
            }

            m_item         = item;
            m_renderPrefab = (m_item == null) ? null : m_item.prefab;

            // Preview
            if (m_renderPrefab != null && m_renderPrefab.m_mesh != null)
            {
                m_previewRenderer.cameraRotation = 210f;
                m_previewRenderer.zoom           = 4f;
                m_previewRenderer.mesh           = m_renderPrefab.m_mesh;
                m_previewRenderer.material       = m_renderPrefab.m_material;

                RenderPreview();

                m_preview.texture = m_previewRenderer.texture;

                m_noPreview.isVisible = false;
            }
            else
            {
                m_preview.texture     = null;
                m_noPreview.isVisible = true;
            }

            m_buildingName.isVisible = false;
            m_categoryIcon.isVisible = false;
            m_level.isVisible        = false;
            m_size.isVisible         = false;

            if (item == null)
            {
                return;
            }

            // Name
            m_buildingName.isVisible = true;
            m_buildingName.text      = m_item.displayName;
            UIUtils.TruncateLabel(m_buildingName, width - 45);
            m_buildingName.autoHeight = true;

            // Category icon
            Category category = m_item.category;

            if (category != Category.None)
            {
                m_categoryIcon.atlas      = UIUtils.GetAtlas(CategoryIcons.atlases[(int)category]);
                m_categoryIcon.spriteName = CategoryIcons.spriteNames[(int)category];
                m_categoryIcon.tooltip    = CategoryIcons.tooltips[(int)category];
                m_categoryIcon.isVisible  = true;
            }

            // Level
            if (m_item.level != 0)
            {
                m_level.text      = "Level " + m_item.level;
                m_level.isVisible = true;
            }

            // Size
            if (m_item.size != Vector2.zero)
            {
                m_size.text      = m_item.sizeAsString;
                m_size.isVisible = true;

                m_size.autoSize         = true;
                m_size.relativePosition = new Vector3(width - m_size.width - 7, height - 20);
            }
        }
Exemplo n.º 28
0
        private List <BuildingItem> GetBuildingItemList(Configuration.Theme theme)
        {
            List <BuildingItem> list = new List <BuildingItem>();

            // List of all growables prefabs
            Dictionary <string, BuildingItem> buildingDictionary = new Dictionary <string, BuildingItem>();

            for (uint i = 0; i < PrefabCollection <BuildingInfo> .PrefabCount(); i++)
            {
                BuildingInfo prefab = PrefabCollection <BuildingInfo> .GetPrefab(i);

                if (prefab != null && prefab.m_placementStyle == ItemClass.Placement.Automatic)
                {
                    BuildingItem item = new BuildingItem();
                    item.prefab = PrefabCollection <BuildingInfo> .GetPrefab(i);

                    if (!buildingDictionary.ContainsKey(item.name))
                    {
                        buildingDictionary.Add(item.name, item);
                    }

                    if (!BuildingVariationManager.instance.IsVariation(item.name))
                    {
                        list.Add(item);
                    }
                }
            }

            // Combine growables with buildings in configuration
            Configuration.Building[] buildings = theme.buildings.ToArray();
            for (int i = 0; i < buildings.Length; i++)
            {
                if (buildingDictionary.ContainsKey(buildings[i].name))
                {
                    // Associate building with prefab
                    BuildingItem item = buildingDictionary[buildings[i].name];
                    item.building = buildings[i];

                    if (!list.Contains(item))
                    {
                        list.Add(item);
                    }
                }
                else
                {
                    // Prefab not found, adding building without prefab

                    if (buildings[i].dlc != null && !PlatformService.IsDlcInstalled(Convert.ToUInt32(buildings[i].dlc)))
                    {
                        continue;
                    }
                    if (buildings[i].environments != null &&
                        (buildings[i].environments.Contains("-" + SimulationManager.instance.m_metaData.m_environment) ||
                         !buildings[i].environments.Contains("+" + SimulationManager.instance.m_metaData.m_environment)))
                    {
                        continue;
                    }

                    BuildingItem item = new BuildingItem();
                    item.building = buildings[i];
                    list.Add(item);
                }
            }

            // Sorting
            try
            {
                list.Sort(BuildingCompare);
            }
            catch (Exception e)
            {
                Debug.LogException(e);
                // ignore this error. seems harmless
            }
            return(list);
        }
Exemplo n.º 29
0
        private static int BuildingCompare(BuildingItem a, BuildingItem b)
        {
            // Sort by displayName > level > size > name
            int compare = a.displayName.CompareTo(b.displayName);
            if (compare == 0) compare = a.level.CompareTo(b.level);
            if (compare == 0) compare = a.size.CompareTo(b.size);
            if (compare == 0) compare = a.name.CompareTo(b.name);

            return compare;
        }
Exemplo n.º 30
0
        public void ChangeUpgradeBuilding(BuildingItem building)
        {
            CreateBuilding(selectedBuilding);
            if (building == null)
                selectedBuilding.building.upgradeName = null;
            else
                selectedBuilding.building.upgradeName = building.name;

            m_isDistrictThemesDirty = true;
        }
Exemplo n.º 31
0
        private void CreateBuilding(BuildingItem item)
        {
            if (item.building != null) return;

            Configuration.Building building = new Configuration.Building(item.name);
            building.baseName = BuildingVariationManager.instance.GetBasePrefabName(item.name);
            building.include = false;

            if (!selectedTheme.containsBuilding(building.name))
            {
                selectedTheme.buildings.Add(building);
                item.building = building;
            }
        }
Exemplo n.º 32
0
        public void UpdateBuildingInfo(BuildingItem item)
        {
            m_buildingOptions.Show(item);

            m_renderPrefab = (item == null) ? null : item.prefab;

            if (m_renderPrefab != null && m_renderPrefab.m_mesh != null)
            {
                m_previewRenderer.cameraRotation = 210f;
                m_previewRenderer.zoom = 4f;
                m_previewRenderer.mesh = m_renderPrefab.m_mesh;
                m_previewRenderer.material = m_renderPrefab.m_material;

                RenderPreview();

                m_preview.texture = m_previewRenderer.texture;

                m_noPreview.isVisible = false;
            }
            else
            {
                m_preview.texture = null;
                m_noPreview.isVisible = true;
            }
        }
Exemplo n.º 33
0
        private List<BuildingItem> GetBuildingItemList(Configuration.Theme theme)
        {
            List<BuildingItem> list = new List<BuildingItem>();

            // List of all growables prefabs
            Dictionary<string, BuildingItem> buildingDictionary = new Dictionary<string, BuildingItem>();
            for (uint i = 0; i < PrefabCollection<BuildingInfo>.PrefabCount(); i++)
            {
                BuildingInfo prefab = PrefabCollection<BuildingInfo>.GetPrefab(i);
                if (prefab != null && prefab.m_placementStyle == ItemClass.Placement.Automatic)
                {
                    BuildingItem item = new BuildingItem();
                    item.prefab = PrefabCollection<BuildingInfo>.GetPrefab(i);
                    buildingDictionary.Add(item.name, item);

                    if (!BuildingVariationManager.instance.IsVariation(item.name))
                        list.Add(item);
                }
            }

            // Combine growables with buildings in configuration
            Configuration.Building[] buildings = theme.buildings.ToArray();
            for (int i = 0; i < buildings.Length; i++)
            {
                if (buildingDictionary.ContainsKey(buildings[i].name))
                {
                    // Associate building with prefab
                    BuildingItem item = buildingDictionary[buildings[i].name];
                    item.building = buildings[i];

                    if (!list.Contains(item)) list.Add(item);
                }
                else
                {
                    // Prefab not found, adding building without prefab

                    if (buildings[i].dlc != null && !Steam.IsDlcInstalled(Convert.ToUInt32(buildings[i].dlc))) continue;

                    BuildingItem item = new BuildingItem();
                    item.building = buildings[i];
                    list.Add(item);
                }
            }

            // Sorting
            list.Sort(BuildingCompare);
            return list;
        }
Exemplo n.º 34
0
        private FastList <object> Filter(List <BuildingItem> list)
        {
            List <BuildingItem> filtered = new List <BuildingItem>();

            for (int i = 0; i < list.Count; i++)
            {
                BuildingItem item = (BuildingItem)list[i];

                // Origin
                if (m_filter.buildingOrigin == Origin.Default && item.isCustomAsset)
                {
                    continue;
                }
                if (m_filter.buildingOrigin == Origin.Custom && !item.isCustomAsset)
                {
                    continue;
                }
                if (m_filter.buildingOrigin == Origin.Cloned && !item.isCloned)
                {
                    continue;
                }

                // Status
                if (m_filter.buildingStatus == Status.Included && !item.included)
                {
                    continue;
                }
                if (m_filter.buildingStatus == Status.Excluded && item.included)
                {
                    continue;
                }

                // Level
                int level = (int)(m_filter.buildingLevel + 1);
                if (m_filter.buildingLevel != ItemClass.Level.None && item.level != level)
                {
                    continue;
                }

                // size
                Vector2 buildingSize = m_filter.buildingSize;
                if (buildingSize != Vector2.zero && item.size != buildingSize)
                {
                    continue;
                }

                // zone
                if (!m_filter.IsAllZoneSelected())
                {
                    Category category = item.category;
                    if (category == Category.None || !m_filter.IsZoneSelected(category))
                    {
                        continue;
                    }
                }
                // Name
                if (!m_filter.buildingName.IsNullOrWhiteSpace() && !item.name.ToLower().Contains(m_filter.buildingName.ToLower()))
                {
                    continue;
                }

                filtered.Add(item);
            }

            list = filtered;

            FastList <object> fastList = new FastList <object>();

            fastList.m_buffer = list.ToArray();
            fastList.m_size   = list.Count;

            return(fastList);
        }
Exemplo n.º 35
0
 public void UpdateBuildingInfo(BuildingItem item)
 {
     m_buildingPreview.Show(item);
     m_buildingOptions.Show(item);
 }
Exemplo n.º 36
0
        public void Display(object data, bool isRowOdd)
        {
            SetupControls();

            float maxLabelWidth = width - 120;

            m_building = data as BuildingItem;
            m_name.text = m_building.displayName;
            if (m_building.prefab == null) m_name.text += " (Not Loaded)";
            m_name.label.textColor = m_building.GetStatusColor();
            m_name.label.isInteractive = false;
            m_name.isChecked = m_building.included;

            m_level.text = m_building.level == 0 ? null : "L" + m_building.level;
            m_size.text = m_building.sizeAsString;

            if (m_building.category != Category.None)
            {
                m_category.atlas = UIUtils.GetAtlas(CategoryIcons.atlases[(int)m_building.category]);
                m_category.spriteName = CategoryIcons.spriteNames[(int)m_building.category];
                m_category.tooltip = CategoryIcons.tooltips[(int)m_building.category];
                m_category.isVisible = true;
            }
            else
                m_category.isVisible = false;

            if(m_building.steamID != null)
            {
                m_steamIcon.tooltip = m_building.steamID;
                m_steamIcon.isVisible = true;

                maxLabelWidth -= 30;

                m_name.label.relativePosition = new Vector3(52, 2);
            }
            else
            {
                m_steamIcon.isVisible = false;

                m_name.label.relativePosition = new Vector3(22, 2);
            }

            if (isRowOdd)
            {
                background.backgroundSprite = "UnlockingItemBackground";
                background.color = new Color32(0, 0, 0, 128);
            }
            else
            {
                background.backgroundSprite = null;
            }


            UIUtils.TruncateLabel(m_name.label, maxLabelWidth);
        }
Exemplo n.º 37
0
        private void SetupControls()
        {
            // Title Bar
            m_title            = AddUIComponent <UITitleBar>();
            m_title.title      = "Theme Manager";
            m_title.iconSprite = "ToolbarIconZoomOutCity";

            // Filter
            m_filter                  = AddUIComponent <UIBuildingFilter>();
            m_filter.width            = width - SPACING * 2;
            m_filter.height           = 70;
            m_filter.relativePosition = new Vector3(SPACING, TITLE_HEIGHT);

            m_filter.eventFilteringChanged += (c, i) =>
            {
                if (m_themeSelection != null && m_themeSelection.selectedIndex != -1)
                {
                    Configuration.Theme theme = m_themeSelection.selectedItem as Configuration.Theme;
                    m_buildingSelection.selectedIndex = -1;
                    m_buildingSelection.rowsData      = Filter(m_themes[theme]);
                }
            };

            // Panels
            UIPanel left = AddUIComponent <UIPanel>();

            left.width            = LEFT_WIDTH;
            left.height           = HEIGHT - m_filter.height;
            left.relativePosition = new Vector3(SPACING, TITLE_HEIGHT + m_filter.height + SPACING);

            UIPanel middle = AddUIComponent <UIPanel>();

            middle.width            = MIDDLE_WIDTH;
            middle.height           = HEIGHT - m_filter.height;
            middle.relativePosition = new Vector3(LEFT_WIDTH + SPACING * 2, TITLE_HEIGHT + m_filter.height + SPACING);

            UIPanel right = AddUIComponent <UIPanel>();

            right.width            = RIGHT_WIDTH;
            right.height           = HEIGHT - m_filter.height;
            right.relativePosition = new Vector3(LEFT_WIDTH + MIDDLE_WIDTH + SPACING * 3, TITLE_HEIGHT + m_filter.height + SPACING);

            // Theme selection
            m_themeSelection = UIFastList.Create <UIThemeItem>(left);

            m_themeSelection.backgroundSprite  = "UnlockingPanel";
            m_themeSelection.width             = left.width;
            m_themeSelection.height            = left.height - 40;
            m_themeSelection.canSelect         = true;
            m_themeSelection.rowHeight         = 40;
            m_themeSelection.autoHideScrollbar = true;
            m_themeSelection.relativePosition  = Vector3.zero;

            m_themeSelection.rowsData.m_buffer = m_themes.Keys.ToArray();
            m_themeSelection.rowsData.m_size   = m_themeSelection.rowsData.m_buffer.Length;
            m_themeSelection.DisplayAt(0);

            m_themeSelection.eventSelectedIndexChanged += (c, i) =>
            {
                if (i == -1)
                {
                    return;
                }

                int   listCount = m_buildingSelection.rowsData.m_size;
                float pos       = m_buildingSelection.listPosition;

                Configuration.Theme theme = m_themeSelection.selectedItem as Configuration.Theme;
                m_buildingSelection.selectedIndex = -1;
                m_buildingSelection.rowsData      = Filter(m_themes[theme]);

                if (m_filter.buildingStatus == Status.All && m_buildingSelection.rowsData.m_size == listCount)
                {
                    m_buildingSelection.DisplayAt(pos);
                }

                m_themeRemove.isEnabled = !((Configuration.Theme)m_themeSelection.selectedItem).isBuiltIn;
            };

            // Add theme
            m_themeAdd                  = UIUtils.CreateButton(left);
            m_themeAdd.width            = (LEFT_WIDTH - SPACING) / 2;
            m_themeAdd.text             = "New Theme";
            m_themeAdd.relativePosition = new Vector3(0, m_themeSelection.height + SPACING);

            m_themeAdd.eventClick += (c, p) =>
            {
                UIView.PushModal(UINewThemeModal.instance);
                UINewThemeModal.instance.Show(true);
            };

            // Remove theme
            m_themeRemove                  = UIUtils.CreateButton(left);
            m_themeRemove.width            = (LEFT_WIDTH - SPACING) / 2;
            m_themeRemove.text             = "Delete Theme";
            m_themeRemove.isEnabled        = false;
            m_themeRemove.relativePosition = new Vector3(LEFT_WIDTH - m_themeRemove.width, m_themeSelection.height + SPACING);

            m_themeRemove.eventClick += (c, p) =>
            {
                ConfirmPanel.ShowModal("Delete Theme", "Are you sure you want to delete '" + selectedTheme.name + "' theme ?",
                                       (d, i) => { if (i == 1)
                                                   {
                                                       DeleteTheme(selectedTheme);
                                                   }
                                       });
            };

            // Building selection
            m_buildingSelection = UIFastList.Create <UIBuildingItem>(middle);

            m_buildingSelection.backgroundSprite  = "UnlockingPanel";
            m_buildingSelection.width             = middle.width;
            m_buildingSelection.height            = middle.height - 40;
            m_buildingSelection.canSelect         = true;
            m_buildingSelection.rowHeight         = 40;
            m_buildingSelection.autoHideScrollbar = true;
            m_buildingSelection.relativePosition  = Vector3.zero;

            m_buildingSelection.rowsData = new FastList <object>();

            m_buildingSelection.eventSelectedIndexChanged += (c, i) =>
            {
                m_cloneBuilding.isEnabled = selectedBuilding != null && selectedBuilding.prefab != null;

                if (selectedBuilding != null && selectedBuilding.isCloned)
                {
                    BuildingItem item = GetBuildingItem(selectedBuilding.building.baseName);
                    m_cloneBuilding.isEnabled = item != null && item.prefab != null;
                }
            };

            m_buildingSelection.eventMouseLeave += (c, p) =>
            {
                UpdateBuildingInfo(selectedBuilding);
            };

            // Include buttons
            m_includeNone                  = UIUtils.CreateButton(middle);
            m_includeNone.width            = 55;
            m_includeNone.text             = "None";
            m_includeNone.relativePosition = new Vector3(MIDDLE_WIDTH - m_includeNone.width, m_buildingSelection.height + SPACING);

            m_includeAll                  = UIUtils.CreateButton(middle);
            m_includeAll.width            = 55;
            m_includeAll.text             = "All";
            m_includeAll.relativePosition = new Vector3(m_includeNone.relativePosition.x - m_includeAll.width - SPACING, m_buildingSelection.height + SPACING);

            UILabel include = middle.AddUIComponent <UILabel>();

            include.width            = 100;
            include.padding          = new RectOffset(0, 0, 8, 0);
            include.textScale        = 0.8f;
            include.text             = "Include:";
            include.relativePosition = new Vector3(m_includeAll.relativePosition.x - include.width - SPACING, m_buildingSelection.height + SPACING);

            m_includeAll.eventClick += (c, p) =>
            {
                for (int i = 0; i < m_buildingSelection.rowsData.m_size; i++)
                {
                    BuildingItem item = m_buildingSelection.rowsData[i] as BuildingItem;
                    if (item != null)
                    {
                        ChangeBuildingStatus(item, true);
                    }
                }

                m_buildingSelection.Refresh();
            };

            m_includeNone.eventClick += (c, p) =>
            {
                for (int i = 0; i < m_buildingSelection.rowsData.m_size; i++)
                {
                    BuildingItem item = m_buildingSelection.rowsData[i] as BuildingItem;
                    if (item != null)
                    {
                        ChangeBuildingStatus(item, false);
                    }
                }

                m_buildingSelection.Refresh();
            };

            // Preview
            m_buildingPreview                  = right.AddUIComponent <UIBuildingPreview>();
            m_buildingPreview.width            = right.width;
            m_buildingPreview.height           = (right.height - SPACING) / 2;
            m_buildingPreview.relativePosition = Vector3.zero;

            // Building Options
            m_buildingOptions                  = right.AddUIComponent <UIBuildingOptions>();
            m_buildingOptions.width            = RIGHT_WIDTH;
            m_buildingOptions.height           = (right.height - SPACING) / 2 - 40;
            m_buildingOptions.relativePosition = new Vector3(0, m_buildingPreview.height + SPACING);

            // Clone building
            m_cloneBuilding                  = UIUtils.CreateButton(right);
            m_cloneBuilding.width            = RIGHT_WIDTH;
            m_cloneBuilding.height           = 30;
            m_cloneBuilding.text             = "Clone building";
            m_cloneBuilding.isEnabled        = false;
            m_cloneBuilding.relativePosition = new Vector3(0, m_buildingOptions.relativePosition.y + m_buildingOptions.height + SPACING);

            m_cloneBuilding.eventClick += (c, p) =>
            {
                UIView.PushModal(UICloneBuildingModal.instance);
                UICloneBuildingModal.instance.Show(true);
            };
        }
Exemplo n.º 38
0
        public void ChangeBuildingStatus(BuildingItem item, bool include)
        {
            if (include == item.included) return;

            if (item.building != null && item.building.isBuiltIn)
            {
                item.building.include = include;
            }
            else if (include)
            {
                Configuration.Building building = new Configuration.Building(item.name);

                if (!selectedTheme.containsBuilding(building.name))
                {
                    selectedTheme.buildings.Add(building);
                    item.building = building;
                }
            }
            else
            {
                Configuration.Building building = selectedTheme.getBuilding(item.name);
                if (building != null)
                    selectedTheme.buildings.Remove(building);

                item.building = null;
            }

            m_isDistrictThemesDirty = true;
        }