This commit is contained in:
aozhiwei 2024-03-05 19:38:15 +08:00
parent 3155c9edaf
commit 2eb1c62333
3 changed files with 43 additions and 28 deletions

View File

@ -1554,25 +1554,27 @@ void CallFuncBuff::BatchRandomPosSummonObstacle()
glm::vec3 center = glm::vec3(x, y, z);
for (int i = 0; i < num; ++i) {
glm::vec3 out_point = center;
owner->room->map_instance->RandPoint(center, range, out_point);
Obstacle* ob = owner->SummonObstacle(this,
id,
out_point,
owner->GetAttackDir());
if (ob) {
std::shared_ptr<std::vector<float>> vars = std::make_shared<std::vector<float>>();
vars->push_back(ob->GetUniId());
vars->push_back(ob->GetPos().GetX());
vars->push_back(ob->GetPos().GetY());
vars->push_back(ob->GetPos().GetZ());
for (int buff_id : meta->_buff_param8_int_list) {
owner->TryAddBuff(
GetCaster().Get(),
buff_id,
skill_meta,
init_args,
vars
);
bool ret = owner->room->map_instance->RandPoint(center, range, out_point);
if (ret) {
Obstacle* ob = owner->SummonObstacle(this,
id,
out_point,
owner->GetAttackDir());
if (ob) {
std::shared_ptr<std::vector<float>> vars = std::make_shared<std::vector<float>>();
vars->push_back(ob->GetUniId());
vars->push_back(ob->GetPos().GetX());
vars->push_back(ob->GetPos().GetY());
vars->push_back(ob->GetPos().GetZ());
for (int buff_id : meta->_buff_param8_int_list) {
owner->TryAddBuff(
GetCaster().Get(),
buff_id,
skill_meta,
init_args,
vars
);
}
}
}
}

View File

@ -972,16 +972,19 @@ void Creature::DoSkill(int skill_id,
if (skill->GetMinorType()) {
auto old_context_dir = context_dir;
auto old_context_pos = context_pos;
context_dir = skill_dir_;
context_dir = skill_dir;
context_pos = GetPos();
context_pos.AddGlmVec3(skill_dir_ * skill_distance);
context_pos.AddGlmVec3(skill_dir * skill_distance);
#ifdef MYDEBUG
a8::XPrintf("skill_dir:%f %f %f skill_distance:%f\n",
a8::XPrintf("skill_dir:%f %f %f skill_distance:%f skill_target_pos:%f %f %f\n",
{
skill_dir_.x,
skill_dir_.y,
skill_dir_.z,
skill_distance
skill_dir.x,
skill_dir.y,
skill_dir.z,
skill_distance,
context_pos.GetX(),
context_pos.GetY(),
context_pos.GetZ(),
});
#endif
SetAttackDir(skill_dir);

View File

@ -369,10 +369,20 @@ bool MapInstance::RandPoint(const glm::vec3& center, float range, glm::vec3& out
glm::vec3 start = center;
glm::vec3 dir = GlmHelper::UP;
GlmHelper::RotateY(dir, (10 + rand() % 360)/ 180.0f);
GlmHelper::RotateY(dir, glm::radians(1.0f + (float)(rand() % 360)));
GlmHelper::Normalize(dir);
glm::vec3 end = center + dir * range;
glm::vec3 end = center + dir * (float)(rand() % (int)std::max(1.0f, range));
out_point = center;
#ifdef MYDEBUG
a8::XPrintf("MapInstance::RandPoint:%f %f %f\n",
{
out_point.x,
out_point.y,
out_point.z,
});
#endif
return true;
Scale(start);
Scale(end);
if (Raycast