73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
|
|
import { NetworkService } from "./instances/NetworkService.js";
|
||
|
|
import { RenderService } from "./instances/RenderService.js";
|
||
|
|
import { ReplicatorService } from "./instances/ReplicatorService.js";
|
||
|
|
import { DataModel } from "./core/DataModel.js";
|
||
|
|
import { Workspace } from "./instances/Workspace.js";
|
||
|
|
import * as THREE from "three";
|
||
|
|
|
||
|
|
const dm = new DataModel();
|
||
|
|
dm.SetParent(null);
|
||
|
|
|
||
|
|
// === Workspace ===
|
||
|
|
const ws = new Workspace();
|
||
|
|
ws.SetParent(dm);
|
||
|
|
|
||
|
|
// === RenderService (headless physics) ===
|
||
|
|
const render = new RenderService(dm);
|
||
|
|
render.isServer = true;
|
||
|
|
render.start();
|
||
|
|
render.SetParent(dm);
|
||
|
|
|
||
|
|
// === Networking ===
|
||
|
|
const net = new NetworkService();
|
||
|
|
net.listen(8080);
|
||
|
|
net.SetParent(dm);
|
||
|
|
|
||
|
|
// Simple echo handler
|
||
|
|
net.registerHandler(0x01, 0x00, (payload, client) => {
|
||
|
|
console.log("Received from client:", new TextDecoder().decode(payload));
|
||
|
|
net.sendToClient(client, 0x01, 0x01, payload);
|
||
|
|
});
|
||
|
|
|
||
|
|
// === Replication Service ===
|
||
|
|
const replication = new ReplicatorService(dm, net);
|
||
|
|
|
||
|
|
// === Test parts ===
|
||
|
|
const { LerpedBasePart } = await import("./instances/LerpedBasePart.js");
|
||
|
|
|
||
|
|
// Falling cube
|
||
|
|
// Anchored ground
|
||
|
|
const ground = new LerpedBasePart();
|
||
|
|
ground.Size = new THREE.Vector3(10, 1, 10);
|
||
|
|
ground.Position.set(0, -0.5, 0);
|
||
|
|
ground.setAnchored(true);
|
||
|
|
ground.SetParent(ws);
|
||
|
|
ground.updateSizes();
|
||
|
|
// Spin ground
|
||
|
|
let angle = 0;
|
||
|
|
setInterval(() => {
|
||
|
|
angle += 0.01;
|
||
|
|
ground.Orientation.set(0, angle, 0);
|
||
|
|
ground.Position.set(5 * Math.sin(angle * 2), -0.5, 5 * Math.cos(angle * 2));
|
||
|
|
}, 16);
|
||
|
|
/*setInterval(() => {
|
||
|
|
const part = new LerpedBasePart();
|
||
|
|
part.Position.set(0, 35, 0);
|
||
|
|
part.SetParent(ws);
|
||
|
|
part.setAnchored(true);
|
||
|
|
part.updateVisual(1 / 60); // Ensure physics is initialized
|
||
|
|
setTimeout(() => {
|
||
|
|
part.updateBodyPosition(); // Reset physics to new position
|
||
|
|
part.setAnchored(false);
|
||
|
|
}, 2000);
|
||
|
|
part.updateSizes();
|
||
|
|
}, 1000);*/
|
||
|
|
// Falling cube singularity
|
||
|
|
const part = new LerpedBasePart();
|
||
|
|
part.Size = new THREE.Vector3(1, 1, 1);
|
||
|
|
part.Position.set(10, 5, 0);
|
||
|
|
part.setAnchored(false);
|
||
|
|
part.SetParent(ws);
|
||
|
|
part.updateSizes();
|
||
|
|
|