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
@@ -48,6 +48,7 @@ import { stepFearedMobAway } from "../game/mobMotion";
|
||||
import {
|
||||
clusterStaticMobSpawns,
|
||||
createLoopedPath,
|
||||
normalizeMobPopulationPaths,
|
||||
samplePackFormation,
|
||||
} from "../game/mobPopulation";
|
||||
import { useGameStore } from "../game/store";
|
||||
@@ -1477,12 +1478,18 @@ export function MobPopulation({
|
||||
() => allowedRuntimeIds ? new Set(allowedRuntimeIds) : null,
|
||||
[allowedRuntimeIds],
|
||||
);
|
||||
const normalizedPopulation = useMemo(
|
||||
() => normalizeMobPopulationPaths(roamingPacks, staticSpawns),
|
||||
[roamingPacks, staticSpawns],
|
||||
);
|
||||
const staticClusters = useMemo(() => clusterStaticMobSpawns(
|
||||
allowedSet ? staticSpawns.filter((spawn) => allowedSet.has(spawn.id)) : staticSpawns,
|
||||
), [allowedSet, staticSpawns]);
|
||||
allowedSet
|
||||
? normalizedPopulation.staticSpawns.filter((spawn) => allowedSet.has(spawn.id))
|
||||
: normalizedPopulation.staticSpawns,
|
||||
), [allowedSet, normalizedPopulation.staticSpawns]);
|
||||
return (
|
||||
<group name="mob-population">
|
||||
{roamingPacks.map((pack) => (
|
||||
{normalizedPopulation.roamingPacks.map((pack) => (
|
||||
<RoamingPack
|
||||
key={pack.id}
|
||||
definition={pack}
|
||||
|
||||
@@ -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