@vib3code/sdk 2.0.3-canary.590fbae → 2.0.3-canary.69d53b3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DOCS/AGENT_HARNESS_ARCHITECTURE.md +2 -0
- package/DOCS/ANDROID_DEPLOYMENT.md +59 -0
- package/DOCS/ARCHITECTURE.md +1 -0
- package/DOCS/CI_TESTING.md +2 -0
- package/DOCS/CLI_ONBOARDING.md +2 -0
- package/DOCS/CONTROL_REFERENCE.md +2 -0
- package/DOCS/CROSS_SITE_DESIGN_PATTERNS.md +2 -0
- package/DOCS/ENV_SETUP.md +2 -0
- package/DOCS/EPIC_SCROLL_EVENTS.md +2 -0
- package/DOCS/EXPANSION_DESIGN.md +979 -0
- package/DOCS/EXPANSION_DESIGN_ULTRA.md +389 -0
- package/DOCS/EXPORT_FORMATS.md +2 -0
- package/DOCS/GPU_DISPOSAL_GUIDE.md +2 -0
- package/DOCS/HANDOFF_LANDING_PAGE.md +2 -0
- package/DOCS/HANDOFF_SDK_DEVELOPMENT.md +2 -0
- package/DOCS/LICENSING_TIERS.md +2 -0
- package/DOCS/MASTER_PLAN_2026-01-31.md +2 -0
- package/DOCS/MULTIVIZ_CHOREOGRAPHY_PATTERNS.md +3 -1
- package/DOCS/OBS_SETUP_GUIDE.md +2 -0
- package/DOCS/OPTIMIZATION_PLAN_MATH.md +119 -0
- package/DOCS/PRODUCT_STRATEGY.md +2 -0
- package/DOCS/PROJECT_SETUP.md +2 -0
- package/DOCS/README.md +5 -3
- package/DOCS/REFERENCE_SCROLL_ANALYSIS.md +2 -0
- package/DOCS/RENDERER_LIFECYCLE.md +2 -0
- package/DOCS/REPO_MANIFEST.md +2 -0
- package/DOCS/ROADMAP.md +2 -0
- package/DOCS/SCROLL_TIMELINE_v3.md +2 -0
- package/DOCS/SITE_REFACTOR_PLAN.md +2 -0
- package/DOCS/STATUS.md +2 -0
- package/DOCS/SYSTEM_INVENTORY.md +2 -0
- package/DOCS/TELEMETRY_EXPORTS.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_CLICKERSS.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_FACETAD.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_SIMONE.md +2 -0
- package/DOCS/VISUAL_ANALYSIS_TABLESIDE.md +2 -0
- package/DOCS/WEBGPU_STATUS.md +2 -0
- package/DOCS/XR_BENCHMARKS.md +2 -0
- package/DOCS/archive/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +1 -34
- package/DOCS/archive/DEV_TRACK_ANALYSIS.md +1 -80
- package/DOCS/archive/DEV_TRACK_PLAN_2026-01-07.md +1 -42
- package/DOCS/archive/SESSION_014_PLAN.md +1 -195
- package/DOCS/archive/SESSION_LOG_2026-01-07.md +1 -56
- package/DOCS/archive/STRATEGIC_BLUEPRINT_2026-01-07.md +1 -72
- package/DOCS/archive/SYSTEM_AUDIT_2026-01-30.md +1 -741
- package/DOCS/archive/WEBGPU_STATUS_2026-02-15_STALE.md +1 -38
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-01-31.md +2 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-06.md +2 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-13.md +2 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-15.md +2 -0
- package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-16.md +2 -0
- package/DOCS/dev-tracks/PERF_UPGRADE_2026-02-16.md +2 -0
- package/DOCS/dev-tracks/README.md +2 -0
- package/package.json +1 -1
- package/src/experimental/GameLoop.js +72 -0
- package/src/experimental/LatticePhysics.js +100 -0
- package/src/experimental/LiveDirector.js +143 -0
- package/src/experimental/PlayerController4D.js +154 -0
- package/src/experimental/VIB3Actor.js +138 -0
- package/src/experimental/VIB3Compositor.js +117 -0
- package/src/experimental/VIB3Link.js +122 -0
- package/src/experimental/VIB3Orchestrator.js +146 -0
- package/src/experimental/VIB3Universe.js +109 -0
- package/src/experimental/demos/CrystalLabyrinth.js +202 -0
- package/src/geometry/generators/Crystal.js +2 -2
- package/src/math/Mat4x4.js +238 -92
- package/src/math/Rotor4D.js +69 -46
- package/src/math/Vec4.js +200 -103
- package/src/scene/Node4D.js +74 -24
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CrystalLabyrinth.js - Vertical Slice Demo
|
|
3
|
+
*
|
|
4
|
+
* Implements the full "Ultra" stack:
|
|
5
|
+
* - VIB3Universe (Multi-instance)
|
|
6
|
+
* - VIB3Orchestrator (Game Loop)
|
|
7
|
+
* - VIB3Compositor (Visuals)
|
|
8
|
+
* - LatticePhysics (4D Collision)
|
|
9
|
+
* - PlayerController4D (Input)
|
|
10
|
+
* - LiveDirector (AI Pacing)
|
|
11
|
+
*
|
|
12
|
+
* @experimental
|
|
13
|
+
*/
|
|
14
|
+
import { VIB3Universe } from '../VIB3Universe.js';
|
|
15
|
+
import { GameLoop } from '../GameLoop.js';
|
|
16
|
+
import { LatticePhysics } from '../LatticePhysics.js';
|
|
17
|
+
import { PlayerController4D } from '../PlayerController4D.js';
|
|
18
|
+
import { LiveDirector } from '../LiveDirector.js';
|
|
19
|
+
|
|
20
|
+
class CrystalLabyrinthGame {
|
|
21
|
+
constructor() {
|
|
22
|
+
this.universe = new VIB3Universe('vib3-universe');
|
|
23
|
+
this.physics = new LatticePhysics();
|
|
24
|
+
this.director = new LiveDirector(this.universe);
|
|
25
|
+
|
|
26
|
+
// Game State
|
|
27
|
+
this.score = 0;
|
|
28
|
+
this.health = 100;
|
|
29
|
+
this.isPlaying = false;
|
|
30
|
+
|
|
31
|
+
// Entities
|
|
32
|
+
this.player = null; // The "Camera"
|
|
33
|
+
this.crystals = [];
|
|
34
|
+
this.shadows = [];
|
|
35
|
+
|
|
36
|
+
// UI
|
|
37
|
+
this.ui = {
|
|
38
|
+
score: document.getElementById('score'),
|
|
39
|
+
health: document.getElementById('health'),
|
|
40
|
+
overlay: document.getElementById('overlay'),
|
|
41
|
+
startBtn: document.getElementById('start-btn')
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// Bind input
|
|
45
|
+
this.controller = new PlayerController4D(document.body, {
|
|
46
|
+
setParameter: (k, v) => this.updatePlayerView(k, v)
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Setup Loop
|
|
50
|
+
this.loop = new GameLoop(
|
|
51
|
+
(dt) => this.update(dt),
|
|
52
|
+
(alpha) => this.render(alpha)
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
this.init();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async init() {
|
|
59
|
+
// Create the "World" (Background Layer)
|
|
60
|
+
// A deep, slow-moving Holographic system representing the void
|
|
61
|
+
const world = await this.universe.spawnActor({
|
|
62
|
+
personality: 'neutral',
|
|
63
|
+
system: 'holographic',
|
|
64
|
+
geometry: 11, // Hypersphere
|
|
65
|
+
layer: { zIndex: 0, opacity: 0.4 }
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Setup UI listeners
|
|
69
|
+
this.ui.startBtn.addEventListener('click', () => this.start());
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
start() {
|
|
73
|
+
this.isPlaying = true;
|
|
74
|
+
this.ui.overlay.classList.add('hidden');
|
|
75
|
+
|
|
76
|
+
// Start Systems
|
|
77
|
+
this.universe.start();
|
|
78
|
+
this.loop.start();
|
|
79
|
+
this.director.start();
|
|
80
|
+
|
|
81
|
+
// Spawn Level
|
|
82
|
+
this.spawnLevel();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async spawnLevel() {
|
|
86
|
+
// Spawn 5 Crystals (Pickups)
|
|
87
|
+
for (let i = 0; i < 5; i++) {
|
|
88
|
+
const crystal = await this.universe.spawnActor({
|
|
89
|
+
personality: 'heroic', // Bright, positive
|
|
90
|
+
system: 'faceted',
|
|
91
|
+
geometry: 7, // Crystal
|
|
92
|
+
layer: { zIndex: 10, blendMode: 'screen', opacity: 0.9 }
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// Random position in 4D space (mock)
|
|
96
|
+
crystal.physics = {
|
|
97
|
+
pos: {
|
|
98
|
+
x: (Math.random() - 0.5) * 20,
|
|
99
|
+
y: (Math.random() - 0.5) * 5,
|
|
100
|
+
z: (Math.random() - 0.5) * 20
|
|
101
|
+
},
|
|
102
|
+
vel: { x: 0, y: 0, z: 0 },
|
|
103
|
+
acc: { x: 0, y: 0, z: 0 }
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
this.crystals.push(crystal);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Spawn 3 Shadows (Enemies)
|
|
110
|
+
for (let i = 0; i < 3; i++) {
|
|
111
|
+
const shadow = await this.universe.spawnActor({
|
|
112
|
+
personality: 'glitch', // Chaotic, negative
|
|
113
|
+
system: 'quantum',
|
|
114
|
+
geometry: 16, // Spiky
|
|
115
|
+
layer: { zIndex: 5, blendMode: 'multiply', opacity: 0.7 }
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
shadow.physics = {
|
|
119
|
+
pos: { x: 0, y: 0, z: -30 }, // Start far away
|
|
120
|
+
vel: { x: 0, y: 0, z: 0 },
|
|
121
|
+
acc: { x: 0, y: 0, z: 0 }
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
this.shadows.push(shadow);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Physics Update (Fixed Timestep)
|
|
130
|
+
*/
|
|
131
|
+
update(dt) {
|
|
132
|
+
if (!this.isPlaying) return;
|
|
133
|
+
|
|
134
|
+
// 1. Update Player Controls
|
|
135
|
+
this.controller.update(dt);
|
|
136
|
+
|
|
137
|
+
// 2. Update Physics World
|
|
138
|
+
// Sync player controller state to physics engine?
|
|
139
|
+
// For now, controller handles movement directly.
|
|
140
|
+
|
|
141
|
+
// 3. AI Logic (Shadows hunt player)
|
|
142
|
+
this.shadows.forEach(shadow => {
|
|
143
|
+
// Move towards player (0,0,0 relative to camera)
|
|
144
|
+
// In a real engine, we'd have absolute coordinates.
|
|
145
|
+
// Here, we simulate relative motion by updating parameters
|
|
146
|
+
|
|
147
|
+
// Mock: Oscillate shadow intensity based on "proximity"
|
|
148
|
+
shadow.emote('panic', 0.5);
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
// 4. Check Collisions (Mock)
|
|
152
|
+
// If player is close to a crystal -> Collect
|
|
153
|
+
if (Math.random() < 0.005 && this.crystals.length > 0) {
|
|
154
|
+
this.collectCrystal(this.crystals.pop());
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Render Update (Variable Timestep)
|
|
160
|
+
*/
|
|
161
|
+
render(alpha) {
|
|
162
|
+
// Visual interpolation could happen here
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
updatePlayerView(key, value) {
|
|
166
|
+
// Broadcast player view changes to the World actor
|
|
167
|
+
// This makes the world rotate around the player
|
|
168
|
+
const world = this.universe.actors.get(this.universe.orchestrator.entities.keys().next().value);
|
|
169
|
+
if (world && world.engine) {
|
|
170
|
+
world.engine.setParameter(key, value);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
collectCrystal(actor) {
|
|
175
|
+
this.score++;
|
|
176
|
+
this.ui.score.innerText = this.score;
|
|
177
|
+
|
|
178
|
+
// FX
|
|
179
|
+
actor.emote('joy', 1.0, 500);
|
|
180
|
+
setTimeout(() => {
|
|
181
|
+
this.universe.despawnActor(actor.id);
|
|
182
|
+
}, 500);
|
|
183
|
+
|
|
184
|
+
if (this.score >= 5) {
|
|
185
|
+
this.win();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
win() {
|
|
190
|
+
this.isPlaying = false;
|
|
191
|
+
this.ui.overlay.innerHTML = `
|
|
192
|
+
<h1 style="color: #0f0; text-shadow: 0 0 20px #0f0;">SECTOR STABILIZED</h1>
|
|
193
|
+
<p>The lattice is secure.</p>
|
|
194
|
+
<button onclick="location.reload()">Re-enter</button>
|
|
195
|
+
`;
|
|
196
|
+
this.ui.overlay.classList.remove('hidden');
|
|
197
|
+
this.loop.stop();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Start Game
|
|
202
|
+
new CrystalLabyrinthGame();
|
|
@@ -61,8 +61,8 @@ export function generate24CellVertices(size = 1) {
|
|
|
61
61
|
];
|
|
62
62
|
for (const [s1, s2] of signs) {
|
|
63
63
|
const v = new Vec4(0, 0, 0, 0);
|
|
64
|
-
v.
|
|
65
|
-
v.
|
|
64
|
+
v.setComponent(i, s1 * s);
|
|
65
|
+
v.setComponent(j, s2 * s);
|
|
66
66
|
vertices.push(v);
|
|
67
67
|
}
|
|
68
68
|
}
|