Beispiel #1
0
        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)
                            });
                        }
                    }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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());
            }
        }