Ejemplo n.º 1
0
        public void Execute(ref ExecuteContext <Parameters, Providers> context)
        {
            if (context.Outputs.Count == 0)
            {
                return;
            }

            if (m_Random.state == 0)
            {
                m_Random.InitState(2747636419u);
            }

            var outputSampleBuffer = context.Outputs.GetSampleBuffer(0);
            var outputChannels     = outputSampleBuffer.Channels;
            var parameters         = context.Parameters;
            var inputCount         = context.Inputs.Count;

            for (var channel = 0; channel < outputChannels; ++channel)
            {
                var outputBuffer = outputSampleBuffer.GetBuffer(channel);
                for (var i = 0; i < inputCount; i++)
                {
                    var inputBuff = context.Inputs.GetSampleBuffer(i).GetBuffer(channel);
                    for (var s = 0; s < outputBuffer.Length; s++)
                    {
                        outputBuffer[s] += inputBuff[s];
                    }
                }

                for (var s = 0; s < outputBuffer.Length; s++)
                {
                    outputBuffer[s] += m_Random.NextFloat() * 2.0f - 1.0f + parameters.GetFloat(Parameters.Offset, s);
                }
            }
        }
Ejemplo n.º 2
0
        void Start()
        {
            m_ResultsDelayedQueries = new bool[m_QueryCount];
            m_ResultsDirectQueries  = new bool[m_QueryCountPerFrame];

            m_BlackBoard = new BlackBoard(m_EntryCount, m_QueryCount);

            m_BlackBoardSystem = World.Active.GetOrCreateSystem <BlackBoardSystem>();
            m_BlackBoardSystem.BlackBoards.Add("TestBlackBoard", m_BlackBoard);

            m_Rand = new Random();
            m_Rand.InitState();

            for (int i = 0; i < m_EntryCount; i++)
            {
                m_BlackBoard.SetEntry(i, m_Rand.NextInt());
            }

            for (int i = 0; i < m_QueryCount; i++)
            {
                var value1 = m_Rand.NextInt();
                var value2 = m_Rand.NextInt();

                m_BlackBoard.SetQuery(
                    i,
                    m_Rand.NextInt(0, m_EntryCount),
                    value1 < value2 ? value1 : value2,
                    value1 < value2 ? value2 : value1);
            }
        }
Ejemplo n.º 3
0
 private void Start()
 {
     _followCamera = FindObjectOfType <FollowCamera>();
     _animator     = GetComponent <Animator>();
     _random       = new Random();
     _random.InitState();
 }
Ejemplo n.º 4
0
        static Mesh CreateMesh(Material material)
        {
            var random = new Random();

            random.InitState(12345);

            var vertices = new Vector3[POINT_MAX * 2];

            for (var i = 0; i < POINT_MAX; ++i)
            {
                float x     = random.NextFloat(-RANGE, RANGE);
                float y     = random.NextFloat(-RANGE, RANGE);
                float z     = random.NextFloat(-RANGE, RANGE);
                var   point = new Vector3(x, y, z);
                vertices[i * 2 + 0] = point;
                vertices[i * 2 + 1] = point;
            }
            var indices = new int[POINT_MAX * 2];

            for (var i = 0; i < POINT_MAX * 2; ++i)
            {
                indices[i] = i;
            }
            var colors = new Color[POINT_MAX * 2];

            for (var i = 0; i < POINT_MAX; ++i)
            {
                colors[i * 2 + 0] = new Color(0f, 0f, 0f /* not used */, 1f);
                colors[i * 2 + 1] = new Color(0f, 0f, 0f /* not used */, 0f);
            }
            var uvs = new Vector2[POINT_MAX * 2];

            for (var i = 0; i < POINT_MAX; ++i)
            {
                uvs[i * 2 + 0] = new Vector2(1f, 0f);
                uvs[i * 2 + 1] = new Vector2(0f, 1f);
            }

            var mesh = new Mesh();

            mesh.name     = "debris";
            mesh.vertices = vertices;
            mesh.colors   = colors;
            mesh.uv       = uvs;
            mesh.bounds   = new Bounds(Vector3.zero, Vector3.one * 99999999);
            mesh.SetIndices(indices, MeshTopology.Lines, 0);
            mesh.UploadMeshData(true /* markNoLogerReadable */);

            _material = material;
            material.SetFloat("_Range", RANGE);
            material.SetFloat("_RangeR", 1f / RANGE);
            const float cpower = 0.4f;

            material.SetColor(MaterialColor, new Color(cpower, cpower, cpower));

            // mesh_ = mesh;
            return(mesh);
        }
Ejemplo n.º 5
0
 public static void Initialize(Material material)
 {
     // pool_ = new ObjectPool<Spark>(NUM*BATCH_NUM);
     _random.InitState(12345);
     _mesh = CreateMesh(material);
     _matricesInRenderer = new Matrix4x4[1] {
         Matrix4x4.identity,
     };
 }
