Skip to content

Commit 48520e0

Browse files
authored
Merge branch 'dev' into colbura/261/glueball-refactors
2 parents ab699fa + 937454e commit 48520e0

54 files changed

Lines changed: 1090 additions & 472 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/dependabot.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ updates:
55
directory: "/"
66
schedule:
77
interval: "daily"
8+
- package-ecosystem: "nix"
9+
directory: "/"
10+
schedule:
11+
interval: "weekly"

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ renderer/
1111
.idea
1212
**/.direnv
1313
.npmrc
14+
result
15+
result-*

fission/biome.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,16 @@
287287
"linter": {
288288
"enabled": false
289289
}
290+
},
291+
{
292+
"includes": ["src/test/**/*"],
293+
"linter": {
294+
"rules": {
295+
"style": {
296+
"useComponentExportOnlyModules": "off"
297+
}
298+
}
299+
}
290300
}
291301
],
292302
"assist": {

fission/public/assetpack.zip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:929579b2dc87cffb6b5236f054a6b1ffcb17f0a384f4262f58fd2cb99fdc48ac
3-
size 41776301
2+
oid sha256:2213eb7905d6fe15beb5fca656065c248da0c4f4b7630ced943bb5cf4a32c3fb
3+
size 43082276

fission/src/Synthesis.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { UIRenderer } from "@/ui/UIRenderer.tsx"
1111
import PreferencesSystem from "./systems/preferences/PreferencesSystem.ts"
1212
import AnalyticsConsent from "./ui/components/AnalyticsConsent.tsx"
1313
import ContextMenu from "./ui/components/ContextMenu.tsx"
14-
import DragModeIndicator from "@/components/overlays/DragModeIndicator.tsx"
1514
import ProgressNotifications from "@/components/ProgressNotification.tsx"
1615
import SceneOverlay from "@/components/overlays/SceneOverlay.tsx"
1716
import PortraitOverlay from "@/components/overlays/PortraitOverlay.tsx"
@@ -109,7 +108,6 @@ const Synthesis = () => {
109108
<CommandPalette />
110109
<ProgressNotifications key={"progress-notifications"} />
111110
<Stack direction={"column"} gap={1} position={"absolute"} bottom={0} left={0}>
112-
<DragModeIndicator />
113111
<MultiplayerHUD />
114112
</Stack>
115113
<PortraitOverlay />

fission/src/systems/EventSystem.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ interface EventDataMap {
4949
SetPlaceAssetButtonVisibleEvent: boolean
5050
ToggleTouchControlsVisibilityEvent: never
5151
SetTouchControlsVisibilityEvent: boolean
52+
TouchControlsVisibilityChangedEvent: { visible: boolean }
5253

53-
DragModeToggled: { enabled: boolean }
54+
SetDragModeEvent: { enabled: boolean }
5455

5556
CameraModeChangedEvent: { mode: string }
5657
CameraFocusChangedEvent: { focusProvider: MirabufSceneObject | undefined }

fission/src/systems/match_mode/DefaultMatchModeConfigs.ts

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { MatchModeConfig } from "@/ui/panels/configuring/MatchModeConfigPanel"
22
import { API_URL } from "@/util/Consts.ts"
33

4-
type ManifestMatchModeConfig = Omit<MatchModeConfig, "id"> & { id: string }
4+
type ManifestMatchModeConfig = Omit<MatchModeConfig, "id">
55
interface MatchConfigManifest {
66
private: Record<string, ManifestMatchModeConfig>
77
public: Record<string, ManifestMatchModeConfig>
@@ -12,32 +12,40 @@ class DefaultMatchModeConfigs {
1212
private static readonly MANIFEST_LOCATION = `${API_URL}/match_configs/manifest.json`
1313
private static _configs: MatchModeConfig[] = []
1414

15-
static {
16-
setTimeout(() => this.reload())
15+
private static _loading: Promise<void> | undefined
16+
17+
static reload(): Promise<void> {
18+
this._loading = this.load()
19+
return this._loading
1720
}
18-
static async reload() {
19-
const manifest = await fetch(this.MANIFEST_LOCATION)
20-
const json: MatchConfigManifest | undefined = await manifest.json().catch(e => {
21-
console.error(e)
22-
return undefined
23-
})
24-
if (json == null) {
25-
console.error("Could not load match mode manifest")
26-
return undefined
21+
22+
private static async load(): Promise<void> {
23+
const configs = await this.fetchConfigs()
24+
if (configs) {
25+
this._configs = configs
2726
}
28-
const keys: (keyof MatchConfigManifest)[] = import.meta.env.DEV
29-
? (["public", "private"] as const)
30-
: (["public"] as const)
31-
for (const key of keys) {
32-
const configs = json[key as keyof MatchConfigManifest]
33-
Object.entries(configs).forEach(([key, value]) => {
34-
value.id = key
35-
this._configs.push(value)
36-
})
27+
}
28+
29+
private static async fetchConfigs(): Promise<MatchModeConfig[] | undefined> {
30+
try {
31+
const response = await fetch(this.MANIFEST_LOCATION)
32+
const manifest: MatchConfigManifest | undefined = await response.json()
33+
if (manifest == undefined) {
34+
console.error("Could not load match mode manifest")
35+
return undefined
36+
}
37+
38+
const keys: (keyof MatchConfigManifest)[] = import.meta.env.DEV ? ["public", "private"] : ["public"]
39+
return keys.flatMap(key => Object.entries(manifest[key] ?? {}).map(([id, config]) => ({ ...config, id })))
40+
} catch (e) {
41+
console.error("Could not load match mode manifest", e)
42+
return undefined
3743
}
3844
}
3945

40-
public static get configs(): MatchModeConfig[] {
46+
public static async getConfigs(): Promise<MatchModeConfig[]> {
47+
this._loading ??= this.load()
48+
await this._loading
4149
return this._configs
4250
}
4351

fission/src/systems/preferences/PreferenceTypes.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export type UserPreferences = {
1515
RenderProtectedZones: boolean
1616
InputSchemes: InputScheme[]
1717
RenderSceneTags: boolean
18-
RenderScoreboard: boolean
18+
AlwaysShowScoreboard: boolean
1919
SubsystemGravity: boolean
2020
TouchControls: boolean
2121
SimAutoReconnect: boolean
@@ -57,7 +57,7 @@ export function defaultUserPreferences(): UserPreferences {
5757
RenderProtectedZones: true,
5858
InputSchemes: [],
5959
RenderSceneTags: true,
60-
RenderScoreboard: false,
60+
AlwaysShowScoreboard: true,
6161
SubsystemGravity: false,
6262
TouchControls: false,
6363
SimAutoReconnect: false,

fission/src/systems/scene/DragModeSystem.ts

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class DragModeSystem extends WorldSystem {
9292
this.handleWheelDuringDrag(event)
9393
}
9494
}
95-
this._unsubscriber = EventSystem.listen("DragModeToggled", ({ enabled }) => {
95+
this._unsubscriber = EventSystem.listen("SetDragModeEvent", ({ enabled }) => {
9696
this.enabled = enabled
9797
})
9898
}
@@ -101,6 +101,7 @@ class DragModeSystem extends WorldSystem {
101101
return this._enabled
102102
}
103103

104+
/** toggle using SetDragModeEvent. Not this */
104105
public set enabled(enabled: boolean) {
105106
if (this._enabled === enabled) return
106107

@@ -123,8 +124,6 @@ class DragModeSystem extends WorldSystem {
123124
this._dragModeStartTime = undefined
124125
}
125126
}
126-
127-
EventSystem.dispatch("DragModeToggled", { enabled })
128127
}
129128

130129
public update(_deltaT: number): void {
@@ -358,8 +357,22 @@ class DragModeSystem extends WorldSystem {
358357
private stopDragging(): void {
359358
if (!this._isDragging) return
360359

360+
let targetSceneObject: MirabufSceneObject | undefined
361+
let shouldTransition = true
362+
363+
if (this._dragTarget) {
364+
const association = World.physicsSystem.getBodyAssociation(this._dragTarget.bodyId) as RigidNodeAssociate
365+
targetSceneObject = association?.sceneObject
366+
if (association?.isGamePiece) {
367+
shouldTransition = false
368+
}
369+
}
370+
361371
if (this._dragTarget?.physicsDisabled) {
362-
World.physicsSystem.enablePhysicsForBody(this._dragTarget.bodyId)
372+
World.physicsSystem.enablePhysicsForBody(
373+
this._dragTarget.bodyId,
374+
targetSceneObject?.mechanism.layerReserve?.layer
375+
)
363376
} else if (this._dragTarget) {
364377
const body = World.physicsSystem.getBody(this._dragTarget.bodyId)
365378
if (body) {
@@ -387,17 +400,6 @@ class DragModeSystem extends WorldSystem {
387400
}
388401
}
389402

390-
let targetSceneObject: MirabufSceneObject | undefined
391-
let shouldTransition = true
392-
393-
if (this._dragTarget) {
394-
const association = World.physicsSystem.getBodyAssociation(this._dragTarget.bodyId) as RigidNodeAssociate
395-
targetSceneObject = association?.sceneObject
396-
if (association?.isGamePiece) {
397-
shouldTransition = false
398-
}
399-
}
400-
401403
this._isDragging = false
402404
this._dragTarget = undefined
403405

@@ -428,6 +430,9 @@ class DragModeSystem extends WorldSystem {
428430
World.physicsSystem.activateBody(this._dragTarget.bodyId)
429431
}
430432

433+
const compensateGravity =
434+
DragModeSystem.DRAG_FORCE_CONSTANTS.GRAVITY_COMPENSATION && !this._dragTarget.physicsDisabled
435+
431436
const currentPos = body.GetPosition()
432437
const currentPosition = new THREE.Vector3(currentPos.GetX(), currentPos.GetY(), currentPos.GetZ())
433438
const currentRotation = body.GetRotation()
@@ -509,7 +514,7 @@ class DragModeSystem extends WorldSystem {
509514
const forceNeeded = velocityError.multiplyScalar(forceMultiplier)
510515

511516
// Add gravity compensation to counteract downward pull
512-
if (DragModeSystem.DRAG_FORCE_CONSTANTS.GRAVITY_COMPENSATION) {
517+
if (compensateGravity) {
513518
const gravityCompensation = new THREE.Vector3(
514519
0,
515520
mass * DragModeSystem.DRAG_FORCE_CONSTANTS.GRAVITY_MAGNITUDE,
@@ -559,7 +564,7 @@ class DragModeSystem extends WorldSystem {
559564
)
560565

561566
// Add gravity compensation to prevent falling when stationary
562-
if (DragModeSystem.DRAG_FORCE_CONSTANTS.GRAVITY_COMPENSATION) {
567+
if (compensateGravity) {
563568
const gravityCompensationY = mass * DragModeSystem.DRAG_FORCE_CONSTANTS.GRAVITY_MAGNITUDE
564569
brakingForce.SetY(brakingForce.GetY() + gravityCompensationY)
565570
}

fission/src/test/PreferencesSystem.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@ describe("Preferences System Global Values", () => {
2525
test("Setting values", () => {
2626
PreferencesSystem.setUserPreference("SceneRotationSensitivity", 7)
2727
PreferencesSystem.setUserPreference("RenderSceneTags", false)
28-
PreferencesSystem.setUserPreference("RenderScoreboard", false)
28+
PreferencesSystem.setUserPreference("ShowViewCube", false)
2929

3030
expect(PreferencesSystem.getUserPreference("SceneRotationSensitivity")).toBe(7)
3131
expect(PreferencesSystem.getUserPreference("RenderSceneTags")).toBe(false)
32-
expect(PreferencesSystem.getUserPreference("RenderScoreboard")).toBe(false)
32+
expect(PreferencesSystem.getUserPreference("ShowViewCube")).toBe(false)
3333
})
3434

3535
test("Setting without saving", () => {
3636
PreferencesSystem.setUserPreference("SceneRotationSensitivity", 13)
3737
PreferencesSystem.setUserPreference("RenderSceneTags", false)
38-
PreferencesSystem.setUserPreference("RenderScoreboard", true)
38+
PreferencesSystem.setUserPreference("ShowViewCube", false)
3939

4040
window.localStorage.setItem("Preferences", "{}") // Clears local storage
4141
PreferencesSystem.loadPreferences()
@@ -46,31 +46,31 @@ describe("Preferences System Global Values", () => {
4646
test("Reset to default if undefined", () => {
4747
PreferencesSystem.setUserPreference("SceneRotationSensitivity", undefined as unknown as number)
4848
PreferencesSystem.setUserPreference("RenderSceneTags", undefined as unknown as boolean)
49-
PreferencesSystem.setUserPreference("RenderScoreboard", undefined as unknown as boolean)
49+
PreferencesSystem.setUserPreference("ShowViewCube", undefined as unknown as boolean)
5050

5151
expectDefaultPreferences()
5252
})
5353

5454
test("Setting then saving", () => {
5555
PreferencesSystem.setUserPreference("SceneRotationSensitivity", 13)
5656
PreferencesSystem.setUserPreference("RenderSceneTags", true)
57-
PreferencesSystem.setUserPreference("RenderScoreboard", false)
57+
PreferencesSystem.setUserPreference("ShowViewCube", false)
5858

5959
PreferencesSystem.savePreferences()
6060
PreferencesSystem.setUserPreference("SceneRotationSensitivity", 20)
6161
PreferencesSystem.setUserPreference("RenderSceneTags", false)
62-
PreferencesSystem.setUserPreference("RenderScoreboard", true)
62+
PreferencesSystem.setUserPreference("ShowViewCube", true)
6363
PreferencesSystem.loadPreferences()
6464

6565
expect(PreferencesSystem.getUserPreference("SceneRotationSensitivity")).toBe(13)
6666
expect(PreferencesSystem.getUserPreference("RenderSceneTags")).toBe(true)
67-
expect(PreferencesSystem.getUserPreference("RenderScoreboard")).toBe(false)
67+
expect(PreferencesSystem.getUserPreference("ShowViewCube")).toBe(false)
6868
})
6969

7070
test("Clearing preferences", () => {
7171
PreferencesSystem.setUserPreference("SceneRotationSensitivity", 13)
7272
PreferencesSystem.setUserPreference("RenderSceneTags", true)
73-
PreferencesSystem.setUserPreference("RenderScoreboard", false)
73+
PreferencesSystem.setUserPreference("ShowViewCube", false)
7474

7575
PreferencesSystem.clearPreferences()
7676

0 commit comments

Comments
 (0)