private static bool ReadBaseEnemyData(XElement enemyData, EnemyAssetData assetData, out Declarations.EnemyData enemy)
    {
        bool failed = false;

        int   health = ReadInt(enemyData, Constants.cst_Health, ref failed);
        float speed  = ReadFloat(enemyData, Constants.cst_Speed, ref failed);
        int   damage = ReadInt(enemyData, Constants.cst_Damage, ref failed);
        int   award  = ReadInt(enemyData, Constants.cst_Award, ref failed);

        if (failed)
        {
            enemy = null;
            return(false);
        }
        else
        {
            enemy = new Declarations.EnemyData(assetData, health, speed, damage, award);
            return(true);
        }
    }
    internal static bool ReadEnemyData(XElement enemyData, EnemyAssetData assetData, Declarations.EnemyType enemyType, out Declarations.EnemyData enemy)
    {
        switch (enemyType)
        {
        case Declarations.EnemyType.Swordsman:
            return(ReadBaseEnemyData(enemyData, assetData, out enemy));

        case Declarations.EnemyType.Golem:
            return(ReadBaseEnemyData(enemyData, assetData, out enemy));

        case Declarations.EnemyType.Dragon:
            return(ReadBaseEnemyData(enemyData, assetData, out enemy));

        case Declarations.EnemyType.Rogue:
            return(ReadRogueData(enemyData, assetData, out enemy));

        case Declarations.EnemyType.Boss:
            return(ReadBossData(enemyData, assetData, out enemy));

        default:
            Debug.Log("Unknown enemy type");
            break;
        }
        enemy = null;
        return(false);
    }