Complete 3D metaverse platform with: - Three.js 3D rendering - Cannon.js physics engine - Pointer lock controls - Procedural cityscape - Floating islands - Portal system - Particle effects - WebXR/VR support ready - Multiplayer ready (Socket.io) Features: - First-person controls (WASD + mouse) - Jump and run mechanics - Chat system - Real-time HUD - Loading screen - Responsive design Built with Vite for fast builds and hot reload. 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
49 lines
1018 B
JavaScript
49 lines
1018 B
JavaScript
import { Return, VariableDeclaration, Accessor } from './AST.js';
|
|
import GLSLDecoder from './GLSLDecoder.js';
|
|
|
|
class ShaderToyDecoder extends GLSLDecoder {
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
this.addPolyfill( 'iTime', 'float iTime = timerGlobal();' );
|
|
this.addPolyfill( 'iResolution', 'vec2 iResolution = viewportResolution;' );
|
|
this.addPolyfill( 'fragCoord', 'vec2 fragCoord = vec2( viewportCoordinate.x, viewportResolution.y - viewportCoordinate.y );' );
|
|
|
|
}
|
|
|
|
parseFunction() {
|
|
|
|
const node = super.parseFunction();
|
|
|
|
if ( node.name === 'mainImage' ) {
|
|
|
|
node.params = []; // remove default parameters
|
|
node.type = 'vec4';
|
|
node.layout = false; // for now
|
|
|
|
const fragColor = new Accessor( 'fragColor' );
|
|
|
|
for ( const subNode of node.body ) {
|
|
|
|
if ( subNode.isReturn ) {
|
|
|
|
subNode.value = fragColor;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
node.body.unshift( new VariableDeclaration( 'vec4', 'fragColor' ) );
|
|
node.body.push( new Return( fragColor ) );
|
|
|
|
}
|
|
|
|
return node;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export default ShaderToyDecoder; |