var gulp = require('gulp'); var concat = require('gulp-concat'); var sort = require('gulp-sort'); var minify = require('gulp-minify'); var replace = require('gulp-string-replace'); gulp.task('build', build); gulp.task('monitor', monitor); var code = 'if (R3.Utils.UndefinedOrNull(apiComponent)) {\n'; code += '\t\tapiComponent = {};\n'; code += '\t}\n'; code += '\tthis.apiComponent = apiComponent;\n'; code += '\n'; code += '\tR3.API.Component.call(\n'; code += '\t\tthis,\n'; code += '\t\tthis.apiComponent.parent,\n'; code += '\t\tthis.apiComponent.id,\n'; code += '\t\tthis.apiComponent.name\n'; code += '\t);'; var code2 = 'if (R3.Utils.UndefinedOrNull(apiGeometryBuffer)) {\n'; code2 += '\t\tapiGeometryBuffer = {};\n'; code2 += '\t}\n'; code2 += '\tthis.apiGeometryBuffer = apiGeometryBuffer;\n'; code2 += '\n'; code2 += '\tR3.D3.API.Geometry.Buffer.call(\n'; code2 += '\t\tthis,\n'; code2 += '\t\tthis.apiGeometryBuffer,\n'; code2 += '\t\tthis.apiGeometryBuffer.attributes,\n'; code2 += '\t\tthis.apiGeometryBuffer.drawRange,\n'; code2 += '\t\tthis.apiGeometryBuffer.groups,\n'; code2 += '\t\tthis.apiGeometryBuffer.index,\n'; code2 += '\t\tthis.apiGeometryBuffer.morphAttributes\n'; code2 += '\t);'; var code3 = 'if (R3.Utils.UndefinedOrNull(apiGeometryNormal)) {\n'; code3 += '\t\tapiGeometryNormal = {};\n'; code3 += '\t}\n'; code3 += '\tthis.apiGeometryNormal = apiGeometryNormal;\n'; code3 += '\n'; code3 += '\tR3.D3.API.Geometry.Normal.call(\n'; code3 += '\t\tthis,\n'; code3 += '\t\tthis.apiGeometryNormal,\n'; code3 += '\t\tthis.apiGeometryNormal.colors,\n'; code3 += '\t\tthis.apiGeometryNormal.lineDistances,\n'; code3 += '\t\tthis.apiGeometryNormal.morphTargets,\n'; code3 += '\t\tthis.apiGeometryNormal.morphNormals,\n'; code3 += '\t\tthis.apiGeometryNormal.skinWeights,\n'; code3 += '\t\tthis.apiGeometryNormal.skinIndices,\n'; code3 += '\t\tthis.apiGeometryNormal.verticesNeedsUpdate,\n'; code3 += '\t\tthis.apiGeometryNormal.elementsNeedUpdate,\n'; code3 += '\t\tthis.apiGeometryNormal.uvsNeedUpdate,\n'; code3 += '\t\tthis.apiGeometryNormal.normalsNeedUpdate,\n'; code3 += '\t\tthis.apiGeometryNormal.colorsNeedUpdate,\n'; code3 += '\t\tthis.apiGeometryNormal.groupsNeedUpdate,\n'; code3 += '\t\tthis.apiGeometryNormal.lineDistancesNeedUpdate\n'; code3 += '\t);'; var code4 = 'if (R3.Utils.UndefinedOrNull(apiMaterial)) {\n'; code4 += '\t\tapiMaterial = {};\n'; code4 += '\t}\n'; code4 += '\tthis.apiMaterial = apiMaterial;\n'; code4 += '\n'; code4 += '\tR3.D3.API.Material.call(\n'; code4 += '\t\tthis,\n'; code4 += '\t\tthis.apiMaterial,\n'; code4 += '\t\tthis.apiMaterial.parentMeshes,\n'; code4 += '\t\tthis.apiMaterial.alphaTest,\n'; code4 += '\t\tthis.apiMaterial.blendDst,\n'; code4 += '\t\tthis.apiMaterial.blendDstAlpha,\n'; code4 += '\t\tthis.apiMaterial.blendEquation,\n'; code4 += '\t\tthis.apiMaterial.blendEquationAlpha,\n'; code4 += '\t\tthis.apiMaterial.blending,\n'; code4 += '\t\tthis.apiMaterial.blendSrc,\n'; code4 += '\t\tthis.apiMaterial.blendSrcAlpha,\n'; code4 += '\t\tthis.apiMaterial.clipIntersection,\n'; code4 += '\t\tthis.apiMaterial.clippingPlanes,\n'; code4 += '\t\tthis.apiMaterial.clipShadows,\n'; code4 += '\t\tthis.apiMaterial.colorWrite,\n'; code4 += '\t\tthis.apiMaterial.customDepthMaterial,\n'; code4 += '\t\tthis.apiMaterial.customDistanceMaterial,\n'; code4 += '\t\tthis.apiMaterial.defines,\n'; code4 += '\t\tthis.apiMaterial.depthFunc,\n'; code4 += '\t\tthis.apiMaterial.depthTest,\n'; code4 += '\t\tthis.apiMaterial.depthWrite,\n'; code4 += '\t\tthis.apiMaterial.fog,\n'; code4 += '\t\tthis.apiMaterial.lights,\n'; code4 += '\t\tthis.apiMaterial.opacity,\n'; code4 += '\t\tthis.apiMaterial.overdraw,\n'; code4 += '\t\tthis.apiMaterial.polygonOffset,\n'; code4 += '\t\tthis.apiMaterial.polygonOffsetFactor,\n'; code4 += '\t\tthis.apiMaterial.polygonOffsetUnits,\n'; code4 += '\t\tthis.apiMaterial.precision,\n'; code4 += '\t\tthis.apiMaterial.premultipliedAlpha,\n'; code4 += '\t\tthis.apiMaterial.dithering,\n'; code4 += '\t\tthis.apiMaterial.flatShading,\n'; code4 += '\t\tthis.apiMaterial.side,\n'; code4 += '\t\tthis.apiMaterial.transparent,\n'; code4 += '\t\tthis.apiMaterial.vertexColors,\n'; code4 += '\t\tthis.apiMaterial.visible\n'; code4 += '\t);'; var code5 = 'if (R3.Utils.UndefinedOrNull(apiTexture)) {\n'; code5 += '\t\tapiTexture = {};\n'; code5 += '\t}\n'; code5 += '\tthis.apiTexture = apiTexture;\n'; code5 += '\n'; code5 += '\tR3.D3.API.Texture.call(\n'; code5 += '\t\tthis,\n'; code5 += '\t\tthis.apiTexture,\n'; code5 += '\t\tthis.apiTexture.parentMaterials,\n'; code5 += '\t\tthis.apiTexture.mipmaps,\n'; code5 += '\t\tthis.apiTexture.mapping,\n'; code5 += '\t\tthis.apiTexture.wrapS,\n'; code5 += '\t\tthis.apiTexture.wrapT,\n'; code5 += '\t\tthis.apiTexture.magFilter,\n'; code5 += '\t\tthis.apiTexture.minFilter,\n'; code5 += '\t\tthis.apiTexture.anisotropy,\n'; code5 += '\t\tthis.apiTexture.format,\n'; code5 += '\t\tthis.apiTexture.storageType,\n'; code5 += '\t\tthis.apiTexture.offset,\n'; code5 += '\t\tthis.apiTexture.repeat,\n'; code5 += '\t\tthis.apiTexture.rotation,\n'; code5 += '\t\tthis.apiTexture.center,\n'; code5 += '\t\tthis.apiTexture.matrixAutoUpdate,\n'; code5 += '\t\tthis.apiTexture.generateMipMaps,\n'; code5 += '\t\tthis.apiTexture.premultiplyAlpha,\n'; code5 += '\t\tthis.apiTexture.flipY,\n'; code5 += '\t\tthis.apiTexture.unpackAlignment,\n'; code5 += '\t\tthis.apiTexture.encoding,\n'; code5 += '\t\tthis.apiTexture.version,\n'; code5 += '\t\tthis.apiTexture.animated,\n'; code5 += '\t\tthis.apiTexture.reverseAnimation,\n'; code5 += '\t\tthis.apiTexture.forward\n'; code5 += '\t);'; function build() { return gulp.src('./src/r3-*.js') .pipe(sort()) .pipe(concat('r3.js')) .pipe(replace('__DATE__', new Date().toString())) .pipe(replace('__API_COMPONENT_MACRO__', code)) .pipe(replace('__API_GEOMETRY_BUFFER_MACRO__', code2)) .pipe(replace('__API_GEOMETRY_NORMAL_MACRO__', code3)) .pipe(replace('__API_MATERIAL_MACRO__', code4)) .pipe(replace('__API_TEXTURE_MACRO__', code5)) .pipe(minify({ ext:{ src:'.js', min:'-min.js' } })) .pipe(gulp.dest('./build/')); } function monitor() { gulp.watch('src/*.js', build); } gulp.task( 'default', gulp.series( build, monitor ) );