-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
impl of array like reactive container, which only allows appending. A…
…lso refactored most run classes to use reactive appendable arrays
- Loading branch information
1 parent
82abda8
commit 195e419
Showing
19 changed files
with
1,160 additions
and
558 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,5 +17,6 @@ | |
".*Styles", | ||
".*Class", | ||
".*ClassName" | ||
] | ||
], | ||
"cSpell.words": ["Arrayish"] | ||
} |
42 changes: 42 additions & 0 deletions
42
src/lib/parser/recording-files/combine-recording-context.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
import { HeroStateField } from '../hero-state/hero-states'; | ||
import { PlayerDataField } from '../player-data'; | ||
import { RecordingFileVersion } from '../recording-file-version'; | ||
import { FrameEndEvent, PlayerPositionEvent, SceneEvent } from './events'; | ||
import { PlayerDataEvent } from './events/player-data-event'; | ||
import { HeroStateEvent } from './recording'; | ||
|
||
export class CombineRecordingsContext { | ||
msIntoGame = 0; | ||
lastTimestamp: number = 0; | ||
|
||
isPaused = true; | ||
isTransitioning = false; | ||
|
||
previousPlayerDataEventsByField = new Map<PlayerDataField, PlayerDataEvent<PlayerDataField>>(); | ||
|
||
getPreviousPlayerData = <TField extends PlayerDataField>(field: TField) => { | ||
return this.previousPlayerDataEventsByField.get(field) as PlayerDataEvent<TField> | undefined; | ||
}; | ||
|
||
previousHeroStateByField = new Map<HeroStateField, HeroStateEvent>(); | ||
getPreviousHeroState = (field: HeroStateField) => { | ||
return this.previousHeroStateByField.get(field); | ||
}; | ||
|
||
createEndFrameEvent = false; | ||
|
||
previousPlayerPositionEvent: PlayerPositionEvent | null = null; | ||
previousPositionEventWithChangedPosition: PlayerPositionEvent | null = null; | ||
previousPlayerPositionEventWithMapPosition: PlayerPositionEvent | null = null; | ||
previousFrameEndEvent: FrameEndEvent | null = null; | ||
previousSceneEvent: SceneEvent | null = null; | ||
|
||
recordingFileVersion: RecordingFileVersion = '0.0.0'; | ||
|
||
visitedScenesToCheckIfInPlayerData = [] as { sceneName: string; msIntoGame: number }[]; | ||
|
||
allModVersions = new Map<string, Set<string>>(); | ||
allHkVizModVersions = new Set<string>(); | ||
|
||
hasCreatedFirstEndFrameEvent = false; | ||
} |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
import { Accessor, createSignal, Setter } from 'solid-js'; | ||
|
||
const frozenSetter = () => { | ||
throw new Error('Cannot set value of frozen signal'); | ||
}; | ||
|
||
const frozenFrozen = () => { | ||
return; | ||
}; | ||
|
||
export interface FreezableSignal<T> { | ||
get: Accessor<T>; | ||
set: Setter<T>; | ||
freeze(): void; | ||
} | ||
|
||
/** | ||
* A signal that can be frozen. When frozen, the value is fixed and cannot be changed. | ||
* Therefore, will not contribute to the reactive graph. | ||
* | ||
* If already frozen when created, the signal will never be created. | ||
*/ | ||
export function createFreezableSignal<T>(value: T, frozen: boolean) { | ||
if (frozen) { | ||
return { get: () => value, set: frozenSetter, freeze: frozenFrozen }; | ||
} | ||
|
||
let _frozen = false; | ||
let _value = value; | ||
const [_get, _set] = createSignal<T>(value); | ||
|
||
function get(): T { | ||
if (_frozen) { | ||
return value; | ||
} | ||
return _get(); | ||
} | ||
const set: Setter<T> = ((v: any) => { | ||
if (_frozen) { | ||
throw new Error('Cannot set value of frozen signal'); | ||
} | ||
return _set(v); | ||
}) as any; | ||
|
||
function freeze() { | ||
if (_frozen) { | ||
return; | ||
} | ||
_frozen = true; | ||
_value = _get(); | ||
} | ||
|
||
return { get, set, freeze }; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.