private void LoadSmartTiles(bool all) { if (J2L.HasTiles) { bool maxTiles4096 = J2L.MaxTiles == 4096; int max = all ? J2L.Tilesets.Count : 1; uint previousTileCount = 0; for (int i = 0; i < max; ++i) { J2L.Tilesets[i].LoadSmartTiles(maxTiles4096, previousTileCount); previousTileCount += J2L.Tilesets[i].TileCount; } } SmartTiles.Clear(); SmartTile zero = new SmartTile(J2L.MaxTiles == 4096, null); zero.Assignments[11].Tiles.Add(0); zero.TilesICanPlace.Add(0); zero.PreviewTileIDs = new ushort[9]; zero.Name = "(Blank)"; zero.Available = true; SmartTiles.Add(zero); foreach (J2TFile tileset in J2L.Tilesets) { SmartTiles.AddRange(tileset.SmartTiles); } OverSmartTiles.Visible = SmartTiles.Count > 1; }
internal void UpdateTilesIGonextTo(List <SmartTile> smartTiles) { foreach (int friendID in Friends) { SmartTile smartTile = smartTiles[friendID]; TilesIGoNextTo.UnionWith(smartTile.TilesICanPlace); TilesIGoNextTo.UnionWith(smartTile.Extras); } }
internal SmartTile(SmartTile other) { Assignments = other.Assignments.Select(ass => new Assignment(ass)).ToArray(); PreviewTileIDs = other.PreviewTileIDs.Clone() as ushort[]; Name = other.Name; Friends = new List <int>(other.Friends); TilesICanPlace = new HashSet <ushort>(other.TilesICanPlace.Comparer); TilesICanPlace.UnionWith(other.TilesICanPlace); TilesIGoNextTo = new HashSet <ushort>(other.TilesIGoNextTo.Comparer); TilesIGoNextTo.UnionWith(other.TilesIGoNextTo); Tileset = other.Tileset; }
internal DialogResult ShowForm(SmartTile workingSmartTile, J2TFile tileset, int workingSmartTileIndex = -1) { Tileset = tileset; WorkingSmartTile = workingSmartTile; List <SmartTile> smartTiles = tileset.SmartTiles; if (smartTiles.Count >= 1) { AllSmartTileNames = smartTiles.Select(smartTile => smartTile.Name).ToList(); } else { AllSmartTileNames = new List <string>(); } if (workingSmartTileIndex == -1) { AllSmartTileNames.Add("[this]"); button1.Hide(); } if (smartTiles.Count > 1) { for (int otherSmartTileID = 0; otherSmartTileID < smartTiles.Count; ++otherSmartTileID) { checkedComboBox1.Items.Add( otherSmartTileID != workingSmartTileIndex ? AllSmartTileNames[otherSmartTileID] : "[this]", otherSmartTileID == workingSmartTileIndex ? CheckState.Indeterminate : workingSmartTile.Friends.Contains(otherSmartTileID) ? CheckState.Checked : CheckState.Unchecked ); } checkedComboBox1.SetItemCheckState(0, checkedComboBox1.GetItemCheckState(0)); //fixes issue of control not updating text preview in response to Items.Add checkedComboBox1.ItemCheck += (s, e) => { if (e.CurrentValue == CheckState.Indeterminate) { e.NewValue = CheckState.Indeterminate; } }; //don't let the indeterminate item (this smarttile itself) be altered } else { checkedComboBox1.Hide(); } AndValue = ((SmartTile.ushortComparer)WorkingSmartTile.TilesICanPlace.Comparer).AndValue; textBox1.Text = WorkingSmartTile.Name; CreateImageFromTileset(); using (new System.Threading.Timer(RedrawTiles, null, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(0.5))) ShowDialog(); return(Result); }