feat(repair): inject ebike + pylon parts at packderelance anchors
- Ebike replacement parts: cooling core (correct, anchored at refroidisseur) + four distractors anchored at cabledroit/cablegauche/pucehaut/pucebas. Removes the ad-hoc gant_l/talkie distractors in favor of consistent case-anchored visuals. - Pylon replacement parts: cable1 + cable2 (alternative correct, both with caseLockGroup 'pylon-cable' for upcoming soft-lock) + refroidisseur and two puce distractors anchored to packderelance. - Farm replacement parts kept as-is (caseAnchor undefined falls back to placeholder slot positions for backward compatibility). - RepairGame threads anchors from RepairCaseModel through RepairMissionCase to RepairRepairingStep; replacement-part initial position now resolves to the anchor world position when caseAnchor is set, falling back to the legacy slot index otherwise.
This commit is contained in:
@@ -38,13 +38,33 @@ export const REPAIR_MISSIONS: Record<RepairMissionId, RepairMissionConfig> = {
|
||||
replacementParts: [
|
||||
{
|
||||
id: "ebike-cooling-core-replacement",
|
||||
label: "Replacement cooling core",
|
||||
label: "Refroidisseur",
|
||||
modelPath: "/models/refroidisseur/model.gltf",
|
||||
caseAnchor: "refroidisseur",
|
||||
},
|
||||
{
|
||||
id: "ebike-glove-distractor",
|
||||
label: "Insulation glove",
|
||||
modelPath: "/models/gant_l/model.gltf",
|
||||
id: "ebike-cable-right-distractor",
|
||||
label: "Câble droit",
|
||||
modelPath: "/models/cable1/model.gltf",
|
||||
caseAnchor: "cabledroit",
|
||||
},
|
||||
{
|
||||
id: "ebike-cable-left-distractor",
|
||||
label: "Câble gauche",
|
||||
modelPath: "/models/cable2/model.gltf",
|
||||
caseAnchor: "cablegauche",
|
||||
},
|
||||
{
|
||||
id: "ebike-puce-haut-distractor",
|
||||
label: "Puce haute",
|
||||
modelPath: "/models/puce/model.gltf",
|
||||
caseAnchor: "pucehaut",
|
||||
},
|
||||
{
|
||||
id: "ebike-puce-bas-distractor",
|
||||
label: "Puce basse",
|
||||
modelPath: "/models/puce/model.gltf",
|
||||
caseAnchor: "pucebas",
|
||||
},
|
||||
],
|
||||
},
|
||||
@@ -59,7 +79,10 @@ export const REPAIR_MISSIONS: Record<RepairMissionId, RepairMissionConfig> = {
|
||||
brokenUiPath: REPAIR_BROKEN_UI_PATH,
|
||||
case: DEFAULT_REPAIR_CASE,
|
||||
reassemblySeconds: 1.8,
|
||||
requiredReplacementPartIds: ["pylon-grid-relay-replacement"],
|
||||
requiredReplacementPartIds: [
|
||||
"pylon-cable-right-replacement",
|
||||
"pylon-cable-left-replacement",
|
||||
],
|
||||
scanPartSeconds: 1.4,
|
||||
brokenParts: [
|
||||
{
|
||||
@@ -77,19 +100,36 @@ export const REPAIR_MISSIONS: Record<RepairMissionId, RepairMissionConfig> = {
|
||||
],
|
||||
replacementParts: [
|
||||
{
|
||||
id: "pylon-grid-relay-replacement",
|
||||
label: "Replacement grid relay",
|
||||
modelPath: "/models/pylone/model.gltf",
|
||||
id: "pylon-cable-right-replacement",
|
||||
label: "Câble droit",
|
||||
modelPath: "/models/cable1/model.gltf",
|
||||
caseAnchor: "cabledroit",
|
||||
caseLockGroup: "pylon-cable",
|
||||
},
|
||||
{
|
||||
id: "pylon-stone-distractor",
|
||||
label: "Stone counterweight",
|
||||
modelPath: "/models/galet/model.gltf",
|
||||
id: "pylon-cable-left-replacement",
|
||||
label: "Câble gauche",
|
||||
modelPath: "/models/cable2/model.gltf",
|
||||
caseAnchor: "cablegauche",
|
||||
caseLockGroup: "pylon-cable",
|
||||
},
|
||||
{
|
||||
id: "pylon-cooling-distractor",
|
||||
label: "Cooling core",
|
||||
label: "Refroidisseur",
|
||||
modelPath: "/models/refroidisseur/model.gltf",
|
||||
caseAnchor: "refroidisseur",
|
||||
},
|
||||
{
|
||||
id: "pylon-puce-haut-distractor",
|
||||
label: "Puce haute",
|
||||
modelPath: "/models/puce/model.gltf",
|
||||
caseAnchor: "pucehaut",
|
||||
},
|
||||
{
|
||||
id: "pylon-puce-bas-distractor",
|
||||
label: "Puce basse",
|
||||
modelPath: "/models/puce/model.gltf",
|
||||
caseAnchor: "pucebas",
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user