private static bool CreateTrafficLightBase_IsInIntersection(GSDRoadIntersection GSDRI, ref Vector3 StartVec, ref Vector3 EndVec) { return(GSDRI.ContainsLine(StartVec, EndVec)); }
private static bool CreateTrafficLightBase_IsInIntersection(GSDRoadIntersection GSDRI,ref Vector3 StartVec,ref Vector3 EndVec){ return GSDRI.ContainsLine(StartVec,EndVec); }
private static void CreateTrafficLightBases_Do(ref GameObject MasterGameObj, bool bIsTrafficLight1) { GSDRoadIntersection GSDRI = MasterGameObj.GetComponent <GSDRoadIntersection>(); GSDSplineC tSpline = GSDRI.Node1.GSDSpline; bool bIsRB = true; // float RoadWidth = tSpline.tRoad.RoadWidth(); float LaneWidth = tSpline.tRoad.opt_LaneWidth; float ShoulderWidth = tSpline.tRoad.opt_ShoulderWidth; int Lanes = tSpline.tRoad.opt_Lanes; int LanesHalf = Lanes / 2; float LanesForInter = -1; if (GSDRI.rType == GSDRoadIntersection.RoadTypeEnum.BothTurnLanes) { LanesForInter = LanesHalf + 1f; } else if (GSDRI.rType == GSDRoadIntersection.RoadTypeEnum.TurnLane) { LanesForInter = LanesHalf + 1f; } else { LanesForInter = LanesHalf - 1 + 1f; } float DistFromCorner = (ShoulderWidth * 0.45f); float TLDistance = (LanesForInter * LaneWidth) + DistFromCorner; GameObject tObjRR = null; GameObject tObjRL = null; GameObject tObjLL = null; GameObject tObjLR = null; // Vector3 xDir = default(); Vector3 tDir = default; float Mass = 12500f; Vector3 COM = new Vector3(0f, 0f, 4f); Vector3 zeroVect = new Vector3(0f, 0f, 0f); Vector3 StartVec = default; Vector3 EndVec = default; // bool bContains = false; // MeshFilter MF = null; // Vector3[] tVerts = null; Rigidbody RB = null; //Get four points: Vector3 tPosRR = default; Vector3 tPosRL = default; Vector3 tPosLR = default; Vector3 tPosLL = default; GetFourPoints(GSDRI, out tPosRR, out tPosRL, out tPosLL, out tPosLR, DistFromCorner); //Cleanup: CleanupIntersections(MasterGameObj); float[] tempDistances = new float[4]; tempDistances[0] = Vector3.Distance(GSDRI.CornerRL, GSDRI.CornerLL); tempDistances[1] = Vector3.Distance(GSDRI.CornerRL, GSDRI.CornerRR); tempDistances[2] = Vector3.Distance(GSDRI.CornerLR, GSDRI.CornerLL); tempDistances[3] = Vector3.Distance(GSDRI.CornerLR, GSDRI.CornerRR); float MaxDistanceStart = Mathf.Max(tempDistances); bool OrigPoleAlignment = GSDRI.bRegularPoleAlignment; //Node1: //RL: tObjRL = CreateTrafficLight(TLDistance, true, true, MaxDistanceStart, GSDRI.bTrafficPoleStreetLight, tSpline.tRoad.GSDRS.opt_bSaveMeshes); // xDir = (GSDRI.CornerRL - GSDRI.transform.position).normalized; tDir = TrafficLightBase_GetRot_RL(GSDRI, tSpline, DistFromCorner); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjRL.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjRL.transform.parent = MasterGameObj.transform; StartVec = tPosRL; EndVec = (tDir.normalized * TLDistance) + StartVec; if (!GSDRI.bRegularPoleAlignment && GSDRI.ContainsLine(StartVec, EndVec)) { //Convert to regular alignment if necessary tObjRL.transform.parent = null; tDir = TrafficLightBase_GetRot_RL(GSDRI, tSpline, DistFromCorner, true); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjRL.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjRL.transform.parent = MasterGameObj.transform; } else { GSDRI.bRegularPoleAlignment = true; if (tObjRL != null) { Object.DestroyImmediate(tObjRL); } tObjRL = CreateTrafficLight(TLDistance, true, true, MaxDistanceStart, GSDRI.bTrafficPoleStreetLight, tSpline.tRoad.GSDRS.opt_bSaveMeshes); // xDir = (GSDRI.CornerRL - GSDRI.transform.position).normalized; tDir = TrafficLightBase_GetRot_RL(GSDRI, tSpline, DistFromCorner); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjRL.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjRL.transform.parent = MasterGameObj.transform; StartVec = tPosRL; EndVec = (tDir.normalized * TLDistance) + StartVec; GSDRI.bRegularPoleAlignment = OrigPoleAlignment; } if (bIsRB) { RB = tObjRL.AddComponent <Rigidbody>(); RB.mass = Mass; RB.centerOfMass = COM; tObjRL.AddComponent <GSDRigidBody>(); } tObjRL.transform.position = tPosRL; tObjRL.transform.name = "TrafficLightRL"; //LR: tObjLR = CreateTrafficLight(TLDistance, true, true, MaxDistanceStart, GSDRI.bTrafficPoleStreetLight, tSpline.tRoad.GSDRS.opt_bSaveMeshes); // xDir = (GSDRI.CornerLR - GSDRI.transform.position).normalized; tDir = TrafficLightBase_GetRot_LR(GSDRI, tSpline, DistFromCorner); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjLR.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjLR.transform.parent = MasterGameObj.transform; StartVec = tPosLR; EndVec = (tDir.normalized * TLDistance) + StartVec; if (!GSDRI.bRegularPoleAlignment && GSDRI.ContainsLine(StartVec, EndVec)) { //Convert to regular alignment if necessary tObjLR.transform.parent = null; tDir = TrafficLightBase_GetRot_LR(GSDRI, tSpline, DistFromCorner, true); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjLR.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjLR.transform.parent = MasterGameObj.transform; } else { GSDRI.bRegularPoleAlignment = true; if (tObjLR != null) { Object.DestroyImmediate(tObjLR); } tObjLR = CreateTrafficLight(TLDistance, true, true, MaxDistanceStart, GSDRI.bTrafficPoleStreetLight, tSpline.tRoad.GSDRS.opt_bSaveMeshes); // xDir = (GSDRI.CornerLR - GSDRI.transform.position).normalized; tDir = TrafficLightBase_GetRot_LR(GSDRI, tSpline, DistFromCorner); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjLR.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjLR.transform.parent = MasterGameObj.transform; StartVec = tPosLR; EndVec = (tDir.normalized * TLDistance) + StartVec; GSDRI.bRegularPoleAlignment = OrigPoleAlignment; } if (bIsRB) { RB = tObjLR.AddComponent <Rigidbody>(); RB.mass = Mass; RB.centerOfMass = COM; tObjLR.AddComponent <GSDRigidBody>(); } tObjLR.transform.position = tPosLR; tObjLR.transform.name = "TrafficLightLR"; //Node2: //RR: tObjRR = CreateTrafficLight(TLDistance, true, true, MaxDistanceStart, GSDRI.bTrafficPoleStreetLight, tSpline.tRoad.GSDRS.opt_bSaveMeshes); // xDir = (GSDRI.CornerRR - GSDRI.transform.position).normalized; tDir = TrafficLightBase_GetRot_RR(GSDRI, tSpline, DistFromCorner); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjRR.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjRR.transform.parent = MasterGameObj.transform; StartVec = tPosRR; EndVec = (tDir.normalized * TLDistance) + StartVec; if (!GSDRI.bRegularPoleAlignment && GSDRI.ContainsLine(StartVec, EndVec)) { //Convert to regular alignment if necessary tObjRR.transform.parent = null; tDir = TrafficLightBase_GetRot_RR(GSDRI, tSpline, DistFromCorner, true); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjRR.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, 0f, 0f); tObjRR.transform.parent = MasterGameObj.transform; } else { GSDRI.bRegularPoleAlignment = true; if (tObjRR != null) { Object.DestroyImmediate(tObjRR); } tObjRR = CreateTrafficLight(TLDistance, true, true, MaxDistanceStart, GSDRI.bTrafficPoleStreetLight, tSpline.tRoad.GSDRS.opt_bSaveMeshes); // xDir = (GSDRI.CornerRR - GSDRI.transform.position).normalized; tDir = TrafficLightBase_GetRot_RR(GSDRI, tSpline, DistFromCorner); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjRR.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjRR.transform.parent = MasterGameObj.transform; StartVec = tPosRR; EndVec = (tDir.normalized * TLDistance) + StartVec; GSDRI.bRegularPoleAlignment = OrigPoleAlignment; } if (bIsRB) { RB = tObjRR.AddComponent <Rigidbody>(); RB.mass = Mass; RB.centerOfMass = COM; tObjRR.AddComponent <GSDRigidBody>(); } tObjRR.transform.position = tPosRR; tObjRR.transform.name = "TrafficLightRR"; //LL: tObjLL = CreateTrafficLight(TLDistance, true, true, MaxDistanceStart, GSDRI.bTrafficPoleStreetLight, tSpline.tRoad.GSDRS.opt_bSaveMeshes); // xDir = (GSDRI.CornerLL - GSDRI.transform.position).normalized; tDir = TrafficLightBase_GetRot_LL(GSDRI, tSpline, DistFromCorner); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjLL.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjLL.transform.parent = MasterGameObj.transform; StartVec = tPosLL; EndVec = (tDir.normalized * TLDistance) + StartVec; if (!GSDRI.bRegularPoleAlignment && GSDRI.ContainsLine(StartVec, EndVec)) { //Convert to regular alignment if necessary tObjLL.transform.parent = null; tDir = TrafficLightBase_GetRot_LL(GSDRI, tSpline, DistFromCorner, true); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjLL.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, 0f, 0f); tObjLL.transform.parent = MasterGameObj.transform; } else { GSDRI.bRegularPoleAlignment = true; if (tObjLL != null) { Object.DestroyImmediate(tObjLL); } tObjLL = CreateTrafficLight(TLDistance, true, true, MaxDistanceStart, GSDRI.bTrafficPoleStreetLight, tSpline.tRoad.GSDRS.opt_bSaveMeshes); // xDir = (GSDRI.CornerLL - GSDRI.transform.position).normalized; tDir = TrafficLightBase_GetRot_LL(GSDRI, tSpline, DistFromCorner); if (tDir == zeroVect) { tDir = new Vector3(0f, 0.0001f, 0f); } tObjLL.transform.rotation = Quaternion.LookRotation(tDir) * Quaternion.Euler(-90f, -180f, 0f); tObjLL.transform.parent = MasterGameObj.transform; StartVec = tPosLL; EndVec = (tDir.normalized * TLDistance) + StartVec; GSDRI.bRegularPoleAlignment = OrigPoleAlignment; } if (bIsRB) { RB = tObjLL.AddComponent <Rigidbody>(); RB.mass = Mass; RB.centerOfMass = COM; tObjLL.AddComponent <GSDRigidBody>(); } tObjLL.transform.position = tPosLL; tObjLL.transform.name = "TrafficLightLL"; //Create the actual lights: CreateTrafficLightMains(MasterGameObj, tObjRR, tObjRL, tObjLL, tObjLR); }