UNPKG

@eroscripts/osr-emu

Version:

A web-based graphical emulator for open source strokers.

47 lines (39 loc) 1.43 kB
import type { Group, Object3DEventMap } from 'three'; import type { axisId } from '../../../osr-emu.js'; import { MeshPhongMaterial, MeshStandardMaterial } from 'three'; import { loadObj, recomputeNormals, } from '../../util.js'; import baseGeometry from './geometry/base.js'; import railsGeometry from './geometry/rails.js'; import receiverGeometry from './geometry/receiver.js'; /** * 3D Model of the SSR1 */ export default class SSR1Model { _orientation = -Math.PI / 2; // Rotation around the x-axis. objects!: Record<string, Group<Object3DEventMap>>; load() { const ayvaBlueMaterial = new MeshPhongMaterial({ color: 0x3F5173 }); const darkMaterial = new MeshPhongMaterial({ color: 0x1E1E1E }); const railMaterial = new MeshStandardMaterial({ color: 0xC0C0C0, metalness: 1, roughness: 0.5, }); const base = loadObj(baseGeometry, darkMaterial); const receiver = loadObj(receiverGeometry, ayvaBlueMaterial); const rails = loadObj(railsGeometry, railMaterial, recomputeNormals); this.objects = { base, receiver, rails, }; return { objects: this.objects, orientation: this._orientation }; } preRender(axes: Record<axisId, number>, scale: Record<axisId, number>) { const position = -scale.L0 * axes.L0 * 120; // 120mm stroke this.objects.receiver.position.y = position; } }