Add support for cone and torus brushes in geometry module and introduce MakeNpcTalk sequence effect

This commit is contained in:
2026-04-15 09:07:49 +02:00
parent 06c3711ebc
commit eb0fec4761
2 changed files with 57 additions and 0 deletions

View File

@@ -311,6 +311,10 @@ export function getBrushFaceIds(brush: Brush): WhiteboxFaceId[] {
return [...WEDGE_FACE_IDS]; return [...WEDGE_FACE_IDS];
case "radialPrism": case "radialPrism":
return getRadialPrismFaceIds(brush.sideCount); 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]; return [...WEDGE_EDGE_IDS];
case "radialPrism": case "radialPrism":
return getRadialPrismEdgeIds(brush.sideCount); 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]; return [...WEDGE_VERTEX_IDS];
case "radialPrism": case "radialPrism":
return getRadialPrismVertexIds(brush.sideCount); 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; return WEDGE_FACE_LABELS[faceId as WedgeFaceId] ?? faceId;
case "radialPrism": case "radialPrism":
return getRadialPrismFaceLabel(faceId as RadialPrismFaceId); 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; return WEDGE_EDGE_LABELS[edgeId as WedgeEdgeId] ?? edgeId;
case "radialPrism": case "radialPrism":
return getRadialPrismEdgeLabel(edgeId as RadialPrismEdgeId); 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; return WEDGE_VERTEX_LABELS[vertexId as WedgeVertexId] ?? vertexId;
case "radialPrism": case "radialPrism":
return getRadialPrismVertexLabel(vertexId as RadialPrismVertexId); 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]]; return [...WEDGE_FACE_VERTEX_IDS[faceId as WedgeFaceId]];
case "radialPrism": case "radialPrism":
return getRadialPrismFaceVertexIds(brush, faceId as RadialPrismFaceId); 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, edgeId as RadialPrismEdgeId,
brush.sideCount 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}`; return `Whitebox Wedge ${index + 1}`;
case "radialPrism": case "radialPrism":
return `Whitebox Cylinder ${index + 1}`; 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"; return "Whitebox Wedge";
case "radialPrism": case "radialPrism":
return "Whitebox Cylinder"; return "Whitebox Cylinder";
case "cone":
return "Whitebox Cone";
case "torus":
return "Whitebox Torus";
} }
} }

View File

@@ -27,6 +27,13 @@ export interface StartDialogueSequenceEffect {
dialogueId: string; dialogueId: string;
} }
export interface MakeNpcTalkSequenceEffect {
stepClass: "impulse";
type: "makeNpcTalk";
npcEntityId: string;
dialogueId: string | null;
}
export interface TeleportPlayerSequenceEffect { export interface TeleportPlayerSequenceEffect {
stepClass: "impulse"; stepClass: "impulse";
type: "teleportPlayer"; type: "teleportPlayer";
@@ -77,6 +84,7 @@ export type HeldSequenceStep = HeldControlSequenceEffect;
export type ImpulseSequenceStep = export type ImpulseSequenceStep =
| ImpulseControlSequenceEffect | ImpulseControlSequenceEffect
| MakeNpcTalkSequenceEffect
| StartDialogueSequenceEffect | StartDialogueSequenceEffect
| TeleportPlayerSequenceEffect | TeleportPlayerSequenceEffect
| StartSceneTransitionSequenceEffect | StartSceneTransitionSequenceEffect
@@ -100,6 +108,13 @@ export function cloneSequenceEffect(effect: SequenceEffect): SequenceEffect {
type: "startDialogue", type: "startDialogue",
dialogueId: effect.dialogueId dialogueId: effect.dialogueId
}; };
case "makeNpcTalk":
return {
stepClass: "impulse",
type: "makeNpcTalk",
npcEntityId: effect.npcEntityId,
dialogueId: effect.dialogueId
};
case "teleportPlayer": case "teleportPlayer":
return { return {
stepClass: "impulse", stepClass: "impulse",
@@ -158,6 +173,8 @@ export function getSequenceEffectLabel(effect: SequenceEffect): string {
return getControlEffectLabel(effect.effect); return getControlEffectLabel(effect.effect);
case "startDialogue": case "startDialogue":
return "Start Dialogue"; return "Start Dialogue";
case "makeNpcTalk":
return "Make NPC Talk";
case "teleportPlayer": case "teleportPlayer":
return "Teleport Player"; return "Teleport Player";
case "startSceneTransition": case "startSceneTransition":