Example #1
0
    public void ActionGenerateToHCs(long startSeed, float hcCurvature, float hcSpeed)
    {
        minHcCurvature = hcCurvature;
        minHcSpeed     = hcSpeed;

        hcTracks.Clear();
        for (int i = 0; i < jobList.Count; i++)
        {
            jobList[i].Abort();
        }
        jobList.Clear();


        jobListIndex = 0;

        for (int i = 0; i < 100; i++)
        {
            JobGenerateTrack job = new JobGenerateTrack();
            job.Seed            = startSeed + i;
            job.Width           = width;
            job.Terrain         = terrain;
            job.TerrainModifier = terrainModifier;
            jobList.Add(job);
        }


        for (int i = 0; i < 20; i++)
        {
            jobList[i].Start();
        }
    }
Example #2
0
    // Update is called once per frame
    void Update()
    {
        if (generate)
        {
            generate = false;
            ActionGenerateToSeed(seed);
        }
        if (generateRandom)
        {
            generateRandom = false;
            ActionGenerateRandom();
        }

        if (jobGenerateTrack != null && jobGenerateTrack.IsDone)
        {
            generatedTrack = jobGenerateTrack.Track;

            //generatedTrack.Analyze();

            //generatedTrack.GenerateMesh();

            //generatedTrack.SetTerrainModifier(terrainModifier);
            //generatedTrack.GenerateBorder();

            if (tmcps == null)
            {
            }
            else
            {
                float[,] predef = new float[tmcps.GetLength(0), tmcps.GetLength(1)];
                for (int x = 0; x < predef.GetLength(0); x++)
                {
                    for (int y = 0; y < predef.GetLength(1); y++)
                    {
                        predef[x, y] = tmcps[x, y].transform.position.y;
                    }
                }
                //generatedTrack.ModifyTerrain(terrain, predef);
            }


            if (generatedTrack.TerrainModifierCPs != null && tmcps == null)
            {
                /*
                 * tmcps = new GameObject[generatedTrack.TerrainModifierCPs.GetLength(0), generatedTrack.TerrainModifierCPs.GetLength(1)];
                 * for (int x = 0; x < generatedTrack.TerrainModifierCPs.GetLength(0); x++)
                 * {
                 *  for (int y = 0; y < generatedTrack.TerrainModifierCPs.GetLength(1); y++)
                 *  {
                 *      GameObject inst = Instantiate(cubeTerrainModifierCP);
                 *      tmcps[x, y] = inst;
                 *      tmcps[x, y].transform.position = new Vector3(x * 10f - 200f * 10f * 0.5f, generatedTrack.TerrainModifierCPs[x, y], y * 10f - 200f * 10f * 0.5f);
                 *  }
                 * }*/
            }

            jobGenerateTrack = null;

            /*for (int i = 0; i < supplyers.Length; i++)
             * {
             *  supplyers[i].Track = generatedTrack;
             *  supplyers[i].TrackUpdated();
             * }*/

            Render(generatedTrack);
        }

        if (jobList.Count > 0 && jobListIndex < jobList.Count)
        {
            if (jobList[jobListIndex].IsDone)
            {
                if (jobList[jobListIndex].Track.CurvatureIdeallineProfile.HC >= minHcCurvature && jobList[jobListIndex].Track.SpeedProfile.HC >= minHcSpeed)
                {
                    //generatedTrack.SetTerrainModifier(terrainModifier);
                    //generatedTrack.GenerateBorder();
                    hcTracks.Add(jobList[jobListIndex].Track);
                }

                int nextToStart = jobListIndex + 20;
                if (nextToStart < jobList.Count)
                {
                    jobList[nextToStart].Start();
                }
                jobListIndex++;
            }
        }
    }
