mirror of
https://github.com/exogen/t2-mapper.git
synced 2026-01-19 20:25:01 +00:00
add glbs
This commit is contained in:
parent
267db90813
commit
8509faf6bc
72
app/page.tsx
72
app/page.tsx
|
|
@ -9,7 +9,7 @@ import {
|
|||
import { parseTerrainBuffer } from "@/src/terrain";
|
||||
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader";
|
||||
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
|
||||
import { getTerrainFile, parseMissionScript } from "@/src/mission";
|
||||
import { getTerrainFile, iterObjects, parseMissionScript } from "@/src/mission";
|
||||
|
||||
const BASE_URL = "/t2-mapper";
|
||||
const RESOURCE_ROOT_URL = `${BASE_URL}/base/`;
|
||||
|
|
@ -33,6 +33,14 @@ function terrainTextureToUrl(name: string) {
|
|||
}
|
||||
}
|
||||
|
||||
function textureToUrl(name: string) {
|
||||
try {
|
||||
return getUrlForPath(`textures/${name}.png`);
|
||||
} catch (err) {
|
||||
return `${BASE_URL}/black.png`;
|
||||
}
|
||||
}
|
||||
|
||||
function uint16ToFloat32(src: Uint16Array) {
|
||||
const out = new Float32Array(src.length);
|
||||
for (let i = 0; i < src.length; i++) {
|
||||
|
|
@ -78,7 +86,7 @@ const missions = getResourceList()
|
|||
|
||||
export default function HomePage() {
|
||||
const canvasRef = useRef<HTMLCanvasElement>(null);
|
||||
const [missionName, setMissionName] = useState("TWL_Damnation");
|
||||
const [missionName, setMissionName] = useState("TWL2_WoodyMyrk");
|
||||
const threeContext = useRef<Record<string, any>>({});
|
||||
|
||||
useEffect(() => {
|
||||
|
|
@ -138,14 +146,14 @@ export default function HomePage() {
|
|||
scene.add(light);
|
||||
|
||||
const controls = new OrbitControls(camera, renderer.domElement);
|
||||
controls.target.set(0, 0, 0);
|
||||
controls.minDistance = 10;
|
||||
controls.maxDistance = 1000;
|
||||
camera.position.set(0, 0, 512);
|
||||
controls.target.set(0, -128, 0);
|
||||
controls.update();
|
||||
|
||||
const keys = { w: false, a: false, s: false, d: false };
|
||||
|
||||
camera.position.set(100, 15, 100);
|
||||
camera.lookAt(0, 0, -200);
|
||||
|
||||
const onKeyDown = (e) => {
|
||||
if (e.code === "KeyW") keys.w = true;
|
||||
if (e.code === "KeyA") keys.a = true;
|
||||
|
|
@ -221,7 +229,7 @@ export default function HomePage() {
|
|||
threeContext.current;
|
||||
|
||||
let cancel = false;
|
||||
let mesh: THREE.Mesh;
|
||||
let root: THREE.Group;
|
||||
|
||||
async function loadMap() {
|
||||
const mission = await loadMission(missionName);
|
||||
|
|
@ -361,22 +369,62 @@ uniform float tiling5;
|
|||
);
|
||||
};
|
||||
|
||||
mesh = new THREE.Mesh(geom, mat);
|
||||
root = new THREE.Group();
|
||||
|
||||
const mesh = new THREE.Mesh(geom, mat);
|
||||
root.add(mesh);
|
||||
|
||||
for (const obj of iterObjects(mission.objects)) {
|
||||
const getProperty = (name) =>
|
||||
obj.properties.find((p) => p.target.name === name);
|
||||
|
||||
switch (obj.className) {
|
||||
case "WaterBlock": {
|
||||
break;
|
||||
const position = getProperty("position").value;
|
||||
const scale = getProperty("scale").value;
|
||||
const rotation = getProperty("rotation").value;
|
||||
const surfaceTexture = getProperty("surfaceTexture").value;
|
||||
|
||||
const [x, y, z] = position.split(" ").map((s) => parseFloat(s));
|
||||
|
||||
const [ax, ay, az, angle] = rotation
|
||||
.split(" ")
|
||||
.map((s) => parseFloat(s));
|
||||
|
||||
const q = new THREE.Quaternion();
|
||||
q.setFromAxisAngle(new THREE.Vector3(ax, az, ay), angle);
|
||||
|
||||
const [scaleX, scaleY, scaleZ] = scale
|
||||
.split(" ")
|
||||
.map((s) => parseFloat(s) / 2);
|
||||
|
||||
const geometry = new THREE.BoxGeometry(scaleX, scaleZ, scaleY);
|
||||
const material = new THREE.MeshStandardMaterial({
|
||||
map: setupColor(textureLoader.load(textureToUrl(surfaceTexture))),
|
||||
});
|
||||
const water = new THREE.Mesh(geometry, material);
|
||||
water.position.set(x, z, y);
|
||||
water.quaternion.copy(q);
|
||||
|
||||
root.add(water);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cancel) {
|
||||
return;
|
||||
}
|
||||
|
||||
scene.add(mesh);
|
||||
scene.add(root);
|
||||
}
|
||||
|
||||
loadMap();
|
||||
|
||||
return () => {
|
||||
cancel = true;
|
||||
if (mesh) {
|
||||
mesh.removeFromParent();
|
||||
}
|
||||
root.removeFromParent();
|
||||
};
|
||||
}, [missionName]);
|
||||
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
docs/_next/static/chunks/bd904a5c-09e1b32702167a9e.js
Normal file
1
docs/_next/static/chunks/bd904a5c-09e1b32702167a9e.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/Starfallen.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/Starfallen.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb
Normal file
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbunke.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbunke.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb
Normal file
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb
Normal file
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/flagbridge.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/flagbridge.glb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb
Normal file
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_base.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_base.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_tower.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_tower.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_wall4.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_wall4.glb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin2.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin2.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin3.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin3.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin4.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin4.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruinarch.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruinarch.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/siege.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/siege.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/smisc_nef1.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/smisc_nef1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb
Normal file
BIN
docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bbunke.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bbunke.glb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruina.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruina.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruinb.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruinb.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruinc.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruinc.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruind.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruind.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruine.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruine.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruinf.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruinf.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruing.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruing.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruinh.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruinh.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruini.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/bmiscpan_ruini.glb
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_base1.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_base1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_bridge1.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_bridge1.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_bridge2.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_bridge2.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_bridge3.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_bridge3.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_genbunk.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btf_genbunk.glb
Normal file
Binary file not shown.
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btowr9.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/btowr9.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/dbase5.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/dbase5.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/dbase6.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/dbase6.glb
Normal file
Binary file not shown.
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/dmisc1.glb
Normal file
BIN
docs/base/@vl2/DynamixFinalPack.vl2/interiors/dmisc1.glb
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue