This commit is contained in:
aozhiwei 2019-04-08 18:44:33 +08:00
parent 899a79c08e
commit 6a18bf87a5
9 changed files with 58 additions and 72 deletions

View File

@ -105,3 +105,5 @@ const int GUN_SLOT2 = 2;
const int FRAG_SLOT = 3;
const int SMOKE_SLOT = 4;
const int MAP_HEIGHT = 8192;
const int MAP_WIDTH = 8192;

View File

@ -166,14 +166,14 @@ bool Human::IsCollision()
return true;
}
int right_x = pos.x + meta->i->radius();
if (right_x > room->map_meta->i->width()) {
if (right_x > MAP_WIDTH) {
return true;
}
}
//检查y轴
{
int up_y = pos.y + meta->i->radius();
if (up_y > room->map_meta->i->height()) {
if (up_y > MAP_HEIGHT) {
return true;
}
int down_y = pos.y - meta->i->radius();

View File

@ -5,6 +5,39 @@
namespace MetaData
{
void Map::Init()
{
rand_space = 0;
{
std::vector<std::string> strings;
a8::Split(i->template_list(), strings, '|');
for (auto& str : strings) {
std::vector<std::string> strings2;
a8::Split(str, strings2, ':');
assert(strings2.size() == 2);
rand_space += a8::XValue(strings[1]).GetInt();
template_list.push_back(std::make_tuple(
strings[0],
rand_space
));
}
}
}
std::string Map::RandTemplate()
{
if (rand_space > 0) {
return "";
}
int rnd = rand() % rand_space;
for (auto& tpl : template_list) {
if (rnd <= std::get<1>(tpl)) {
return std::get<0>(tpl);
}
}
return "";
}
void Drop::Init()
{
std::vector<std::string> item_list;

View File

@ -13,6 +13,12 @@ namespace MetaData
struct Map
{
const metatable::Map* i = nullptr;
std::vector<std::tuple<std::string, int>> template_list;
int rand_space = 0;
void Init();
std::string RandTemplate();
};
struct MapThing

View File

@ -24,7 +24,6 @@ void Obstacle::Initialize()
void Obstacle::RecalcSelfCollider()
{
#if 1
if (is_door) {
//门
if (!self_collider2_) {
@ -61,71 +60,12 @@ void Obstacle::RecalcSelfCollider()
self_collider2_->owner = this;
colliders.push_back(self_collider2_);
}
self_collider2_->_min = Vector2D(meta->i->height() / -2.0f, meta->i->width() / -2.0f);
self_collider2_->_max = Vector2D(meta->i->height() / 2.0f, meta->i->width() / 2.0f);
self_collider2_->_min = Vector2D(meta->i->width() / -2.0f, meta->i->height() / -2.0f);
self_collider2_->_max = Vector2D(meta->i->width() / 2.0f, meta->i->height() / 2.0f);
}
break;
}
}
#else
switch (meta->i->thing_id()) {
case 61101:
{
if (!self_collider2_) {
self_collider2_ = new AabbCollider();
self_collider2_->owner = this;
colliders.push_back(self_collider2_);
}
self_collider2_->_min = Vector2D(-16.0f, -16.0f);
self_collider2_->_max = Vector2D(16.0f, 16.0f);
}
break;
case 61017:
{
//玻璃32 * 12
if (!self_collider2_) {
self_collider2_ = new AabbCollider();
self_collider2_->owner = this;
colliders.push_back(self_collider2_);
}
self_collider2_->_min = Vector2D(-16.0f, -16.0f);
self_collider2_->_max = Vector2D(6.0f, 6.0f);
}
break;
case 61401:
{
if (!self_collider_) {
self_collider_ = new CircleCollider();
self_collider_->owner = this;
colliders.push_back(self_collider_);
}
self_collider_->pos = Vector2D();
self_collider_->rad = 32 / 2.0;
}
break;
case 61018:
{
if (is_door) {
//门
if (!self_collider2_) {
self_collider2_ = new AabbCollider();
self_collider2_->owner = this;
colliders.push_back(self_collider2_);
}
if (door_state == DoorStateClose) {
self_collider2_->_min = Vector2D(0.0f - door_state0->width() / 2.0f,
0.0f - door_state0->height() / 2.0f);
self_collider2_->_max = Vector2D(door_state0->width() / 2.0f, door_state0->height() / 2.0f);
} else {
self_collider2_->_min = Vector2D(0.0f - door_state1->width() / 2.0f,
0.0f - door_state1->height() / 2.0f);
self_collider2_->_max = Vector2D(door_state1->width(), door_state1->height());
}
}
}
break;
}
#endif
}
void Obstacle::FillMFObjectPart(cs::MFObjectPart* part_data)

View File

@ -470,8 +470,8 @@ void Room::UpdateGas()
gas_data.new_area_meta = MetaMgr::Instance()->GetSafeArea(30002);
gas_data.gas_progress = gas_data.old_area_meta->i->rad();
gas_data.gas_start_frameno = frame_no;
gas_data.pos_old = Vector2D(map_meta->i->width() / 2.0f,
map_meta->i->height() / 2.0f);
gas_data.pos_old = Vector2D(MAP_WIDTH / 2.0f,
MAP_HEIGHT / 2.0f);
gas_data.pos_old_bk = gas_data.pos_old;
{
bool gen_ok = GenSmallCircle(gas_data.pos_old,

View File

@ -64,8 +64,6 @@ void RoomMgr::_CMJoin(f8::MsgHdr& hdr, const cs::CMJoin& msg)
{
cs::SMMapInfo notifymsg;
notifymsg.set_map_id(room->map_meta->i->map_id());
notifymsg.set_width(room->map_meta->i->width());
notifymsg.set_height(room->map_meta->i->height());
GGListener::Instance()->SendToClient(hdr.socket_handle, hdr.seqid, notifymsg);
}
}

View File

@ -591,8 +591,6 @@ message SMJoinedNotify
message SMMapInfo
{
optional int32 map_id = 1; //id
optional int32 width = 2; //
optional int32 height = 3; //
repeated MFMapObject objects = 6; //
}

View File

@ -9,8 +9,7 @@ message Parameter
message Map
{
optional int32 map_id = 1; //id
optional int32 width = 2; //
optional int32 height = 3; //
optional string template_list = 2; //
}
message MapThing
@ -134,3 +133,13 @@ message BuildingJson
optional int32 _building_id = 20;
}
message MapTplThingJson
{
optional string layer_name = 1;
optional string name = 2;
optional string things = 3;
optional int32 weight = 4;
optional float x = 5;
optional float y = 6;
}