void TWorld::OnControl(size_t playerId, Space::TControl control) { if (Players.find(playerId) == Players.end()) { qDebug() << "error: player not found, id: " << playerId; return; } TPlayer& player = Players[playerId]; size_t planetFrom = control.planetfrom(); size_t planetTo = control.planetto(); if (control.has_playername()) { player.Name = QString::fromStdString(control.playername()); } if (planetFrom >= (size_t)Planets.size() || planetTo >= (size_t)Planets.size()) { return; } if (planetFrom == planetTo) { return; } TPlanet& from = Planets[planetFrom]; TPlanet& to = Planets[planetTo]; if (from.PlayerId != (int)player.Id) { return; } float energyPercents = 0.01 * control.energypercent(); if (from.Energy * energyPercents >= 2.0) { SpawnShips(from, to, energyPercents, playerId); } }
void EnemyController::CheckPlayerHit(void) { for (int ship = 0; ship < 6; ship++) { if (p_Ship[ship]->m_Active) { if (p_Ship[ship]->CheckPlayerHit() || p_Ship[ship]->CheckUFOHit()) { SpawnExplosion(p_Ship[ship]->m_Position, 1); p_Ship[ship]->Deactivate(); } if (p_Ship[ship]->CheckPlayerHit()) p_Player->GotPoints(200); } } for (int pair = 0; pair < 3; pair++) { if (p_Pair[pair]->m_Active) { if (p_Pair[pair]->CheckPlayerHit() || p_Pair[pair]->CheckUFOHit()) { SpawnExplosion(p_Pair[pair]->m_Position, 2); SpawnShips(pair); p_Pair[pair]->Deactivate(); } if (p_Pair[pair]->CheckPlayerHit()) p_Player->GotPoints(100); } } if (p_Pod->m_Active) { if (p_Pod->CheckPlayerHit() || p_Pod->CheckUFOHit()) { SpawnExplosion(p_Pod->m_Position, 3); SpawnPairs(); p_Pod->Deactivate(); } if (p_Pod->CheckPlayerHit()) p_Player->GotPoints(50); } }
void TControl::OnMouseEvent(QMouseEvent event, bool pressed) { if (pressed) { SelectionFrom = event.pos(); MousePressed = true; CheckSelection(SelectionFrom, event.pos()); TargetSelection = !World->SelectedPlanets.empty(); } else { MousePressed = false; CheckSelection(SelectionFrom, event.pos()); World->Selection.reset(); if (World->SelectedTarget.is_initialized()) { SpawnShips(); World->SelectedTarget.reset(); } if (TargetSelection) { World->SelectedPlanets.clear(); } } }
void TControl::OnMouseEvent(QMouseEvent event, bool mouseDown) { if (State == CS_None) { CheckSelection(event.pos(), event.pos()); if (!World->SelectedPlanets.empty()) { State = CS_TargetSelection; } else if (mouseDown) { State = CS_PlanetSelection; SelectionFrom = event.pos(); } } else if (State == CS_PlanetSelection && !mouseDown) { if (!World->SelectedPlanets.empty()) { State = CS_TargetSelection; World->Selection.reset(); } else { State = CS_None; World->SelectedPlanets.clear(); World->Selection.reset(); World->SelectedTarget.reset(); } } else if (State == CS_TargetSelection && !mouseDown) { CheckTargetSelection(event.pos()); if (World->SelectedTarget.is_initialized()) { if (World->SelectedPlanets.size() == 1 && *World->SelectedPlanets.begin() == *World->SelectedTarget) { CheckSelection(event.pos(), event.pos()); } else { SpawnShips(); State = CS_None; World->SelectedPlanets.clear(); World->Selection.reset(); World->SelectedTarget.reset(); } } else { State = CS_None; World->SelectedPlanets.clear(); World->Selection.reset(); World->SelectedTarget.reset(); } } }