Beispiel #1
0
  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;
  }
Beispiel #2
0
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;
}