Beispiel #1
0
 float critPower   = 3f;   // times stronger
 IEnumerator DestroyBlock(SelectionControllerDidDestroyBlock onDestroy)
 {
     if (blockHealth == null)
     {
         Reset();
         yield break;
     }
     while (blockHealth.currentHealth > 0)
     {
         _isDestroyingBlck = true;
         if (currentPos == null || selectedPos == null || block == null || blockHealth == null || !currentPos.Equals(selectedPos))
         {
             Reset();
             yield break;
         }
         bool  crit = UnityEngine.Random.Range(0f, 100f) > (100 - critChance);
         float dmg  = crit ? damage * critPower : damage;
         DamagePopup.Create(selection.transform.position, dmg, crit, null);
         blockHealth.ModifyHealth(-dmg);
         yield return(new WaitForSeconds(attackSpeed));
     }
     if (onDestroy != null && block != null && currentPos != null && selectedPos != null && currentPos.Equals(selectedPos))
     {
         onDestroy.Invoke();
     }
     _isDestroyingBlck = false;
     Reset();
 }
Beispiel #2
0
 void StartDestroyingSelectedBlock(SelectionControllerDidDestroyBlock onDestroy)
 {
     if (selectedPos == null || block == null || blockHealth == null)
     {
         Reset();
         return;
     }
     else if (currentPos == null)
     {
         currentPos = selectedPos;
         startedAt  = DateTime.Now;
         blockHealth.SetCurrentHealth(Block.GetMaxHealth(block.Value));
         StartCoroutine(DestroyBlock(onDestroy));
     }
     else if (currentPos.Equals(selectedPos))
     {
         return;
     }
     else
     {
         currentPos = selectedPos;
         startedAt  = DateTime.Now;
         blockHealth.SetCurrentHealth(Block.GetMaxHealth(block.Value));
         StartCoroutine(DestroyBlock(onDestroy));
     }
 }