public void InterpretAction(ActorAction action)
    {
        if (action is FireWeapon && attackDelay <= 0 && (!IsPlayer || ammoInClip > 0))
        {
            ammoInClip--;

            attackDelay += Mechanics.Combat.AttackDelay;

            FireWeapon tmp       = action as FireWeapon;
            Vector3    direction = tmp.TargetPoint - ActorsPosition.transform.position;

            Attack att =
                new Attack(
                    Weapon.ProjectileType,
                    Mechanics.Combat.Damage,
                    Mechanics.Combat.DamageVariance,
                    Mechanics.Combat.CriticalChance,
                    Mechanics.Combat.CriticalMultiplicator,
                    ActorsPosition);

            ActorsPosition.CreateRangedAttack(att, direction);

            audioSource.volume = audioSourceVolume * GameRandom.NextFloat(0.9f, 1);
            audioSource.pitch  = GameRandom.NextFloat(0.8f, 1.2f);
            audioSource.Play();
        }

        if (action is MeleeAttack && attackDelay <= 0)
        {
            attackDelay += (action as MeleeAttack).WindUpTime + Mechanics.Combat.AttackDelay;

            StartCoroutine("MeleeAttackWithWindUp", action as MeleeAttack);
        }

        if (action is ReloadWeapon)
        {
            StartCoroutine("StartReloadingAfterDelay");
        }
    }