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;
		}
Exemple #2
0
        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;
        }
Exemple #5
0
        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();
            });
        }
Exemple #7
0
        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;
        }