Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Audio;
- using Microsoft.Xna.Framework.Content;
- using Microsoft.Xna.Framework.GamerServices;
- using Microsoft.Xna.Framework.Graphics;
- using Microsoft.Xna.Framework.Input;
- using Microsoft.Xna.Framework.Media;
- using Microsoft.Xna.Framework.Net;
- using Microsoft.Xna.Framework.Storage;
- using System.IO;
- namespace TileTest
- {
- static class NoiseGenerator
- {
- public static int Seed { get; private set; }
- public static int Octaves { get; set; }
- public static double Amplitude { get; set; }
- public static double Persistence { get; set; }
- public static double Frequency { get; set; }
- static NoiseGenerator()
- {
- Random r = new Random();
- //LOOOL
- NoiseGenerator.Seed = r.Next(Int32.MaxValue);
- NoiseGenerator.Octaves = 6;
- NoiseGenerator.Amplitude = 12;
- NoiseGenerator.Frequency = 0.045;
- NoiseGenerator.Persistence = 0.3;
- }
- public static void generateNoise(int iOctaves, int iAmplitude, double iFrequency, double iPersistence)
- {
- Random r = new Random();
- //LOOOL
- NoiseGenerator.Seed = r.Next(Int32.MaxValue);
- NoiseGenerator.Octaves = iOctaves;
- NoiseGenerator.Amplitude = iAmplitude;
- NoiseGenerator.Frequency = iFrequency;
- NoiseGenerator.Persistence = iPersistence;
- }
- public static double Noise(int x, int y)
- {
- //returns -1 to 1
- double total = 0.0;
- double freq = NoiseGenerator.Frequency, amp = NoiseGenerator.Amplitude;
- for (int i = 0; i < NoiseGenerator.Octaves; ++i)
- {
- total = total + NoiseGenerator.Smooth(x * freq, y * freq) * amp;
- freq *= 2;
- amp *= NoiseGenerator.Persistence;
- }
- if (total < -2.4) total = -2.4;
- else if (total > 2.4) total = 2.4;
- return (total / 2.4);
- }
- public static double NoiseGeneration(int x, int y)
- {
- int n = x + y * 57;
- n = (n << 13) ^ n;
- return (1.0 - ((n * (n * n * 15731 + 789221) + NoiseGenerator.Seed) & 0x7fffffff) / 1073741824.0);
- }
- private static double Interpolate(double x, double y, double a)
- {
- double value = (1 - Math.Cos(a * Math.PI)) * 0.5;
- return x * (1 - value) + y * value;
- }
- private static double Smooth(double x, double y)
- {
- double n1 = NoiseGeneration((int)x, (int)y);
- double n2 = NoiseGeneration((int)x + 1, (int)y);
- double n3 = NoiseGeneration((int)x, (int)y + 1);
- double n4 = NoiseGeneration((int)x + 1, (int)y + 1);
- double i1 = Interpolate(n1, n2, x - (int)x);
- double i2 = Interpolate(n3, n4, x - (int)x);
- return Interpolate(i1, i2, y - (int)y);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement