Refactor generated files and update assembly information

- Removed unnecessary auto-generated code from GeneratedInternalTypeHelper.g.cs.
- Updated MainWindow.g.cs checksum to reflect changes in MainWindow.xaml.
- Changed AssemblyInformationalVersion in NewGame.UI.AssemblyInfo.cs.
- Updated sourcelink JSON to point to the new commit hash.
- Modified DeckBuilderView and GameView generated files to reflect changes in their respective XAML files.
- Added new BAML files for various views and controls.
- Updated references and binary files in the Debug directory.
This commit is contained in:
alexandriaa
2026-04-12 12:54:27 -04:00
parent 3105cd92f0
commit f0b96ad03f
57 changed files with 2034 additions and 439 deletions
+68 -64
View File
@@ -1,137 +1,141 @@
{
"metadata": {
"generated_at": "2026-04-06T19:09:01.072523+00:00",
"generated_at": "2026-04-12T02:16:19.750425+00:00",
"commit_hash": "",
"repo_name": "new",
"depth_level": 1,
"file_coverage_summary": {
"total_files": 41,
"total_files": 55,
"analyzed": 0,
"not_analyzed": 41,
"not_analyzed": 55,
"not_analyzed_by_reason": {
"other": 41
"other": 55
}
}
},
"description": "Magical Deckbuilder is organized as a decoupled MVVM application where the WPF Presentation Layer communicates with an Application Controller (MVVM) that orchestrates interactions with core shared game logic. The primary flow is: user actions in the UI are handled via ViewModels in the Application Controller, which then update or query core systems — Game Mechanics Core for turn and character logic, Card & Deck System for creating/managing cards and decks, the Card Crafting Engine for combining cards, and the AI Strategy Module for opponent decisions — with updated state propagated back to the UI via data binding.",
"description": "This architecture represents a Digital Collectible Card Game (DCCG) built on the MVVM pattern. The main flow is driven by user interactions in the Presentation & Interaction Layer, which translates UI actions into commands that either affect the Game Simulation Engine for live matches or interact with the Asset & Deck Management system for deck customization. The Game Simulation Engine enforces rules and AI decision-making using Core Domain Models, while Persistence & Infrastructure handles serialization and storage of deck data separately from core logic.",
"files": {},
"methods_index": {},
"components": [
{
"name": "Presentation Layer",
"description": "Handles the visual rendering of the game and user interactions via WPF Views and custom Controls.",
"name": "Presentation & Interaction Layer",
"description": "The WPF-based MVVM layer that manages user input, screen navigation, and UI state. It coordinates between the user and the underlying game systems.",
"key_entities": [],
"source_cluster_ids": [],
"source_cluster_ids": [
10,
11,
12,
13
],
"file_methods": [],
"component_id": "1",
"can_expand": false
},
{
"name": "Application Controller (MVVM)",
"description": "The central hub of the UI application, managing state, commands, and data flow between the UI and core logic.",
"name": "Game Simulation Engine",
"description": "The central logic hub responsible for enforcing game rules, processing turns, and executing AI opponent logic.",
"key_entities": [],
"source_cluster_ids": [],
"source_cluster_ids": [
3,
4,
5,
9
],
"file_methods": [],
"component_id": "2",
"can_expand": false
},
{
"name": "Game Mechanics Core",
"description": "Defines the fundamental rules and entities of the game, including characters, health, and turn-based logic.",
"name": "Asset & Deck Management",
"description": "Handles the lifecycle of game assets, including the instantiation of cards from templates and the logical validation of player decks.",
"key_entities": [],
"source_cluster_ids": [],
"source_cluster_ids": [
8,
14
],
"file_methods": [],
"component_id": "3",
"can_expand": false
},
{
"name": "Card & Deck System",
"description": "Manages the lifecycle of cards and decks, including creation, shuffling, and drawing mechanics.",
"name": "Core Domain Models",
"description": "Passive data structures representing the fundamental entities of the game, such as Cards and Decks.",
"key_entities": [],
"source_cluster_ids": [],
"source_cluster_ids": [
0,
1,
2,
15
],
"file_methods": [],
"component_id": "4",
"can_expand": false
},
{
"name": "Card Crafting Engine",
"description": "Specialized logic for the card combination system, allowing players to merge cards into new variants.",
"name": "Persistence & Infrastructure",
"description": "Manages external system interactions, primarily file I/O for saving and loading player decks and global error logging.",
"key_entities": [],
"source_cluster_ids": [],
"source_cluster_ids": [
6,
7,
16
],
"file_methods": [],
"component_id": "5",
"can_expand": false
},
{
"name": "AI Strategy Module",
"description": "Provides automated decision-making for the opponent, including move selection and difficulty-based deck building.",
"key_entities": [],
"source_cluster_ids": [],
"file_methods": [],
"component_id": "6",
"can_expand": false
}
],
"components_relations": [
{
"relation": "Binds UI elements to ViewModel properties and executes user commands.",
"src_name": "Presentation Layer",
"dst_name": "Application Controller (MVVM)",
"relation": "Dispatches gameplay commands (e.g., PlayCard, EndTurn) to update game state",
"src_name": "Presentation & Interaction Layer",
"dst_name": "Game Simulation Engine",
"src_id": "1",
"dst_id": "2",
"edge_count": 0,
"is_static": false
},
{
"relation": "Updates character health/mana and manages turn transitions.",
"src_name": "Application Controller (MVVM)",
"dst_name": "Game Mechanics Core",
"src_id": "2",
"relation": "Requests card creation and deck validation during the deck-building process",
"src_name": "Presentation & Interaction Layer",
"dst_name": "Asset & Deck Management",
"src_id": "1",
"dst_id": "3",
"edge_count": 0,
"is_static": false
},
{
"relation": "Manages player hand state and deck initialization via the CardFactory.",
"src_name": "Application Controller (MVVM)",
"dst_name": "Card & Deck System",
"relation": "Triggers save and load operations for user-created decks",
"src_name": "Presentation & Interaction Layer",
"dst_name": "Persistence & Infrastructure",
"src_id": "1",
"dst_id": "5",
"edge_count": 0,
"is_static": false
},
{
"relation": "Modifies and queries the state of card and deck entities during rule execution",
"src_name": "Game Simulation Engine",
"dst_name": "Core Domain Models",
"src_id": "2",
"dst_id": "4",
"edge_count": 0,
"is_static": false
},
{
"relation": "Triggers the combination of selected cards into new custom cards.",
"src_name": "Application Controller (MVVM)",
"dst_name": "Card Crafting Engine",
"src_id": "2",
"dst_id": "5",
"edge_count": 0,
"is_static": false
},
{
"relation": "Requests opponent move calculations and difficulty-based deck generation.",
"src_name": "Application Controller (MVVM)",
"dst_name": "AI Strategy Module",
"src_id": "2",
"dst_id": "6",
"edge_count": 0,
"is_static": false
},
{
"relation": "Utilizes DeckManagers to track character resources and in-play cards.",
"src_name": "Game Mechanics Core",
"dst_name": "Card & Deck System",
"relation": "Instantiates card objects and organizes them into deck structures",
"src_name": "Asset & Deck Management",
"dst_name": "Core Domain Models",
"src_id": "3",
"dst_id": "4",
"edge_count": 0,
"is_static": false
},
{
"relation": "Evaluates card values for move selection and populates opponent decks.",
"src_name": "AI Strategy Module",
"dst_name": "Card & Deck System",
"src_id": "6",
"relation": "Serializes and deserializes deck data for long-term storage",
"src_name": "Persistence & Infrastructure",
"dst_name": "Core Domain Models",
"src_id": "5",
"dst_id": "4",
"edge_count": 0,
"is_static": false
+2 -2
View File
@@ -1,7 +1,7 @@
{
"schema_version": 2,
"repo_state_hash": "62b7b73_2280d592",
"base_commit": "62b7b73a17773fe904c6dcf67941295783386c2e",
"repo_state_hash": "3105cd9_2ba49900",
"base_commit": "3105cd92f05a4d4cdc94569f6b2773f383760a27",
"file_to_component": {},
"expanded_components": []
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,4 +1,4 @@
{
"commit_hash": "e36147670d0b5d9de9af88c354d731309a75bbcb",
"commit_hash": "3105cd92f05a4d4cdc94569f6b2773f383760a27",
"code_boarding_version": "0.2.0"
}
+68 -12
View File
@@ -1,6 +1,6 @@
{
"version": 1,
"generated_at": "2026-04-06T19:09:01.072523+00:00",
"generated_at": "2026-04-12T02:16:19.751423+00:00",
"analyzed_files": [],
"not_analyzed_files": [
{
@@ -15,6 +15,10 @@
"path": "MagicalDeckbuilder.Shared\\Combining\\CardCombiner.cs",
"reason": "other"
},
{
"path": "MagicalDeckbuilder.Shared\\Combining\\CombinationLookup.cs",
"reason": "other"
},
{
"path": "MagicalDeckbuilder.Shared\\Decks\\DeckManager.cs",
"reason": "other"
@@ -39,6 +43,18 @@
"path": "MagicalDeckbuilder.Shared\\MagicalDeckbuilder.Shared.csproj",
"reason": "other"
},
{
"path": "MagicalDeckbuilder.Shared\\Storage\\DeckSerialization.cs",
"reason": "other"
},
{
"path": "MagicalDeckbuilder.Shared\\Storage\\DeckStorageService.cs",
"reason": "other"
},
{
"path": "MagicalDeckbuilder.Shared\\Storage\\SavedDeck.cs",
"reason": "other"
},
{
"path": "new.sln",
"reason": "other"
@@ -55,14 +71,6 @@
"path": "NewGame.UI\\AssemblyInfo.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\Controls\\CardControl.xaml",
"reason": "other"
},
{
"path": "NewGame.UI\\Controls\\CardControl.xaml.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\Controls\\CardZoomOverlay.xaml",
"reason": "other"
@@ -103,6 +111,10 @@
"path": "NewGame.UI\\ViewModels\\RelayCommand.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\ViewModels\\SavedDeckViewModel.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\ViewModels\\ViewModelBase.cs",
"reason": "other"
@@ -131,6 +143,22 @@
"path": "NewGame.UI\\Views\\DeckBuilderView.xaml.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\DeckNameDialog.xaml",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\DeckNameDialog.xaml.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\DeckSelectionView.xaml",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\DeckSelectionView.xaml.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\ErrorWindow.xaml",
"reason": "other"
@@ -147,6 +175,14 @@
"path": "NewGame.UI\\Views\\GalleryView.xaml.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\GameEndWindow.xaml",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\GameEndWindow.xaml.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\GameView.xaml",
"reason": "other"
@@ -163,17 +199,37 @@
"path": "NewGame.UI\\Views\\MenuView.xaml.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\SettingsView.xaml",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\SettingsView.xaml.cs",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\UnsavedChangesDialog.xaml",
"reason": "other"
},
{
"path": "NewGame.UI\\Views\\UnsavedChangesDialog.xaml.cs",
"reason": "other"
},
{
"path": "README.md",
"reason": "other"
},
{
"path": "temp_gameview_old.txt",
"reason": "other"
}
],
"summary": {
"total_files": 41,
"total_files": 55,
"analyzed": 0,
"not_analyzed": 41,
"not_analyzed": 55,
"not_analyzed_by_reason": {
"other": 41
"other": 55
}
}
}
+173 -2
View File
@@ -1,3 +1,6 @@
using System.Collections.Generic;
using System.Linq;
namespace MagicalDeckbuilder.Cards;
/// <summary>
@@ -73,7 +76,14 @@ public enum EffectType
ShieldSelf, // Shield self
Biteback, // Counterattack when attacked
Infect, // Add infection tokens
DisableAttack // Disable creature from attacking (Astral Eviction)
DisableAttack, // Disable creature from attacking (Astral Eviction)
EldritchSummon, // Summon from Eldritch table after X turns (Call of the Deep)
// New armor effect types
NegateDamage, // Negates all damage (Suspicious Suit, Aegis of Jaa'aird'thuun)
Temporary, // Temporary effect that expires after X turns
OnHitDebuff, // Debuffs attacker when hit (Virulent Vambrace)
RevealHand // Makes opponent's hand visible for a turn (Jar of Eyes)
}
/// <summary>
@@ -138,6 +148,11 @@ public class Card
public int Rarity { get; set; } // 1 = common, 2 = uncommon, 3 = rare, 4 = legendary
public bool IsCombinable { get; set; } // true if this card can be used in the combine system
public bool IsComboOnly { get; set; } // true if this card can only be obtained via combining, not added to decks
/// <summary>
/// Temperature Gradient passive: "up" doubles Power buff amounts/duration, "down" doubles Health buff amounts/duration
/// </summary>
public string TemperatureGradient { get; set; } // "" = none, "up" = power, "down" = health, "both" = both
public virtual Card Clone()
{
@@ -278,6 +293,18 @@ public class SpellCard : Card
Target = e.Target,
IsTemporary = e.IsTemporary
}).ToList(),
Abilities = this.Abilities.Select(a => new CardAbility
{
Name = a.Name,
Description = a.Description,
ManaCost = a.ManaCost,
EffectType = a.EffectType,
EffectValue = a.EffectValue,
RequiresTarget = a.RequiresTarget,
IsPassive = a.IsPassive,
Duration = a.Duration,
Target = a.Target
}).ToList(),
IsLegendary = this.IsLegendary,
Rarity = this.Rarity,
IsCombinable = this.IsCombinable,
@@ -317,6 +344,18 @@ public class ArtifactCard : Card
Target = e.Target,
IsTemporary = e.IsTemporary
}).ToList(),
Abilities = this.Abilities.Select(a => new CardAbility
{
Name = a.Name,
Description = a.Description,
ManaCost = a.ManaCost,
EffectType = a.EffectType,
EffectValue = a.EffectValue,
RequiresTarget = a.RequiresTarget,
IsPassive = a.IsPassive,
Duration = a.Duration,
Target = a.Target
}).ToList(),
IsLegendary = this.IsLegendary,
Rarity = this.Rarity,
IsCombinable = this.IsCombinable,
@@ -357,6 +396,18 @@ public class EventCard : Card
Target = e.Target,
IsTemporary = e.IsTemporary
}).ToList(),
Abilities = this.Abilities.Select(a => new CardAbility
{
Name = a.Name,
Description = a.Description,
ManaCost = a.ManaCost,
EffectType = a.EffectType,
EffectValue = a.EffectValue,
RequiresTarget = a.RequiresTarget,
IsPassive = a.IsPassive,
Duration = a.Duration,
Target = a.Target
}).ToList(),
IsLegendary = this.IsLegendary,
Rarity = this.Rarity,
IsCombinable = this.IsCombinable,
@@ -410,6 +461,16 @@ public class BlankCard : Card
public class WeaponCard : Card
{
public WeaponTargetType TargetType { get; set; } = WeaponTargetType.DamageToOpponent;
/// <summary>
/// Power growth per hit - for weapons like Disgusting! that gain power each time they deal damage
/// </summary>
public int PowerGrowth { get; set; }
/// <summary>
/// Number of times this weapon has dealt damage (for tracking power growth)
/// </summary>
public int HitCount { get; set; }
public WeaponCard()
{
@@ -437,9 +498,23 @@ public class WeaponCard : Card
Target = e.Target,
IsTemporary = e.IsTemporary
}).ToList(),
Abilities = this.Abilities.Select(a => new CardAbility
{
Name = a.Name,
Description = a.Description,
ManaCost = a.ManaCost,
EffectType = a.EffectType,
EffectValue = a.EffectValue,
RequiresTarget = a.RequiresTarget,
IsPassive = a.IsPassive,
Duration = a.Duration,
Target = a.Target
}).ToList(),
IsLegendary = this.IsLegendary,
Rarity = this.Rarity,
TargetType = this.TargetType
TargetType = this.TargetType,
PowerGrowth = this.PowerGrowth,
HitCount = this.HitCount
};
}
}
@@ -449,6 +524,76 @@ public class WeaponCard : Card
/// </summary>
public class ArmorCard : Card
{
/// <summary>
/// Passive damage reduction - reduces all incoming damage by this amount
/// </summary>
public int DamageReduction { get; set; }
/// <summary>
/// Has Biteback effect - deals damage back to attacker
/// </summary>
public bool HasBiteback { get; set; }
/// <summary>
/// Biteback damage amount
/// </summary>
public int BitebackDamage { get; set; }
/// <summary>
/// Negates all incoming damage (for Suspicious Suit, Aegis of Jaa'aird'thuun)
/// </summary>
public bool NegatesAllDamage { get; set; }
/// <summary>
/// Number of turns until armor expires (for temporary armor)
/// </summary>
public int TurnsRemaining { get; set; }
/// <summary>
/// Has OnHitDebuff - debuffs attacker when hit
/// </summary>
public bool HasOnHitDebuff { get; set; }
/// <summary>
/// OnHitDebuff power reduction amount
/// </summary>
public int OnHitDebuffPower { get; set; }
/// <summary>
/// OnHitDebuff health reduction amount
/// </summary>
public int OnHitDebuffHealth { get; set; }
/// <summary>
/// Has OnHitSpawn - spawns a creature when hit (50% chance for Disintegrating Regalia)
/// </summary>
public bool HasOnHitSpawn { get; set; }
/// <summary>
/// Card ID to spawn when hit
/// </summary>
public string? SpawnCardId { get; set; }
/// <summary>
/// Chance to spawn (0-100)
/// </summary>
public int SpawnChance { get; set; }
/// <summary>
/// Has Intimidation effect - weakens attacking creatures
/// </summary>
public bool HasIntimidation { get; set; }
/// <summary>
/// Intimidation power threshold (creatures with power <= this cannot attack)
/// </summary>
public int IntimidationPowerThreshold { get; set; }
/// <summary>
/// Intimidation health threshold (creatures with health <= this cannot attack)
/// </summary>
public int IntimidationHealthThreshold { get; set; }
public ArmorCard()
{
Type = CardType.Armor;
@@ -466,6 +611,20 @@ public class ArmorCard : Card
ManaCost = this.ManaCost,
Power = this.Power,
Health = this.Health,
DamageReduction = this.DamageReduction,
HasBiteback = this.HasBiteback,
BitebackDamage = this.BitebackDamage,
NegatesAllDamage = this.NegatesAllDamage,
TurnsRemaining = this.TurnsRemaining,
HasOnHitDebuff = this.HasOnHitDebuff,
OnHitDebuffPower = this.OnHitDebuffPower,
OnHitDebuffHealth = this.OnHitDebuffHealth,
HasOnHitSpawn = this.HasOnHitSpawn,
SpawnCardId = this.SpawnCardId,
SpawnChance = this.SpawnChance,
HasIntimidation = this.HasIntimidation,
IntimidationPowerThreshold = this.IntimidationPowerThreshold,
IntimidationHealthThreshold = this.IntimidationHealthThreshold,
Effects = this.Effects.Select(e => new CardEffect
{
Name = e.Name,
@@ -475,6 +634,18 @@ public class ArmorCard : Card
Target = e.Target,
IsTemporary = e.IsTemporary
}).ToList(),
Abilities = this.Abilities.Select(a => new CardAbility
{
Name = a.Name,
Description = a.Description,
ManaCost = a.ManaCost,
EffectType = a.EffectType,
EffectValue = a.EffectValue,
RequiresTarget = a.RequiresTarget,
IsPassive = a.IsPassive,
Duration = a.Duration,
Target = a.Target
}).ToList(),
IsLegendary = this.IsLegendary,
Rarity = this.Rarity,
IsCombinable = this.IsCombinable,
@@ -19,12 +19,12 @@ public class CombinationLookup
foreach (var card in cards)
{
// Pre-made combination cards should follow naming convention:
// "combine_{id1}_{id2}" or use a prefix to identify them
if (card.Name.StartsWith("combine_", StringComparison.OrdinalIgnoreCase))
// Pre-made combo-only cards are stored in the deck
// They have IsComboOnly = true and IsCombinable = true
if (card.IsComboOnly && card.IsCombinable)
{
// Extract the key from the name (e.g., "combine_abc123_def456")
var key = card.Name.ToLowerInvariant();
// Create a key from the card name in lowercase with underscores
var key = card.Name.ToLowerInvariant().Replace(" ", "_").Replace("'", "");
_combinationCards[key] = card;
}
}
@@ -45,14 +45,18 @@ public class CombinationLookup
return result;
}
// Try alternative naming patterns
// Pattern 2: combine_{name1}_{name2} (using sanitized card names)
var nameKey = $"combine_{SanitizeName(card1.Name)}_{SanitizeName(card2.Name)}".ToLowerInvariant();
// Try matching by checking combo card descriptions for the two base card names
// The combo card description contains "(combo X + Y)" format
var name1 = card1.Name.ToLowerInvariant();
var name2 = card2.Name.ToLowerInvariant();
// Check if we have any partial matches (names might not match exactly)
foreach (var kvp in _combinationCards)
{
if (kvp.Key.Contains(ids[0]) || kvp.Key.Contains(ids[1]))
var desc = kvp.Value.Description.ToLowerInvariant();
// Check if description contains both card names (with "combo" keyword)
if (desc.Contains("combo") &&
(desc.Contains(name1) || desc.Contains(name1.Replace(" ", ""))) &&
(desc.Contains(name2) || desc.Contains(name2.Replace(" ", ""))))
{
return kvp.Value;
}
+63 -1
View File
@@ -31,6 +31,10 @@ public class OpponentAI
public int? SlotIndex;
public Card? TargetCard;
public AIDecisionType Type;
// For UseAbility decisions
public int? AbilityIndex; // Which ability to use (index in Abilities list)
public Card? AbilityTarget; // Target for the ability
}
public enum AIDecisionType
@@ -40,12 +44,18 @@ public class OpponentAI
PlayArtifact,
PlayWeapon,
Attack,
UseAbility,
EndTurn,
Pass
}
public AIDecision DecideAction(DeckManager deck, int currentMana, List<CreatureSlot> playerSlots)
public AIDecision DecideAction(DeckManager deck, int currentMana, List<CreatureSlot> playerSlots, List<CreatureSlot>? opponentSlots = null)
{
// First check if any creature can use an ability
var abilityDecision = TryChooseAbilityDecision(deck, currentMana, playerSlots, opponentSlots);
if (abilityDecision.Type != AIDecisionType.Pass)
return abilityDecision;
return _difficulty switch
{
DifficultyLevel.Apprentice => ApprenticeLogic(deck, currentMana, playerSlots),
@@ -55,6 +65,58 @@ public class OpponentAI
_ => ApprenticeLogic(deck, currentMana, playerSlots)
};
}
/// <summary>
/// Try to find a creature with an ability that can be used
/// </summary>
private AIDecision TryChooseAbilityDecision(DeckManager deck, int currentMana, List<CreatureSlot> playerSlots, List<CreatureSlot>? opponentSlots)
{
if (opponentSlots == null) return new AIDecision { Type = AIDecisionType.Pass };
// Check opponent's creatures for usable abilities
for (int i = 0; i < opponentSlots.Count; i++)
{
var slot = opponentSlots[i];
if (slot?.Creature == null) continue;
var card = slot.Creature;
// Skip if already used ability this turn
if (card.Abilities == null || card.Abilities.Count == 0) continue;
// Check each ability
for (int a = 0; a < card.Abilities.Count; a++)
{
var ability = card.Abilities[a];
if (ability.IsPassive) continue; // Skip passives
if (ability.ManaCost > currentMana) continue; // Not enough mana
// Have ability - find target
Card? target = null;
// Simple targeting: pick a random player creature as target if ability needs one
if (ability.RequiresTarget && playerSlots.Count > 0)
{
var availableTargets = playerSlots.Where(s => s?.Creature != null).ToList();
if (availableTargets.Count > 0)
{
target = availableTargets[_random.Next(availableTargets.Count)].Creature;
}
}
return new AIDecision
{
Type = AIDecisionType.UseAbility,
CardId = card.Id,
SlotIndex = i,
AbilityIndex = a,
TargetCard = target
};
}
}
return new AIDecision { Type = AIDecisionType.Pass };
}
private AIDecision ApprenticeLogic(DeckManager deck, int currentMana, List<CreatureSlot> playerSlots)
{
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("MagicalDeckbuilder.Shared")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+99b1eb3a438c388c3d1091642c0835b917836df6")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3105cd92f05a4d4cdc94569f6b2773f383760a27")]
[assembly: System.Reflection.AssemblyProductAttribute("MagicalDeckbuilder.Shared")]
[assembly: System.Reflection.AssemblyTitleAttribute("MagicalDeckbuilder.Shared")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
@@ -1 +1 @@
7bbb30894009cb511ef9fdf5afd79f35b65d7279078b123b2b5b54a55943d128
d578286be9ff20f858c37dc2537f9c61307b3e40a9ab664009da096089398353
@@ -1 +1 @@
{"documents":{"C:\\Users\\atw61\\OneDrive\\Desktop\\new\\*":"https://raw.githubusercontent.com/alexandria121/new/99b1eb3a438c388c3d1091642c0835b917836df6/*"}}
{"documents":{"C:\\Users\\atw61\\OneDrive\\Desktop\\new\\*":"https://raw.githubusercontent.com/alexandria121/new/3105cd92f05a4d4cdc94569f6b2773f383760a27/*"}}
+3
View File
@@ -31,6 +31,9 @@
<Converters:CanAffordToColorConverter x:Key="CanAffordToColorConverter"/>
<Converters:CountToVisibilityConverter x:Key="CountToVisibilityConverter"/>
<Converters:CountToVisibilityInverseConverter x:Key="CountToVisibilityInverseConverter"/>
<Converters:CardTypeToStatsVisibilityConverter x:Key="CardTypeToStatsVisibilityConverter"/>
<Converters:CardTypeToPowerVisibilityConverter x:Key="CardTypeToPowerVisibilityConverter"/>
<Converters:CardTypeToHealthVisibilityConverter x:Key="CardTypeToHealthVisibilityConverter"/>
</ResourceDictionary>
</Application.Resources>
</Application>
+5 -3
View File
@@ -22,6 +22,8 @@
<Converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<Converters:InverseBoolToVisibilityConverter x:Key="InverseBoolToVisibilityConverter"/>
<Converters:CardTypeToStatsVisibilityConverter x:Key="CardTypeToStatsVisibilityConverter"/>
<Converters:CardTypeToPowerVisibilityConverter x:Key="CardTypeToPowerVisibilityConverter"/>
<Converters:CardTypeToHealthVisibilityConverter x:Key="CardTypeToHealthVisibilityConverter"/>
</UserControl.Resources>
<!-- Semi-transparent overlay background -->
@@ -160,13 +162,13 @@
</StackPanel>
</Border>
<!-- Power (for creatures/weapons) -->
<!-- Power (for creatures) -->
<Border Grid.Column="1"
Background="#503232"
CornerRadius="8"
Padding="10,4"
Margin="5,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToStatsVisibilityConverter}, FallbackValue=Collapsed}">
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="⚔" Foreground="{StaticResource DangerBrush}" FontSize="12" Margin="0,0,4,0"/>
<TextBlock Text="{Binding Power}" Foreground="White" FontSize="13" FontWeight="Bold"/>
@@ -184,7 +186,7 @@
CornerRadius="8"
Padding="10,4"
Margin="5,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToStatsVisibilityConverter}, FallbackValue=Collapsed}">
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="♥" Foreground="{StaticResource HealthBrush}" FontSize="12" Margin="0,0,4,0"/>
<TextBlock Text="{Binding Health}" Foreground="White" FontSize="13" FontWeight="Bold"/>
+66
View File
@@ -588,6 +588,72 @@ public class CardTypeToStatsVisibilityConverter : IValueConverter
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
/// <summary>
/// Converts CardType to Visibility - visible if card should display Power value
/// Weapons show Power, Creatures show Power, Armor/Armor/Event don't need P displayed, Blanks hide P
/// </summary>
public class CardTypeToPowerVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
if (value is CardType cardType)
{
return cardType switch
{
CardType.Creature => Visibility.Visible,
CardType.Weapon => Visibility.Visible,
_ => Visibility.Collapsed
};
}
return Visibility.Collapsed;
}
catch
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
/// <summary>
/// Converts CardType to Visibility - visible if card should display Health value
/// Creatures and Armor show Health, Weapons don't need H, Blanks hide H/P
/// </summary>
public class CardTypeToHealthVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
try
{
if (value is CardType cardType)
{
return cardType switch
{
CardType.Creature => Visibility.Visible,
CardType.Armor => Visibility.Visible,
_ => Visibility.Collapsed
};
}
return Visibility.Collapsed;
}
catch
{
return Visibility.Collapsed;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
+1
View File
@@ -11,6 +11,7 @@
Title="Magical Deckbuilder"
Height="800" Width="1200"
MinHeight="600" MinWidth="900"
ResizeMode="NoResize"
WindowStartupLocation="CenterScreen"
Background="{StaticResource BackgroundBrush}">
+5
View File
@@ -202,6 +202,11 @@ public class CardViewModel : ViewModelBase
public bool IsComboOnly => _card.IsComboOnly;
public IReadOnlyList<CardEffect> Effects => _card.Effects;
public IReadOnlyList<CardAbility> Abilities => _card.Abilities;
/// <summary>
/// Track whether an ability has been used this turn
/// </summary>
public bool AbilityUsedThisTurn { get; set; }
public string EffectsText => Effects.Count > 0 || Abilities.Count > 0
? string.Join(", ", Effects.Select(e => e.Name).Concat(Abilities.Select(a => a.Name)))
File diff suppressed because it is too large Load Diff
+156 -93
View File
@@ -12,6 +12,8 @@
<Converters:TypeToColorConverter x:Key="TypeToColorConverter"/>
<Converters:ElementToColorConverter x:Key="ElementToColorConverter"/>
<Converters:CardTypeToStatsVisibilityConverter x:Key="CardTypeToStatsVisibilityConverter"/>
<Converters:CardTypeToPowerVisibilityConverter x:Key="CardTypeToPowerVisibilityConverter"/>
<Converters:CardTypeToHealthVisibilityConverter x:Key="CardTypeToHealthVisibilityConverter"/>
</UserControl.Resources>
<Grid Margin="20">
@@ -42,11 +44,12 @@
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.5*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<!-- Available Cards -->
<!-- Left Panel: Available Cards Scroll -->
<Border Grid.Column="0"
Background="{StaticResource SurfaceBrush}"
CornerRadius="8"
@@ -58,20 +61,12 @@
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal" Margin="0,0,0,10">
<TextBlock Text="Available Cards"
Foreground="{StaticResource TextPrimaryBrush}"
FontSize="14"
FontWeight="Bold"/>
<TextBlock Text="Sort by:"
Foreground="{StaticResource TextSecondaryBrush}"
FontSize="12"
Margin="20,2,0,0"/>
<ComboBox ItemsSource="{Binding SortOptions}"
SelectedItem="{Binding SelectedSortOption}"
Width="100"
Margin="5,0,0,0"/>
</StackPanel>
<TextBlock Grid.Row="0"
Text="Available Cards"
Foreground="{StaticResource TextPrimaryBrush}"
FontSize="14"
FontWeight="Bold"
Margin="0,0,0,10"/>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto">
<ItemsControl ItemsSource="{Binding AvailableCards}">
@@ -86,10 +81,10 @@
BorderBrush="{Binding Type, Converter={StaticResource TypeToColorConverter}}"
BorderThickness="2"
CornerRadius="6"
Padding="8"
Margin="4"
Width="150"
Height="210"
Padding="6"
Margin="3"
Width="105"
Height="145"
Cursor="Hand"
MouseLeftButtonDown="Card_MouseLeftButtonDown"
MouseMove="Card_MouseMove">
@@ -97,89 +92,54 @@
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="30"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="18"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- Name and Mana Cost -->
<Grid Grid.Row="0">
<TextBlock Text="{Binding Name}"
Foreground="White"
FontSize="11"
FontSize="8"
FontWeight="Bold"
TextTrimming="CharacterEllipsis"/>
<Border HorizontalAlignment="Right"
Background="{StaticResource ManaBrush}"
CornerRadius="6"
Padding="5,2">
<StackPanel Orientation="Horizontal">
<TextBlock Text="☀" Foreground="White" FontSize="8" Margin="0,0,2,0"/>
<TextBlock Text="{Binding ManaCost}"
Foreground="White"
FontSize="10"
FontWeight="Bold"/>
</StackPanel>
CornerRadius="2"
Padding="2,1">
<TextBlock Text="{Binding ManaCost}"
Foreground="White"
FontSize="7"
FontWeight="Bold"/>
</Border>
</Grid>
<!-- Type Badge -->
<Border Grid.Row="1"
Background="{Binding Element, Converter={StaticResource ElementToColorConverter}}"
Margin="0,4"
CornerRadius="3"
Padding="4,2">
Margin="0,2"
CornerRadius="2"
Padding="2,1">
<TextBlock Text="{Binding Type}"
Foreground="#80FFFFFF"
FontSize="9"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
FontSize="6"
HorizontalAlignment="Center"/>
</Border>
<!-- Power and Health -->
<Border Grid.Row="2"
Background="{StaticResource SurfaceBrush}"
CornerRadius="4"
Padding="6,4">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal" HorizontalAlignment="Center"
Visibility="{Binding Type, Converter={StaticResource CardTypeToStatsVisibilityConverter}, FallbackValue=Collapsed}">
<TextBlock Text="⚔" Foreground="{StaticResource DangerBrush}" FontSize="12" Margin="0,0,4,0"/>
<TextBlock Text="{Binding Power}" Foreground="{StaticResource DangerBrush}" FontSize="14" FontWeight="Bold"/>
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="⚔" Foreground="{StaticResource DangerBrush}" FontSize="8" Margin="0,0,1,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Power}" Foreground="{StaticResource DangerBrush}" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="❤" Foreground="{StaticResource HealthBrush}" FontSize="8"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Health}" Foreground="{StaticResource HealthBrush}" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Center"
Visibility="{Binding Type, Converter={StaticResource CardTypeToStatsVisibilityConverter}, FallbackValue=Collapsed}">
<TextBlock Text="❤" Foreground="{StaticResource HealthBrush}" FontSize="12" Margin="0,0,4,0"/>
<TextBlock Text="{Binding Health}" Foreground="{StaticResource HealthBrush}" FontSize="14" FontWeight="Bold"/>
</StackPanel>
</Grid>
</Border>
<!-- Abilities/Effects -->
<Border Grid.Row="3"
Margin="0,4,0,0"
Visibility="{Binding HasEffects, Converter={StaticResource NullToVisibilityConverter}}">
<TextBlock Text="{Binding EffectsText}"
Foreground="{StaticResource AccentBrush}"
FontSize="8"
TextWrapping="Wrap"
MaxHeight="30"
TextTrimming="CharacterEllipsis"/>
</Border>
<!-- Element -->
<StackPanel Grid.Row="4" Orientation="Horizontal" Margin="0,4,0,0" HorizontalAlignment="Center">
<TextBlock Text="{Binding ElementIcon}" FontSize="10" Margin="0,0,4,0"/>
<StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="{Binding ElementIcon}" FontSize="7"/>
<TextBlock Text="{Binding Element}"
Foreground="{StaticResource TextSecondaryBrush}"
FontSize="9"
FontWeight="SemiBold"/>
FontSize="6"/>
</StackPanel>
</Grid>
</Border>
@@ -190,8 +150,111 @@
</Grid>
</Border>
<!-- Deck Preview -->
<!-- Middle Panel: Large Card Preview -->
<Border Grid.Column="1"
Background="{StaticResource SurfaceBrush}"
CornerRadius="8"
Padding="20"
Margin="0,0,10,0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"
Text="Card Preview"
Foreground="{StaticResource TextPrimaryBrush}"
FontSize="14"
FontWeight="Bold"
Margin="0,0,0,10"/>
<Border Grid.Row="1"
Background="{StaticResource SurfaceLightBrush}"
CornerRadius="10"
Padding="20">
<Grid DataContext="{Binding SelectedCard}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="30"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<TextBlock Text="{Binding Name, FallbackValue='Click a card to preview'}"
Foreground="White"
FontSize="16"
FontWeight="Bold"
TextTrimming="CharacterEllipsis"/>
<Border HorizontalAlignment="Right"
Background="{StaticResource ManaBrush}"
CornerRadius="6"
Padding="6,2"
Visibility="{Binding ManaCost, Converter={StaticResource NullToVisibilityConverter}}">
<TextBlock Text="{Binding ManaCost}"
Foreground="White"
FontSize="12"
FontWeight="Bold"/>
</Border>
</Grid>
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="0,8,0,0">
<Border Background="{Binding Element, Converter={StaticResource ElementToColorConverter}}"
CornerRadius="4"
Padding="6,2"
Margin="0,0,6,0">
<TextBlock Text="{Binding Type}"
Foreground="White"
FontSize="10"
FontWeight="Bold"/>
</Border>
<TextBlock Text="{Binding Element}"
Foreground="{StaticResource TextSecondaryBrush}"
FontSize="10"
VerticalAlignment="Center"/>
</StackPanel>
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,10,0,0" HorizontalAlignment="Center">
<TextBlock Text="⚔" Foreground="{StaticResource DangerBrush}" FontSize="14" Margin="0,0,3,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Power}" Foreground="{StaticResource DangerBrush}" FontSize="18" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text=" ❤" Foreground="{StaticResource HealthBrush}" FontSize="14"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Health}" Foreground="{StaticResource HealthBrush}" FontSize="18" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
<Border Grid.Row="3"
Background="{StaticResource SurfaceBrush}"
CornerRadius="6"
Padding="10"
Margin="0,10,0,0"
VerticalAlignment="Top">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<TextBlock Text="{Binding Description}"
Foreground="{StaticResource TextPrimaryBrush}"
FontSize="10"
TextWrapping="Wrap"/>
</ScrollViewer>
</Border>
<TextBlock Grid.Row="4"
Text="{Binding RarityName}"
Foreground="{Binding Rarity, Converter={StaticResource RarityToColorConverter}}"
FontSize="10"
FontWeight="Bold"
HorizontalAlignment="Center"
Margin="0,8,0,0"/>
</Grid>
</Border>
</Grid>
</Border>
<!-- Right Panel: Your Deck -->
<Border Grid.Column="2"
Background="{StaticResource SurfaceBrush}"
CornerRadius="8"
Padding="15"
@@ -226,8 +289,8 @@
BorderBrush="{Binding Type, Converter={StaticResource TypeToColorConverter}}"
BorderThickness="1"
CornerRadius="4"
Padding="6"
Margin="0,0,0,4"
Padding="5"
Margin="0,0,0,3"
Width="Auto"
MouseRightButtonDown="DeckCard_RightClick">
<Grid>
@@ -239,21 +302,21 @@
<StackPanel Grid.Column="0">
<TextBlock Text="{Binding Name}"
Foreground="White"
FontSize="10"
FontSize="9"
FontWeight="Bold"/>
<TextBlock Text="{Binding Element}"
Foreground="{StaticResource TextSecondaryBrush}"
FontSize="8"/>
FontSize="7"/>
</StackPanel>
<Border Grid.Column="1"
Background="{StaticResource ManaBrush}"
CornerRadius="4"
Padding="4,2"
CornerRadius="3"
Padding="3,1"
VerticalAlignment="Center">
<TextBlock Text="{Binding ManaCost}"
Foreground="White"
FontSize="9"/>
FontSize="8"/>
</Border>
</Grid>
</Border>
@@ -263,17 +326,17 @@
</ScrollViewer>
<TextBlock Grid.Row="3"
Text="Drag cards here to add to deck"
Text="Drag cards here to add"
Foreground="{StaticResource TextSecondaryBrush}"
FontSize="12"
FontSize="11"
FontStyle="Italic"
Visibility="{Binding PlayerDeckCards.Count, Converter={StaticResource NullToVisibilityConverter}, ConverterParameter=Inverse}"
Margin="0,10,0,0"/>
Margin="0,10,0,0"
HorizontalAlignment="Center"/>
</Grid>
</Border>
</Grid>
<!-- Bottom Navigation -->
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,20,0,0">
<Button Content="Back to Deck Selection"
Style="{StaticResource BaseButtonStyle}"
@@ -283,4 +346,4 @@
Margin="0,0,20,0"/>
</StackPanel>
</Grid>
</UserControl>
</UserControl>
+9
View File
@@ -18,6 +18,15 @@ public partial class DeckBuilderView : UserControl
private void Card_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
_startPoint = e.GetPosition(null);
// Set SelectedCard for preview
if (sender is Border border && border.DataContext is CardViewModel card)
{
if (DataContext is MainViewModel vm)
{
vm.SelectedCard = card;
}
}
}
private void Card_MouseMove(object sender, MouseEventArgs e)
+108 -58
View File
@@ -26,6 +26,8 @@
<Converters:TypeToColorConverter x:Key="TypeToColorConverter"/>
<Converters:EffectTypeToIconConverter x:Key="EffectTypeToIconConverter"/>
<Converters:CardTypeToStatsVisibilityConverter x:Key="CardTypeToStatsVisibilityConverter"/>
<Converters:CardTypeToPowerVisibilityConverter x:Key="CardTypeToPowerVisibilityConverter"/>
<Converters:CardTypeToHealthVisibilityConverter x:Key="CardTypeToHealthVisibilityConverter"/>
<Converters:IntToVisibilityConverter x:Key="IntToVisibilityConverter"/>
<Converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<Converters:RarityToGradientConverter x:Key="RarityToGradientConverter"/>
@@ -94,23 +96,61 @@
<TextBlock Text=" | Mana: " Foreground="{StaticResource ManaBrush}" FontSize="12" Margin="15,0,0,0"/>
<TextBlock Text="{Binding PlayerMana}" Foreground="{StaticResource ManaBrush}" FontSize="12" FontWeight="Bold"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Border Background="#2A1A1A" BorderBrush="#4A2A2A" BorderThickness="1" CornerRadius="3" Width="32" Height="44" Margin="2">
<TextBlock Text="?" Foreground="#505050" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="Bold"/>
</Border>
<Border Background="#2A1A1A" BorderBrush="#4A2A2A" BorderThickness="1" CornerRadius="3" Width="32" Height="44" Margin="2">
<TextBlock Text="?" Foreground="#505050" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="Bold"/>
</Border>
<Border Background="#2A1A1A" BorderBrush="#4A2A2A" BorderThickness="1" CornerRadius="3" Width="32" Height="44" Margin="2">
<TextBlock Text="?" Foreground="#505050" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="Bold"/>
</Border>
<Border Background="#2A1A1A" BorderBrush="#4A2A2A" BorderThickness="1" CornerRadius="3" Width="32" Height="44" Margin="2">
<TextBlock Text="?" Foreground="#505050" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="Bold"/>
</Border>
<Border Background="#2A1A1A" BorderBrush="#4A2A2A" BorderThickness="1" CornerRadius="3" Width="32" Height="44" Margin="2">
<TextBlock Text="?" Foreground="#505050" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="16" FontWeight="Bold"/>
</Border>
</StackPanel>
<!-- Show opponent hand cards if visible (Jar of Eyes), otherwise show hidden cards -->
<ItemsControl ItemsSource="{Binding OpponentHand}" Visibility="{Binding OpponentHandVisible, Converter={StaticResource BoolToVisibilityConverter}, FallbackValue=Collapsed}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="#464636" BorderBrush="#506046" BorderThickness="2" CornerRadius="3" Width="80" Height="110" Margin="2">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Foreground="White" FontSize="9" FontWeight="Bold" TextTrimming="CharacterEllipsis" MaxWidth="60"/>
<Border Background="{StaticResource ManaBrush}" CornerRadius="3" Padding="3,1" Margin="4,0,0,0">
<TextBlock Text="{Binding ManaCost}" Foreground="White" FontSize="8" FontWeight="Bold"/>
</Border>
</StackPanel>
<Border Grid.Row="1" Background="{Binding Element, Converter={StaticResource ElementToColorConverter}}" Margin="2,4" CornerRadius="2">
<TextBlock Text="{Binding Type}" Foreground="#80FFFFFF" FontSize="8" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<StackPanel Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="P:" Foreground="{StaticResource DangerBrush}" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Power}" Foreground="{StaticResource DangerBrush}" FontSize="9" FontWeight="Bold" Margin="2,0,8,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="{StaticResource HealthBrush}" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Health}" Foreground="{StaticResource HealthBrush}" FontSize="9" FontWeight="Bold" Margin="2,0,0,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<!-- Show hidden cards when opponent hand is not visible - dynamic count based on OpponentHand -->
<ItemsControl ItemsSource="{Binding OpponentHand}" Visibility="{Binding OpponentHandVisible, Converter={StaticResource InverseBoolToVisibilityConverter}, FallbackValue=Visible}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="#2A1A1A" BorderBrush="#4A2A2A" BorderThickness="1" CornerRadius="3" Width="80" Height="110" Margin="2">
<TextBlock Text="?" Foreground="#505050" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24" FontWeight="Bold"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
<!-- Opponent Equipment (25%) -->
@@ -125,10 +165,10 @@
<TextBlock Text="{Binding OpponentEventSlot.Name, FallbackValue=Event}" Foreground="White" HorizontalAlignment="Center" FontSize="7" FontWeight="Bold" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="54"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,3">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="8" FontWeight="Bold"/>
<TextBlock Text="{Binding OpponentEventSlot.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="8" FontWeight="Bold" Margin="1,0,3,0"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="8" FontWeight="Bold"/>
<TextBlock Text="{Binding OpponentEventSlot.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="8" FontWeight="Bold"/>
<TextBlock Text="P:" Foreground="#FF6464" FontSize="8" FontWeight="Bold" Visibility="{Binding OpponentEventSlot.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding OpponentEventSlot.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="8" FontWeight="Bold" Margin="1,0,3,0" Visibility="{Binding OpponentEventSlot.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="8" FontWeight="Bold" Visibility="{Binding OpponentEventSlot.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding OpponentEventSlot.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="8" FontWeight="Bold" Visibility="{Binding OpponentEventSlot.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
@@ -141,10 +181,10 @@
<TextBlock Text="{Binding OpponentWeapon.Name, FallbackValue=Weapon}" Foreground="White" HorizontalAlignment="Center" FontSize="7" FontWeight="Bold" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="54"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,3">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="8" FontWeight="Bold"/>
<TextBlock Text="{Binding OpponentWeapon.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="8" FontWeight="Bold" Margin="1,0,3,0"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="8" FontWeight="Bold"/>
<TextBlock Text="{Binding OpponentWeapon.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="8" FontWeight="Bold"/>
<TextBlock Text="P:" Foreground="#FF6464" FontSize="8" FontWeight="Bold" Visibility="{Binding OpponentWeapon.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding OpponentWeapon.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="8" FontWeight="Bold" Margin="1,0,3,0" Visibility="{Binding OpponentWeapon.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="8" FontWeight="Bold" Visibility="{Binding OpponentWeapon.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding OpponentWeapon.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="8" FontWeight="Bold" Visibility="{Binding OpponentWeapon.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
@@ -157,10 +197,10 @@
<TextBlock Text="{Binding OpponentArmor.Name, FallbackValue=Armor}" Foreground="White" HorizontalAlignment="Center" FontSize="7" FontWeight="Bold" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="54"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,3">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="8" FontWeight="Bold"/>
<TextBlock Text="{Binding OpponentArmor.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="8" FontWeight="Bold" Margin="1,0,3,0"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="8" FontWeight="Bold"/>
<TextBlock Text="{Binding OpponentArmor.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="8" FontWeight="Bold"/>
<TextBlock Text="P:" Foreground="#FF6464" FontSize="8" FontWeight="Bold" Visibility="{Binding OpponentArmor.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding OpponentArmor.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="8" FontWeight="Bold" Margin="1,0,3,0" Visibility="{Binding OpponentArmor.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="8" FontWeight="Bold" Visibility="{Binding OpponentArmor.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding OpponentArmor.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="8" FontWeight="Bold" Visibility="{Binding OpponentArmor.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
@@ -247,12 +287,15 @@
Visibility="{Binding IsCombinable, Converter={StaticResource BoolToVisibilityConverter}, FallbackValue=Collapsed}">
<TextBlock Text="C" Foreground="#64FF64" FontSize="7" FontWeight="Bold"/>
</Border>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,4"
Visibility="{Binding Type, Converter={StaticResource CardTypeToStatsVisibilityConverter}, FallbackValue=Collapsed}">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="9" FontWeight="Bold"/>
<TextBlock Text="{Binding Power, FallbackValue=0}" Foreground="#FF6464" FontSize="9" FontWeight="Bold" Margin="2,0,5,0"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="9" FontWeight="Bold"/>
<TextBlock Text="{Binding Health, FallbackValue=0}" Foreground="#64FF64" FontSize="9" FontWeight="Bold"/>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,4">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Power, FallbackValue=0}" Foreground="#FF6464" FontSize="9" FontWeight="Bold" Margin="2,0,5,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Health, FallbackValue=0}" Foreground="#64FF64" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
@@ -310,12 +353,15 @@
Visibility="{Binding IsCombinable, Converter={StaticResource BoolToVisibilityConverter}, FallbackValue=Collapsed}">
<TextBlock Text="C" Foreground="#64FF64" FontSize="7" FontWeight="Bold"/>
</Border>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,4"
Visibility="{Binding Type, Converter={StaticResource CardTypeToStatsVisibilityConverter}, FallbackValue=Collapsed}">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="9" FontWeight="Bold"/>
<TextBlock Text="{Binding Power, FallbackValue=0}" Foreground="#FF6464" FontSize="9" FontWeight="Bold" Margin="2,0,5,0"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="9" FontWeight="Bold"/>
<TextBlock Text="{Binding Health, FallbackValue=0}" Foreground="#64FF64" FontSize="9" FontWeight="Bold"/>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,4">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Power, FallbackValue=0}" Foreground="#FF6464" FontSize="9" FontWeight="Bold" Margin="2,0,5,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Health, FallbackValue=0}" Foreground="#64FF64" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
@@ -333,7 +379,7 @@
<Border Background="{Binding Element, Converter={StaticResource ElementToColorConverter}, FallbackValue=#C8C864}"
BorderBrush="#D4D474" BorderThickness="2" Margin="3" CornerRadius="5" Width="80" Height="70"
Tag="{Binding}" AllowDrop="True" Drop="OnArtifactSlotDrop" DragEnter="OnArtifactSlotDragEnter" DragOver="OnArtifactSlotDragOver" DragLeave="OnArtifactSlotDragLeave" MouseMove="OnArtifactSlotMouseMove"
MouseRightButtonDown="OnFieldCardRightClick">
MouseRightButtonDown="OnFieldCardRightClick" MouseLeftButtonDown="OnArtifactSlotLeftClick">
<Grid>
<StackPanel VerticalAlignment="Top" HorizontalAlignment="Center" Margin="0,3,0,0">
<TextBlock Text="{Binding Name, FallbackValue=Artifact}" Foreground="White" HorizontalAlignment="Center" FontSize="8" FontWeight="Bold" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="72"/>
@@ -422,10 +468,14 @@
<TextBlock Text="Combinable" Foreground="#64FF64" FontSize="6" FontWeight="Bold"/>
</Border>
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center">
<TextBlock Text="P:" Foreground="{StaticResource DangerBrush}" FontSize="9" FontWeight="Bold"/>
<TextBlock Text="{Binding Power}" Foreground="{StaticResource DangerBrush}" FontSize="9" FontWeight="Bold" Margin="2,0,8,0"/>
<TextBlock Text="H:" Foreground="{StaticResource HealthBrush}" FontSize="9" FontWeight="Bold"/>
<TextBlock Text="{Binding Health}" Foreground="{StaticResource HealthBrush}" FontSize="9" FontWeight="Bold" Margin="2,0,0,0"/>
<TextBlock Text="P:" Foreground="{StaticResource DangerBrush}" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Power}" Foreground="{StaticResource DangerBrush}" FontSize="9" FontWeight="Bold" Margin="2,0,8,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="{StaticResource HealthBrush}" FontSize="9" FontWeight="Bold"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding Health}" Foreground="{StaticResource HealthBrush}" FontSize="9" FontWeight="Bold" Margin="2,0,0,0"
Visibility="{Binding Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
@@ -456,10 +506,10 @@
<TextBlock Text="{Binding PlayerWeapon.Name, FallbackValue=Weapon}" Foreground="White" HorizontalAlignment="Center" FontSize="6" FontWeight="Bold" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="48"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,2">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="7" FontWeight="Bold"/>
<TextBlock Text="{Binding PlayerWeapon.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="7" FontWeight="Bold" Margin="1,0,2,0"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="7" FontWeight="Bold"/>
<TextBlock Text="{Binding PlayerWeapon.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="7" FontWeight="Bold"/>
<TextBlock Text="P:" Foreground="#FF6464" FontSize="7" FontWeight="Bold" Visibility="{Binding PlayerWeapon.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding PlayerWeapon.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="7" FontWeight="Bold" Margin="1,0,2,0" Visibility="{Binding PlayerWeapon.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="7" FontWeight="Bold" Visibility="{Binding PlayerWeapon.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding PlayerWeapon.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="7" FontWeight="Bold" Visibility="{Binding PlayerWeapon.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
@@ -474,10 +524,10 @@
<TextBlock Text="{Binding PlayerArmor.Name, FallbackValue=Armor}" Foreground="White" HorizontalAlignment="Center" FontSize="6" FontWeight="Bold" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="48"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,2">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="7" FontWeight="Bold"/>
<TextBlock Text="{Binding PlayerArmor.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="7" FontWeight="Bold" Margin="1,0,2,0"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="7" FontWeight="Bold"/>
<TextBlock Text="{Binding PlayerArmor.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="7" FontWeight="Bold"/>
<TextBlock Text="P:" Foreground="#FF6464" FontSize="7" FontWeight="Bold" Visibility="{Binding PlayerArmor.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding PlayerArmor.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="7" FontWeight="Bold" Margin="1,0,2,0" Visibility="{Binding PlayerArmor.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="7" FontWeight="Bold" Visibility="{Binding PlayerArmor.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding PlayerArmor.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="7" FontWeight="Bold" Visibility="{Binding PlayerArmor.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
@@ -492,10 +542,10 @@
<TextBlock Text="{Binding PlayerEventSlot.Name, FallbackValue=Event}" Foreground="White" HorizontalAlignment="Center" FontSize="6" FontWeight="Bold" TextWrapping="Wrap" TextAlignment="Center" MaxWidth="48"/>
</StackPanel>
<StackPanel Orientation="Horizontal" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="0,0,0,2">
<TextBlock Text="P:" Foreground="#FF6464" FontSize="7" FontWeight="Bold"/>
<TextBlock Text="{Binding PlayerEventSlot.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="7" FontWeight="Bold" Margin="1,0,2,0"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="7" FontWeight="Bold"/>
<TextBlock Text="{Binding PlayerEventSlot.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="7" FontWeight="Bold"/>
<TextBlock Text="P:" Foreground="#FF6464" FontSize="7" FontWeight="Bold" Visibility="{Binding PlayerEventSlot.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding PlayerEventSlot.Power, FallbackValue=0}" Foreground="#FF6464" FontSize="7" FontWeight="Bold" Margin="1,0,2,0" Visibility="{Binding PlayerEventSlot.Type, Converter={StaticResource CardTypeToPowerVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="H:" Foreground="#64FF64" FontSize="7" FontWeight="Bold" Visibility="{Binding PlayerEventSlot.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
<TextBlock Text="{Binding PlayerEventSlot.Health, FallbackValue=0}" Foreground="#64FF64" FontSize="7" FontWeight="Bold" Visibility="{Binding PlayerEventSlot.Type, Converter={StaticResource CardTypeToHealthVisibilityConverter}, FallbackValue=Collapsed}"/>
</StackPanel>
</Grid>
</Border>
+52
View File
@@ -832,6 +832,58 @@ public partial class GameView : UserControl
}
}
/// <summary>
/// Handle left-click on artifact to activate ability
/// </summary>
private void OnArtifactSlotLeftClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
if (sender is Border cardBorder)
{
// Check if there's a card in the slot
if (!(cardBorder.Tag is CardViewModel card))
{
e.Handled = true;
return;
}
LogToFile($"[OnArtifactSlotLeftClick] Card: {card.Name}, Abilities: {card.Abilities.Count}");
// If we're in ability targeting mode, this card is the target
if (ViewModel?.IsSelectingTarget == true)
{
ViewModel.ExecuteAbilityOnTarget(card);
e.Handled = true;
return;
}
// If card has abilities, activate the first one (for artifacts with abilities like Brain Altering Powder)
if (card.Abilities != null && card.Abilities.Count > 0)
{
// Log what abilities exist for debugging
foreach (var ab in card.Abilities)
{
LogToFile($"[OnArtifactSlotLeftClick] Found ability: {ab.Name}, IsPassive: {ab.IsPassive}");
}
// For artifacts, try to find a non-passive ability; if none exist, use first ability
var ability = card.Abilities.FirstOrDefault(a => !a.IsPassive) ?? card.Abilities.FirstOrDefault();
if (ability != null)
{
LogToFile($"[OnArtifactSlotLeftClick] Starting ability: {ability.Name}, RequiresTarget: {ability.RequiresTarget}");
ViewModel?.StartAbilityTargeting(ability, card);
e.Handled = true;
return;
}
}
else
{
LogToFile($"[OnArtifactSlotLeftClick] No abilities found");
}
e.Handled = true;
}
}
// ========== Manual Card Zoom Control ==========
private void ShowCardZoom()
{
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -1,4 +1,4 @@
#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "0232A20A20818401E84473B25100BDA56E8685EB"
#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "27906BD54C38361C1D91BB5CB1F99229832EA1AC"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
@@ -1,4 +1,4 @@
#pragma checksum "..\..\..\..\Controls\CardZoomOverlay.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "0E6A397C04B5C53223C4A176405D816B59C70434"
#pragma checksum "..\..\..\..\Controls\CardZoomOverlay.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "27DC37E737EB481D28317C77DF40C8FAF823747A"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
@@ -86,13 +86,13 @@ namespace NewGame.UI.Controls {
return;
case 2:
#line 31 "..\..\..\..\Controls\CardZoomOverlay.xaml"
#line 33 "..\..\..\..\Controls\CardZoomOverlay.xaml"
((System.Windows.Controls.Border)(target)).MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnOverlayBackgroundClick);
#line default
#line hidden
#line 32 "..\..\..\..\Controls\CardZoomOverlay.xaml"
#line 34 "..\..\..\..\Controls\CardZoomOverlay.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnOverlayRightClick);
#line default
@@ -100,7 +100,7 @@ namespace NewGame.UI.Controls {
return;
case 3:
#line 99 "..\..\..\..\Controls\CardZoomOverlay.xaml"
#line 101 "..\..\..\..\Controls\CardZoomOverlay.xaml"
((System.Windows.Controls.Button)(target)).Click += new System.Windows.RoutedEventHandler(this.OnCloseClick);
#line default
@@ -1,61 +1,2 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace XamlGeneratedNamespace {
/// <summary>
/// GeneratedInternalTypeHelper
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "9.0.14.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
public sealed class GeneratedInternalTypeHelper : System.Windows.Markup.InternalTypeHelper {
/// <summary>
/// CreateInstance
/// </summary>
protected override object CreateInstance(System.Type type, System.Globalization.CultureInfo culture) {
return System.Activator.CreateInstance(type, ((System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic)
| (System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.CreateInstance)), null, null, culture);
}
/// <summary>
/// GetPropertyValue
/// </summary>
protected override object GetPropertyValue(System.Reflection.PropertyInfo propertyInfo, object target, System.Globalization.CultureInfo culture) {
return propertyInfo.GetValue(target, System.Reflection.BindingFlags.Default, null, null, culture);
}
/// <summary>
/// SetPropertyValue
/// </summary>
protected override void SetPropertyValue(System.Reflection.PropertyInfo propertyInfo, object target, object value, System.Globalization.CultureInfo culture) {
propertyInfo.SetValue(target, value, System.Reflection.BindingFlags.Default, null, null, culture);
}
/// <summary>
/// CreateDelegate
/// </summary>
protected override System.Delegate CreateDelegate(System.Type delegateType, object target, string handler) {
return ((System.Delegate)(target.GetType().InvokeMember("_CreateDelegate", (System.Reflection.BindingFlags.InvokeMethod
| (System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)), null, target, new object[] {
delegateType,
handler}, null)));
}
/// <summary>
/// AddEventHandler
/// </summary>
protected override void AddEventHandler(System.Reflection.EventInfo eventInfo, object target, System.Delegate handler) {
eventInfo.AddEventHandler(target, handler);
}
}
}
Binary file not shown.
@@ -1,4 +1,4 @@
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "E1AFB6B5B5AB47142E032927FCE6802F5BF7CF98"
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "1E2C908F7FD0A323685CD52A78A3CC3644446692"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
@@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("NewGame.UI")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+99b1eb3a438c388c3d1091642c0835b917836df6")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3105cd92f05a4d4cdc94569f6b2773f383760a27")]
[assembly: System.Reflection.AssemblyProductAttribute("NewGame.UI")]
[assembly: System.Reflection.AssemblyTitleAttribute("NewGame.UI")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
@@ -1 +1 @@
66a793cccfc3075cca05f37069a4f49613783f80fc771e5bd5cdbbae0f1a5413
a65bd18b65c8d76627f7ee09f1b86dc6b564aa361109c19e8f02e24a73b0444e
@@ -3,12 +3,43 @@ C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\bin\Debug\net9.0-windows\NewGame.
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\bin\Debug\net9.0-windows\NewGame.UI.runtimeconfig.json
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\bin\Debug\net9.0-windows\NewGame.UI.dll
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\bin\Debug\net9.0-windows\NewGame.UI.pdb
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\bin\Debug\net9.0-windows\MagicalDeckbuilder.Shared.dll
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\bin\Debug\net9.0-windows\MagicalDeckbuilder.Shared.pdb
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\NewGame.UI.csproj.AssemblyReference.cache
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Styles\BaseStyles.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckNameDialog.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\ErrorWindow.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GameEndWindow.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\SettingsView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\UnsavedChangesDialog.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Controls\CardZoomOverlay.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\MainWindow.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\BattleSelectView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\BrowserView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckBuilderView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckNameDialog.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckSelectionView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\ErrorWindow.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GalleryView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GameEndWindow.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GameView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\MenuView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\SettingsView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\UnsavedChangesDialog.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\App.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\GeneratedInternalTypeHelper.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\NewGame.UI_MarkupCompile.cache
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\NewGame.UI_MarkupCompile.lref
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\App.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Controls\CardZoomOverlay.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\MainWindow.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\BattleSelectView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\BrowserView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckBuilderView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckSelectionView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GalleryView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GameView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\MenuView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\NewGame.UI.g.resources
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\NewGame.UI.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\NewGame.UI.AssemblyInfoInputs.cache
@@ -21,34 +52,3 @@ C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\refint\N
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\NewGame.UI.pdb
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\NewGame.UI.genruntimeconfig.cache
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\ref\NewGame.UI.dll
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Styles\BaseStyles.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\GeneratedInternalTypeHelper.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\BrowserView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckBuilderView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GalleryView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\MenuView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GameView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\App.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\BrowserView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckBuilderView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GalleryView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GameView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\MenuView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\bin\Debug\net9.0-windows\MagicalDeckbuilder.Shared.dll
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\bin\Debug\net9.0-windows\MagicalDeckbuilder.Shared.pdb
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\BattleSelectView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\BattleSelectView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Controls\CardZoomOverlay.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Controls\CardZoomOverlay.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\ErrorWindow.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\ErrorWindow.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckSelectionView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\UnsavedChangesDialog.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\UnsavedChangesDialog.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckSelectionView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckNameDialog.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\DeckNameDialog.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\SettingsView.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\SettingsView.g.cs
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GameEndWindow.baml
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\Views\GameEndWindow.g.cs
Binary file not shown.
Binary file not shown.
@@ -1 +1 @@
{"documents":{"C:\\Users\\atw61\\OneDrive\\Desktop\\new\\*":"https://raw.githubusercontent.com/alexandria121/new/99b1eb3a438c388c3d1091642c0835b917836df6/*"}}
{"documents":{"C:\\Users\\atw61\\OneDrive\\Desktop\\new\\*":"https://raw.githubusercontent.com/alexandria121/new/3105cd92f05a4d4cdc94569f6b2773f383760a27/*"}}
@@ -1,4 +1,4 @@
C:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\obj\Debug\net9.0-windows\GeneratedInternalTypeHelper.g.cs
FC:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\App.xaml;;
FC:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\Controls\CardZoomOverlay.xaml;;
FC:\Users\atw61\OneDrive\Desktop\new\NewGame.UI\MainWindow.xaml;;
@@ -1,4 +1,4 @@
#pragma checksum "..\..\..\..\Views\DeckBuilderView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "32E0E6C76F273EF0E6A7E90EB95165F39297B03C"
#pragma checksum "..\..\..\..\Views\DeckBuilderView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "5973C5A6558CB8EDB97951FFFEF36F8E978EB512"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
@@ -73,13 +73,13 @@ namespace NewGame.UI.Views {
{
case 2:
#line 199 "..\..\..\..\Views\DeckBuilderView.xaml"
#line 262 "..\..\..\..\Views\DeckBuilderView.xaml"
((System.Windows.Controls.Border)(target)).Drop += new System.Windows.DragEventHandler(this.Deck_Drop);
#line default
#line hidden
#line 200 "..\..\..\..\Views\DeckBuilderView.xaml"
#line 263 "..\..\..\..\Views\DeckBuilderView.xaml"
((System.Windows.Controls.Border)(target)).DragOver += new System.Windows.DragEventHandler(this.Deck_DragOver);
#line default
@@ -100,13 +100,13 @@ namespace NewGame.UI.Views {
{
case 1:
#line 94 "..\..\..\..\Views\DeckBuilderView.xaml"
#line 89 "..\..\..\..\Views\DeckBuilderView.xaml"
((System.Windows.Controls.Border)(target)).MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.Card_MouseLeftButtonDown);
#line default
#line hidden
#line 95 "..\..\..\..\Views\DeckBuilderView.xaml"
#line 90 "..\..\..\..\Views\DeckBuilderView.xaml"
((System.Windows.Controls.Border)(target)).MouseMove += new System.Windows.Input.MouseEventHandler(this.Card_MouseMove);
#line default
@@ -114,7 +114,7 @@ namespace NewGame.UI.Views {
break;
case 3:
#line 232 "..\..\..\..\Views\DeckBuilderView.xaml"
#line 295 "..\..\..\..\Views\DeckBuilderView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.DeckCard_RightClick);
#line default
@@ -1,4 +1,4 @@
#pragma checksum "..\..\..\..\Views\GameView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "355E3E018E0F8E18B3685783C270C4C5D710F728"
#pragma checksum "..\..\..\..\Views\GameView.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "095B6BF013873348F0CA4ADB1ABCFB27B9125A84"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
@@ -43,7 +43,7 @@ namespace NewGame.UI.Views {
public partial class GameView : System.Windows.Controls.UserControl, System.Windows.Markup.IComponentConnector, System.Windows.Markup.IStyleConnector {
#line 518 "..\..\..\..\Views\GameView.xaml"
#line 568 "..\..\..\..\Views\GameView.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Border ComboSlot1;
@@ -51,7 +51,7 @@ namespace NewGame.UI.Views {
#line hidden
#line 532 "..\..\..\..\Views\GameView.xaml"
#line 582 "..\..\..\..\Views\GameView.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal System.Windows.Controls.Border ComboSlot2;
@@ -59,7 +59,7 @@ namespace NewGame.UI.Views {
#line hidden
#line 569 "..\..\..\..\Views\GameView.xaml"
#line 619 "..\..\..\..\Views\GameView.xaml"
[System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
internal NewGame.UI.Controls.CardZoomOverlay CardZoomPopup;
@@ -125,25 +125,25 @@ namespace NewGame.UI.Views {
return;
case 2:
#line 121 "..\..\..\..\Views\GameView.xaml"
#line 161 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnEquipmentRightClick);
#line default
#line hidden
#line 122 "..\..\..\..\Views\GameView.xaml"
#line 162 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).Drop += new System.Windows.DragEventHandler(this.OnOpponentEventSlotDrop);
#line default
#line hidden
#line 122 "..\..\..\..\Views\GameView.xaml"
#line 162 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragEnter += new System.Windows.DragEventHandler(this.OnOpponentEventSlotDragEnter);
#line default
#line hidden
#line 122 "..\..\..\..\Views\GameView.xaml"
#line 162 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragLeave += new System.Windows.DragEventHandler(this.OnOpponentEventSlotDragLeave);
#line default
@@ -151,7 +151,7 @@ namespace NewGame.UI.Views {
return;
case 3:
#line 138 "..\..\..\..\Views\GameView.xaml"
#line 178 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnEquipmentRightClick);
#line default
@@ -159,7 +159,7 @@ namespace NewGame.UI.Views {
return;
case 4:
#line 154 "..\..\..\..\Views\GameView.xaml"
#line 194 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnEquipmentRightClick);
#line default
@@ -167,25 +167,25 @@ namespace NewGame.UI.Views {
return;
case 10:
#line 452 "..\..\..\..\Views\GameView.xaml"
#line 502 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnEquipmentRightClick);
#line default
#line hidden
#line 453 "..\..\..\..\Views\GameView.xaml"
#line 503 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).Drop += new System.Windows.DragEventHandler(this.OnWeaponSlotDrop);
#line default
#line hidden
#line 453 "..\..\..\..\Views\GameView.xaml"
#line 503 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragEnter += new System.Windows.DragEventHandler(this.OnWeaponSlotDragEnter);
#line default
#line hidden
#line 453 "..\..\..\..\Views\GameView.xaml"
#line 503 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragLeave += new System.Windows.DragEventHandler(this.OnWeaponSlotDragLeave);
#line default
@@ -193,25 +193,25 @@ namespace NewGame.UI.Views {
return;
case 11:
#line 470 "..\..\..\..\Views\GameView.xaml"
#line 520 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnEquipmentRightClick);
#line default
#line hidden
#line 471 "..\..\..\..\Views\GameView.xaml"
#line 521 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).Drop += new System.Windows.DragEventHandler(this.OnArmorSlotDrop);
#line default
#line hidden
#line 471 "..\..\..\..\Views\GameView.xaml"
#line 521 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragEnter += new System.Windows.DragEventHandler(this.OnArmorSlotDragEnter);
#line default
#line hidden
#line 471 "..\..\..\..\Views\GameView.xaml"
#line 521 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragLeave += new System.Windows.DragEventHandler(this.OnArmorSlotDragLeave);
#line default
@@ -219,25 +219,25 @@ namespace NewGame.UI.Views {
return;
case 12:
#line 488 "..\..\..\..\Views\GameView.xaml"
#line 538 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnEquipmentRightClick);
#line default
#line hidden
#line 489 "..\..\..\..\Views\GameView.xaml"
#line 539 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).Drop += new System.Windows.DragEventHandler(this.OnEventSlotDrop);
#line default
#line hidden
#line 489 "..\..\..\..\Views\GameView.xaml"
#line 539 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragEnter += new System.Windows.DragEventHandler(this.OnEventSlotDragEnter);
#line default
#line hidden
#line 489 "..\..\..\..\Views\GameView.xaml"
#line 539 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragLeave += new System.Windows.DragEventHandler(this.OnEventSlotDragLeave);
#line default
@@ -246,25 +246,25 @@ namespace NewGame.UI.Views {
case 13:
this.ComboSlot1 = ((System.Windows.Controls.Border)(target));
#line 519 "..\..\..\..\Views\GameView.xaml"
#line 569 "..\..\..\..\Views\GameView.xaml"
this.ComboSlot1.Drop += new System.Windows.DragEventHandler(this.OnComboSlot1Drop);
#line default
#line hidden
#line 519 "..\..\..\..\Views\GameView.xaml"
#line 569 "..\..\..\..\Views\GameView.xaml"
this.ComboSlot1.DragEnter += new System.Windows.DragEventHandler(this.OnComboSlotDragEnter);
#line default
#line hidden
#line 519 "..\..\..\..\Views\GameView.xaml"
#line 569 "..\..\..\..\Views\GameView.xaml"
this.ComboSlot1.DragLeave += new System.Windows.DragEventHandler(this.OnComboSlotDragLeave);
#line default
#line hidden
#line 519 "..\..\..\..\Views\GameView.xaml"
#line 569 "..\..\..\..\Views\GameView.xaml"
this.ComboSlot1.MouseMove += new System.Windows.Input.MouseEventHandler(this.OnComboSlotMouseMove);
#line default
@@ -273,25 +273,25 @@ namespace NewGame.UI.Views {
case 14:
this.ComboSlot2 = ((System.Windows.Controls.Border)(target));
#line 533 "..\..\..\..\Views\GameView.xaml"
#line 583 "..\..\..\..\Views\GameView.xaml"
this.ComboSlot2.Drop += new System.Windows.DragEventHandler(this.OnComboSlot2Drop);
#line default
#line hidden
#line 533 "..\..\..\..\Views\GameView.xaml"
#line 583 "..\..\..\..\Views\GameView.xaml"
this.ComboSlot2.DragEnter += new System.Windows.DragEventHandler(this.OnComboSlotDragEnter);
#line default
#line hidden
#line 533 "..\..\..\..\Views\GameView.xaml"
#line 583 "..\..\..\..\Views\GameView.xaml"
this.ComboSlot2.DragLeave += new System.Windows.DragEventHandler(this.OnComboSlotDragLeave);
#line default
#line hidden
#line 533 "..\..\..\..\Views\GameView.xaml"
#line 583 "..\..\..\..\Views\GameView.xaml"
this.ComboSlot2.MouseMove += new System.Windows.Input.MouseEventHandler(this.OnComboSlotMouseMove);
#line default
@@ -299,19 +299,19 @@ namespace NewGame.UI.Views {
return;
case 15:
#line 550 "..\..\..\..\Views\GameView.xaml"
#line 600 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).Drop += new System.Windows.DragEventHandler(this.OnComboResultDrop);
#line default
#line hidden
#line 550 "..\..\..\..\Views\GameView.xaml"
#line 600 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragEnter += new System.Windows.DragEventHandler(this.OnComboResultDragEnter);
#line default
#line hidden
#line 550 "..\..\..\..\Views\GameView.xaml"
#line 600 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragLeave += new System.Windows.DragEventHandler(this.OnComboResultDragLeave);
#line default
@@ -335,13 +335,13 @@ namespace NewGame.UI.Views {
{
case 5:
#line 240 "..\..\..\..\Views\GameView.xaml"
#line 280 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnFieldCardRightClick);
#line default
#line hidden
#line 241 "..\..\..\..\Views\GameView.xaml"
#line 281 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnOpponentSlotLeftClick);
#line default
@@ -349,7 +349,7 @@ namespace NewGame.UI.Views {
break;
case 6:
#line 272 "..\..\..\..\Views\GameView.xaml"
#line 315 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnFieldCardRightClick);
#line default
@@ -357,37 +357,37 @@ namespace NewGame.UI.Views {
break;
case 7:
#line 302 "..\..\..\..\Views\GameView.xaml"
#line 345 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).Drop += new System.Windows.DragEventHandler(this.OnPlayerSlotDrop);
#line default
#line hidden
#line 302 "..\..\..\..\Views\GameView.xaml"
#line 345 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragEnter += new System.Windows.DragEventHandler(this.OnPlayerSlotDragEnter);
#line default
#line hidden
#line 302 "..\..\..\..\Views\GameView.xaml"
#line 345 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragLeave += new System.Windows.DragEventHandler(this.OnPlayerSlotDragLeave);
#line default
#line hidden
#line 302 "..\..\..\..\Views\GameView.xaml"
#line 345 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseMove += new System.Windows.Input.MouseEventHandler(this.OnPlayerSlotMouseMove);
#line default
#line hidden
#line 303 "..\..\..\..\Views\GameView.xaml"
#line 346 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnFieldCardRightClick);
#line default
#line hidden
#line 304 "..\..\..\..\Views\GameView.xaml"
#line 347 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnPlayerSlotLeftClick);
#line default
@@ -395,63 +395,69 @@ namespace NewGame.UI.Views {
break;
case 8:
#line 335 "..\..\..\..\Views\GameView.xaml"
#line 381 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).Drop += new System.Windows.DragEventHandler(this.OnArtifactSlotDrop);
#line default
#line hidden
#line 335 "..\..\..\..\Views\GameView.xaml"
#line 381 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragEnter += new System.Windows.DragEventHandler(this.OnArtifactSlotDragEnter);
#line default
#line hidden
#line 335 "..\..\..\..\Views\GameView.xaml"
#line 381 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragOver += new System.Windows.DragEventHandler(this.OnArtifactSlotDragOver);
#line default
#line hidden
#line 335 "..\..\..\..\Views\GameView.xaml"
#line 381 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).DragLeave += new System.Windows.DragEventHandler(this.OnArtifactSlotDragLeave);
#line default
#line hidden
#line 335 "..\..\..\..\Views\GameView.xaml"
#line 381 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseMove += new System.Windows.Input.MouseEventHandler(this.OnArtifactSlotMouseMove);
#line default
#line hidden
#line 336 "..\..\..\..\Views\GameView.xaml"
#line 382 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnFieldCardRightClick);
#line default
#line hidden
#line 382 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnArtifactSlotLeftClick);
#line default
#line hidden
break;
case 9:
#line 401 "..\..\..\..\Views\GameView.xaml"
#line 447 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnHandCardPreviewMouseLeftButtonDown);
#line default
#line hidden
#line 402 "..\..\..\..\Views\GameView.xaml"
#line 448 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseLeftButtonUp += new System.Windows.Input.MouseButtonEventHandler(this.OnHandCardPreviewMouseLeftButtonUp);
#line default
#line hidden
#line 403 "..\..\..\..\Views\GameView.xaml"
#line 449 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseMove += new System.Windows.Input.MouseEventHandler(this.OnHandCardPreviewMouseMove);
#line default
#line hidden
#line 404 "..\..\..\..\Views\GameView.xaml"
#line 450 "..\..\..\..\Views\GameView.xaml"
((System.Windows.Controls.Border)(target)).MouseRightButtonDown += new System.Windows.Input.MouseButtonEventHandler(this.OnHandCardRightClick);
#line default
Binary file not shown.