This commit is contained in:
aozhiwei 2019-07-12 15:01:54 +08:00
parent 78399a1199
commit cc72a3feca
6 changed files with 35 additions and 6 deletions

View File

@ -37,6 +37,17 @@ void Building::RecalcSelfCollider()
AddCollider(collider); AddCollider(collider);
room->map_service.AddCollider(collider); room->map_service.AddCollider(collider);
} }
for (auto& obj : meta->i->grassobj()) {
AabbCollider* collider = new AabbCollider();
collider->owner = this;
collider->tag = ColliderTag_Grass;
collider->_min = a8::Vec2(obj.x() - obj.width()/2.0 - meta->i->tilewidth()/2.0,
obj.y() - obj.height()/2.0 - meta->i->tileheight()/2.0);
collider->_max = a8::Vec2(obj.x() + obj.width()/2.0 - meta->i->tilewidth()/2.0,
obj.y() + obj.height()/2.0 - meta->i->tileheight()/2.0);
AddCollider(collider);
room->map_service.AddCollider(collider);
}
} }
void Building::FillMFObjectPart(cs::MFObjectPart* part_data) void Building::FillMFObjectPart(cs::MFObjectPart* part_data)

View File

@ -15,6 +15,7 @@ class ColliderComponent
Entity* owner = nullptr; Entity* owner = nullptr;
ColliderType_e type = CT_None; ColliderType_e type = CT_None;
bool active = true; bool active = true;
int tag = 0;
bool Intersect(ColliderComponent* b); bool Intersect(ColliderComponent* b);
bool IntersectSegment(a8::Vec2& p0, a8::Vec2& p1); bool IntersectSegment(a8::Vec2& p0, a8::Vec2& p1);

View File

@ -234,6 +234,11 @@ enum BulletType_e
BulletType_FireBomb = 3, //燃烧弹 BulletType_FireBomb = 3, //燃烧弹
}; };
enum ColliderTag_e
{
ColliderTag_Grass = 1, //草丛
};
const char* const PROJ_NAME_FMT = "game%d_gameserver"; const char* const PROJ_NAME_FMT = "game%d_gameserver";
const char* const PROJ_ROOT_FMT = "/data/logs/%s"; const char* const PROJ_ROOT_FMT = "/data/logs/%s";

View File

@ -312,6 +312,13 @@ bool Human::IsCollisionInMapService()
case ET_Obstacle: case ET_Obstacle:
case ET_Building: case ET_Building:
{ {
if (collider->tag == ColliderTag_Grass) {
if (TestCollision((ColliderComponent*)collider)) {
if (!a8::HasBitFlag(status, HS_InGrass)) {
OnEnterGrass();
}
}
}
if (!collider->owner->dead && TestCollision((ColliderComponent*)collider)) { if (!collider->owner->dead && TestCollision((ColliderComponent*)collider)) {
if (last_collision_door != collider->owner) { if (last_collision_door != collider->owner) {
return true; return true;
@ -1510,6 +1517,7 @@ void Human::ProcBuffEffect(Buff* buff)
void Human::OnAttack() void Human::OnAttack()
{ {
#if 0
if (a8::HasBitFlag(status, HS_InGrass)) { if (a8::HasBitFlag(status, HS_InGrass)) {
if (HasBuffEffect(BET_Hide)) { if (HasBuffEffect(BET_Hide)) {
RemoveBuff(buff_effect_[BET_Hide]->meta->i->buff_id()); RemoveBuff(buff_effect_[BET_Hide]->meta->i->buff_id());
@ -1536,10 +1544,12 @@ void Human::OnAttack()
&xtimer_attacher.timer_list_); &xtimer_attacher.timer_list_);
} }
} }
#endif
} }
void Human::OnEnterGrass() void Human::OnEnterGrass()
{ {
#if 0
if (a8::HasBitFlag(status, HS_InGrass)) { if (a8::HasBitFlag(status, HS_InGrass)) {
return; return;
} }
@ -1568,10 +1578,12 @@ void Human::OnEnterGrass()
.SetSender(this), .SetSender(this),
hide_func, hide_func,
&xtimer_attacher.timer_list_); &xtimer_attacher.timer_list_);
#endif
} }
void Human::OnLeaveGrass() void Human::OnLeaveGrass()
{ {
#if 0
a8::UnSetBitFlag(status, HS_InGrass); a8::UnSetBitFlag(status, HS_InGrass);
if (grass_hide_timer_list_) { if (grass_hide_timer_list_) {
room->xtimer.DeleteTimer(grass_hide_timer_list_); room->xtimer.DeleteTimer(grass_hide_timer_list_);
@ -1591,6 +1603,7 @@ void Human::OnLeaveGrass()
}, },
&xtimer_attacher.timer_list_); &xtimer_attacher.timer_list_);
} }
#endif
} }
void Human::_UpdateMove(int speed) void Human::_UpdateMove(int speed)

View File

@ -97,8 +97,8 @@ namespace MetaData
a8::Split(str, strings2, ':'); a8::Split(str, strings2, ':');
assert(strings2.size() == 2); assert(strings2.size() == 2);
if (strings2.size() >= 2) { if (strings2.size() >= 2) {
int slot = a8::XValue(strings2[0]); size_t slot = a8::XValue(strings2[0]);
int num = a8::XValue(strings2[1]); size_t num = a8::XValue(strings2[1]);
if (slot >= 0 && slot < volume.size()){ if (slot >= 0 && slot < volume.size()){
volume[slot] = num; volume[slot] = num;
} }
@ -385,7 +385,7 @@ namespace MetaData
void Dress::Init() void Dress::Init()
{ {
for (size_t j = 0; j < i->max_lv(); ++j) { for (int j = 0; j < i->max_lv(); ++j) {
std::array<float, EA_End>& attrs = a8::FastAppend(level_attrs); std::array<float, EA_End>& attrs = a8::FastAppend(level_attrs);
for (size_t k = 0; k < EA_End; ++k) { for (size_t k = 0; k < EA_End; ++k) {
attrs[k] = 0; attrs[k] = 0;
@ -405,7 +405,7 @@ namespace MetaData
float attr_value = a8::XValue(strings2[2]).GetDouble(); float attr_value = a8::XValue(strings2[2]).GetDouble();
if (attr_type < EA_End) { if (attr_type < EA_End) {
if (attr_level >= 0 && attr_level < i->max_lv()) { if (attr_level >= 0 && attr_level < i->max_lv()) {
for (size_t j = 1; j < i->max_lv(); ++j) { for (int j = 1; j < i->max_lv(); ++j) {
if (j % attr_type == 0) { if (j % attr_type == 0) {
level_attrs[j][attr_type] = attr_value * (j / attr_level); level_attrs[j][attr_type] = attr_value * (j / attr_level);
} }
@ -421,7 +421,7 @@ namespace MetaData
if (level < 1) { if (level < 1) {
return 0; return 0;
} }
if (level > level_attrs.size()) { if (level > (int)level_attrs.size()) {
return 0; return 0;
} }
if (attr_type < EA_End) { if (attr_type < EA_End) {

View File

@ -121,7 +121,6 @@ message Skill
{ {
required int32 skill_id = 1; required int32 skill_id = 1;
required int32 skill_type = 2; required int32 skill_type = 2;
required int32 skill_effect_id = 3;
required string value = 4; required string value = 4;
required string value_up = 6; required string value_up = 6;
required int32 skill_cd = 7; required int32 skill_cd = 7;