public void metalCrossTieEnd() { metalFrontCrossTieExtruder_1.end(); metalFrontCrossTieExtruder_2.end(); metalFrontCrossTieExtruder_3.end(); metalRearCrossTieExtruder_1.end(); metalRearCrossTieExtruder_2.end(); metalRearCrossTieExtruder_3.end(); }
public override void afterExtrusion(TrackSegment4 trackSegment, GameObject putMeshOnGO) { base.afterExtrusion(trackSegment, putMeshOnGO); float tieInterval = trackSegment.getLength(0) / (float)Mathf.RoundToInt(trackSegment.getLength(0) / this.tieSpacing); float pos = 0; // Topper Crossties while (pos <= trackSegment.getLength(0) + 0.1f) { float tForDistance = trackSegment.getTForDistance(pos, 0); pos += tieInterval; Vector3 normal = trackSegment.getNormal(tForDistance); Vector3 tangentPoint = trackSegment.getTangentPoint(tForDistance); Vector3 binormal = Vector3.Cross(normal, tangentPoint).normalized; Vector3 trackPivot = base.getTrackPivot(trackSegment.getPoint(tForDistance, 0), normal); metalTopperCrossTie_1.extrude(trackPivot + binormal * .3f, binormal, normal); metalTopperCrossTie_1.extrude(trackPivot - binormal * .3f, binormal, normal); metalTopperCrossTie_1.end(); metalTopperCrossTie_2.extrude(trackPivot + binormal * .3f, binormal, normal); metalTopperCrossTie_2.extrude(trackPivot - binormal * .3f, binormal, normal); metalTopperCrossTie_2.end(); metalTopperCrossTie_3.extrude(trackPivot - normal * -0.021113f, normal, -1f * binormal); metalTopperCrossTie_3.extrude(trackPivot - normal * -0.150113f, normal, -1f * binormal); metalTopperCrossTie_3.end(); metalTopperCrossTie_4.extrude(trackPivot - normal * -0.021113f, normal, -1f * binormal); metalTopperCrossTie_4.extrude(trackPivot - normal * -0.150113f, normal, -1f * binormal); metalTopperCrossTie_4.end(); metalTopperCrossTie_5.extrude(trackPivot - normal * -0.021113f, normal, -1f * binormal); metalTopperCrossTie_5.extrude(trackPivot - normal * -0.150113f, normal, -1f * binormal); metalTopperCrossTie_5.end(); metalTopperCrossTie_6.extrude(trackPivot - normal * -0.021113f, normal, -1f * binormal); metalTopperCrossTie_6.extrude(trackPivot - normal * -0.150113f, normal, -1f * binormal); metalTopperCrossTie_6.end(); metalTopperCrossTie_7.extrude(trackPivot + tangentPoint * -0.00213f, tangentPoint * -1, normal); metalTopperCrossTie_7.extrude(trackPivot + tangentPoint * -0.00001f, tangentPoint * -1, normal); metalTopperCrossTie_7.end(); metalTopperCrossTie_8.extrude(trackPivot + tangentPoint * -0.00213f, tangentPoint, normal); metalTopperCrossTie_8.extrude(trackPivot + tangentPoint * -0.00001f, tangentPoint, normal); metalTopperCrossTie_8.end(); } //Rendering beams int i = 0; LandPatch terrain = GameController.Instance.park.getTerrain(trackSegment.getStartpoint()); foreach (SupportPosition position in supportPosts[trackSegment.getStartpoint()]) { if (i > 0) { if (terrain == null) { //left post woodenVerticalSupportPostExtruder.extrude(new Vector3(position.verticalSupportPostLeft.x, position.verticalSupportPostLeft.y + supportBeamExtension, position.verticalSupportPostLeft.z), new Vector3(0, -1, 0), position.verticalSupportPostTangent); woodenVerticalSupportPostExtruder.extrude(position.verticalSupportPostLeft, new Vector3(0, -1, 0), position.verticalSupportPostTangent); woodenVerticalSupportPostExtruder.end(); //right post woodenVerticalSupportPostExtruder.extrude(new Vector3(position.verticalSupportPostRight.x, position.verticalSupportPostRight.y + supportBeamExtension, position.verticalSupportPostRight.z), new Vector3(0, -1, 0), position.verticalSupportPostTangent); woodenVerticalSupportPostExtruder.extrude(position.verticalSupportPostRight, new Vector3(0, -1, 0), position.verticalSupportPostTangent); woodenVerticalSupportPostExtruder.end(); } if (!(trackSegment is Station)) { //bottom beam if (position.bottomBarVisible) { metalCrossTieExtrude(position.bottomBarLeft, position.barsTangent, Vector3.up); metalCrossTieExtrude(position.bottomBarRight, position.barsTangent, Vector3.up); metalCrossTieEnd(); } //top beam if (position.topBarVisible) { metalCrossTieExtrude(position.topBarLeft, position.barsTangent, Vector3.up); metalCrossTieExtrude(position.topBarRight, position.barsTangent, Vector3.up); metalCrossTieEnd(); } } //i beam if (position.bottomBarVisible) { metalIBeamExtrude(position.iBeamLeft, position.iBeamTangent, position.iBeamNormal); metalIBeamExtrude(position.iBeamRight, position.iBeamTangent, position.iBeamNormal); metalIBeamEnd(); } else { metalCrossTieExtrude(position.iBeamLeft, position.iBeamTangent, position.iBeamNormal); metalCrossTieExtrude(position.iBeamRight, position.iBeamTangent, position.iBeamNormal); metalCrossTieEnd(); } } i++; } //rendering extruders List <ShapeExtruder> metalShapeExtruders = new List <ShapeExtruder>(); if (useTopperTrack) { metalShapeExtruders.Add(topperLeftRailExtruder); metalShapeExtruders.Add(topperRightRailExtruder); metalShapeExtruders.Add(metalTopperCrossTie_1); metalShapeExtruders.Add(metalTopperCrossTie_2); metalShapeExtruders.Add(metalTopperCrossTie_3); metalShapeExtruders.Add(metalTopperCrossTie_4); metalShapeExtruders.Add(metalTopperCrossTie_5); metalShapeExtruders.Add(metalTopperCrossTie_6); metalShapeExtruders.Add(metalTopperCrossTie_7); metalShapeExtruders.Add(metalTopperCrossTie_8); } else { metalShapeExtruders.Add(iboxLeftRailExtruder); metalShapeExtruders.Add(iboxRightRailExtruder); } if (metalFrontCrossTieExtruder_1.vertices.Count > 0) { metalShapeExtruders.Add(metalFrontCrossTieExtruder_1); metalShapeExtruders.Add(metalFrontCrossTieExtruder_2); metalShapeExtruders.Add(metalFrontCrossTieExtruder_3); metalShapeExtruders.Add(metalRearCrossTieExtruder_1); metalShapeExtruders.Add(metalRearCrossTieExtruder_2); metalShapeExtruders.Add(metalRearCrossTieExtruder_3); } if (metalIBeamExtruder_1.vertices.Count > 0) { metalShapeExtruders.Add(metalIBeamExtruder_1); metalShapeExtruders.Add(metalIBeamExtruder_2); metalShapeExtruders.Add(metalIBeamExtruder_3); } foreach (ShapeExtruder extruder in metalShapeExtruders) { GameObject gameObject = new GameObject("metalObject"); gameObject.transform.parent = putMeshOnGO.transform; gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localRotation = Quaternion.identity; MeshRenderer meshRenderer = gameObject.AddComponent <MeshRenderer>(); meshRenderer.sharedMaterial = metalMaterial; MeshFilter meshFilter = gameObject.AddComponent <MeshFilter>(); Mesh mesh = extruder.getMesh(putMeshOnGO.transform.worldToLocalMatrix); //trackSegment.addGeneratedMesh (mesh); meshFilter.mesh = mesh; } }
public void metalIBeamEnd() { metalIBeamExtruder_1.end(); metalIBeamExtruder_2.end(); metalIBeamExtruder_3.end(); }