Пример #1
0
        protected override void OnUpdate(EntityCommandBuffer.Concurrent ecb)
        {
            lastSpawnTime -= Time.DeltaTime;
            if (lastSpawnTime <= 0)
            {
                lastSpawnTime = setup.spawnInterval;
                lastSpawnTime = float.MaxValue;

                var spawnCount     = setup.spawnCount;
                var spawnRadius    = setup.spawnRadius;
                var playerPos      = (float3)GameManager.GetPlayerPosition();
                var random         = new Random(mainRandom.NextUInt(uint.MinValue, uint.MaxValue));
                var enemyArchetype = enemyPrefab;

                float3 RandomPointOnCircle(float spawnRaduis)
                {
                    var pos = random.NextFloat2Direction() * spawnRaduis;

                    return(new float3(pos.x, 0, pos.y) + playerPos);
                }

                Job
                .WithCode(() =>
                {
                    var jobIndex = 0;
                    for (int i = 0; i < spawnCount; i++)
                    {
                        var enemy = ecb.CreateEntity(jobIndex, enemyArchetype);
                        ecb.AddComponent(jobIndex, enemy, new Translation {
                            Value = RandomPointOnCircle(spawnRadius)
                        });
                        ecb.AddComponent(jobIndex, enemy, new Rotation {
                            Value = quaternion.Euler(0, random.NextFloat(-math.PI, math.PI), 0)
                        });
                    }
                })
                .Schedule();
            }
        }