Release Healer Man 0.1.11

This commit is contained in:
phenom committed 2026-08-31 14:12:51 -04:00
1 parent 5f1a14d8de
commit 13970d03c8
18 files changed
+514 -19

No files matched your search

+22 -6
View File
@@ -53,6 +53,11 @@ import {
findNearestPartyNavigationSurface,
type PartyNavigationGraph,
} from "../game/partyNavigation";
import {
MAX_SYNCHRONOUS_PARTY_NAVIGATION_TRIANGLES,
partyObjectivesForNavigation,
shouldLoadPartyNavigation,
} from "../game/partyNavigationPolicy";
import {
emptyPartyRouteState,
nextPartyRouteRecoveryWaypoint,
@@ -184,7 +189,7 @@ class NavigationAssetBoundary extends Component<NavigationAssetBoundaryProps, Na
componentDidCatch(error: unknown, info: ErrorInfo): void {
this.props.onFailure();
console.warn("Party navigation asset could not be prepared; companions will hold safely.", error, info);
console.warn("Party navigation asset could not be prepared; companions will follow breadcrumbs.", error, info);
}
render(): ReactNode {
@@ -223,7 +228,10 @@ function PartyNavigationLoader({
const graph = useMemo(() => {
const geometry = navigationGeometry(gltf.scene);
try {
return buildPartyNavigationGraph(geometry, { offMeshLinks });
return buildPartyNavigationGraph(geometry, {
maxSourceTriangles: MAX_SYNCHRONOUS_PARTY_NAVIGATION_TRIANGLES,
offMeshLinks,
});
} finally {
geometry.dispose();
}
@@ -1412,13 +1420,15 @@ export function PartyPopulation({
: resolveDungeonAssets(dungeon),
[dungeon, manastormPackage, sessionRevision],
);
const navigationEnabled = Boolean(assets.navigation)
&& shouldLoadPartyNavigation(gameMode, dungeon, manastormPackage);
const navigationLinks = manastormPackage ? EMPTY_NAVIGATION_LINKS : dungeon.navigationLinks;
const [navigationState, setNavigationState] = useState<{
readonly url: string;
readonly graph: PartyNavigationGraph;
} | null>(null);
const [failedNavigationUrl, setFailedNavigationUrl] = useState<string | null>(null);
const navigationGraph = navigationState?.url === assets.navigation
const navigationGraph = navigationEnabled && navigationState?.url === assets.navigation
? navigationState.graph
: null;
const navigationFailed = Boolean(
@@ -1437,6 +1447,12 @@ export function PartyPopulation({
if (assets.navigation) setFailedNavigationUrl(assets.navigation);
}, [assets.navigation]);
useEffect(() => {
setNavigationState((current) => (
navigationEnabled && current?.url === assets.navigation ? current : null
));
}, [assets.navigation, navigationEnabled]);
return (
<>
<PartyActors
@@ -1444,11 +1460,11 @@ export function PartyPopulation({
active={active}
simulate={simulate}
navigationGraph={navigationGraph}
navigationFailed={navigationFailed || !assets.navigation}
objectives={objectives}
navigationFailed={navigationFailed || !navigationEnabled}
objectives={partyObjectivesForNavigation(Boolean(navigationGraph), objectives)}
stackAtEntrance={gameMode === "manastorm" || dungeon.validation.status !== "green"}
/>
{assets.navigation ? (
{navigationEnabled && assets.navigation ? (
<NavigationAssetBoundary key={assets.navigation} onFailure={rejectNavigationGraph}>
<Suspense fallback={null}>
<PartyNavigationLoader