victor HF Staff commited on
Commit
e51a3e6
·
1 Parent(s): f3f6e24
src/config/gameConfig.js CHANGED
@@ -155,20 +155,27 @@ export function getWaveParams(n) {
155
  return { count, hp, speed, reward, spawnInterval };
156
  }
157
 
158
- // Path waypoints
 
 
 
 
 
159
  export const PATH_POINTS = [
160
- new THREE.Vector3(-24, 0, -24),
 
 
161
  new THREE.Vector3(-24, 0, 0),
 
162
  new THREE.Vector3(0, 0, 0),
 
163
  new THREE.Vector3(0, 0, 16),
 
164
  new THREE.Vector3(20, 0, 16),
165
- new THREE.Vector3(26, 0, 26),
 
166
  ];
167
 
168
- // Grid settings
169
- export const GROUND_SIZE = 60;
170
- export const GRID_CELL_SIZE = 2;
171
-
172
  // Visual settings
173
  export const SCENE_BACKGROUND = 0x202432;
174
 
 
155
  return { count, hp, speed, reward, spawnInterval };
156
  }
157
 
158
+ // Grid settings
159
+ export const GROUND_SIZE = 60;
160
+ export const GRID_CELL_SIZE = 2;
161
+
162
+ // Path waypoints (edge-to-edge, axis-aligned for clean corners)
163
+ // Starts at bottom edge (z = -GROUND_SIZE/2), ends at right edge (x = GROUND_SIZE/2)
164
  export const PATH_POINTS = [
165
+ // Start on bottom edge
166
+ new THREE.Vector3(-24, 0, -GROUND_SIZE / 2),
167
+ // Up to center-left
168
  new THREE.Vector3(-24, 0, 0),
169
+ // Across the middle
170
  new THREE.Vector3(0, 0, 0),
171
+ // Up to mid-upper lane
172
  new THREE.Vector3(0, 0, 16),
173
+ // Right towards exit lane
174
  new THREE.Vector3(20, 0, 16),
175
+ // End on right edge
176
+ new THREE.Vector3(GROUND_SIZE / 2, 0, 16),
177
  ];
178
 
 
 
 
 
179
  // Visual settings
180
  export const SCENE_BACKGROUND = 0x202432;
181
 
src/scene/PathBuilder.js CHANGED
@@ -35,6 +35,27 @@ export class PathBuilder {
35
  for (let i = 0; i < this.pathPoints.length - 1; i++) {
36
  this.addSegment(this.pathPoints[i], this.pathPoints[i + 1]);
37
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
  }
39
 
40
  createPathLine() {
@@ -64,4 +85,15 @@ export class PathBuilder {
64
  this.scene.add(road);
65
  this.roadMeshes.push(road);
66
  }
 
 
 
 
 
 
 
 
 
 
 
67
  }
 
35
  for (let i = 0; i < this.pathPoints.length - 1; i++) {
36
  this.addSegment(this.pathPoints[i], this.pathPoints[i + 1]);
37
  }
38
+
39
+ // Add square fill tiles at right-angle corners for perfect joins
40
+ for (let i = 1; i < this.pathPoints.length - 1; i++) {
41
+ const prev = this.pathPoints[i - 1];
42
+ const cur = this.pathPoints[i];
43
+ const next = this.pathPoints[i + 1];
44
+
45
+ const v1 = new THREE.Vector3().subVectors(cur, prev);
46
+ const v2 = new THREE.Vector3().subVectors(next, cur);
47
+ // Consider only x/z for pathing (top-down)
48
+ v1.y = 0;
49
+ v2.y = 0;
50
+
51
+ // Normalize direction to axis-aligned unit vectors when possible
52
+ const isV1H = Math.abs(v1.x) > Math.abs(v1.z);
53
+ const isV2H = Math.abs(v2.x) > Math.abs(v2.z);
54
+ const isTurn = (isV1H && !isV2H) || (!isV1H && isV2H);
55
+ if (isTurn) {
56
+ this.addCornerTile(cur);
57
+ }
58
+ }
59
  }
60
 
61
  createPathLine() {
 
85
  this.scene.add(road);
86
  this.roadMeshes.push(road);
87
  }
88
+
89
+ addCornerTile(center) {
90
+ const size = ROAD_HALF_WIDTH * 2;
91
+ const geo = new THREE.BoxGeometry(size, 0.101, size);
92
+ const tile = new THREE.Mesh(geo, this.roadMat);
93
+ tile.castShadow = false;
94
+ tile.receiveShadow = true;
95
+ tile.position.set(center.x, 0.0505, center.z);
96
+ this.scene.add(tile);
97
+ this.roadMeshes.push(tile);
98
+ }
99
  }