release: bump version to 0.46.0
This commit is contained in:
@@ -123,6 +123,8 @@ import {
|
||||
import {
|
||||
loadBGPAnomalies,
|
||||
getBGPAnomalyMarkers,
|
||||
getBGPAnomalyPointerIntersections as getBGPEventIconPointerIntersections,
|
||||
getBGPCollectorPointerIntersections as getBGPCollectorIconPointerIntersections,
|
||||
getBGPCollectorMarkers,
|
||||
getBGPLegendItems,
|
||||
getBGPCount,
|
||||
@@ -162,6 +164,7 @@ import {
|
||||
getComputeCenterCount,
|
||||
getComputeCenterLegendItems,
|
||||
getComputeCenterMarkers,
|
||||
getComputeCenterPointerIntersections as getComputeCenterIconPointerIntersections,
|
||||
getShowComputeCenters,
|
||||
loadComputeCenters,
|
||||
setComputeCenterMarkerState,
|
||||
@@ -175,6 +178,7 @@ import {
|
||||
getVesselCount,
|
||||
getVesselLegendItems,
|
||||
getVesselMarkers,
|
||||
getVesselPointerIntersections as getVesselIconPointerIntersections,
|
||||
loadVessels,
|
||||
setVesselMarkerState,
|
||||
showVesselTrack,
|
||||
@@ -291,14 +295,6 @@ const interactionMouse = new THREE.Vector2();
|
||||
const scratchCameraToEarth = new THREE.Vector3();
|
||||
const scratchCableCenter = new THREE.Vector3();
|
||||
const scratchCableDirection = new THREE.Vector3();
|
||||
const scratchBGPDirection = new THREE.Vector3();
|
||||
const scratchBGPWorldPosition = new THREE.Vector3();
|
||||
const scratchComputeCenterDirection = new THREE.Vector3();
|
||||
const scratchComputeCenterWorldPosition = new THREE.Vector3();
|
||||
const scratchVesselDirection = new THREE.Vector3();
|
||||
const scratchVesselCameraLocal = new THREE.Vector3();
|
||||
const scratchVesselWorldPosition = new THREE.Vector3();
|
||||
const scratchVesselScreenPosition = new THREE.Vector3();
|
||||
const scratchSatelliteWorldPosition = new THREE.Vector3();
|
||||
const scratchSatelliteScreenPosition = new THREE.Vector3();
|
||||
const scratchViewCenterWorld = new THREE.Vector3();
|
||||
@@ -315,6 +311,7 @@ const RELATED_SATELLITE_HIGHLIGHT_COLOR = "#7dd3fc";
|
||||
const DRAG_POINTER_THRESHOLD_PX = 8;
|
||||
const VESSEL_HOVER_PICK_INTERVAL_MS = 100;
|
||||
const VESSEL_POINTER_RADIUS_PX = 22;
|
||||
const INTERACTABLE_POINTER_RADIUS_PX = 24;
|
||||
const GLOBE_DRAGGING_CLASS = "is-globe-dragging";
|
||||
const HUD_INTERACTIVE_SELECTORS = [
|
||||
".earth-left-column",
|
||||
@@ -548,70 +545,37 @@ function clearTransientHoverState() {
|
||||
setHoveredSatelliteIndex(null);
|
||||
}
|
||||
|
||||
function getFrontFacingVesselMarkers(markers) {
|
||||
function getVesselPointerIntersections() {
|
||||
const earth = getEarth();
|
||||
if (!earth) return markers;
|
||||
|
||||
scratchVesselCameraLocal.copy(camera.position);
|
||||
earth.worldToLocal(scratchVesselCameraLocal);
|
||||
scratchVesselCameraLocal.normalize();
|
||||
|
||||
return markers.filter((marker) => {
|
||||
scratchVesselDirection.copy(marker.position).normalize();
|
||||
return (
|
||||
scratchVesselCameraLocal.dot(scratchVesselDirection) >
|
||||
SATELLITE_CONFIG.frontFacingDotThreshold
|
||||
);
|
||||
return getVesselIconPointerIntersections({
|
||||
earth,
|
||||
camera,
|
||||
pointer: interactionMouse,
|
||||
radiusPx: VESSEL_POINTER_RADIUS_PX,
|
||||
frontFacingDotThreshold: SATELLITE_CONFIG.frontFacingDotThreshold,
|
||||
});
|
||||
}
|
||||
|
||||
function getVesselPointerIntersections() {
|
||||
function getBGPEventPointerIntersections() {
|
||||
const earth = getEarth();
|
||||
if (!earth) return [];
|
||||
scratchVesselCameraLocal.copy(camera.position);
|
||||
earth.worldToLocal(scratchVesselCameraLocal);
|
||||
scratchVesselCameraLocal.normalize();
|
||||
|
||||
const pointerX = ((interactionMouse.x + 1) / 2) * window.innerWidth;
|
||||
const pointerY = ((1 - interactionMouse.y) / 2) * window.innerHeight;
|
||||
const radiusSq = VESSEL_POINTER_RADIUS_PX * VESSEL_POINTER_RADIUS_PX;
|
||||
const intersections = [];
|
||||
|
||||
getVesselMarkers().forEach((marker) => {
|
||||
scratchVesselDirection.copy(marker.position).normalize();
|
||||
if (
|
||||
scratchVesselCameraLocal.dot(scratchVesselDirection) <=
|
||||
SATELLITE_CONFIG.frontFacingDotThreshold
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
scratchVesselWorldPosition.copy(marker.position);
|
||||
earth.localToWorld(scratchVesselWorldPosition);
|
||||
scratchVesselScreenPosition.copy(scratchVesselWorldPosition).project(camera);
|
||||
if (
|
||||
scratchVesselScreenPosition.z < -1 ||
|
||||
scratchVesselScreenPosition.z > 1
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const screenX = (scratchVesselScreenPosition.x * 0.5 + 0.5) * window.innerWidth;
|
||||
const screenY = (-scratchVesselScreenPosition.y * 0.5 + 0.5) * window.innerHeight;
|
||||
const deltaX = screenX - pointerX;
|
||||
const deltaY = screenY - pointerY;
|
||||
const distancePxSq = deltaX * deltaX + deltaY * deltaY;
|
||||
if (distancePxSq > radiusSq) return;
|
||||
|
||||
intersections.push({
|
||||
object: marker,
|
||||
point: scratchVesselWorldPosition.clone(),
|
||||
distance: camera.position.distanceTo(scratchVesselWorldPosition),
|
||||
distancePxSq,
|
||||
});
|
||||
return getBGPEventIconPointerIntersections({
|
||||
earth,
|
||||
camera,
|
||||
pointer: interactionMouse,
|
||||
radiusPx: INTERACTABLE_POINTER_RADIUS_PX,
|
||||
frontFacingDotThreshold: SATELLITE_CONFIG.frontFacingDotThreshold,
|
||||
});
|
||||
}
|
||||
|
||||
return intersections.sort((a, b) => a.distancePxSq - b.distancePxSq);
|
||||
function getBGPCollectorPointerIntersections() {
|
||||
const earth = getEarth();
|
||||
return getBGPCollectorIconPointerIntersections({
|
||||
earth,
|
||||
camera,
|
||||
pointer: interactionMouse,
|
||||
radiusPx: INTERACTABLE_POINTER_RADIUS_PX,
|
||||
frontFacingDotThreshold: SATELLITE_CONFIG.frontFacingDotThreshold,
|
||||
});
|
||||
}
|
||||
|
||||
function shouldSkipVesselHoverPicking() {
|
||||
@@ -3115,41 +3079,14 @@ function getFrontFacingCables(cableLines) {
|
||||
});
|
||||
}
|
||||
|
||||
function getFrontFacingBGPMarkers(markers) {
|
||||
function getComputeCenterPointerIntersections() {
|
||||
const earth = getEarth();
|
||||
if (!earth) return markers;
|
||||
|
||||
scratchCameraToEarth.subVectors(camera.position, earth.position).normalize();
|
||||
|
||||
return markers.filter((marker) => {
|
||||
scratchBGPWorldPosition.copy(marker.position);
|
||||
marker.parent?.localToWorld(scratchBGPWorldPosition);
|
||||
scratchBGPDirection
|
||||
.subVectors(scratchBGPWorldPosition, earth.position)
|
||||
.normalize();
|
||||
return (
|
||||
scratchCameraToEarth.dot(scratchBGPDirection) >
|
||||
SATELLITE_CONFIG.frontFacingDotThreshold
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function getFrontFacingComputeCenterMarkers(markers) {
|
||||
const earth = getEarth();
|
||||
if (!earth) return markers;
|
||||
|
||||
scratchCameraToEarth.subVectors(camera.position, earth.position).normalize();
|
||||
|
||||
return markers.filter((marker) => {
|
||||
scratchComputeCenterWorldPosition.copy(marker.position);
|
||||
marker.parent?.localToWorld(scratchComputeCenterWorldPosition);
|
||||
scratchComputeCenterDirection
|
||||
.subVectors(scratchComputeCenterWorldPosition, earth.position)
|
||||
.normalize();
|
||||
return (
|
||||
scratchCameraToEarth.dot(scratchComputeCenterDirection) >
|
||||
SATELLITE_CONFIG.frontFacingDotThreshold
|
||||
);
|
||||
return getComputeCenterIconPointerIntersections({
|
||||
earth,
|
||||
camera,
|
||||
pointer: interactionMouse,
|
||||
radiusPx: INTERACTABLE_POINTER_RADIUS_PX,
|
||||
frontFacingDotThreshold: SATELLITE_CONFIG.frontFacingDotThreshold,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -3199,23 +3136,14 @@ function onMouseMove(event) {
|
||||
|
||||
const frontCables = getFrontFacingCables(getCableLines());
|
||||
const cableIntersects = interactionRaycaster.intersectObjects(frontCables);
|
||||
const frontFacingBGPAnomalyMarkers = getFrontFacingBGPMarkers(
|
||||
getBGPAnomalyMarkers(),
|
||||
);
|
||||
const frontFacingBGPCollectorMarkers = getFrontFacingBGPMarkers(
|
||||
getBGPCollectorMarkers(),
|
||||
);
|
||||
const bgpAnomalyIntersects = getShowBGP()
|
||||
? interactionRaycaster.intersectObjects(frontFacingBGPAnomalyMarkers)
|
||||
? getBGPEventPointerIntersections()
|
||||
: [];
|
||||
const bgpCollectorIntersects = getShowBGP()
|
||||
? interactionRaycaster.intersectObjects(frontFacingBGPCollectorMarkers)
|
||||
? getBGPCollectorPointerIntersections()
|
||||
: [];
|
||||
const frontFacingComputeCenterMarkers = getFrontFacingComputeCenterMarkers(
|
||||
getComputeCenterMarkers(),
|
||||
);
|
||||
const computeCenterIntersects = getShowComputeCenters()
|
||||
? interactionRaycaster.intersectObjects(frontFacingComputeCenterMarkers)
|
||||
? getComputeCenterPointerIntersections()
|
||||
: [];
|
||||
const vesselPick = getVesselHoverIntersections();
|
||||
const vesselIntersects = vesselPick.intersects;
|
||||
@@ -3552,22 +3480,14 @@ function onClick(event) {
|
||||
const cableIntersects = interactionRaycaster.intersectObjects(
|
||||
getFrontFacingCables(getCableLines()),
|
||||
);
|
||||
const frontFacingBGPAnomalyMarkers = getFrontFacingBGPMarkers(
|
||||
getBGPAnomalyMarkers(),
|
||||
);
|
||||
const frontFacingBGPCollectorMarkers = getFrontFacingBGPMarkers(
|
||||
getBGPCollectorMarkers(),
|
||||
);
|
||||
const bgpAnomalyIntersects = getShowBGP()
|
||||
? interactionRaycaster.intersectObjects(frontFacingBGPAnomalyMarkers)
|
||||
? getBGPEventPointerIntersections()
|
||||
: [];
|
||||
const bgpCollectorIntersects = getShowBGP()
|
||||
? interactionRaycaster.intersectObjects(frontFacingBGPCollectorMarkers)
|
||||
? getBGPCollectorPointerIntersections()
|
||||
: [];
|
||||
const computeCenterIntersects = getShowComputeCenters()
|
||||
? interactionRaycaster.intersectObjects(
|
||||
getFrontFacingComputeCenterMarkers(getComputeCenterMarkers()),
|
||||
)
|
||||
? getComputeCenterPointerIntersections()
|
||||
: [];
|
||||
const vesselIntersects = getShowVessels()
|
||||
? getVesselPointerIntersections()
|
||||
|
||||
Reference in New Issue
Block a user