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)); }
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(); }