public void UseSpell(SpellCard spell) { //Check if this card is available. If it can't be used, return if (!spell.CanUseCard()) { return; } CreatureCard targetCard = null; //Ray cast target Instance PhysicalAttribute targetInst = Setting.RayCastCard(spell.PhysicalCondition); if (targetInst) { if (targetInst.OriginCard is CreatureCard) { targetCard = (CreatureCard)targetInst.OriginCard; } } else { return; } //Based on Spell Card type, run it's spell to card. //How to build that logic? switch (spell.GetType) { //Modify Target Card stats case SpellType.Attack: targetCard.CreatureData.ModifyHealth = -(spell._HealthChange); break; case SpellType.Debuff: targetCard.CreatureData.ModifyAttack = -(spell._AttackChange); targetCard.CreatureData.ModifyHealth = -(spell._HealthChange); break; case SpellType.Buff: targetCard.CreatureData.ModifyAttack = spell._AttackChange; targetCard.CreatureData.ModifyHealth = spell._HealthChange; break; default: Debug.LogError("This Spell don't have any type"); break; } }