import type { CardProps } from "@thorium/cards/CardProps"; import { SensorsDamageOverlay, useSensorGridOffline, } from "@thorium/cards/Sensors/SensorsDamageOverlay"; import { BeamVisualization, PhaserArcs, Phasers } from "@thorium/cards/Targeting/Phasers"; import { Shields } from "@thorium/cards/Targeting/Shields"; import { Torpedoes } from "@thorium/cards/Targeting/Torpedoes"; import { q } from "@thorium/context/AppContext"; import { useStation } from "@thorium/routes/station/useStation"; import { cn } from "@thorium/utils/cn"; import * as React from "react"; import { ObjectImage, useObjectData } from "../Navigation/ObjectDetails"; import { CircleGrid, CircleGridTiltButton, GridCanvas } from "../Pilot/CircleGrid"; import { CircleGridContacts } from "../Pilot/PilotContacts"; import { PilotZoomSlider } from "../Pilot/PilotZoomSlider"; import { CircleGridStoreProvider } from "../Pilot/useCircleGridStore"; /** * TODO: * Add overlays to the targeting grid showing where the torpedo will fire from * Add explosions to the Viewscreen, and maybe even the targeting grid. */ export function Targeting({ cardLoaded }: CardProps) { const { shipId, ship } = useStation(); const setTarget = q.targeting.setTarget.useNetSend(); const [targetedContact] = q.targeting.targetedContact.useNetRequest({ shipId, }); q.targeting.stream.useDataStream({ shipId }); q.pilot.stream.useDataStream({ shipId, systemId: ship.currentSystem }); const [hull] = q.targeting.hull.useNetRequest({ shipId }); const clickRef = React.useRef(false); const { gridOffline } = useSensorGridOffline(); return (
{hull}
Hull Integrity
{ if (clickRef.current === true) { clickRef.current = false; return; } if (targetedContact) { setTarget.mutate({ target: null, shipId }); } }} outerChildren={} > }> {gridOffline ? null : ( <> { clickRef.current = true; setTarget.mutate({ target: contact, shipId }); }} /> )}
{targetedContact?.id ? ( Accessing...}> ) : (

No Object Targeted

)}
); } function ObjectData({ objectId }: { objectId: number }) { const [object, distanceRef] = useObjectData(objectId); return object ? (

{object.name}

{object.classification}

Distance:

) : (

Unidentified

); }