This commit is contained in:
aozhiwei 2023-01-01 16:47:34 +08:00
parent 2f92392b50
commit 1c0de58eb8
3 changed files with 44 additions and 36 deletions

View File

@ -2,10 +2,10 @@
struct GasData struct GasData
{ {
a8::Vec2 pos_old; glm::vec2 pos_old;
a8::Vec2 pos_old_bk; glm::vec2 pos_old_bk;
a8::Vec2 pre_pos_old; glm::vec2 pre_pos_old;
a8::Vec2 pos_new; glm::vec2 pos_new;
float rad_old = 0.0f; float rad_old = 0.0f;
float rad_new = 0.0f; float rad_new = 0.0f;
float gas_progress = 0.0f; float gas_progress = 0.0f;

View File

@ -2,6 +2,9 @@
#include <random> #include <random>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <a8/mutable_xobject.h> #include <a8/mutable_xobject.h>
#include <a8/collision.h> #include <a8/collision.h>
#include <a8/vec2.h> #include <a8/vec2.h>
@ -1148,14 +1151,16 @@ void Room::UpdateGas()
a8::HasBitFlag(c->status, CS_Disable)) { a8::HasBitFlag(c->status, CS_Disable)) {
continue; continue;
} }
bool b1 = a8::CircleContainCircle(gas_data_.pos_old, bool b1 = a8::CircleContainCircle
(gas_data_.pos_old,
gas_data_.gas_progress, gas_data_.gas_progress,
c->GetPos().ToVec2(), glm::vec2(c->GetPos().GetX(), c->GetPos().GetZ()),
c->GetRadius() c->GetRadius()
); );
bool b2 = a8::CircleContainCircle(gas_data_.pos_new, bool b2 = a8::CircleContainCircle
(gas_data_.pos_new,
gas_data_.rad_new, gas_data_.rad_new,
c->GetPos().ToVec2(), glm::vec2(c->GetPos().GetX(), c->GetPos().GetZ()),
c->GetRadius() c->GetRadius()
); );
if (!b1 && !b2) { if (!b1 && !b2) {
@ -1231,7 +1236,8 @@ void Room::UpdateGasInactivePve()
gas_data_.old_area_meta = first_safearea; gas_data_.old_area_meta = first_safearea;
gas_data_.new_area_meta = pve_mode_meta->_area[0]; gas_data_.new_area_meta = pve_mode_meta->_area[0];
gas_data_.gas_start_frameno = GetFrameNo(); gas_data_.gas_start_frameno = GetFrameNo();
gas_data_.pos_new = a8::Vec2(gas_data_.new_area_meta->x1(), gas_data_.new_area_meta->y1()); gas_data_.pos_new = glm::vec2(gas_data_.new_area_meta->x1(),
gas_data_.new_area_meta->y1());
gas_data_.pos_old = gas_data_.pos_new; gas_data_.pos_old = gas_data_.pos_new;
gas_data_.pos_old_bk = gas_data_.pos_old; gas_data_.pos_old_bk = gas_data_.pos_old;
gas_data_.rad_old = gas_data_.old_area_meta->rad(); gas_data_.rad_old = gas_data_.old_area_meta->rad();
@ -1267,13 +1273,13 @@ void Room::UpdateGasMoving()
((GetFrameNo() - gas_data_.gas_start_frameno) * (1.0 / SERVER_FRAME_RATE)); ((GetFrameNo() - gas_data_.gas_start_frameno) * (1.0 / SERVER_FRAME_RATE));
gas_data_.gas_progress = std::max(gas_data_.rad_old - distance, gas_data_.rad_new); gas_data_.gas_progress = std::max(gas_data_.rad_old - distance, gas_data_.rad_new);
if (!(gas_data_.pos_new == gas_data_.pos_old)) { if (!(gas_data_.pos_new == gas_data_.pos_old)) {
a8::Vec2 p1 = gas_data_.pos_new - gas_data_.pos_old_bk; glm::vec2 p1 = gas_data_.pos_new - gas_data_.pos_old_bk;
gas_data_.pre_pos_old = gas_data_.pos_old; gas_data_.pre_pos_old = gas_data_.pos_old;
if (p1.Norm() - distance <= 0.01f) { if (glm::length(p1) - distance <= 0.01f) {
gas_data_.pos_old = gas_data_.pos_new; gas_data_.pos_old = gas_data_.pos_new;
} else { } else {
a8::Vec2 dir = p1; glm::vec2 dir = p1;
dir.Normalize(); dir = glm::normalize(dir);
gas_data_.pos_old = gas_data_.pos_old_bk + dir * distance; gas_data_.pos_old = gas_data_.pos_old_bk + dir * distance;
} }
if (gas_data_.rad_old - distance <= gas_data_.rad_new) { if (gas_data_.rad_old - distance <= gas_data_.rad_new) {
@ -1339,14 +1345,15 @@ void Room::UpdateGasJump()
gas_data_.gas_progress = gas_data_.old_area_meta->rad(); gas_data_.gas_progress = gas_data_.old_area_meta->rad();
gas_data_.gas_start_frameno = GetFrameNo(); gas_data_.gas_start_frameno = GetFrameNo();
#if 1 #if 1
gas_data_.pos_old = a8::Vec2(first_safearea->x1(), first_safearea->y1()); gas_data_.pos_old = glm::vec2(first_safearea->x1(),
first_safearea->y1());
#else #else
gas_data_.pos_old = map_meta_->first_safearea_center; gas_data_.pos_old = map_meta_->first_safearea_center;
#endif #endif
gas_data_.pos_old_bk = gas_data_.pos_old; gas_data_.pos_old_bk = gas_data_.pos_old;
{ {
if (gas_data_.pos_list && !gas_data_.pos_list->_poses.empty()) { if (gas_data_.pos_list && !gas_data_.pos_list->_poses.empty()) {
gas_data_.pos_old = a8::Vec2( gas_data_.pos_old = glm::vec2(
gas_data_.pos_list->_poses[0].x, gas_data_.pos_list->_poses[0].x,
gas_data_.pos_list->_poses[0].z gas_data_.pos_list->_poses[0].z
); );
@ -1379,13 +1386,13 @@ bool Room::GenSmallCircle()
} }
if (gas_data_.pos_list && gas_data_.gas_count + 1 < gas_data_.pos_list->_poses.size()) { if (gas_data_.pos_list && gas_data_.gas_count + 1 < gas_data_.pos_list->_poses.size()) {
gas_data_.pos_new = gas_data_.pos_new =
a8::Vec2( glm::vec2(
gas_data_.pos_list->_poses[gas_data_.gas_count + 1].x, gas_data_.pos_list->_poses[gas_data_.gas_count + 1].x,
gas_data_.pos_list->_poses[gas_data_.gas_count + 1].z gas_data_.pos_list->_poses[gas_data_.gas_count + 1].z
); );
} else { } else {
#if 1 #if 1
gas_data_.pos_new = a8::Vec2(gas_data_.new_area_meta->x1(), gas_data_.pos_new = glm::vec2(gas_data_.new_area_meta->x1(),
gas_data_.new_area_meta->y1()); gas_data_.new_area_meta->y1());
#else #else
a8::Vec2 dir = a8::Vec2::UP; a8::Vec2 dir = a8::Vec2::UP;
@ -3218,7 +3225,7 @@ void Room::ForwardGasRing(int n)
return; return;
} }
gas_data_.SetGasMode(GasWaiting); gas_data_.SetGasMode(GasWaiting);
a8::Vec2 pre_pos = gas_data_.pos_new; glm::vec2 pre_pos = gas_data_.pos_new;
gas_data_.old_area_meta = mt::SafeArea::GetById(pre_area_id); gas_data_.old_area_meta = mt::SafeArea::GetById(pre_area_id);
gas_data_.new_area_meta = mt::SafeArea::GetById(pre_area_id + 1); gas_data_.new_area_meta = mt::SafeArea::GetById(pre_area_id + 1);
gas_data_.gas_progress = gas_data_.old_area_meta->rad(); gas_data_.gas_progress = gas_data_.old_area_meta->rad();
@ -3346,10 +3353,10 @@ void Room::AirRaid(int airraid_id)
if (!raid_meta) { if (!raid_meta) {
return; return;
} }
a8::Vec2 dir = a8::Vec2::UP; glm::vec3 dir = GlmHelper::UP;
dir.Rotate(a8::RandAngle()); GlmHelper::RotateY(dir, a8::RandAngle());
float rnd_rad = gas_data_.new_area_meta->rad() > 0 ? rand() % gas_data_.new_area_meta->rad() : 0; float rnd_rad = gas_data_.new_area_meta->rad() > 0 ? rand() % gas_data_.new_area_meta->rad() : 0;
a8::Vec2 v2_center= gas_data_.pos_new + dir * (100 + rnd_rad); glm::vec2 v2_center= gas_data_.pos_new + glm::vec2(dir.x, dir.z) * (100.f + rnd_rad);
glm::vec3 center = glm::vec3(v2_center.x, 0.0f, v2_center.y); glm::vec3 center = glm::vec3(v2_center.x, 0.0f, v2_center.y);
{ {
std::vector<Player*> humans; std::vector<Player*> humans;
@ -3621,7 +3628,8 @@ void Room::OnEnterNewWave(int wave)
gas_data_.old_area_meta = pve_mode_meta->_area[wave]; gas_data_.old_area_meta = pve_mode_meta->_area[wave];
gas_data_.new_area_meta = pve_mode_meta->_area[wave]; gas_data_.new_area_meta = pve_mode_meta->_area[wave];
gas_data_.gas_start_frameno = GetFrameNo(); gas_data_.gas_start_frameno = GetFrameNo();
gas_data_.pos_new = a8::Vec2(gas_data_.new_area_meta->x1(), gas_data_.new_area_meta->y1()); gas_data_.pos_new = glm::vec2(gas_data_.new_area_meta->x1(),
gas_data_.new_area_meta->y1());
gas_data_.pos_old = gas_data_.pos_new; gas_data_.pos_old = gas_data_.pos_new;
gas_data_.pos_old_bk = gas_data_.pos_old; gas_data_.pos_old_bk = gas_data_.pos_old;
gas_data_.rad_old = gas_data_.old_area_meta->rad(); gas_data_.rad_old = gas_data_.old_area_meta->rad();

2
third_party/a8 vendored

@ -1 +1 @@
Subproject commit e908a1e8e9e01fe78a66e5e704fdb2d38fe28727 Subproject commit ff1eedc0cb3e90edefa8acedaf9bbeaf4f655f8d