Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Property extraction - Refactor + transforms fix #35

Merged
merged 4 commits into from
Jun 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"scripts": {
"build-conway_geom": "run-script-os",
"build-conway_geom:win32": "cd .\\dependencies\\conway-geom\\ && call .\\build_win.bat release && (if not exist Dist (mkdir Dist)) && xcopy .\\bin\\release\\* Dist\\ /Y/r && copy /Y ConwayGeomWasm.d.ts Dist\\ && (if not exist ..\\..\\compiled\\dependencies\\conway-geom\\Dist (mkdir ..\\..\\compiled\\dependencies\\conway-geom\\Dist)) && xcopy .\\bin\\release\\* ..\\..\\compiled\\dependencies\\conway-geom\\Dist\\ /Y/r",
"build-conway_geom:darwin": "cd ./dependencies/conway-geom/ && ./build_osx.sh release && mkdir -p Dist && cp ./bin/release/* Dist/ && cp ConwayGeomWasm.d.ts Dist/ && mkdir -p ../../compiled/dependencies/conway-geom/Dist && cp ./bin/release/* ../../compiled/dependencies/conway-geom/Dist",
"build-conway_geom:darwin": "cd ./dependencies/conway-geom/ && ./build_osx.sh release wasm && mkdir -p Dist && cp ./bin/release/* Dist/ && cp ConwayGeomWasm.d.ts Dist/ && mkdir -p ../../compiled/dependencies/conway-geom/Dist && cp ./bin/release/* ../../compiled/dependencies/conway-geom/Dist",
"build-clean-conway_geom": "run-script-os",
"build-clean-conway_geom:win32": "cd ./dependencies/conway-geom/ && build_win.bat clean",
"build-clean-conway_geom:darwin": "cd ./dependencies/conway-geom/ && ./build_osx.sh clean",
Expand Down
42 changes: 42 additions & 0 deletions src/core/canonical_mesh.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { GeometryObject } from '../../dependencies/conway-geom/conway_geometry'
import { Model } from './model'


/* eslint-disable no-shadow,no-unused-vars,no-magic-numbers */
export enum CanonicalMeshType {
BUFFER_GEOMETRY = 0,
GLTF_URL = 1,
GLB_BUFFER = 2
}


export interface CanonicalMeshBase {
readonly type: CanonicalMeshType
readonly geometry: GeometryObject | string | ArrayBuffer
readonly model: Model
readonly localID: number
/**
* This is true if this is not final geometry, some geometry is only kept for intermediate
* calculation purposes, and is removed, if it is not final.
*/
readonly temporary?: boolean
}

export interface CanonicalMeshBuffer extends CanonicalMeshBase {
readonly type: CanonicalMeshType.BUFFER_GEOMETRY
readonly geometry: GeometryObject
}

export interface CanonicalMeshUrl extends CanonicalMeshBase {
readonly type: CanonicalMeshType.GLTF_URL
readonly geometry: string
readonly temporary: undefined
}

export interface CanonicalMeshGLBBuffer extends CanonicalMeshBase {
readonly type: CanonicalMeshType.GLB_BUFFER
readonly geometry: ArrayBuffer
readonly temporary: undefined
}

export type CanonicalMesh = CanonicalMeshBuffer | CanonicalMeshUrl | CanonicalMeshGLBBuffer
13 changes: 13 additions & 0 deletions src/core/model.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
import { CanonicalMesh } from './canonical_mesh'
import { Entity } from './entity'
import { IIndexSetCursor } from './i_index_set_cursor'

/**
* Geometry capability, this model has geometry.
*/
export interface ModelGeometry extends Iterable< CanonicalMesh > {

length: number

getByLocalID(localID: number): CanonicalMesh | undefined

}

export interface Model extends Iterable<Entity> {

Expand All @@ -10,5 +21,7 @@ export interface Model extends Iterable<Entity> {

from(cursor: IIndexSetCursor, freeCursor: boolean): IterableIterator<Entity>

readonly geometry?: ModelGeometry

readonly size: number
}
41 changes: 41 additions & 0 deletions src/core/readonly_typed_array.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
export type TypedArrayMutableProperties = 'copyWithin' | 'fill' | 'reverse' | 'set' | 'sort'

export interface ReadonlyUint8Array extends
Omit< Uint8Array, TypedArrayMutableProperties > {
readonly [n: number ]: number
}

export interface ReadonlyUint16Array extends
Omit< Uint16Array, TypedArrayMutableProperties > {
readonly [n: number ]: number
}

export interface ReadonlyUint32Array extends
Omit< Uint32Array, TypedArrayMutableProperties > {
readonly [n: number ]: number
}

export interface ReadonlyBigUint64Array extends
Omit< BigUint64Array, TypedArrayMutableProperties > {
readonly [n: number ]: bigint
}

export interface ReadonlyInt8Array extends
Omit< Int8Array, TypedArrayMutableProperties > {
readonly [n: number ]: number
}

export interface ReadonlyInt16Array extends
Omit< Int16Array, TypedArrayMutableProperties > {
readonly [n: number ]: number
}

export interface ReadonlyInt32Array extends
Omit< Int32Array, TypedArrayMutableProperties > {
readonly [n: number ]: number
}

export interface ReadonlyBigInt64Array extends
Omit< BigInt64Array, TypedArrayMutableProperties > {
readonly [n: number ]: bigint
}
10 changes: 10 additions & 0 deletions src/core/scene.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { ReadonlyUint32Array } from './readonly_typed_array'
import { SceneNode } from './scene_node'


export interface Scene {

getByNodeIndex( nodeIndex: number ): SceneNode | undefined

readonly roots: ReadonlyUint32Array | ReadonlyArray< number >
}
57 changes: 57 additions & 0 deletions src/core/scene_node.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { Model } from './model'
import { ReadonlyUint32Array } from './readonly_typed_array'


/* eslint-disable no-shadow,no-unused-vars,no-magic-numbers */
export enum SceneNodeModelType {
GEOMETRY = 0,
TRANSFORM = 1,
URL = 2
}


export interface SceneNodeModelBase {
readonly type: SceneNodeModelType

readonly model: string | Model

readonly localID: number

readonly parentIndex?: number

readonly index: number
}

export interface SceneNodeTransform extends SceneNodeModelBase {

readonly type: SceneNodeModelType.TRANSFORM

readonly model: Model

/**
* 4x4 transform matrix, stored in OpenGL Convention.
*
* If none is found, the identity transform is assumeer
*/
readonly transform: Float64Array | Float32Array | ReadonlyArray< number >

readonly children: ReadonlyUint32Array | ReadonlyArray< number >
}

export interface SceneNodeGeometry extends SceneNodeModelBase {

readonly type: SceneNodeModelType.GEOMETRY

readonly model: Model
}

export interface SceneNodeUrl extends SceneNodeModelBase {

readonly type: SceneNodeModelType.URL

readonly model: string

resolve(): Promise< void >
}

export type SceneNode = SceneNodeUrl | SceneNodeGeometry | SceneNodeTransform
Loading