@@ -19,8 +19,29 @@ class Pistol extends THREE.Group {
1919 this . tracers = [ ] ;
2020
2121 // Materials
22- this . polyMat = new THREE . MeshStandardMaterial ( { color : 0x1e293b , roughness : 0.8 , metalness : 0.2 } ) ;
23- this . metalMat = new THREE . MeshStandardMaterial ( { color : 0x334155 , roughness : 0.4 , metalness : 0.7 } ) ;
22+ const loader = new THREE . TextureLoader ( ) ;
23+ const gunTex = loader . load ( './assets/tactical_texture.png' ) ;
24+ gunTex . wrapS = gunTex . wrapT = THREE . RepeatWrapping ;
25+ gunTex . repeat . set ( 2 , 2 ) ;
26+
27+ this . polyMat = new THREE . MeshStandardMaterial ( {
28+ color : 0x1e293b ,
29+ map : gunTex ,
30+ roughness : 0.6 ,
31+ metalness : 0.4 ,
32+ emissive : 0xff0000 ,
33+ emissiveMap : gunTex ,
34+ emissiveIntensity : 0.4
35+ } ) ;
36+ this . metalMat = new THREE . MeshStandardMaterial ( {
37+ color : 0x334155 ,
38+ map : gunTex ,
39+ roughness : 0.3 ,
40+ metalness : 0.85 ,
41+ emissive : 0xff0000 ,
42+ emissiveMap : gunTex ,
43+ emissiveIntensity : 0.7
44+ } ) ;
2445 this . barrelMat = new THREE . MeshStandardMaterial ( { color : 0x475569 , roughness : 0.3 , metalness : 0.9 } ) ;
2546 this . brassMat = new THREE . MeshStandardMaterial ( { color : 0xb5943b , metalness : 0.8 , roughness : 0.2 } ) ;
2647 this . dotMat = new THREE . MeshBasicMaterial ( { color : 0x00ff00 } ) ;
@@ -33,16 +54,16 @@ class Pistol extends THREE.Group {
3354 const frameGroup = new THREE . Group ( ) ;
3455 this . add ( frameGroup ) ;
3556
36- const gripGeo = new THREE . BoxGeometry ( 0.3 , 1.2 , 0.5 ) ;
57+ const gripGeo = new THREE . BoxGeometry ( 0.18 , 1.2 , 0.5 ) ;
3758 const grip = new THREE . Mesh ( gripGeo , this . polyMat ) ;
3859 grip . position . set ( 0 , - 0.6 , 0.2 ) ;
3960 grip . rotation . x = Math . PI * 0.1 ;
4061 grip . castShadow = true ;
4162 frameGroup . add ( grip ) ;
4263
43- const receiverGeo = new THREE . BoxGeometry ( 0.32 , 0.25 , 1.6 ) ;
64+ const receiverGeo = new THREE . BoxGeometry ( 0.2 , 0.25 , 1.7 ) ;
4465 const receiver = new THREE . Mesh ( receiverGeo , this . polyMat ) ;
45- receiver . position . set ( 0 , 0.1 , - 0.2 ) ;
66+ receiver . position . set ( 0 , 0.1 , - 0.25 ) ;
4667 receiver . castShadow = true ;
4768 frameGroup . add ( receiver ) ;
4869
@@ -56,30 +77,30 @@ class Pistol extends THREE.Group {
5677 this . triggerMesh . position . set ( 0 , - 0.1 , - 0.35 ) ;
5778 frameGroup . add ( this . triggerMesh ) ;
5879
59- const barrelGeo = new THREE . CylinderGeometry ( 0.08 , 0.08 , 1.6 , 16 ) ;
80+ const barrelGeo = new THREE . CylinderGeometry ( 0.05 , 0.05 , 1.7 , 16 ) ;
6081 const barrel = new THREE . Mesh ( barrelGeo , this . barrelMat ) ;
6182 barrel . rotation . x = Math . PI / 2 ;
62- barrel . position . set ( 0 , 0.35 , - 0.2 ) ;
83+ barrel . position . set ( 0 , 0.35 , - 0.25 ) ;
6384 frameGroup . add ( barrel ) ;
6485
6586 // --- B. Upper Slide (Blowback) ---
6687 this . slideGroup = new THREE . Group ( ) ;
6788 this . add ( this . slideGroup ) ;
6889
69- const slideTop = new THREE . Mesh ( new THREE . BoxGeometry ( 0.34 , 0.08 , 1.6 ) , this . metalMat ) ;
70- slideTop . position . set ( 0 , 0.5 , - 0.2 ) ;
90+ const slideTop = new THREE . Mesh ( new THREE . BoxGeometry ( 0.22 , 0.08 , 1.7 ) , this . metalMat ) ;
91+ slideTop . position . set ( 0 , 0.5 , - 0.25 ) ;
7192 this . slideGroup . add ( slideTop ) ;
7293
73- const slideLeft = new THREE . Mesh ( new THREE . BoxGeometry ( 0.05 , 0.25 , 1.6 ) , this . metalMat ) ;
74- slideLeft . position . set ( - 0.145 , 0.35 , - 0.2 ) ;
94+ const slideLeft = new THREE . Mesh ( new THREE . BoxGeometry ( 0.03 , 0.25 , 1.7 ) , this . metalMat ) ;
95+ slideLeft . position . set ( - 0.095 , 0.35 , - 0.25 ) ;
7596 this . slideGroup . add ( slideLeft ) ;
7697
77- const slideRightFront = new THREE . Mesh ( new THREE . BoxGeometry ( 0.05 , 0.25 , 0.8 ) , this . metalMat ) ;
78- slideRightFront . position . set ( 0.145 , 0.35 , - 0.6 ) ;
98+ const slideRightFront = new THREE . Mesh ( new THREE . BoxGeometry ( 0.03 , 0.25 , 0.9 ) , this . metalMat ) ;
99+ slideRightFront . position . set ( 0.095 , 0.35 , - 0.65 ) ;
79100 this . slideGroup . add ( slideRightFront ) ;
80101
81- const slideRightBack = new THREE . Mesh ( new THREE . BoxGeometry ( 0.05 , 0.25 , 0.5 ) , this . metalMat ) ;
82- slideRightBack . position . set ( 0.145 , 0.35 , 0.35 ) ;
102+ const slideRightBack = new THREE . Mesh ( new THREE . BoxGeometry ( 0.03 , 0.25 , 0.5 ) , this . metalMat ) ;
103+ slideRightBack . position . set ( 0.095 , 0.35 , 0.35 ) ;
83104 this . slideGroup . add ( slideRightBack ) ;
84105
85106 // Lights / Sights
@@ -99,7 +120,7 @@ class Pistol extends THREE.Group {
99120 new THREE . BoxGeometry ( 0.01 , 0.08 , 0.04 ) ,
100121 this . polyMat
101122 ) ;
102- ridge . position . set ( 0.16 * side , - 0.35 - i * 0.09 , 0.2 ) ;
123+ ridge . position . set ( 0.1 * side , - 0.35 - i * 0.09 , 0.2 ) ;
103124 ridge . rotation . x = Math . PI * 0.1 ;
104125 frameGroup . add ( ridge ) ;
105126 }
@@ -128,7 +149,7 @@ class Pistol extends THREE.Group {
128149 new THREE . BoxGeometry ( 0.04 , 0.06 , 0.04 ) ,
129150 this . metalMat
130151 ) ;
131- magRelease . position . set ( 0.16 , - 0.15 , 0.05 ) ;
152+ magRelease . position . set ( 0.1 , - 0.15 , 0.05 ) ;
132153 frameGroup . add ( magRelease ) ;
133154
134155 // === ACCESSORY RAIL (Under barrel) ===
0 commit comments