public RaceTrackCurve(float terrainWidth, Vector3 terrainScale) { float nodecenter = 1.0f * terrainWidth / 4f; float variation = 1.0f, strength = .6f; int direction = 2 * UniversalRandom.GetInstance().Next(2) - 1; float height = .14f; //float height = (float)UniversalRandom.GetInstance().NextDouble() / 3f; //nodes.Add(new CurveNode() //{ // Position = terrainScale * new Vector3(0, height, -nodecenter), // Tangent = Vector3.Transform(terrainScale * new Vector3(nodecenter, 0, 0), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1) / 2)) //}); float step = MathHelper.TwoPi / 5f; for (float i = 0; i < MathHelper.TwoPi; i += step) { height = (float)(.15 + .2 * (UniversalRandom.GetInstance().NextDouble() - .5)); nodes.Add(new CurveNode() { Position = terrainScale * Vector3.Transform(new Vector3(nodecenter, height, 0), Matrix.CreateRotationY(direction * i)), Tangent = Vector3.Transform(terrainScale * new Vector3(0, 0, -direction * strength * nodecenter), Matrix.CreateRotationY(direction * (i + (float)(variation * UniversalRandom.GetInstance().NextDouble())))) }); } //nodes.Add(new CurveNode() //{ // Position = terrainScale * new Vector3(nodecenter, height, -nodecenter / 2), // //Tangent = Vector3.Transform(terrainScale * new Vector3(nodecenter, 0, 0), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1) / 2)) // Tangent = Vector3.Transform(terrainScale * new Vector3(variation * nodecenter/2, 0, variation * nodecenter), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1))) //}); //nodes.Add(new CurveNode() //{ // Position = terrainScale * new Vector3(nodecenter / 2, height, nodecenter), // //Tangent = Vector3.Transform(terrainScale * new Vector3(-nodecenter, 0, 0), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1) / 2)) // Tangent = Vector3.Transform(terrainScale * new Vector3(variation * -nodecenter / 2, 0, variation * nodecenter), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1))) //}); //nodes.Add(new CurveNode() //{ // Position = terrainScale * new Vector3(-nodecenter / 2, height, nodecenter), // //Tangent = Vector3.Transform(terrainScale * new Vector3(-nodecenter, 0, 0), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1) / 2)) // Tangent = Vector3.Transform(terrainScale * new Vector3(variation * -nodecenter, 0, variation * nodecenter / 2), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1))) //}); //nodes.Add(new CurveNode() //{ // Position = terrainScale * new Vector3(-nodecenter, height, -nodecenter / 2), // //Tangent = Vector3.Transform(terrainScale * new Vector3(nodecenter, 0, 0), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1) / 2)) // Tangent = Vector3.Transform(terrainScale * new Vector3(0, 0, variation * -nodecenter), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1))) //}); }
private void InitGradients() { for (int i = 0; i < GradientSizeTable; i++) { float z = 1f - 2f * (float)UniversalRandom.GetInstance().NextDouble(); float r = (float)Math.Sqrt(1f - z * z); float theta = 2 * (float)Math.PI * (float)UniversalRandom.GetInstance().NextDouble(); _gradients[i * 3] = r * (float)Math.Cos(theta); _gradients[i * 3 + 1] = r * (float)Math.Sin(theta); _gradients[i * 3 + 2] = z; } }
/// <summary> /// Adds a new particle to the system. /// </summary> public void AddParticle(Vector3 position, Vector3 velocity) { // Figure out where in the circular queue to allocate the new particle. int nextFreeParticle = firstFreeParticle + 1; if (nextFreeParticle >= settings.MaxParticles) { nextFreeParticle = 0; } // If there are no free particles, we just have to give up. if (nextFreeParticle == firstRetiredParticle) { return; } // Adjust the input velocity based on how much // this particle system wants to be affected by it. velocity *= settings.EmitterVelocitySensitivity; // Add in some random amount of horizontal velocity. float horizontalVelocity = MathHelper.Lerp(settings.MinHorizontalVelocity, settings.MaxHorizontalVelocity, (float)UniversalRandom.GetInstance().NextDouble()); double horizontalAngle = UniversalRandom.GetInstance().NextDouble() * MathHelper.TwoPi; velocity.X += horizontalVelocity * (float)Math.Cos(horizontalAngle); velocity.Z += horizontalVelocity * (float)Math.Sin(horizontalAngle); // Add in some random amount of vertical velocity. velocity.Y += MathHelper.Lerp(settings.MinVerticalVelocity, settings.MaxVerticalVelocity, (float)UniversalRandom.GetInstance().NextDouble()); // Choose four random control values. These will be used by the vertex // shader to give each particle a different size, rotation, and color. Color randomValues = new Color((byte)UniversalRandom.GetInstance().Next(255), (byte)UniversalRandom.GetInstance().Next(255), (byte)UniversalRandom.GetInstance().Next(255), (byte)UniversalRandom.GetInstance().Next(255)); // Fill in the particle vertex structure. for (int i = 0; i < 4; i++) { particles[firstFreeParticle * 4 + i].Position = position; particles[firstFreeParticle * 4 + i].Velocity = velocity; particles[firstFreeParticle * 4 + i].Random = randomValues; particles[firstFreeParticle * 4 + i].Time = currentTime; } firstFreeParticle = nextFreeParticle; }
public Stone(GameManager game) : base() { this.game = game; Model = stoneVariants[UniversalRandom.GetInstance().Next(stoneVariants.Count)]; }
public BirdCurve() { float nodecenter = 1000; float variation = .8f; nodes.Add(new CurveNode() { Position = new Vector3(0, 5000f, -nodecenter), Tangent = Vector3.Transform(new Vector3(variation * nodecenter, 0, 0), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1))) }); nodes.Add(new CurveNode() { Position = new Vector3(nodecenter, 5000f, 0), Tangent = Vector3.Transform(new Vector3(0, 0, variation * nodecenter), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1))) }); nodes.Add(new CurveNode() { Position = new Vector3(0, 5000f, nodecenter), Tangent = Vector3.Transform(new Vector3(variation * -nodecenter, 0, 0), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1))) }); nodes.Add(new CurveNode() { Position = new Vector3(-nodecenter, 5000f, 0), Tangent = Vector3.Transform(new Vector3(0, 0, variation * -nodecenter), Matrix.CreateRotationY(MathHelper.PiOver4 * (float)(2 * UniversalRandom.GetInstance().NextDouble() - 1))) }); }
public override void Update(GameTime gameTime) { if (spawn) { spawn = false; flash = 1; Game.GetService <CameraComponent>().CurrentCamera.Shake(); List <SubBolt> branches = new List <SubBolt>(); branches.Add(new SubBolt() { position = startPosition + new Vector3( 5000 * ((float)UniversalRandom.GetInstance().NextDouble() - .5f), 0, 5000 * ((float)UniversalRandom.GetInstance().NextDouble() - .5f)), target = endPosition + new Vector3( 20000 * ((float)UniversalRandom.GetInstance().NextDouble() - .5f), 0, 20000 * ((float)UniversalRandom.GetInstance().NextDouble() - .5f)) }); while (branches.Count > 0) { for (int i = 0; i < branches.Count; i++) { Vector3 dTarget = branches[i].target - branches[i].position; float distance = dTarget.Length(); // Remove if (distance < 150) { branches.RemoveAt(i--); continue; } // Add if (UniversalRandom.GetInstance().NextDouble() < .002 && i == 0) { var newBolt = branches[i].Clone(); newBolt.target = newBolt.position + Vector3.Transform(dTarget, Matrix.CreateFromYawPitchRoll( rotationSeed * ((float)UniversalRandom.GetInstance().NextDouble() - .5f), rotationSeed * ((float)UniversalRandom.GetInstance().NextDouble() - .5f), rotationSeed * ((float)UniversalRandom.GetInstance().NextDouble() - .5f))); newBolt.target = Vector3.Lerp(newBolt.target, branches[0].target, .4f); branches.Add(newBolt); } branches[i].minDist = distance; dTarget.Normalize(); // Offset dTarget Vector3 offset = Vector3.Transform(2f * dTarget, Matrix.CreateFromYawPitchRoll( rotationSeed * ((float)UniversalRandom.GetInstance().NextDouble() - .5f), rotationSeed * ((float)UniversalRandom.GetInstance().NextDouble() - .5f), rotationSeed * ((float)UniversalRandom.GetInstance().NextDouble() - .5f))); for (int j = 0; j < 2; j++) { particleSystem.AddParticle(branches[i].position, Vector3.Zero); branches[i].position += 10 * j * offset; } } } } if (flash > 0) { flash = Math.Max(flash - .01f, 0); } Game.GetService <DirectionalLight>().Ambient = flash * flashColor; base.Update(gameTime); }
public BirchTree(GameManager game) : base() { this.game = game; Model = birchTreesVariants[UniversalRandom.GetInstance().Next(birchTreesVariants.Count)]; }