Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- using Kopernicus;
- using LibNoise;
- using Kopernicus.Configuration.ModLoader;
- namespace PQSMod_VertexExtraNoise
- {
- public class PQSMod_VertexExtraNoise : PQSMod
- {
- public enum NoiseType
- {
- RiggedMultifractal = 0, //0
- Billow = 1, //1
- Perlin = 2, //2
- PerfectRiggedMultifractal = 3, //3
- PerfectBillow = 4, //4
- PerfectPerlin = 5, //5
- Voronoi = 6, //6
- PerfectVoronoi = 7, //7
- Simplex = 8, //8
- PerfectSimplex = 9, //9
- Multiply = 10, //10
- Power = 11, //11
- Offset = 12 //12
- }
- public NoiseType noiseType;
- public Boolean useEnum;
- public Int32 modMode;
- public Double deformity;
- public Double frequency;
- public Double persistence;
- public Double lacunarity;
- public Boolean enableDistance;
- public Int32 octaves;
- public Int32 seed;
- public NoiseQuality mode;
- public Boolean addRange;
- public Double minAltitude;
- public Double maxAltitude;
- Double trueMin;
- Double trueMax;
- //Let's store the noise as object
- Double Perfectionize(Double noise)
- {
- //First, make noise on scale of 0<=>2 rather than -1<=>1, then divide by 2 to make 0<=>1
- return (noise + 1) / 2;
- }
- Billow b;
- RidgedMultifractal r;
- Perlin p;
- Simplex s;
- Voronoi v;
- public override void OnSetup()
- {
- trueMax = maxAltitude + sphere.radius;
- trueMin = minAltitude + sphere.radius;
- if (!useEnum)
- {
- if (modMode == 0)
- {
- noiseType = NoiseType.RiggedMultifractal;
- }
- if (modMode == 1)
- {
- noiseType = NoiseType.Billow;
- }
- if (modMode == 2)
- {
- noiseType = NoiseType.Perlin;
- }
- if (modMode == 3)
- {
- noiseType = NoiseType.PerfectRiggedMultifractal;
- }
- if (modMode == 4)
- {
- noiseType = NoiseType.PerfectBillow;
- }
- if (modMode == 5)
- {
- noiseType = NoiseType.PerfectPerlin;
- }
- if (modMode == 6)
- {
- noiseType = NoiseType.Voronoi;
- }
- if (modMode == 7)
- {
- noiseType = NoiseType.PerfectVoronoi;
- }
- if (modMode == 8)
- {
- noiseType = NoiseType.Simplex;
- }
- if (modMode == 9)
- {
- noiseType = NoiseType.PerfectSimplex;
- }
- if (modMode == 10)
- {
- noiseType = NoiseType.Multiply;
- }
- if (modMode == 11)
- {
- noiseType = NoiseType.Power;
- }
- if (modMode == 12)
- {
- noiseType = NoiseType.Offset;
- }
- }
- }
- public override void OnVertexBuildHeight(PQS.VertexBuildData data)
- {
- Double heightToSea = data.vertHeight - sphere.radius;
- if (modMode == 1)
- {
- b = new Billow(frequency, lacunarity, persistence, octaves, seed, mode);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += b.GetValue(data.directionFromCenter) * deformity;
- }
- }
- else
- {
- data.vertHeight += b.GetValue(data.directionFromCenter) * deformity;
- }
- }
- else if (modMode == 10)
- {
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += heightToSea * deformity;
- }
- }
- else
- {
- data.vertHeight += heightToSea * deformity;
- }
- }
- else if (modMode == 12)
- {
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += deformity;
- }
- }
- else
- {
- data.vertHeight += deformity;
- }
- }
- else if (modMode == 4)
- {
- b = new Billow(frequency, lacunarity, persistence, octaves, seed, mode);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += Perfectionize(b.GetValue(data.directionFromCenter)) * deformity;
- }
- }
- else
- {
- data.vertHeight += Perfectionize(b.GetValue(data.directionFromCenter)) * deformity;
- }
- }
- else if (modMode == 5)
- {
- p = new Perlin(frequency, lacunarity, persistence, octaves, seed, mode);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += Perfectionize(p.GetValue(data.directionFromCenter)) * deformity;
- }
- }
- else
- {
- data.vertHeight += Perfectionize(p.GetValue(data.directionFromCenter)) * deformity;
- }
- }
- else if (modeMode == 3)
- {
- r = new RidgedMultifractal(frequency, lacunarity, octaves, seed, mode);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += Perfectionize(p.GetValue(data.directionFromCenter)) * deformity;
- }
- }
- else
- {
- data.vertHeight += Perfectionize(p.GetValue(data.directionFromCenter)) * deformity;
- }
- }
- else if (modMode == 9)
- {
- s = new Simplex(seed, octaves, persistence, frequency);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += Perfectionize(s.noise(data.directionFromCenter)) * deformity;
- }
- }
- else
- {
- data.vertHeight += Perfectionize(s.noise(data.directionFromCenter)) * deformity;
- }
- }
- else if (modMode == 7)
- {
- v = new Voronoi(frequency, persistence, seed, enableDistance);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += Perfectionize(v.GetValue(data.directionFromCenter)) * deformity;
- }
- }
- else
- {
- data.vertHeight += Perfectionize(v.GetValue(data.directionFromCenter)) * deformity;
- }
- }
- else if (modMode == 2)
- {
- p = new Perlin(frequency, lacunarity, persistence, octaves, seed, mode);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += p.GetValue(data.directionFromCenter) * deformity;
- }
- }
- else
- {
- data.vertHeight += p.GetValue(data.directionFromCenter) * deformity;
- }
- }
- else if (modMode == 11)
- {
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight = System.Math.Pow(heightToSea, deformity);
- }
- }
- else
- {
- data.vertHeight = System.Math.Pow(heightToSea, deformity);
- }
- }
- else if (modMode == 0)
- {
- r = new RidgedMultifractal(frequency, lacunarity, octaves, seed, mode);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += r.GetValue(data.directionFromCenter) * deformity;
- }
- }
- else
- {
- data.vertHeight += r.GetValue(data.directionFromCenter) * deformity;
- }
- }
- else if (noiseType == NoiseType.Simplex)
- {
- s = new Simplex(seed, octaves, persistence, frequency);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += s.noise(data.directionFromCenter) * deformity;
- }
- }
- else
- {
- data.vertHeight += s.noise(data.directionFromCenter) * deformity;
- }
- }
- else if (modMode == 8)
- {
- v = new Voronoi(frequency, persistence, seed, enableDistance);
- if (addRange)
- {
- if (data.vertHeight >= trueMin && data.vertHeight <= trueMax)
- {
- data.vertHeight += v.GetValue(data.directionFromCenter) * deformity;
- }
- }
- else
- {
- data.vertHeight += v.GetValue(data.directionFromCenter) * deformity;
- }
- }
- else
- {
- throw new ArgumentNullException("Noise type is unreadable.", nameof(noiseType));
- }
- }
- }
- [RequireConfigType(ConfigType.Node)]
- public class VertexExtraNoise : ModLoader<PQSMod_VertexExtraNoise>
- {
- [ParserTarget("noiseType")]
- public EnumParser<PQSMod_VertexExtraNoise.NoiseType> noiseType
- {
- get { return (PQSMod_VertexExtraNoise.NoiseType)mod.modMode; }
- set { mod.modMode = (int)value; }
- }
- [ParserTarget("deformity")]
- public NumericParser<double> deformity
- {
- get { return mod.deformity; }
- set { mod.deformity = value; }
- }
- [ParserTarget("useEnum")]
- public NumericParser<bool> useEnum
- {
- get { return mod.useEnum; }
- set { mod.useEnum = value; }
- }
- //[ParserTarget("modMode")]
- //public EnumParser< modMode
- //{
- // get { return mod.modMode; }
- // set { mod.modMode = value; }
- //}
- [ParserTarget("frequency")]
- public NumericParser<double> frequency
- {
- get { return mod.frequency; }
- set { mod.frequency = value; }
- }
- [ParserTarget("persistence")]
- public NumericParser<double> persistence
- {
- get { return mod.persistence; }
- set { mod.persistence = value; }
- }
- [ParserTarget("lacunarity")]
- public NumericParser<double> lacunarity
- {
- get { return mod.lacunarity; }
- set { mod.lacunarity = value; }
- }
- [ParserTarget("enableDistance")]
- public NumericParser<bool> enableDistance
- {
- get { return mod.enableDistance; }
- set { mod.enableDistance = value; }
- }
- [ParserTarget("octaves")]
- public NumericParser<int> octaves
- {
- get { return mod.octaves; }
- set { mod.octaves = Mathf.Clamp(value, 1, 30); }
- }
- [ParserTarget("seed")]
- public NumericParser<int> seed
- {
- get { return mod.seed; }
- set { mod.seed = value; }
- }
- [ParserTarget("mode")]
- public EnumParser<KopernicusNoiseQuality> mode
- {
- get { return (KopernicusNoiseQuality)(int)mod.mode; }
- set { mod.mode = (NoiseQuality)(int) value.value; }
- }
- [ParserTarget("addRange")]
- public NumericParser<bool> addRange
- {
- get { return mod.addRange; }
- set { mod.addRange = value; }
- }
- [ParserTarget("maxAltitude")]
- public NumericParser<double> maxAltitude
- {
- get { return mod.maxAltitude; }
- set { mod.maxAltitude = value; }
- }
- [ParserTarget("minAltitude")]
- public NumericParser<double> minAltitude
- {
- get { return mod.minAltitude; }
- set { mod.minAltitude = value; }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment