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>
90 lines
1.1 KiB
JavaScript
90 lines
1.1 KiB
JavaScript
export default class ChainMap {
|
|
|
|
constructor() {
|
|
|
|
this.weakMap = new WeakMap();
|
|
|
|
}
|
|
|
|
get( keys ) {
|
|
|
|
if ( Array.isArray( keys ) ) {
|
|
|
|
let map = this.weakMap;
|
|
|
|
for ( let i = 0; i < keys.length; i ++ ) {
|
|
|
|
map = map.get( keys[ i ] );
|
|
|
|
if ( map === undefined ) return undefined;
|
|
|
|
}
|
|
|
|
return map.get( keys[ keys.length - 1 ] );
|
|
|
|
} else {
|
|
|
|
return super.get( keys );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
set( keys, value ) {
|
|
|
|
if ( Array.isArray( keys ) ) {
|
|
|
|
let map = this.weakMap;
|
|
|
|
for ( let i = 0; i < keys.length; i ++ ) {
|
|
|
|
const key = keys[ i ];
|
|
|
|
if ( map.has( key ) === false ) map.set( key, new WeakMap() );
|
|
|
|
map = map.get( key );
|
|
|
|
}
|
|
|
|
return map.set( keys[ keys.length - 1 ], value );
|
|
|
|
} else {
|
|
|
|
return super.set( keys, value );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
delete( keys ) {
|
|
|
|
if ( Array.isArray( keys ) ) {
|
|
|
|
let map = this.weakMap;
|
|
|
|
for ( let i = 0; i < keys.length; i ++ ) {
|
|
|
|
map = map.get( keys[ i ] );
|
|
|
|
if ( map === undefined ) return false;
|
|
|
|
}
|
|
|
|
return map.delete( keys[ keys.length - 1 ] );
|
|
|
|
} else {
|
|
|
|
return super.delete( keys );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dispose() {
|
|
|
|
this.weakMap.clear();
|
|
|
|
}
|
|
|
|
}
|