1
This commit is contained in:
parent
6cb4d307b5
commit
5065b63475
@ -2,6 +2,7 @@
|
||||
|
||||
#include <random>
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
#include <a8/mutable_xobject.h>
|
||||
|
||||
#include <f8/app.h>
|
||||
@ -14,6 +15,7 @@
|
||||
#include "httpproxy.h"
|
||||
#include "jsondatamgr.h"
|
||||
#include "player.h"
|
||||
#include "mapinstance.h"
|
||||
|
||||
#include "mt/MapMode.h"
|
||||
#include "mt/Hero.h"
|
||||
@ -56,8 +58,35 @@ void BoxDrop::Drop(int num, const glm::vec3& center)
|
||||
for (int i = 0; i < num; ++i) {
|
||||
glm::vec3 dir = GlmHelper::UP;
|
||||
GlmHelper::RotateY(dir, a8::RandAngle());
|
||||
const glm::vec3 pos = center + dir * (25.0f + rand() % 50);
|
||||
room_->CreateObstacle(BOX_ID, pos.x, pos.y, pos.z);
|
||||
|
||||
glm::vec3 born_pos = center;
|
||||
GlmHelper::Normalize(dir);
|
||||
glm::vec3 start = born_pos;
|
||||
room_->map_instance->Scale(start);
|
||||
|
||||
glm::vec3 real_pos = born_pos;
|
||||
float distance = 25.0f + rand() % 50;
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
glm::vec3 end = born_pos + dir * distance;
|
||||
glm::vec3 hit_point;
|
||||
bool hit_result = false;
|
||||
room_->map_instance->Scale(end);
|
||||
if (room_->map_instance->Raycast(start,
|
||||
end,
|
||||
hit_point,
|
||||
hit_result,
|
||||
room_->map_instance->GetMoveIncludeFlags(),
|
||||
room_->map_instance->GetMoveExcludeFlags())) {
|
||||
room_->map_instance->UnScale(hit_point);
|
||||
if (GlmHelper::Norm2D(hit_point - born_pos) > 5) {
|
||||
real_pos = hit_point;
|
||||
break;
|
||||
}
|
||||
}
|
||||
GlmHelper::RotateY(dir, glm::radians(90.0f));
|
||||
}
|
||||
|
||||
room_->CreateObstacle(BOX_ID, real_pos.x, real_pos.y, real_pos.z);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user