Пример #1
0
        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 keys   = new ulong[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, key, faceDown != true, model, x, y, !persist).Do();

                        ids[i]    = id;
                        keys[i]   = key;
                        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, keys, models, xs, ys, faceDown != true, persist);
                }
            });

            return(result);
        }
Пример #2
0
 public CardRun(CardIdentity id)
     : base(id.ToString())
 {
     _card = id.Model;
     if (id.Model == null)
         id.Revealed += new CardIdentityNamer {Target = this}.Rename;
 }
Пример #3
0
 internal Card(Player owner, int id, DataNew.Entities.Card model, bool mySecret, string cardsize)            : base(owner)
 {
     _id  = id;
     Type = new CardIdentity(id)
     {
         Model = model.Clone()
     };
     // var _definition = def;
     lock (All)
     {
         if (All.ContainsKey(id))
         {
             All[id] = this;
         }
         else
         {
             All.Add(id, this);
         }
     }
     _alternateOf = null;
     //numberOfSwitchWithAlternatesNotPerformed = 0;
     //_isAlternateImage = false;
     _cardMoved = false;
     Size       = Program.GameEngine.Definition.CardSizes[cardsize];
 }
Пример #4
0
 internal void SetModel(DataNew.Entities.Card model)
 {
     Log.Info("SetModel event happened!");
     Type.Model = model;
     // Not sure if we should update the card size here...not sure if it's necesary.
     OnPropertyChanged("Picture");//This should be changed - the model is much more than just the picture.
 }
Пример #5
0
 internal Card(Player owner, int id, ulong key, DataNew.Entities.Card model, bool mySecret)
     : base(owner)
 {
     _id  = id;
     Type = new CardIdentity(id)
     {
         Key = key, Model = model.Clone(), MySecret = mySecret
     };
     // var _definition = def;
     lock (All)
     {
         if (All.ContainsKey(id))
         {
             All[id] = this;
         }
         else
         {
             All.Add(id, this);
         }
     }
     _alternateOf = null;
     numberOfSwitchWithAlternatesNotPerformed = 0;
     _isAlternateImage = false;
     _cardMoved        = false;
 }
Пример #6
0
 public void SetCardModel(DataNew.Entities.Card model)
 {
     Debug.Assert(this.Card == null, "Cannot set the CardModel of a CardRun if it is already defined");
     this.Card = model;
     if (_updateAction != null)
     {
         _updateAction.Invoke(model, GameCard);
     }
 }