Ejemplo n.º 6
0
        public void TestPerformance()
        {
            //map
            for (var i = 0; i < 100; i++)
            {
                var node = EntityManager.CreateEntity();
                EntityManager.AddComponentData(node, new TestNode
                {
                    Cost = 1, Id = i
                });
            }

            //request
            var random = new Random();

            random.InitState();
            for (var i = 0; i < 1000; i++)
            {
                var request = EntityManager.CreateEntity();
                EntityManager.AddComponentData(request, new PathFindingRequest
                {
                    StartId = 0, GoalId = random.NextInt(90, 99)
                });
            }

            var system = World.GetOrCreateSystem <TestSystem>();

            system.resultECB =
                World.GetOrCreateSystem <EndInitializationEntityCommandBufferSystem>();
            system.cleanECB = World.GetOrCreateSystem <EndSimulationEntityCommandBufferSystem>();

            Stopwatch sw = Stopwatch.StartNew();

            system.Update();
            system.resultECB.Update();
            EntityManager.CompleteAllJobs();

            var resultQuery =
                EntityManager.CreateEntityQuery(
                    typeof(PathResult), typeof(PathRoute));
            var resultEntities = resultQuery.ToEntityArray(Allocator.TempJob);
            var results        = resultQuery.ToComponentDataArray <PathResult>(Allocator.TempJob);

            Assert.AreEqual(1000, results.Length);
            foreach (var result in results)
            {
                Assert.AreEqual(true, result.Success, result.Log.ToString());
            }

            resultEntities.Dispose();
            results.Dispose();

            sw.Stop();
            Debug.Log(sw.ElapsedMilliseconds);
        }
Ejemplo n.º 7
0
        static string GetColorStringFromHash(uint hash)
        {
            var rnd = new Unity.Mathematics.Random();

            rnd.InitState(hash);

            var color    = Color.HSVToRGB(rnd.NextFloat(0.1f, 0.9f), rnd.NextFloat(0.5f, 1), rnd.NextFloat(0.5f, 1));
            var colorStr = ColorUtility.ToHtmlStringRGB(color);

            return(colorStr);
        }
Ejemplo n.º 8
0
        IEnumerator ParallelGenRoutine()
        {
            if (!_isRandomInited)
            {
                _isRandomInited = true;
                Random.InitState(_seed);
                _random.InitState((uint)_seed);
            }
            while (_chunkGenQueue.Count > 0)
            {
                Profiler.BeginSample("Chunk procgen");

                if (!_chunkGenQueue.TryDequeue(out var chunkPos))
                {
                    break;
                }
                var x            = chunkPos.X;
                var z            = chunkPos.Z;
                var heightmapJob = new HeightGenJob()
                {
                    BaseScale = 20,
                    Seed      = _seed,
                    SizeX     = Chunk.CHUNK_SIZE_X,
                    SizeY     = Chunk.CHUNK_SIZE_Z,
                    OffsetX   = Chunk.CHUNK_SIZE_X * x,
                    OffsetY   = Chunk.CHUNK_SIZE_Z * z,
                    Height    = new Unity.Collections.NativeArray <byte>(Chunk.CHUNK_SIZE_X * Chunk.CHUNK_SIZE_Z, Unity.Collections.Allocator.Persistent)
                };
                var hHandle = heightmapJob.Schedule(256, 128);
                hHandle.Complete();
                var waterLevel = Utils.WorldOptions.WaterLevel;
                var blockCount = Chunk.CHUNK_SIZE_X * Chunk.CHUNK_SIZE_Y * Chunk.CHUNK_SIZE_Z;
                var fillJob    = new ChunkGenJob()
                {
                    SizeH     = Chunk.CHUNK_SIZE_X,
                    SizeY     = Chunk.CHUNK_SIZE_Y,
                    Random    = _random,
                    SeaLevel  = waterLevel,
                    HeightMap = heightmapJob.Height,
                    Blocks    = new Unity.Collections.NativeArray <BlockData>(blockCount, Unity.Collections.Allocator.Persistent)
                };

                var fillHandler = fillJob.Schedule(blockCount, 512);
                var height      = heightmapJob.Height.ToArray();
                var maxY        = waterLevel;
                for (int i = 0; i < height.Length; i++)
                {
                    if (height[i] > maxY)
                    {
                        maxY = height[i];
                    }
                }
                Profiler.EndSample();
                if (!ImmediateMode)
                {
                    yield return(new WaitForEndOfFrame());
                }
                fillHandler.Complete();

                var readyChunk = new GeneratedChunkData(new Int3(x * Chunk.CHUNK_SIZE_X, 0, z * Chunk.CHUNK_SIZE_Z), fillJob.Blocks.ToArray(), heightmapJob.Height.ToArray(), maxY + 1, waterLevel);
                _readyChunks.Enqueue(readyChunk);

                heightmapJob.Height.Dispose();
                fillJob.Blocks.Dispose();
            }
            _routineRuuning = false;
            yield break;
        }
Ejemplo n.º 9
0
 public void Init()
 {
     random = new Random();
     random.InitState((uint)(Time.realtimeSinceStartup * 100));
 }