diff --git a/src/geometry/whitebox-topology.ts b/src/geometry/whitebox-topology.ts index f421f63f..5917a27f 100644 --- a/src/geometry/whitebox-topology.ts +++ b/src/geometry/whitebox-topology.ts @@ -311,6 +311,10 @@ export function getBrushFaceIds(brush: Brush): WhiteboxFaceId[] { return [...WEDGE_FACE_IDS]; case "radialPrism": return getRadialPrismFaceIds(brush.sideCount); + case "cone": + return getConeFaceIds(brush.sideCount); + case "torus": + return getTorusFaceIds(brush.majorSegmentCount, brush.tubeSegmentCount); } } @@ -322,6 +326,10 @@ export function getBrushEdgeIds(brush: Brush): WhiteboxEdgeId[] { return [...WEDGE_EDGE_IDS]; case "radialPrism": return getRadialPrismEdgeIds(brush.sideCount); + case "cone": + return getConeEdgeIds(brush.sideCount); + case "torus": + return getTorusEdgeIds(brush.majorSegmentCount, brush.tubeSegmentCount); } } @@ -333,6 +341,10 @@ export function getBrushVertexIds(brush: Brush): WhiteboxVertexId[] { return [...WEDGE_VERTEX_IDS]; case "radialPrism": return getRadialPrismVertexIds(brush.sideCount); + case "cone": + return getConeVertexIds(brush.sideCount); + case "torus": + return getTorusVertexIds(brush.majorSegmentCount, brush.tubeSegmentCount); } } @@ -347,6 +359,10 @@ export function getBrushFaceLabel( return WEDGE_FACE_LABELS[faceId as WedgeFaceId] ?? faceId; case "radialPrism": return getRadialPrismFaceLabel(faceId as RadialPrismFaceId); + case "cone": + return getConeFaceLabel(faceId as ConeFaceId); + case "torus": + return getTorusFaceLabel(faceId as TorusFaceId); } } @@ -361,6 +377,10 @@ export function getBrushEdgeLabel( return WEDGE_EDGE_LABELS[edgeId as WedgeEdgeId] ?? edgeId; case "radialPrism": return getRadialPrismEdgeLabel(edgeId as RadialPrismEdgeId); + case "cone": + return getConeEdgeLabel(edgeId as ConeEdgeId); + case "torus": + return getTorusEdgeLabel(edgeId as TorusEdgeId); } } @@ -375,6 +395,10 @@ export function getBrushVertexLabel( return WEDGE_VERTEX_LABELS[vertexId as WedgeVertexId] ?? vertexId; case "radialPrism": return getRadialPrismVertexLabel(vertexId as RadialPrismVertexId); + case "cone": + return getConeVertexLabel(vertexId as ConeVertexId); + case "torus": + return getTorusVertexLabel(vertexId as TorusVertexId); } } @@ -389,6 +413,10 @@ export function getBrushFaceVertexIds( return [...WEDGE_FACE_VERTEX_IDS[faceId as WedgeFaceId]]; case "radialPrism": return getRadialPrismFaceVertexIds(brush, faceId as RadialPrismFaceId); + case "cone": + return getConeFaceVertexIds(brush, faceId as ConeFaceId); + case "torus": + return getTorusFaceVertexIds(brush, faceId as TorusFaceId); } } @@ -412,6 +440,10 @@ export function getBrushEdgeVertexIds( edgeId as RadialPrismEdgeId, brush.sideCount ); + case "cone": + return getConeEdgeVertexIds(edgeId as ConeEdgeId, brush.sideCount); + case "torus": + return getTorusEdgeVertexIds(brush, edgeId as TorusEdgeId); } } @@ -439,6 +471,10 @@ export function getBrushDefaultName(brush: Brush, index: number): string { return `Whitebox Wedge ${index + 1}`; case "radialPrism": return `Whitebox Cylinder ${index + 1}`; + case "cone": + return `Whitebox Cone ${index + 1}`; + case "torus": + return `Whitebox Torus ${index + 1}`; } } @@ -450,5 +486,9 @@ export function getBrushKindLabel(brush: Brush): string { return "Whitebox Wedge"; case "radialPrism": return "Whitebox Cylinder"; + case "cone": + return "Whitebox Cone"; + case "torus": + return "Whitebox Torus"; } } diff --git a/src/sequencer/project-sequence-steps.ts b/src/sequencer/project-sequence-steps.ts index 91e0a1b7..aa2d9f8c 100644 --- a/src/sequencer/project-sequence-steps.ts +++ b/src/sequencer/project-sequence-steps.ts @@ -27,6 +27,13 @@ export interface StartDialogueSequenceEffect { dialogueId: string; } +export interface MakeNpcTalkSequenceEffect { + stepClass: "impulse"; + type: "makeNpcTalk"; + npcEntityId: string; + dialogueId: string | null; +} + export interface TeleportPlayerSequenceEffect { stepClass: "impulse"; type: "teleportPlayer"; @@ -77,6 +84,7 @@ export type HeldSequenceStep = HeldControlSequenceEffect; export type ImpulseSequenceStep = | ImpulseControlSequenceEffect + | MakeNpcTalkSequenceEffect | StartDialogueSequenceEffect | TeleportPlayerSequenceEffect | StartSceneTransitionSequenceEffect @@ -100,6 +108,13 @@ export function cloneSequenceEffect(effect: SequenceEffect): SequenceEffect { type: "startDialogue", dialogueId: effect.dialogueId }; + case "makeNpcTalk": + return { + stepClass: "impulse", + type: "makeNpcTalk", + npcEntityId: effect.npcEntityId, + dialogueId: effect.dialogueId + }; case "teleportPlayer": return { stepClass: "impulse", @@ -158,6 +173,8 @@ export function getSequenceEffectLabel(effect: SequenceEffect): string { return getControlEffectLabel(effect.effect); case "startDialogue": return "Start Dialogue"; + case "makeNpcTalk": + return "Make NPC Talk"; case "teleportPlayer": return "Teleport Player"; case "startSceneTransition":