Пример #7
0
 public CardRun(CardIdentity id)
     : base(id.ToString())
 {
     _card = id.Model;
     if (id.Model == null)
     {
         id.Revealed += new CardIdentityNamer {
             Target = this
         }
     }
Пример #8
0
 public CreateCard(Player owner, int id, bool faceUp, DataNew.Entities.Card model, int x, int y,
                   bool deletesWhenLeavesGroup)
 {
     _owner  = owner;
     _id     = id;
     _faceUp = faceUp;
     _deletesWhenLeavesGroup = deletesWhenLeavesGroup;
     _model = model;
     _x     = x;
     _y     = y;
 }
Пример #9
0
 public CreateCard(Player owner, int id,bool faceUp, DataNew.Entities.Card model, int x, int y,
                   bool deletesWhenLeavesGroup)
 {
     _owner = owner;
     _id = id;
     _faceUp = faceUp;
     _deletesWhenLeavesGroup = deletesWhenLeavesGroup;
     _model = model;
     _x = x;
     _y = y;
 }
Пример #10
0
 internal Card(Player owner, int id, ulong key, DataNew.Entities.Card model, bool mySecret)
     : base(owner)
 {
     _id  = id;
     Type = new CardIdentity(id)
     {
         Alias = false, Key = key, Model = model.Clone(), MySecret = mySecret
     };
     // var _definition = def;
     All.Add(id, this);
     _alternateOf = null;
     numberOfSwitchWithAlternatesNotPerformed = 0;
     _isAlternateImage = false;
 }
Пример #11
0
        internal void LoadGroup(GroupSaveState g)
        {
            var group = Play.Group.Find(g.Id);

            group.Controller = Play.Player.Find(g.Controller);
            group.Viewers    = g.Viewers.Select(Play.Player.Find).ToList();
            group.Visibility = g.Visiblity;
            foreach (var c in g.Cards)
            {
                DataNew.Entities.Card model = null;
                if (c.Type != Guid.Empty)
                {
                    model =
                        Core.DataManagers.GameManager.Get()
                        .GetById(Program.GameEngine.Definition.Id)
                        .GetCardById(c.Type);
                }
                var owner = Play.Player.Find(c.Owner);
                var card  = new Play.Card(owner, c.Id, (ulong)c.EncType, model, owner == Play.Player.LocalPlayer);
                if (group.Cards.Any(x => x.Id == card.Id) == false)
                {
                    group.Add(card);
                }
                card.SwitchTo(owner, c.Alternate, false);
                card.Controller            = Play.Player.Find(c.Controller);
                card.DeleteWhenLeavesGroup = c.DeleteWhenLeavesGroup;
                card.SetFaceUp(c.FaceUp);
                card.SetHighlight(c.HighlightColor);
                card.SetIndex(c.Index);
                card.Orientation = c.Orientation;
                card.SetOverrideGroupVisibility(c.OverrideGroupVisibility);
                card.SetTargetedBy(Play.Player.Find(c.TargetedBy));
                card.TargetsOtherCards = c.TargetsOtherCards;
                card.X = c.X;
                card.Y = c.Y;

                foreach (var m in c.Markers)
                {
                    card.SetMarker(card.Owner, m.Id, m.Name, m.Count, false);
                }
                foreach (var pp in c.PeekingPlayers.Select(Play.Player.Find))
                {
                    card.PeekingPlayers.Add(pp);
                }
            }
        }
Пример #12
0
 public void SetCard(ICard card, bool up, bool isProxy = false)
 {
     isVisible  = up;
     showProxy  = isProxy;
     VisualCard = new DataNew.Entities.Card(card);
     if (VisualCard == null || up == false || VisualCard.PropertySets.Count < 2)
     {
         AltName.Visibility     = Visibility.Collapsed;
         AltLabel.Visibility    = Visibility.Collapsed;
         LeftButton.Visibility  = Visibility.Collapsed;
         RightButton.Visibility = Visibility.Collapsed;
     }
     else
     {
         AltName.Visibility     = Visibility.Visible;
         AltLabel.Visibility    = Visibility.Visible;
         LeftButton.Visibility  = Visibility.Visible;
         RightButton.Visibility = Visibility.Visible;
         alternates             = VisualCard.PropertySets.Keys.ToList();
         AltName.Text           = VisualCard.Alternate;
     }
     UpdateCardImage();
 }
Пример #13
0
 public ChatCard(DataNew.Entities.Card model)
 {
     this.Card = model;
 }
Пример #14
0
        private void SelectClicked(object sender, RoutedEventArgs e)
        {
            e.Handled = true;

            // A double-click can only select a marker in its own list
            // (Little bug here: double-clicking in the empty zone of a list with a selected marker adds it)
            if (sender is ListBox && ((ListBox)sender).SelectedIndex == -1) return;

            allList.ItemsSource = _allCards;

            if (allList.SelectedIndex != -1) SelectedCard = (DataNew.Entities.Card)allList.SelectedItem;
            returnIndex = allList.SelectedIndex;

            if (SelectedCard == null) return;

            DialogResult = true;
        }
Пример #15
0
 public CardRun(DataNew.Entities.Card model)
     : base(model.Name)
 {
     _card = model;
 }
Пример #16
0
 public CardModelEventArgs(DataNew.Entities.Card model, RoutedEvent routedEvent, object source)
     : base(routedEvent, source)
 {
     CardModel = model;
 }
Пример #17
0
 public void SetCardModel(DataNew.Entities.Card model)
 {
     Debug.Assert(_card == null, "Cannot set the CardModel of a CardRun if it is already defined");
     _card = model;
     Text = model.PropertyName();
 }
Пример #18
0
 public CardRun(DataNew.Entities.Card model)
     : base(model.PropertyName())
 {
     _card = model;
 }
Пример #19
0
        private void CreateClicked(object sender, RoutedEventArgs e)
        {
            e.Handled = true;

            // A double-click can only select a marker in its own list
            // (Little bug here: double-clicking in the empty zone of a list with a selected marker adds it)
            if (sender is ListBox && ((ListBox)sender).SelectedIndex == -1) return;

            if (recentList.SelectedIndex != -1) SelectedCard = (DataNew.Entities.Card)recentList.SelectedItem;
            if (allList.SelectedIndex != -1) SelectedCard = (DataNew.Entities.Card)allList.SelectedItem;

            if (SelectedCard == null) return;

            int qty;
            if (!int.TryParse(quantityBox.Text, out qty) || qty < 1)
            {
                var anim = new ColorAnimation(Colors.Red, new Duration(TimeSpan.FromMilliseconds(800))) { AutoReverse = true };
                validationBrush.BeginAnimation(SolidColorBrush.ColorProperty, anim, HandoffBehavior.Compose);
                return;
            }

            Program.GameEngine.AddRecentCard(SelectedCard);
            DialogResult = true;
        }
Пример #20
0
 public CardModelEventArgs(DataNew.Entities.Card model, RoutedEvent routedEvent, object source)
     : base(routedEvent, source)
 {
     CardModel = model;
 }
Пример #21
0
        internal void LoadGroup(GroupSaveState g, Play.Player fromPlayer, bool isTable = false)
        {
            var group = Play.Group.Find(g.Id);

            if (!isTable)
            {
                group.Controller = Play.Player.Find(g.Controller);
            }
            group.Viewers    = g.Viewers.Select(Play.Player.Find).ToList();
            group.Visibility = g.Visiblity;
            foreach (var c in g.Cards)
            {
                var owner = Play.Player.Find(c.Owner);
                DataNew.Entities.Card model = null;
                if (c.Type != Guid.Empty)
                {
                    model =
                        Core.DataManagers.GameManager.Get()
                        .GetById(Program.GameEngine.Definition.Id)
                        .GetCardById(c.Type);
                }
                var card = Play.Card.Find(c.Id);
                if (fromPlayer == owner && card != null)
                {
                    //card.Type.Key = ulong.Parse(c.EncType);
                    card.SetModel(model.Clone());
                    //card.Type = new CardIdentity(card.Id){Key=(ulong)c.EncType,Model = model.Clone(),MySecret = owner == Play.Player.LocalPlayer};
                    //Play.Card.Remove(card);
                    //card = null;
                }
                if (card == null)
                {
                    card = new Play.Card(owner, c.Id, model, owner == Play.Player.LocalPlayer, c.Size);
                }
                group.Remove(card);
                group.Add(card);
                card.Group = group;
                card.SwitchTo(owner, c.Alternate, false);
                card.Controller            = Play.Player.Find(c.Controller);
                card.DeleteWhenLeavesGroup = c.DeleteWhenLeavesGroup;
                card.SetFaceUp(c.FaceUp);
                card.SetHighlight(c.HighlightColor);
                card.SetIndex(c.Index);
                card.Orientation = c.Orientation;
                card.SetOverrideGroupVisibility(c.OverrideGroupVisibility);
                card.SetTargetedBy(Play.Player.Find(c.TargetedBy));
                card.TargetsOtherCards = c.TargetsOtherCards;
                card.X = c.X;
                card.Y = c.Y;
                card.PropertyOverrides = c.PropertyOverrides;

                foreach (var m in c.Markers)
                {
                    card.SetMarker(card.Owner, m.Id, m.Name, m.Count, false);
                }
                foreach (var pp in c.PeekingPlayers.Select(Play.Player.Find))
                {
                    card.PeekingPlayers.Add(pp);
                }
            }
            group.OnCardsChanged();
        }
Пример #22
0
 internal void SetModel(DataNew.Entities.Card model)
 {
     Log.Info("SetModel event happened!");
     Type.Model = model;
     OnPropertyChanged("Picture");//This should be changed - the model is much more than just the picture.
 }