Feat: Add interaction reach distance to player start entities

This commit is contained in:
2026-04-26 23:01:34 +02:00
parent 8c1b9e647e
commit 7768ff22eb

View File

@@ -46,6 +46,7 @@ export interface PlayerStartEntity extends PositionedEntity {
kind: "playerStart"; kind: "playerStart";
yawDegrees: number; yawDegrees: number;
navigationMode: PlayerStartNavigationMode; navigationMode: PlayerStartNavigationMode;
interactionReachMeters: number;
movementTemplate: PlayerStartMovementTemplate; movementTemplate: PlayerStartMovementTemplate;
inputBindings: PlayerStartInputBindings; inputBindings: PlayerStartInputBindings;
collider: PlayerStartColliderSettings; collider: PlayerStartColliderSettings;
@@ -552,6 +553,7 @@ export const DEFAULT_PLAYER_START_COLLIDER_MODE: PlayerStartColliderMode = "caps
export const DEFAULT_PLAYER_START_EYE_HEIGHT = 1.6; export const DEFAULT_PLAYER_START_EYE_HEIGHT = 1.6;
export const DEFAULT_PLAYER_START_CAPSULE_RADIUS = 0.3; export const DEFAULT_PLAYER_START_CAPSULE_RADIUS = 0.3;
export const DEFAULT_PLAYER_START_CAPSULE_HEIGHT = 1.8; export const DEFAULT_PLAYER_START_CAPSULE_HEIGHT = 1.8;
export const DEFAULT_PLAYER_START_INTERACTION_REACH_METERS = 1.5;
export const DEFAULT_PLAYER_START_BOX_SIZE: Vec3 = { export const DEFAULT_PLAYER_START_BOX_SIZE: Vec3 = {
x: 0.6, x: 0.6,
y: 1.8, y: 1.8,
@@ -1837,7 +1839,14 @@ export function createPlayerStartEntity(
overrides: Partial< overrides: Partial<
Pick< Pick<
PlayerStartEntity, PlayerStartEntity,
"id" | "name" | "visible" | "enabled" | "position" | "yawDegrees" | "navigationMode" | "id"
| "name"
| "visible"
| "enabled"
| "position"
| "yawDegrees"
| "navigationMode"
| "interactionReachMeters"
> >
> & { > & {
movementTemplate?: PlayerStartMovementTemplateOverrides; movementTemplate?: PlayerStartMovementTemplateOverrides;
@@ -1849,6 +1858,9 @@ export function createPlayerStartEntity(
const yawDegrees = overrides.yawDegrees ?? DEFAULT_PLAYER_START_YAW_DEGREES; const yawDegrees = overrides.yawDegrees ?? DEFAULT_PLAYER_START_YAW_DEGREES;
const navigationMode = const navigationMode =
overrides.navigationMode ?? DEFAULT_PLAYER_START_NAVIGATION_MODE; overrides.navigationMode ?? DEFAULT_PLAYER_START_NAVIGATION_MODE;
const interactionReachMeters =
overrides.interactionReachMeters ??
DEFAULT_PLAYER_START_INTERACTION_REACH_METERS;
const movementTemplate = createPlayerStartMovementTemplate( const movementTemplate = createPlayerStartMovementTemplate(
overrides.movementTemplate overrides.movementTemplate
); );
@@ -1867,6 +1879,11 @@ export function createPlayerStartEntity(
); );
} }
assertPositiveFiniteNumber(
interactionReachMeters,
"Player Start interaction reach"
);
return { return {
id: overrides.id ?? createOpaqueId("entity-player-start"), id: overrides.id ?? createOpaqueId("entity-player-start"),
kind: "playerStart", kind: "playerStart",
@@ -1876,6 +1893,7 @@ export function createPlayerStartEntity(
position, position,
yawDegrees: normalizeYawDegrees(yawDegrees), yawDegrees: normalizeYawDegrees(yawDegrees),
navigationMode, navigationMode,
interactionReachMeters,
movementTemplate, movementTemplate,
inputBindings, inputBindings,
collider collider
@@ -2476,6 +2494,7 @@ export function areEntityInstancesEqual(left: EntityInstance, right: EntityInsta
areVec3Equal(left.position, typedRight.position) && areVec3Equal(left.position, typedRight.position) &&
left.yawDegrees === typedRight.yawDegrees && left.yawDegrees === typedRight.yawDegrees &&
left.navigationMode === typedRight.navigationMode && left.navigationMode === typedRight.navigationMode &&
left.interactionReachMeters === typedRight.interactionReachMeters &&
arePlayerStartMovementTemplatesEqual( arePlayerStartMovementTemplatesEqual(
left.movementTemplate, left.movementTemplate,
typedRight.movementTemplate typedRight.movementTemplate