public MainWindowViewModel() { this.Items = new ObservableCollection <ItemViewModel>(); this.IndicatorPile = PileFactory.Create <Panel>(); // A handler for window loaded this.Ready = Command.Factory.CreateSync(() => { this.IsEnabled = true; }); // A handler for fetch button this.Fetch = CommandFactory.Create(async() => { // Disable button this.IsEnabled = false; // Temporary rent Grid children accessor await this.IndicatorPile.RentAsync(async indicator => { // Show WaitingBlock control var waitingBlock = new WaitingBlock(); indicator.Children.Add(waitingBlock); try { // Uses Reddit API var reddits = await Reddit.FetchNewPostsAsync("r/aww"); this.Items.Clear(); static async ValueTask <ImageSource?> FetchImageAsync(Uri url) { try { var bitmap = new WriteableBitmap( BitmapFrame.Create(new MemoryStream(await Reddit.FetchImageAsync(url)))); bitmap.Freeze(); return(bitmap); } // Some images will cause decoding error by WPF's BitmapFrame, so ignoring it. catch (FileFormatException) { return(null); } } foreach (var reddit in reddits) { this.Items.Add(new ItemViewModel { Title = reddit.Title, Score = reddit.Score, Image = await FetchImageAsync(reddit.Url) }); } }
public void emporium_gained_from_remodel() { var player = new Player(1, "b"); var players = new List <IPlayer>() { player }; var pileFactory = new PileFactory(1); var supply = new Supply( new List <Pile>(), new List <Pile>(), pileFactory.Create(new List <Card> { Card.Emporium })); var vc = new VictoryCondition(); var game = new Game.Game(0, players, supply, vc); player.GainToHand(Card.Village); player.GainToHand(Card.Village); player.GainToHand(Card.Village); player.GainToHand(Card.Village); player.GainToHand(Card.Gold); player.GainToHand(Card.Remodel); player.PlayStatus = PlayStatus.ActionPhase; game.Submit(player.PlayerName, PlayerAction.Play, Card.Village); game.Submit(player.PlayerName, PlayerAction.Play, Card.Village); game.Submit(player.PlayerName, PlayerAction.Play, Card.Village); game.Submit(player.PlayerName, PlayerAction.Play, Card.Village); game.Submit(player.PlayerName, PlayerAction.Play, Card.Remodel); game.Submit(player.PlayerName, ActionRequestType.SelectCards, new List <Card> { Card.Gold }); game.Submit(player.PlayerName, ActionRequestType.SelectCards, new List <Card> { Card.Emporium }); Assert.Equal(2, player.VictoryTokens); }
public void survivors_reorder_top_2() { var player = new Player(1, "b"); var players = new List <IPlayer>() { player }; var pileFactory = new PileFactory(1); var supply = new Supply( new List <Pile>(), new List <Pile>(), new List <Pile>()); var vc = new VictoryCondition(); var game = new Game.Game(0, players, supply, vc); player.GainToHand(Card.Survivors); player.Deck.Add(Card.Copper); player.Deck.Add(Card.Silver); player.PlayStatus = PlayStatus.ActionPhase; player.NumberOfActions++; game.Submit(player.PlayerName, PlayerAction.Play, Card.Survivors); game.Submit(player.PlayerName, ActionRequestType.SelectOptions, new List <ActionResponse> { ActionResponse.Put }); game.Submit(player.PlayerName, ActionRequestType.SelectCards, new List <Card> { Card.Silver, Card.Copper }); game.CheckPlayStack(player); var expected = new List <Card> { Card.Silver, Card.Copper }; Assert.Equal(expected, player.Deck); }
public void emporium_gained_with_5_actions_in_play() { var player = new Player(1, "b"); var players = new List <IPlayer>() { player }; var pileFactory = new PileFactory(1); var supply = new Supply( new List <Pile>(), new List <Pile>(), pileFactory.Create(new List <Card> { Card.Emporium })); var vc = new VictoryCondition(); var game = new Game.Game(0, players, supply, vc); player.GainToHand(Card.Village); player.GainToHand(Card.Village); player.GainToHand(Card.Village); player.GainToHand(Card.Village); player.GainToHand(Card.Village); player.PlayStatus = PlayStatus.ActionPhase; game.Submit(player.PlayerName, PlayerAction.Play, Card.Village); game.Submit(player.PlayerName, PlayerAction.Play, Card.Village); game.Submit(player.PlayerName, PlayerAction.Play, Card.Village); game.Submit(player.PlayerName, PlayerAction.Play, Card.Village); game.Submit(player.PlayerName, PlayerAction.Play, Card.Village); player.EndActionPhase(); player.MoneyPlayed = int.MaxValue; player.NumberOfBuys = int.MaxValue; game.Submit(player.PlayerName, PlayerAction.Buy, Card.Emporium); Assert.Equal(2, player.VictoryTokens); }
public void Add() { try { if (SelectedDgnLevel == null) { MessageBox.Show("未选择线段所在图层\n请重新选择图层", "未选择图层", MessageBoxButton.OK, MessageBoxImage.Error); return; } //扫描图中的线段 BD.ScanCriteria sc = new Bentley.DgnPlatformNET.ScanCriteria(); sc.SetModelRef(Program.GetActiveDgnModelRef()); BD.BitMask bm = new BD.BitMask(true); bm.Set((uint)BD.MSElementType.Line); sc.SetElementTypeTest(bm); var elelist = new List <BDE.Element>(); sc.Scan((ele, dgnmodel) => { var level = Program.GetActiveDgnModel().GetLevelCache().GetLevel(ele.LevelId, true); if (ele.ElementType == BD.MSElementType.Line && ele.LevelId == SelectedDgnLevel.LevelId) { elelist.Add(ele); } return(BD.StatusInt.Success); }); if (elelist.Count == 0) { MessageBox.Show("所选图层中不存在线段元素\n请重新选择图层或绘制代表桩的线段", "所选图层无线段", MessageBoxButton.OK, MessageBoxImage.Error); return; } PileFactory pilefactory = null; var pileproplist = new List <IPileProperty>(); var pilenamelist = new List <string>(); var pileIdlist = new List <long>(); switch (SelectedPileType) { case PileType.Solid: pilefactory = new SolidPileFactory(GammaR); foreach (var pile in elelist) { //BG.DRange3d range; //((BDE.LineElement)pile).CalcElementRange(out range);//有问题 BG.DPoint3d startp, endp; if (!((BDE.LineElement)pile).GetCurveVector().GetStartEnd(out startp, out endp)) { System.Windows.Forms.MessageBox.Show($"无法获取Pile ID:{pile.ElementId}的起始点和终点"); return; } switch (SelectedPileCrossSectionType) { case SoildPileCrossSectionType.SquareWithRoundHole: pileproplist.Add(new SquareWithRoundHolePileGeometry() { PileDiameter = this.PileDiameter, PileInnerDiameter = this.PileInnerDiameter, PileWeight = this.PileWeight, PileUnderWaterWeight = this.PileUnderwaterWeight, WaterLevel = WaterLevel, PileTopPoint = startp.DPoint3dToPoint3d(1e-4), PileBottomPoint = endp.DPoint3dToPoint3d(1e-4) }); break; case SoildPileCrossSectionType.Square: pileproplist.Add(new SquarePileGeometry() { PileDiameter = this.PileDiameter, PileWeight = this.PileWeight, PileUnderWaterWeight = this.PileUnderwaterWeight, WaterLevel = WaterLevel, PileTopPoint = startp.DPoint3dToPoint3d(1e-4), PileBottomPoint = endp.DPoint3dToPoint3d(1e-4) }); break; case SoildPileCrossSectionType.Polygon: pileproplist.Add(new PolygonPileGeometry() { CrossSectionArea = this.PolygonCrossSectionArea, PileCrossSectionPerimeter = this.PolygonCrossSectionPerimeter, PileWeight = this.PileWeight, PileUnderWaterWeight = this.PileUnderwaterWeight, WaterLevel = WaterLevel, PileTopPoint = startp.DPoint3dToPoint3d(1e-4), PileBottomPoint = endp.DPoint3dToPoint3d(1e-4) }); break; } var pilecodereaddatablock = pile.GetLinkage((ushort)BD.ElementLinkageId.String); string pilename = string.Empty; if (null != pilecodereaddatablock) { //throw new NotSupportedException($"Pile Id:{pile.ElementId} doesn't contain pilecode linkage"); pilename = pilecodereaddatablock.ReadString(); } else { pilename = pile.Description + " ID:" + pile.ElementId.ToString(); } pilenamelist.Add(PileName + pilename); pileIdlist.Add(pile.ElementId); } break; case PileType.SteelAndPercastConcrete: pilefactory = new SteelAndPercastConcretePileFactory(GammaR, Eta); foreach (var pile in elelist) { //BG.DRange3d range; //((BDE.LineElement)pile).CalcElementRange(out range); BG.DPoint3d startp, endp; if (!((BDE.LineElement)pile).GetCurveVector().GetStartEnd(out startp, out endp)) { System.Windows.Forms.MessageBox.Show($"无法获取Pile ID:{pile.ElementId}的起始点和终点"); return; } pileproplist.Add(new AnnularPileGeometry() { PileDiameter = this.PileDiameter, PileInnerDiameter = this.PileInnerDiameter, PileWeight = this.PileWeight, PileUnderWaterWeight = this.PileUnderwaterWeight, WaterLevel = WaterLevel, PileTopPoint = startp.DPoint3dToPoint3d(1e-4), PileBottomPoint = endp.DPoint3dToPoint3d(1e-4) }); var pilecodereaddatablock = pile.GetLinkage((ushort)BD.ElementLinkageId.String); string pilename = string.Empty; if (null != pilecodereaddatablock) { //throw new NotSupportedException($"Pile Id:{pile.ElementId} doesn't contain pilecode linkage"); pilename = pilecodereaddatablock.ReadString(); } pilenamelist.Add(PileName + pilename); pileIdlist.Add(pile.ElementId); } break; //case PileType.Filling: // pilefactory = new FillingPileFactory(); // break; //case PileType.Socketed: // pilefactory = new SocketedPileFactory(); // break; //case PileType.PostgroutingFilling: // pilefactory = new PostgroutingFillingPileFactory(); // break; } //foreach (var pile in elelist) //{ // BG.DRange3d range; // ((BDE.LineElement)pile).CalcElementRange(out range); // switch (SelectedPileCrossSectionType) // { // case PileCrossSectionType.Roundness: // pileproplist.Add(new RoundnessPileGeometry() { PileDiameter = this.PileDiameter, PileWeight = this.PileWeight, PileUnderWaterWeight = this.PileUnderwaterWeight, WaterLevel = WaterLevel, PileTopPoint = range.High.DPoint3dToPoint3d(1e-4), PileBottomPoint = range.Low.DPoint3dToPoint3d(1e-4) }); // break; // case PileCrossSectionType.Square: // pileproplist.Add(new SquarePileGeometry() { PileDiameter = this.PileDiameter, PileWeight = this.PileWeight, PileUnderWaterWeight = this.PileUnderwaterWeight, WaterLevel = WaterLevel, PileTopPoint = range.High.DPoint3dToPoint3d(1e-4), PileBottomPoint = range.Low.DPoint3dToPoint3d(1e-4) }); // break; // case PileCrossSectionType.Annular: // pileproplist.Add(new AnnularPileGeometry() { PileDiameter = this.PileDiameter, PileInnerDiameter = this.PileInnerDiameter, PileWeight = this.PileWeight, PileUnderWaterWeight = this.PileUnderwaterWeight, WaterLevel = WaterLevel, PileTopPoint = range.High.DPoint3dToPoint3d(1e-4), PileBottomPoint = range.Low.DPoint3dToPoint3d(1e-4) }); // break; // } // pilenamelist.Add(PileName + pile.GetLinkage((ushort)BD.ElementLinkageId.String).ReadString()); // pileIdlist.Add(pile.ElementId); //} var templist = pilefactory?.CreateNewPileArray(pileproplist.ToArray(), pilenamelist.ToArray(), pileIdlist.ToArray()); Piles.AddRange(templist); CloseAction(); } catch (Exception e) { MessageBox.Show(e.ToString()); } }