void SpawnARunner(int frame) { float spawnRadius = PitGenerator.pitRadius + spawnDistanceFromPit; float3 pos = new float3(math.cos(spawnAngle) * spawnRadius, 0f, math.sin(spawnAngle) * spawnRadius); Runner runner = new Runner(); BoneColor boneColor = new BoneColor(); Runner.Init(ref runner, ref boneColor, pos, random.NextUInt(), globals, frame); int mode = Mathf.FloorToInt(Time.time / 8f); if (mode % 2 == 0) { spawnAngle = random.NextFloat() * 2f * (float)math.PI; spawnSpacing = RandomRange(.04f, (float)math.PI * .4f); } else { spawnAngle += spawnSpacing; } var entity = manager.CreateEntity(archetype); manager.SetComponentData(entity, runner); manager.SetComponentData(entity, boneColor); }
// Initialize a Runner and BoneColor component, to make the runner appear far away from the sinkhole, facing at the // sinkhole, and running towards the sinkhole, with a random bone color. public static void Init(ref Runner runner, ref BoneColor boneColor, float3 pos, uint seed, Globals globals, int frame) { runner.random = new Random(seed); runner.stanceWidth = 0.35f; runner.position.Value = pos; runner.ragdollMode = 0; runner.dead = 0; float3 hsv = math.sin(globals.fixedUpdate[frame].time * new float3(1, 1 / 1.37f, 1 / 1.618f)) * .5f + .5f; boneColor.Value = runner.RandomColorHSV(hsv.x, hsv.x, hsv.y * .2f + .1f, hsv.y * .4f + .15f, hsv.z * .15f + .25f, hsv.z * .35f + .25f); //hipHeight = Random.Range(1.5f,2.5f); //shoulderHeight = hipHeight + Random.Range(1.2f,1.8f); runner.hipHeight = 1.8f; runner.shoulderHeight = 3.5f; runner.stepDuration = runner.RandomRange(.25f, .33f); runner.xzDamping = runner.random.NextFloat() * .02f + .002f; runner.spreadForce = runner.RandomRange(.0005f, .0015f); runner.timeSinceSpawn = 0f; for (int i = 0; i < Bones.Length - 1; i++) { runner.boneThicknesses[i] = .2f; } runner.boneThicknesses[Bones.Length - 1] = .4f; runner.foot[0].animTimer = runner.random.NextFloat(); runner.foot[1].animTimer = runner.random.NextFloat(); runner.foot[0].animating = 1; runner.foot[1].animating = 1; runner.legLength = math.sqrt(runner.hipHeight * runner.hipHeight + runner.stanceWidth * runner.stanceWidth) * 1.1f; UpdateOneTick(ref runner, globals, frame); }