added choising spaceship type for multiplayer and some fix in respawn
This commit is contained in:
1 parent
5216965496
commit
74c2f786a1
6 files changed
+196
-39
No files matched your search
+25
-17
@@ -267,6 +267,16 @@ namespace ZL
|
||||
Environment::zoom = DEFAULT_ZOOM;
|
||||
Environment::tapDownHold = false;
|
||||
|
||||
if (networkClient) {
|
||||
try {
|
||||
networkClient->Send(std::string("RESPAWN"));
|
||||
std::cout << "Client: Sent RESPAWN to server\n";
|
||||
}
|
||||
catch (...) {
|
||||
std::cerr << "Client: Failed to send RESPAWN\n";
|
||||
}
|
||||
}
|
||||
|
||||
std::cerr << "Game restarted\n";
|
||||
};
|
||||
|
||||
@@ -677,8 +687,6 @@ namespace ZL
|
||||
{
|
||||
if (!textRenderer) return;
|
||||
|
||||
//#ifdef NETWORK
|
||||
// 2D поверх 3D
|
||||
glDisable(GL_DEPTH_TEST);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
@@ -688,18 +696,12 @@ namespace ZL
|
||||
if (deadRemotePlayers.count(id)) continue;
|
||||
|
||||
const ClientState& st = remotePlayer;
|
||||
// Позици� корабл� в мире
|
||||
Vector3f shipWorld = st.position;
|
||||
|
||||
float distSq = (Environment::shipState.position - shipWorld).squaredNorm();
|
||||
/*if (distSq > MAX_DIST_SQ) // дально�ть прори�овки никнейма
|
||||
continue;*/
|
||||
float dist = sqrt(distSq);
|
||||
float alpha = 1.0f; // по�то�нна� видимо�ть
|
||||
/*float alpha = std::clamp(1.f - (dist - FADE_START) / FADE_RANGE, 0.f, 1.f); // дально�ть прори�овки никнейма
|
||||
if (alpha < 0.01f)
|
||||
continue; */
|
||||
Vector3f labelWorld = shipWorld + Vector3f{ 0.f, -4.f, 0.f }; // регулировка вы�оты
|
||||
float alpha = 1.0f;
|
||||
Vector3f labelWorld = shipWorld + Vector3f{ 0.f, -4.f, 0.f };
|
||||
float sx, sy, depth;
|
||||
if (!worldToScreen(labelWorld, sx, sy, depth))
|
||||
continue;
|
||||
@@ -707,18 +709,21 @@ namespace ZL
|
||||
float uiX = sx, uiY = sy;
|
||||
float scale = std::clamp(BASE_SCALE / (dist * PERSPECTIVE_K + 1.f), MIN_SCALE, MAX_SCALE);
|
||||
|
||||
// Дефолтный лейбл
|
||||
std::string label = "Player (" + std::to_string(st.id) + ") " + std::to_string((int)dist) + "m";
|
||||
std::string displayName;
|
||||
if (!st.nickname.empty() && st.nickname != "Player") {
|
||||
displayName = st.nickname;
|
||||
}
|
||||
else {
|
||||
displayName = "Player (" + std::to_string(st.id) + ")";
|
||||
}
|
||||
std::string label = displayName + " " + std::to_string((int)dist) + "m";
|
||||
|
||||
// TODO: nickname sync
|
||||
|
||||
textRenderer->drawText(label, uiX + 1.f, uiY + 1.f, scale, true, { 0.f, 0.f, 0.f, alpha }); // color param
|
||||
textRenderer->drawText(label, uiX + 1.f, uiY + 1.f, scale, true, { 0.f, 0.f, 0.f, alpha });
|
||||
textRenderer->drawText(label, uiX, uiY, scale, true, { 1.f, 1.f, 1.f, alpha });
|
||||
}
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
//#endif
|
||||
}
|
||||
|
||||
int Space::pickTargetId() const
|
||||
@@ -1288,6 +1293,10 @@ namespace ZL
|
||||
|
||||
for (auto const& [id, remotePlayer] : latestRemotePlayers) {
|
||||
|
||||
if (networkClient && id == networkClient->GetClientId()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!remotePlayer.canFetchClientStateAtTime(nowRoundedWithDelay))
|
||||
{
|
||||
continue;
|
||||
@@ -1296,7 +1305,6 @@ namespace ZL
|
||||
ClientState playerState = remotePlayer.fetchClientStateAtTime(nowRoundedWithDelay);
|
||||
|
||||
remotePlayerStates[id] = playerState;
|
||||
|
||||
}
|
||||
|
||||
for (auto& p : projectiles) {
|
||||
|
||||
Reference in new issue
Block a user