public List <int> CreateOnTable(string modelId, int x, int y, bool persist, int quantity, bool faceDown) { var result = new List <int>(); Guid modelGuid; if (!Guid.TryParse(modelId, out modelGuid)) { return(result); // e.g. modelId may be null if the cloned card is face down. } QueueAction(() => { DataNew.Entities.Card model = Program.GameEngine.Definition.GetCardById(modelGuid); if (model == null) { } else { var ids = new int[quantity]; var models = new Guid[quantity]; int[] xs = new int[quantity], ys = new int[quantity]; // if (Player.LocalPlayer.InvertedTable) // { // x -= Program.GameEngine.Definition.CardWidth; // y -= Program.GameEngine.Definition.CardHeight; // } // var offset = (int)(Math.Min(Program.GameEngine.Definition.CardWidth, Program.GameEngine.Definition.CardHeight) * 0.2); // if (Program.GameSettings.UseTwoSidedTable && TableControl.IsInInvertedZone(y)) // offset = -offset; for (int i = 0; i < quantity; ++i) { ulong key = ((ulong)Crypto.PositiveRandom()) << 32 | model.Id.Condense(); int id = model.GenerateCardId(); new CreateCard(Player.LocalPlayer, id, faceDown != true, model, x, y, !persist).Do(); ids[i] = id; models[i] = model.Id; xs[i] = x; ys[i] = y; result.Add(id); // x += offset; // y += offset; } string pictureUri = model.GetPicture(); Dispatcher.CurrentDispatcher.BeginInvoke( new Func <string, BitmapImage>(ImageUtils.CreateFrozenBitmap), DispatcherPriority.Background, pictureUri); Program.Client.Rpc.CreateCardAt(ids, models, xs, ys, faceDown != true, persist); } }); return(result); }
internal void AddRecentCard(DataNew.Entities.Card card) { int idx = _recentCards.FindIndex(c => c.Id == card.Id); if (idx == 0) { return; } if (idx > 0) { _recentCards.RemoveAt(idx); _recentCards.Insert(0, card); return; } if (_recentCards.Count == MaxRecentCards) { _recentCards.RemoveAt(MaxRecentCards - 1); } _recentCards.Insert(0, card); }