1
This commit is contained in:
parent
a28e2870c2
commit
49a2f32ae5
@ -145,16 +145,16 @@ enum BuffEffectType_e
|
|||||||
kBET_HunLuan = 23, //混乱,在烟雾弹中不自动瞄准
|
kBET_HunLuan = 23, //混乱,在烟雾弹中不自动瞄准
|
||||||
kBET_Fly = 24, //飞行中
|
kBET_Fly = 24, //飞行中
|
||||||
kBET_Jump = 25, //跳伞中
|
kBET_Jump = 25, //跳伞中
|
||||||
kBET_InGrass = 27, //在草丛
|
|
||||||
kBET_InWater = 28, //在水里
|
|
||||||
kBET_InIce = 29, //在冰里
|
|
||||||
kBET_Shield = 31, //护盾
|
kBET_Shield = 31, //护盾
|
||||||
|
|
||||||
kBET_ThroughWall = 50, //穿墙
|
kBET_ThroughWall = 50, //穿墙
|
||||||
kBET_Driver = 51, //驾驶中
|
kBET_Driver = 51, //驾驶中
|
||||||
kBET_Passenger = 52, //乘座中
|
kBET_Passenger = 52, //乘座中
|
||||||
kBET_Recoil = 55, //后坐力
|
kBET_Recoil = 55, //后坐力
|
||||||
|
kBET_InGrass = 56, //在草丛
|
||||||
|
kBET_InWater = 57, //在水里
|
||||||
|
kBET_InIce = 58, //在冰里
|
||||||
|
|
||||||
kBET_End
|
kBET_End
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -422,4 +422,7 @@ const int JUMP_BUFFID = 7002;
|
|||||||
const int DRIVER_BUFFID = 7003;
|
const int DRIVER_BUFFID = 7003;
|
||||||
const int PASSENGER_BUFFID = 7004;
|
const int PASSENGER_BUFFID = 7004;
|
||||||
const int kRecoilBuffId = 7005;
|
const int kRecoilBuffId = 7005;
|
||||||
|
const int kInGrassBuffId = 7006;
|
||||||
|
const int kInWaterBuffId = 7007;
|
||||||
|
const int kInIceBuffId = 7008;
|
||||||
|
|
||||||
|
@ -3330,9 +3330,17 @@ void Human::CheckSpecObject()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const int spec_tag_array[kColliderSpecTag_End + 1] =
|
||||||
|
{
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
kBET_InGrass, //kColliderTag_Grass
|
||||||
|
kBET_InWater, //kColliderTag_Water
|
||||||
|
kBET_InIce //kColliderTag_Ice
|
||||||
|
};
|
||||||
for (int i = kColliderSpecTag_Begin; i <= kColliderSpecTag_End; ++i) {
|
for (int i = kColliderSpecTag_Begin; i <= kColliderSpecTag_End; ++i) {
|
||||||
SpecMapObject& map_obj = spec_map_objects_[i - kColliderSpecTag_Begin];
|
SpecMapObject& map_obj = spec_map_objects_[i - kColliderSpecTag_Begin];
|
||||||
int buff_effect = 0;
|
int buff_effect = spec_tag_array[i];
|
||||||
if (a8::HasBitFlag(flags, i)) {
|
if (a8::HasBitFlag(flags, i)) {
|
||||||
if (!HasBuffEffect(buff_effect)) {
|
if (!HasBuffEffect(buff_effect)) {
|
||||||
OnEnterSpecMapArea(i, map_obj);
|
OnEnterSpecMapArea(i, map_obj);
|
||||||
@ -3347,6 +3355,9 @@ void Human::CheckSpecObject()
|
|||||||
|
|
||||||
void Human::OnEnterSpecMapArea(int tag, SpecMapObject& map_obj)
|
void Human::OnEnterSpecMapArea(int tag, SpecMapObject& map_obj)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
SendDebugMsg("进入特殊区域");
|
||||||
|
#endif
|
||||||
ClearSpecMapAreaTimer(map_obj);
|
ClearSpecMapAreaTimer(map_obj);
|
||||||
map_obj.enter_timer = room->xtimer.AddDeadLineTimerAndAttach
|
map_obj.enter_timer = room->xtimer.AddDeadLineTimerAndAttach
|
||||||
(MetaMgr::Instance()->GetSpecMapAreaEnterTime(tag) * SERVER_FRAME_RATE,
|
(MetaMgr::Instance()->GetSpecMapAreaEnterTime(tag) * SERVER_FRAME_RATE,
|
||||||
@ -3357,11 +3368,8 @@ void Human::OnEnterSpecMapArea(int tag, SpecMapObject& map_obj)
|
|||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
{
|
{
|
||||||
Human* hum = (Human*)param.sender.GetUserData();
|
Human* hum = (Human*)param.sender.GetUserData();
|
||||||
MetaData::Buff* buff_meta = MetaMgr::Instance()->GetBuff
|
int buff_id = MetaMgr::Instance()->GetSpecMapAreaBuffId(param.param2);
|
||||||
(MetaMgr::Instance()->GetSpecMapAreaBuffId(param.param2));
|
hum->MustBeAddBuff(hum, buff_id);
|
||||||
if (buff_meta) {
|
|
||||||
hum->AddBuff(hum, buff_meta, 1);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
&xtimer_attacher.timer_list_,
|
&xtimer_attacher.timer_list_,
|
||||||
[] (const a8::XParams& param)
|
[] (const a8::XParams& param)
|
||||||
@ -3374,6 +3382,9 @@ void Human::OnEnterSpecMapArea(int tag, SpecMapObject& map_obj)
|
|||||||
|
|
||||||
void Human::OnLeaveSpecMapArea(int tag, SpecMapObject& map_obj)
|
void Human::OnLeaveSpecMapArea(int tag, SpecMapObject& map_obj)
|
||||||
{
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
SendDebugMsg("离开特殊区域");
|
||||||
|
#endif
|
||||||
ClearSpecMapAreaTimer(map_obj);
|
ClearSpecMapAreaTimer(map_obj);
|
||||||
map_obj.leave_timer = room->xtimer.AddDeadLineTimerAndAttach
|
map_obj.leave_timer = room->xtimer.AddDeadLineTimerAndAttach
|
||||||
(MetaMgr::Instance()->GetSpecMapAreaLeaveTime(tag) * SERVER_FRAME_RATE,
|
(MetaMgr::Instance()->GetSpecMapAreaLeaveTime(tag) * SERVER_FRAME_RATE,
|
||||||
|
@ -213,7 +213,10 @@ void MapInstance::CreateTerrain()
|
|||||||
|
|
||||||
MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(80001);
|
MetaData::MapThing* thing_meta = MetaMgr::Instance()->GetMapThing(80001);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
a8::XPrintf("%s %f %f\n", {map_tpl_name_, (float)first_layer->width(), (float)first_layer->height()});
|
a8::XPrintf("%s %s %f %f\n", {map_tpl_name_,
|
||||||
|
map_meta_->i->map_pic(),
|
||||||
|
(float)first_layer->width(),
|
||||||
|
(float)first_layer->height()});
|
||||||
#endif
|
#endif
|
||||||
if (thing_meta) {
|
if (thing_meta) {
|
||||||
for (int w = 0; w < first_layer->width(); ++w) {
|
for (int w = 0; w < first_layer->width(); ++w) {
|
||||||
@ -222,17 +225,21 @@ void MapInstance::CreateTerrain()
|
|||||||
int grid_val = grids[w * first_layer->width() + h];
|
int grid_val = grids[w * first_layer->width() + h];
|
||||||
if (grid_val != 0) {
|
if (grid_val != 0) {
|
||||||
float x = w * thing_meta->i->width() + thing_meta->i->width() / 2.0f;
|
float x = w * thing_meta->i->width() + thing_meta->i->width() / 2.0f;
|
||||||
float y = h * thing_meta->i->height() + thing_meta->i->height() / 2.0f;
|
float y = (first_layer->height() * thing_meta->i->height()) - (h * thing_meta->i->height() + thing_meta->i->height() / 2.0f);
|
||||||
int collider_tag = 0;
|
int collider_tag = 0;
|
||||||
if (dusts.find(grid_val) != dusts.end()) {
|
if (dusts.find(grid_val) != dusts.end()) {
|
||||||
a8::SetBitFlag(collider_tag, kColliderTag_Ice);
|
a8::SetBitFlag(collider_tag, kColliderTag_Ice);
|
||||||
|
assert(collider_tag > 0);
|
||||||
} else if (waters.find(grid_val) != waters.end()) {
|
} else if (waters.find(grid_val) != waters.end()) {
|
||||||
a8::SetBitFlag(collider_tag, kColliderTag_Water);
|
a8::SetBitFlag(collider_tag, kColliderTag_Water);
|
||||||
|
assert(collider_tag > 0);
|
||||||
} else if (grasses.find(grid_val) != grasses.end()) {
|
} else if (grasses.find(grid_val) != grasses.end()) {
|
||||||
a8::SetBitFlag(collider_tag, kColliderTag_Grass);
|
a8::SetBitFlag(collider_tag, kColliderTag_Grass);
|
||||||
|
assert(collider_tag > 0);
|
||||||
}
|
}
|
||||||
if (collider_tag != 0) {
|
if (collider_tag != 0) {
|
||||||
assert(w < 300 && h < 300);
|
assert(w < 300 && h < 300);
|
||||||
|
assert(collider_tag > 0);
|
||||||
InternalCreateObstacle(thing_meta->i->thing_id(), x, y, collider_tag,
|
InternalCreateObstacle(thing_meta->i->thing_id(), x, y, collider_tag,
|
||||||
[] (Obstacle* entity)
|
[] (Obstacle* entity)
|
||||||
{
|
{
|
||||||
|
@ -108,12 +108,18 @@ void MapService::AddCollider(ColliderComponent* collider)
|
|||||||
int max_grid_x = ceil(max_x / cell_width_) - 1;
|
int max_grid_x = ceil(max_x / cell_width_) - 1;
|
||||||
int max_grid_y = ceil(max_y / cell_width_) - 1;
|
int max_grid_y = ceil(max_y / cell_width_) - 1;
|
||||||
#endif
|
#endif
|
||||||
|
if (min_grid_x == -1) {
|
||||||
|
min_grid_x = 0;
|
||||||
|
}
|
||||||
if (min_grid_x < 0) {
|
if (min_grid_x < 0) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
if (max_grid_x >= map_width_) {
|
if (max_grid_x >= map_width_) {
|
||||||
max_grid_x = map_width_ - 1;
|
max_grid_x = map_width_ - 1;
|
||||||
}
|
}
|
||||||
|
if (min_grid_y == -1) {
|
||||||
|
min_grid_y = 0;
|
||||||
|
}
|
||||||
if (min_grid_y < 0) {
|
if (min_grid_y < 0) {
|
||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
@ -247,7 +253,7 @@ void MapService::GetSpecColliders(long long flags,
|
|||||||
}
|
}
|
||||||
struct CellNode *node, *tmp;
|
struct CellNode *node, *tmp;
|
||||||
list_for_each_entry_safe(node, tmp, head, entry) {
|
list_for_each_entry_safe(node, tmp, head, entry) {
|
||||||
if (a8::HasBitFlag(flags, node->collider->tag)) {
|
if ((flags & (long long)node->collider->tag) != 0) {
|
||||||
colliders.insert(node->collider);
|
colliders.insert(node->collider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -913,11 +913,11 @@ int MetaMgr::GetSpecMapAreaBuffId(int tag)
|
|||||||
{
|
{
|
||||||
switch (tag) {
|
switch (tag) {
|
||||||
case kColliderTag_Grass:
|
case kColliderTag_Grass:
|
||||||
return 6005;
|
return kInGrassBuffId;
|
||||||
case kColliderTag_Water:
|
case kColliderTag_Water:
|
||||||
return 6006;
|
return kInWaterBuffId;
|
||||||
case kColliderTag_Ice:
|
case kColliderTag_Ice:
|
||||||
return 6007;
|
return kInIceBuffId;
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user