1
This commit is contained in:
parent
3155c9edaf
commit
2eb1c62333
@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user