} //försöker kasta spellen public virtual bool AttackTarget() { if (!IsActive()) { return(false); } bool targetAlive = true; if (target == null || target.gameObject.activeSelf == false || !targetHealth.IsAlive()) { targetAlive = false; return(targetAlive); } AutoCastSpell(); //släng in lite spells oxå förfan! if (isPerformingAttack == true) //appliar skadan två gånger? varför?? { //float modTime = animationH[attackA[lastAttackAnimIndex].name].time / animationH[attackA[lastAttackAnimIndex].name].length; //denna blir felet //Debug.Log(animationH[attackA[lastAttackAnimIndex].name].time.ToString()); if (attack_applyDMG_Time <= (Time.time - attack_Timer_Begun)) //kolla ifall skadan ska applyas { // * 10 så den är i sekunder if (hasAppliedDamage == false) { if (attackSounds.Length > 0) { int randomSound = Random.Range(0, attackSounds.Length); audioSource.PlayOneShot(attackSounds[randomSound]); } hasAppliedDamage = true; int damageRoll = RollDamage(); unitSpellHandler.RegisterAttack(); if (targetHealth.AddHealth(-damageRoll, damageType)) //target överlevde attacken { targetAlive = true; } else //target dog { targetAlive = false; } AddFatigue(-attackFatigueCost); } if (targetBase != null) { targetBase.Attacked(thisTransform); //notera att jag attackerat honom! } } if (hasAppliedDamage == true) //kolla ifall animationen nästan är klar och så att den har gjort skada { //Debug.Log(animationH[attackA[lastAttackAnimIndex].name].time.ToString()); isPerformingAttack = false; //jag vill inte snubben ska missa damage för att denne är för långsam med sin animation } } bool isFacingTarget = IsFacingTransform(target); if (attackRange > (targetDistance - targetHealth.unitSize) && isFacingTarget && isPerformingAttack == false) //kolla så att target står framför mig oxå { if (attackSpeedTimer <= Time.time) { isPerformingAttack = true; //påbörja attacken hasAppliedDamage = false; lastAttackAnimIndex = Random.Range(0, attackA.Length); //animationH[attackA[lastAttackAnimIndex].name].layer = 1; //animationH[attackA[lastAttackAnimIndex].name].weight = 1; animationH[attackA[lastAttackAnimIndex].name].time = 0.0f; animationH.Play(attackA[lastAttackAnimIndex].name); attackSpeedTimer = attackSpeed + Time.time; attack_Timer_Begun = Time.time; } } if (attackRange * 0.8f < (targetDistance - targetHealth.unitSize)) //marginal med jue { SetDestination(target.position); } else if (!isFacingTarget) { RotateTowards(target); ResetPath(); } else { ResetPath(); } return(targetAlive); }