Exemple #1
0
    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);
    }