minecraftLoaderPlugin.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { ILoaderPlugin } from "./loaderPlugin";
  2. import { telemetryManager } from "../../telemetryManager";
  3. import { ViewerModel } from "../..";
  4. import { Tools, ISceneLoaderPlugin, ISceneLoaderPluginAsync, Material } from "babylonjs";
  5. import { IGLTFLoaderData, GLTF2 } from "babylonjs-loaders";
  6. export class MinecraftLoaderPlugin implements ILoaderPlugin {
  7. private _model: ViewerModel;
  8. private _minecraftEnabled: boolean;
  9. public onInit(loader: ISceneLoaderPlugin | ISceneLoaderPluginAsync, model: ViewerModel) {
  10. this._model = model;
  11. this._minecraftEnabled = false;
  12. }
  13. public onParsed(data: IGLTFLoaderData) {
  14. if (data && data.json && data.json['meshes'] && data.json['meshes'].length) {
  15. var meshes = data.json['meshes'] as GLTF2.IMesh[];
  16. for (var i = 0; i < meshes.length; i++) {
  17. var mesh = meshes[i];
  18. if (mesh && mesh.extras && mesh.extras.MSFT_minecraftMesh) {
  19. this._minecraftEnabled = true;
  20. break;
  21. }
  22. }
  23. }
  24. }
  25. public onMaterialLoaded(material: Material) {
  26. if (this._minecraftEnabled && material.needAlphaBlending()) {
  27. material.forceDepthWrite = true;
  28. material.backFaceCulling = true;
  29. material.separateCullingPass = true;
  30. }
  31. }
  32. }