Beispiel #1
0
void GameScene::spawnPlayer()
{
    Q_ASSERT(!m_player);

    addItem(m_player = new GraphicsPlayerObject(PLAYER_HEALTH));

    const auto playerSize = m_player->boundingRect().size();
    QPointF pos{
        sceneRect().width() / 2 - playerSize.width() / 2,
        sceneRect().height()/* - playerSize.height()*/,
    };
    m_player->setPos(pos);
    m_hudObject->setHealth(m_player->health());
    addItem(m_player);
    connect(m_player, &GraphicsPlayerObject::cannonTriggered, this,
        &GameScene::planeShot);
    connect(m_player, &GraphicsPlayerObject::exploded, this,
        &GameScene::planeExploded);
    connect(m_player, &GraphicsPlayerObject::damaged, m_hudObject,
        &GraphicsHudObject::addScore);
    connect(m_player, &GraphicsPlayerObject::damaged, m_hudObject,
        &GraphicsHudObject::setHealth);
    connect(m_player, &GraphicsPlayerObject::exploded, m_hudObject,
        &GraphicsHudObject::playerDeath);
    setFocusItem(m_player);
}
///
/// デバッグメニュー項目を閉じる
void DebugMenuFrame::closeFrame()
{
    for (auto item: items_) {
        item->enable(false);
    }
    setFocusItem(nullptr);
}
///
/// この項目から子アイテムを削除
void DebugMenuFrame::detachItem(
    DebugMenuLabel* item
){
    //  自分の管理アイテムか判定
    T3_ASSERT(item->getParent() == this);
    if (item == focus_item_) {
        setFocusItem(nullptr);
    }
    //  親を無効化
    item->setParent(nullptr);

    //  子リストから外す
    items_.remove(item);
    
    

}
///
/// 更新
void DebugMenuFrame::update()
{
    DebugMenuLabel* focus = getFocusItem();
    if ( focus ){
        //  この先のメニューにフォーカスが移っている
        focus->update();
    }
    else {
        //  フォーカス項目を移動
        const Pad& pad = debugPad();
        uint32_t items_size = static_cast<uint32_t>(items_.size());
        
        if (pad.isRepeat(t3::Pad::BUTTON_UP)) {
            select_idx_ -= 1;
            if (select_idx_ < 0) {
                select_idx_ = items_size -1;
            }
        }
        else if (pad.isRepeat(t3::Pad::BUTTON_DOWN)) {
            select_idx_ += 1;
            if (select_idx_ >= items_size) {
                select_idx_ = 0;
            }
        }
        else if (pad.isTrigger(t3::Pad::BUTTON_A)) {
            //  フォーカスする
            int idx = 0;
            for (auto item: items_){
                if (select_idx_ == idx){
                    setFocusItem(item);
                    break;
                }
                ++idx;
            }
        }
        else if (pad.isTrigger(t3::Pad::BUTTON_B)) {
            //  フォーカスを外す
            if (parent_) {
                parent_->setFocusItem(nullptr);
            }
        }
        
    }

}