public CardModel(string key, PlayerModel owner, CardItem data, bool isPawn) : base(owner, key) { Data = data; IsPawn = isPawn; Position = new ObservableProperty<CardPosition, CardModel>(this, new CardPosition(0, 0)); Visibility = new ObservableProperty<CardVisibility, CardModel>(this, CardVisibility.Visible); Reversed = new ObservableProperty<bool, CardModel>(this, false); Locked = new ObservableProperty<bool, CardModel>(this, false); Rotated = new ObservableProperty<bool, CardModel>(this, false); CustomCharacteristics = new ObservableProperty<string, CardModel>(this, string.Empty); Tokens = new ModelCollection(this); SaveState(); this.Visibility.Changed += new EventHandler<ChangedEventArgs<CardVisibility>>(Visibility_Changed); }
public void UpdateCardItem(CardItem card, int count) { ListViewItem item = this.Items.Find(card.UniqueID, false).First(); CardListItemData data = (CardListItemData)item.Tag; FillCardItem(item, card, count, data.Hidden); }
public void UpdateData(CardItem newData) { Data.Name = newData.Name; Data.Text = newData.Text; Data.FlavorText = newData.FlavorText; Data.Type = newData.Type; OnDataChanged(); }
public void AddCard(string cardKey, bool hidden, CardItem cardItem, int index) { cardList.AddCardItem(cardItem, hidden, index); sortedCardList.AddCardItem(cardItem, hidden, index); }
public override void Execute() { SectorModel sector = Receiver.GetSectorByKey(Arguments.SectorKey); PlayerModel player = Receiver.GetSectorPlayer(sector.Key); CardItem pawnItem = new CardItem(); pawnItem.UniqueID = pawnKey; pawnItem.Name = Arguments.Name; pawnItem.Text = Arguments.Text; pawnItem.Type = Arguments.Type; pawnItem.Characteristics = Arguments.Characteristics; pawnItem.Id = string.Empty; CardModel pawn = new CardModel(pawnKey, player, pawnItem, true); pawn.Position.Value = Arguments.CardPosition; pawn.Data.StyleCode = "PAWN"; pawn.Data.BgImagePathLarge = "bg_PAWN_Large.png"; pawn.Data.BgImagePathSmall = "bg_PAWN_Small.png"; sector.Cards.Insert(0, pawn); Log(pawn, sector); }
public static Bitmap Draw(CardItem cardItem, string customCharacteristics, string styleBehaviorCode) { if(cardStyleBehaviors == null) cardStyleBehaviors = Program.LogicHandler.ServicesProvider.StylesBehaviorsService.GetAll(); CardStyleBehaviorItem behavior = cardStyleBehaviors.Where(e => e.StyleCode == cardItem.StyleCode && e.BehaviorCode == styleBehaviorCode).Single(); Rectangle cardRect = CardMetricsService.CardRect(styleBehaviorCode); Bitmap image = new Bitmap(cardRect.Width, cardRect.Height); bool drawCrop = true; if(SettingsManager.Settings.CardPictureBehavior == CardPictureBehavior.Full) { using(Image pic = Program.LogicHandler.ServicesProvider.ImagesService.GetCardPicture(cardItem)) { if(pic != null) { drawCrop = false; using(Graphics g = Graphics.FromImage(image)) { g.DrawImage(pic, cardRect); switch(styleBehaviorCode) { case CardStyleBehaviorsService.BEHAVIORS_SMALL: CardStyleBehaviorItem forcedShadowedBehavior = new CardStyleBehaviorItem(); forcedShadowedBehavior.CardName_FontShadowed = true; forcedShadowedBehavior.CardName_FontColor = Color.White; forcedShadowedBehavior.CardName_FontShadowColor = Color.Black; forcedShadowedBehavior.CardName_Font = new Font("Arial", 8, FontStyle.Bold); forcedShadowedBehavior.CardType_FontShadowed = true; forcedShadowedBehavior.CardType_FontColor = Color.White; forcedShadowedBehavior.CardType_FontShadowColor = Color.Black; forcedShadowedBehavior.CardType_Font = new Font("Arial", 8, FontStyle.Bold); PaintSmallCardElements(g, cardItem, forcedShadowedBehavior, false); PaintCardCharacteristics(g, cardItem, customCharacteristics, behavior); break; } } } } } if(drawCrop) { using(Graphics g = Graphics.FromImage(image)) { g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; switch(styleBehaviorCode) { case CardStyleBehaviorsService.BEHAVIORS_LARGE: PaintBackGround(g, cardItem, behavior); PaintFullCardName(g, cardItem, behavior); PaintCardImage(g, cardItem, behavior); PaintCardType(g, cardItem, behavior); PaintFullCardSymbol(g, cardItem, behavior); PaintFullCardText(g, cardItem, behavior); PaintCastingCost(g, cardItem, behavior); PaintArtist(g, cardItem, behavior); PaintCardCharacteristics(g, cardItem, string.Empty, behavior); break; case CardStyleBehaviorsService.BEHAVIORS_SMALL: PaintBackGround(g, cardItem, behavior); PaintSmallCardElements(g, cardItem, behavior, true); PaintCardCharacteristics(g, cardItem, customCharacteristics, behavior); break; } } } return image; }
static void PaintSmallCardElements(Graphics g, CardItem cardItem, CardStyleBehaviorItem behavior, bool paintPicture) { int costWidth = 0; // card cost if(!string.IsNullOrEmpty(cardItem.Cost)) costWidth = PaintCastingCost(g, cardItem, behavior); // card name Rectangle nameRect = CardMetricsService.NameRect(cardItem.StyleCode, behavior.BehaviorCode); nameRect = new Rectangle(nameRect.Location, new Size(nameRect.Width - costWidth, nameRect.Height)); StringFormat f = new StringFormat(); f.Trimming = StringTrimming.EllipsisCharacter; if(behavior.CardName_FontShadowed) g.DrawString( cardItem.Name , behavior.CardName_Font , new SolidBrush(behavior.CardName_FontShadowColor) , ShadowRect(nameRect) , f ); g.DrawString( cardItem.Name , behavior.CardName_Font , new SolidBrush(behavior.CardName_FontColor) , nameRect , f ); // card image if(paintPicture) PaintCardImage(g, cardItem, behavior); // card type PaintCardType(g, cardItem, behavior); }
static void PaintFullCardSymbol(Graphics g, CardItem cardItem, CardStyleBehaviorItem behavior) { if(!string.IsNullOrEmpty(cardItem.SetCode) && !string.IsNullOrEmpty(cardItem.RarityCode)) { using(Image symbol = Program.LogicHandler.ServicesProvider.ImagesService.GetCardSet(cardItem.SetCode, cardItem.RarityCode)) { if(symbol != null) g.DrawImage(symbol, CardMetricsService.SymbolRect(cardItem.StyleCode, behavior.BehaviorCode)); } } }
public void RemoveSideboardCard(CardItem card) { listSideboard.Items.RemoveByKey(card.UniqueID); }
public void RemoveMainCard(CardItem card) { listMain.Items.RemoveByKey(card.UniqueID); }
public void AddSideboardCard(CardItem card) { listSideboard.AddCardItem(card); }
public void AddMainCard(CardItem card) { listMain.AddCardItem(card); }
//Stopwatch sw = new Stopwatch(); public void UpdateCard(CardItem cardItem) { //Debug.WriteLine("Start update"); //sw.Start(); cardViewItem.Data = cardItem; //Debug.WriteLine("CreateAndCacheImage() start at " + sw.ElapsedTicks); CreateAndCacheImage(); //Debug.WriteLine("CreateAndCacheImage() end at " + sw.ElapsedTicks); //Debug.WriteLine("ApplyCardBehavior() start at " + sw.ElapsedTicks); ApplyCardBehavior(); //Debug.WriteLine("ApplyCardBehavior() end at " + sw.ElapsedTicks); //sw.Stop(); }
void FillCardItem(ListViewItem item, CardItem card, int count, bool hidden) { if(item.SubItems.Count != Columns.Count) { item.SubItems.Clear(); for(int i = 0; i < Columns.Count; i++) item.SubItems.Add(new ListViewItem.ListViewSubItem()); } item.Name = card.UniqueID; item.Tag = new CardListItemData() { CardItem = card, Hidden = hidden, Count = count }; foreach(ColumnHeader col in Columns) { if(col.Equals(colName)) item.Text = hidden ? "???" : card.Name; if(col.Equals(colCount)) item.SubItems[col.Index].Text = count.ToString(); if(col.Equals(colType)) item.SubItems[col.Index].Text = hidden ? "???" : card.Type; if(col.Equals(colCost)) item.SubItems[col.Index].Text = hidden ? "???" : card.Cost; if(col.Equals(colCharacteristics)) item.SubItems[col.Index].Text = hidden ? "???" : card.Characteristics; if(col.Equals(colRarity)) item.SubItems[col.Index].Text = hidden ? "???" : card.RarityCode; if(col.Equals(colColor)) item.SubItems[col.Index].Text = hidden ? "???" : card.ColorCode; if(col.Equals(colEdition)) item.SubItems[col.Index].Text = hidden ? "???" : card.SetCode; if(col.Equals(colText)) item.SubItems[col.Index].Text = hidden ? "???" : card.Text; if(col.Equals(colFlavorText)) item.SubItems[col.Index].Text = hidden ? "???" : card.FlavorText; if(col.Equals(colArtist)) item.SubItems[col.Index].Text = hidden ? "???" : card.Artist; } }
ListViewItem CreateCardItem(CardItem cardItem, bool hidden) { ListViewItem cardListItem = new ListViewItem(); FillCardItem(cardListItem, cardItem, 1, hidden); return cardListItem; }
static int PaintCastingCost(Graphics g, CardItem cardItem, CardStyleBehaviorItem behavior) { int costWidth = 0; if(!string.IsNullOrEmpty(cardItem.Cost)) { const int SPACE = 2; int symbolWidth = behavior.BehaviorCode == CardStyleBehaviorsService.BEHAVIORS_LARGE ? 12 : 10; Rectangle nameRect = CardMetricsService.NameRect(cardItem.StyleCode, behavior.BehaviorCode); string[] symbols = cardItem.Cost.Split('}'); costWidth = symbolWidth * (symbols.Length - 1); Rectangle symbolRect = new Rectangle( nameRect.Right - costWidth , nameRect.Top + SPACE , symbolWidth, symbolWidth ); for(int i = 0; i < (symbols.Length - 1); i++) { using(Image img = Program.LogicHandler.ServicesProvider.ImagesService.GetCardSymbol(symbols[i].ToString().Replace("{", ""))) { if(img != null) { g.DrawImage(img, symbolRect); symbolRect.X += img.Width; } } } } return costWidth; }
static void PaintFullCardName(Graphics g, CardItem cardItem, CardStyleBehaviorItem behavior) { if(behavior.CardName_FontShadowed) g.DrawString( cardItem.Name , behavior.CardName_Font , new SolidBrush(behavior.CardName_FontShadowColor) , ShadowRect(CardMetricsService.NameRect(cardItem.StyleCode, behavior.BehaviorCode)) ); g.DrawString( cardItem.Name , behavior.CardName_Font , new SolidBrush(behavior.CardName_FontColor) , CardMetricsService.NameRect(cardItem.StyleCode, behavior.BehaviorCode) ); }
public void SelectCard(DeckEditorListContext listContext, CardItem card) { CardListView list = null; switch(listContext) { case DeckEditorListContext.Sideboard: list = listSideboard; break; case DeckEditorListContext.Main: list = listMain; break; case DeckEditorListContext.Archive: list = listArchive; break; } list.SelectedIndices.Clear(); if(card != null) { ListViewItem item = null; if(list.VirtualMode) item = list.FindItemWithText(card.Name); else item = list.Items.Find(card.UniqueID, false).Single(); item.Selected = true; list.EnsureVisible(item.Index); } }
static void PaintFullCardText(Graphics g, CardItem cardItem, CardStyleBehaviorItem behavior) { Font textFont = null; Font flavorTextFont = null; if(!string.IsNullOrEmpty(cardItem.Text) || !string.IsNullOrEmpty(cardItem.FlavorText)) { if(((string.IsNullOrEmpty(cardItem.Text) ? 0 : cardItem.Text.Length) + (string.IsNullOrEmpty(cardItem.FlavorText) ? 0 : cardItem.FlavorText.Length)) < 250) { textFont = behavior.CardText_Font; flavorTextFont = behavior.CardFlavorText_Font; } else { textFont = new Font(behavior.CardText_Font.Name, behavior.CardText_Font.Size - 1, behavior.CardText_Font.Style); flavorTextFont = new Font(behavior.CardFlavorText_Font.Name, behavior.CardFlavorText_Font.Size - 1, behavior.CardFlavorText_Font.Style); } } float textLineHeight = textFont != null ? MeasureString(g, "A", textFont).Height : 0; Rectangle textRect = CardMetricsService.TextRect(cardItem.StyleCode, behavior.BehaviorCode); float topBorder = textRect.Top; if(!string.IsNullOrEmpty(cardItem.Text)) { float leftBorder = textRect.Left + 2; float totalWidth = textRect.Width; float lineLeft = leftBorder; int startIdx = 0; for(int endIdx = 0; endIdx < cardItem.Text.Length; endIdx++) { if(cardItem.Text[endIdx] == '{') { // symbol? int endSymIdx = cardItem.Text.IndexOf("}", endIdx); if(endSymIdx != -1) { string symbolText = cardItem.Text.Substring(endIdx, (endSymIdx - endIdx) + 1); // draw symbol float symbolSize = textLineHeight * 0.8f; // forced symbol size if(((lineLeft - leftBorder) + symbolSize) >= totalWidth) { // new line topBorder += textLineHeight; lineLeft = leftBorder; } using(Image symbol = Program.LogicHandler.ServicesProvider.ImagesService.GetCardSymbol(symbolText.Substring(1, symbolText.Length - 2))) { if(symbol != null) g.DrawImage(symbol, lineLeft , topBorder + (textLineHeight - symbolSize), symbolSize, symbolSize); } lineLeft += symbolSize; startIdx = endSymIdx + 1; endIdx = endSymIdx; } } else { // word/text end if(endIdx == (cardItem.Text.Length - 1) || cardItem.Text[endIdx] == ' ' || cardItem.Text[endIdx] == '(' || cardItem.Text[endIdx] == '\n') { string token = cardItem.Text.Substring(startIdx, (endIdx - startIdx) + 1); // word float wordWidth = MeasureString(g, token, textFont).Width; if(((lineLeft - leftBorder) + wordWidth) >= totalWidth) { // new line topBorder += textLineHeight; lineLeft = leftBorder; token = token.TrimStart(); } DrawString(g , token, textFont, new SolidBrush(behavior.CardText_FontColor), lineLeft, topBorder); lineLeft += wordWidth; if(cardItem.Text[endIdx] == '\n') { // forced new line topBorder += textLineHeight; lineLeft = leftBorder; } startIdx = endIdx + 1; } } } } if(!string.IsNullOrEmpty(cardItem.FlavorText)) { // card flavor Text RectangleF flavorRect = textRect; flavorRect.Y = topBorder + textLineHeight; g.DrawString(cardItem.FlavorText, flavorTextFont, new SolidBrush(behavior.CardFlavorText_FontColor), flavorRect); } }
public void SetMainCardCount(CardItem card, int count) { listMain.UpdateCardItem(card, count); }
public static Bitmap Draw(CardItem cardItem, string styleBehaviorCode) { return Draw(cardItem, string.Empty, styleBehaviorCode); }
public void SetSideboardCardCount(CardItem card, int count) { listSideboard.UpdateCardItem(card, count); }
public Image GetCardPicture(CardItem cardItem) { try { Image cardPicture = null; string picName = Path.GetFileName(cardItem.ImagePath); string code = cardItem.SetCode; if(codesMapService != null && SettingsManager.Settings.MapEnabled) code = codesMapService.GetAlias(code); string picPath = Path.Combine(SettingsManager.Settings.CardPicturesPath, code); // search name exact string picFullPath = Path.Combine(picPath, picName); if(File.Exists(picFullPath)) cardPicture = System.Drawing.Image.FromFile(picFullPath); else { string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(picName); string fileExtension = Path.GetExtension(picName); // search name"number".ext picFullPath = Path.Combine(picPath, fileNameWithoutExtension + "1" + fileExtension); if(File.Exists(picFullPath)) cardPicture = System.Drawing.Image.FromFile(picFullPath); else { switch(SettingsManager.Settings.CardPictureBehavior) { case Common.CardPictureBehavior.Full: // search name".full".ext picFullPath = Path.Combine(picPath, fileNameWithoutExtension + ".full" + fileExtension); break; case Common.CardPictureBehavior.Crop: // search name".crop".ext picFullPath = Path.Combine(picPath, fileNameWithoutExtension + ".crop" + fileExtension); break; } if(File.Exists(picFullPath)) cardPicture = System.Drawing.Image.FromFile(picFullPath); else { switch(SettingsManager.Settings.CardPictureBehavior) { case Common.CardPictureBehavior.Full: // search name"number"".full".ext picFullPath = Path.Combine(picPath, fileNameWithoutExtension + "1.full" + fileExtension); break; case Common.CardPictureBehavior.Crop: // search name"number"".crop".ext picFullPath = Path.Combine(picPath, fileNameWithoutExtension + "1.crop" + fileExtension); break; } if(File.Exists(picFullPath)) cardPicture = System.Drawing.Image.FromFile(picFullPath); else { // search name*.ext and pick first picFullPath = fileNameWithoutExtension + "*" + fileExtension; string[] fileNames = Directory.GetFiles(picPath, picFullPath); if(fileNames.Length > 0) cardPicture = System.Drawing.Image.FromFile(fileNames[0]); } } } } return cardPicture; } catch { return null; } }
static void PaintBackGround(Graphics g, CardItem cardItem, CardStyleBehaviorItem behavior) { if(string.IsNullOrEmpty(cardItem.BgImagePathLarge)) return; Image pic = behavior.BehaviorCode == CardStyleBehaviorsService.BEHAVIORS_LARGE ? Program.LogicHandler.ServicesProvider.ImagesService.GetCardBackground(cardItem.BgImagePathLarge) : Program.LogicHandler.ServicesProvider.ImagesService.GetCardBackground(cardItem.BgImagePathSmall); if(pic == null) pic = Program.LogicHandler.ServicesProvider.ImagesService.GetCardBack(behavior.BehaviorCode); if(pic != null) { g.DrawImage(pic, CardMetricsService.CardRect(behavior.BehaviorCode)); pic.Dispose(); } }
public void AddCard(string cardKey, CardItem cardItem, int index) { AddCard(cardKey, false, cardItem, index); }
static void PaintCardCharacteristics(Graphics g, CardItem cardItem, string customCharacteristics, CardStyleBehaviorItem behavior) { if(string.IsNullOrEmpty(cardItem.Characteristics) && string.IsNullOrEmpty(customCharacteristics)) return; StringFormat f = new StringFormat(); f.Alignment = StringAlignment.Center; f.LineAlignment = StringAlignment.Center; Rectangle rect = CardMetricsService.CharacteristicsRect(cardItem.StyleCode, behavior.BehaviorCode); if(!string.IsNullOrEmpty(customCharacteristics)) { // ...rectangle... g.DrawImage(Resources.redbanner, CardMetricsService.CharacteristicsRect(cardItem.StyleCode, behavior.BehaviorCode)); // ...characteristics g.DrawString( customCharacteristics , new Font(behavior.CardName_Font, behavior.CardName_Font.Style | FontStyle.Bold) , new SolidBrush(Color.White) , rect , f ); } else { // ...rectangle... using(Image symbol = Program.LogicHandler.ServicesProvider.ImagesService.GetCardCharacteristics(cardItem.StyleCode, cardItem.ColorCode)) if(symbol != null) g.DrawImage(symbol, CardMetricsService.CharacteristicsRect(cardItem.StyleCode, behavior.BehaviorCode)); // ...characteristics if(behavior.CardName_FontShadowed) g.DrawString( cardItem.Characteristics , new Font(behavior.CardName_Font, behavior.CardName_Font.Style | FontStyle.Bold) , new SolidBrush(behavior.CardName_FontShadowColor) , ShadowRect(rect) , f ); g.DrawString( cardItem.Characteristics , new Font(behavior.CardName_Font, behavior.CardName_Font.Style | FontStyle.Bold) , new SolidBrush(behavior.CardName_FontColor) , rect , f ); } }
public void UpdateCard(string cardKey, CardItem cardItem) { cardList.UpdateCardItem(cardItem); sortedCardList.UpdateCardItem(cardItem); }
static void PaintCardImage(Graphics g, CardItem cardItem, CardStyleBehaviorItem behavior) { if(string.IsNullOrEmpty(cardItem.ImagePath)) return; using(Image pic = Program.LogicHandler.ServicesProvider.ImagesService.GetCardPicture(cardItem)) if(pic != null) g.DrawImage(pic, CardMetricsService.ImageRect(cardItem.StyleCode, behavior.BehaviorCode)); }
static void PaintCardType(Graphics g, CardItem cardItem, CardStyleBehaviorItem behavior) { StringFormat f = new StringFormat(); f.Trimming = StringTrimming.EllipsisCharacter; f.LineAlignment = StringAlignment.Center; if(behavior.CardName_FontShadowed) g.DrawString( cardItem.Type , behavior.CardType_Font , new SolidBrush(behavior.CardType_FontShadowColor) , ShadowRect(CardMetricsService.TypeRect(cardItem.StyleCode, behavior.BehaviorCode)) , f ); g.DrawString( cardItem.Type , behavior.CardType_Font , new SolidBrush(behavior.CardType_FontColor) , CardMetricsService.TypeRect(cardItem.StyleCode, behavior.BehaviorCode) , f ); }
public void AddCardItem(CardItem card, bool hidden, int index) { if(index > -1 && index < this.Items.Count) this.Items.Insert(index, CreateCardItem(card, hidden)); else this.Items.Add(CreateCardItem(card, hidden)); }