Working on the server
This commit is contained in:
1 parent
075750442f
commit
28c6e83eda
30 files changed
+646
-362
No files matched your search
+21
-21
@@ -1,4 +1,4 @@
|
||||
#include "Location.h"
|
||||
#include "Location.h"
|
||||
#include "utils/Utils.h"
|
||||
#include "render/OpenGlExtensions.h"
|
||||
#include <iostream>
|
||||
@@ -62,13 +62,13 @@ namespace FRG
|
||||
{
|
||||
}
|
||||
|
||||
std::shared_ptr<const LocationState> Location::stateSnapshot() const
|
||||
std::shared_ptr<const LocationNetworkState> Location::stateSnapshot() const
|
||||
{
|
||||
auto snapshot = gameServer_.snapshot();
|
||||
if (!snapshot) return {};
|
||||
auto location = snapshot->locations.find(locationId_);
|
||||
if (location == snapshot->locations.end()) return {};
|
||||
return std::shared_ptr<const LocationState>(
|
||||
return std::shared_ptr<const LocationNetworkState>(
|
||||
std::move(snapshot), &location->second.state);
|
||||
}
|
||||
|
||||
@@ -307,7 +307,7 @@ namespace FRG
|
||||
|
||||
// ---- Pending-target lookup ----
|
||||
|
||||
TeleportZone* Location::getTargetTeleportZone(const LocationState& state)
|
||||
TeleportZone* Location::getTargetTeleportZone(const LocationNetworkState& state)
|
||||
{
|
||||
if (state.targetTeleportZoneId.empty()) return nullptr;
|
||||
for (auto& zone : teleportZones)
|
||||
@@ -321,6 +321,8 @@ namespace FRG
|
||||
{
|
||||
if (!params.gameState) throw std::runtime_error("Location requires authoritative state binding");
|
||||
if (!params.definition) throw std::runtime_error("Location requires prepared content definition");
|
||||
if (!params.localState) throw std::runtime_error("Location requires local state binding");
|
||||
localState_ = params.localState;
|
||||
const LocationDefinition& definition = *params.definition;
|
||||
this->audioPlayer = audioPlayer;
|
||||
pathVisualization.initialize();
|
||||
@@ -1006,8 +1008,8 @@ namespace FRG
|
||||
renderer.TranslateMatrix({ 0,0, -1.0f * Environment::zoom });
|
||||
//renderer.TranslateMatrix({ 0, -6.f, 0 });
|
||||
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(locationState->cameraInclination, Eigen::Vector3f::UnitX())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(locationState->cameraAzimuth, Eigen::Vector3f::UnitY())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(localState_->cameraInclination, Eigen::Vector3f::UnitX())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(localState_->cameraAzimuth, Eigen::Vector3f::UnitY())).toRotationMatrix());
|
||||
const Eigen::Vector3f camTarget =
|
||||
playerState ? playerState->position : Eigen::Vector3f::Zero();
|
||||
renderer.TranslateMatrix({ -camTarget.x(), -camTarget.y(), -camTarget.z() });
|
||||
@@ -1200,8 +1202,8 @@ namespace FRG
|
||||
renderer.LoadIdentity();
|
||||
renderer.TranslateMatrix({ 0,0, -1.0f * Environment::zoom });
|
||||
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(locationState->cameraInclination, Eigen::Vector3f::UnitX())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(locationState->cameraAzimuth, Eigen::Vector3f::UnitY())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(localState_->cameraInclination, Eigen::Vector3f::UnitX())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(localState_->cameraAzimuth, Eigen::Vector3f::UnitY())).toRotationMatrix());
|
||||
auto playerState = player ? player->stateSnapshot() : nullptr;
|
||||
const Eigen::Vector3f camTarget =
|
||||
playerState ? playerState->position : Eigen::Vector3f::Zero();
|
||||
@@ -1340,8 +1342,8 @@ namespace FRG
|
||||
renderer.LoadIdentity();
|
||||
renderer.TranslateMatrix({ 0, 0, -1.0f * Environment::zoom });
|
||||
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(locationState->cameraInclination, Eigen::Vector3f::UnitX())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(locationState->cameraAzimuth, Eigen::Vector3f::UnitY())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(localState_->cameraInclination, Eigen::Vector3f::UnitX())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(localState_->cameraAzimuth, Eigen::Vector3f::UnitY())).toRotationMatrix());
|
||||
const Eigen::Vector3f camTarget =
|
||||
playerState ? playerState->position : Eigen::Vector3f::Zero();
|
||||
renderer.TranslateMatrix({ -camTarget.x(), -camTarget.y(), -camTarget.z() });
|
||||
@@ -1586,8 +1588,8 @@ namespace FRG
|
||||
renderer.LoadIdentity();
|
||||
renderer.TranslateMatrix({ 0, 0, -1.0f * Environment::zoom });
|
||||
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(locationState->cameraInclination, Eigen::Vector3f::UnitX())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(locationState->cameraAzimuth, Eigen::Vector3f::UnitY())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(localState_->cameraInclination, Eigen::Vector3f::UnitX())).toRotationMatrix());
|
||||
renderer.RotateMatrix(Eigen::Quaternionf(Eigen::AngleAxisf(localState_->cameraAzimuth, Eigen::Vector3f::UnitY())).toRotationMatrix());
|
||||
const Eigen::Vector3f camTarget =
|
||||
playerState ? playerState->position : Eigen::Vector3f::Zero();
|
||||
renderer.TranslateMatrix({ -camTarget.x(), -camTarget.y(), -camTarget.z() });
|
||||
@@ -1963,8 +1965,8 @@ namespace FRG
|
||||
float aspect = (float)Environment::width / (float)Environment::height;
|
||||
float tanHalfFov = tan(CAMERA_FOV_Y * 0.5f);
|
||||
|
||||
float cosAzim = cos(locationState->cameraAzimuth), sinAzim = sin(locationState->cameraAzimuth);
|
||||
float cosIncl = cos(locationState->cameraInclination), sinIncl = sin(locationState->cameraInclination);
|
||||
float cosAzim = cos(localState_->cameraAzimuth), sinAzim = sin(localState_->cameraAzimuth);
|
||||
float cosIncl = cos(localState_->cameraInclination), sinIncl = sin(localState_->cameraInclination);
|
||||
|
||||
Eigen::Vector3f camRight(cosAzim, 0.f, sinAzim);
|
||||
Eigen::Vector3f camForward(sinAzim * cosIncl, -sinIncl, -cosAzim * cosIncl);
|
||||
@@ -2168,16 +2170,14 @@ namespace FRG
|
||||
lastMouseY = eventY;
|
||||
|
||||
const float sensitivity = 0.005f;
|
||||
auto state = stateSnapshot();
|
||||
if (!state) return;
|
||||
const float azimuth = state->cameraAzimuth + dx * sensitivity;
|
||||
float inclination = state->cameraInclination + dy * sensitivity;
|
||||
localState_->cameraAzimuth += dx * sensitivity;
|
||||
float inclination =
|
||||
localState_->cameraInclination + dy * sensitivity;
|
||||
|
||||
const float minInclination = M_PI * 30.f / 180.f;
|
||||
const float maxInclination = M_PI * 0.5f;
|
||||
inclination = max(minInclination, min(maxInclination, inclination));
|
||||
gameServer_.submit(SetLocationCameraCommand{
|
||||
locationId_, azimuth, inclination});
|
||||
localState_->cameraInclination =
|
||||
max(minInclination, min(maxInclination, inclination));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user