Unity3d C to Javascript conversion?

Hi, I am working on a game that requires perlin noise, and the code that I found was written in C. Now, I don't know much about C, but it looked fairly similar to JS, so I had my try at converting it. However, I was rewarded with a multitude of errors. Here is the "converted" version. Do you guys know what I did wrong? Here is the code:

generateUniformNoise()
{
    baseNoise[][]; //an array for our uniform noise
    for(i = 0; i < width; i++)
        for(j = 0; j < height; j++)
            //random float between 0 and 1
            baseNoise*[j] = random();*
 *return baseNoise;*
*}*
*generateSmoothNoise(baseNoise, k)*
*{*
 *samplePeriod = 1 << k; // calculates 2 ^ k*
 *sampleFrequency = 1.0f / samplePeriod;*
 *for(i = 0; i < width; i++)*
 *{*
 *//calculate the horizontal sampling indices*
 <em>sample_i0 = (i / samplePeriod) * samplePeriod;</em>
 *sample_i1 = (sample_i0 + samplePeriod) % width; //wrap around*
 <em>horizontal_blend = (i  sample_i0) * sampleFrequency;</em>
 *for(j = 0; j < height; j++)*
 *{*
 *//calculate the vertical sampling indices*
 <em>sample_j0 = (j / samplePeriod) * samplePeriod;</em>
 *sample_j1 = (sample_j0 + samplePeriod) % height; //wrap around*
 <em>vertical_blend = (j  sample_j0) * sampleFrequency;</em>
 *//blend the top two corners*
 *top = interpolate(baseNoise[sample_i0][sample_j0],*
 *baseNoise[sample_i1][sample_j0], horizontal_blend);*
 *//blend the bottom two corners*
 *bottom = interpolate(baseNoise[sample_i0][sample_j1],*
 *baseNoise[sample_i1][sample_j1], horizontal_blend);*
 *//final blend*
 _smooth*[j] =*_
 <em>*interpolate(top, bottom, vertical_blend);*</em>
 _*}*_
 _*}*_
 _*return smooth;*_
_*}*_
_*interpolate(x0, x1, alpha) //alpha lies between 0 and 1*_
_*{*_
 <em>_return (1  alpha) * x0 + alpha * x1;_</em>
_*}*_
_*generatePerlin(baseNoise, octaveCount)*_
_*{*_
 _*smooth[]; //an array of 2D arrays containing*_
 _*persistance = 0.5f;*_
 _*//generate smooth noise*_
 _*for(i = 0; i < octaveCount; i++)*_
 <em>_smooth *= generateSmoothNoise(baseNoise, i);*_</em>
 <em>_*perlinNoise[][]; //an array of floats initialised to 0*_</em>
 <em>_*amplitude = 1.0f;*_</em>
 <em>_*totalAmplitude = 0.0f;*_</em>
 <em>_*//blend noise together*_</em>
 <em>_*for(k = 0; k < octaveCount; k++)*_</em>
 <em>_*{*_</em>
 <em><em>_amplitude *= persistance;_</em></em>
 <em>_*totalAmplitude += amplitude;*_</em>
 <em>_*for(i = 0; i < width; i++)*_</em>
 <em>_*for(j = 0; j < height; j++)*_</em>
 <em><em><em>perlinNoise<em>[j] += smooth[k]_[j] * weight;_</em></em></em></em>
 <em><em><em>_*}*_</em></em></em>
 <em><em><em>_*//normalisation*_</em></em></em>
 <em><em><em>_*for(k = 0; k < octaveCount; k++)*_</em></em></em>
 <em><em><em>_*{*_</em></em></em>
 <em><em><em><em>_perlinNoise*[j] /= totalAmplitude;*_</em></em></em></em>
 <em><em><em><em>_*}*_</em></em></em></em>
 <em><em><em><em>_*return perlinNoise;*_</em></em></em></em>
<em><em><em><em>_*}*_</em></em></em></em>
<em><em><em><em>_*//and here is the half-translated code-*_</em></em></em></em>
<em><em><em><em>_*function generateUniformNoise()*_</em></em></em></em>
<em><em><em><em>_*{*_</em></em></em></em>
 <em><em><em><em>_*var baseNoise; //an array for our uniform noise*_</em></em></em></em>
 <em><em><em><em>_*for(i = 0; i < 100; i++)*_</em></em></em></em>
 <em><em><em><em>_*for(j = 0; j < 100; j++)*_</em></em></em></em>
 <em><em><em><em>_*//random float between 0 and 1*_</em></em></em></em>
 <em><em><em><em>_*baseNoise[i,j] = Random.Range(0.0,1.0);*_</em></em></em></em>
 <em><em><em><em>_*return baseNoise;*_</em></em></em></em>
<em><em><em><em>_*}*_</em></em></em></em>
<em><em><em><em>_*function generateSmoothNoise(baseNoise, k)*_</em></em></em></em>
<em><em><em><em>_*{*_</em></em></em></em>
 <em><em><em><em>_*var samplePeriod = 1 << k; // calculates 2 ^ k*_</em></em></em></em>
 <em><em><em><em>_*var sampleFrequency = 1.0f / samplePeriod;*_</em></em></em></em>
 <em><em><em><em>_*for(i = 0; i < width; i++)*_</em></em></em></em>
 <em><em><em><em>_*{*_</em></em></em></em>
 <em><em><em><em>_*//calculate the horizontal sampling indices*_</em></em></em></em>
 <em><em><em><em><em><em>var sample_i0 = (i / samplePeriod) * samplePeriod;</em></em></em></em></em></em>
 <em><em><em><em><em>*var sample_i1 = (sample_i0+samplePeriod)%width; //wrap around*</em></em></em></em></em>
 <em><em><em><em><em><em>var horizontal_blend = (isample_i0)*sampleFrequency;</em></em></em></em></em></em>
 <em><em><em><em>_*for(j = 0; j < height; j++)*_</em></em></em></em>
 <em><em><em><em>_*{*_</em></em></em></em>
 <em><em><em><em>_*//calculate the vertical sampling indices*_</em></em></em></em>
 <em><em><em><em><em><em>var sample_j0 = (j / samplePeriod) * samplePeriod;</em></em></em></em></em></em>
 <em><em><em><em><em>*var sample_j1 = (sample_j0 + samplePeriod) % height; //wrap around*</em></em></em></em></em>
 <em><em><em><em><em><em>var vertical_blend = (j  sample_j0) * sampleFrequency;</em></em></em></em></em></em>
 <em><em><em><em>_*//blend the top two corners*_</em></em></em></em>
 <em><em><em><em><em>*var topc = interpolate(baseNoise[sample_i0][sample_j0],*</em></em></em></em></em>
 <em><em><em><em><em>*baseNoise[sample_i1][sample_j0], horizontal_blend);*</em></em></em></em></em>
 <em><em><em><em>_*//blend the bottom two corners*_</em></em></em></em>
 <em><em><em><em><em>*var bottomc = interpolate(baseNoise[sample_i0][sample_j1],*</em></em></em></em></em>
 <em><em><em><em><em>*baseNoise[sample_i1][sample_j1], horizontal_blend);*</em></em></em></em></em>
 <em><em><em><em>_*//final blend*_</em></em></em></em>
 <em><em><em><em><em>_smooth*[j] =*_</em></em></em></em></em>
 <em><em><em><em><em><em>*interpolate(topc, bottomc, vertical_blend);*</em></em></em></em></em></em>
 <em><em><em><em><em>_*}*_</em></em></em></em></em>
 <em><em><em><em><em>_*}*_</em></em></em></em></em>
 <em><em><em><em><em>_*return smooth;*_</em></em></em></em></em>
<em><em><em><em><em>_*}*_</em></em></em></em></em>
<em><em><em><em><em>_*function interpolate(x0, x1, alpha) //alpha lies between 0 and 1*_</em></em></em></em></em>
<em><em><em><em><em>_*{*_</em></em></em></em></em>
 <em><em><em><em><em><em>_return (1  alpha) * x0 + alpha * x1;_</em></em></em></em></em></em>
<em><em><em><em><em>_*}*_</em></em></em></em></em>
<em><em><em><em><em>_*function generatePerlin(baseNoise, octaveCount)*_</em></em></em></em></em>
<em><em><em><em><em>_*{*_</em></em></em></em></em>
 <em><em><em><em><em>_*var smooth[]; //an array of 2D arrays containing*_</em></em></em></em></em>
 <em><em><em><em><em>_*var persistance = 0.5f;*_</em></em></em></em></em>
 <em><em><em><em><em>_*//generate smooth noise*_</em></em></em></em></em>
 <em><em><em><em><em>_*for(i = 0; i < octaveCount; i++)*_</em></em></em></em></em>
 <em><em><em><em><em><em>_smooth *= generateSmoothNoise(baseNoise, i);*_</em></em></em></em></em></em>
 <em><em><em><em><em><em>_*var perlinNoise[][]; //an array of floats initialised to 0*_</em></em></em></em></em></em>
 <em><em><em><em><em><em>_*var amplitude = 1.0f;*_</em></em></em></em></em></em>
 <em><em><em><em><em><em>_*var totalAmplitude = 0.0f;*_</em></em></em></em></em></em>
 <em><em><em><em><em><em>_*//blend noise together*_</em></em></em></em></em></em>
 <em><em><em><em><em><em>_*for(k = 0; k < octaveCount; k++)*_</em></em></em></em></em></em>
 <em><em><em><em><em><em>_*{*_</em></em></em></em></em></em>
 <em><em><em><em><em><em><em>_amplitude *= persistance;_</em></em></em></em></em></em></em>
 <em><em><em><em><em><em>_*totalAmplitude += amplitude;*_</em></em></em></em></em></em>
 <em><em><em><em><em><em>_*for(i = 0; i < width; i++)*_</em></em></em></em></em></em>
 <em><em><em><em><em><em>_*for(j = 0; j < height; j++)*_</em></em></em></em></em></em>
 <em><em><em><em><em><em><em><em>perlinNoise<em>[j] += smooth[k]_[j] * weight;_</em></em></em></em></em></em></em></em></em>
 <em><em><em><em><em><em><em><em>_*}*_</em></em></em></em></em></em></em></em>
 <em><em><em><em><em><em><em><em>_*//normalisation*_</em></em></em></em></em></em></em></em>
 <em><em><em><em><em><em><em><em>_*for(k = 0; k < octaveCount; k++)*_</em></em></em></em></em></em></em></em>
 <em><em><em><em><em><em><em><em>_*{*_</em></em></em></em></em></em></em></em>
 <em><em><em><em><em><em><em><em><em>_perlinNoise*[j] /= totalAmplitude;*_</em></em></em></em></em></em></em></em></em>
 <em><em><em><em><em><em><em><em><em>_*}*_</em></em></em></em></em></em></em></em></em>
 <em><em><em><em><em><em><em><em><em>_*return perlinNoise;*_</em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em>_*}*_</em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em>_*```*_</em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em>_*<p>Here are the errors I got -</p>*_</em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em>_*```*_</em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em>*Assets/Terragen_2.0.js(22,52): BCE0044: expecting :, found ')'.*</em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em><em>Assets/Terragen_2.0.js(22,53): BCE0044: expecting ), found '*'.</em></em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em>*Assets/Terragen_2.0.js(22,54): UCE0001: ';' expected. Insert a semicolon at the end.*</em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em>*Assets/Terragen_2.0.js(28,60): BCE0044: expecting :, found ')'.*</em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em><em>Assets/Terragen_2.0.js(28,62): BCE0044: expecting ), found '*'.</em></em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em>*Assets/Terragen_2.0.js(28,63): UCE0001: ';' expected. Insert a semicolon at the end.*</em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em>*Assets/Terragen_2.0.js(45,26): BCE0044: expecting :, found ')'.*</em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em><em>Assets/Terragen_2.0.js(45,28): BCE0044: expecting ), found '*'.</em></em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em>*Assets/Terragen_2.0.js(45,29): UCE0001: ';' expected. Insert a semicolon at the end.*</em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em>*Assets/Terragen_2.0.js(50,19): UCE0001: ';' expected. Insert a semicolon at the end.*</em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em>*Assets/Terragen_2.0.js(55,24): UCE0001: ';' expected. Insert a semicolon at the end.*</em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em><em>*Assets/Terragen_2.0.js(55,26): UCE0001: ';' expected. Insert a semicolon at the end.*</em></em></em></em></em></em></em></em></em></em>
<em><em><em><em><em><em><em><em><em>_*```*_</em></em></em></em></em></em></em></em></em>

Is there any reason why you're converting it? You can use C# functions from JS no problems.

1 Answer

1

Hi, I am working on a game that requires perlin noise

Use Mathf.PerlinNoise instead? It's undocumented but it accept two floats and return a float noise value. It's deterministic so it will return the same output for same inputs.