bool FlagStatus::isOn(const Vector_ModifierFlag& modifierFlags) const { bool strict = false; for (size_t i = 0; i < modifierFlags.size(); ++i) { if (modifierFlags[i] == ModifierFlag::ZERO) continue; if (modifierFlags[i] == ModifierFlag::NONE) { strict = true; } else { if (! isOn(modifierFlags[i])) return false; } } // If modifierFlags contains ModifierFlag::NONE, // return false when unspecified modifierflag is pressed. if (strict) { for (size_t i = 0; i < item_.size(); ++i) { if (item_[i].sum(true) > 0 && ! modifierFlags.is_include(item_[i].flag_)) { return false; } } } return true; }
bool FlagStatus::isStuck(const Vector_ModifierFlag& modifierFlags) const { for (size_t i = 0; i < item_.size(); ++i) { if (item_[i].flag_ == ModifierFlag::ZERO) continue; if (item_[i].flag_ == ModifierFlag::NONE) continue; if (modifierFlags.is_include(item_[i].flag_) && item_[i].sticky_count_ <= 0) { return false; } } return true; }