//generates tunnels for all kinds of tracks// private void generateTunnels() { if (gt.tunnels.Count <= 0) { return; } //Debug.Log("tunnel count" + gt.tunnels.Count); tunnels = new GameObject[gt.tunnels.Count]; for (int i = 0; i < gt.tunnels.Count; i++) { tunnels[i] = new GameObject("tunnel" + (i + 1)); RailMesh railMesh = tunnels[i].AddComponent <RailMesh>(); railMesh.skip_tracks = Data.speed_points; railMesh.start = gt.tunnels[i].start / (int)Data.data.speed_points; railMesh.end = gt.tunnels[i].end / (int)Data.data.speed_points; railMesh.object_mgr = gt.points; railMesh.two_sided = true; railMesh.collider_flag = true; railMesh.width = 8f; railMesh.height = 6f; railMesh.spacing = 0f; railMesh.height_relative = -1f; railMesh.mat = Data.data.tunnel_mat; tunnels[i].transform.parent = tunnels_main.transform; railMesh.generateMesh(); } }
public void wall() { rollercoaster.name = "wall"; track_main = new GameObject("wall"); RailMesh railMesh = track_main.AddComponent <RailMesh>(); railMesh.skip_tracks = Data.speed_points; railMesh.start = 0; railMesh.end = (int)(gt.points.Count / Data.speed_points); railMesh.object_mgr = gt.points; railMesh.two_sided = false; railMesh.collider_flag = true; railMesh.width = 1f; railMesh.height = 6f; railMesh.spacing = 0f; railMesh.height_relative = -1f; railMesh.mat = Data.data.wall_mat; railMesh.generateMesh(); }
public void wallGenerate() { wall.name = "wall"; track_main = new GameObject("wall"); RailMesh railMesh = track_main.AddComponent <RailMesh>(); railMesh.skip_tracks = 0; railMesh.start = 0; railMesh.end = (int)(gt.points.Count); railMesh.object_mgr = gt.points; railMesh.two_sided = true; railMesh.collider_flag = true; railMesh.width = .1f; railMesh.height = 1f; railMesh.spacing = 0f; railMesh.height_relative = 0f; railMesh.mat = Data.data.wall_mat; railMesh.generateMesh(); }
public void fenceWall() { rollercoaster.name = "fence wall"; track_generator(Data.data.fence_pole); int num = 2; float total_length = (gt.points.Count / Data.speed_points); int submesh_count = (int)Mathf.Ceil(total_length * 4f / RailGenerator.MAX); mesh_rails = new GameObject[num][]; for (int i = 0; i < num; i++) { mesh_rails[i] = new GameObject[submesh_count]; } int start = 0; int end; if (submesh_count == 1) { end = (int)total_length; } else { end = (int)(RailGenerator.MAX / 4f); } //Debug.Log("track count:" + total_length + "\t" + (int)(gt.points.getCount()/gt.speed_points)); for (int j = 0; j < submesh_count; j++) { for (int k = 0; k < num; k++) { mesh_rails[k][j] = new GameObject("rail" + j + "." + k); mesh_rails[k][j].transform.parent = railings.transform; RailMesh railMesh = mesh_rails[k][j].AddComponent <RailMesh>(); railMesh.skip_tracks = Data.speed_points; railMesh.start = start; railMesh.end = end; railMesh.object_mgr = gt.points; railMesh.two_sided = false; railMesh.collider_flag = true; railMesh.width = .1f; railMesh.height = .2f; railMesh.spacing = -0.1f; if (k == 0) { railMesh.height_relative = .3f; } else { railMesh.height_relative = 1f; } railMesh.mat = Data.data.fence_mat; railMesh.generateMesh(); } start = end; if (j == submesh_count - 2) { end = (int)(total_length * 4f % RailGenerator.MAX); } else { end = (int)(total_length * (float)(j + 2)); } } }
//generates a steel rollercoaster track// public void steelCoaster() { rollercoaster.name = "steel coaster"; track_generator(Data.data.steel_bar); int num = 4; float total_length = (gt.points.Count / Data.speed_points); int submesh_count = (int)Mathf.Ceil(total_length * 4f / RailGenerator.MAX); mesh_rails = new GameObject[num][]; for (int i = 0; i < num; i++) { mesh_rails[i] = new GameObject[submesh_count]; } int start = 0; int end; if (submesh_count == 1) { end = (int)total_length; } else { end = (int)(RailGenerator.MAX / 4f); } Debug.Log("sub mesh count:" + submesh_count); for (int j = 0; j < submesh_count; j++) { for (int k = 0; k < num; k++) { mesh_rails[k][j] = new GameObject(string.Concat(new object[] { "rail ", k, ".", j })); RailMesh railMesh = mesh_rails[k][j].AddComponent <RailMesh>(); mesh_rails[k][j].transform.parent = railings.transform; railMesh.skip_tracks = Data.speed_points; railMesh.start = start; railMesh.end = end; railMesh.object_mgr = gt.points; railMesh.collider_flag = true; if (k == 0) { railMesh.mat = Data.data.motor_mat; railMesh.start = 0; railMesh.end = end; //Debug.Log("top point : " + railMesh.end); railMesh.spacing = 0f; } else if (k == 1) { railMesh.mat = Data.data.steel_coaster_mat; railMesh.spacing = 0f; railMesh.height_relative = -0.3f; railMesh.width = 0.2f; railMesh.height = 0.2f; } else { railMesh.mat = Data.data.steel_coaster_mat; railMesh.spacing = 0.5f; railMesh.width = 0.1f; railMesh.height = 0.1f; } if (k % 2 == 0) { railMesh.spacing *= -1f; } Debug.Log("j:" + j + "::start:" + (start * Data.speed_points) + "::end:" + end * Data.speed_points); railMesh.generateMesh(); } start = end; if (j == submesh_count - 2) { end = (int)(total_length); } else { end = (int)(total_length * (float)(j + 2)); } } }
//generates a wooden rollercoaster track// public void woodCoaster() { rollercoaster.name = "wooden coaster"; track_generator(Data.data.bar); int num = 7; float total_length = (gt.points.Count / Data.speed_points); int submesh_count = (int)Mathf.Ceil(total_length * 4f / RailGenerator.MAX); mesh_rails = new GameObject[num][]; for (int i = 0; i < num; i++) { mesh_rails[i] = new GameObject[submesh_count]; } int start = 0; int end; if (submesh_count == 1) { end = (int)total_length; } else { Debug.Log("something is wrong"); end = (int)(RailGenerator.MAX / 4f); } Debug.Log("track count:" + total_length + "\t" + (int)(gt.points.Count / Data.speed_points)); for (int j = 0; j < submesh_count; j++) { for (int k = 0; k < num; k++) { mesh_rails[k][j] = new GameObject("rail" + j + "." + k); mesh_rails[k][j].transform.parent = railings.transform; RailMesh railMesh = mesh_rails[k][j].AddComponent <RailMesh>(); railMesh.skip_tracks = Data.speed_points; railMesh.start = start; railMesh.end = end; railMesh.object_mgr = gt.points; railMesh.collider_flag = true; if (k == 0) { railMesh.mat = Data.data.motor_mat; railMesh.start = 0; railMesh.end = end; Debug.Log("top point : " + railMesh.end); railMesh.spacing = 0f; } else if (k < 3) { railMesh.mat = Data.data.railing_mat; railMesh.spacing = 0.35f; } else { railMesh.mat = Data.data.railing_mat; railMesh.spacing = 0.78f; if (k <= 4) { railMesh.height_relative = 0.45f; } else { railMesh.height_relative = 0.18f; } railMesh.width = 0.05f; railMesh.height = 0.05f; } if (k % 2 == 0) { railMesh.spacing *= -1f; } Debug.Log("setup finished for railings. Generation in progress..."); railMesh.generateMesh(); } start = end; if (j == submesh_count - 2) { end = (int)(total_length * 4f % RailGenerator.MAX); } else { end = (int)(total_length * (float)(j + 2)); } } }