zeroed-some/dougk / 3fef8d6

Browse files

add boathouase

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
3fef8d607f84e6d153aa1d603581ea215b4327f4
Parents
cf7cd1e
Tree
8690d80

1 changed file

StatusFile+-
M src/renderers/three/pond.js 106 0
src/renderers/three/pond.jsmodified
@@ -358,6 +358,112 @@ export function createPond(scene, gradientMap) {
358358
 
359359
   group.add(village)
360360
 
361
+  // ============================================
362
+  // BOATHOUSE - cozy little structure at pond corner
363
+  // ============================================
364
+
365
+  const boathouse = new THREE.Group()
366
+  const boathouseX = -4.2
367
+  const boathouseZ = 3.2
368
+
369
+  // Boathouse materials
370
+  const boathouseWoodMaterial = new THREE.MeshToonMaterial({
371
+    color: 0x8b6914, // Weathered wood
372
+    gradientMap: gradientMap
373
+  })
374
+  const boathouseRoofMaterial = new THREE.MeshToonMaterial({
375
+    color: 0x5a4a3a, // Dark wood/slate roof
376
+    gradientMap: gradientMap
377
+  })
378
+  const boathouseTrimMaterial = new THREE.MeshToonMaterial({
379
+    color: 0x6b5030, // Darker trim
380
+    gradientMap: gradientMap
381
+  })
382
+
383
+  // Main building - slightly larger than houses to dwarf Doug
384
+  const boathouseBodyGeom = new THREE.BoxGeometry(1.2, 0.9, 1.0)
385
+  const boathouseBody = new THREE.Mesh(boathouseBodyGeom, boathouseWoodMaterial)
386
+  boathouseBody.position.set(0, 0.45, 0)
387
+  boathouse.add(boathouseBody)
388
+
389
+  // Roof - pitched roof
390
+  const roofShape = new THREE.Shape()
391
+  roofShape.moveTo(-0.75, 0)
392
+  roofShape.lineTo(0, 0.5)
393
+  roofShape.lineTo(0.75, 0)
394
+  roofShape.lineTo(-0.75, 0)
395
+
396
+  const roofExtrudeSettings = { depth: 1.15, bevelEnabled: false }
397
+  const boathouseRoofGeom = new THREE.ExtrudeGeometry(roofShape, roofExtrudeSettings)
398
+  const boathouseRoof = new THREE.Mesh(boathouseRoofGeom, boathouseRoofMaterial)
399
+  boathouseRoof.position.set(0, 0.9, -0.575)
400
+  boathouse.add(boathouseRoof)
401
+
402
+  // Roof overhang trim
403
+  const overhangGeom = new THREE.BoxGeometry(1.5, 0.05, 0.08)
404
+  const overhangFront = new THREE.Mesh(overhangGeom, boathouseTrimMaterial)
405
+  overhangFront.position.set(0, 0.92, 0.54)
406
+  boathouse.add(overhangFront)
407
+  const overhangBack = new THREE.Mesh(overhangGeom, boathouseTrimMaterial)
408
+  overhangBack.position.set(0, 0.92, -0.54)
409
+  boathouse.add(overhangBack)
410
+
411
+  // Door opening (dark rectangle facing pond)
412
+  const doorGeom = new THREE.PlaneGeometry(0.45, 0.6)
413
+  const doorMaterial = new THREE.MeshToonMaterial({
414
+    color: 0x1a1a1a,
415
+    gradientMap: gradientMap
416
+  })
417
+  const door = new THREE.Mesh(doorGeom, doorMaterial)
418
+  door.position.set(0.601, 0.35, 0.15)
419
+  door.rotation.y = Math.PI / 2
420
+  boathouse.add(door)
421
+
422
+  // Window on side
423
+  const boathouseWindowGeom = new THREE.PlaneGeometry(0.25, 0.2)
424
+  const boathouseWindowMaterial = new THREE.MeshToonMaterial({
425
+    color: 0x6b9bc3,
426
+    gradientMap: gradientMap
427
+  })
428
+  const boathouseWindow = new THREE.Mesh(boathouseWindowGeom, boathouseWindowMaterial)
429
+  boathouseWindow.position.set(0, 0.55, 0.51)
430
+  boathouse.add(boathouseWindow)
431
+
432
+  // Window frame
433
+  const frameH = new THREE.Mesh(
434
+    new THREE.BoxGeometry(0.3, 0.02, 0.02),
435
+    boathouseTrimMaterial
436
+  )
437
+  frameH.position.set(0, 0.55, 0.52)
438
+  boathouse.add(frameH)
439
+  const frameV = new THREE.Mesh(
440
+    new THREE.BoxGeometry(0.02, 0.25, 0.02),
441
+    boathouseTrimMaterial
442
+  )
443
+  frameV.position.set(0, 0.55, 0.52)
444
+  boathouse.add(frameV)
445
+
446
+  // Dock/platform extending toward pond
447
+  const dockGeom = new THREE.BoxGeometry(1.0, 0.08, 0.6)
448
+  const dock = new THREE.Mesh(dockGeom, boathouseWoodMaterial)
449
+  dock.position.set(1.1, 0.04, 0.15)
450
+  boathouse.add(dock)
451
+
452
+  // Dock support posts
453
+  const dockPostGeom = new THREE.CylinderGeometry(0.04, 0.05, 0.3, 6)
454
+  const dockPost1 = new THREE.Mesh(dockPostGeom, boathouseTrimMaterial)
455
+  dockPost1.position.set(1.5, -0.1, 0.35)
456
+  boathouse.add(dockPost1)
457
+  const dockPost2 = new THREE.Mesh(dockPostGeom, boathouseTrimMaterial)
458
+  dockPost2.position.set(1.5, -0.1, -0.05)
459
+  boathouse.add(dockPost2)
460
+
461
+  // Position boathouse at corner, angled toward pond
462
+  boathouse.position.set(boathouseX, 0, boathouseZ)
463
+  boathouse.rotation.y = Math.PI / 4 + 0.3 // Angled toward pond center
464
+
465
+  group.add(boathouse)
466
+
361467
   // ============================================
362468
   // TREES - scattered around the edges
363469
   // ============================================