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; } } } }
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"; } }
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); }
public void Plop(BuildingItem mItem) { var buildingTool = ToolsModifierControl.SetTool <BuildingTool>(); { buildingTool.m_prefab = mItem.prefab; buildingTool.m_relocate = 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; } }
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(); }); } }
public void ChangeUpgradeBuilding(BuildingItem building) { CreateBuilding(selectedBuilding); if (building == null) { selectedBuilding.building.upgradeName = null; } else { selectedBuilding.building.upgradeName = building.name; } m_isDistrictThemesDirty = true; }
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(); }
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; } } }
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; } }
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); }
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; } }
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); } }); }
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); }
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); }
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(); }
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; } } } }
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(); }); } }
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; }
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; }
public void UpdateBuildingInfo(BuildingItem item) { m_buildingPreview.Show(item); m_buildingOptions.Show(item); }
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); } }
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; } } }
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; }
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); } }
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); }
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; }
public void ChangeUpgradeBuilding(BuildingItem building) { CreateBuilding(selectedBuilding); if (building == null) selectedBuilding.building.upgradeName = null; else selectedBuilding.building.upgradeName = building.name; m_isDistrictThemesDirty = true; }
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; } }
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; } }
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; }
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); }
public void UpdateBuildingInfo(BuildingItem item) { m_buildingPreview.Show(item); m_buildingOptions.Show(item); }
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 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); }; }
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; }