Example #3
0
    // Use this for initialization
    void Start()
    {
        completeRenderer.DestryMesh();

        DiscreteInt2Generator.param_AnglePeriod     = param_AnglePeriod;
        DiscreteInt2Generator.param_AngleAmplitude  = param_AngleAmplitude;
        DiscreteInt2Generator.param_AngleAmplitude  = param_AngleAmplitude;
        DiscreteInt2Generator.param_RadiusPeriod    = param_RadiusPeriod;
        DiscreteInt2Generator.param_RadiusAmplitude = param_RadiusAmplitude;
        DiscreteInt2Generator.param_RadiusOffset    = param_RadiusOffset;
        DiscreteInt2Generator.param_SegDecMin       = param_SegDecMin;
        DiscreteInt2Generator.param_SegDecMax       = param_SegDecMax;
        DiscreteInt2Generator.param_SegDecPeriod    = param_SegDecPeriod;
        DiscreteInt2Generator.generationMode        = generationMode;
        //DiscreteInt2Generator.param_Circles = param_Circles;
        //DiscreteInt2Generator.param_Circles_Radius = param_Circles_Radius;
        //DiscreteInt2Generator.param_Circles_Use = param_Circles_UseCustom;

        if (circlesGeneration.CirclesMidpoints.Length == 0)
        {
            circlesGeneration.DoProc(seed, param_goalLength);
        }

        DiscreteInt2Generator.param_Circles           = new Vector2[circlesGeneration.CirclesMidpoints.Length];
        DiscreteInt2Generator.param_Circles_Ins       = new Vector2[circlesGeneration.CirclesMidpoints.Length];
        DiscreteInt2Generator.param_Circles_Outs      = new Vector2[circlesGeneration.CirclesMidpoints.Length];
        DiscreteInt2Generator.param_Circles_Radius    = new float[circlesGeneration.CirclesMidpoints.Length];
        DiscreteInt2Generator.param_Circles_Clockwise = new bool[circlesGeneration.CirclesMidpoints.Length];
        DiscreteInt2Generator.param_BetwLB            = circlesGeneration.BetwLBs;
        DiscreteInt2Generator.param_BetwLT            = circlesGeneration.BetwLTs;
        DiscreteInt2Generator.param_BetwRB            = circlesGeneration.BetwRBs;
        DiscreteInt2Generator.param_BetwRT            = circlesGeneration.BetwRTs;

        DiscreteInt2Generator.param_Circles_Use = circlesGeneration.CirclesMidpoints.Length > 0;

        for (int i = 0; i < circlesGeneration.CirclesMidpoints.Length; i++)
        {
            if (circlesGeneration.CirclesMidpoints[i].x != 0f && circlesGeneration.CirclesMidpoints[i].z != 0f)
            {
                DiscreteInt2Generator.param_Circles_Use = true;
            }

            DiscreteInt2Generator.param_Circles[i]           = new Vector2(circlesGeneration.CirclesMidpoints[i].x, circlesGeneration.CirclesMidpoints[i].z);
            DiscreteInt2Generator.param_Circles_Ins[i]       = new Vector2(circlesGeneration.CirclesIns[i].x, circlesGeneration.CirclesIns[i].z);
            DiscreteInt2Generator.param_Circles_Outs[i]      = new Vector2(circlesGeneration.CirclesOuts[i].x, circlesGeneration.CirclesOuts[i].z);
            DiscreteInt2Generator.param_Circles_Radius[i]    = circlesGeneration.CirclesRadius[i];
            DiscreteInt2Generator.param_Circles_Clockwise[i] = circlesGeneration.CirclesClockwise[i];
        }



        if (terrainModifier == null)
        {
            terrainModifier = new TerrainModifier(terrain);
        }

        meshFilter   = GetComponent <MeshFilter>();
        meshCollider = GetComponent <MeshCollider>();

        if (jobGenerateTrack != null && jobGenerateTrack.IsDone == false)
        {
            jobGenerateTrack.Abort();
            jobGenerateTrack = null;
        }

        if (jobGenerateTrack == null || jobGenerateTrack.IsDone)
        {
            jobGenerateTrack = new JobGenerateTrack();
            if (firstStart)
            {
                firstStart            = false;
                jobGenerateTrack.Seed = 58528152;
            }
            else
            {
                jobGenerateTrack.Seed = seed;
            }
            jobGenerateTrack.Width           = width;
            jobGenerateTrack.Suppliers       = supplyers;
            jobGenerateTrack.Terrain         = terrain;
            jobGenerateTrack.TerrainModifier = terrainModifier;


            //jobGenerateTrack.Track = DiscreteInt2Generator.GenerateTrack(10f, width, Seed);

            jobGenerateTrack.Start();
        }
    }