Exemplo n.º 1
0
 private static bool CreateTrafficLightBase_IsInIntersection(GSDRoadIntersection GSDRI, ref Vector3 StartVec, ref Vector3 EndVec)
 {
     return(GSDRI.ContainsLine(StartVec, EndVec));
 }
Exemplo n.º 2
0
		private static bool CreateTrafficLightBase_IsInIntersection(GSDRoadIntersection GSDRI,ref Vector3 StartVec,ref Vector3 EndVec){
			return GSDRI.ContainsLine(StartVec,EndVec);
		}
Exemplo n.º 3
0
        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);
        }