Scale NPC dialogue target bounds calculations
This commit is contained in:
@@ -393,52 +393,55 @@ function getNpcDialogueTargetBounds(npc: RuntimeNpc): {
|
|||||||
} {
|
} {
|
||||||
switch (npc.collider.mode) {
|
switch (npc.collider.mode) {
|
||||||
case "capsule": {
|
case "capsule": {
|
||||||
|
const radius = npc.collider.radius * Math.max(npc.scale.x, npc.scale.z);
|
||||||
|
const height = npc.collider.height * npc.scale.y;
|
||||||
return {
|
return {
|
||||||
min: {
|
min: {
|
||||||
x: npc.position.x - npc.collider.radius,
|
x: npc.position.x - radius,
|
||||||
y: npc.position.y,
|
y: npc.position.y,
|
||||||
z: npc.position.z - npc.collider.radius
|
z: npc.position.z - radius
|
||||||
},
|
},
|
||||||
max: {
|
max: {
|
||||||
x: npc.position.x + npc.collider.radius,
|
x: npc.position.x + radius,
|
||||||
y: npc.position.y + npc.collider.height,
|
y: npc.position.y + height,
|
||||||
z: npc.position.z + npc.collider.radius
|
z: npc.position.z + radius
|
||||||
},
|
},
|
||||||
center: {
|
center: {
|
||||||
x: npc.position.x,
|
x: npc.position.x,
|
||||||
y: npc.position.y + npc.collider.height * 0.5,
|
y: npc.position.y + height * 0.5,
|
||||||
z: npc.position.z
|
z: npc.position.z
|
||||||
},
|
},
|
||||||
range: Math.max(
|
range: Math.max(
|
||||||
DEFAULT_NPC_DIALOGUE_TARGET_RADIUS,
|
DEFAULT_NPC_DIALOGUE_TARGET_RADIUS,
|
||||||
npc.collider.height * 0.5
|
height * 0.5
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
case "box": {
|
case "box": {
|
||||||
|
const size = {
|
||||||
|
x: npc.collider.size.x * npc.scale.x,
|
||||||
|
y: npc.collider.size.y * npc.scale.y,
|
||||||
|
z: npc.collider.size.z * npc.scale.z
|
||||||
|
};
|
||||||
return {
|
return {
|
||||||
min: {
|
min: {
|
||||||
x: npc.position.x - npc.collider.size.x * 0.5,
|
x: npc.position.x - size.x * 0.5,
|
||||||
y: npc.position.y,
|
y: npc.position.y,
|
||||||
z: npc.position.z - npc.collider.size.z * 0.5
|
z: npc.position.z - size.z * 0.5
|
||||||
},
|
},
|
||||||
max: {
|
max: {
|
||||||
x: npc.position.x + npc.collider.size.x * 0.5,
|
x: npc.position.x + size.x * 0.5,
|
||||||
y: npc.position.y + npc.collider.size.y,
|
y: npc.position.y + size.y,
|
||||||
z: npc.position.z + npc.collider.size.z * 0.5
|
z: npc.position.z + size.z * 0.5
|
||||||
},
|
},
|
||||||
center: {
|
center: {
|
||||||
x: npc.position.x,
|
x: npc.position.x,
|
||||||
y: npc.position.y + npc.collider.size.y * 0.5,
|
y: npc.position.y + size.y * 0.5,
|
||||||
z: npc.position.z
|
z: npc.position.z
|
||||||
},
|
},
|
||||||
range: Math.max(
|
range: Math.max(
|
||||||
DEFAULT_NPC_DIALOGUE_TARGET_RADIUS,
|
DEFAULT_NPC_DIALOGUE_TARGET_RADIUS,
|
||||||
Math.max(
|
Math.max(size.x, size.y, size.z) * 0.5
|
||||||
npc.collider.size.x,
|
|
||||||
npc.collider.size.y,
|
|
||||||
npc.collider.size.z
|
|
||||||
) * 0.5
|
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user