@@ -13,28 +13,21 @@ import type {
1313const kW = 3 / 8 ;
1414const kH = 5 / 8 ;
1515
16- export type PoleAxis = "x" | "z" ;
17-
1816/**
1917 * Pole — a narrow horizontal beam running along the X or Z axis.
2018 * Cross-section: 0.25×0.25 centered at 0.5, full length along the chosen axis.
2119 * Uses trimesh collision for accurate sub-voxel physics.
2220 *
23- * "poleZ": z=[0,1], centered x=[kW,kH], y=[kW,kH]
24- * "poleX": x=[0,1], centered z=[kW,kH], y=[kW,kH]
21+ * "pole": z=[0,1], centered x=[kW,kH], y=[kW,kH]
2522 */
2623export class Pole implements BlockShape {
2724 readonly id : BlockShapeID ;
2825 readonly collisionHint : BlockCollisionHint = "trimesh" ;
2926 readonly faces : readonly FaceDefinition [ ] ;
3027
31- constructor (
32- axis : PoleAxis = "z"
33- ) {
34- this . id = axis === "z" ? "poleZ" : "poleX" ;
35- this . faces = axis === "z" ?
36- Pole . #buildZFaces( ) :
37- Pole . #buildXFaces( ) ;
28+ constructor ( ) {
29+ this . id = "pole" ;
30+ this . faces = Pole . #buildZFaces( ) ;
3831 }
3932
4033 occludes (
@@ -96,58 +89,4 @@ export class Pole implements BlockShape {
9689 }
9790 ] ;
9891 }
99-
100- static #buildXFaces( ) : FaceDefinition [ ] {
101- // Beam along X: x=[0,1], centered z=[kW,kH], y=[kW,kH]
102- return [
103- {
104- // NegX cap (x=0)
105- // e1=[0,kH-kW,0], e2=[0,kH-kW,kW-kH] → cross=[-(kH-kW)^2,0,0] ✓
106- face : FACE . NegX ,
107- normal : [ - 1 , 0 , 0 ] ,
108- vertices : [ [ 0 , kW , kH ] , [ 0 , kH , kH ] , [ 0 , kH , kW ] , [ 0 , kW , kW ] ] ,
109- uvs : [ [ 0 , 0 ] , [ 0 , 1 ] , [ 1 , 1 ] , [ 1 , 0 ] ]
110- } ,
111- {
112- // PosX cap (x=1)
113- // e1=[0,kH-kW,0], e2=[0,kH-kW,kH-kW] → cross=[(kH-kW)^2,0,0] ✓
114- face : FACE . PosX ,
115- normal : [ 1 , 0 , 0 ] ,
116- vertices : [ [ 1 , kW , kW ] , [ 1 , kH , kW ] , [ 1 , kH , kH ] , [ 1 , kW , kH ] ] ,
117- uvs : [ [ 0 , 0 ] , [ 0 , 1 ] , [ 1 , 1 ] , [ 1 , 0 ] ]
118- } ,
119- {
120- // Top (PosY, y=kH)
121- // e1=[0,0,kH-kW], e2=[1,0,kH-kW] → cross=[0,(kH-kW),0] ✓
122- face : FACE . PosY ,
123- normal : [ 0 , 1 , 0 ] ,
124- vertices : [ [ 0 , kH , kW ] , [ 0 , kH , kH ] , [ 1 , kH , kH ] , [ 1 , kH , kW ] ] ,
125- uvs : [ [ 0 , 0 ] , [ 0 , 1 ] , [ 1 , 1 ] , [ 1 , 0 ] ]
126- } ,
127- {
128- // Bottom (NegY, y=kW)
129- // e1=[0,0,kW-kH], e2=[1,0,kW-kH] → cross=[0,kW-kH,0] ✓
130- face : FACE . NegY ,
131- normal : [ 0 , - 1 , 0 ] ,
132- vertices : [ [ 0 , kW , kH ] , [ 0 , kW , kW ] , [ 1 , kW , kW ] , [ 1 , kW , kH ] ] ,
133- uvs : [ [ 0 , 0 ] , [ 0 , 1 ] , [ 1 , 1 ] , [ 1 , 0 ] ]
134- } ,
135- {
136- // NegZ side (z=kW)
137- // e1=[-1,0,0], e2=[-1,kH-kW,0] → cross=[0,0,-(kH-kW)] ✓
138- face : FACE . NegZ ,
139- normal : [ 0 , 0 , - 1 ] ,
140- vertices : [ [ 1 , kW , kW ] , [ 0 , kW , kW ] , [ 0 , kH , kW ] , [ 1 , kH , kW ] ] ,
141- uvs : [ [ 0 , 0 ] , [ 1 , 0 ] , [ 1 , 1 ] , [ 0 , 1 ] ]
142- } ,
143- {
144- // PosZ side (z=kH)
145- // e1=[1,0,0], e2=[1,kH-kW,0] → cross=[0,0,kH-kW] ✓
146- face : FACE . PosZ ,
147- normal : [ 0 , 0 , 1 ] ,
148- vertices : [ [ 0 , kW , kH ] , [ 1 , kW , kH ] , [ 1 , kH , kH ] , [ 0 , kH , kH ] ] ,
149- uvs : [ [ 0 , 0 ] , [ 1 , 0 ] , [ 1 , 1 ] , [ 0 , 1 ] ]
150- }
151- ] ;
152- }
15392}
0 commit comments