示例#1
0
文件: nuke.cpp 项目: neivv/teippi
void Unit::Order_NukeGround()
{
    unk_move_waypoint = order_target_pos;
    int sight_range = GetSightRange(false) * 32;
    int dist = Distance(exact_position, Point32(order_target_pos) * 256 + Point32(128, 128)) / 256;
    if (ai && dist <= sight_range * 3)
        Ai_Cloak();
    if (dist > sight_range)
    {
        if (move_target_update_timer == 0)
            ChangeMovementTarget(order_target_pos); // What, it is not moving?
    }
    else
    {
        bw::StopMoving(this);
        if (position != unk_move_waypoint)
        {
            auto pos = sprite->position;
            int diff = facing_direction -
                bw::GetFacingDirection(pos.x, pos.y, unk_move_waypoint.x, unk_move_waypoint.y);
            if (diff < -1 || diff > 1)
                return;
        }
        Unit *silo = nullptr;
        for (Unit *unit : bw::first_player_unit[player])
        {
            if (unit->Type() == UnitId::NuclearSilo && unit->silo.has_nuke)
            {
                silo = unit;
                break;
            }
        }
        if (!silo)
        {
            OrderDone();
            return;
        }
        Unit *nuke = silo->silo.nuke;
        silo->silo.nuke = nullptr;
        silo->silo.has_nuke = 0;
        bw::PlaySound(Sound::NukeLaser, this, 1, 0);
        nuke->IssueOrderTargetingGround(OrderId::NukeLaunch, order_target_pos);
        related = nuke;
        nuke->related = this;
        nuke->sprite->SetDirection32(0);
        bw::ShowUnit(nuke);
        IssueOrderTargetingGround(OrderId::NukeTrack, sprite->position);
        if (!IsDisabled() || Type().IsBuilding()) // Huh?
            buttons = 0xed;
        RefreshUi();
    }
}
示例#2
0
///////////////////////Private/////////////////////////////
void DataSearchConfig::InitUi()
{
    ui->combo_DBdriver->clear();
    ui->combo_DBdriver->addItems(QSqlDatabase::drivers());
    if(ReadConfigFile())
    {
        RefreshUi();
    }
    else
    {
        QMessageBox::critical(this,
                              tr("Error"),
                              tr("Could not read config file"));
    }
}
示例#3
0
void DataSearchConfig::on_btn_BrowseDsnFile_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this, tr("Open DSN file"),
                                                    QDir::currentPath(),
                                                     tr("DSN files (*.dsn)"));
    if(!fileName.isEmpty())
    {
        mDataBaseName = fileName;
        RefreshUi();
    }
    else
    {
        QMessageBox::critical(this,
                              tr("Error"),
                              tr("The dsn file selected is not proper, dsn is not changed"));
    }
}
示例#4
0
void Neutralize(int player)
{
    Assert(player >= 0 && player < Limits::Players);
    if (IsCheatActive(Cheats::Staying_Alive) && IsHumanPlayer(player))
        return;

    if (bw::game_data->got.victory_conditions == 4 || bw::game_data->got.victory_conditions == 5)
    {
        Unit *next = bw::first_player_unit[player];
        while (next != nullptr)
        {
            Unit *unit = next;
            next = unit->player_units.next;
            if (units_dat_flags[unit->unit_id] & UnitFlags::Subunit || unit->sprite == nullptr)
                continue;
            if (unit->order == Order::Die)
                continue;
            if (units_dat_flags[unit->unit_id] & UnitFlags::SingleEntity && unit->powerup.carrying_unit != nullptr)
            {
                Unit *worker = unit->powerup.carrying_unit;
                if (worker->carried_powerup_flags != 0)
                {
                    DeletePowerupImages(worker);
                    if (worker->worker.powerup)
                    {
                        worker->worker.powerup->order_flags |= 0x4;
                        worker->worker.powerup->Kill(nullptr);
                    }
                    worker->worker.powerup = nullptr;
                    worker->carried_powerup_flags = 0;
                }
            }
            else
            {
                unit->Kill(nullptr);
            }
        }
    }
    else
    {
        Unit *next = bw::first_player_unit[player];
        while (next != nullptr)
        {
            Unit *unit = next;
            next = unit->player_units.next;
            NeutralizeUnit(unit);
        }
        RefreshUi();
    }
    if (*bw::team_game)
    {
        for (int i = 0; i < Limits::ActivePlayers; i++)
        {
            if (bw::players[player].team == bw::players[i].team)
                MarkPlayerNeutral(i);
        }
    }
    else
    {
        MarkPlayerNeutral(player);
    }
    if (IsReplay())
    {
        *bw::replay_visions &= ~(1 << player);
        *bw::player_visions &= ~(1 << player);
        *bw::player_exploration_visions &= ~(0x100 << player);
    }
}