Example #1
0
void QSanSkillButton::setSkill(const Skill *skill)
{
    Q_ASSERT(skill != NULL);
    _m_skill = skill;
    // This is a nasty trick because the server side decides to choose a nasty design
    // such that sometimes the actual viewas skill is nested inside a trigger skill.
    // Since the trigger skill is not relevant, we flatten it before we create the button.
    _m_viewAsSkill = ViewAsSkill::parseViewAsSkill(_m_skill);
    if (skill == NULL) skill = _m_skill;
    Q_ASSERT(skill != NULL);

    Skill::Frequency freq = skill->getFrequency(Self);
    if (freq == Skill::Frequent
        || (freq == Skill::NotFrequent && skill->inherits("TriggerSkill") && !skill->inherits("WeaponSkill")
        && !skill->inherits("ArmorSkill") && _m_viewAsSkill == NULL)) {
        setStyle(QSanButton::S_STYLE_TOGGLE);
        setState(freq == Skill::Frequent ? QSanButton::S_STATE_DOWN : QSanButton::S_STATE_UP);
        _setSkillType(QSanInvokeSkillButton::S_SKILL_FREQUENT);
        _m_emitActivateSignal = false;
        _m_emitDeactivateSignal = false;
        _m_canEnable = true;
        _m_canDisable = false;
    } else if (freq == Skill::Limited || freq == Skill::NotFrequent) {
        setState(QSanButton::S_STATE_DISABLED);
        if (skill->isAttachedLordSkill())
            _setSkillType(QSanInvokeSkillButton::S_SKILL_ATTACHEDLORD);
        else if (freq == Skill::Limited)
            _setSkillType(QSanInvokeSkillButton::S_SKILL_ONEOFF_SPELL);
        else
            _setSkillType(QSanInvokeSkillButton::S_SKILL_PROACTIVE);

        setStyle(QSanButton::S_STYLE_TOGGLE);

        _m_emitDeactivateSignal = true;
        _m_emitActivateSignal = true;
        _m_canEnable = true;
        _m_canDisable = true;
    } else if (freq == Skill::Wake) {
        setState(QSanButton::S_STATE_DISABLED);
        setStyle(QSanButton::S_STYLE_PUSH);
        _setSkillType(QSanInvokeSkillButton::S_SKILL_AWAKEN);
        _m_emitActivateSignal = false;
        _m_emitDeactivateSignal = false;
        _m_canEnable = true;
        _m_canDisable = true;
    } else if (freq == Skill::Compulsory || freq == Skill::NotCompulsory) { // we have to set it in such way for WeiDi
        setState(QSanButton::S_STATE_UP);
        setStyle(QSanButton::S_STYLE_PUSH);
        _setSkillType(QSanInvokeSkillButton::S_SKILL_COMPULSORY);
        _m_emitActivateSignal = false;
        _m_emitDeactivateSignal = false;
        _m_canEnable = true;
        _m_canDisable = true;
    } else Q_ASSERT(false);
    setToolTip(skill->getDescription());

    Q_ASSERT((int)_m_skillType <= 5 && _m_state <= 3);
    _repaint();
}
void CardContainer::fillCards(const QList<int> &card_ids, const QList<int> &disabled_ids) {
    QList<CardItem *> card_items;
    if (card_ids.isEmpty() && items.isEmpty())
        return;
    else if (card_ids.isEmpty() && !items.isEmpty()) {
        card_items = items;
        items.clear();
    } else if (!items.isEmpty()) {
        retained_stack.push(retained());
        items_stack.push(items);
        foreach (CardItem *item, items)
            item->hide();
        items.clear();
    }

    close_button->hide();
    if (card_items.isEmpty())
        card_items = _createCards(card_ids);

    items.append(card_items);
    _repaint();
    int n = items.length();

    const int blank = 3;
    int card_width = G_COMMON_LAYOUT.m_cardNormalWidth;
    int card_height = G_COMMON_LAYOUT.m_cardNormalHeight;
    bool one_row = true;
    int width = (card_width + blank) * items.length() - blank + 50;
    if (width * 1.5 > RoomSceneInstance->sceneRect().width()) {
        width = (card_width + blank) * ((items.length() + 1) / 2) - blank + 50;
        one_row = false;
    }
    int first_row = one_row ? items.length() : (items.length() + 1) / 2;

    for (int i = 0; i < n; i++) {
        QPointF pos;
        if (i < first_row) {
            pos.setX(25 + (card_width + blank) * i);
            pos.setY(45);
        } else {
            if (n % 2 == 1)
                pos.setX(25 + card_width / 2 + blank / 2
                    + (card_width + blank) * (i - first_row));
            else
                pos.setX(25 + (card_width + blank) * (i - first_row));
            pos.setY(45 + card_height + blank);
        }
        CardItem *item = items[i];
        item->resetTransform();
        item->setPos(pos);
        item->setHomePos(pos);
        item->setOpacity(1.0);
        item->setHomeOpacity(1.0);
        item->setFlag(QGraphicsItem::ItemIsFocusable);
        if (disabled_ids.contains(item->getCard()->getEffectiveId())) item->setEnabled(false);
        item->show();
    }
}
Example #3
0
void QSanSkillButton::setSkill(const Skill* skill)
{
     Q_ASSERT(skill != NULL);
     _m_skill = skill;
     // This is a nasty trick because the server side decides to choose a nasty design
     // such that sometimes the actual viewas skill is nested inside a trigger skill.
     // Since the trigger skill is not relevant, we flatten it before we create the button.
     _m_viewAsSkill = _parseViewAsSkill();
     if (skill == NULL) skill = _m_skill;

     Skill::Frequency freq = skill->getFrequency();
     if (freq == Skill::Frequent) {            
         setStyle(QSanButton::S_STYLE_TOGGLE);
         setState(QSanButton::S_STATE_DOWN);
         _setSkillType(QSanInvokeSkillButton::S_SKILL_FREQUENT);
         _m_emitActivateSignal = false;
         _m_emitDeactivateSignal = false;
         _m_canEnable = true;
         _m_canDisable = false;
     } else if (freq == Skill::Limited || freq == Skill::NotFrequent) {
         setState(QSanButton::S_STATE_DISABLED);            
         if (freq == Skill::Limited)
             _setSkillType(QSanInvokeSkillButton::S_SKILL_ONEOFF_SPELL);
         else
             _setSkillType(QSanInvokeSkillButton::S_SKILL_PROACTIVE);

         setStyle(QSanButton::S_STYLE_TOGGLE);
         _m_emitDeactivateSignal = true;

         _m_emitActivateSignal = true;
         _m_canEnable = true;
         _m_canDisable = true;
     } else if (freq == Skill::Wake) {
         setState(QSanButton::S_STATE_DISABLED);
         setStyle(QSanButton::S_STYLE_PUSH);
         _setSkillType(QSanInvokeSkillButton::S_SKILL_AWAKEN);
         _m_emitActivateSignal = false;
         _m_emitDeactivateSignal = false;
         _m_canEnable = true;
         _m_canDisable = true;
     } else if (freq == Skill::Compulsory) {
         setState(QSanButton::S_STATE_DISABLED);
         setStyle(QSanButton::S_STYLE_PUSH);
         _setSkillType(QSanInvokeSkillButton::S_SKILL_COMPULSORY);
         _m_emitActivateSignal = false;
         _m_emitDeactivateSignal = false;
         _m_canEnable = false;
         _m_canDisable = true;
     } else Q_ASSERT(false);
     setToolTip(skill->getDescription());

     Q_ASSERT((int)_m_skillType <= 5 && _m_state <= 3);
     _repaint();

    // @todo: add an icon for lord
    // if(skill->isLordSkill())
    //     button->setIcon(QIcon("image/system/roles/lord.png"));
}