From b65c7ab4a43b082fd798eded3ca3c67fb66fad3f Mon Sep 17 00:00:00 2001 From: BlockMen Date: Sun, 22 Feb 2015 15:12:05 +0100 Subject: [PATCH] Improve group-based connection between raillike nodes --- doc/lua_api.txt | 4 ++-- src/content_mapblock.cpp | 38 +++++++++++++------------------------- 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/doc/lua_api.txt b/doc/lua_api.txt index d73fb7721..e2589d226 100644 --- a/doc/lua_api.txt +++ b/doc/lua_api.txt @@ -1053,8 +1053,8 @@ Another example: Make red wool from white wool and red dye: dropped as an item. If the node is wallmounted the wallmounted direction is checked. * `soil`: saplings will grow on nodes in this group -* `connect_to_raillike`: makes nodes of raillike drawtype connect to - other group members with same drawtype +* `connect_to_raillike`: makes nodes of raillike drawtype with same group value + connect to each other ### Known damage and digging time defining groups * `crumbly`: dirt, sand diff --git a/src/content_mapblock.cpp b/src/content_mapblock.cpp index 5bb787d01..3428f85f9 100644 --- a/src/content_mapblock.cpp +++ b/src/content_mapblock.cpp @@ -1421,77 +1421,65 @@ void mapblock_mesh_generate_special(MeshMakeData *data, content_t thiscontent = n.getContent(); std::string groupname = "connect_to_raillike"; // name of the group that enables connecting to raillike nodes of different kind - bool self_connect_to_raillike = ((ItemGroupList) nodedef->get(n).groups)[groupname] != 0; + int self_group = ((ItemGroupList) nodedef->get(n).groups)[groupname]; if ((nodedef->get(n_minus_x).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_minus_x).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_minus_x).groups)[groupname] != self_group) || n_minus_x.getContent() == thiscontent) is_rail_x[0] = true; if ((nodedef->get(n_minus_x_minus_y).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_minus_x_minus_y).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_minus_x_minus_y).groups)[groupname] != self_group) || n_minus_x_minus_y.getContent() == thiscontent) is_rail_x_minus_y[0] = true; if ((nodedef->get(n_minus_x_plus_y).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_minus_x_plus_y).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_minus_x_plus_y).groups)[groupname] != self_group) || n_minus_x_plus_y.getContent() == thiscontent) is_rail_x_plus_y[0] = true; if ((nodedef->get(n_plus_x).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_plus_x).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_plus_x).groups)[groupname] != self_group) || n_plus_x.getContent() == thiscontent) is_rail_x[1] = true; if ((nodedef->get(n_plus_x_minus_y).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_plus_x_minus_y).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_plus_x_minus_y).groups)[groupname] != self_group) || n_plus_x_minus_y.getContent() == thiscontent) is_rail_x_minus_y[1] = true; if ((nodedef->get(n_plus_x_plus_y).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_plus_x_plus_y).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_plus_x_plus_y).groups)[groupname] != self_group) || n_plus_x_plus_y.getContent() == thiscontent) is_rail_x_plus_y[1] = true; if ((nodedef->get(n_minus_z).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_minus_z).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_minus_z).groups)[groupname] != self_group) || n_minus_z.getContent() == thiscontent) is_rail_z[0] = true; if ((nodedef->get(n_minus_z_minus_y).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_minus_z_minus_y).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_minus_z_minus_y).groups)[groupname] != self_group) || n_minus_z_minus_y.getContent() == thiscontent) is_rail_z_minus_y[0] = true; if ((nodedef->get(n_minus_z_plus_y).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_minus_z_plus_y).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_minus_z_plus_y).groups)[groupname] != self_group) || n_minus_z_plus_y.getContent() == thiscontent) is_rail_z_plus_y[0] = true; if ((nodedef->get(n_plus_z).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_plus_z).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_plus_z).groups)[groupname] != self_group) || n_plus_z.getContent() == thiscontent) is_rail_z[1] = true; if ((nodedef->get(n_plus_z_minus_y).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_plus_z_minus_y).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_plus_z_minus_y).groups)[groupname] != self_group) || n_plus_z_minus_y.getContent() == thiscontent) is_rail_z_minus_y[1] = true; if ((nodedef->get(n_plus_z_plus_y).drawtype == NDT_RAILLIKE - && ((ItemGroupList) nodedef->get(n_plus_z_plus_y).groups)[groupname] != 0 - && self_connect_to_raillike) + && ((ItemGroupList) nodedef->get(n_plus_z_plus_y).groups)[groupname] != self_group) || n_plus_z_plus_y.getContent() == thiscontent) is_rail_z_plus_y[1] = true;