public static void Initialize(VehicleCollection collection, Transform customPrefabs) { if (sm_initialized) return; Debug.Log("Traffic++: Initializing Hearse.\n"); VehicleInfo originalHearse = collection.m_prefabs.Where(p => p.name == "Hearse").FirstOrDefault(); if (originalHearse == null) throw new KeyNotFoundException("Hearse was not found on " + collection.name); GameObject instance = GameObject.Instantiate<GameObject>(originalHearse.gameObject); instance.name = "Hearse"; instance.transform.SetParent(customPrefabs); GameObject.Destroy(instance.GetComponent<HearseAI>()); instance.AddComponent<CustomHearseAI>(); VehicleInfo hearse = instance.GetComponent<VehicleInfo>(); hearse.m_prefabInitialized = false; hearse.m_vehicleAI = null; MethodInfo initMethod = typeof(VehicleCollection).GetMethod("InitializePrefabs", BindingFlags.Static | BindingFlags.NonPublic); Initializer.QueuePrioritizedLoadingAction((IEnumerator)initMethod.Invoke(null, new object[] { collection.name, new[] { hearse }, new string[] { "Hearse" } })); sm_initialized = true; }
static void Initialize(NetCollection collection, Transform customPrefabs, string prefabName, string instanceName) { Debug.Log("Traffic++: Initializing " + instanceName); NetInfo originalLargeRoad = collection.m_prefabs.Where(p => p.name == prefabName).FirstOrDefault(); if (originalLargeRoad == null) { throw new KeyNotFoundException(prefabName + " was not found on " + collection.name); } GameObject instance = GameObject.Instantiate <GameObject>(originalLargeRoad.gameObject); instance.name = instanceName; MethodInfo initMethod = typeof(NetCollection).GetMethod("InitializePrefabs", BindingFlags.Static | BindingFlags.NonPublic); if ((CSLTraffic.Options & OptionsManager.ModOptions.GhostMode) == OptionsManager.ModOptions.GhostMode) { instance.transform.SetParent(originalLargeRoad.transform.parent); Initializer.QueuePrioritizedLoadingAction((IEnumerator)initMethod.Invoke(null, new object[] { collection.name, new[] { instance.GetComponent <NetInfo>() }, new string[] { } })); sm_initialized = true; return; } instance.transform.SetParent(customPrefabs); GameObject.Destroy(instance.GetComponent <RoadAI>()); instance.AddComponent <LargeRoadWithBusLanesAI>(); NetInfo largeRoadWithBusLanes = instance.GetComponent <NetInfo>(); largeRoadWithBusLanes.m_prefabInitialized = false; largeRoadWithBusLanes.m_netAI = null; Initializer.QueuePrioritizedLoadingAction((IEnumerator)initMethod.Invoke(null, new object[] { collection.name, new[] { largeRoadWithBusLanes }, new string[] { } })); Initializer.QueueLoadingAction(() => { largeRoadWithBusLanes.m_UIPriority = 20; largeRoadWithBusLanes.m_lanes[4].m_laneType = (NetInfo.LaneType)((byte)64); largeRoadWithBusLanes.m_lanes[5].m_laneType = (NetInfo.LaneType)((byte)64); if (Singleton <SimulationManager> .instance.m_metaData.m_invertTraffic == SimulationMetaData.MetaBool.True) { largeRoadWithBusLanes.m_lanes[4].m_direction = NetInfo.Direction.Forward; largeRoadWithBusLanes.m_lanes[5].m_direction = NetInfo.Direction.Backward; } }); }
public static void Initialize(VehicleCollection collection, Transform customPrefabs) { if (sm_initialized) { return; } Debug.Log("Traffic++: Initializing Bus.\n"); VehicleInfo originalBus = collection.m_prefabs.Where(p => p.name.Contains("Bus")).FirstOrDefault(); if (originalBus == null) { throw new KeyNotFoundException("Bus was not found on " + collection.name); } GameObject instance = GameObject.Instantiate <GameObject>(originalBus.gameObject); instance.name = "Bus"; instance.transform.SetParent(customPrefabs); BusAI busAI = instance.GetComponent <BusAI>(); TransportInfo transportInfo = busAI.m_transportInfo; GameObject.Destroy(instance.GetComponent <BusAI>()); CustomBusAI customBusAI = instance.AddComponent <CustomBusAI>(); customBusAI.m_transportInfo = transportInfo; VehicleInfo bus = instance.GetComponent <VehicleInfo>(); bus.m_prefabInitialized = false; bus.m_vehicleAI = null; MethodInfo initMethod = typeof(VehicleCollection).GetMethod("InitializePrefabs", BindingFlags.Static | BindingFlags.NonPublic); Initializer.QueuePrioritizedLoadingAction((IEnumerator)initMethod.Invoke(null, new object[] { collection.name, new[] { bus }, new string[] { "Bus" } })); sm_initialized = true; }
public static void Initialize(VehicleCollection collection, Transform customPrefabs) { if (sm_initialized) { return; } Debug.Log("Traffic++: Initializing Cargo Trucks."); int length = collection.m_prefabs.Length; VehicleInfo[] vehicles = new VehicleInfo[length]; string[] vehicleNames = new string[length]; for (int i = 0; i < length; i++) { VehicleInfo vehicleInfo = collection.m_prefabs[i]; if (vehicleInfo == null) { throw new KeyNotFoundException("Null prefab in the collection " + collection.name); } vehicleNames[i] = vehicleInfo.name; GameObject gameObject = GameObject.Instantiate <GameObject>(vehicleInfo.gameObject); gameObject.name = vehicleNames[i]; gameObject.transform.SetParent(customPrefabs); GameObject.Destroy(gameObject.GetComponent <CargoTruckAI>()); gameObject.AddComponent <CustomCargoTruckAI>(); vehicles[i] = gameObject.GetComponent <VehicleInfo>(); vehicles[i].m_prefabInitialized = false; vehicles[i].m_vehicleAI = null; } MethodInfo method = typeof(VehicleCollection).GetMethod("InitializePrefabs", BindingFlags.NonPublic | BindingFlags.Static); Initializer.QueuePrioritizedLoadingAction((IEnumerator)method.Invoke(null, new object[] { collection.name, vehicles, vehicleNames })); CustomCargoTruckAI.sm_initialized = true; }
static void Initialize(NetCollection netCollection, TransportCollection transportCollection, Transform customPrefabs, string prefabName, string transportName) { Debug.Log("Traffic++: Initializing " + prefabName); NetInfo originalBusLine = netCollection.m_prefabs.Where(p => p.name == prefabName).FirstOrDefault(); if (originalBusLine == null) { throw new KeyNotFoundException(prefabName + " was not found on " + netCollection.name); } GameObject instance = GameObject.Instantiate <GameObject>(originalBusLine.gameObject);; instance.name = prefabName; instance.transform.SetParent(customPrefabs); GameObject.Destroy(instance.GetComponent <TransportLineAI>()); instance.AddComponent <BusTransportLineAI>(); NetInfo busLine = instance.GetComponent <NetInfo>(); busLine.m_prefabInitialized = false; busLine.m_netAI = null; MethodInfo initMethod = typeof(NetCollection).GetMethod("InitializePrefabs", BindingFlags.Static | BindingFlags.NonPublic); Initializer.QueuePrioritizedLoadingAction((IEnumerator)initMethod.Invoke(null, new object[] { netCollection.name, new[] { busLine }, new string[] { prefabName } })); // transport TransportInfo originalTransportInfo = transportCollection.m_prefabs.Where(p => p.name.Contains(transportName)).FirstOrDefault(); if (originalTransportInfo == null) { throw new KeyNotFoundException(transportName + " Transport Info not found on " + transportCollection.name); } originalTransportInfo.m_netInfo = busLine; }
static void Initialize(NetCollection collection, Transform customPrefabs, string prefabName, string instanceName) { Debug.Log("Traffic++: Initializing " + instanceName); NetInfo originalPedestrianPath = collection.m_prefabs.Where(p => p.name == prefabName).FirstOrDefault(); if (originalPedestrianPath == null) { throw new KeyNotFoundException(prefabName + " was not found on " + collection.name); } GameObject instance = GameObject.Instantiate <GameObject>(originalPedestrianPath.gameObject); instance.name = instanceName; MethodInfo initMethod = typeof(NetCollection).GetMethod("InitializePrefabs", BindingFlags.Static | BindingFlags.NonPublic); if ((CSLTraffic.Options & OptionsManager.ModOptions.GhostMode) == OptionsManager.ModOptions.GhostMode) { instance.transform.SetParent(originalPedestrianPath.transform.parent); Initializer.QueuePrioritizedLoadingAction((IEnumerator)initMethod.Invoke(null, new object[] { collection.name, new[] { instance.GetComponent <NetInfo>() }, new string[] { } })); sm_initialized = true; return; } instance.transform.SetParent(customPrefabs); GameObject.Destroy(instance.GetComponent <PedestrianPathAI>()); instance.AddComponent <ZonablePedestrianPathAI>(); NetInfo zonablePedestrianPath = instance.GetComponent <NetInfo>(); zonablePedestrianPath.m_prefabInitialized = false; zonablePedestrianPath.m_netAI = null; Initializer.QueuePrioritizedLoadingAction((IEnumerator)initMethod.Invoke(null, new object[] { collection.name, new[] { zonablePedestrianPath }, new string[] { } })); Initializer.QueueLoadingAction(() => { zonablePedestrianPath.m_flattenTerrain = true; zonablePedestrianPath.m_halfWidth = 5f; zonablePedestrianPath.m_autoRemove = false; zonablePedestrianPath.m_flatJunctions = true; zonablePedestrianPath.m_surfaceLevel = 0f; zonablePedestrianPath.m_segmentLength = 46f; zonablePedestrianPath.m_pavementWidth = 1.875f; zonablePedestrianPath.m_class = ScriptableObject.CreateInstance <ItemClass>(); zonablePedestrianPath.m_class.m_service = ItemClass.Service.Road; zonablePedestrianPath.m_class.m_subService = ItemClass.SubService.None; zonablePedestrianPath.m_class.m_level = ItemClass.Level.Level1; typeof(NetInfo).GetFieldByName("m_UICategory").SetValue(zonablePedestrianPath, "RoadsSmall"); bool leftHandDriving = Singleton <SimulationManager> .instance.m_metaData.m_invertTraffic == SimulationMetaData.MetaBool.True; if ((CSLTraffic.Options & OptionsManager.ModOptions.DisableCentralLaneOnPedestrianRoads) == OptionsManager.ModOptions.None) { NetInfo.Lane[] lanes = new NetInfo.Lane[3]; // Central Pedestrian lane lanes[0] = zonablePedestrianPath.m_lanes[0]; lanes[0].m_width = 9f; if (prefabName.Contains("Pavement")) { PropInfo lampProp = lanes[0].m_laneProps.m_props[0].m_prop; lanes[0].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); lanes[0].m_laneProps.m_props = new NetLaneProps.Prop[2]; lanes[0].m_laneProps.m_props[0] = new NetLaneProps.Prop() { m_prop = lampProp, m_position = new Vector3(-4.75f, 0f, 0f), m_repeatDistance = 60f, m_segmentOffset = 0f }; lanes[0].m_laneProps.m_props[1] = new NetLaneProps.Prop() { m_prop = lampProp, m_position = new Vector3(4.75f, 0f, 0f), m_repeatDistance = 60f, m_segmentOffset = 30f }; } // Backward Lane lanes[1] = new NetInfo.Lane(); lanes[1].m_position = -1.5f; lanes[1].m_width = 3f; lanes[1].m_verticalOffset = 0f; lanes[1].m_stopOffset = 0.1f; lanes[1].m_speedLimit = 0.3f; lanes[1].m_direction = leftHandDriving ? NetInfo.Direction.Forward : NetInfo.Direction.Backward; lanes[1].m_laneType = (NetInfo.LaneType)((byte)32); lanes[1].m_vehicleType = VehicleInfo.VehicleType.Car; lanes[1].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); lanes[1].m_allowStop = true; lanes[1].m_useTerrainHeight = false; // Forward Lane lanes[2] = new NetInfo.Lane(); lanes[2].m_position = 1.5f; lanes[2].m_width = 3f; lanes[2].m_verticalOffset = 0f; lanes[2].m_stopOffset = 0.1f; lanes[2].m_speedLimit = 0.3f; lanes[2].m_direction = leftHandDriving ? NetInfo.Direction.Backward : NetInfo.Direction.Forward; lanes[2].m_laneType = (NetInfo.LaneType)((byte)32); lanes[2].m_vehicleType = VehicleInfo.VehicleType.Car; lanes[2].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); lanes[2].m_allowStop = true; lanes[2].m_useTerrainHeight = false; zonablePedestrianPath.m_lanes = lanes; } else { NetInfo.Lane[] lanes = new NetInfo.Lane[4]; // Left Pedestrian lane lanes[0] = new NetInfo.Lane(); lanes[0].m_position = -4f; lanes[0].m_width = 2f; lanes[0].m_verticalOffset = zonablePedestrianPath.m_lanes[0].m_verticalOffset; lanes[0].m_stopOffset = zonablePedestrianPath.m_lanes[0].m_stopOffset; lanes[0].m_speedLimit = zonablePedestrianPath.m_lanes[0].m_speedLimit; lanes[0].m_direction = NetInfo.Direction.Both; lanes[0].m_laneType = NetInfo.LaneType.Pedestrian; lanes[0].m_vehicleType = VehicleInfo.VehicleType.None; lanes[0].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); if (prefabName.Contains("Pavement")) { lanes[0].m_laneProps.m_props = new NetLaneProps.Prop[1]; lanes[0].m_laneProps.m_props[0] = new NetLaneProps.Prop() { m_prop = zonablePedestrianPath.m_lanes[0].m_laneProps.m_props[0].m_prop, m_position = new Vector3(-.75f, 0f, 0f), m_repeatDistance = 60f, m_segmentOffset = 0f }; } lanes[0].m_allowStop = true; lanes[0].m_useTerrainHeight = false; // Backward Lane lanes[1] = new NetInfo.Lane(); lanes[1].m_position = -1.5f; lanes[1].m_width = 3f; lanes[1].m_verticalOffset = 0f; lanes[1].m_stopOffset = 0.1f; lanes[1].m_speedLimit = 0.3f; lanes[1].m_direction = leftHandDriving ? NetInfo.Direction.Forward : NetInfo.Direction.Backward; lanes[1].m_laneType = (NetInfo.LaneType)((byte)32); lanes[1].m_vehicleType = VehicleInfo.VehicleType.Car; lanes[1].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); lanes[1].m_allowStop = true; lanes[1].m_useTerrainHeight = false; // Forward Lane lanes[2] = new NetInfo.Lane(); lanes[2].m_position = 1.5f; lanes[2].m_width = 3f; lanes[2].m_verticalOffset = 0f; lanes[2].m_stopOffset = 0.1f; lanes[2].m_speedLimit = 0.3f; lanes[2].m_direction = leftHandDriving ? NetInfo.Direction.Backward : NetInfo.Direction.Forward; lanes[2].m_laneType = (NetInfo.LaneType)((byte)32); lanes[2].m_vehicleType = VehicleInfo.VehicleType.Car; lanes[2].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); lanes[2].m_allowStop = true; lanes[2].m_useTerrainHeight = false; // Right Pedestrian lane lanes[3] = new NetInfo.Lane(); lanes[3].m_position = 4f; lanes[3].m_width = 2f; lanes[3].m_verticalOffset = zonablePedestrianPath.m_lanes[0].m_verticalOffset; lanes[3].m_stopOffset = zonablePedestrianPath.m_lanes[0].m_stopOffset; lanes[3].m_speedLimit = zonablePedestrianPath.m_lanes[0].m_speedLimit; lanes[3].m_direction = NetInfo.Direction.Both; lanes[3].m_laneType = NetInfo.LaneType.Pedestrian; lanes[3].m_vehicleType = VehicleInfo.VehicleType.None; lanes[3].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); if (prefabName.Contains("Pavement")) { lanes[3].m_laneProps.m_props = new NetLaneProps.Prop[1]; lanes[3].m_laneProps.m_props[0] = new NetLaneProps.Prop() { m_prop = zonablePedestrianPath.m_lanes[0].m_laneProps.m_props[0].m_prop, m_position = new Vector3(.75f, 0f, 0f), m_repeatDistance = 60f, m_segmentOffset = 30f }; } lanes[3].m_allowStop = true; lanes[3].m_useTerrainHeight = false; zonablePedestrianPath.m_lanes = lanes; } zonablePedestrianPath.InitializePrefab(); }); }
public static void Initialize(NetCollection collection, Transform customPrefabs) { if (ZonablePedestrianBridgeAI.sm_initialized) { return; } Debug.Log("Traffic++: Initializing Zonable Pedestrian Elevated.\n"); NetInfo originalPedestrianBridge = collection.m_prefabs.Where(p => p.name == "Pedestrian Elevated").FirstOrDefault(); if (originalPedestrianBridge == null) { throw new KeyNotFoundException("Pedestrian Elevated was not found on " + collection.name); } GameObject instance = GameObject.Instantiate <GameObject>(originalPedestrianBridge.gameObject); instance.name = "Zonable Pedestrian Elevated"; MethodInfo initMethod = typeof(NetCollection).GetMethod("InitializePrefabs", BindingFlags.Static | BindingFlags.NonPublic); if ((CSLTraffic.Options & OptionsManager.ModOptions.GhostMode) == OptionsManager.ModOptions.GhostMode) { instance.transform.SetParent(originalPedestrianBridge.transform.parent); Initializer.QueuePrioritizedLoadingAction((IEnumerator)initMethod.Invoke(null, new object[] { collection.name, new NetInfo[] { instance.GetComponent <NetInfo>() }, new string[] { } })); sm_initialized = true; return; } instance.transform.SetParent(customPrefabs); GameObject.Destroy(instance.GetComponent <PedestrianBridgeAI>()); instance.AddComponent <ZonablePedestrianBridgeAI>(); NetInfo zonablePedestrianBridge = instance.GetComponent <NetInfo>(); zonablePedestrianBridge.m_prefabInitialized = false; zonablePedestrianBridge.m_netAI = null; Initializer.QueuePrioritizedLoadingAction((IEnumerator)initMethod.Invoke(null, new object[] { collection.name, new[] { zonablePedestrianBridge }, new string[] { } })); Initializer.QueueLoadingAction(() => { zonablePedestrianBridge.m_halfWidth = 4f; zonablePedestrianBridge.m_class = ScriptableObject.CreateInstance <ItemClass>(); zonablePedestrianBridge.m_class.m_service = ItemClass.Service.Road; zonablePedestrianBridge.m_class.m_subService = ItemClass.SubService.None; zonablePedestrianBridge.m_class.m_level = ItemClass.Level.Level1; typeof(NetInfo).GetFieldByName("m_UICategory").SetValue(zonablePedestrianBridge, "RoadsSmall"); // Pedestrian lane NetInfo.Lane[] lanes = new NetInfo.Lane[3]; lanes[0] = zonablePedestrianBridge.m_lanes[0]; lanes[0].m_width = 6f; //PropInfo lampProp = lanes[0].m_laneProps.m_props[0].m_prop; lanes[0].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); // TODO: Put the lamps back on bridges after resizing them //lanes[0].m_laneProps.m_props = new NetLaneProps.Prop[1]; //lanes[0].m_laneProps.m_props[0] = new NetLaneProps.Prop() { m_prop = lampProp, m_position = new Vector3(-4f, 0f, 0f), m_repeatDistance = 30f }; bool leftHandDriving = Singleton <SimulationManager> .instance.m_metaData.m_invertTraffic == SimulationMetaData.MetaBool.True; // Backward Lane lanes[1] = new NetInfo.Lane(); lanes[1].m_position = -1.5f; lanes[1].m_width = 3f; lanes[1].m_verticalOffset = 0f; lanes[1].m_stopOffset = 0.1f; lanes[1].m_speedLimit = 0.3f; lanes[1].m_direction = leftHandDriving ? NetInfo.Direction.Forward : NetInfo.Direction.Backward; lanes[1].m_laneType = (NetInfo.LaneType)((byte)32); lanes[1].m_vehicleType = VehicleInfo.VehicleType.Car; lanes[1].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); lanes[1].m_allowStop = true; lanes[1].m_useTerrainHeight = false; // Forward Lane lanes[2] = new NetInfo.Lane(); lanes[2].m_position = 1.5f; lanes[2].m_width = 3f; lanes[2].m_verticalOffset = 0f; lanes[2].m_stopOffset = 0.1f; lanes[2].m_speedLimit = 0.3f; lanes[2].m_direction = leftHandDriving ? NetInfo.Direction.Backward : NetInfo.Direction.Forward; lanes[2].m_laneType = (NetInfo.LaneType)((byte)32); lanes[2].m_vehicleType = VehicleInfo.VehicleType.Car; lanes[2].m_laneProps = ScriptableObject.CreateInstance <NetLaneProps>(); lanes[2].m_allowStop = true; lanes[2].m_useTerrainHeight = false; zonablePedestrianBridge.m_lanes = lanes; zonablePedestrianBridge.InitializePrefab(); }); sm_initialized = true; }