/// <summary>
 /// Moves the character.
 /// </summary>
 override public void DoMove()
 {
     if (waitingToJump)
     {
         if (bobbleHeight > 0)
         {
             character.DefaultAirMovement.DoOverridenJump(bobbleHeight, 1);
         }
         if (enemyHurtBox != null && enemyHurtBox is EnemyHurtBox)
         {
             damageInfo.Direction = transform.position - ((EnemyHurtBox)enemyHurtBox).transform.position;
             enemyHurtBox.Damage(damageInfo);
         }
         waitingToJump = false;
     }
     else if (waitingToKick)
     {
         if (enemyHurtBox != null && enemyHurtBox is EnemyHurtBox)
         {
             damageInfo.Direction = transform.position - ((EnemyHurtBox)enemyHurtBox).transform.position;
             enemyHurtBox.Damage(damageInfo);
         }
         waitingToKick      = false;
         kickAnimationTimer = kickTime;
     }
 }
 /// <summary>
 /// Do the actual hit.
 /// </summary>
 /// <param name="other">Other.</param>
 override protected bool DoHit(Collider2D other)
 {
     // Simple projectiles can hit only one thing
     if (!hasHitCharacter && enabled)
     {
         IHurtable hurtBox = (IHurtable)other.gameObject.GetComponent(typeof(IHurtable));
         // Got a hurt box and its not ourselves
         if (hurtBox != null && !hasHitCharacter && hurtBox.Mob != character)
         {
             if (projectile != null && destroyOnEnemyHit)
             {
                 projectile.DestroyProjectile(true);
             }
             damageInfo.Direction = transform.position - other.transform.position;
             hurtBox.Damage(damageInfo);
             if (!allowMultiHit)
             {
                 hasHitCharacter = true;
             }
             return(true);
         }
         else
         {
             if (projectile != null && destroyOnSceneryHit)
             {
                 projectile.DestroyProjectile(false);
             }
         }
     }
     return(false);
 }
 /// <summary>
 /// Do the actual hit.
 /// </summary>
 /// <param name="other">Other.</param>
 override protected bool DoHit(Collider2D other)
 {
     if (character.Velocity.y < 0 || character.PreviousVelocity.y < 0)
     {
         if (base.DoHit(other))
         {
             DoBobble();
             StartCoroutine(ResetCollider());
             return(true);
         }
         return(false);
     }
     if (kickHidingEnemies)
     {
         IHurtable hurtBox = (IHurtable)other.gameObject.GetComponent(typeof(IHurtable));
         // Got a hurt box and its not ourselves
         if (hurtBox != null && !hasHitCharacter && hurtBox.Mob is Enemy && ((Enemy)hurtBox.Mob).State == EnemyState.HIDING)
         {
             damageInfo.Direction = transform.position - other.transform.position;
             hurtBox.Damage(damageInfo);
             hasHitCharacter = true;
             return(true);
         }
     }
     return(false);
 }
        /// <summary>
        /// Do the actual hit.
        /// </summary>
        /// <param name="other">Other.</param>
        override protected bool DoHit(Collider2D other)
        {
            // Simple projectiles can hit only one thing
            if (!hasHitCharacter && enabled)
            {
                IHurtable hurtBox = (IHurtable)other.gameObject.GetComponent(typeof(IHurtable));
                // Got a hurt box and its not ourselves
                if (hurtBox != null && !hasHitCharacter && hurtBox.Mob != character)
                {
                    if (projectile != null && destroyOnEnemyHit)
                    {
                        projectile.DestroyProjectile(true);
                    }
                    damageInfo.Direction = transform.position - other.transform.position;
                    hurtBox.Damage(damageInfo);
                    if (!allowMultiHit)
                    {
                        hasHitCharacter = true;
                    }
                    if (character is Character)
                    {
                        ((Character)character).HitEnemy(hurtBox.Mob, damageInfo);
                    }
                    return(true);
                }
                else
                {
                    if (hurtBox == null && projectile != null && destroyOnSceneryHit)
                    {
                        projectile.DestroyProjectile(false);
                    }
                    // TODO: Ideally this shouldn't be here but on something related to grappling hook projectile
                    if (projectile is GrapplingHookProjectile)
                    {
                        if (((GrapplingHookProjectile)projectile).shouldParent)
                        {
                            projectile.gameObject.transform.parent = other.gameObject.transform;
#if UNITY_EDITOR
                            if (other.gameObject.transform.lossyScale != Vector3.one)
                            {
                                Debug.LogWarning("Grapple with shouldParent==true requires that all the colliders it collides with have a GameObject scale of (1,1,1) due to Unity bug with parenting to non-uniform colliders. Instead of scaling your game objects set the size on the collider and leave the scale at (1,1,1).");
                            }
#endif
                        }
                    }
                }
            }
            return(false);
        }
		/// <summary>
		/// Do the actual hit.
		/// </summary>
		/// <param name="other">Other.</param>
		/// <returns>true if a hit was done.</returns>
		virtual protected bool DoHit(Collider2D other)
		{
			IHurtable hurtBox = (IHurtable) other.gameObject.GetComponent(typeof(IHurtable));
			if (character == null) Debug.LogWarning("Tried to DoHit() but no character has been set");
			// Got a hurt box and its not ourselves
			if (hurtBox != null && !hasHitCharacter && hurtBox.Mob != character )
			{
				damageInfo.Direction = transform.position - other.transform.position;
				damageInfo.DamageCauser = character;
				hurtBox.Damage(damageInfo);
				if (character is Character) ((Character)character).HitEnemy(hurtBox.Mob, damageInfo);
				hasHitCharacter = true;
				return true;
			}
			return false;
		}