コード例 #1
0
 private void Start()
 {
     generateTerrain(detailLevel, spikiness);
     cloudPos = iniCloudPos;
     VerletTurkey.setInitialTurkeySpeed(turkeySpeed);
     turkeys.Add(new VerletTurkey(0.015f, wallWidth + wallStart, terrainStart));
     turkeys.Add(new VerletTurkey(0.015f, wallWidth + wallStart, terrainStart));
     turkeys.Add(new VerletTurkey(0.015f, wallWidth + wallStart, terrainStart));
     turkeys.Add(new VerletTurkey(0.015f, wallWidth + wallStart, terrainStart));
     turkeys.Add(new VerletTurkey(0.015f, wallWidth + wallStart, terrainStart));
 }
コード例 #2
0
    void intersectTurkeyWithScene(VerletTurkey turkey)
    {
        foreach (VerletPoint p in turkey.points)
        {
            if (p.pos.y <= 0)
            {
                turkey.displace(new Vector3(0, -p.pos.y, 0));
                if (turkey.inAir)
                {
                    turkey.ground();
                }
            }
            if (p.pos.y >= mountainTopY)
            {
                //turkey.displace(new Vector3(currWindForce * Time.deltaTime * 0.01f, 0, 0));
                //p.pos.x += currWindForce * Time.deltaTime * 0.01f;
            }

            // Cannonballs are sufficiently large releative to line-segment length in turkeys that we don't need to check
            // intersection with line segments, only points
            for (int i = 0; i < cannonballs.Count; i++)
            {
                Cannonball c = cannonballs[i];
                if (pointInCircle(p.pos, c.centre, c.radius))
                {
                    //Prevent the turkeys from getting too fast
                    float velX = Mathf.Clamp(c.velocity.x / 250, -turkeySpeed * 0.5f, turkeySpeed * 0.5f);
                    turkey.addExternalVelocity(new Vector3(velX, 0.0f));
                    cannonballs.RemoveAt(i);
                    i--;
                    continue;
                }
            }
        }

        //foreach (VerletConstraint c in turkey.constraints) c.resolve();
    }