/// <summary> /// attack a target and do everything needed /// </summary> /// <param name="target"></param> bool Attack(Unit target) { if (AttackInfo.CanAttack(this, target)) { float dx = transform.position.x - target.transform.position.x; if (dx > 0) { FaceRight = false; } else if (dx < 0) { FaceRight = true; } Stats s = GetStatsAt(Tile, target); Stats es = target.GetStatsAt(target.Tile, this); float roll = UnityEngine.Random.Range(0f, 1f); DamageData dmgData = new DamageData(); dmgData.hitChance = s.HitVersus(es); dmgData.critChance = s.CritVersus(es); dmgData.hit = roll < dmgData.hitChance; //ModifiedStats.Hit-target.ModifiedStats.Dodge; dmgData.crit = roll < dmgData.critChance; //(ModifiedStats.crit - target.ModifiedStats.critDodge); dmgData.target = target; dmgData.source = this; attackData = dmgData; AttackModifiers(dmgData); // run the attack through modifiers AnimateAttack(); AddDamageData(dmgData); return(true); } return(false); }