Hole Game

v0.6-buildings-polish

Building variety, asphalt, keyboard, disc squash · Buildings now split residential vs commercial with curated palettes, doors, awnings, and rooftop equipment. Streets use a real asphalt texture (image-gen PNG). WASD + arrow keys move the hole at full speed. The hole disc is geometrically squashed to read as an ellipse from the camera's perspective.

Build notes

Building variety

  • Each building rolls 55%/45% residential vs commercial.
  • Residential: shorter (height 2.6–4.3), warm pastel palette (cream, peach, mint, pale blue, pink, sand), warm-yellow window glow, simple flat roof slab. Door 0.85×1.4.
  • Commercial: taller (height 4.5–8), cool palette (light gray, beige, warm white, pale slate, pale gold, gray), blue window glow, parapet rim around a flat roof, rooftop AC unit, awning over the entrance, 70% chance of a colored sign above the door. Door 1.2×1.85.
  • Both types now have windows on all 4 sides, not just front and back.
  • Each building also has a thin base trim at ground level in a slightly lighter shade of the body color.

Asphalt texture

  • Streets render with an image-gen-generated asphalt.png (1254×1254, dark charcoal with a faint yellow center stripe).
  • Tile rate is one tile per 4 world units along the road's length, so the visible scale stays consistent regardless of city size.
  • E-W strips are rotated 90° around Y so the texture's long axis stays aligned with each road's long axis (single shared material, no per-orientation duplicates).
  • Texture offset compensates for the < 1 cross-tile rate so the yellow stripe lands on the road centerline.

Keyboard movement

  • Reads Keyboard.current for W/A/S/D and the arrow keys. Both bindings active simultaneously.
  • Direction is camera-relative: forward = camera's projected XZ forward, right = camera's projected XZ right. Rotating the camera (if we ever do) would still feel correct.
  • Capped at the same maxSpeed (9 m/s) as drag movement.
  • When any direction key is held, the keyboard branch wins over the drag branch in FixedUpdate. Releasing keys resumes drag-target tracking.

Hole disc squash

  • Symptom: with a top-down camera, the player's hole appeared as a perfect circle while bots' holes appeared as perspective-induced ellipses (because they're off-center). Visual mismatch.
  • First attempt: tilt the player's disc 15° around X. Failed — the back edge sank below the ground plane and the ground occluded half the disc.
  • Final fix: anisotropic scale — localScale.z = 0.88 * scale.x baked into every disc's geometry in BuildHoleActor. Discs lie flat (no ground intrusion) but are geometrically wider in X than Z.
  • Player disc renders as a 0.88 ellipse from the camera. Bots get the same baseline, plus their natural perspective squash on top — so all holes read consistently.