Improve group-based connection between raillike nodes

This commit is contained in:
BlockMen 2015-02-22 15:12:05 +01:00
parent 40c2c18a3f
commit b65c7ab4a4
2 changed files with 15 additions and 27 deletions

@ -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 dropped as an item. If the node is wallmounted the wallmounted direction is
checked. checked.
* `soil`: saplings will grow on nodes in this group * `soil`: saplings will grow on nodes in this group
* `connect_to_raillike`: makes nodes of raillike drawtype connect to * `connect_to_raillike`: makes nodes of raillike drawtype with same group value
other group members with same drawtype connect to each other
### Known damage and digging time defining groups ### Known damage and digging time defining groups
* `crumbly`: dirt, sand * `crumbly`: dirt, sand

@ -1421,77 +1421,65 @@ void mapblock_mesh_generate_special(MeshMakeData *data,
content_t thiscontent = n.getContent(); content_t thiscontent = n.getContent();
std::string groupname = "connect_to_raillike"; // name of the group that enables connecting to raillike nodes of different kind 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 if ((nodedef->get(n_minus_x).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_x).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_minus_x).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_minus_x.getContent() == thiscontent) || n_minus_x.getContent() == thiscontent)
is_rail_x[0] = true; is_rail_x[0] = true;
if ((nodedef->get(n_minus_x_minus_y).drawtype == NDT_RAILLIKE if ((nodedef->get(n_minus_x_minus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_x_minus_y).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_minus_x_minus_y).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_minus_x_minus_y.getContent() == thiscontent) || n_minus_x_minus_y.getContent() == thiscontent)
is_rail_x_minus_y[0] = true; is_rail_x_minus_y[0] = true;
if ((nodedef->get(n_minus_x_plus_y).drawtype == NDT_RAILLIKE if ((nodedef->get(n_minus_x_plus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_x_plus_y).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_minus_x_plus_y).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_minus_x_plus_y.getContent() == thiscontent) || n_minus_x_plus_y.getContent() == thiscontent)
is_rail_x_plus_y[0] = true; is_rail_x_plus_y[0] = true;
if ((nodedef->get(n_plus_x).drawtype == NDT_RAILLIKE if ((nodedef->get(n_plus_x).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_x).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_plus_x).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_plus_x.getContent() == thiscontent) || n_plus_x.getContent() == thiscontent)
is_rail_x[1] = true; is_rail_x[1] = true;
if ((nodedef->get(n_plus_x_minus_y).drawtype == NDT_RAILLIKE if ((nodedef->get(n_plus_x_minus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_x_minus_y).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_plus_x_minus_y).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_plus_x_minus_y.getContent() == thiscontent) || n_plus_x_minus_y.getContent() == thiscontent)
is_rail_x_minus_y[1] = true; is_rail_x_minus_y[1] = true;
if ((nodedef->get(n_plus_x_plus_y).drawtype == NDT_RAILLIKE if ((nodedef->get(n_plus_x_plus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_x_plus_y).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_plus_x_plus_y).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_plus_x_plus_y.getContent() == thiscontent) || n_plus_x_plus_y.getContent() == thiscontent)
is_rail_x_plus_y[1] = true; is_rail_x_plus_y[1] = true;
if ((nodedef->get(n_minus_z).drawtype == NDT_RAILLIKE if ((nodedef->get(n_minus_z).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_z).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_minus_z).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_minus_z.getContent() == thiscontent) || n_minus_z.getContent() == thiscontent)
is_rail_z[0] = true; is_rail_z[0] = true;
if ((nodedef->get(n_minus_z_minus_y).drawtype == NDT_RAILLIKE if ((nodedef->get(n_minus_z_minus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_z_minus_y).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_minus_z_minus_y).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_minus_z_minus_y.getContent() == thiscontent) || n_minus_z_minus_y.getContent() == thiscontent)
is_rail_z_minus_y[0] = true; is_rail_z_minus_y[0] = true;
if ((nodedef->get(n_minus_z_plus_y).drawtype == NDT_RAILLIKE if ((nodedef->get(n_minus_z_plus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_minus_z_plus_y).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_minus_z_plus_y).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_minus_z_plus_y.getContent() == thiscontent) || n_minus_z_plus_y.getContent() == thiscontent)
is_rail_z_plus_y[0] = true; is_rail_z_plus_y[0] = true;
if ((nodedef->get(n_plus_z).drawtype == NDT_RAILLIKE if ((nodedef->get(n_plus_z).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_z).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_plus_z).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_plus_z.getContent() == thiscontent) || n_plus_z.getContent() == thiscontent)
is_rail_z[1] = true; is_rail_z[1] = true;
if ((nodedef->get(n_plus_z_minus_y).drawtype == NDT_RAILLIKE if ((nodedef->get(n_plus_z_minus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_z_minus_y).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_plus_z_minus_y).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_plus_z_minus_y.getContent() == thiscontent) || n_plus_z_minus_y.getContent() == thiscontent)
is_rail_z_minus_y[1] = true; is_rail_z_minus_y[1] = true;
if ((nodedef->get(n_plus_z_plus_y).drawtype == NDT_RAILLIKE if ((nodedef->get(n_plus_z_plus_y).drawtype == NDT_RAILLIKE
&& ((ItemGroupList) nodedef->get(n_plus_z_plus_y).groups)[groupname] != 0 && ((ItemGroupList) nodedef->get(n_plus_z_plus_y).groups)[groupname] != self_group)
&& self_connect_to_raillike)
|| n_plus_z_plus_y.getContent() == thiscontent) || n_plus_z_plus_y.getContent() == thiscontent)
is_rail_z_plus_y[1] = true; is_rail_z_plus_y[1] = true;