UNPKG

io3fix

Version:

toolkit for interior apps

893 lines (842 loc) 107 kB
'use strict'; // dependencies import getSchema from './common/get-schema.js' import getMaterial from './common/get-material.js' import updateSchema from './common/update-schema.js' import generateNormals from '../../../utils/data3d/buffer/get-normals' import generateUvs from '../../../utils/data3d/buffer/get-uvs' import cloneDeep from 'lodash/cloneDeep' import sortBy from 'lodash/sortBy' export default { schema: getSchema('wall'), init: function () { var this_ = this // avoid simultanous update calls this.throttledUpdate = AFRAME.utils.throttle(this.update, 10, this); // bind event listeners for child elements this.updateChildren() // listen for added or removed children this.el.addEventListener('child-attached', function(evt) { // wait for a bit to make sure the child component is set up setTimeout(function() { this_.throttledUpdate() this_.updateChildren() }, 10) }) this.el.addEventListener('child-detached', function(evt) { setTimeout(function() { this_.throttledUpdate() }, 10) }) }, updateChildren: function() { var this_ = this var children = this.el.children // listen to children, for updated positions if (children && children.length) { for (var i = 0; i < children.length; i++) { children[i].addEventListener('componentchanged', function() { setTimeout(function() { // FIXME: we need to wait till the new data is actually available this_.throttledUpdate() }, 20) }) } } }, updateSchema: updateSchema, update: function (oldData) { var this_ = this var data = this_.data if (!oldData || this.data.w !== oldData.w || this.data.controlLine !== oldData.controlLine ) { this.el.emit('wall-changed', {w: this.data.w, controlLine: this.data.controlLine}) } // remove old mesh this.remove() // get defaults and this.attributes = cloneDeep(data) // get children for walls var children = this_.el.children this.attributes.children = [] for (var i = 0; i < children.length; i++) { var c = children[i].getAttribute('io3d-window') || children[i].getAttribute('io3d-door') if (c) { if (children[i].getAttribute('io3d-window')) c.type = 'window' else if (children[i].getAttribute('io3d-door')) c.type = 'door' var pos = children[i].getAttribute('position') Object.keys(pos).forEach(p => { c[p] = pos[p] }) this.attributes.children.push(c) } else console.log('invalid child') } // this.attributes.children = this.attributes.children.map(c => mapAttributes(cloneDeep(getType.get(c.type).params), c)) // get meshes and materials from el3d modules var meshes = this.generateMeshes3d() // clean up empty meshes to prevent errors var meshKeys = Object.keys(meshes) meshKeys.forEach(key => { if (!meshes[key].positions || !meshes[key].positions.length) { // console.warn('no vertices for mesh', key) delete meshes[key] } }) // setup materials // defaults var materials = { front: 'default_plaster_001', //'basic-wall', back: 'default_plaster_001', //'basic-wall', base: { colorDiffuse: [ 0.95, 0.95, 0.95 ] }, top: 'wall_top' } // check for adapted materials var materialKeys = Object.keys(data).filter(function(key) { return key.indexOf('material_') > -1 }) // add materials to instance materialKeys.forEach(function(key) { var mesh = key.replace('material_', '') materials[mesh] = data[key] }) // fetch materials from mat library Object.keys(materials).forEach(mat => { materials[mat] = getMaterial(materials[mat]) }) // construct data3d object var data3d = { meshes: meshes, materials: materials } // create new one this_.mesh = new THREE.Object3D() this_.data3dView = new io3d.aFrame.three.Data3dView({parent: this_.mesh}) // update view this_.data3dView.set(data3d) this_.el.setObject3D('mesh', this_.mesh) // emit event this_.el.emit('mesh-updated'); }, remove: function () { if (this.data3dView) { this.data3dView.destroy() this.data3dView = null } if (this.mesh) { this.el.removeObject3D('mesh') this.mesh = null } }, generateMeshes3d: function () { var a = this.attributes // get children var children = a.children children = sortBy(children, function (model) { if (model.a !== undefined) { return model.a.x } else { return model.x } }) // geometry var baseHeightFront = a.frontHasBase ? a.baseHeight : 0, baseHeightBack = a.backHasBase ? a.baseHeight : 0, // walls are drawn along their controlLine controlLine = a.controlLine ? a.controlLine : 'back', baseVertices = [], baseVerticesPointer = 0, frontVertices = [], frontVerticesPointer = 0, frontUvs = [], frontUvsPointer = 0, backVertices = [], backVerticesPointer = 0, backUvs = [], backUvsPointer = 0, topVertices = [], topVerticesPointer = 0, pointer = 0, al = a.l, // wall width aw = a.w, // back position azb = controlLine === 'front' ? -aw : controlLine === 'center' ? -aw / 2 : 0, // front position azf = azb + aw, ah = a.h, c, cPrev, cNext, cx, cy, cz, cl, cw, ch, _y1, _y2, _yf, _yb for (var i = 0, l = children.length; i < l; i++) { c = (children[ i ].a) ? children[ i ].a : children[ i ] // children attributes cPrev = children[ i - 1 ] ? children[ i - 1 ].a : null // previous children attributes cNext = children[ i + 1 ] ? children[ i + 1 ].a : null // next children attributes cx = c.x cy = c.y cl = c.l cw = c.w ch = c.h cz = c.side === 'front' ? azf : c.side === 'center' ? azb + aw / 2 : azb // wall before children if (pointer < cx) { // front quad vertices frontVertices[ frontVerticesPointer ] = frontVertices[ frontVerticesPointer + 9 ] = pointer frontVertices[ frontVerticesPointer + 1 ] = frontVertices[ frontVerticesPointer + 10 ] = baseHeightFront frontVertices[ frontVerticesPointer + 2 ] = frontVertices[ frontVerticesPointer + 11 ] = azf frontVertices[ frontVerticesPointer + 3 ] = cx frontVertices[ frontVerticesPointer + 4 ] = baseHeightFront frontVertices[ frontVerticesPointer + 5 ] = azf frontVertices[ frontVerticesPointer + 6 ] = frontVertices[ frontVerticesPointer + 12 ] = cx frontVertices[ frontVerticesPointer + 7 ] = frontVertices[ frontVerticesPointer + 13 ] = ah frontVertices[ frontVerticesPointer + 8 ] = frontVertices[ frontVerticesPointer + 14 ] = azf frontVertices[ frontVerticesPointer + 15 ] = pointer frontVertices[ frontVerticesPointer + 16 ] = ah frontVertices[ frontVerticesPointer + 17 ] = azf frontVerticesPointer += 18 // front quad uvs frontUvs[ frontUvsPointer ] = frontUvs[ frontUvsPointer + 6 ] = pointer frontUvs[ frontUvsPointer + 1 ] = frontUvs[ frontUvsPointer + 7 ] = baseHeightFront frontUvs[ frontUvsPointer + 2 ] = cx frontUvs[ frontUvsPointer + 3 ] = baseHeightFront frontUvs[ frontUvsPointer + 4 ] = frontUvs[ frontUvsPointer + 8 ] = cx frontUvs[ frontUvsPointer + 5 ] = frontUvs[ frontUvsPointer + 9 ] = ah frontUvs[ frontUvsPointer + 10 ] = pointer frontUvs[ frontUvsPointer + 11 ] = ah frontUvsPointer += 12 // front baseboard quad vertices if (baseHeightFront) { baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = 0 baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = azf baseVertices[ baseVerticesPointer + 3 ] = cx baseVertices[ baseVerticesPointer + 4 ] = 0 baseVertices[ baseVerticesPointer + 5 ] = azf baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = cx baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = baseHeightFront baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = azf baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = baseHeightFront baseVertices[ baseVerticesPointer + 17 ] = azf baseVerticesPointer += 18 } // back quad vertices backVertices[ backVerticesPointer ] = backVertices[ backVerticesPointer + 9 ] = pointer backVertices[ backVerticesPointer + 1 ] = backVertices[ backVerticesPointer + 10 ] = ah backVertices[ backVerticesPointer + 2 ] = backVertices[ backVerticesPointer + 11 ] = azb backVertices[ backVerticesPointer + 3 ] = cx backVertices[ backVerticesPointer + 4 ] = ah backVertices[ backVerticesPointer + 5 ] = azb backVertices[ backVerticesPointer + 6 ] = backVertices[ backVerticesPointer + 12 ] = cx backVertices[ backVerticesPointer + 7 ] = backVertices[ backVerticesPointer + 13 ] = baseHeightBack backVertices[ backVerticesPointer + 8 ] = backVertices[ backVerticesPointer + 14 ] = azb backVertices[ backVerticesPointer + 15 ] = pointer backVertices[ backVerticesPointer + 16 ] = baseHeightBack backVertices[ backVerticesPointer + 17 ] = azb backVerticesPointer += 18 // back quad uvs backUvs[ backUvsPointer ] = backUvs[ backUvsPointer + 6 ] = pointer backUvs[ backUvsPointer + 1 ] = backUvs[ backUvsPointer + 7 ] = ah backUvs[ backUvsPointer + 2 ] = cx backUvs[ backUvsPointer + 3 ] = ah backUvs[ backUvsPointer + 4 ] = backUvs[ backUvsPointer + 8 ] = cx backUvs[ backUvsPointer + 5 ] = backUvs[ backUvsPointer + 9 ] = baseHeightBack backUvs[ backUvsPointer + 10 ] = pointer backUvs[ backUvsPointer + 11 ] = baseHeightBack backUvsPointer += 12 // back baseboard quad vertices if (baseHeightBack) { baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = baseHeightBack baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = azb baseVertices[ baseVerticesPointer + 3 ] = cx baseVertices[ baseVerticesPointer + 4 ] = baseHeightBack baseVertices[ baseVerticesPointer + 5 ] = azb baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = cx baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = 0 baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = azb baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = 0 baseVertices[ baseVerticesPointer + 17 ] = azb baseVerticesPointer += 18 } // top quad vertices topVertices[ topVerticesPointer ] = topVertices[ topVerticesPointer + 9 ] = pointer topVertices[ topVerticesPointer + 1 ] = topVertices[ topVerticesPointer + 10 ] = ah topVertices[ topVerticesPointer + 2 ] = topVertices[ topVerticesPointer + 11 ] = azf topVertices[ topVerticesPointer + 3 ] = cx topVertices[ topVerticesPointer + 4 ] = ah topVertices[ topVerticesPointer + 5 ] = azf topVertices[ topVerticesPointer + 6 ] = topVertices[ topVerticesPointer + 12 ] = cx topVertices[ topVerticesPointer + 7 ] = topVertices[ topVerticesPointer + 13 ] = ah topVertices[ topVerticesPointer + 8 ] = topVertices[ topVerticesPointer + 14 ] = azb topVertices[ topVerticesPointer + 15 ] = pointer topVertices[ topVerticesPointer + 16 ] = ah topVertices[ topVerticesPointer + 17 ] = azb topVerticesPointer += 18 if (pointer === 0) { // start face of the wall if there are openings in the wall // react to wall controlLine position if (azf > 0) { // left side quad vertices frontVertices[ frontVerticesPointer ] = frontVertices[ frontVerticesPointer + 9 ] = pointer frontVertices[ frontVerticesPointer + 1 ] = frontVertices[ frontVerticesPointer + 10 ] = baseHeightFront frontVertices[ frontVerticesPointer + 2 ] = frontVertices[ frontVerticesPointer + 11 ] = 0 frontVertices[ frontVerticesPointer + 3 ] = pointer frontVertices[ frontVerticesPointer + 4 ] = baseHeightFront frontVertices[ frontVerticesPointer + 5 ] = azf frontVertices[ frontVerticesPointer + 6 ] = frontVertices[ frontVerticesPointer + 12 ] = pointer frontVertices[ frontVerticesPointer + 7 ] = frontVertices[ frontVerticesPointer + 13 ] = ah frontVertices[ frontVerticesPointer + 8 ] = frontVertices[ frontVerticesPointer + 14 ] = azf frontVertices[ frontVerticesPointer + 15 ] = pointer frontVertices[ frontVerticesPointer + 16 ] = ah frontVertices[ frontVerticesPointer + 17 ] = 0 frontVerticesPointer += 18 // left side quad uvs frontUvs[ frontUvsPointer ] = frontUvs[ frontUvsPointer + 6 ] = 0 frontUvs[ frontUvsPointer + 1 ] = frontUvs[ frontUvsPointer + 7 ] = baseHeightFront frontUvs[ frontUvsPointer + 2 ] = azf frontUvs[ frontUvsPointer + 3 ] = baseHeightFront frontUvs[ frontUvsPointer + 4 ] = frontUvs[ frontUvsPointer + 8 ] = azf frontUvs[ frontUvsPointer + 5 ] = frontUvs[ frontUvsPointer + 9 ] = ah frontUvs[ frontUvsPointer + 10 ] = 0 frontUvs[ frontUvsPointer + 11 ] = ah frontUvsPointer += 12 // left side baseboard quad vertrices if (baseHeightFront) { baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = 0 baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = 0 baseVertices[ baseVerticesPointer + 3 ] = pointer baseVertices[ baseVerticesPointer + 4 ] = 0 baseVertices[ baseVerticesPointer + 5 ] = azf baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = baseHeightFront baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = azf baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = baseHeightFront baseVertices[ baseVerticesPointer + 17 ] = 0 baseVerticesPointer += 18 } } if (azb < 0) { // left side quad vertices backVertices[ backVerticesPointer ] = backVertices[ backVerticesPointer + 9 ] = pointer backVertices[ backVerticesPointer + 1 ] = backVertices[ backVerticesPointer + 10 ] = baseHeightBack backVertices[ backVerticesPointer + 2 ] = backVertices[ backVerticesPointer + 11 ] = azb backVertices[ backVerticesPointer + 3 ] = pointer backVertices[ backVerticesPointer + 4 ] = baseHeightBack backVertices[ backVerticesPointer + 5 ] = 0 backVertices[ backVerticesPointer + 6 ] = backVertices[ backVerticesPointer + 12 ] = pointer backVertices[ backVerticesPointer + 7 ] = backVertices[ backVerticesPointer + 13 ] = ah backVertices[ backVerticesPointer + 8 ] = backVertices[ backVerticesPointer + 14 ] = 0 backVertices[ backVerticesPointer + 15 ] = pointer backVertices[ backVerticesPointer + 16 ] = ah backVertices[ backVerticesPointer + 17 ] = azb backVerticesPointer += 18 // left side quad uvs backUvs[ backUvsPointer ] = backUvs[ backUvsPointer + 6 ] = 0 backUvs[ backUvsPointer + 1 ] = backUvs[ backUvsPointer + 7 ] = baseHeightBack backUvs[ backUvsPointer + 2 ] = azb backUvs[ backUvsPointer + 3 ] = baseHeightBack backUvs[ backUvsPointer + 4 ] = backUvs[ backUvsPointer + 8 ] = azb backUvs[ backUvsPointer + 5 ] = backUvs[ backUvsPointer + 9 ] = ah backUvs[ backUvsPointer + 10 ] = 0 backUvs[ backUvsPointer + 11 ] = ah backUvsPointer += 12 // left side baseboard quad vertrices if (baseHeightBack) { baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = 0 baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = azb baseVertices[ baseVerticesPointer + 3 ] = pointer baseVertices[ baseVerticesPointer + 4 ] = 0 baseVertices[ baseVerticesPointer + 5 ] = 0 baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = baseHeightBack baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = 0 baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = baseHeightBack baseVertices[ baseVerticesPointer + 17 ] = azb baseVerticesPointer += 18 } } } } // move pointer position pointer = cx // wall below children if (cy > 0) { var baseHeightBackBelow = baseHeightBack > c.y ? c.y : baseHeightBack var baseHeightFrontBelow = baseHeightFront > c.y ? c.y : baseHeightFront if (c.y > baseHeightFront){ // front quad vertices frontVertices[ frontVerticesPointer ] = frontVertices[ frontVerticesPointer + 9 ] = pointer frontVertices[ frontVerticesPointer + 1 ] = frontVertices[ frontVerticesPointer + 10 ] = baseHeightFront frontVertices[ frontVerticesPointer + 2 ] = frontVertices[ frontVerticesPointer + 11 ] = azf frontVertices[ frontVerticesPointer + 3 ] = pointer + cl frontVertices[ frontVerticesPointer + 4 ] = baseHeightFront frontVertices[ frontVerticesPointer + 5 ] = azf frontVertices[ frontVerticesPointer + 6 ] = frontVertices[ frontVerticesPointer + 12 ] = pointer + cl frontVertices[ frontVerticesPointer + 7 ] = frontVertices[ frontVerticesPointer + 13 ] = cy frontVertices[ frontVerticesPointer + 8 ] = frontVertices[ frontVerticesPointer + 14 ] = azf frontVertices[ frontVerticesPointer + 15 ] = pointer frontVertices[ frontVerticesPointer + 16 ] = cy frontVertices[ frontVerticesPointer + 17 ] = azf frontVerticesPointer += 18 // front quad uvs frontUvs[ frontUvsPointer ] = frontUvs[ frontUvsPointer + 6 ] = pointer frontUvs[ frontUvsPointer + 1 ] = frontUvs[ frontUvsPointer + 7 ] = baseHeightFront frontUvs[ frontUvsPointer + 2 ] = pointer + cl frontUvs[ frontUvsPointer + 3 ] = baseHeightFront frontUvs[ frontUvsPointer + 4 ] = frontUvs[ frontUvsPointer + 8 ] = pointer + cl frontUvs[ frontUvsPointer + 5 ] = frontUvs[ frontUvsPointer + 9 ] = cy frontUvs[ frontUvsPointer + 10 ] = pointer frontUvs[ frontUvsPointer + 11 ] = cy frontUvsPointer += 12 } if (baseHeightFront) { // front baseboard quad vertices baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = 0 baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = azf baseVertices[ baseVerticesPointer + 3 ] = pointer + cl baseVertices[ baseVerticesPointer + 4 ] = 0 baseVertices[ baseVerticesPointer + 5 ] = azf baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer + cl baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = baseHeightFrontBelow baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = azf baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = baseHeightFrontBelow baseVertices[ baseVerticesPointer + 17 ] = azf baseVerticesPointer += 18 } if (c.y>baseHeightBack){ // back quad vertices backVertices[ backVerticesPointer ] = backVertices[ backVerticesPointer + 9 ] = pointer backVertices[ backVerticesPointer + 1 ] = backVertices[ backVerticesPointer + 10 ] = cy backVertices[ backVerticesPointer + 2 ] = backVertices[ backVerticesPointer + 11 ] = azb backVertices[ backVerticesPointer + 3 ] = pointer + cl backVertices[ backVerticesPointer + 4 ] = cy backVertices[ backVerticesPointer + 5 ] = azb backVertices[ backVerticesPointer + 6 ] = backVertices[ backVerticesPointer + 12 ] = pointer + cl backVertices[ backVerticesPointer + 7 ] = backVertices[ backVerticesPointer + 13 ] = baseHeightBack backVertices[ backVerticesPointer + 8 ] = backVertices[ backVerticesPointer + 14 ] = azb backVertices[ backVerticesPointer + 15 ] = pointer backVertices[ backVerticesPointer + 16 ] = baseHeightBack backVertices[ backVerticesPointer + 17 ] = azb backVerticesPointer += 18 // back quad uvs backUvs[ backUvsPointer ] = backUvs[ backUvsPointer + 6 ] = pointer backUvs[ backUvsPointer + 1 ] = backUvs[ backUvsPointer + 7 ] = cy backUvs[ backUvsPointer + 2 ] = pointer + cl backUvs[ backUvsPointer + 3 ] = cy backUvs[ backUvsPointer + 4 ] = backUvs[ backUvsPointer + 8 ] = pointer + cl backUvs[ backUvsPointer + 5 ] = backUvs[ backUvsPointer + 9 ] = baseHeightBack backUvs[ backUvsPointer + 10 ] = pointer backUvs[ backUvsPointer + 11 ] = baseHeightBack backUvsPointer += 12 } if (baseHeightBack) { // back base quad vertices baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = baseHeightBackBelow baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = azb baseVertices[ baseVerticesPointer + 3 ] = pointer + cl baseVertices[ baseVerticesPointer + 4 ] = baseHeightBackBelow baseVertices[ baseVerticesPointer + 5 ] = azb baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer + cl baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = 0 baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = azb baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = 0 baseVertices[ baseVerticesPointer + 17 ] = azb baseVerticesPointer += 18 } // top quad vertices below opening // react to opening z-position if (azf > cz) { if (c.y > baseHeightFront) { // baseboard lower than opening frontVertices[ frontVerticesPointer ] = frontVertices[ frontVerticesPointer + 9 ] = pointer frontVertices[ frontVerticesPointer + 1 ] = frontVertices[ frontVerticesPointer + 10 ] = cy frontVertices[ frontVerticesPointer + 2 ] = frontVertices[ frontVerticesPointer + 11 ] = azf frontVertices[ frontVerticesPointer + 3 ] = pointer + cl frontVertices[ frontVerticesPointer + 4 ] = cy frontVertices[ frontVerticesPointer + 5 ] = azf frontVertices[ frontVerticesPointer + 6 ] = frontVertices[ frontVerticesPointer + 12 ] = pointer + cl frontVertices[ frontVerticesPointer + 7 ] = frontVertices[ frontVerticesPointer + 13 ] = cy frontVertices[ frontVerticesPointer + 8 ] = frontVertices[ frontVerticesPointer + 14 ] = cz frontVertices[ frontVerticesPointer + 15 ] = pointer frontVertices[ frontVerticesPointer + 16 ] = cy frontVertices[ frontVerticesPointer + 17 ] = cz frontVerticesPointer += 18 // top quad uvs frontUvs[ frontUvsPointer ] = frontUvs[ frontUvsPointer + 6 ] = pointer frontUvs[ frontUvsPointer + 1 ] = frontUvs[ frontUvsPointer + 7 ] = aw frontUvs[ frontUvsPointer + 2 ] = pointer + cl frontUvs[ frontUvsPointer + 3 ] = aw frontUvs[ frontUvsPointer + 4 ] = frontUvs[ frontUvsPointer + 8 ] = pointer + cl frontUvs[ frontUvsPointer + 5 ] = frontUvs[ frontUvsPointer + 9 ] = 0 frontUvs[ frontUvsPointer + 10 ] = pointer frontUvs[ frontUvsPointer + 11 ] = 0 frontUvsPointer += 12 } else { // draw baseboard baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = cy baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = azf baseVertices[ baseVerticesPointer + 3 ] = pointer + cl baseVertices[ baseVerticesPointer + 4 ] = cy baseVertices[ baseVerticesPointer + 5 ] = azf baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer + cl baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = cy baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = cz baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = cy baseVertices[ baseVerticesPointer + 17 ] = cz baseVerticesPointer += 18 } } if (cz > azb) { if (c.y > baseHeightBack) { // baseboard lower than opening // top quad vertices backVertices[ backVerticesPointer ] = backVertices[ backVerticesPointer + 9 ] = pointer backVertices[ backVerticesPointer + 1 ] = backVertices[ backVerticesPointer + 10 ] = cy backVertices[ backVerticesPointer + 2 ] = backVertices[ backVerticesPointer + 11 ] = cz backVertices[ backVerticesPointer + 3 ] = pointer + cl backVertices[ backVerticesPointer + 4 ] = cy backVertices[ backVerticesPointer + 5 ] = cz backVertices[ backVerticesPointer + 6 ] = backVertices[ backVerticesPointer + 12 ] = pointer + cl backVertices[ backVerticesPointer + 7 ] = backVertices[ backVerticesPointer + 13 ] = cy backVertices[ backVerticesPointer + 8 ] = backVertices[ backVerticesPointer + 14 ] = azb backVertices[ backVerticesPointer + 15 ] = pointer backVertices[ backVerticesPointer + 16 ] = cy backVertices[ backVerticesPointer + 17 ] = azb backVerticesPointer += 18 // top quad uvs backUvs[ backUvsPointer ] = backUvs[ backUvsPointer + 6 ] = pointer backUvs[ backUvsPointer + 1 ] = backUvs[ backUvsPointer + 7 ] = aw backUvs[ backUvsPointer + 2 ] = pointer + cl backUvs[ backUvsPointer + 3 ] = aw backUvs[ backUvsPointer + 4 ] = backUvs[ backUvsPointer + 8 ] = pointer + cl backUvs[ backUvsPointer + 5 ] = backUvs[ backUvsPointer + 9 ] = 0 backUvs[ backUvsPointer + 10 ] = pointer backUvs[ backUvsPointer + 11 ] = 0 backUvsPointer += 12 } else { // draw baseboard baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = cy baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = cz baseVertices[ baseVerticesPointer + 3 ] = pointer + cl baseVertices[ baseVerticesPointer + 4 ] = cy baseVertices[ baseVerticesPointer + 5 ] = cz baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer + cl baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = cy baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = azb baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = cy baseVertices[ baseVerticesPointer + 17 ] = azb baseVerticesPointer += 18 } } // left side below opening if (pointer <= 0) { // start face of the wall if opening is at x = 0 // left side quad vertices below opening // react to opening z-position if (azf > cz) { if (c.y > baseHeightFront) { frontVertices[ frontVerticesPointer ] = frontVertices[ frontVerticesPointer + 9 ] = pointer frontVertices[ frontVerticesPointer + 1 ] = frontVertices[ frontVerticesPointer + 10 ] = baseHeightFront frontVertices[ frontVerticesPointer + 2 ] = frontVertices[ frontVerticesPointer + 11 ] = cz frontVertices[ frontVerticesPointer + 3 ] = pointer frontVertices[ frontVerticesPointer + 4 ] = baseHeightFront frontVertices[ frontVerticesPointer + 5 ] = azf frontVertices[ frontVerticesPointer + 6 ] = frontVertices[ frontVerticesPointer + 12 ] = pointer frontVertices[ frontVerticesPointer + 7 ] = frontVertices[ frontVerticesPointer + 13 ] = cy frontVertices[ frontVerticesPointer + 8 ] = frontVertices[ frontVerticesPointer + 14 ] = azf frontVertices[ frontVerticesPointer + 15 ] = pointer frontVertices[ frontVerticesPointer + 16 ] = cy frontVertices[ frontVerticesPointer + 17 ] = cz frontVerticesPointer += 18 // left side quad uvs frontUvs[ frontUvsPointer ] = frontUvs[ frontUvsPointer + 6 ] = 0 frontUvs[ frontUvsPointer + 1 ] = frontUvs[ frontUvsPointer + 7 ] = baseHeightFront frontUvs[ frontUvsPointer + 2 ] = aw frontUvs[ frontUvsPointer + 3 ] = baseHeightFront frontUvs[ frontUvsPointer + 4 ] = frontUvs[ frontUvsPointer + 8 ] = aw frontUvs[ frontUvsPointer + 5 ] = frontUvs[ frontUvsPointer + 9 ] = cy frontUvs[ frontUvsPointer + 10 ] = 0 frontUvs[ frontUvsPointer + 11 ] = cy frontUvsPointer += 12 } // left side baseboard quad vertices if (baseHeightFront) { baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = 0 baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = cz baseVertices[ baseVerticesPointer + 3 ] = pointer baseVertices[ baseVerticesPointer + 4 ] = 0 baseVertices[ baseVerticesPointer + 5 ] = azf baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = baseHeightFrontBelow baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = azf baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = baseHeightFrontBelow baseVertices[ baseVerticesPointer + 17 ] = cz baseVerticesPointer += 18 } } if (cz > azb) { if (c.y > baseHeightBack) { backVertices[ backVerticesPointer ] = backVertices[ backVerticesPointer + 9 ] = pointer backVertices[ backVerticesPointer + 1 ] = backVertices[ backVerticesPointer + 10 ] = baseHeightBack backVertices[ backVerticesPointer + 2 ] = backVertices[ backVerticesPointer + 11 ] = azb backVertices[ backVerticesPointer + 3 ] = pointer backVertices[ backVerticesPointer + 4 ] = baseHeightBack backVertices[ backVerticesPointer + 5 ] = cz backVertices[ backVerticesPointer + 6 ] = backVertices[ backVerticesPointer + 12 ] = pointer backVertices[ backVerticesPointer + 7 ] = backVertices[ backVerticesPointer + 13 ] = cy backVertices[ backVerticesPointer + 8 ] = backVertices[ backVerticesPointer + 14 ] = cz backVertices[ backVerticesPointer + 15 ] = pointer backVertices[ backVerticesPointer + 16 ] = cy backVertices[ backVerticesPointer + 17 ] = azb backVerticesPointer += 18 // left side quad uvs backUvs[ backUvsPointer ] = backUvs[ backUvsPointer + 6 ] = 0 backUvs[ backUvsPointer + 1 ] = backUvs[ backUvsPointer + 7 ] = baseHeightBack backUvs[ backUvsPointer + 2 ] = aw backUvs[ backUvsPointer + 3 ] = baseHeightBack backUvs[ backUvsPointer + 4 ] = backUvs[ backUvsPointer + 8 ] = aw backUvs[ backUvsPointer + 5 ] = backUvs[ backUvsPointer + 9 ] = cy backUvs[ backUvsPointer + 10 ] = 0 backUvs[ backUvsPointer + 11 ] = cy backUvsPointer += 12 } // left side baseboard quad vertices if (baseHeightBack) { baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = 0 baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = azb baseVertices[ baseVerticesPointer + 3 ] = pointer baseVertices[ baseVerticesPointer + 4 ] = 0 baseVertices[ baseVerticesPointer + 5 ] = cz baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = baseHeightBackBelow baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = cz baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = baseHeightBackBelow baseVertices[ baseVerticesPointer + 17 ] = azb baseVerticesPointer += 18 } } } else if (cPrev && cx === round(cPrev.x + cPrev.l) && cPrev.y < cy) { // adjacent to a window _yf = cy > baseHeightFront ? baseHeightFront : cy _yb = cy > baseHeightBack ? baseHeightBack : cy // left side quad vertices // if previous opening is higher if (azf > cz) { // react to opening z-position if (c.y > baseHeightFront) { frontVertices[ frontVerticesPointer ] = frontVertices[ frontVerticesPointer + 9 ] = pointer frontVertices[ frontVerticesPointer + 1 ] = frontVertices[ frontVerticesPointer + 10 ] = _yf frontVertices[ frontVerticesPointer + 2 ] = frontVertices[ frontVerticesPointer + 11 ] = cz frontVertices[ frontVerticesPointer + 3 ] = pointer frontVertices[ frontVerticesPointer + 4 ] = _yf frontVertices[ frontVerticesPointer + 5 ] = azf frontVertices[ frontVerticesPointer + 6 ] = frontVertices[ frontVerticesPointer + 12 ] = pointer frontVertices[ frontVerticesPointer + 7 ] = frontVertices[ frontVerticesPointer + 13 ] = cy frontVertices[ frontVerticesPointer + 8 ] = frontVertices[ frontVerticesPointer + 14 ] = azf frontVertices[ frontVerticesPointer + 15 ] = pointer frontVertices[ frontVerticesPointer + 16 ] = cy frontVertices[ frontVerticesPointer + 17 ] = cz frontVerticesPointer += 18 // left side quad uvs frontUvs[ frontUvsPointer ] = frontUvs[ frontUvsPointer + 6 ] = 0 frontUvs[ frontUvsPointer + 1 ] = frontUvs[ frontUvsPointer + 7 ] = _yf frontUvs[ frontUvsPointer + 2 ] = aw frontUvs[ frontUvsPointer + 3 ] = _yf frontUvs[ frontUvsPointer + 4 ] = frontUvs[ frontUvsPointer + 8 ] = aw frontUvs[ frontUvsPointer + 5 ] = frontUvs[ frontUvsPointer + 9 ] = cy frontUvs[ frontUvsPointer + 10 ] = 0 frontUvs[ frontUvsPointer + 11 ] = cy frontUvsPointer += 12 } // left side base quad vertices if (baseHeightFront && cPrev.y < baseHeightFront) { baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = cPrev.y baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = cz baseVertices[ baseVerticesPointer + 3 ] = pointer baseVertices[ baseVerticesPointer + 4 ] = cPrev.y baseVertices[ baseVerticesPointer + 5 ] = azf baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = _yf baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = azf baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = _yf baseVertices[ baseVerticesPointer + 17 ] = cz baseVerticesPointer += 18 } } if (cz > azb) { if ( c.y > baseHeightBack) { backVertices[ backVerticesPointer ] = backVertices[ backVerticesPointer + 9 ] = pointer backVertices[ backVerticesPointer + 1 ] = backVertices[ backVerticesPointer + 10 ] = _yb backVertices[ backVerticesPointer + 2 ] = backVertices[ backVerticesPointer + 11 ] = azb backVertices[ backVerticesPointer + 3 ] = pointer backVertices[ backVerticesPointer + 4 ] = _yb backVertices[ backVerticesPointer + 5 ] = cz backVertices[ backVerticesPointer + 6 ] = backVertices[ backVerticesPointer + 12 ] = pointer backVertices[ backVerticesPointer + 7 ] = backVertices[ backVerticesPointer + 13 ] = cy backVertices[ backVerticesPointer + 8 ] = backVertices[ backVerticesPointer + 14 ] = cz backVertices[ backVerticesPointer + 15 ] = pointer backVertices[ backVerticesPointer + 16 ] = cy backVertices[ backVerticesPointer + 17 ] = azb backVerticesPointer += 18 // left side quad uvs backUvs[ backUvsPointer ] = backUvs[ backUvsPointer + 6 ] = 0 backUvs[ backUvsPointer + 1 ] = backUvs[ backUvsPointer + 7 ] = _yb backUvs[ backUvsPointer + 2 ] = aw backUvs[ backUvsPointer + 3 ] = _yb backUvs[ backUvsPointer + 4 ] = backUvs[ backUvsPointer + 8 ] = aw backUvs[ backUvsPointer + 5 ] = backUvs[ backUvsPointer + 9 ] = cy backUvs[ backUvsPointer + 10 ] = 0 backUvs[ backUvsPointer + 11 ] = cy backUvsPointer += 12 } // left side base quad vertices if (baseHeightBack && cPrev.y < baseHeightBack) { baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = cPrev.y baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = azb baseVertices[ baseVerticesPointer + 3 ] = pointer baseVertices[ baseVerticesPointer + 4 ] = cPrev.y baseVertices[ baseVerticesPointer + 5 ] = cz baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = _yb baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = cz baseVertices[ baseVerticesPointer + 15 ] = pointer baseVertices[ baseVerticesPointer + 16 ] = _yb baseVertices[ baseVerticesPointer + 17 ] = azb baseVerticesPointer += 18 } } } // right side below opening // end face of the wall if opening hits end of wall if (round(pointer + cl) >= al) { // right side quad vertices if (azf > cz) { if (c.y > baseHeightFront) { // react to opening z-position frontVertices[ frontVerticesPointer ] = frontVertices[ frontVerticesPointer + 9 ] = pointer + cl frontVertices[ frontVerticesPointer + 1 ] = frontVertices[ frontVerticesPointer + 10 ] = baseHeightFront frontVertices[ frontVerticesPointer + 2 ] = frontVertices[ frontVerticesPointer + 11 ] = azf frontVertices[ frontVerticesPointer + 3 ] = pointer + cl frontVertices[ frontVerticesPointer + 4 ] = baseHeightFront frontVertices[ frontVerticesPointer + 5 ] = cz frontVertices[ frontVerticesPointer + 6 ] = frontVertices[ frontVerticesPointer + 12 ] = pointer + cl frontVertices[ frontVerticesPointer + 7 ] = frontVertices[ frontVerticesPointer + 13 ] = cy frontVertices[ frontVerticesPointer + 8 ] = frontVertices[ frontVerticesPointer + 14 ] = cz frontVertices[ frontVerticesPointer + 15 ] = pointer + cl frontVertices[ frontVerticesPointer + 16 ] = cy frontVertices[ frontVerticesPointer + 17 ] = azf frontVerticesPointer += 18 // right side quad uvs frontUvs[ frontUvsPointer ] = frontUvs[ frontUvsPointer + 6 ] = aw frontUvs[ frontUvsPointer + 1 ] = frontUvs[ frontUvsPointer + 7 ] = baseHeightFront frontUvs[ frontUvsPointer + 2 ] = 0 frontUvs[ frontUvsPointer + 3 ] = baseHeightFront frontUvs[ frontUvsPointer + 4 ] = frontUvs[ frontUvsPointer + 8 ] = 0 frontUvs[ frontUvsPointer + 5 ] = frontUvs[ frontUvsPointer + 9 ] = cy frontUvs[ frontUvsPointer + 10 ] = aw frontUvs[ frontUvsPointer + 11 ] = cy frontUvsPointer += 12 } if (baseHeightFront) { // right side base quad vertices baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer + cl baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = 0 baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = azf baseVertices[ baseVerticesPointer + 3 ] = pointer + cl baseVertices[ baseVerticesPointer + 4 ] = 0 baseVertices[ baseVerticesPointer + 5 ] = cz baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer + cl baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = baseHeightFrontBelow baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = cz baseVertices[ baseVerticesPointer + 15 ] = pointer + cl baseVertices[ baseVerticesPointer + 16 ] = baseHeightFrontBelow baseVertices[ baseVerticesPointer + 17 ] = azf baseVerticesPointer += 18 } } if (cz > azb) { if (c.y > baseHeightBack) { backVertices[ backVerticesPointer ] = backVertices[ backVerticesPointer + 9 ] = pointer + cl backVertices[ backVerticesPointer + 1 ] = backVertices[ backVerticesPointer + 10 ] = baseHeightBack backVertices[ backVerticesPointer + 2 ] = backVertices[ backVerticesPointer + 11 ] = cz backVertices[ backVerticesPointer + 3 ] = pointer + cl backVertices[ backVerticesPointer + 4 ] = baseHeightBack backVertices[ backVerticesPointer + 5 ] = azb backVertices[ backVerticesPointer + 6 ] = backVertices[ backVerticesPointer + 12 ] = pointer + cl backVertices[ backVerticesPointer + 7 ] = backVertices[ backVerticesPointer + 13 ] = cy backVertices[ backVerticesPointer + 8 ] = backVertices[ backVerticesPointer + 14 ] = azb backVertices[ backVerticesPointer + 15 ] = pointer + cl backVertices[ backVerticesPointer + 16 ] = cy backVertices[ backVerticesPointer + 17 ] = cz backVerticesPointer += 18 // right side quad uvs backUvs[ backUvsPointer ] = backUvs[ backUvsPointer + 6 ] = aw backUvs[ backUvsPointer + 1 ] = backUvs[ backUvsPointer + 7 ] = baseHeightBack backUvs[ backUvsPointer + 2 ] = 0 backUvs[ backUvsPointer + 3 ] = baseHeightBack backUvs[ backUvsPointer + 4 ] = backUvs[ backUvsPointer + 8 ] = 0 backUvs[ backUvsPointer + 5 ] = backUvs[ backUvsPointer + 9 ] = cy backUvs[ backUvsPointer + 10 ] = aw backUvs[ backUvsPointer + 11 ] = cy backUvsPointer += 12 } if (baseHeightBack) { // right side base quad vertices baseVertices[ baseVerticesPointer ] = baseVertices[ baseVerticesPointer + 9 ] = pointer + cl baseVertices[ baseVerticesPointer + 1 ] = baseVertices[ baseVerticesPointer + 10 ] = 0 baseVertices[ baseVerticesPointer + 2 ] = baseVertices[ baseVerticesPointer + 11 ] = cz baseVertices[ baseVerticesPointer + 3 ] = pointer + cl baseVertices[ baseVerticesPointer + 4 ] = 0 baseVertices[ baseVerticesPointer + 5 ] = azb baseVertices[ baseVerticesPointer + 6 ] = baseVertices[ baseVerticesPointer + 12 ] = pointer + cl baseVertices[ baseVerticesPointer + 7 ] = baseVertices[ baseVerticesPointer + 13 ] = baseHeightBackBelow baseVertices[ baseVerticesPointer + 8 ] = baseVertices[ baseVerticesPointer + 14 ] = azb baseVertices[ baseVerticesPointer + 15 ] = pointer + cl baseVertices[ baseVerticesPointer + 16 ] = baseHeightBackBelow baseVertices[ baseVerticesPointer + 17 ] = cz baseVerticesPointer += 18 } } } else if (cNext && round(cx + cl) === cNext.x && cNext.y < cy) { // adjacent to a window // right side quad vertices // if next window is higher _yf = cy > baseHeightFront ? baseHeightFront : cy _yb = cy > baseHeightBack ? baseHeightBack : cy // react to opening z-position if (azf > cz) { if (c.y > baseHeightFront) { frontVertices[ frontVerticesPointer ] = frontVertices[ frontVerticesPointer + 9 ] = pointer + cl frontVertices[ frontVerticesPointer + 1 ] = frontVertices[ frontVerticesPointer + 10 ] = cy frontVertices[ frontVerticesPointer + 2 ] = frontVertices[ frontVerticesPointer + 11 ] = azf frontVertices[ frontVerticesPointer + 3 ] = pointer + cl frontVertices[ frontVerticesPointer + 4 ] = _yf frontVertices[ frontVerticesPointer + 5 ] = azf frontVertices[ frontVerticesPointer + 6 ] = frontVertices[ frontVerticesPointer + 12 ] = pointer + cl frontVertices[ frontVerticesPointer + 7 ] = frontVertices[ frontVerticesPointer + 13 ] = _yf frontVertices[ frontVerticesPointer + 8 ] = frontVertices[ frontVerticesPointer + 14 ] = cz frontVertices[ frontVerticesPointer + 15 ] = pointer + cl frontVertices[ frontVerticesPointer + 16 ] = cy frontVertices[ frontVerticesPointer + 17 ] = cz frontVerticesPointer += 18 // right side quad uvs frontUvs[ frontUvsPointer ] = frontUvs[ frontUvsPoin