private void HandleUpgradeToggle(BingoTileData data) { var u = data.TileDef.Data; switch (u) { case (int)Upgrades.Slide: if (PageModel.SaveInfo.Upgrades.Contains(u)) { foreach (var c in UpgradeGridControls) { if (c.DataContext is BingoTileData td) { td.ImgVisible = Visibility.Hidden; } } PageModel.SaveInfo.Upgrades.Clear(); } else { foreach (var c in UpgradeGridControls) { if (c.DataContext is BingoTileData td) { if (td.TileDef.Data == ((int)Upgrades.Slide)) { td.ImgVisible = Visibility.Visible; } else { td.ImgVisible = Visibility.Hidden; } } } PageModel.SaveInfo.Upgrades.Clear(); PageModel.SaveInfo.Upgrades.Add((int)Upgrades.Slide); } break; case (int)Upgrades.Double: case (int)Upgrades.Grip: case (int)Upgrades.Screw: case (int)Upgrades.Dash: if (PageModel.SaveInfo.Upgrades.Contains(u)) { foreach (var c in UpgradeGridControls) { if (c.DataContext is BingoTileData td) { if (td.TileDef.Data >= u) { td.ImgVisible = Visibility.Hidden; } } } PageModel.SaveInfo.Upgrades.Clear(); for (var i = 0; i < u; ++i) { PageModel.SaveInfo.Upgrades.Add(i); } } else { foreach (var c in UpgradeGridControls) { if (c.DataContext is BingoTileData td) { if (td.TileDef.Data <= u) { td.ImgVisible = Visibility.Visible; } else { td.ImgVisible = Visibility.Hidden; } } } PageModel.SaveInfo.Upgrades.Clear(); for (var i = 0; i <= u; ++i) { PageModel.SaveInfo.Upgrades.Add(i); } } break; } }
private Visibility IsBingoTileVisible(BingoTileData data) { if (data.TileDef == null) { return(Visibility.Hidden); } try { switch (data.TileDef.Type) { case BingoTileType.Hp: if (PageModel.SaveInfo.HpUpgradesInv.Contains((int)SaveHelpers.StageToHpUpgrades(data.TileDef.Stage))) { return(Visibility.Visible); } break; case BingoTileType.Mp: if (PageModel.SaveInfo.MpUpgradesInv.Contains((int)SaveHelpers.StageToMpUpgrades(data.TileDef.Stage))) { return(Visibility.Visible); } break; case BingoTileType.Clock: if (PageModel.SaveInfo.ClockUpgradesInv.Contains((int)SaveHelpers.StageToClockUpgrades(data.TileDef.Stage))) { return(Visibility.Visible); } break; case BingoTileType.Knife: if (PageModel.SaveInfo.KnifeUpgradesInv.Contains((int)SaveHelpers.StageToKnifeUpgrades(data.TileDef.Stage))) { return(Visibility.Visible); } break; case BingoTileType.Trash: if (PageModel.SaveInfo.TrashCans.Contains(data.TileDef.Data)) { return(Visibility.Visible); } break; case BingoTileType.Statue: if (PageModel.SaveInfo.Statues.Contains(data.TileDef.Data)) { return(Visibility.Visible); } break; case BingoTileType.Skill: break; case BingoTileType.Key: if (PageModel.SaveInfo.Keys.Contains(data.TileDef.Data)) { return(Visibility.Visible); } break; case BingoTileType.Upgrade: if (PageModel.SaveInfo.Upgrades.Contains(data.TileDef.Data)) { return(Visibility.Visible); } break; } } catch (Exception ex) { ErrorTracker.CurrentError = ex.Message; } return(Visibility.Hidden); }
private void ProcessBingoTileFlip(BingoTileData data) { //TODO: Mp and Hp need inventory definitions in save editor switch (data.TileDef.Type) { case BingoTileType.Hp: var hu = (int)SaveHelpers.StageToHpUpgrades(data.TileDef.Stage); if (PageModel.SaveInfo.HpUpgradesInv.Contains(hu)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.HpUpgradesInv.Remove(hu); PageModel.SaveInfo.HpUpgrades--; } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.HpUpgradesInv.Add(hu); PageModel.SaveInfo.HpUpgrades++; } break; case BingoTileType.Mp: var mu = (int)SaveHelpers.StageToMpUpgrades(data.TileDef.Stage); if (PageModel.SaveInfo.MpUpgradesInv.Contains(mu)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.MpUpgradesInv.Remove(mu); PageModel.SaveInfo.MpUpgrades--; } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.MpUpgradesInv.Add(mu); PageModel.SaveInfo.MpUpgrades++; } break; case BingoTileType.Clock: var cu = (int)SaveHelpers.StageToClockUpgrades(data.TileDef.Stage); if (PageModel.SaveInfo.ClockUpgradesInv.Contains(cu)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.ClockUpgradesInv.Remove(cu); PageModel.SaveInfo.ClockUpgrades--; } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.ClockUpgradesInv.Add(cu); PageModel.SaveInfo.ClockUpgrades++; } break; case BingoTileType.Knife: var ku = (int)SaveHelpers.StageToKnifeUpgrades(data.TileDef.Stage); if (PageModel.SaveInfo.KnifeUpgradesInv.Contains(ku)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.KnifeUpgradesInv.Remove(ku); PageModel.SaveInfo.KnifeUpgrades--; } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.KnifeUpgradesInv.Add(ku); PageModel.SaveInfo.KnifeUpgrades++; } break; case BingoTileType.Trash: var t = data.TileDef.Data; if (PageModel.SaveInfo.TrashCans.Contains(t)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.TrashCans.Remove(t); } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.TrashCans.Add(t); } break; case BingoTileType.Statue: var s = data.TileDef.Data; if (PageModel.SaveInfo.Statues.Contains(s)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.Statues.Remove(s); } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.Statues.Add(s); } break; case BingoTileType.Key: var k = data.TileDef.Data; if (PageModel.SaveInfo.Keys.Contains(k)) { data.ImgVisible = Visibility.Hidden; PageModel.SaveInfo.Keys.Remove(k); } else { data.ImgVisible = Visibility.Visible; PageModel.SaveInfo.Keys.Add(k); } break; case BingoTileType.Upgrade: { HandleUpgradeToggle(data); break; } } Task.Run(() => SyncViewModelToSave(false)); }
//TODO: Maybe make another parent element so all this can be done without locking the UI thread until the end private void BuildBingoGrid() { //remove the old grid if there is one if (BingoGrid.Children.Count > 0) { BingoGrid.Children.Clear(); } var gridColumns = new List <ColumnDefinition>(); var gridRows = new List <RowDefinition>(); GridHelper.CalculateGridSizes(BingoGrid, BingoTileDefs.Width, BingoTileDefs.Height); BingoGrid.HorizontalAlignment = HorizontalAlignment.Center; BingoGrid.VerticalAlignment = VerticalAlignment.Center; double colWidth = BingoGrid.Width / BingoTileDefs.Width; double rowHeight = BingoGrid.Height / BingoTileDefs.Height; for (int x = 0; x < BingoTileDefs.Width; ++x) { ColumnDefinition column = new ColumnDefinition(); gridColumns.Add(column); } foreach (var col in gridColumns) { col.Width = new GridLength(colWidth); BingoGrid.ColumnDefinitions.Add(col); } for (int y = 0; y < BingoTileDefs.Height; ++y) { RowDefinition row = new RowDefinition(); gridRows.Add(row); } foreach (var row in gridRows) { row.Height = new GridLength(rowHeight); BingoGrid.RowDefinitions.Add(row); } var defs = BingoTileDefs.Tiles; if (FindResource("BingoTileTemplate") is ControlTemplate tileTemplate) { BingoTileDef def = null; UpgradeGridControls.Clear(); for (int x = 0; x < BingoTileDefs.Width; ++x) { for (int y = 0; y < BingoTileDefs.Height; ++y) { BingoTileData tileData = new BingoTileData(); if (defs.GetLength(0) > x && defs.GetLength(1) > y) { def = defs[x, y]; tileData.TileDef = def; } Control gridTile = new Control { Template = tileTemplate }; tileData.Height = rowHeight; tileData.Width = colWidth; tileData.X = x; tileData.Y = y; tileData.ImgVisible = IsBingoTileVisible(tileData); gridTile.DataContext = tileData; Grid.SetRow(gridTile, y); Grid.SetColumn(gridTile, x); BingoGrid.Children.Add(gridTile); if (tileData.TileDef != null && tileData.TileDef.Type == BingoTileType.Upgrade) { UpgradeGridControls.Add(gridTile); } } } } else { ErrorTracker.CurrentError = "Could not find bingo tile template"; } }