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); } } } }