Exemple #1
0
        public List<int> Create(string modelId, int groupId, int quantity)
        {
            var ret = new List<int>();

            Guid modelGuid;
            if (!Guid.TryParse(modelId, out modelGuid)) return ret;

            var model = Program.GameEngine.Definition.GetCardById(modelGuid);
            if (model == null) return ret;

            var group = Group.Find(groupId);
            if (group == null) return ret;

            _engine.Invoke(
                () =>
                    {
                        var gt = new GameEngine.GrpTmp(group, group.Visibility, group.Viewers.ToList());
                        group.SetVisibility(false, false);

                        var ids = new int[quantity];
                        var keys = new ulong[quantity];
                        for (int i = 0; i < quantity; ++i)
                        {
                            ulong key = (ulong)Crypto.PositiveRandom() << 32 | model.Id.Condense();
                            int id = Program.GameEngine.GenerateCardId();
                            ids[i] = id;
                            keys[i] = Crypto.ModExp(key);
                            ret.Add(id);
                            var card = new Card(Player.LocalPlayer, id, key, model, true);
                            group.AddAt(card, group.Count);
                        }

                        string pictureUri = model.GetPicture();
                        Dispatcher.CurrentDispatcher.BeginInvoke(
                            new Func<string, BitmapImage>(ImageUtils.CreateFrozenBitmap),
                            DispatcherPriority.ApplicationIdle, pictureUri);

                        Program.Client.Rpc.CreateCard(ids, keys, group);

                        switch (gt.Visibility)
                        {
                            case DataNew.Entities.GroupVisibility.Everybody:
                                group.SetVisibility(true, false);
                                break;
                            case DataNew.Entities.GroupVisibility.Nobody:
                                group.SetVisibility(false, false);
                                break;
                            default:
                                foreach (Player p in gt.Viewers)
                                {
                                    group.AddViewer(p, false);
                                }
                                break;
                        }
                    });
            return ret;
            // Comment for a test.
        }
Exemple #2
0
        public List <int> Create(string modelId, int groupId, int quantity)
        {
            var ret = new List <int>();

            Guid modelGuid;

            if (!Guid.TryParse(modelId, out modelGuid))
            {
                return(ret);
            }

            var model = Program.GameEngine.Definition.GetCardById(modelGuid);

            if (model == null)
            {
                return(ret);
            }

            var group = Group.Find(groupId);

            if (group == null)
            {
                return(ret);
            }

            if (group.Controller != Player.LocalPlayer)
            {
                Program.GameMess.Warning(String.Format("{0} Can't create card in {1} because they don't control it.", Player.LocalPlayer.Name, group.Name));
            }

            QueueAction(
                () =>
            {
                var gt = new GameEngine.GrpTmp(group, group.Visibility, group.Viewers.ToList());
                group.SetVisibility(false, false);


                var ids   = new int[quantity];
                var keys  = new Guid[quantity];
                var sizes = new string[quantity];
                for (int i = 0; i < quantity; ++i)
                {
                    var card = model.ToPlayCard(Player.LocalPlayer);
                    //ulong key = (ulong)Crypto.PositiveRandom() << 32 | model.Id.Condense();
                    //int id = Program.GameEngine.GenerateCardId();
                    ids[i]   = card.Id;
                    keys[i]  = card.Type.Model.Id;
                    sizes[i] = card.Size.Name;
                    ret.Add(card.Id);
                    group.AddAt(card, group.Count);
                }

                string pictureUri = model.GetPicture();
                Dispatcher.CurrentDispatcher.BeginInvoke(
                    new Func <string, BitmapImage>(ImageUtils.CreateFrozenBitmap),
                    DispatcherPriority.Background, pictureUri);

                Program.Client.Rpc.CreateCard(ids, keys, sizes, group);

                switch (gt.Visibility)
                {
                case DataNew.Entities.GroupVisibility.Everybody:
                    group.SetVisibility(true, false);
                    break;

                case DataNew.Entities.GroupVisibility.Nobody:
                    group.SetVisibility(false, false);
                    break;

                default:
                    foreach (Player p in gt.Viewers)
                    {
                        group.AddViewer(p, false);
                    }
                    break;
                }
            });
            return(ret);
            // Comment for a test.
        }