Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // The radial island radius is based on overlapping sine waves
- static public var ISLAND_FACTOR:Number = 1.07; // 1.0 means no small islands; 2.0 leads to a lot
- static public function makeRadial(seed:int):Function {
- var islandRandom:PM_PRNG = new PM_PRNG();
- islandRandom.seed = seed;
- var bumps:int = islandRandom.nextIntRange(1, 6);
- var startAngle:Number = islandRandom.nextDoubleRange(0, 2*Math.PI);
- var dipAngle:Number = islandRandom.nextDoubleRange(0, 2*Math.PI);
- var dipWidth:Number = islandRandom.nextDoubleRange(0.2, 0.7);
- function inside(q:Point):Boolean {
- var angle:Number = Math.atan2(q.y, q.x);
- var length:Number = 0.5 * (Math.max(Math.abs(q.x), Math.abs(q.y)) + q.length);
- var r1:Number = 0.5 + 0.40*Math.sin(startAngle + bumps*angle + Math.cos((bumps+3)*angle));
- var r2:Number = 0.7 - 0.20*Math.sin(startAngle + bumps*angle - Math.sin((bumps+2)*angle));
- if (Math.abs(angle - dipAngle) < dipWidth
- || Math.abs(angle - dipAngle + 2*Math.PI) < dipWidth
- || Math.abs(angle - dipAngle - 2*Math.PI) < dipWidth) {
- r1 = r2 = 0.2;
- }
- return (length < r1 || (length > r1*ISLAND_FACTOR && length < r2));
- }
- return inside;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement