Release Healer Man 0.1.21
This commit is contained in:
1 parent
699fc858c9
commit
f6f2375145
210 files changed
+976039
-6247
No files matched your search
+26
-1
@@ -8,7 +8,7 @@ import type { GmReviewTarget } from "./gmContentReview";
|
||||
export type AssetStatus = "checking" | "loading" | "ready" | "proxy" | "error";
|
||||
export type InputMode = "keyboard" | "gamepad";
|
||||
export type GameMode = "dungeon" | "manastorm";
|
||||
export type GameOverlay = "pause" | "party" | "inventory" | "map" | "spellbook" | "talents" | "bindings" | "options" | "gm" | null;
|
||||
export type GameOverlay = "pause" | "party" | "inventory" | "map" | "boss-guide" | "spellbook" | "talents" | "bindings" | "options" | "gm" | null;
|
||||
|
||||
interface PlayerSnapshot {
|
||||
position: Vector3Tuple;
|
||||
@@ -42,6 +42,10 @@ export interface GameState {
|
||||
distanceTravelled: number;
|
||||
hasMoved: boolean;
|
||||
resetRevision: number;
|
||||
/** Renderer relocation signal that does not imply a combat/encounter reset. */
|
||||
relocationRevision: number;
|
||||
/** Explicit local reset request; dungeon activation performs its reset before hydration. */
|
||||
encounterResetRevision: number;
|
||||
activateDungeon: (
|
||||
dungeonId: DungeonId,
|
||||
difficultyId?: string,
|
||||
@@ -65,6 +69,7 @@ export interface GameState {
|
||||
setActionLayer: (layer: ActionBindingLayer) => void;
|
||||
setAssetStatus: (status: AssetStatus, message?: string | null) => void;
|
||||
updatePlayerSnapshot: (snapshot: PlayerSnapshot) => void;
|
||||
relocatePlayer: (spawn: WorldSpawn, makeActiveSpawn?: boolean) => void;
|
||||
resetAtActiveSpawn: () => void;
|
||||
resetAtEntrance: () => void;
|
||||
}
|
||||
@@ -97,6 +102,8 @@ export const useGameStore = create<GameState>((set) => ({
|
||||
distanceTravelled: 0,
|
||||
hasMoved: false,
|
||||
resetRevision: 0,
|
||||
relocationRevision: 0,
|
||||
encounterResetRevision: 0,
|
||||
activateDungeon: (activeDungeonId, requestedDifficultyId, options) => set((state) => {
|
||||
const definition = requireDungeonDefinition(activeDungeonId);
|
||||
const activeDifficultyId = definition.difficultyVariants.some((variant) => variant.id === requestedDifficultyId)
|
||||
@@ -130,6 +137,7 @@ export const useGameStore = create<GameState>((set) => ({
|
||||
distanceTravelled: 0,
|
||||
hasMoved: false,
|
||||
resetRevision: state.resetRevision + 1,
|
||||
relocationRevision: state.relocationRevision + 1,
|
||||
};
|
||||
}),
|
||||
openOverlay: (overlay) => set({
|
||||
@@ -206,6 +214,19 @@ export const useGameStore = create<GameState>((set) => ({
|
||||
hasMoved: state.hasMoved || distanceDelta > 0.02,
|
||||
};
|
||||
}),
|
||||
relocatePlayer: (spawn, makeActiveSpawn = false) => set((state) => {
|
||||
const definition = requireDungeonDefinition(state.activeDungeonId);
|
||||
return {
|
||||
...(makeActiveSpawn ? { activeSpawn: spawn } : {}),
|
||||
playerPosition: spawn.footPosition,
|
||||
playerNavigationPosition: spawn.footPosition,
|
||||
playerGrounded: true,
|
||||
cameraYaw: spawn.yaw,
|
||||
areaName: resolveAreaNameForDungeon(definition, spawn.footPosition),
|
||||
cameraLookActive: false,
|
||||
relocationRevision: state.relocationRevision + 1,
|
||||
};
|
||||
}),
|
||||
resetAtActiveSpawn: () => set((state) => {
|
||||
const definition = requireDungeonDefinition(state.activeDungeonId);
|
||||
return {
|
||||
@@ -222,6 +243,8 @@ export const useGameStore = create<GameState>((set) => ({
|
||||
hasMoved: false,
|
||||
actionLayer: "primary",
|
||||
resetRevision: state.resetRevision + 1,
|
||||
relocationRevision: state.relocationRevision + 1,
|
||||
encounterResetRevision: state.encounterResetRevision + 1,
|
||||
};
|
||||
}),
|
||||
resetAtEntrance: () => set((state) => {
|
||||
@@ -246,6 +269,8 @@ export const useGameStore = create<GameState>((set) => ({
|
||||
hasMoved: false,
|
||||
actionLayer: "primary",
|
||||
resetRevision: state.resetRevision + 1,
|
||||
relocationRevision: state.relocationRevision + 1,
|
||||
encounterResetRevision: state.encounterResetRevision + 1,
|
||||
};
|
||||
}),
|
||||
}));
|
||||
Reference in new issue
Block a user