forked from phenom/healer-man
Release Healer Man 0.1.11
This commit is contained in:
1 parent
5f1a14d8de
commit
13970d03c8
18 files changed
+514
-19
No files matched your search
@@ -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
|
||||
|
||||
Reference in new issue
Block a user