feat: launch ebike repair from map interaction
🔍 Lint / 🪄 Check lint (pull_request) Has been cancelled
🔍 Lint / 🎨 Check format (pull_request) Has been cancelled
🔍 Lint / 🔎 Typecheck (pull_request) Has been cancelled
📊 Quality / 🔒 Security Audit (pull_request) Has been cancelled
📊 Quality / 📋 Dependency Freshness (pull_request) Has been cancelled
📊 Quality / 📦 Bundle Size (pull_request) Has been cancelled
🔍 Lint / 🏗 Build (pull_request) Has been cancelled

This commit is contained in:
tom-boullay
2026-05-28 10:13:59 +02:00
parent d654565f87
commit d9cf87d2d6
14 changed files with 107 additions and 71 deletions
+3 -3
View File
@@ -25,8 +25,8 @@ export const TEST_SCENE_REPAIR_ZONE_MARKER_TUBE_RADIUS = 0.045;
export const TEST_SCENE_REPAIR_ZONES = [
{
mission: "bike",
label: "Bike",
mission: "ebike",
label: "E-bike",
color: "#38bdf8",
position: [-12, 0, -12],
},
@@ -43,7 +43,7 @@ export const TEST_SCENE_REPAIR_ZONES = [
position: [12, 0, -12],
},
] as const satisfies readonly {
mission: "bike" | "pylone" | "ferme";
mission: "ebike" | "pylone" | "ferme";
label: string;
color: string;
position: Vector3Tuple;
+3 -3
View File
@@ -1,18 +1,18 @@
import type { Vector3Tuple } from "@/types/three/three";
import type { RepairMissionId } from "@/types/gameplay/repairMission";
export const BIKE_REPAIR_POSITION = [
export const EBIKE_REPAIR_POSITION = [
42.2399, 4.5484, 34.6468,
] as const satisfies Vector3Tuple;
const REPAIR_MISSION_POSITIONS = {
bike: BIKE_REPAIR_POSITION,
ebike: EBIKE_REPAIR_POSITION,
pylone: [64, 0, -66],
ferme: [-24, 0, 42],
} as const satisfies Record<RepairMissionId, Vector3Tuple>;
export const REPAIR_MISSION_POSITION_ENTRIES = [
{ mission: "bike", position: REPAIR_MISSION_POSITIONS.bike },
{ mission: "ebike", position: REPAIR_MISSION_POSITIONS.ebike },
{ mission: "pylone", position: REPAIR_MISSION_POSITIONS.pylone },
{ mission: "ferme", position: REPAIR_MISSION_POSITIONS.ferme },
] as const satisfies readonly {
+7 -7
View File
@@ -14,8 +14,8 @@ const DEFAULT_REPAIR_CASE = {
} satisfies RepairMissionCaseConfig;
export const REPAIR_MISSIONS: Record<RepairMissionId, RepairMissionConfig> = {
bike: {
id: "bike",
ebike: {
id: "ebike",
label: "E-bike",
description:
"Repair the damaged cooling module before relaunching the bike",
@@ -25,10 +25,10 @@ export const REPAIR_MISSIONS: Record<RepairMissionId, RepairMissionConfig> = {
interactUiPath: REPAIR_INTERACT_UI_PATH,
brokenUiPath: REPAIR_BROKEN_UI_PATH,
case: DEFAULT_REPAIR_CASE,
requiredReplacementPartId: "bike-cooling-core-replacement",
requiredReplacementPartId: "ebike-cooling-core-replacement",
brokenParts: [
{
id: "bike-cooling-core",
id: "ebike-cooling-core",
label: "Cooling core",
modelPath: "/models/refroidisseur/model.gltf",
nodeName: "refroidisseur",
@@ -37,17 +37,17 @@ export const REPAIR_MISSIONS: Record<RepairMissionId, RepairMissionConfig> = {
],
replacementParts: [
{
id: "bike-cooling-core-replacement",
id: "ebike-cooling-core-replacement",
label: "Replacement cooling core",
modelPath: "/models/refroidisseur/model.gltf",
},
{
id: "bike-radio-distractor",
id: "ebike-radio-distractor",
label: "Radio module",
modelPath: "/models/talkie/model.gltf",
},
{
id: "bike-glove-distractor",
id: "ebike-glove-distractor",
label: "Insulation glove",
modelPath: "/models/gant_l/model.gltf",
},
+10 -2
View File
@@ -1,9 +1,15 @@
import type { TerrainSurfaceColorConfig } from "@/types/world/terrainSurface";
import type {
TerrainSurfaceColorConfig,
TerrainSurfaceProjectionConfig,
} from "@/types/world/terrainSurface";
export const TERRAIN_MODEL_PATH = "/models/terrain/model.gltf";
export const TERRAIN_WATER_HEIGHT = 0.8;
const TERRAIN_TILE_SIZE = 1;
export const TERRAIN_TILE_SIZE = 1;
export const TERRAIN_SURFACE_COLOR_TOLERANCE = 5;
export const TERRAIN_SURFACE_PROJECTION =
{} satisfies TerrainSurfaceProjectionConfig;
export const TERRAIN_COLORS = {
grass1: {
@@ -54,3 +60,5 @@ export const TERRAIN_COLORS = {
kind: "rock",
},
} satisfies Record<string, TerrainSurfaceColorConfig>;
export type TerrainColorKey = keyof typeof TERRAIN_COLORS;