forked from mirror/ObjToSchematic
Finished up initial round of runtime editor dependency split
This commit is contained in:
parent
66d9619b9b
commit
4e8f3680e5
@ -1,7 +1,7 @@
|
|||||||
import { BlockMesh } from '../runtime/block_mesh';
|
import { BlockMesh } from '../runtime/block_mesh';
|
||||||
import { AppConfig } from './config';
|
import { AppConfig } from './config';
|
||||||
import { AppConstants } from '../runtime/constants';
|
import { AppConstants } from '../runtime/constants';
|
||||||
import { GeometryTemplates } from '../runtime/geometry';
|
import { GeometryTemplates } from './renderer/geometry';
|
||||||
import { Mesh, SolidMaterial, TexturedMaterial } from '../runtime/mesh';
|
import { Mesh, SolidMaterial, TexturedMaterial } from '../runtime/mesh';
|
||||||
import { OcclusionManager } from '../runtime/occlusion';
|
import { OcclusionManager } from '../runtime/occlusion';
|
||||||
import { ProgressManager } from './progress';
|
import { ProgressManager } from './progress';
|
||||||
|
@ -3,7 +3,7 @@ import { Voxel, VoxelMesh } from '../../runtime/voxel_mesh';
|
|||||||
import { AppConfig } from "../config";
|
import { AppConfig } from "../config";
|
||||||
import { ASSERT } from "../../runtime/util/error_util";
|
import { ASSERT } from "../../runtime/util/error_util";
|
||||||
import { Vector3 } from "../../runtime/vector";
|
import { Vector3 } from "../../runtime/vector";
|
||||||
import { GeometryTemplates } from "../../runtime/geometry";
|
import { GeometryTemplates } from "./geometry";
|
||||||
import { AttributeData } from "./render_buffer";
|
import { AttributeData } from "./render_buffer";
|
||||||
import { AppUtil } from "../../runtime/util";
|
import { AppUtil } from "../../runtime/util";
|
||||||
import { AppConstants } from "../../runtime/constants";
|
import { AppConstants } from "../../runtime/constants";
|
||||||
|
@ -3,7 +3,7 @@ import { Voxel, VoxelMesh } from '../../runtime/voxel_mesh';
|
|||||||
import { AppConfig } from "../config";
|
import { AppConfig } from "../config";
|
||||||
import { ASSERT } from "../../runtime/util/error_util";
|
import { ASSERT } from "../../runtime/util/error_util";
|
||||||
import { Vector3 } from "../../runtime/vector";
|
import { Vector3 } from "../../runtime/vector";
|
||||||
import { GeometryTemplates } from "../../runtime/geometry";
|
import { GeometryTemplates } from "./geometry";
|
||||||
import { AttributeData } from "./render_buffer";
|
import { AttributeData } from "./render_buffer";
|
||||||
import { AppUtil, TOptional } from "../../runtime/util";
|
import { AppUtil, TOptional } from "../../runtime/util";
|
||||||
import { AppConstants } from "../../runtime/constants";
|
import { AppConstants } from "../../runtime/constants";
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
import * as twgl from 'twgl.js';
|
import * as twgl from 'twgl.js';
|
||||||
|
|
||||||
import { Bounds } from './bounds';
|
import { Bounds } from '../../runtime/bounds';
|
||||||
import { RGBA } from '../runtime/colour';
|
import { RGBA } from '../../runtime/colour';
|
||||||
import { Mesh } from './mesh';
|
import { Mesh } from '../../runtime/mesh';
|
||||||
import { Triangle, UVTriangle } from './triangle';
|
import { AttributeData, MergeAttributeData, RenderBuffer } from './render_buffer';
|
||||||
import { ASSERT } from './util/error_util';
|
import { Triangle, UVTriangle } from '../../runtime/triangle';
|
||||||
import { Vector3 } from './vector';
|
import { ASSERT } from '../../runtime/util/error_util';
|
||||||
import { VoxelMesh } from './voxel_mesh';
|
import { Vector3 } from '../../runtime/vector';
|
||||||
|
import { VoxelMesh } from '../../runtime/voxel_mesh';
|
||||||
|
|
||||||
export class GeometryTemplates {
|
export class GeometryTemplates {
|
||||||
private static readonly _default_cube = twgl.primitives.createCubeVertices(1.0);
|
private static readonly _default_cube = twgl.primitives.createCubeVertices(1.0);
|
@ -1,11 +1,11 @@
|
|||||||
import * as twgl from 'twgl.js';
|
import * as twgl from 'twgl.js';
|
||||||
|
|
||||||
import VANILLA_TEXTURE from '../../res/atlases/vanilla.png';
|
import VANILLA_TEXTURE from '../../../res/atlases/vanilla.png';
|
||||||
import { Bounds } from '../../runtime/bounds';
|
import { Bounds } from '../../runtime/bounds';
|
||||||
import { ArcballCamera } from './camera';
|
import { ArcballCamera } from './camera';
|
||||||
import { RGBA, RGBAUtil } from '../../runtime/colour';
|
import { RGBA, RGBAUtil } from '../../runtime/colour';
|
||||||
import { AppConfig } from '../config';
|
import { AppConfig } from '../config';
|
||||||
import { DebugGeometryTemplates } from '../../runtime/geometry';
|
import { DebugGeometryTemplates } from './geometry';
|
||||||
import { MaterialType, SolidMaterial, TexturedMaterial } from '../../runtime/mesh';
|
import { MaterialType, SolidMaterial, TexturedMaterial } from '../../runtime/mesh';
|
||||||
import { RenderBuffer } from './render_buffer';
|
import { RenderBuffer } from './render_buffer';
|
||||||
import { ShaderManager } from './shaders';
|
import { ShaderManager } from './shaders';
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
import * as twgl from 'twgl.js';
|
import * as twgl from 'twgl.js';
|
||||||
|
|
||||||
import FRAG_BLOCK from '../../res/shaders/block_fragment.fs';
|
import FRAG_BLOCK from '../../../res/shaders/block_fragment.fs';
|
||||||
import VERT_BLOCK from '../../res/shaders/block_vertex.vs';
|
import VERT_BLOCK from '../../../res/shaders/block_vertex.vs';
|
||||||
import FRAG_DEBUG from '../../res/shaders/debug_fragment.fs';
|
import FRAG_DEBUG from '../../../res/shaders/debug_fragment.fs';
|
||||||
import VERT_DEBUG from '../../res/shaders/debug_vertex.vs';
|
import VERT_DEBUG from '../../../res/shaders/debug_vertex.vs';
|
||||||
import FRAG_TRI_SOLID from '../../res/shaders/solid_tri_fragment.fs';
|
import FRAG_TRI_SOLID from '../../../res/shaders/solid_tri_fragment.fs';
|
||||||
import VERT_TRI_SOLID from '../../res/shaders/solid_tri_vertex.vs';
|
import VERT_TRI_SOLID from '../../../res/shaders/solid_tri_vertex.vs';
|
||||||
import FRAG_TRI_TEXTURE from '../../res/shaders/texture_tri_fragment.fs';
|
import FRAG_TRI_TEXTURE from '../../../res/shaders/texture_tri_fragment.fs';
|
||||||
import VERT_TRI_TEXTURE from '../../res/shaders/texture_tri_vertex.vs';
|
import VERT_TRI_TEXTURE from '../../../res/shaders/texture_tri_vertex.vs';
|
||||||
import FRAG_VOXEL from '../../res/shaders/voxel_fragment.fs';
|
import FRAG_VOXEL from '../../../res/shaders/voxel_fragment.fs';
|
||||||
import VERT_VOXEL from '../../res/shaders/voxel_vertex.vs';
|
import VERT_VOXEL from '../../../res/shaders/voxel_vertex.vs';
|
||||||
import { Renderer } from './renderer';
|
import { Renderer } from './renderer';
|
||||||
|
|
||||||
export class ShaderManager {
|
export class ShaderManager {
|
||||||
|
@ -6,12 +6,11 @@ import { AppRuntimeConstants } from './constants';
|
|||||||
import { Ditherer } from './dither';
|
import { Ditherer } from './dither';
|
||||||
import { BlockMeshLighting } from './lighting';
|
import { BlockMeshLighting } from './lighting';
|
||||||
import { Palette } from './palette';
|
import { Palette } from './palette';
|
||||||
import { ProgressManager } from '../editor/progress';
|
|
||||||
import { ColourSpace, TOptional } from './util';
|
import { ColourSpace, TOptional } from './util';
|
||||||
import { ASSERT } from './util/error_util';
|
import { ASSERT } from './util/error_util';
|
||||||
import { Vector3 } from './vector';
|
import { Vector3 } from './vector';
|
||||||
import { Voxel, VoxelMesh } from './voxel_mesh';
|
import { Voxel, VoxelMesh } from './voxel_mesh';
|
||||||
import { AssignParams } from '../editor/worker/worker_types';
|
import { TDithering } from './util/type_util';
|
||||||
|
|
||||||
export interface Block {
|
export interface Block {
|
||||||
voxel: Voxel;
|
voxel: Voxel;
|
||||||
@ -28,10 +27,16 @@ interface GrassLikeBlock {
|
|||||||
export type FallableBehaviour = 'replace-falling' | 'replace-fallable' | 'place-string' | 'do-nothing';
|
export type FallableBehaviour = 'replace-falling' | 'replace-fallable' | 'place-string' | 'do-nothing';
|
||||||
|
|
||||||
export interface BlockMeshParams {
|
export interface BlockMeshParams {
|
||||||
textureAtlas: Atlas,
|
blockPalette: string[],
|
||||||
blockPalette: Palette,
|
dithering: TDithering,
|
||||||
|
ditheringMagnitude: number,
|
||||||
colourSpace: ColourSpace,
|
colourSpace: ColourSpace,
|
||||||
fallable: FallableBehaviour,
|
fallable: FallableBehaviour,
|
||||||
|
resolution: RGBAUtil.TColourAccuracy,
|
||||||
|
calculateLighting: boolean,
|
||||||
|
lightThreshold: number,
|
||||||
|
contextualAveraging: boolean,
|
||||||
|
errorWeight: number,
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TAssignBlocksWarning =
|
export type TAssignBlocksWarning =
|
||||||
@ -40,12 +45,11 @@ export type TAssignBlocksWarning =
|
|||||||
export class BlockMesh {
|
export class BlockMesh {
|
||||||
private _blocksUsed: Set<string>;
|
private _blocksUsed: Set<string>;
|
||||||
private _blocks: Map<number, Block>;
|
private _blocks: Map<number, Block>;
|
||||||
//private _blocks: Block[];
|
|
||||||
private _voxelMesh: VoxelMesh;
|
private _voxelMesh: VoxelMesh;
|
||||||
private _atlas: Atlas;
|
private _atlas: Atlas;
|
||||||
private _lighting: BlockMeshLighting;
|
private _lighting: BlockMeshLighting;
|
||||||
|
|
||||||
public static createFromVoxelMesh(voxelMesh: VoxelMesh, blockMeshParams: AssignParams.Input) {
|
public static createFromVoxelMesh(voxelMesh: VoxelMesh, blockMeshParams: BlockMeshParams) {
|
||||||
const blockMesh = new BlockMesh(voxelMesh);
|
const blockMesh = new BlockMesh(voxelMesh);
|
||||||
const warn = blockMesh._assignBlocks(blockMeshParams);
|
const warn = blockMesh._assignBlocks(blockMeshParams);
|
||||||
|
|
||||||
@ -73,7 +77,7 @@ export class BlockMesh {
|
|||||||
* Before we turn a voxel into a block we have the opportunity to alter the voxel's colour.
|
* Before we turn a voxel into a block we have the opportunity to alter the voxel's colour.
|
||||||
* This is where the colour accuracy bands colours together and where dithering is calculated.
|
* This is where the colour accuracy bands colours together and where dithering is calculated.
|
||||||
*/
|
*/
|
||||||
private _getFinalVoxelColour(voxel: Voxel, blockMeshParams: AssignParams.Input) {
|
private _getFinalVoxelColour(voxel: Voxel, blockMeshParams: BlockMeshParams) {
|
||||||
const voxelColour = RGBAUtil.copy(voxel.colour);
|
const voxelColour = RGBAUtil.copy(voxel.colour);
|
||||||
|
|
||||||
const binnedColour = RGBAUtil.bin(voxelColour, blockMeshParams.resolution);
|
const binnedColour = RGBAUtil.bin(voxelColour, blockMeshParams.resolution);
|
||||||
@ -96,14 +100,13 @@ export class BlockMesh {
|
|||||||
return ditheredColour;
|
return ditheredColour;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _assignBlocks(blockMeshParams: AssignParams.Input): (null | TAssignBlocksWarning) {
|
private _assignBlocks(blockMeshParams: BlockMeshParams): (null | TAssignBlocksWarning) {
|
||||||
const atlas = Atlas.load(blockMeshParams.textureAtlas);
|
const atlas = Atlas.load('vanilla'); // TODO: AtlasPaletteRework
|
||||||
ASSERT(atlas !== undefined, 'Could not load atlas');
|
ASSERT(atlas !== undefined, 'Could not load atlas');
|
||||||
this._atlas = atlas;
|
this._atlas = atlas;
|
||||||
|
|
||||||
const palette = Palette.create();
|
const palette = Palette.create();
|
||||||
palette.add(blockMeshParams.blockPalette);
|
palette.add(blockMeshParams.blockPalette);
|
||||||
ASSERT(palette !== undefined, 'Could not load palette');
|
|
||||||
|
|
||||||
const atlasPalette = new AtlasPalette(atlas, palette);
|
const atlasPalette = new AtlasPalette(atlas, palette);
|
||||||
const allBlockCollection = atlasPalette.createBlockCollection([]);
|
const allBlockCollection = atlasPalette.createBlockCollection([]);
|
||||||
@ -111,10 +114,11 @@ export class BlockMesh {
|
|||||||
const grassLikeBlocksBuffer: GrassLikeBlock[] = [];
|
const grassLikeBlocksBuffer: GrassLikeBlock[] = [];
|
||||||
|
|
||||||
let countFalling = 0;
|
let countFalling = 0;
|
||||||
const taskHandle = ProgressManager.Get.start('Assigning');
|
// TODO: ProgressRework
|
||||||
|
//const taskHandle = ProgressManager.Get.start('Assigning');
|
||||||
const voxels = this._voxelMesh.getVoxels();
|
const voxels = this._voxelMesh.getVoxels();
|
||||||
for (let voxelIndex = 0; voxelIndex < voxels.length; ++voxelIndex) {
|
for (let voxelIndex = 0; voxelIndex < voxels.length; ++voxelIndex) {
|
||||||
ProgressManager.Get.progress(taskHandle, voxelIndex / voxels.length);
|
//ProgressManager.Get.progress(taskHandle, voxelIndex / voxels.length);
|
||||||
|
|
||||||
// Convert the voxel into a block
|
// Convert the voxel into a block
|
||||||
const voxel = voxels[voxelIndex];
|
const voxel = voxels[voxelIndex];
|
||||||
@ -160,7 +164,7 @@ export class BlockMesh {
|
|||||||
if (grassLikeBlocksBuffer.length > 0) {
|
if (grassLikeBlocksBuffer.length > 0) {
|
||||||
const nonGrassLikeBlockCollection = atlasPalette.createBlockCollection(Array.from(AppRuntimeConstants.Get.GRASS_LIKE_BLOCKS));
|
const nonGrassLikeBlockCollection = atlasPalette.createBlockCollection(Array.from(AppRuntimeConstants.Get.GRASS_LIKE_BLOCKS));
|
||||||
for (let index=0; index < grassLikeBlocksBuffer.length; index++) {
|
for (let index=0; index < grassLikeBlocksBuffer.length; index++) {
|
||||||
ProgressManager.Get.progress(taskHandle, index / grassLikeBlocksBuffer.length);
|
//ProgressManager.Get.progress(taskHandle, index / grassLikeBlocksBuffer.length);
|
||||||
const examined = grassLikeBlocksBuffer[index];
|
const examined = grassLikeBlocksBuffer[index];
|
||||||
const examinedBlock = this._blocks.get(examined.hash);
|
const examinedBlock = this._blocks.get(examined.hash);
|
||||||
ASSERT(examinedBlock, 'Missing examined block');
|
ASSERT(examinedBlock, 'Missing examined block');
|
||||||
@ -177,7 +181,7 @@ export class BlockMesh {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ProgressManager.Get.end(taskHandle);
|
//ProgressManager.Get.end(taskHandle);
|
||||||
|
|
||||||
if (blockMeshParams.fallable === 'do-nothing' && countFalling > 0) {
|
if (blockMeshParams.fallable === 'do-nothing' && countFalling > 0) {
|
||||||
return { type: 'falling-blocks', count: countFalling }
|
return { type: 'falling-blocks', count: countFalling }
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { AppConfig } from '../editor/config';
|
|
||||||
import { TBrand } from './util/type_util';
|
import { TBrand } from './util/type_util';
|
||||||
|
|
||||||
const hsv_rgb = require('hsv-rgb');
|
const hsv_rgb = require('hsv-rgb');
|
||||||
@ -120,7 +119,7 @@ export namespace RGBAUtil {
|
|||||||
squaredDistance += (a.r - b.r) * (a.r - b.r);
|
squaredDistance += (a.r - b.r) * (a.r - b.r);
|
||||||
squaredDistance += (a.g - b.g) * (a.g - b.g);
|
squaredDistance += (a.g - b.g) * (a.g - b.g);
|
||||||
squaredDistance += (a.b - b.b) * (a.b - b.b);
|
squaredDistance += (a.b - b.b) * (a.b - b.b);
|
||||||
squaredDistance += (a.a - b.a) * (a.a - b.a) * AppConfig.Get.ALPHA_BIAS;
|
squaredDistance += (a.a - b.a) * (a.a - b.a); // * AppConfig.Get.ALPHA_BIAS; TODO: ConfigRework
|
||||||
return squaredDistance;
|
return squaredDistance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
//import { NBT, TagType } from 'prismarine-nbt';
|
|
||||||
|
|
||||||
import { NBT, TagType } from 'prismarine-nbt';
|
import { NBT, TagType } from 'prismarine-nbt';
|
||||||
|
|
||||||
import { BLOCK_IDS } from '../../../res/block_ids';
|
import { BLOCK_IDS } from '../../../res/block_ids';
|
||||||
import { BlockMesh } from '../block_mesh';
|
import { BlockMesh } from '../block_mesh';
|
||||||
import { LOC } from '../../editor/localiser';
|
|
||||||
import { StatusHandler } from '../../editor/status';
|
|
||||||
import { LOG_WARN } from '../util/log_util';
|
import { LOG_WARN } from '../util/log_util';
|
||||||
import { saveNBT } from '../util/nbt_util';
|
import { saveNBT } from '../util/nbt_util';
|
||||||
import { Vector3 } from '../vector';
|
import { Vector3 } from '../vector';
|
||||||
@ -53,10 +49,13 @@ export class Schematic extends IExporter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: StatusRework
|
||||||
|
/*
|
||||||
if (unsupportedBlocks.size > 0) {
|
if (unsupportedBlocks.size > 0) {
|
||||||
StatusHandler.warning(LOC('export.schematic_unsupported_blocks', { count: numBlocksUnsupported, unique: unsupportedBlocks.size }));
|
StatusHandler.warning(LOC('export.schematic_unsupported_blocks', { count: numBlocksUnsupported, unique: unsupportedBlocks.size }));
|
||||||
LOG_WARN(unsupportedBlocks);
|
LOG_WARN(unsupportedBlocks);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// TODO Unimplemented
|
// TODO Unimplemented
|
||||||
const nbt: NBT = {
|
const nbt: NBT = {
|
||||||
|
Loading…
Reference in New Issue
Block a user