//
// Created by main on 15-11-22.
//

#ifndef FUGG_ATTACKRANGE_H
#define FUGG_ATTACKRANGE_H

#include <cstdint>

namespace flyff {
    enum class AttackRange : uint32_t {
        // one-handed melee weapon
        Short = 1,
        // two-handed melee weapon
        Long,
        // weapons such as whips and spears
        Far,
        // Shooting Weapon
        Range,
        // wand distance
        Wand,
        //shooting weapon
        HRange,
        // long wand distance
        HWand,
    };

    static std::ostream &operator<<(std::ostream &os, const AttackRange &kind) {
        switch (kind) {
            case AttackRange::Short:
                os << "Short";
                break;
            case AttackRange::Long:
                os << "Long";
                break;
            case AttackRange::Far:
                os << "Far";
                break;
            case AttackRange::Range:
                os << "Range";
                break;
            case AttackRange::Wand:
                os << "Wand";
                break;
            case AttackRange::HRange:
                os << "HRange";
                break;
            case AttackRange::HWand:
                os << "HWand";
                break;
            default:
                os << "AttackRange(" << static_cast<unsigned>(kind) << ")";
                break;
        }

        return os;
    }
};


#endif //FUGG_ATTACKRANGE_H
