diffrentverse/dist/script.js
2022-12-12 13:54:45 +04:00

155 lines
No EOL
4.3 KiB
JavaScript
Executable file

var CameraRig = document.getElementById( 'CameraRig' ), CameraLag = 16;
var BaseRotation = [ 16.75, 0, 0 ], CurrentRotation = [ 16.75, 0, 0 ];
var OffsetX = 0, OffsetY = 0;
var SunCanvasEl = document.getElementById( 'SunCanvas' );
var SunCanvas2D = SunCanvasEl.getContext( '2d' );
var SunCanvasPhase = 0;
var SkyCanvasEl = document.getElementById( 'SkyCanvas' );
var SkyCanvas2D = SkyCanvasEl.getContext( '2d' );
function PickBetween( min, max ) {
var min = Math.ceil( min );
var max = Math.floor( max );
return Math.floor( Math.random() * ( max - min + 1 ) + min );
}
function InitHillsCanvas() {
let HillsCanvasEl = document.getElementById( 'HillsCanvas' );
let HillsCanvas2D = HillsCanvasEl.getContext( '2d' );
// Empty...
HillsCanvas2D.fillStyle = 'rgb(0,0,0)';
HillsCanvas2D.fillRect( 0, 0, 32, 32 );
// Mountain Peaks...
for( let _y = 0; _y < 31; _y ++ ) {
for( let _x = 0; _x < 31; _x ++ ) {
let _z = PickBetween( 0, 255 );
HillsCanvas2D.fillStyle = 'rgb(' + [ _z, _z, _z ].join(',') + ')';
HillsCanvas2D.fillRect( _x , _y, 1, 1 );
if( !_y ) HillsCanvas2D.fillRect( _x, 31, 1, 1 );
if( !_x ) HillsCanvas2D.fillRect( 31, _y, 1, 1 );
if( !_x && !_y ) HillsCanvas2D.fillRect( 31, 31, 1, 1 );
}
}
// Valley...
let HillsGradient = HillsCanvas2D.createLinearGradient( 0, 0, 32, 0 );
HillsGradient.addColorStop( 0, 'rgba(0,0,0,0.0)' );
HillsGradient.addColorStop( (1 / 3) * 1, 'rgba(0,0,0,1.0)' );
HillsGradient.addColorStop( (1 / 3) * 2, 'rgba(0,0,0,1.0)' );
HillsGradient.addColorStop( 1, 'rgba(0,0,0,0.0)' );
HillsCanvas2D.fillStyle = HillsGradient;
HillsCanvas2D.fillRect( 0, 0, 32, 32 );
}
InitHillsCanvas();
function InitGridCanvas() {
var GridCanvasEl = document.getElementById( 'GridCanvas' );
var GridCanvas2D = GridCanvasEl.getContext( '2d' );
// Draw Base...
var GridGradient = GridCanvas2D.createLinearGradient( 0, 0, 2048, 0 );
GridGradient.addColorStop( 0.000, 'rgb(0,170,255)' );
GridGradient.addColorStop( 0.100, 'rgb(0,170,255)' );
GridGradient.addColorStop( 0.500, 'rgb(255,0,170)' );
GridGradient.addColorStop( 0.900, 'rgb(0,170,255)' );
GridGradient.addColorStop( 1.000, 'rgb(0,170,255)' );
GridCanvas2D.fillStyle = GridGradient;
GridCanvas2D.fillRect( 0, 0, 2048, 2048 );
// Draw Squares...
GridCanvas2D.fillStyle = '#000000';
for( let _y = 0; _y < 32; _y ++ ) {
for( let _x = 0; _x < 32; _x ++ ) {
GridCanvas2D.fillRect( ( _x * 64 ) + 1, ( _y * 64) + 1, 62, 62 );
}
}
}
InitGridCanvas();
function InitSkyCanvas() {
// Draw Space...
SkyCanvas2D.fillStyle = '#000000';
SkyCanvas2D.fillRect( 0, 0, 6400, 3200 );
// Draw Stars...
for( let i = 0; i < 1024; i ++ ) {
SkyCanvas2D.beginPath();
SkyCanvas2D.arc( PickBetween( 0, 6400 ), PickBetween( 0, 1600 ), ( PickBetween( 1, 3 ) / 2 ), 0, 2 * Math.PI );
SkyCanvas2D.fillStyle = '#FFFFFF';
SkyCanvas2D.fill();
}
// Draw Atmos...
var SkyGradient = SkyCanvas2D.createLinearGradient( 0, 0, 0, 3200 );
SkyGradient.addColorStop( 0.00, 'rgba(68,0,68,0.0)' );
SkyGradient.addColorStop( 0.375, 'rgba(68,0,68,0.0)' );
SkyGradient.addColorStop( 0.5, 'rgba(68,0,68,1.0)' );
SkyGradient.addColorStop( 1.00, 'rgba(68,0,68,1.0)' );
SkyCanvas2D.fillStyle = SkyGradient;
SkyCanvas2D.fillRect( 0, 0, 6400, 3200 );
}
InitSkyCanvas();
function UpdateSunCanvas() {
// Clear color...
SunCanvas2D.fillStyle = '#440044';
SunCanvas2D.fillRect( 0, 0, 512, 512 );
// Draw lines...
for( let i = 0; i < 32; i ++ ) {
var vSize = 1 * ( i + 1 );
var vOffset = ( SunCanvasPhase + ( 16 * i ) ) + vSize;
SunCanvas2D.fillStyle = '#FFAA00';
SunCanvas2D.fillRect( 0, 512 - vOffset, 512, vSize );
}
SunCanvasPhase += 0.5;
if( SunCanvasPhase > 16 ) SunCanvasPhase -= 16;
}
UpdateSunCanvas();
function UpdateCameraRig() {
CurrentRotation = [
CurrentRotation[ 0 ] + ( ( ( BaseRotation[ 0 ] + OffsetY ) - CurrentRotation[ 0 ] ) / CameraLag ),
CurrentRotation[ 1 ] + ( ( ( BaseRotation[ 1 ] + OffsetX ) - CurrentRotation[ 1 ] ) / CameraLag ),
0,
];
CameraRig.setAttribute( 'rotation', CurrentRotation.join( ' ' ) );
}
UpdateCameraRig();
function AnimationFrame() {
requestAnimationFrame( AnimationFrame );
UpdateSunCanvas();
UpdateCameraRig();
}
AnimationFrame();
/* INTERACTIVITY */
document.addEventListener( 'mousemove', event => {
OffsetX = ( -0.5 + ( event.clientX / window.innerWidth ) ) * 2;
OffsetY = ( -0.5 + ( event.clientY / window.innerHeight ) ) * 1;
} );