private void render() { Transform startPositionMarker = base.transform; LandPatch terrain = GameController.Instance.park.getTerrain(startPositionMarker.position); if (terrain == null) { Object.Destroy(base.gameObject); } else { HybridCoasterMeshGenerator meshGenerator = (HybridCoasterMeshGenerator)track.TrackedRide.meshGenerator; foreach (SupportPosition position in meshGenerator.supportPosts[trackSegment.getStartpoint()]) { leftVerticalSupportPost = new Vector3(position.verticalSupportPostLeft.x, position.verticalSupportPostLeft.y + meshGenerator.supportBeamExtension, position.verticalSupportPostLeft.z); rightVerticalSupportPost = new Vector3(position.verticalSupportPostRight.x, position.verticalSupportPostRight.y + meshGenerator.supportBeamExtension, position.verticalSupportPostRight.z); projectedTangentDirection = position.verticalSupportPostTangent; leftVerticalSupportPost_floor = GameController.Instance.park.getTerrain(leftVerticalSupportPost).getPoint(leftVerticalSupportPost); rightVerticalSupportPost_floor = GameController.Instance.park.getTerrain(rightVerticalSupportPost).getPoint(rightVerticalSupportPost); leftVerticalSupportPost_footerHeight = leftVerticalSupportPost_floor.y + 0.1f; if (GameController.Instance.park.getTerrain(leftVerticalSupportPost).WaterHeight > leftVerticalSupportPost_footerHeight) { leftVerticalSupportPost_footerHeight = GameController.Instance.park.getTerrain(leftVerticalSupportPost).WaterHeight + 0.025f; } rightVerticalSupportPost_footerHeight = rightVerticalSupportPost_floor.y + 0.1f; if (GameController.Instance.park.getTerrain(rightVerticalSupportPost).WaterHeight > rightVerticalSupportPost_footerHeight) { rightVerticalSupportPost_footerHeight = GameController.Instance.park.getTerrain(rightVerticalSupportPost).WaterHeight + 0.025f; } if (leftVerticalSupportPost.y > leftVerticalSupportPost_floor.y) { woodenVerticalSupportPostExtruder.extrude(leftVerticalSupportPost, new Vector3(0, -1, 0), projectedTangentDirection); woodenVerticalSupportPostExtruder.extrude(leftVerticalSupportPost_floor, new Vector3(0, -1, 0), projectedTangentDirection); woodenVerticalSupportPostExtruder.end(); concreteVerticalSupportFooterExtruder.extrude(new Vector3(leftVerticalSupportPost_floor.x, leftVerticalSupportPost_footerHeight, leftVerticalSupportPost_floor.z), new Vector3(0, -1, 0), projectedTangentDirection); concreteVerticalSupportFooterExtruder.extrude(new Vector3(leftVerticalSupportPost_floor.x, leftVerticalSupportPost_floor.y - 0.05f, leftVerticalSupportPost_floor.z), new Vector3(0, -1, 0), projectedTangentDirection); concreteVerticalSupportFooterExtruder.end(); } if (rightVerticalSupportPost.y > rightVerticalSupportPost_floor.y) { woodenVerticalSupportPostExtruder.extrude(rightVerticalSupportPost, new Vector3(0, -1, 0), projectedTangentDirection); woodenVerticalSupportPostExtruder.extrude(rightVerticalSupportPost_floor, new Vector3(0, -1, 0), projectedTangentDirection); woodenVerticalSupportPostExtruder.end(); concreteVerticalSupportFooterExtruder.extrude(new Vector3(rightVerticalSupportPost_floor.x, rightVerticalSupportPost_footerHeight, rightVerticalSupportPost_floor.z), new Vector3(0, -1, 0), projectedTangentDirection); concreteVerticalSupportFooterExtruder.extrude(new Vector3(rightVerticalSupportPost_floor.x, rightVerticalSupportPost_floor.y - 0.05f, rightVerticalSupportPost_floor.z), new Vector3(0, -1, 0), projectedTangentDirection); concreteVerticalSupportFooterExtruder.end(); } } List <BoxExtruder> extruders = new List <BoxExtruder>(); if (woodenVerticalSupportPostExtruder.vertices.Count > 0) { extruders.Add(woodenVerticalSupportPostExtruder); } if (woodenHorizontalSupportPostExtruder.vertices.Count > 0) { extruders.Add(woodenHorizontalSupportPostExtruder); } if (concreteVerticalSupportFooterExtruder.vertices.Count > 0) { extruders.Add(concreteVerticalSupportFooterExtruder); } foreach (BoxExtruder extruder in extruders) { GameObject gameObject = new GameObject("supportObject"); gameObject.transform.parent = base.instance.transform; gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localRotation = Quaternion.identity; MeshRenderer meshRenderer = gameObject.AddComponent <MeshRenderer>(); meshRenderer.sharedMaterial = track.TrackedRide.meshGenerator.material; MeshFilter meshFilter = gameObject.AddComponent <MeshFilter>(); Mesh mesh = extruder.getMesh(base.instance.transform.worldToLocalMatrix); trackSegment.addGeneratedMesh(mesh); meshFilter.mesh = mesh; } } }
public void onEnabled() { var dsc = System.IO.Path.DirectorySeparatorChar; //assetBundle = AssetBundle.LoadFromFile(Path + dsc + "assetbundle" + dsc + "assetpack"); //SideCrossBeamsGo = assetBundle.LoadAsset<GameObject>("21a3f09b79e34f147a2b6017d2b6c05b"); assetBundle = AssetBundle.LoadFromFile(Path + dsc + "assetbundle" + dsc + "corkscrewassetpack"); SideCrossBeamsGo = assetBundle.LoadAsset <GameObject>("c184c4f392587465f9bf2c86e6615e78"); FrontCartGo = assetBundle.LoadAsset <GameObject>("01be2cec49bbb476381a537d75ad047e"); CartGo = assetBundle.LoadAsset <GameObject>("7c1045f838c59460db2bfebd3df04a47"); binder = new TrackRiderBinder("kvwQwhKWWG"); TrackedRide iboxCoaster = binder.RegisterTrackedRide <TrackedRide>("Floorless Coaster", "IboxCoaster", "Steel Hybrid Coaster"); TrackedRide topperCoaster = binder.RegisterTrackedRide <TrackedRide>("Floorless Coaster", "TopperCoaster", "Wooden Hybrid Coaster"); HybridCoasterMeshGenerator iboxTrackGenerator = binder.RegisterMeshGenerator <HybridCoasterMeshGenerator>(iboxCoaster); HybridCoasterMeshGenerator topperTrackGenerator = binder.RegisterMeshGenerator <HybridCoasterMeshGenerator>(topperCoaster); TrackRideHelper.PassMeshGeneratorProperties(TrackRideHelper.GetTrackedRide("Floorless Coaster").meshGenerator, iboxCoaster.meshGenerator); TrackRideHelper.PassMeshGeneratorProperties(TrackRideHelper.GetTrackedRide("Floorless Coaster").meshGenerator, topperCoaster.meshGenerator); HybridCoasterSupportInstantiator iboxSupportGenerator = binder.RegisterSupportGenerator <HybridCoasterSupportInstantiator>(iboxCoaster); HybridCoasterSupportInstantiator topperSupportGenerator = binder.RegisterSupportGenerator <HybridCoasterSupportInstantiator>(topperCoaster); iboxCoaster.canCurveLifts = true; topperCoaster.canCurveLifts = true; iboxCoaster.description = "A rollercoaster combining a steel track and a mix of wooden and steel supports to allow elements not normally found on wooden coasters."; topperCoaster.description = "A rollercoaster combining a wooden track and a mix of wooden and steel supports to allow elements not normally found on wooden coasters."; iboxTrackGenerator.path = Path; topperTrackGenerator.path = Path; iboxTrackGenerator.crossBeamGO = null; topperTrackGenerator.crossBeamGO = null; GameObject hybridSupportContainer = new GameObject("HybridCoasterSupports"); GameObject hybridSupportLocation = new GameObject("HybridCoasterSupportLocation"); hybridSupportContainer.AddComponent <SupportHybridCoaster>(); hybridSupportLocation.AddComponent <HybridSupportLocation>(); SupportConfiguration hybridSupportConfiguration = new SupportConfiguration(); hybridSupportConfiguration.supportLocationGO = hybridSupportLocation.GetComponent <HybridSupportLocation>(); hybridSupportConfiguration.supportSettings = new SupportSettings[1]; hybridSupportConfiguration.supportSettings[0] = new SupportSettings(); hybridSupportConfiguration.supportSettings[0].minimumHeightAboveGround = 0.25f; hybridSupportConfiguration.supportSettings[0].supportGO = hybridSupportContainer.GetComponent <SupportHybridCoaster>(); iboxCoaster.supportConfiguration = hybridSupportConfiguration; //iboxCoaster.supportConfiguration.supportSettings[0].supportGO = hybridSupportContainer.GetComponent<SupportHybridCoaster>(); //iboxTrackGenerator.supportInstantiator = null; //topperTrackGenerator.supportInstantiator = null; iboxTrackGenerator.stationPlatformGO = TrackRideHelper.GetTrackedRide("Spinning Coaster").meshGenerator.stationPlatformGO; topperTrackGenerator.stationPlatformGO = TrackRideHelper.GetTrackedRide("Spinning Coaster").meshGenerator.stationPlatformGO; iboxTrackGenerator.frictionWheelsGO = TrackRideHelper.GetTrackedRide("Junior Coaster").meshGenerator.frictionWheelsGO; topperTrackGenerator.frictionWheelsGO = TrackRideHelper.GetTrackedRide("Junior Coaster").meshGenerator.frictionWheelsGO; iboxTrackGenerator.material = TrackRideHelper.GetTrackedRide("Wooden Coaster").meshGenerator.material; topperTrackGenerator.material = TrackRideHelper.GetTrackedRide("Wooden Coaster").meshGenerator.material; iboxTrackGenerator.metalMaterial = TrackRideHelper.GetTrackedRide("Steel Coaster").meshGenerator.material; topperTrackGenerator.metalMaterial = TrackRideHelper.GetTrackedRide("Steel Coaster").meshGenerator.material; topperTrackGenerator.useTopperTrack = true; iboxCoaster.price = 1650; topperCoaster.price = 1700; iboxCoaster.carTypes = new CoasterCarInstantiator[] { }; topperCoaster.carTypes = new CoasterCarInstantiator[] { }; iboxCoaster.meshGenerator.customColors = new[] { new Color(132f / 255f, 40f / 255f, 137f / 255f, 1), new Color(23f / 255f, 133f / 255f, 30f / 255f, 1), new Color(180 / 255f, 180f / 255f, 180f / 255f, 1), new Color(108f / 255f, 70f / 255f, 23f / 255f, 1) }; topperCoaster.meshGenerator.customColors = new[] { new Color(132f / 255f, 40f / 255f, 137f / 255f, 1), new Color(23f / 255f, 133f / 255f, 30f / 255f, 1), new Color(180 / 255f, 180f / 255f, 180f / 255f, 1), new Color(108f / 255f, 70f / 255f, 23f / 255f, 1) }; iboxCoaster.dropsImportanceExcitement = 0.665f; topperCoaster.dropsImportanceExcitement = 0.665f; iboxCoaster.inversionsImportanceExcitement = 0.673f; topperCoaster.inversionsImportanceExcitement = 0.673f; iboxCoaster.averageLatGImportanceExcitement = 0.121f; topperCoaster.averageLatGImportanceExcitement = 0.121f; iboxCoaster.accelerationImportanceExcitement = 0.525f; topperCoaster.accelerationImportanceExcitement = 0.525f; CoasterCarInstantiator iboxCoasterCarInstantiator = binder.RegisterCoasterCarInstaniator <CoasterCarInstantiator>(iboxCoaster, "RmcCoasterInsantiator", "Hybrid Coaster Cars", 1, 15, 6); CoasterCarInstantiator topperCoasterCarInstantiator = binder.RegisterCoasterCarInstaniator <CoasterCarInstantiator>(topperCoaster, "RmcCoasterInsantiator", "Hybrid Coaster Cars", 1, 15, 6); BaseCar frontCar = binder.RegisterCar <BaseCar>(Object.Instantiate(FrontCartGo), "RmcCoaster_Front_Car", .35f, 0f, true, new[] { new Color(168f / 255, 14f / 255, 14f / 255), new Color(234f / 255, 227f / 255, 227f / 255), new Color(73f / 255, 73f / 255, 73f / 255) } ); iboxCoasterCarInstantiator.frontVehicleGO = frontCar; topperCoasterCarInstantiator.frontVehicleGO = frontCar; iboxCoasterCarInstantiator.frontVehicleGO.gameObject.AddComponent <RestraintRotationController>().closedAngles = new Vector3(110, 0, 0); topperCoasterCarInstantiator.frontVehicleGO.gameObject.AddComponent <RestraintRotationController>().closedAngles = new Vector3(110, 0, 0); List <Transform> transforms = new List <Transform>(); Utility.recursiveFindTransformsStartingWith("wheel", frontCar.transform, transforms); foreach (var transform in transforms) { transform.gameObject.AddComponent <FrictionWheelAnimator>(); } BaseCar backCar = binder.RegisterCar <BaseCar>(Object.Instantiate(CartGo), "RmcCoaster_Back_Car", .35f, -.3f, false, new[] { new Color(168f / 255, 14f / 255, 14f / 255), new Color(234f / 255, 227f / 255, 227f / 255), new Color(73f / 255, 73f / 255, 73f / 255) } ); iboxCoasterCarInstantiator.vehicleGO = backCar; topperCoasterCarInstantiator.vehicleGO = backCar; iboxCoasterCarInstantiator.vehicleGO.gameObject.AddComponent <RestraintRotationController>().closedAngles = new Vector3(110, 0, 0); topperCoasterCarInstantiator.vehicleGO.gameObject.AddComponent <RestraintRotationController>().closedAngles = new Vector3(110, 0, 0); Utility.recursiveFindTransformsStartingWith("wheel", backCar.transform, transforms); foreach (var transform in transforms) { transform.gameObject.AddComponent <FrictionWheelAnimator>(); } binder.Apply(); assetBundle.Unload(false); }