forked from sent/waves
68813 lines
4.4 MiB
68813 lines
4.4 MiB
! function(e, t) {
|
|
"object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define("babylonjs", [], t) : "object" == typeof exports ? exports.babylonjs = t() : e.BABYLON = t()
|
|
}("undefined" != typeof self ? self : "undefined" != typeof global ? global : this, function() {
|
|
return function(e) {
|
|
var t = {};
|
|
|
|
function i(n) {
|
|
if (t[n]) return t[n].exports;
|
|
var r = t[n] = {
|
|
i: n,
|
|
l: !1,
|
|
exports: {}
|
|
};
|
|
return e[n].call(r.exports, r, r.exports, i), r.l = !0, r.exports
|
|
}
|
|
return i.m = e, i.c = t, i.d = function(e, t, n) {
|
|
i.o(e, t) || Object.defineProperty(e, t, {
|
|
enumerable: !0,
|
|
get: n
|
|
})
|
|
}, i.r = function(e) {
|
|
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
|
|
value: "Module"
|
|
}), Object.defineProperty(e, "__esModule", {
|
|
value: !0
|
|
})
|
|
}, i.t = function(e, t) {
|
|
if (1 & t && (e = i(e)), 8 & t) return e;
|
|
if (4 & t && "object" == typeof e && e && e.__esModule) return e;
|
|
var n = Object.create(null);
|
|
if (i.r(n), Object.defineProperty(n, "default", {
|
|
enumerable: !0,
|
|
value: e
|
|
}), 2 & t && "string" != typeof e)
|
|
for (var r in e) i.d(n, r, function(t) {
|
|
return e[t]
|
|
}.bind(null, r));
|
|
return n
|
|
}, i.n = function(e) {
|
|
var t = e && e.__esModule ? function() {
|
|
return e.default
|
|
} : function() {
|
|
return e
|
|
};
|
|
return i.d(t, "a", t), t
|
|
}, i.o = function(e, t) {
|
|
return Object.prototype.hasOwnProperty.call(e, t)
|
|
}, i.p = "", i(i.s = 129)
|
|
}([function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "u", function() {
|
|
return s
|
|
}), i.d(t, "v", function() {
|
|
return a
|
|
}), i.d(t, "h", function() {
|
|
return c
|
|
}), i.d(t, "e", function() {
|
|
return l
|
|
}), i.d(t, "f", function() {
|
|
return u
|
|
}), i.d(t, "w", function() {
|
|
return h
|
|
}), i.d(t, "x", function() {
|
|
return d
|
|
}), i.d(t, "y", function() {
|
|
return f
|
|
}), i.d(t, "r", function() {
|
|
return p
|
|
}), i.d(t, "q", function() {
|
|
return _
|
|
}), i.d(t, "j", function() {
|
|
return g
|
|
}), i.d(t, "n", function() {
|
|
return m
|
|
}), i.d(t, "z", function() {
|
|
return v
|
|
}), i.d(t, "i", function() {
|
|
return y
|
|
}), i.d(t, "s", function() {
|
|
return n
|
|
}), i.d(t, "c", function() {
|
|
return T
|
|
}), i.d(t, "d", function() {
|
|
return E
|
|
}), i.d(t, "k", function() {
|
|
return b
|
|
}), i.d(t, "a", function() {
|
|
return A
|
|
}), i.d(t, "b", function() {
|
|
return x
|
|
}), i.d(t, "l", function() {
|
|
return R
|
|
}), i.d(t, "m", function() {
|
|
return P
|
|
}), i.d(t, "g", function() {
|
|
return S
|
|
}), i.d(t, "p", function() {
|
|
return C
|
|
}), i.d(t, "o", function() {
|
|
return M
|
|
}), i.d(t, "t", function() {
|
|
return O
|
|
});
|
|
var n, r = i(34),
|
|
o = i(12),
|
|
s = 1 / 2.2,
|
|
a = 2.2,
|
|
c = .001,
|
|
l = function() {
|
|
function e(e, t, i) {
|
|
void 0 === e && (e = 0), void 0 === t && (t = 0), void 0 === i && (i = 0), this.r = e, this.g = t, this.b = i
|
|
}
|
|
return e.prototype.toString = function() {
|
|
return "{R: " + this.r + " G:" + this.g + " B:" + this.b + "}"
|
|
}, e.prototype.getClassName = function() {
|
|
return "Color3"
|
|
}, e.prototype.getHashCode = function() {
|
|
var e = this.r || 0;
|
|
return e = 397 * (e = 397 * e ^ (this.g || 0)) ^ (this.b || 0)
|
|
}, e.prototype.toArray = function(e, t) {
|
|
return void 0 === t && (t = 0), e[t] = this.r, e[t + 1] = this.g, e[t + 2] = this.b, this
|
|
}, e.prototype.toColor4 = function(e) {
|
|
return void 0 === e && (e = 1), new u(this.r, this.g, this.b, e)
|
|
}, e.prototype.asArray = function() {
|
|
var e = new Array;
|
|
return this.toArray(e, 0), e
|
|
}, e.prototype.toLuminance = function() {
|
|
return .3 * this.r + .59 * this.g + .11 * this.b
|
|
}, e.prototype.multiply = function(t) {
|
|
return new e(this.r * t.r, this.g * t.g, this.b * t.b)
|
|
}, e.prototype.multiplyToRef = function(e, t) {
|
|
return t.r = this.r * e.r, t.g = this.g * e.g, t.b = this.b * e.b, this
|
|
}, e.prototype.equals = function(e) {
|
|
return e && this.r === e.r && this.g === e.g && this.b === e.b
|
|
}, e.prototype.equalsFloats = function(e, t, i) {
|
|
return this.r === e && this.g === t && this.b === i
|
|
}, e.prototype.scale = function(t) {
|
|
return new e(this.r * t, this.g * t, this.b * t)
|
|
}, e.prototype.scaleToRef = function(e, t) {
|
|
return t.r = this.r * e, t.g = this.g * e, t.b = this.b * e, this
|
|
}, e.prototype.scaleAndAddToRef = function(e, t) {
|
|
return t.r += this.r * e, t.g += this.g * e, t.b += this.b * e, this
|
|
}, e.prototype.clampToRef = function(e, t, i) {
|
|
return void 0 === e && (e = 0), void 0 === t && (t = 1), i.r = o.a.Clamp(this.r, e, t), i.g = o.a.Clamp(this.g, e, t), i.b = o.a.Clamp(this.b, e, t), this
|
|
}, e.prototype.add = function(t) {
|
|
return new e(this.r + t.r, this.g + t.g, this.b + t.b)
|
|
}, e.prototype.addToRef = function(e, t) {
|
|
return t.r = this.r + e.r, t.g = this.g + e.g, t.b = this.b + e.b, this
|
|
}, e.prototype.subtract = function(t) {
|
|
return new e(this.r - t.r, this.g - t.g, this.b - t.b)
|
|
}, e.prototype.subtractToRef = function(e, t) {
|
|
return t.r = this.r - e.r, t.g = this.g - e.g, t.b = this.b - e.b, this
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.r, this.g, this.b)
|
|
}, e.prototype.copyFrom = function(e) {
|
|
return this.r = e.r, this.g = e.g, this.b = e.b, this
|
|
}, e.prototype.copyFromFloats = function(e, t, i) {
|
|
return this.r = e, this.g = t, this.b = i, this
|
|
}, e.prototype.set = function(e, t, i) {
|
|
return this.copyFromFloats(e, t, i)
|
|
}, e.prototype.toHexString = function() {
|
|
var e = 255 * this.r | 0,
|
|
t = 255 * this.g | 0,
|
|
i = 255 * this.b | 0;
|
|
return "#" + o.a.ToHex(e) + o.a.ToHex(t) + o.a.ToHex(i)
|
|
}, e.prototype.toLinearSpace = function() {
|
|
var t = new e;
|
|
return this.toLinearSpaceToRef(t), t
|
|
}, e.prototype.toLinearSpaceToRef = function(e) {
|
|
return e.r = Math.pow(this.r, a), e.g = Math.pow(this.g, a), e.b = Math.pow(this.b, a), this
|
|
}, e.prototype.toGammaSpace = function() {
|
|
var t = new e;
|
|
return this.toGammaSpaceToRef(t), t
|
|
}, e.prototype.toGammaSpaceToRef = function(e) {
|
|
return e.r = Math.pow(this.r, s), e.g = Math.pow(this.g, s), e.b = Math.pow(this.b, s), this
|
|
}, e.FromHexString = function(t) {
|
|
if ("#" !== t.substring(0, 1) || 7 !== t.length) return new e(0, 0, 0);
|
|
var i = parseInt(t.substring(1, 3), 16),
|
|
n = parseInt(t.substring(3, 5), 16),
|
|
r = parseInt(t.substring(5, 7), 16);
|
|
return e.FromInts(i, n, r)
|
|
}, e.FromArray = function(t, i) {
|
|
return void 0 === i && (i = 0), new e(t[i], t[i + 1], t[i + 2])
|
|
}, e.FromInts = function(t, i, n) {
|
|
return new e(t / 255, i / 255, n / 255)
|
|
}, e.Lerp = function(t, i, n) {
|
|
var r = new e(0, 0, 0);
|
|
return e.LerpToRef(t, i, n, r), r
|
|
}, e.LerpToRef = function(e, t, i, n) {
|
|
n.r = e.r + (t.r - e.r) * i, n.g = e.g + (t.g - e.g) * i, n.b = e.b + (t.b - e.b) * i
|
|
}, e.Red = function() {
|
|
return new e(1, 0, 0)
|
|
}, e.Green = function() {
|
|
return new e(0, 1, 0)
|
|
}, e.Blue = function() {
|
|
return new e(0, 0, 1)
|
|
}, e.Black = function() {
|
|
return new e(0, 0, 0)
|
|
}, Object.defineProperty(e, "BlackReadOnly", {
|
|
get: function() {
|
|
return e._BlackReadOnly
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.White = function() {
|
|
return new e(1, 1, 1)
|
|
}, e.Purple = function() {
|
|
return new e(.5, 0, .5)
|
|
}, e.Magenta = function() {
|
|
return new e(1, 0, 1)
|
|
}, e.Yellow = function() {
|
|
return new e(1, 1, 0)
|
|
}, e.Gray = function() {
|
|
return new e(.5, .5, .5)
|
|
}, e.Teal = function() {
|
|
return new e(0, 1, 1)
|
|
}, e.Random = function() {
|
|
return new e(Math.random(), Math.random(), Math.random())
|
|
}, e._BlackReadOnly = e.Black(), e
|
|
}(),
|
|
u = function() {
|
|
function e(e, t, i, n) {
|
|
void 0 === e && (e = 0), void 0 === t && (t = 0), void 0 === i && (i = 0), void 0 === n && (n = 1), this.r = e, this.g = t, this.b = i, this.a = n
|
|
}
|
|
return e.prototype.addInPlace = function(e) {
|
|
return this.r += e.r, this.g += e.g, this.b += e.b, this.a += e.a, this
|
|
}, e.prototype.asArray = function() {
|
|
var e = new Array;
|
|
return this.toArray(e, 0), e
|
|
}, e.prototype.toArray = function(e, t) {
|
|
return void 0 === t && (t = 0), e[t] = this.r, e[t + 1] = this.g, e[t + 2] = this.b, e[t + 3] = this.a, this
|
|
}, e.prototype.equals = function(e) {
|
|
return e && this.r === e.r && this.g === e.g && this.b === e.b && this.a === e.a
|
|
}, e.prototype.add = function(t) {
|
|
return new e(this.r + t.r, this.g + t.g, this.b + t.b, this.a + t.a)
|
|
}, e.prototype.subtract = function(t) {
|
|
return new e(this.r - t.r, this.g - t.g, this.b - t.b, this.a - t.a)
|
|
}, e.prototype.subtractToRef = function(e, t) {
|
|
return t.r = this.r - e.r, t.g = this.g - e.g, t.b = this.b - e.b, t.a = this.a - e.a, this
|
|
}, e.prototype.scale = function(t) {
|
|
return new e(this.r * t, this.g * t, this.b * t, this.a * t)
|
|
}, e.prototype.scaleToRef = function(e, t) {
|
|
return t.r = this.r * e, t.g = this.g * e, t.b = this.b * e, t.a = this.a * e, this
|
|
}, e.prototype.scaleAndAddToRef = function(e, t) {
|
|
return t.r += this.r * e, t.g += this.g * e, t.b += this.b * e, t.a += this.a * e, this
|
|
}, e.prototype.clampToRef = function(e, t, i) {
|
|
return void 0 === e && (e = 0), void 0 === t && (t = 1), i.r = o.a.Clamp(this.r, e, t), i.g = o.a.Clamp(this.g, e, t), i.b = o.a.Clamp(this.b, e, t), i.a = o.a.Clamp(this.a, e, t), this
|
|
}, e.prototype.multiply = function(t) {
|
|
return new e(this.r * t.r, this.g * t.g, this.b * t.b, this.a * t.a)
|
|
}, e.prototype.multiplyToRef = function(e, t) {
|
|
return t.r = this.r * e.r, t.g = this.g * e.g, t.b = this.b * e.b, t.a = this.a * e.a, t
|
|
}, e.prototype.toString = function() {
|
|
return "{R: " + this.r + " G:" + this.g + " B:" + this.b + " A:" + this.a + "}"
|
|
}, e.prototype.getClassName = function() {
|
|
return "Color4"
|
|
}, e.prototype.getHashCode = function() {
|
|
var e = this.r || 0;
|
|
return e = 397 * (e = 397 * (e = 397 * e ^ (this.g || 0)) ^ (this.b || 0)) ^ (this.a || 0)
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.r, this.g, this.b, this.a)
|
|
}, e.prototype.copyFrom = function(e) {
|
|
return this.r = e.r, this.g = e.g, this.b = e.b, this.a = e.a, this
|
|
}, e.prototype.copyFromFloats = function(e, t, i, n) {
|
|
return this.r = e, this.g = t, this.b = i, this.a = n, this
|
|
}, e.prototype.set = function(e, t, i, n) {
|
|
return this.copyFromFloats(e, t, i, n)
|
|
}, e.prototype.toHexString = function() {
|
|
var e = 255 * this.r | 0,
|
|
t = 255 * this.g | 0,
|
|
i = 255 * this.b | 0,
|
|
n = 255 * this.a | 0;
|
|
return "#" + o.a.ToHex(e) + o.a.ToHex(t) + o.a.ToHex(i) + o.a.ToHex(n)
|
|
}, e.prototype.toLinearSpace = function() {
|
|
var t = new e;
|
|
return this.toLinearSpaceToRef(t), t
|
|
}, e.prototype.toLinearSpaceToRef = function(e) {
|
|
return e.r = Math.pow(this.r, a), e.g = Math.pow(this.g, a), e.b = Math.pow(this.b, a), e.a = this.a, this
|
|
}, e.prototype.toGammaSpace = function() {
|
|
var t = new e;
|
|
return this.toGammaSpaceToRef(t), t
|
|
}, e.prototype.toGammaSpaceToRef = function(e) {
|
|
return e.r = Math.pow(this.r, s), e.g = Math.pow(this.g, s), e.b = Math.pow(this.b, s), e.a = this.a, this
|
|
}, e.FromHexString = function(t) {
|
|
if ("#" !== t.substring(0, 1) || 9 !== t.length) return new e(0, 0, 0, 0);
|
|
var i = parseInt(t.substring(1, 3), 16),
|
|
n = parseInt(t.substring(3, 5), 16),
|
|
r = parseInt(t.substring(5, 7), 16),
|
|
o = parseInt(t.substring(7, 9), 16);
|
|
return e.FromInts(i, n, r, o)
|
|
}, e.Lerp = function(t, i, n) {
|
|
var r = new e(0, 0, 0, 0);
|
|
return e.LerpToRef(t, i, n, r), r
|
|
}, e.LerpToRef = function(e, t, i, n) {
|
|
n.r = e.r + (t.r - e.r) * i, n.g = e.g + (t.g - e.g) * i, n.b = e.b + (t.b - e.b) * i, n.a = e.a + (t.a - e.a) * i
|
|
}, e.FromColor3 = function(t, i) {
|
|
return void 0 === i && (i = 1), new e(t.r, t.g, t.b, i)
|
|
}, e.FromArray = function(t, i) {
|
|
return void 0 === i && (i = 0), new e(t[i], t[i + 1], t[i + 2], t[i + 3])
|
|
}, e.FromInts = function(t, i, n, r) {
|
|
return new e(t / 255, i / 255, n / 255, r / 255)
|
|
}, e.CheckColors4 = function(e, t) {
|
|
if (e.length === 3 * t) {
|
|
for (var i = [], n = 0; n < e.length; n += 3) {
|
|
var r = n / 3 * 4;
|
|
i[r] = e[n], i[r + 1] = e[n + 1], i[r + 2] = e[n + 2], i[r + 3] = 1
|
|
}
|
|
return i
|
|
}
|
|
return e
|
|
}, e
|
|
}(),
|
|
h = function() {
|
|
function e(e, t) {
|
|
void 0 === e && (e = 0), void 0 === t && (t = 0), this.x = e, this.y = t
|
|
}
|
|
return e.prototype.toString = function() {
|
|
return "{X: " + this.x + " Y:" + this.y + "}"
|
|
}, e.prototype.getClassName = function() {
|
|
return "Vector2"
|
|
}, e.prototype.getHashCode = function() {
|
|
var e = this.x || 0;
|
|
return e = 397 * e ^ (this.y || 0)
|
|
}, e.prototype.toArray = function(e, t) {
|
|
return void 0 === t && (t = 0), e[t] = this.x, e[t + 1] = this.y, this
|
|
}, e.prototype.asArray = function() {
|
|
var e = new Array;
|
|
return this.toArray(e, 0), e
|
|
}, e.prototype.copyFrom = function(e) {
|
|
return this.x = e.x, this.y = e.y, this
|
|
}, e.prototype.copyFromFloats = function(e, t) {
|
|
return this.x = e, this.y = t, this
|
|
}, e.prototype.set = function(e, t) {
|
|
return this.copyFromFloats(e, t)
|
|
}, e.prototype.add = function(t) {
|
|
return new e(this.x + t.x, this.y + t.y)
|
|
}, e.prototype.addToRef = function(e, t) {
|
|
return t.x = this.x + e.x, t.y = this.y + e.y, this
|
|
}, e.prototype.addInPlace = function(e) {
|
|
return this.x += e.x, this.y += e.y, this
|
|
}, e.prototype.addVector3 = function(t) {
|
|
return new e(this.x + t.x, this.y + t.y)
|
|
}, e.prototype.subtract = function(t) {
|
|
return new e(this.x - t.x, this.y - t.y)
|
|
}, e.prototype.subtractToRef = function(e, t) {
|
|
return t.x = this.x - e.x, t.y = this.y - e.y, this
|
|
}, e.prototype.subtractInPlace = function(e) {
|
|
return this.x -= e.x, this.y -= e.y, this
|
|
}, e.prototype.multiplyInPlace = function(e) {
|
|
return this.x *= e.x, this.y *= e.y, this
|
|
}, e.prototype.multiply = function(t) {
|
|
return new e(this.x * t.x, this.y * t.y)
|
|
}, e.prototype.multiplyToRef = function(e, t) {
|
|
return t.x = this.x * e.x, t.y = this.y * e.y, this
|
|
}, e.prototype.multiplyByFloats = function(t, i) {
|
|
return new e(this.x * t, this.y * i)
|
|
}, e.prototype.divide = function(t) {
|
|
return new e(this.x / t.x, this.y / t.y)
|
|
}, e.prototype.divideToRef = function(e, t) {
|
|
return t.x = this.x / e.x, t.y = this.y / e.y, this
|
|
}, e.prototype.divideInPlace = function(e) {
|
|
return this.divideToRef(e, this)
|
|
}, e.prototype.negate = function() {
|
|
return new e(-this.x, -this.y)
|
|
}, e.prototype.scaleInPlace = function(e) {
|
|
return this.x *= e, this.y *= e, this
|
|
}, e.prototype.scale = function(t) {
|
|
var i = new e(0, 0);
|
|
return this.scaleToRef(t, i), i
|
|
}, e.prototype.scaleToRef = function(e, t) {
|
|
return t.x = this.x * e, t.y = this.y * e, this
|
|
}, e.prototype.scaleAndAddToRef = function(e, t) {
|
|
return t.x += this.x * e, t.y += this.y * e, this
|
|
}, e.prototype.equals = function(e) {
|
|
return e && this.x === e.x && this.y === e.y
|
|
}, e.prototype.equalsWithEpsilon = function(e, t) {
|
|
return void 0 === t && (t = c), e && o.a.WithinEpsilon(this.x, e.x, t) && o.a.WithinEpsilon(this.y, e.y, t)
|
|
}, e.prototype.floor = function() {
|
|
return new e(Math.floor(this.x), Math.floor(this.y))
|
|
}, e.prototype.fract = function() {
|
|
return new e(this.x - Math.floor(this.x), this.y - Math.floor(this.y))
|
|
}, e.prototype.length = function() {
|
|
return Math.sqrt(this.x * this.x + this.y * this.y)
|
|
}, e.prototype.lengthSquared = function() {
|
|
return this.x * this.x + this.y * this.y
|
|
}, e.prototype.normalize = function() {
|
|
var e = this.length();
|
|
if (0 === e) return this;
|
|
var t = 1 / e;
|
|
return this.x *= t, this.y *= t, this
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.x, this.y)
|
|
}, e.Zero = function() {
|
|
return new e(0, 0)
|
|
}, e.One = function() {
|
|
return new e(1, 1)
|
|
}, e.FromArray = function(t, i) {
|
|
return void 0 === i && (i = 0), new e(t[i], t[i + 1])
|
|
}, e.FromArrayToRef = function(e, t, i) {
|
|
i.x = e[t], i.y = e[t + 1]
|
|
}, e.CatmullRom = function(t, i, n, r, o) {
|
|
var s = o * o,
|
|
a = o * s;
|
|
return new e(.5 * (2 * i.x + (-t.x + n.x) * o + (2 * t.x - 5 * i.x + 4 * n.x - r.x) * s + (-t.x + 3 * i.x - 3 * n.x + r.x) * a), .5 * (2 * i.y + (-t.y + n.y) * o + (2 * t.y - 5 * i.y + 4 * n.y - r.y) * s + (-t.y + 3 * i.y - 3 * n.y + r.y) * a))
|
|
}, e.Clamp = function(t, i, n) {
|
|
var r = t.x;
|
|
r = (r = r > n.x ? n.x : r) < i.x ? i.x : r;
|
|
var o = t.y;
|
|
return new e(r, o = (o = o > n.y ? n.y : o) < i.y ? i.y : o)
|
|
}, e.Hermite = function(t, i, n, r, o) {
|
|
var s = o * o,
|
|
a = o * s,
|
|
c = 2 * a - 3 * s + 1,
|
|
l = -2 * a + 3 * s,
|
|
u = a - 2 * s + o,
|
|
h = a - s;
|
|
return new e(t.x * c + n.x * l + i.x * u + r.x * h, t.y * c + n.y * l + i.y * u + r.y * h)
|
|
}, e.Lerp = function(t, i, n) {
|
|
return new e(t.x + (i.x - t.x) * n, t.y + (i.y - t.y) * n)
|
|
}, e.Dot = function(e, t) {
|
|
return e.x * t.x + e.y * t.y
|
|
}, e.Normalize = function(e) {
|
|
var t = e.clone();
|
|
return t.normalize(), t
|
|
}, e.Minimize = function(t, i) {
|
|
return new e(t.x < i.x ? t.x : i.x, t.y < i.y ? t.y : i.y)
|
|
}, e.Maximize = function(t, i) {
|
|
return new e(t.x > i.x ? t.x : i.x, t.y > i.y ? t.y : i.y)
|
|
}, e.Transform = function(t, i) {
|
|
var n = e.Zero();
|
|
return e.TransformToRef(t, i, n), n
|
|
}, e.TransformToRef = function(e, t, i) {
|
|
var n = t.m,
|
|
r = e.x * n[0] + e.y * n[4] + n[12],
|
|
o = e.x * n[1] + e.y * n[5] + n[13];
|
|
i.x = r, i.y = o
|
|
}, e.PointInTriangle = function(e, t, i, n) {
|
|
var r = .5 * (-i.y * n.x + t.y * (-i.x + n.x) + t.x * (i.y - n.y) + i.x * n.y),
|
|
o = r < 0 ? -1 : 1,
|
|
s = (t.y * n.x - t.x * n.y + (n.y - t.y) * e.x + (t.x - n.x) * e.y) * o,
|
|
a = (t.x * i.y - t.y * i.x + (t.y - i.y) * e.x + (i.x - t.x) * e.y) * o;
|
|
return s > 0 && a > 0 && s + a < 2 * r * o
|
|
}, e.Distance = function(t, i) {
|
|
return Math.sqrt(e.DistanceSquared(t, i))
|
|
}, e.DistanceSquared = function(e, t) {
|
|
var i = e.x - t.x,
|
|
n = e.y - t.y;
|
|
return i * i + n * n
|
|
}, e.Center = function(e, t) {
|
|
var i = e.add(t);
|
|
return i.scaleInPlace(.5), i
|
|
}, e.DistanceOfPointFromSegment = function(t, i, n) {
|
|
var r = e.DistanceSquared(i, n);
|
|
if (0 === r) return e.Distance(t, i);
|
|
var o = n.subtract(i),
|
|
s = Math.max(0, Math.min(1, e.Dot(t.subtract(i), o) / r)),
|
|
a = i.add(o.multiplyByFloats(s, s));
|
|
return e.Distance(t, a)
|
|
}, e
|
|
}(),
|
|
d = function() {
|
|
function e(e, t, i) {
|
|
void 0 === e && (e = 0), void 0 === t && (t = 0), void 0 === i && (i = 0), this.x = e, this.y = t, this.z = i
|
|
}
|
|
return e.prototype.toString = function() {
|
|
return "{X: " + this.x + " Y:" + this.y + " Z:" + this.z + "}"
|
|
}, e.prototype.getClassName = function() {
|
|
return "Vector3"
|
|
}, e.prototype.getHashCode = function() {
|
|
var e = this.x || 0;
|
|
return e = 397 * (e = 397 * e ^ (this.y || 0)) ^ (this.z || 0)
|
|
}, e.prototype.asArray = function() {
|
|
var e = [];
|
|
return this.toArray(e, 0), e
|
|
}, e.prototype.toArray = function(e, t) {
|
|
return void 0 === t && (t = 0), e[t] = this.x, e[t + 1] = this.y, e[t + 2] = this.z, this
|
|
}, e.prototype.toQuaternion = function() {
|
|
return _.RotationYawPitchRoll(this.y, this.x, this.z)
|
|
}, e.prototype.addInPlace = function(e) {
|
|
return this.addInPlaceFromFloats(e.x, e.y, e.z)
|
|
}, e.prototype.addInPlaceFromFloats = function(e, t, i) {
|
|
return this.x += e, this.y += t, this.z += i, this
|
|
}, e.prototype.add = function(t) {
|
|
return new e(this.x + t.x, this.y + t.y, this.z + t.z)
|
|
}, e.prototype.addToRef = function(e, t) {
|
|
return t.copyFromFloats(this.x + e.x, this.y + e.y, this.z + e.z)
|
|
}, e.prototype.subtractInPlace = function(e) {
|
|
return this.x -= e.x, this.y -= e.y, this.z -= e.z, this
|
|
}, e.prototype.subtract = function(t) {
|
|
return new e(this.x - t.x, this.y - t.y, this.z - t.z)
|
|
}, e.prototype.subtractToRef = function(e, t) {
|
|
return this.subtractFromFloatsToRef(e.x, e.y, e.z, t)
|
|
}, e.prototype.subtractFromFloats = function(t, i, n) {
|
|
return new e(this.x - t, this.y - i, this.z - n)
|
|
}, e.prototype.subtractFromFloatsToRef = function(e, t, i, n) {
|
|
return n.copyFromFloats(this.x - e, this.y - t, this.z - i)
|
|
}, e.prototype.negate = function() {
|
|
return new e(-this.x, -this.y, -this.z)
|
|
}, e.prototype.scaleInPlace = function(e) {
|
|
return this.x *= e, this.y *= e, this.z *= e, this
|
|
}, e.prototype.scale = function(t) {
|
|
return new e(this.x * t, this.y * t, this.z * t)
|
|
}, e.prototype.scaleToRef = function(e, t) {
|
|
return t.copyFromFloats(this.x * e, this.y * e, this.z * e)
|
|
}, e.prototype.scaleAndAddToRef = function(e, t) {
|
|
return t.addInPlaceFromFloats(this.x * e, this.y * e, this.z * e)
|
|
}, e.prototype.equals = function(e) {
|
|
return e && this.x === e.x && this.y === e.y && this.z === e.z
|
|
}, e.prototype.equalsWithEpsilon = function(e, t) {
|
|
return void 0 === t && (t = c), e && o.a.WithinEpsilon(this.x, e.x, t) && o.a.WithinEpsilon(this.y, e.y, t) && o.a.WithinEpsilon(this.z, e.z, t)
|
|
}, e.prototype.equalsToFloats = function(e, t, i) {
|
|
return this.x === e && this.y === t && this.z === i
|
|
}, e.prototype.multiplyInPlace = function(e) {
|
|
return this.x *= e.x, this.y *= e.y, this.z *= e.z, this
|
|
}, e.prototype.multiply = function(e) {
|
|
return this.multiplyByFloats(e.x, e.y, e.z)
|
|
}, e.prototype.multiplyToRef = function(e, t) {
|
|
return t.copyFromFloats(this.x * e.x, this.y * e.y, this.z * e.z)
|
|
}, e.prototype.multiplyByFloats = function(t, i, n) {
|
|
return new e(this.x * t, this.y * i, this.z * n)
|
|
}, e.prototype.divide = function(t) {
|
|
return new e(this.x / t.x, this.y / t.y, this.z / t.z)
|
|
}, e.prototype.divideToRef = function(e, t) {
|
|
return t.copyFromFloats(this.x / e.x, this.y / e.y, this.z / e.z)
|
|
}, e.prototype.divideInPlace = function(e) {
|
|
return this.divideToRef(e, this)
|
|
}, e.prototype.minimizeInPlace = function(e) {
|
|
return this.minimizeInPlaceFromFloats(e.x, e.y, e.z)
|
|
}, e.prototype.maximizeInPlace = function(e) {
|
|
return this.maximizeInPlaceFromFloats(e.x, e.y, e.z)
|
|
}, e.prototype.minimizeInPlaceFromFloats = function(e, t, i) {
|
|
return e < this.x && (this.x = e), t < this.y && (this.y = t), i < this.z && (this.z = i), this
|
|
}, e.prototype.maximizeInPlaceFromFloats = function(e, t, i) {
|
|
return e > this.x && (this.x = e), t > this.y && (this.y = t), i > this.z && (this.z = i), this
|
|
}, e.prototype.isNonUniformWithinEpsilon = function(e) {
|
|
var t = Math.abs(this.x),
|
|
i = Math.abs(this.y);
|
|
if (!o.a.WithinEpsilon(t, i, e)) return !0;
|
|
var n = Math.abs(this.z);
|
|
return !o.a.WithinEpsilon(t, n, e) || !o.a.WithinEpsilon(i, n, e)
|
|
}, Object.defineProperty(e.prototype, "isNonUniform", {
|
|
get: function() {
|
|
var e = Math.abs(this.x),
|
|
t = Math.abs(this.y);
|
|
if (e !== t) return !0;
|
|
var i = Math.abs(this.z);
|
|
return e !== i || t !== i
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.floor = function() {
|
|
return new e(Math.floor(this.x), Math.floor(this.y), Math.floor(this.z))
|
|
}, e.prototype.fract = function() {
|
|
return new e(this.x - Math.floor(this.x), this.y - Math.floor(this.y), this.z - Math.floor(this.z))
|
|
}, e.prototype.length = function() {
|
|
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z)
|
|
}, e.prototype.lengthSquared = function() {
|
|
return this.x * this.x + this.y * this.y + this.z * this.z
|
|
}, e.prototype.normalize = function() {
|
|
return this.normalizeFromLength(this.length())
|
|
}, e.prototype.reorderInPlace = function(e) {
|
|
var t = this;
|
|
return "xyz" === (e = e.toLowerCase()) ? this : (I.Vector3[0].copyFrom(this), ["x", "y", "z"].forEach(function(i, n) {
|
|
t[i] = I.Vector3[0][e[n]]
|
|
}), this)
|
|
}, e.prototype.rotateByQuaternionToRef = function(t, i) {
|
|
return t.toRotationMatrix(I.Matrix[0]), e.TransformCoordinatesToRef(this, I.Matrix[0], i), i
|
|
}, e.prototype.rotateByQuaternionAroundPointToRef = function(e, t, i) {
|
|
return this.subtractToRef(t, I.Vector3[0]), I.Vector3[0].rotateByQuaternionToRef(e, I.Vector3[0]), t.addToRef(I.Vector3[0], i), i
|
|
}, e.prototype.normalizeFromLength = function(e) {
|
|
return 0 === e || 1 === e ? this : this.scaleInPlace(1 / e)
|
|
}, e.prototype.normalizeToNew = function() {
|
|
var t = new e(0, 0, 0);
|
|
return this.normalizeToRef(t), t
|
|
}, e.prototype.normalizeToRef = function(e) {
|
|
var t = this.length();
|
|
return 0 === t || 1 === t ? e.copyFromFloats(this.x, this.y, this.z) : this.scaleToRef(1 / t, e)
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.x, this.y, this.z)
|
|
}, e.prototype.copyFrom = function(e) {
|
|
return this.copyFromFloats(e.x, e.y, e.z)
|
|
}, e.prototype.copyFromFloats = function(e, t, i) {
|
|
return this.x = e, this.y = t, this.z = i, this
|
|
}, e.prototype.set = function(e, t, i) {
|
|
return this.copyFromFloats(e, t, i)
|
|
}, e.prototype.setAll = function(e) {
|
|
return this.x = this.y = this.z = e, this
|
|
}, e.GetClipFactor = function(t, i, n, r) {
|
|
var o = e.Dot(t, n) - r;
|
|
return o / (o - (e.Dot(i, n) - r))
|
|
}, e.GetAngleBetweenVectors = function(t, i, n) {
|
|
var r = t.normalizeToRef(I.Vector3[1]),
|
|
o = i.normalizeToRef(I.Vector3[2]),
|
|
s = e.Dot(r, o),
|
|
a = I.Vector3[3];
|
|
return e.CrossToRef(r, o, a), e.Dot(a, n) > 0 ? Math.acos(s) : -Math.acos(s)
|
|
}, e.FromArray = function(t, i) {
|
|
return void 0 === i && (i = 0), new e(t[i], t[i + 1], t[i + 2])
|
|
}, e.FromFloatArray = function(t, i) {
|
|
return e.FromArray(t, i)
|
|
}, e.FromArrayToRef = function(e, t, i) {
|
|
i.x = e[t], i.y = e[t + 1], i.z = e[t + 2]
|
|
}, e.FromFloatArrayToRef = function(t, i, n) {
|
|
return e.FromArrayToRef(t, i, n)
|
|
}, e.FromFloatsToRef = function(e, t, i, n) {
|
|
n.copyFromFloats(e, t, i)
|
|
}, e.Zero = function() {
|
|
return new e(0, 0, 0)
|
|
}, e.One = function() {
|
|
return new e(1, 1, 1)
|
|
}, e.Up = function() {
|
|
return new e(0, 1, 0)
|
|
}, Object.defineProperty(e, "UpReadOnly", {
|
|
get: function() {
|
|
return e._UpReadOnly
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.Down = function() {
|
|
return new e(0, -1, 0)
|
|
}, e.Forward = function() {
|
|
return new e(0, 0, 1)
|
|
}, e.Backward = function() {
|
|
return new e(0, 0, -1)
|
|
}, e.Right = function() {
|
|
return new e(1, 0, 0)
|
|
}, e.Left = function() {
|
|
return new e(-1, 0, 0)
|
|
}, e.TransformCoordinates = function(t, i) {
|
|
var n = e.Zero();
|
|
return e.TransformCoordinatesToRef(t, i, n), n
|
|
}, e.TransformCoordinatesToRef = function(t, i, n) {
|
|
e.TransformCoordinatesFromFloatsToRef(t.x, t.y, t.z, i, n)
|
|
}, e.TransformCoordinatesFromFloatsToRef = function(e, t, i, n, r) {
|
|
var o = n.m,
|
|
s = e * o[0] + t * o[4] + i * o[8] + o[12],
|
|
a = e * o[1] + t * o[5] + i * o[9] + o[13],
|
|
c = e * o[2] + t * o[6] + i * o[10] + o[14],
|
|
l = 1 / (e * o[3] + t * o[7] + i * o[11] + o[15]);
|
|
r.x = s * l, r.y = a * l, r.z = c * l
|
|
}, e.TransformNormal = function(t, i) {
|
|
var n = e.Zero();
|
|
return e.TransformNormalToRef(t, i, n), n
|
|
}, e.TransformNormalToRef = function(e, t, i) {
|
|
this.TransformNormalFromFloatsToRef(e.x, e.y, e.z, t, i)
|
|
}, e.TransformNormalFromFloatsToRef = function(e, t, i, n, r) {
|
|
var o = n.m;
|
|
r.x = e * o[0] + t * o[4] + i * o[8], r.y = e * o[1] + t * o[5] + i * o[9], r.z = e * o[2] + t * o[6] + i * o[10]
|
|
}, e.CatmullRom = function(t, i, n, r, o) {
|
|
var s = o * o,
|
|
a = o * s;
|
|
return new e(.5 * (2 * i.x + (-t.x + n.x) * o + (2 * t.x - 5 * i.x + 4 * n.x - r.x) * s + (-t.x + 3 * i.x - 3 * n.x + r.x) * a), .5 * (2 * i.y + (-t.y + n.y) * o + (2 * t.y - 5 * i.y + 4 * n.y - r.y) * s + (-t.y + 3 * i.y - 3 * n.y + r.y) * a), .5 * (2 * i.z + (-t.z + n.z) * o + (2 * t.z - 5 * i.z + 4 * n.z - r.z) * s + (-t.z + 3 * i.z - 3 * n.z + r.z) * a))
|
|
}, e.Clamp = function(t, i, n) {
|
|
var r = new e;
|
|
return e.ClampToRef(t, i, n, r), r
|
|
}, e.ClampToRef = function(e, t, i, n) {
|
|
var r = e.x;
|
|
r = (r = r > i.x ? i.x : r) < t.x ? t.x : r;
|
|
var o = e.y;
|
|
o = (o = o > i.y ? i.y : o) < t.y ? t.y : o;
|
|
var s = e.z;
|
|
s = (s = s > i.z ? i.z : s) < t.z ? t.z : s, n.copyFromFloats(r, o, s)
|
|
}, e.Hermite = function(t, i, n, r, o) {
|
|
var s = o * o,
|
|
a = o * s,
|
|
c = 2 * a - 3 * s + 1,
|
|
l = -2 * a + 3 * s,
|
|
u = a - 2 * s + o,
|
|
h = a - s;
|
|
return new e(t.x * c + n.x * l + i.x * u + r.x * h, t.y * c + n.y * l + i.y * u + r.y * h, t.z * c + n.z * l + i.z * u + r.z * h)
|
|
}, e.Lerp = function(t, i, n) {
|
|
var r = new e(0, 0, 0);
|
|
return e.LerpToRef(t, i, n, r), r
|
|
}, e.LerpToRef = function(e, t, i, n) {
|
|
n.x = e.x + (t.x - e.x) * i, n.y = e.y + (t.y - e.y) * i, n.z = e.z + (t.z - e.z) * i
|
|
}, e.Dot = function(e, t) {
|
|
return e.x * t.x + e.y * t.y + e.z * t.z
|
|
}, e.Cross = function(t, i) {
|
|
var n = e.Zero();
|
|
return e.CrossToRef(t, i, n), n
|
|
}, e.CrossToRef = function(e, t, i) {
|
|
var n = e.y * t.z - e.z * t.y,
|
|
r = e.z * t.x - e.x * t.z,
|
|
o = e.x * t.y - e.y * t.x;
|
|
i.copyFromFloats(n, r, o)
|
|
}, e.Normalize = function(t) {
|
|
var i = e.Zero();
|
|
return e.NormalizeToRef(t, i), i
|
|
}, e.NormalizeToRef = function(e, t) {
|
|
e.normalizeToRef(t)
|
|
}, e.Project = function(t, i, n, r) {
|
|
var o = r.width,
|
|
s = r.height,
|
|
a = r.x,
|
|
c = r.y,
|
|
l = I.Matrix[1];
|
|
g.FromValuesToRef(o / 2, 0, 0, 0, 0, -s / 2, 0, 0, 0, 0, .5, 0, a + o / 2, s / 2 + c, .5, 1, l);
|
|
var u = I.Matrix[0];
|
|
return i.multiplyToRef(n, u), u.multiplyToRef(l, u), e.TransformCoordinates(t, u)
|
|
}, e._UnprojectFromInvertedMatrixToRef = function(t, i, n) {
|
|
e.TransformCoordinatesToRef(t, i, n);
|
|
var r = i.m,
|
|
s = t.x * r[3] + t.y * r[7] + t.z * r[11] + r[15];
|
|
o.a.WithinEpsilon(s, 1) && n.scaleInPlace(1 / s)
|
|
}, e.UnprojectFromTransform = function(t, i, n, r, o) {
|
|
var s = I.Matrix[0];
|
|
r.multiplyToRef(o, s), s.invert(), t.x = t.x / i * 2 - 1, t.y = -(t.y / n * 2 - 1);
|
|
var a = new e;
|
|
return e._UnprojectFromInvertedMatrixToRef(t, s, a), a
|
|
}, e.Unproject = function(t, i, n, r, o, s) {
|
|
var a = e.Zero();
|
|
return e.UnprojectToRef(t, i, n, r, o, s, a), a
|
|
}, e.UnprojectToRef = function(t, i, n, r, o, s, a) {
|
|
e.UnprojectFloatsToRef(t.x, t.y, t.z, i, n, r, o, s, a)
|
|
}, e.UnprojectFloatsToRef = function(t, i, n, r, o, s, a, c, l) {
|
|
var u = I.Matrix[0];
|
|
s.multiplyToRef(a, u), u.multiplyToRef(c, u), u.invert();
|
|
var h = I.Vector3[0];
|
|
h.x = t / r * 2 - 1, h.y = -(i / o * 2 - 1), h.z = 2 * n - 1, e._UnprojectFromInvertedMatrixToRef(h, u, l)
|
|
}, e.Minimize = function(e, t) {
|
|
var i = e.clone();
|
|
return i.minimizeInPlace(t), i
|
|
}, e.Maximize = function(e, t) {
|
|
var i = e.clone();
|
|
return i.maximizeInPlace(t), i
|
|
}, e.Distance = function(t, i) {
|
|
return Math.sqrt(e.DistanceSquared(t, i))
|
|
}, e.DistanceSquared = function(e, t) {
|
|
var i = e.x - t.x,
|
|
n = e.y - t.y,
|
|
r = e.z - t.z;
|
|
return i * i + n * n + r * r
|
|
}, e.Center = function(e, t) {
|
|
var i = e.add(t);
|
|
return i.scaleInPlace(.5), i
|
|
}, e.RotationFromAxis = function(t, i, n) {
|
|
var r = e.Zero();
|
|
return e.RotationFromAxisToRef(t, i, n, r), r
|
|
}, e.RotationFromAxisToRef = function(e, t, i, n) {
|
|
var r = I.Quaternion[0];
|
|
_.RotationQuaternionFromAxisToRef(e, t, i, r), r.toEulerAnglesToRef(n)
|
|
}, e._UpReadOnly = e.Up(), e
|
|
}(),
|
|
f = function() {
|
|
function e(e, t, i, n) {
|
|
this.x = e, this.y = t, this.z = i, this.w = n
|
|
}
|
|
return e.prototype.toString = function() {
|
|
return "{X: " + this.x + " Y:" + this.y + " Z:" + this.z + " W:" + this.w + "}"
|
|
}, e.prototype.getClassName = function() {
|
|
return "Vector4"
|
|
}, e.prototype.getHashCode = function() {
|
|
var e = this.x || 0;
|
|
return e = 397 * (e = 397 * (e = 397 * e ^ (this.y || 0)) ^ (this.z || 0)) ^ (this.w || 0)
|
|
}, e.prototype.asArray = function() {
|
|
var e = new Array;
|
|
return this.toArray(e, 0), e
|
|
}, e.prototype.toArray = function(e, t) {
|
|
return void 0 === t && (t = 0), e[t] = this.x, e[t + 1] = this.y, e[t + 2] = this.z, e[t + 3] = this.w, this
|
|
}, e.prototype.addInPlace = function(e) {
|
|
return this.x += e.x, this.y += e.y, this.z += e.z, this.w += e.w, this
|
|
}, e.prototype.add = function(t) {
|
|
return new e(this.x + t.x, this.y + t.y, this.z + t.z, this.w + t.w)
|
|
}, e.prototype.addToRef = function(e, t) {
|
|
return t.x = this.x + e.x, t.y = this.y + e.y, t.z = this.z + e.z, t.w = this.w + e.w, this
|
|
}, e.prototype.subtractInPlace = function(e) {
|
|
return this.x -= e.x, this.y -= e.y, this.z -= e.z, this.w -= e.w, this
|
|
}, e.prototype.subtract = function(t) {
|
|
return new e(this.x - t.x, this.y - t.y, this.z - t.z, this.w - t.w)
|
|
}, e.prototype.subtractToRef = function(e, t) {
|
|
return t.x = this.x - e.x, t.y = this.y - e.y, t.z = this.z - e.z, t.w = this.w - e.w, this
|
|
}, e.prototype.subtractFromFloats = function(t, i, n, r) {
|
|
return new e(this.x - t, this.y - i, this.z - n, this.w - r)
|
|
}, e.prototype.subtractFromFloatsToRef = function(e, t, i, n, r) {
|
|
return r.x = this.x - e, r.y = this.y - t, r.z = this.z - i, r.w = this.w - n, this
|
|
}, e.prototype.negate = function() {
|
|
return new e(-this.x, -this.y, -this.z, -this.w)
|
|
}, e.prototype.scaleInPlace = function(e) {
|
|
return this.x *= e, this.y *= e, this.z *= e, this.w *= e, this
|
|
}, e.prototype.scale = function(t) {
|
|
return new e(this.x * t, this.y * t, this.z * t, this.w * t)
|
|
}, e.prototype.scaleToRef = function(e, t) {
|
|
return t.x = this.x * e, t.y = this.y * e, t.z = this.z * e, t.w = this.w * e, this
|
|
}, e.prototype.scaleAndAddToRef = function(e, t) {
|
|
return t.x += this.x * e, t.y += this.y * e, t.z += this.z * e, t.w += this.w * e, this
|
|
}, e.prototype.equals = function(e) {
|
|
return e && this.x === e.x && this.y === e.y && this.z === e.z && this.w === e.w
|
|
}, e.prototype.equalsWithEpsilon = function(e, t) {
|
|
return void 0 === t && (t = c), e && o.a.WithinEpsilon(this.x, e.x, t) && o.a.WithinEpsilon(this.y, e.y, t) && o.a.WithinEpsilon(this.z, e.z, t) && o.a.WithinEpsilon(this.w, e.w, t)
|
|
}, e.prototype.equalsToFloats = function(e, t, i, n) {
|
|
return this.x === e && this.y === t && this.z === i && this.w === n
|
|
}, e.prototype.multiplyInPlace = function(e) {
|
|
return this.x *= e.x, this.y *= e.y, this.z *= e.z, this.w *= e.w, this
|
|
}, e.prototype.multiply = function(t) {
|
|
return new e(this.x * t.x, this.y * t.y, this.z * t.z, this.w * t.w)
|
|
}, e.prototype.multiplyToRef = function(e, t) {
|
|
return t.x = this.x * e.x, t.y = this.y * e.y, t.z = this.z * e.z, t.w = this.w * e.w, this
|
|
}, e.prototype.multiplyByFloats = function(t, i, n, r) {
|
|
return new e(this.x * t, this.y * i, this.z * n, this.w * r)
|
|
}, e.prototype.divide = function(t) {
|
|
return new e(this.x / t.x, this.y / t.y, this.z / t.z, this.w / t.w)
|
|
}, e.prototype.divideToRef = function(e, t) {
|
|
return t.x = this.x / e.x, t.y = this.y / e.y, t.z = this.z / e.z, t.w = this.w / e.w, this
|
|
}, e.prototype.divideInPlace = function(e) {
|
|
return this.divideToRef(e, this)
|
|
}, e.prototype.minimizeInPlace = function(e) {
|
|
return e.x < this.x && (this.x = e.x), e.y < this.y && (this.y = e.y), e.z < this.z && (this.z = e.z), e.w < this.w && (this.w = e.w), this
|
|
}, e.prototype.maximizeInPlace = function(e) {
|
|
return e.x > this.x && (this.x = e.x), e.y > this.y && (this.y = e.y), e.z > this.z && (this.z = e.z), e.w > this.w && (this.w = e.w), this
|
|
}, e.prototype.floor = function() {
|
|
return new e(Math.floor(this.x), Math.floor(this.y), Math.floor(this.z), Math.floor(this.w))
|
|
}, e.prototype.fract = function() {
|
|
return new e(this.x - Math.floor(this.x), this.y - Math.floor(this.y), this.z - Math.floor(this.z), this.w - Math.floor(this.w))
|
|
}, e.prototype.length = function() {
|
|
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w)
|
|
}, e.prototype.lengthSquared = function() {
|
|
return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w
|
|
}, e.prototype.normalize = function() {
|
|
var e = this.length();
|
|
return 0 === e ? this : this.scaleInPlace(1 / e)
|
|
}, e.prototype.toVector3 = function() {
|
|
return new d(this.x, this.y, this.z)
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.x, this.y, this.z, this.w)
|
|
}, e.prototype.copyFrom = function(e) {
|
|
return this.x = e.x, this.y = e.y, this.z = e.z, this.w = e.w, this
|
|
}, e.prototype.copyFromFloats = function(e, t, i, n) {
|
|
return this.x = e, this.y = t, this.z = i, this.w = n, this
|
|
}, e.prototype.set = function(e, t, i, n) {
|
|
return this.copyFromFloats(e, t, i, n)
|
|
}, e.prototype.setAll = function(e) {
|
|
return this.x = this.y = this.z = this.w = e, this
|
|
}, e.FromArray = function(t, i) {
|
|
return i || (i = 0), new e(t[i], t[i + 1], t[i + 2], t[i + 3])
|
|
}, e.FromArrayToRef = function(e, t, i) {
|
|
i.x = e[t], i.y = e[t + 1], i.z = e[t + 2], i.w = e[t + 3]
|
|
}, e.FromFloatArrayToRef = function(t, i, n) {
|
|
e.FromArrayToRef(t, i, n)
|
|
}, e.FromFloatsToRef = function(e, t, i, n, r) {
|
|
r.x = e, r.y = t, r.z = i, r.w = n
|
|
}, e.Zero = function() {
|
|
return new e(0, 0, 0, 0)
|
|
}, e.One = function() {
|
|
return new e(1, 1, 1, 1)
|
|
}, e.Normalize = function(t) {
|
|
var i = e.Zero();
|
|
return e.NormalizeToRef(t, i), i
|
|
}, e.NormalizeToRef = function(e, t) {
|
|
t.copyFrom(e), t.normalize()
|
|
}, e.Minimize = function(e, t) {
|
|
var i = e.clone();
|
|
return i.minimizeInPlace(t), i
|
|
}, e.Maximize = function(e, t) {
|
|
var i = e.clone();
|
|
return i.maximizeInPlace(t), i
|
|
}, e.Distance = function(t, i) {
|
|
return Math.sqrt(e.DistanceSquared(t, i))
|
|
}, e.DistanceSquared = function(e, t) {
|
|
var i = e.x - t.x,
|
|
n = e.y - t.y,
|
|
r = e.z - t.z,
|
|
o = e.w - t.w;
|
|
return i * i + n * n + r * r + o * o
|
|
}, e.Center = function(e, t) {
|
|
var i = e.add(t);
|
|
return i.scaleInPlace(.5), i
|
|
}, e.TransformNormal = function(t, i) {
|
|
var n = e.Zero();
|
|
return e.TransformNormalToRef(t, i, n), n
|
|
}, e.TransformNormalToRef = function(e, t, i) {
|
|
var n = t.m,
|
|
r = e.x * n[0] + e.y * n[4] + e.z * n[8],
|
|
o = e.x * n[1] + e.y * n[5] + e.z * n[9],
|
|
s = e.x * n[2] + e.y * n[6] + e.z * n[10];
|
|
i.x = r, i.y = o, i.z = s, i.w = e.w
|
|
}, e.TransformNormalFromFloatsToRef = function(e, t, i, n, r, o) {
|
|
var s = r.m;
|
|
o.x = e * s[0] + t * s[4] + i * s[8], o.y = e * s[1] + t * s[5] + i * s[9], o.z = e * s[2] + t * s[6] + i * s[10], o.w = n
|
|
}, e.FromVector3 = function(t, i) {
|
|
return void 0 === i && (i = 0), new e(t.x, t.y, t.z, i)
|
|
}, e
|
|
}(),
|
|
p = function() {
|
|
function e(e, t) {
|
|
this.width = e, this.height = t
|
|
}
|
|
return e.prototype.toString = function() {
|
|
return "{W: " + this.width + ", H: " + this.height + "}"
|
|
}, e.prototype.getClassName = function() {
|
|
return "Size"
|
|
}, e.prototype.getHashCode = function() {
|
|
var e = this.width || 0;
|
|
return e = 397 * e ^ (this.height || 0)
|
|
}, e.prototype.copyFrom = function(e) {
|
|
this.width = e.width, this.height = e.height
|
|
}, e.prototype.copyFromFloats = function(e, t) {
|
|
return this.width = e, this.height = t, this
|
|
}, e.prototype.set = function(e, t) {
|
|
return this.copyFromFloats(e, t)
|
|
}, e.prototype.multiplyByFloats = function(t, i) {
|
|
return new e(this.width * t, this.height * i)
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.width, this.height)
|
|
}, e.prototype.equals = function(e) {
|
|
return !!e && (this.width === e.width && this.height === e.height)
|
|
}, Object.defineProperty(e.prototype, "surface", {
|
|
get: function() {
|
|
return this.width * this.height
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.Zero = function() {
|
|
return new e(0, 0)
|
|
}, e.prototype.add = function(t) {
|
|
return new e(this.width + t.width, this.height + t.height)
|
|
}, e.prototype.subtract = function(t) {
|
|
return new e(this.width - t.width, this.height - t.height)
|
|
}, e.Lerp = function(t, i, n) {
|
|
return new e(t.width + (i.width - t.width) * n, t.height + (i.height - t.height) * n)
|
|
}, e
|
|
}(),
|
|
_ = function() {
|
|
function e(e, t, i, n) {
|
|
void 0 === e && (e = 0), void 0 === t && (t = 0), void 0 === i && (i = 0), void 0 === n && (n = 1), this.x = e, this.y = t, this.z = i, this.w = n
|
|
}
|
|
return e.prototype.toString = function() {
|
|
return "{X: " + this.x + " Y:" + this.y + " Z:" + this.z + " W:" + this.w + "}"
|
|
}, e.prototype.getClassName = function() {
|
|
return "Quaternion"
|
|
}, e.prototype.getHashCode = function() {
|
|
var e = this.x || 0;
|
|
return e = 397 * (e = 397 * (e = 397 * e ^ (this.y || 0)) ^ (this.z || 0)) ^ (this.w || 0)
|
|
}, e.prototype.asArray = function() {
|
|
return [this.x, this.y, this.z, this.w]
|
|
}, e.prototype.equals = function(e) {
|
|
return e && this.x === e.x && this.y === e.y && this.z === e.z && this.w === e.w
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.x, this.y, this.z, this.w)
|
|
}, e.prototype.copyFrom = function(e) {
|
|
return this.x = e.x, this.y = e.y, this.z = e.z, this.w = e.w, this
|
|
}, e.prototype.copyFromFloats = function(e, t, i, n) {
|
|
return this.x = e, this.y = t, this.z = i, this.w = n, this
|
|
}, e.prototype.set = function(e, t, i, n) {
|
|
return this.copyFromFloats(e, t, i, n)
|
|
}, e.prototype.add = function(t) {
|
|
return new e(this.x + t.x, this.y + t.y, this.z + t.z, this.w + t.w)
|
|
}, e.prototype.addInPlace = function(e) {
|
|
return this.x += e.x, this.y += e.y, this.z += e.z, this.w += e.w, this
|
|
}, e.prototype.subtract = function(t) {
|
|
return new e(this.x - t.x, this.y - t.y, this.z - t.z, this.w - t.w)
|
|
}, e.prototype.scale = function(t) {
|
|
return new e(this.x * t, this.y * t, this.z * t, this.w * t)
|
|
}, e.prototype.scaleToRef = function(e, t) {
|
|
return t.x = this.x * e, t.y = this.y * e, t.z = this.z * e, t.w = this.w * e, this
|
|
}, e.prototype.scaleInPlace = function(e) {
|
|
return this.x *= e, this.y *= e, this.z *= e, this.w *= e, this
|
|
}, e.prototype.scaleAndAddToRef = function(e, t) {
|
|
return t.x += this.x * e, t.y += this.y * e, t.z += this.z * e, t.w += this.w * e, this
|
|
}, e.prototype.multiply = function(t) {
|
|
var i = new e(0, 0, 0, 1);
|
|
return this.multiplyToRef(t, i), i
|
|
}, e.prototype.multiplyToRef = function(e, t) {
|
|
var i = this.x * e.w + this.y * e.z - this.z * e.y + this.w * e.x,
|
|
n = -this.x * e.z + this.y * e.w + this.z * e.x + this.w * e.y,
|
|
r = this.x * e.y - this.y * e.x + this.z * e.w + this.w * e.z,
|
|
o = -this.x * e.x - this.y * e.y - this.z * e.z + this.w * e.w;
|
|
return t.copyFromFloats(i, n, r, o), this
|
|
}, e.prototype.multiplyInPlace = function(e) {
|
|
return this.multiplyToRef(e, this), this
|
|
}, e.prototype.conjugateToRef = function(e) {
|
|
return e.copyFromFloats(-this.x, -this.y, -this.z, this.w), this
|
|
}, e.prototype.conjugateInPlace = function() {
|
|
return this.x *= -1, this.y *= -1, this.z *= -1, this
|
|
}, e.prototype.conjugate = function() {
|
|
return new e(-this.x, -this.y, -this.z, this.w)
|
|
}, e.prototype.length = function() {
|
|
return Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w)
|
|
}, e.prototype.normalize = function() {
|
|
var e = this.length();
|
|
if (0 === e) return this;
|
|
var t = 1 / e;
|
|
return this.x *= t, this.y *= t, this.z *= t, this.w *= t, this
|
|
}, e.prototype.toEulerAngles = function(e) {
|
|
void 0 === e && (e = "YZX");
|
|
var t = d.Zero();
|
|
return this.toEulerAnglesToRef(t), t
|
|
}, e.prototype.toEulerAnglesToRef = function(e) {
|
|
var t = this.z,
|
|
i = this.x,
|
|
n = this.y,
|
|
r = this.w,
|
|
o = r * r,
|
|
s = t * t,
|
|
a = i * i,
|
|
c = n * n,
|
|
l = n * t - i * r;
|
|
return l < -.4999999 ? (e.y = 2 * Math.atan2(n, r), e.x = Math.PI / 2, e.z = 0) : l > .4999999 ? (e.y = 2 * Math.atan2(n, r), e.x = -Math.PI / 2, e.z = 0) : (e.z = Math.atan2(2 * (i * n + t * r), -s - a + c + o), e.x = Math.asin(-2 * (t * n - i * r)), e.y = Math.atan2(2 * (t * i + n * r), s - a - c + o)), this
|
|
}, e.prototype.toRotationMatrix = function(e) {
|
|
return g.FromQuaternionToRef(this, e), this
|
|
}, e.prototype.fromRotationMatrix = function(t) {
|
|
return e.FromRotationMatrixToRef(t, this), this
|
|
}, e.FromRotationMatrix = function(t) {
|
|
var i = new e;
|
|
return e.FromRotationMatrixToRef(t, i), i
|
|
}, e.FromRotationMatrixToRef = function(e, t) {
|
|
var i, n = e.m,
|
|
r = n[0],
|
|
o = n[4],
|
|
s = n[8],
|
|
a = n[1],
|
|
c = n[5],
|
|
l = n[9],
|
|
u = n[2],
|
|
h = n[6],
|
|
d = n[10],
|
|
f = r + c + d;
|
|
f > 0 ? (i = .5 / Math.sqrt(f + 1), t.w = .25 / i, t.x = (h - l) * i, t.y = (s - u) * i, t.z = (a - o) * i) : r > c && r > d ? (i = 2 * Math.sqrt(1 + r - c - d), t.w = (h - l) / i, t.x = .25 * i, t.y = (o + a) / i, t.z = (s + u) / i) : c > d ? (i = 2 * Math.sqrt(1 + c - r - d), t.w = (s - u) / i, t.x = (o + a) / i, t.y = .25 * i, t.z = (l + h) / i) : (i = 2 * Math.sqrt(1 + d - r - c), t.w = (a - o) / i, t.x = (s + u) / i, t.y = (l + h) / i, t.z = .25 * i)
|
|
}, e.Dot = function(e, t) {
|
|
return e.x * t.x + e.y * t.y + e.z * t.z + e.w * t.w
|
|
}, e.AreClose = function(t, i) {
|
|
return e.Dot(t, i) >= 0
|
|
}, e.Zero = function() {
|
|
return new e(0, 0, 0, 0)
|
|
}, e.Inverse = function(t) {
|
|
return new e(-t.x, -t.y, -t.z, t.w)
|
|
}, e.InverseToRef = function(e, t) {
|
|
return t.set(-e.x, -e.y, -e.z, e.w), t
|
|
}, e.Identity = function() {
|
|
return new e(0, 0, 0, 1)
|
|
}, e.IsIdentity = function(e) {
|
|
return e && 0 === e.x && 0 === e.y && 0 === e.z && 1 === e.w
|
|
}, e.RotationAxis = function(t, i) {
|
|
return e.RotationAxisToRef(t, i, new e)
|
|
}, e.RotationAxisToRef = function(e, t, i) {
|
|
var n = Math.sin(t / 2);
|
|
return e.normalize(), i.w = Math.cos(t / 2), i.x = e.x * n, i.y = e.y * n, i.z = e.z * n, i
|
|
}, e.FromArray = function(t, i) {
|
|
return i || (i = 0), new e(t[i], t[i + 1], t[i + 2], t[i + 3])
|
|
}, e.FromEulerAngles = function(t, i, n) {
|
|
var r = new e;
|
|
return e.RotationYawPitchRollToRef(i, t, n, r), r
|
|
}, e.FromEulerAnglesToRef = function(t, i, n, r) {
|
|
return e.RotationYawPitchRollToRef(i, t, n, r), r
|
|
}, e.FromEulerVector = function(t) {
|
|
var i = new e;
|
|
return e.RotationYawPitchRollToRef(t.y, t.x, t.z, i), i
|
|
}, e.FromEulerVectorToRef = function(t, i) {
|
|
return e.RotationYawPitchRollToRef(t.y, t.x, t.z, i), i
|
|
}, e.RotationYawPitchRoll = function(t, i, n) {
|
|
var r = new e;
|
|
return e.RotationYawPitchRollToRef(t, i, n, r), r
|
|
}, e.RotationYawPitchRollToRef = function(e, t, i, n) {
|
|
var r = .5 * i,
|
|
o = .5 * t,
|
|
s = .5 * e,
|
|
a = Math.sin(r),
|
|
c = Math.cos(r),
|
|
l = Math.sin(o),
|
|
u = Math.cos(o),
|
|
h = Math.sin(s),
|
|
d = Math.cos(s);
|
|
n.x = d * l * c + h * u * a, n.y = h * u * c - d * l * a, n.z = d * u * a - h * l * c, n.w = d * u * c + h * l * a
|
|
}, e.RotationAlphaBetaGamma = function(t, i, n) {
|
|
var r = new e;
|
|
return e.RotationAlphaBetaGammaToRef(t, i, n, r), r
|
|
}, e.RotationAlphaBetaGammaToRef = function(e, t, i, n) {
|
|
var r = .5 * (i + e),
|
|
o = .5 * (i - e),
|
|
s = .5 * t;
|
|
n.x = Math.cos(o) * Math.sin(s), n.y = Math.sin(o) * Math.sin(s), n.z = Math.sin(r) * Math.cos(s), n.w = Math.cos(r) * Math.cos(s)
|
|
}, e.RotationQuaternionFromAxis = function(t, i, n) {
|
|
var r = new e(0, 0, 0, 0);
|
|
return e.RotationQuaternionFromAxisToRef(t, i, n, r), r
|
|
}, e.RotationQuaternionFromAxisToRef = function(t, i, n, r) {
|
|
var o = I.Matrix[0];
|
|
g.FromXYZAxesToRef(t.normalize(), i.normalize(), n.normalize(), o), e.FromRotationMatrixToRef(o, r)
|
|
}, e.Slerp = function(t, i, n) {
|
|
var r = e.Identity();
|
|
return e.SlerpToRef(t, i, n, r), r
|
|
}, e.SlerpToRef = function(e, t, i, n) {
|
|
var r, o, s = e.x * t.x + e.y * t.y + e.z * t.z + e.w * t.w,
|
|
a = !1;
|
|
if (s < 0 && (a = !0, s = -s), s > .999999) o = 1 - i, r = a ? -i : i;
|
|
else {
|
|
var c = Math.acos(s),
|
|
l = 1 / Math.sin(c);
|
|
o = Math.sin((1 - i) * c) * l, r = a ? -Math.sin(i * c) * l : Math.sin(i * c) * l
|
|
}
|
|
n.x = o * e.x + r * t.x, n.y = o * e.y + r * t.y, n.z = o * e.z + r * t.z, n.w = o * e.w + r * t.w
|
|
}, e.Hermite = function(t, i, n, r, o) {
|
|
var s = o * o,
|
|
a = o * s,
|
|
c = 2 * a - 3 * s + 1,
|
|
l = -2 * a + 3 * s,
|
|
u = a - 2 * s + o,
|
|
h = a - s;
|
|
return new e(t.x * c + n.x * l + i.x * u + r.x * h, t.y * c + n.y * l + i.y * u + r.y * h, t.z * c + n.z * l + i.z * u + r.z * h, t.w * c + n.w * l + i.w * u + r.w * h)
|
|
}, e
|
|
}(),
|
|
g = function() {
|
|
function e() {
|
|
this._isIdentity = !1, this._isIdentityDirty = !0, this._isIdentity3x2 = !0, this._isIdentity3x2Dirty = !0, this.updateFlag = -1, this._m = new Float32Array(16), this._updateIdentityStatus(!1)
|
|
}
|
|
return Object.defineProperty(e.prototype, "m", {
|
|
get: function() {
|
|
return this._m
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._markAsUpdated = function() {
|
|
this.updateFlag = e._updateFlagSeed++, this._isIdentity = !1, this._isIdentity3x2 = !1, this._isIdentityDirty = !0, this._isIdentity3x2Dirty = !0
|
|
}, e.prototype._updateIdentityStatus = function(t, i, n, r) {
|
|
void 0 === i && (i = !1), void 0 === n && (n = !1), void 0 === r && (r = !0), this.updateFlag = e._updateFlagSeed++, this._isIdentity = t, this._isIdentity3x2 = t || n, this._isIdentityDirty = !this._isIdentity && i, this._isIdentity3x2Dirty = !this._isIdentity3x2 && r
|
|
}, e.prototype.isIdentity = function() {
|
|
if (this._isIdentityDirty) {
|
|
this._isIdentityDirty = !1;
|
|
var e = this._m;
|
|
this._isIdentity = 1 === e[0] && 0 === e[1] && 0 === e[2] && 0 === e[3] && 0 === e[4] && 1 === e[5] && 0 === e[6] && 0 === e[7] && 0 === e[8] && 0 === e[9] && 1 === e[10] && 0 === e[11] && 0 === e[12] && 0 === e[13] && 0 === e[14] && 1 === e[15]
|
|
}
|
|
return this._isIdentity
|
|
}, e.prototype.isIdentityAs3x2 = function() {
|
|
return this._isIdentity3x2Dirty && (this._isIdentity3x2Dirty = !1, 1 !== this._m[0] || 1 !== this._m[5] || 1 !== this._m[15] ? this._isIdentity3x2 = !1 : 0 !== this._m[1] || 0 !== this._m[2] || 0 !== this._m[3] || 0 !== this._m[4] || 0 !== this._m[6] || 0 !== this._m[7] || 0 !== this._m[8] || 0 !== this._m[9] || 0 !== this._m[10] || 0 !== this._m[11] || 0 !== this._m[12] || 0 !== this._m[13] || 0 !== this._m[14] ? this._isIdentity3x2 = !1 : this._isIdentity3x2 = !0), this._isIdentity3x2
|
|
}, e.prototype.determinant = function() {
|
|
if (!0 === this._isIdentity) return 1;
|
|
var e = this._m,
|
|
t = e[0],
|
|
i = e[1],
|
|
n = e[2],
|
|
r = e[3],
|
|
o = e[4],
|
|
s = e[5],
|
|
a = e[6],
|
|
c = e[7],
|
|
l = e[8],
|
|
u = e[9],
|
|
h = e[10],
|
|
d = e[11],
|
|
f = e[12],
|
|
p = e[13],
|
|
_ = e[14],
|
|
g = e[15],
|
|
m = h * g - _ * d,
|
|
v = u * g - p * d,
|
|
y = u * _ - p * h,
|
|
b = l * g - f * d,
|
|
T = l * _ - h * f,
|
|
E = l * p - f * u;
|
|
return t * +(s * m - a * v + c * y) + i * -(o * m - a * b + c * T) + n * +(o * v - s * b + c * E) + r * -(o * y - s * T + a * E)
|
|
}, e.prototype.toArray = function() {
|
|
return this._m
|
|
}, e.prototype.asArray = function() {
|
|
return this._m
|
|
}, e.prototype.invert = function() {
|
|
return this.invertToRef(this), this
|
|
}, e.prototype.reset = function() {
|
|
return e.FromValuesToRef(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, this), this._updateIdentityStatus(!1), this
|
|
}, e.prototype.add = function(t) {
|
|
var i = new e;
|
|
return this.addToRef(t, i), i
|
|
}, e.prototype.addToRef = function(e, t) {
|
|
for (var i = this._m, n = t._m, r = e.m, o = 0; o < 16; o++) n[o] = i[o] + r[o];
|
|
return t._markAsUpdated(), this
|
|
}, e.prototype.addToSelf = function(e) {
|
|
for (var t = this._m, i = e.m, n = 0; n < 16; n++) t[n] += i[n];
|
|
return this._markAsUpdated(), this
|
|
}, e.prototype.invertToRef = function(t) {
|
|
if (!0 === this._isIdentity) return e.IdentityToRef(t), this;
|
|
var i = this._m,
|
|
n = i[0],
|
|
r = i[1],
|
|
o = i[2],
|
|
s = i[3],
|
|
a = i[4],
|
|
c = i[5],
|
|
l = i[6],
|
|
u = i[7],
|
|
h = i[8],
|
|
d = i[9],
|
|
f = i[10],
|
|
p = i[11],
|
|
_ = i[12],
|
|
g = i[13],
|
|
m = i[14],
|
|
v = i[15],
|
|
y = f * v - m * p,
|
|
b = d * v - g * p,
|
|
T = d * m - g * f,
|
|
E = h * v - _ * p,
|
|
A = h * m - f * _,
|
|
x = h * g - _ * d,
|
|
R = +(c * y - l * b + u * T),
|
|
P = -(a * y - l * E + u * A),
|
|
S = +(a * b - c * E + u * x),
|
|
C = -(a * T - c * A + l * x),
|
|
M = n * R + r * P + o * S + s * C;
|
|
if (0 === M) return t.copyFrom(this), this;
|
|
var O = 1 / M,
|
|
I = l * v - m * u,
|
|
D = c * v - g * u,
|
|
L = c * m - g * l,
|
|
w = a * v - _ * u,
|
|
F = a * m - _ * l,
|
|
N = a * g - _ * c,
|
|
B = l * p - f * u,
|
|
U = c * p - d * u,
|
|
V = c * f - d * l,
|
|
G = a * p - h * u,
|
|
k = a * f - h * l,
|
|
z = a * d - h * c,
|
|
j = -(r * y - o * b + s * T),
|
|
H = +(n * y - o * E + s * A),
|
|
W = -(n * b - r * E + s * x),
|
|
X = +(n * T - r * A + o * x),
|
|
Y = +(r * I - o * D + s * L),
|
|
K = -(n * I - o * w + s * F),
|
|
Q = +(n * D - r * w + s * N),
|
|
q = -(n * L - r * F + o * N),
|
|
Z = -(r * B - o * U + s * V),
|
|
J = +(n * B - o * G + s * k),
|
|
$ = -(n * U - r * G + s * z),
|
|
ee = +(n * V - r * k + o * z);
|
|
return e.FromValuesToRef(R * O, j * O, Y * O, Z * O, P * O, H * O, K * O, J * O, S * O, W * O, Q * O, $ * O, C * O, X * O, q * O, ee * O, t), this
|
|
}, e.prototype.addAtIndex = function(e, t) {
|
|
return this._m[e] += t, this._markAsUpdated(), this
|
|
}, e.prototype.multiplyAtIndex = function(e, t) {
|
|
return this._m[e] *= t, this._markAsUpdated(), this
|
|
}, e.prototype.setTranslationFromFloats = function(e, t, i) {
|
|
return this._m[12] = e, this._m[13] = t, this._m[14] = i, this._markAsUpdated(), this
|
|
}, e.prototype.addTranslationFromFloats = function(e, t, i) {
|
|
return this._m[12] += e, this._m[13] += t, this._m[14] += i, this._markAsUpdated(), this
|
|
}, e.prototype.setTranslation = function(e) {
|
|
return this.setTranslationFromFloats(e.x, e.y, e.z)
|
|
}, e.prototype.getTranslation = function() {
|
|
return new d(this._m[12], this._m[13], this._m[14])
|
|
}, e.prototype.getTranslationToRef = function(e) {
|
|
return e.x = this._m[12], e.y = this._m[13], e.z = this._m[14], this
|
|
}, e.prototype.removeRotationAndScaling = function() {
|
|
var t = this.m;
|
|
return e.FromValuesToRef(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, t[12], t[13], t[14], t[15], this), this._updateIdentityStatus(0 === t[12] && 0 === t[13] && 0 === t[14] && 1 === t[15]), this
|
|
}, e.prototype.multiply = function(t) {
|
|
var i = new e;
|
|
return this.multiplyToRef(t, i), i
|
|
}, e.prototype.copyFrom = function(e) {
|
|
e.copyToArray(this._m);
|
|
var t = e;
|
|
return this._updateIdentityStatus(t._isIdentity, t._isIdentityDirty, t._isIdentity3x2, t._isIdentity3x2Dirty), this
|
|
}, e.prototype.copyToArray = function(e, t) {
|
|
void 0 === t && (t = 0);
|
|
for (var i = 0; i < 16; i++) e[t + i] = this._m[i];
|
|
return this
|
|
}, e.prototype.multiplyToRef = function(e, t) {
|
|
return this._isIdentity ? (t.copyFrom(e), this) : e._isIdentity ? (t.copyFrom(this), this) : (this.multiplyToArray(e, t._m, 0), t._markAsUpdated(), this)
|
|
}, e.prototype.multiplyToArray = function(e, t, i) {
|
|
var n = this._m,
|
|
r = e.m,
|
|
o = n[0],
|
|
s = n[1],
|
|
a = n[2],
|
|
c = n[3],
|
|
l = n[4],
|
|
u = n[5],
|
|
h = n[6],
|
|
d = n[7],
|
|
f = n[8],
|
|
p = n[9],
|
|
_ = n[10],
|
|
g = n[11],
|
|
m = n[12],
|
|
v = n[13],
|
|
y = n[14],
|
|
b = n[15],
|
|
T = r[0],
|
|
E = r[1],
|
|
A = r[2],
|
|
x = r[3],
|
|
R = r[4],
|
|
P = r[5],
|
|
S = r[6],
|
|
C = r[7],
|
|
M = r[8],
|
|
O = r[9],
|
|
I = r[10],
|
|
D = r[11],
|
|
L = r[12],
|
|
w = r[13],
|
|
F = r[14],
|
|
N = r[15];
|
|
return t[i] = o * T + s * R + a * M + c * L, t[i + 1] = o * E + s * P + a * O + c * w, t[i + 2] = o * A + s * S + a * I + c * F, t[i + 3] = o * x + s * C + a * D + c * N, t[i + 4] = l * T + u * R + h * M + d * L, t[i + 5] = l * E + u * P + h * O + d * w, t[i + 6] = l * A + u * S + h * I + d * F, t[i + 7] = l * x + u * C + h * D + d * N, t[i + 8] = f * T + p * R + _ * M + g * L, t[i + 9] = f * E + p * P + _ * O + g * w, t[i + 10] = f * A + p * S + _ * I + g * F, t[i + 11] = f * x + p * C + _ * D + g * N, t[i + 12] = m * T + v * R + y * M + b * L, t[i + 13] = m * E + v * P + y * O + b * w, t[i + 14] = m * A + v * S + y * I + b * F, t[i + 15] = m * x + v * C + y * D + b * N, this
|
|
}, e.prototype.equals = function(e) {
|
|
var t = e;
|
|
if (!t) return !1;
|
|
if ((this._isIdentity || t._isIdentity) && !this._isIdentityDirty && !t._isIdentityDirty) return this._isIdentity && t._isIdentity;
|
|
var i = this.m,
|
|
n = t.m;
|
|
return i[0] === n[0] && i[1] === n[1] && i[2] === n[2] && i[3] === n[3] && i[4] === n[4] && i[5] === n[5] && i[6] === n[6] && i[7] === n[7] && i[8] === n[8] && i[9] === n[9] && i[10] === n[10] && i[11] === n[11] && i[12] === n[12] && i[13] === n[13] && i[14] === n[14] && i[15] === n[15]
|
|
}, e.prototype.clone = function() {
|
|
var t = new e;
|
|
return t.copyFrom(this), t
|
|
}, e.prototype.getClassName = function() {
|
|
return "Matrix"
|
|
}, e.prototype.getHashCode = function() {
|
|
for (var e = this._m[0] || 0, t = 1; t < 16; t++) e = 397 * e ^ (this._m[t] || 0);
|
|
return e
|
|
}, e.prototype.decompose = function(t, i, n) {
|
|
if (this._isIdentity) return n && n.setAll(0), t && t.setAll(1), i && i.copyFromFloats(0, 0, 0, 1), !0;
|
|
var r = this._m;
|
|
if (n && n.copyFromFloats(r[12], r[13], r[14]), (t = t || I.Vector3[0]).x = Math.sqrt(r[0] * r[0] + r[1] * r[1] + r[2] * r[2]), t.y = Math.sqrt(r[4] * r[4] + r[5] * r[5] + r[6] * r[6]), t.z = Math.sqrt(r[8] * r[8] + r[9] * r[9] + r[10] * r[10]), this.determinant() <= 0 && (t.y *= -1), 0 === t.x || 0 === t.y || 0 === t.z) return i && i.copyFromFloats(0, 0, 0, 1), !1;
|
|
if (i) {
|
|
var o = 1 / t.x,
|
|
s = 1 / t.y,
|
|
a = 1 / t.z;
|
|
e.FromValuesToRef(r[0] * o, r[1] * o, r[2] * o, 0, r[4] * s, r[5] * s, r[6] * s, 0, r[8] * a, r[9] * a, r[10] * a, 0, 0, 0, 0, 1, I.Matrix[0]), _.FromRotationMatrixToRef(I.Matrix[0], i)
|
|
}
|
|
return !0
|
|
}, e.prototype.getRow = function(e) {
|
|
if (e < 0 || e > 3) return null;
|
|
var t = 4 * e;
|
|
return new f(this._m[t + 0], this._m[t + 1], this._m[t + 2], this._m[t + 3])
|
|
}, e.prototype.setRow = function(e, t) {
|
|
return this.setRowFromFloats(e, t.x, t.y, t.z, t.w)
|
|
}, e.prototype.transpose = function() {
|
|
return e.Transpose(this)
|
|
}, e.prototype.transposeToRef = function(t) {
|
|
return e.TransposeToRef(this, t), this
|
|
}, e.prototype.setRowFromFloats = function(e, t, i, n, r) {
|
|
if (e < 0 || e > 3) return this;
|
|
var o = 4 * e;
|
|
return this._m[o + 0] = t, this._m[o + 1] = i, this._m[o + 2] = n, this._m[o + 3] = r, this._markAsUpdated(), this
|
|
}, e.prototype.scale = function(t) {
|
|
var i = new e;
|
|
return this.scaleToRef(t, i), i
|
|
}, e.prototype.scaleToRef = function(e, t) {
|
|
for (var i = 0; i < 16; i++) t._m[i] = this._m[i] * e;
|
|
return t._markAsUpdated(), this
|
|
}, e.prototype.scaleAndAddToRef = function(e, t) {
|
|
for (var i = 0; i < 16; i++) t._m[i] += this._m[i] * e;
|
|
return t._markAsUpdated(), this
|
|
}, e.prototype.toNormalMatrix = function(t) {
|
|
var i = I.Matrix[0];
|
|
this.invertToRef(i), i.transposeToRef(t);
|
|
var n = t._m;
|
|
e.FromValuesToRef(n[0], n[1], n[2], 0, n[4], n[5], n[6], 0, n[8], n[9], n[10], 0, 0, 0, 0, 1, t)
|
|
}, e.prototype.getRotationMatrix = function() {
|
|
var t = new e;
|
|
return this.getRotationMatrixToRef(t), t
|
|
}, e.prototype.getRotationMatrixToRef = function(t) {
|
|
var i = I.Vector3[0];
|
|
if (!this.decompose(i)) return e.IdentityToRef(t), this;
|
|
var n = this._m,
|
|
r = 1 / i.x,
|
|
o = 1 / i.y,
|
|
s = 1 / i.z;
|
|
return e.FromValuesToRef(n[0] * r, n[1] * r, n[2] * r, 0, n[4] * o, n[5] * o, n[6] * o, 0, n[8] * s, n[9] * s, n[10] * s, 0, 0, 0, 0, 1, t), this
|
|
}, e.prototype.toggleModelMatrixHandInPlace = function() {
|
|
var e = this._m;
|
|
e[2] *= -1, e[6] *= -1, e[8] *= -1, e[9] *= -1, e[14] *= -1, this._markAsUpdated()
|
|
}, e.prototype.toggleProjectionMatrixHandInPlace = function() {
|
|
var e = this._m;
|
|
e[8] *= -1, e[9] *= -1, e[10] *= -1, e[11] *= -1, this._markAsUpdated()
|
|
}, e.FromArray = function(t, i) {
|
|
void 0 === i && (i = 0);
|
|
var n = new e;
|
|
return e.FromArrayToRef(t, i, n), n
|
|
}, e.FromArrayToRef = function(e, t, i) {
|
|
for (var n = 0; n < 16; n++) i._m[n] = e[n + t];
|
|
i._markAsUpdated()
|
|
}, e.FromFloat32ArrayToRefScaled = function(e, t, i, n) {
|
|
for (var r = 0; r < 16; r++) n._m[r] = e[r + t] * i;
|
|
n._markAsUpdated()
|
|
}, Object.defineProperty(e, "IdentityReadOnly", {
|
|
get: function() {
|
|
return e._identityReadOnly
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.FromValuesToRef = function(e, t, i, n, r, o, s, a, c, l, u, h, d, f, p, _, g) {
|
|
var m = g._m;
|
|
m[0] = e, m[1] = t, m[2] = i, m[3] = n, m[4] = r, m[5] = o, m[6] = s, m[7] = a, m[8] = c, m[9] = l, m[10] = u, m[11] = h, m[12] = d, m[13] = f, m[14] = p, m[15] = _, g._markAsUpdated()
|
|
}, e.FromValues = function(t, i, n, r, o, s, a, c, l, u, h, d, f, p, _, g) {
|
|
var m = new e,
|
|
v = m._m;
|
|
return v[0] = t, v[1] = i, v[2] = n, v[3] = r, v[4] = o, v[5] = s, v[6] = a, v[7] = c, v[8] = l, v[9] = u, v[10] = h, v[11] = d, v[12] = f, v[13] = p, v[14] = _, v[15] = g, m._markAsUpdated(), m
|
|
}, e.Compose = function(t, i, n) {
|
|
var r = new e;
|
|
return e.ComposeToRef(t, i, n, r), r
|
|
}, e.ComposeToRef = function(e, t, i, n) {
|
|
var r = n._m,
|
|
o = t.x,
|
|
s = t.y,
|
|
a = t.z,
|
|
c = t.w,
|
|
l = o + o,
|
|
u = s + s,
|
|
h = a + a,
|
|
d = o * l,
|
|
f = o * u,
|
|
p = o * h,
|
|
_ = s * u,
|
|
g = s * h,
|
|
m = a * h,
|
|
v = c * l,
|
|
y = c * u,
|
|
b = c * h,
|
|
T = e.x,
|
|
E = e.y,
|
|
A = e.z;
|
|
r[0] = (1 - (_ + m)) * T, r[1] = (f + b) * T, r[2] = (p - y) * T, r[3] = 0, r[4] = (f - b) * E, r[5] = (1 - (d + m)) * E, r[6] = (g + v) * E, r[7] = 0, r[8] = (p + y) * A, r[9] = (g - v) * A, r[10] = (1 - (d + _)) * A, r[11] = 0, r[12] = i.x, r[13] = i.y, r[14] = i.z, r[15] = 1, n._markAsUpdated()
|
|
}, e.Identity = function() {
|
|
var t = e.FromValues(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
return t._updateIdentityStatus(!0), t
|
|
}, e.IdentityToRef = function(t) {
|
|
e.FromValuesToRef(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, t), t._updateIdentityStatus(!0)
|
|
}, e.Zero = function() {
|
|
var t = e.FromValues(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
|
return t._updateIdentityStatus(!1), t
|
|
}, e.RotationX = function(t) {
|
|
var i = new e;
|
|
return e.RotationXToRef(t, i), i
|
|
}, e.Invert = function(t) {
|
|
var i = new e;
|
|
return t.invertToRef(i), i
|
|
}, e.RotationXToRef = function(t, i) {
|
|
var n = Math.sin(t),
|
|
r = Math.cos(t);
|
|
e.FromValuesToRef(1, 0, 0, 0, 0, r, n, 0, 0, -n, r, 0, 0, 0, 0, 1, i), i._updateIdentityStatus(1 === r && 0 === n)
|
|
}, e.RotationY = function(t) {
|
|
var i = new e;
|
|
return e.RotationYToRef(t, i), i
|
|
}, e.RotationYToRef = function(t, i) {
|
|
var n = Math.sin(t),
|
|
r = Math.cos(t);
|
|
e.FromValuesToRef(r, 0, -n, 0, 0, 1, 0, 0, n, 0, r, 0, 0, 0, 0, 1, i), i._updateIdentityStatus(1 === r && 0 === n)
|
|
}, e.RotationZ = function(t) {
|
|
var i = new e;
|
|
return e.RotationZToRef(t, i), i
|
|
}, e.RotationZToRef = function(t, i) {
|
|
var n = Math.sin(t),
|
|
r = Math.cos(t);
|
|
e.FromValuesToRef(r, n, 0, 0, -n, r, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, i), i._updateIdentityStatus(1 === r && 0 === n)
|
|
}, e.RotationAxis = function(t, i) {
|
|
var n = new e;
|
|
return e.RotationAxisToRef(t, i, n), n
|
|
}, e.RotationAxisToRef = function(e, t, i) {
|
|
var n = Math.sin(-t),
|
|
r = Math.cos(-t),
|
|
o = 1 - r;
|
|
e.normalize();
|
|
var s = i._m;
|
|
s[0] = e.x * e.x * o + r, s[1] = e.x * e.y * o - e.z * n, s[2] = e.x * e.z * o + e.y * n, s[3] = 0, s[4] = e.y * e.x * o + e.z * n, s[5] = e.y * e.y * o + r, s[6] = e.y * e.z * o - e.x * n, s[7] = 0, s[8] = e.z * e.x * o - e.y * n, s[9] = e.z * e.y * o + e.x * n, s[10] = e.z * e.z * o + r, s[11] = 0, s[12] = 0, s[13] = 0, s[14] = 0, s[15] = 1, i._markAsUpdated()
|
|
}, e.RotationAlignToRef = function(e, t, i) {
|
|
var n = d.Cross(t, e),
|
|
r = d.Dot(t, e),
|
|
o = 1 / (1 + r),
|
|
s = i._m;
|
|
s[0] = n.x * n.x * o + r, s[1] = n.y * n.x * o - n.z, s[2] = n.z * n.x * o + n.y, s[3] = 0, s[4] = n.x * n.y * o + n.z, s[5] = n.y * n.y * o + r, s[6] = n.z * n.y * o - n.x, s[7] = 0, s[8] = n.x * n.z * o - n.y, s[9] = n.y * n.z * o + n.x, s[10] = n.z * n.z * o + r, s[11] = 0, s[12] = 0, s[13] = 0, s[14] = 0, s[15] = 1, i._markAsUpdated()
|
|
}, e.RotationYawPitchRoll = function(t, i, n) {
|
|
var r = new e;
|
|
return e.RotationYawPitchRollToRef(t, i, n, r), r
|
|
}, e.RotationYawPitchRollToRef = function(e, t, i, n) {
|
|
_.RotationYawPitchRollToRef(e, t, i, I.Quaternion[0]), I.Quaternion[0].toRotationMatrix(n)
|
|
}, e.Scaling = function(t, i, n) {
|
|
var r = new e;
|
|
return e.ScalingToRef(t, i, n, r), r
|
|
}, e.ScalingToRef = function(t, i, n, r) {
|
|
e.FromValuesToRef(t, 0, 0, 0, 0, i, 0, 0, 0, 0, n, 0, 0, 0, 0, 1, r), r._updateIdentityStatus(1 === t && 1 === i && 1 === n)
|
|
}, e.Translation = function(t, i, n) {
|
|
var r = new e;
|
|
return e.TranslationToRef(t, i, n, r), r
|
|
}, e.TranslationToRef = function(t, i, n, r) {
|
|
e.FromValuesToRef(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, t, i, n, 1, r), r._updateIdentityStatus(0 === t && 0 === i && 0 === n)
|
|
}, e.Lerp = function(t, i, n) {
|
|
var r = new e;
|
|
return e.LerpToRef(t, i, n, r), r
|
|
}, e.LerpToRef = function(e, t, i, n) {
|
|
for (var r = n._m, o = e.m, s = t.m, a = 0; a < 16; a++) r[a] = o[a] * (1 - i) + s[a] * i;
|
|
n._markAsUpdated()
|
|
}, e.DecomposeLerp = function(t, i, n) {
|
|
var r = new e;
|
|
return e.DecomposeLerpToRef(t, i, n, r), r
|
|
}, e.DecomposeLerpToRef = function(t, i, n, r) {
|
|
var o = I.Vector3[0],
|
|
s = I.Quaternion[0],
|
|
a = I.Vector3[1];
|
|
t.decompose(o, s, a);
|
|
var c = I.Vector3[2],
|
|
l = I.Quaternion[1],
|
|
u = I.Vector3[3];
|
|
i.decompose(c, l, u);
|
|
var h = I.Vector3[4];
|
|
d.LerpToRef(o, c, n, h);
|
|
var f = I.Quaternion[2];
|
|
_.SlerpToRef(s, l, n, f);
|
|
var p = I.Vector3[5];
|
|
d.LerpToRef(a, u, n, p), e.ComposeToRef(h, f, p, r)
|
|
}, e.LookAtLH = function(t, i, n) {
|
|
var r = new e;
|
|
return e.LookAtLHToRef(t, i, n, r), r
|
|
}, e.LookAtLHToRef = function(t, i, n, r) {
|
|
var o = I.Vector3[0],
|
|
s = I.Vector3[1],
|
|
a = I.Vector3[2];
|
|
i.subtractToRef(t, a), a.normalize(), d.CrossToRef(n, a, o);
|
|
var c = o.lengthSquared();
|
|
0 === c ? o.x = 1 : o.normalizeFromLength(Math.sqrt(c)), d.CrossToRef(a, o, s), s.normalize();
|
|
var l = -d.Dot(o, t),
|
|
u = -d.Dot(s, t),
|
|
h = -d.Dot(a, t);
|
|
e.FromValuesToRef(o.x, s.x, a.x, 0, o.y, s.y, a.y, 0, o.z, s.z, a.z, 0, l, u, h, 1, r)
|
|
}, e.LookAtRH = function(t, i, n) {
|
|
var r = new e;
|
|
return e.LookAtRHToRef(t, i, n, r), r
|
|
}, e.LookAtRHToRef = function(t, i, n, r) {
|
|
var o = I.Vector3[0],
|
|
s = I.Vector3[1],
|
|
a = I.Vector3[2];
|
|
t.subtractToRef(i, a), a.normalize(), d.CrossToRef(n, a, o);
|
|
var c = o.lengthSquared();
|
|
0 === c ? o.x = 1 : o.normalizeFromLength(Math.sqrt(c)), d.CrossToRef(a, o, s), s.normalize();
|
|
var l = -d.Dot(o, t),
|
|
u = -d.Dot(s, t),
|
|
h = -d.Dot(a, t);
|
|
e.FromValuesToRef(o.x, s.x, a.x, 0, o.y, s.y, a.y, 0, o.z, s.z, a.z, 0, l, u, h, 1, r)
|
|
}, e.OrthoLH = function(t, i, n, r) {
|
|
var o = new e;
|
|
return e.OrthoLHToRef(t, i, n, r, o), o
|
|
}, e.OrthoLHToRef = function(t, i, n, r, o) {
|
|
var s = 2 / t,
|
|
a = 2 / i,
|
|
c = 2 / (r - n),
|
|
l = -(r + n) / (r - n);
|
|
e.FromValuesToRef(s, 0, 0, 0, 0, a, 0, 0, 0, 0, c, 0, 0, 0, l, 1, o), o._updateIdentityStatus(1 === s && 1 === a && 1 === c && 0 === l)
|
|
}, e.OrthoOffCenterLH = function(t, i, n, r, o, s) {
|
|
var a = new e;
|
|
return e.OrthoOffCenterLHToRef(t, i, n, r, o, s, a), a
|
|
}, e.OrthoOffCenterLHToRef = function(t, i, n, r, o, s, a) {
|
|
var c = 2 / (i - t),
|
|
l = 2 / (r - n),
|
|
u = 2 / (s - o),
|
|
h = -(s + o) / (s - o),
|
|
d = (t + i) / (t - i),
|
|
f = (r + n) / (n - r);
|
|
e.FromValuesToRef(c, 0, 0, 0, 0, l, 0, 0, 0, 0, u, 0, d, f, h, 1, a), a._markAsUpdated()
|
|
}, e.OrthoOffCenterRH = function(t, i, n, r, o, s) {
|
|
var a = new e;
|
|
return e.OrthoOffCenterRHToRef(t, i, n, r, o, s, a), a
|
|
}, e.OrthoOffCenterRHToRef = function(t, i, n, r, o, s, a) {
|
|
e.OrthoOffCenterLHToRef(t, i, n, r, o, s, a), a._m[10] *= -1
|
|
}, e.PerspectiveLH = function(t, i, n, r) {
|
|
var o = new e,
|
|
s = 2 * n / t,
|
|
a = 2 * n / i,
|
|
c = (r + n) / (r - n),
|
|
l = -2 * r * n / (r - n);
|
|
return e.FromValuesToRef(s, 0, 0, 0, 0, a, 0, 0, 0, 0, c, 1, 0, 0, l, 0, o), o._updateIdentityStatus(!1), o
|
|
}, e.PerspectiveFovLH = function(t, i, n, r) {
|
|
var o = new e;
|
|
return e.PerspectiveFovLHToRef(t, i, n, r, o), o
|
|
}, e.PerspectiveFovLHToRef = function(t, i, n, r, o, s) {
|
|
void 0 === s && (s = !0);
|
|
var a = n,
|
|
c = r,
|
|
l = 1 / Math.tan(.5 * t),
|
|
u = s ? l / i : l,
|
|
h = s ? l : l * i,
|
|
d = (c + a) / (c - a),
|
|
f = -2 * c * a / (c - a);
|
|
e.FromValuesToRef(u, 0, 0, 0, 0, h, 0, 0, 0, 0, d, 1, 0, 0, f, 0, o), o._updateIdentityStatus(!1)
|
|
}, e.PerspectiveFovRH = function(t, i, n, r) {
|
|
var o = new e;
|
|
return e.PerspectiveFovRHToRef(t, i, n, r, o), o
|
|
}, e.PerspectiveFovRHToRef = function(t, i, n, r, o, s) {
|
|
void 0 === s && (s = !0);
|
|
var a = n,
|
|
c = r,
|
|
l = 1 / Math.tan(.5 * t),
|
|
u = s ? l / i : l,
|
|
h = s ? l : l * i,
|
|
d = -(c + a) / (c - a),
|
|
f = -2 * c * a / (c - a);
|
|
e.FromValuesToRef(u, 0, 0, 0, 0, h, 0, 0, 0, 0, d, -1, 0, 0, f, 0, o), o._updateIdentityStatus(!1)
|
|
}, e.PerspectiveFovWebVRToRef = function(e, t, i, n, r) {
|
|
void 0 === r && (r = !1);
|
|
var o = r ? -1 : 1,
|
|
s = Math.tan(e.upDegrees * Math.PI / 180),
|
|
a = Math.tan(e.downDegrees * Math.PI / 180),
|
|
c = Math.tan(e.leftDegrees * Math.PI / 180),
|
|
l = Math.tan(e.rightDegrees * Math.PI / 180),
|
|
u = 2 / (c + l),
|
|
h = 2 / (s + a),
|
|
d = n._m;
|
|
d[0] = u, d[1] = d[2] = d[3] = d[4] = 0, d[5] = h, d[6] = d[7] = 0, d[8] = (c - l) * u * .5, d[9] = -(s - a) * h * .5, d[10] = -i / (t - i), d[11] = 1 * o, d[12] = d[13] = d[15] = 0, d[14] = -2 * i * t / (i - t), n._markAsUpdated()
|
|
}, e.GetFinalMatrix = function(t, i, n, r, o, s) {
|
|
var a = t.width,
|
|
c = t.height,
|
|
l = t.x,
|
|
u = t.y,
|
|
h = e.FromValues(a / 2, 0, 0, 0, 0, -c / 2, 0, 0, 0, 0, s - o, 0, l + a / 2, c / 2 + u, o, 1),
|
|
d = I.Matrix[0];
|
|
return i.multiplyToRef(n, d), d.multiplyToRef(r, d), d.multiply(h)
|
|
}, e.GetAsMatrix2x2 = function(e) {
|
|
var t = e.m;
|
|
return new Float32Array([t[0], t[1], t[4], t[5]])
|
|
}, e.GetAsMatrix3x3 = function(e) {
|
|
var t = e.m;
|
|
return new Float32Array([t[0], t[1], t[2], t[4], t[5], t[6], t[8], t[9], t[10]])
|
|
}, e.Transpose = function(t) {
|
|
var i = new e;
|
|
return e.TransposeToRef(t, i), i
|
|
}, e.TransposeToRef = function(e, t) {
|
|
var i = t._m,
|
|
n = e.m;
|
|
i[0] = n[0], i[1] = n[4], i[2] = n[8], i[3] = n[12], i[4] = n[1], i[5] = n[5], i[6] = n[9], i[7] = n[13], i[8] = n[2], i[9] = n[6], i[10] = n[10], i[11] = n[14], i[12] = n[3], i[13] = n[7], i[14] = n[11], i[15] = n[15], t._updateIdentityStatus(e._isIdentity, e._isIdentityDirty)
|
|
}, e.Reflection = function(t) {
|
|
var i = new e;
|
|
return e.ReflectionToRef(t, i), i
|
|
}, e.ReflectionToRef = function(t, i) {
|
|
t.normalize();
|
|
var n = t.normal.x,
|
|
r = t.normal.y,
|
|
o = t.normal.z,
|
|
s = -2 * n,
|
|
a = -2 * r,
|
|
c = -2 * o;
|
|
e.FromValuesToRef(s * n + 1, a * n, c * n, 0, s * r, a * r + 1, c * r, 0, s * o, a * o, c * o + 1, 0, s * t.d, a * t.d, c * t.d, 1, i)
|
|
}, e.FromXYZAxesToRef = function(t, i, n, r) {
|
|
e.FromValuesToRef(t.x, t.y, t.z, 0, i.x, i.y, i.z, 0, n.x, n.y, n.z, 0, 0, 0, 0, 1, r)
|
|
}, e.FromQuaternionToRef = function(e, t) {
|
|
var i = e.x * e.x,
|
|
n = e.y * e.y,
|
|
r = e.z * e.z,
|
|
o = e.x * e.y,
|
|
s = e.z * e.w,
|
|
a = e.z * e.x,
|
|
c = e.y * e.w,
|
|
l = e.y * e.z,
|
|
u = e.x * e.w;
|
|
t._m[0] = 1 - 2 * (n + r), t._m[1] = 2 * (o + s), t._m[2] = 2 * (a - c), t._m[3] = 0, t._m[4] = 2 * (o - s), t._m[5] = 1 - 2 * (r + i), t._m[6] = 2 * (l + u), t._m[7] = 0, t._m[8] = 2 * (a + c), t._m[9] = 2 * (l - u), t._m[10] = 1 - 2 * (n + i), t._m[11] = 0, t._m[12] = 0, t._m[13] = 0, t._m[14] = 0, t._m[15] = 1, t._markAsUpdated()
|
|
}, e._updateFlagSeed = 0, e._identityReadOnly = e.Identity(), e
|
|
}(),
|
|
m = function() {
|
|
function e(e, t, i, n) {
|
|
this.normal = new d(e, t, i), this.d = n
|
|
}
|
|
return e.prototype.asArray = function() {
|
|
return [this.normal.x, this.normal.y, this.normal.z, this.d]
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.normal.x, this.normal.y, this.normal.z, this.d)
|
|
}, e.prototype.getClassName = function() {
|
|
return "Plane"
|
|
}, e.prototype.getHashCode = function() {
|
|
var e = this.normal.getHashCode();
|
|
return e = 397 * e ^ (this.d || 0)
|
|
}, e.prototype.normalize = function() {
|
|
var e = Math.sqrt(this.normal.x * this.normal.x + this.normal.y * this.normal.y + this.normal.z * this.normal.z),
|
|
t = 0;
|
|
return 0 !== e && (t = 1 / e), this.normal.x *= t, this.normal.y *= t, this.normal.z *= t, this.d *= t, this
|
|
}, e.prototype.transform = function(t) {
|
|
var i = I.Matrix[0];
|
|
g.TransposeToRef(t, i);
|
|
var n = i.m,
|
|
r = this.normal.x,
|
|
o = this.normal.y,
|
|
s = this.normal.z,
|
|
a = this.d;
|
|
return new e(r * n[0] + o * n[1] + s * n[2] + a * n[3], r * n[4] + o * n[5] + s * n[6] + a * n[7], r * n[8] + o * n[9] + s * n[10] + a * n[11], r * n[12] + o * n[13] + s * n[14] + a * n[15])
|
|
}, e.prototype.dotCoordinate = function(e) {
|
|
return this.normal.x * e.x + this.normal.y * e.y + this.normal.z * e.z + this.d
|
|
}, e.prototype.copyFromPoints = function(e, t, i) {
|
|
var n, r = t.x - e.x,
|
|
o = t.y - e.y,
|
|
s = t.z - e.z,
|
|
a = i.x - e.x,
|
|
c = i.y - e.y,
|
|
l = i.z - e.z,
|
|
u = o * l - s * c,
|
|
h = s * a - r * l,
|
|
d = r * c - o * a,
|
|
f = Math.sqrt(u * u + h * h + d * d);
|
|
return n = 0 !== f ? 1 / f : 0, this.normal.x = u * n, this.normal.y = h * n, this.normal.z = d * n, this.d = -(this.normal.x * e.x + this.normal.y * e.y + this.normal.z * e.z), this
|
|
}, e.prototype.isFrontFacingTo = function(e, t) {
|
|
return d.Dot(this.normal, e) <= t
|
|
}, e.prototype.signedDistanceTo = function(e) {
|
|
return d.Dot(e, this.normal) + this.d
|
|
}, e.FromArray = function(t) {
|
|
return new e(t[0], t[1], t[2], t[3])
|
|
}, e.FromPoints = function(t, i, n) {
|
|
var r = new e(0, 0, 0, 0);
|
|
return r.copyFromPoints(t, i, n), r
|
|
}, e.FromPositionAndNormal = function(t, i) {
|
|
var n = new e(0, 0, 0, 0);
|
|
return i.normalize(), n.normal = i, n.d = -(i.x * t.x + i.y * t.y + i.z * t.z), n
|
|
}, e.SignedDistanceToPlaneFromPositionAndNormal = function(e, t, i) {
|
|
var n = -(t.x * e.x + t.y * e.y + t.z * e.z);
|
|
return d.Dot(i, t) + n
|
|
}, e
|
|
}(),
|
|
v = function() {
|
|
function e(e, t, i, n) {
|
|
this.x = e, this.y = t, this.width = i, this.height = n
|
|
}
|
|
return e.prototype.toGlobal = function(t, i) {
|
|
return new e(this.x * t, this.y * i, this.width * t, this.height * i)
|
|
}, e.prototype.toGlobalToRef = function(e, t, i) {
|
|
return i.x = this.x * e, i.y = this.y * t, i.width = this.width * e, i.height = this.height * t, this
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.x, this.y, this.width, this.height)
|
|
}, e
|
|
}(),
|
|
y = function() {
|
|
function e() {}
|
|
return e.GetPlanes = function(t) {
|
|
for (var i = [], n = 0; n < 6; n++) i.push(new m(0, 0, 0, 0));
|
|
return e.GetPlanesToRef(t, i), i
|
|
}, e.GetNearPlaneToRef = function(e, t) {
|
|
var i = e.m;
|
|
t.normal.x = i[3] + i[2], t.normal.y = i[7] + i[6], t.normal.z = i[11] + i[10], t.d = i[15] + i[14], t.normalize()
|
|
}, e.GetFarPlaneToRef = function(e, t) {
|
|
var i = e.m;
|
|
t.normal.x = i[3] - i[2], t.normal.y = i[7] - i[6], t.normal.z = i[11] - i[10], t.d = i[15] - i[14], t.normalize()
|
|
}, e.GetLeftPlaneToRef = function(e, t) {
|
|
var i = e.m;
|
|
t.normal.x = i[3] + i[0], t.normal.y = i[7] + i[4], t.normal.z = i[11] + i[8], t.d = i[15] + i[12], t.normalize()
|
|
}, e.GetRightPlaneToRef = function(e, t) {
|
|
var i = e.m;
|
|
t.normal.x = i[3] - i[0], t.normal.y = i[7] - i[4], t.normal.z = i[11] - i[8], t.d = i[15] - i[12], t.normalize()
|
|
}, e.GetTopPlaneToRef = function(e, t) {
|
|
var i = e.m;
|
|
t.normal.x = i[3] - i[1], t.normal.y = i[7] - i[5], t.normal.z = i[11] - i[9], t.d = i[15] - i[13], t.normalize()
|
|
}, e.GetBottomPlaneToRef = function(e, t) {
|
|
var i = e.m;
|
|
t.normal.x = i[3] + i[1], t.normal.y = i[7] + i[5], t.normal.z = i[11] + i[9], t.d = i[15] + i[13], t.normalize()
|
|
}, e.GetPlanesToRef = function(t, i) {
|
|
e.GetNearPlaneToRef(t, i[0]), e.GetFarPlaneToRef(t, i[1]), e.GetLeftPlaneToRef(t, i[2]), e.GetRightPlaneToRef(t, i[3]), e.GetTopPlaneToRef(t, i[4]), e.GetBottomPlaneToRef(t, i[5])
|
|
}, e
|
|
}();
|
|
! function(e) {
|
|
e[e.LOCAL = 0] = "LOCAL", e[e.WORLD = 1] = "WORLD", e[e.BONE = 2] = "BONE"
|
|
}(n || (n = {}));
|
|
var b, T = function() {
|
|
function e() {}
|
|
return e.X = new d(1, 0, 0), e.Y = new d(0, 1, 0), e.Z = new d(0, 0, 1), e
|
|
}(),
|
|
E = function() {
|
|
function e() {}
|
|
return e.Interpolate = function(e, t, i, n, r) {
|
|
for (var o = 1 - 3 * n + 3 * t, s = 3 * n - 6 * t, a = 3 * t, c = e, l = 0; l < 5; l++) {
|
|
var u = c * c;
|
|
c -= (o * (u * c) + s * u + a * c - e) * (1 / (3 * o * u + 2 * s * c + a)), c = Math.min(1, Math.max(0, c))
|
|
}
|
|
return 3 * Math.pow(1 - c, 2) * c * i + 3 * (1 - c) * Math.pow(c, 2) * r + Math.pow(c, 3)
|
|
}, e
|
|
}();
|
|
! function(e) {
|
|
e[e.CW = 0] = "CW", e[e.CCW = 1] = "CCW"
|
|
}(b || (b = {}));
|
|
var A = function() {
|
|
function e(e) {
|
|
this._radians = e, this._radians < 0 && (this._radians += 2 * Math.PI)
|
|
}
|
|
return e.prototype.degrees = function() {
|
|
return 180 * this._radians / Math.PI
|
|
}, e.prototype.radians = function() {
|
|
return this._radians
|
|
}, e.BetweenTwoPoints = function(t, i) {
|
|
var n = i.subtract(t);
|
|
return new e(Math.atan2(n.y, n.x))
|
|
}, e.FromRadians = function(t) {
|
|
return new e(t)
|
|
}, e.FromDegrees = function(t) {
|
|
return new e(t * Math.PI / 180)
|
|
}, e
|
|
}(),
|
|
x = function() {
|
|
return function(e, t, i) {
|
|
this.startPoint = e, this.midPoint = t, this.endPoint = i;
|
|
var n = Math.pow(t.x, 2) + Math.pow(t.y, 2),
|
|
r = (Math.pow(e.x, 2) + Math.pow(e.y, 2) - n) / 2,
|
|
o = (n - Math.pow(i.x, 2) - Math.pow(i.y, 2)) / 2,
|
|
s = (e.x - t.x) * (t.y - i.y) - (t.x - i.x) * (e.y - t.y);
|
|
this.centerPoint = new h((r * (t.y - i.y) - o * (e.y - t.y)) / s, ((e.x - t.x) * o - (t.x - i.x) * r) / s), this.radius = this.centerPoint.subtract(this.startPoint).length(), this.startAngle = A.BetweenTwoPoints(this.centerPoint, this.startPoint);
|
|
var a = this.startAngle.degrees(),
|
|
c = A.BetweenTwoPoints(this.centerPoint, this.midPoint).degrees(),
|
|
l = A.BetweenTwoPoints(this.centerPoint, this.endPoint).degrees();
|
|
c - a > 180 && (c -= 360), c - a < -180 && (c += 360), l - c > 180 && (l -= 360), l - c < -180 && (l += 360), this.orientation = c - a < 0 ? b.CW : b.CCW, this.angle = A.FromDegrees(this.orientation === b.CW ? a - l : l - a)
|
|
}
|
|
}(),
|
|
R = function() {
|
|
function e(e, t) {
|
|
this._points = new Array, this._length = 0, this.closed = !1, this._points.push(new h(e, t))
|
|
}
|
|
return e.prototype.addLineTo = function(e, t) {
|
|
if (this.closed) return this;
|
|
var i = new h(e, t),
|
|
n = this._points[this._points.length - 1];
|
|
return this._points.push(i), this._length += i.subtract(n).length(), this
|
|
}, e.prototype.addArcTo = function(e, t, i, n, r) {
|
|
if (void 0 === r && (r = 36), this.closed) return this;
|
|
var o = this._points[this._points.length - 1],
|
|
s = new h(e, t),
|
|
a = new h(i, n),
|
|
c = new x(o, s, a),
|
|
l = c.angle.radians() / r;
|
|
c.orientation === b.CW && (l *= -1);
|
|
for (var u = c.startAngle.radians() + l, d = 0; d < r; d++) {
|
|
var f = Math.cos(u) * c.radius + c.centerPoint.x,
|
|
p = Math.sin(u) * c.radius + c.centerPoint.y;
|
|
this.addLineTo(f, p), u += l
|
|
}
|
|
return this
|
|
}, e.prototype.close = function() {
|
|
return this.closed = !0, this
|
|
}, e.prototype.length = function() {
|
|
var e = this._length;
|
|
if (!this.closed) {
|
|
var t = this._points[this._points.length - 1];
|
|
e += this._points[0].subtract(t).length()
|
|
}
|
|
return e
|
|
}, e.prototype.getPoints = function() {
|
|
return this._points
|
|
}, e.prototype.getPointAtLengthPosition = function(e) {
|
|
if (e < 0 || e > 1) return h.Zero();
|
|
for (var t = e * this.length(), i = 0, n = 0; n < this._points.length; n++) {
|
|
var r = (n + 1) % this._points.length,
|
|
o = this._points[n],
|
|
s = this._points[r].subtract(o),
|
|
a = s.length() + i;
|
|
if (t >= i && t <= a) {
|
|
var c = s.normalize(),
|
|
l = t - i;
|
|
return new h(o.x + c.x * l, o.y + c.y * l)
|
|
}
|
|
i = a
|
|
}
|
|
return h.Zero()
|
|
}, e.StartingAt = function(t, i) {
|
|
return new e(t, i)
|
|
}, e
|
|
}(),
|
|
P = function() {
|
|
function e(e, t, i) {
|
|
void 0 === t && (t = null), this.path = e, this._curve = new Array, this._distances = new Array, this._tangents = new Array, this._normals = new Array, this._binormals = new Array;
|
|
for (var n = 0; n < e.length; n++) this._curve[n] = e[n].clone();
|
|
this._raw = i || !1, this._compute(t)
|
|
}
|
|
return e.prototype.getCurve = function() {
|
|
return this._curve
|
|
}, e.prototype.getTangents = function() {
|
|
return this._tangents
|
|
}, e.prototype.getNormals = function() {
|
|
return this._normals
|
|
}, e.prototype.getBinormals = function() {
|
|
return this._binormals
|
|
}, e.prototype.getDistances = function() {
|
|
return this._distances
|
|
}, e.prototype.update = function(e, t) {
|
|
void 0 === t && (t = null);
|
|
for (var i = 0; i < e.length; i++) this._curve[i].x = e[i].x, this._curve[i].y = e[i].y, this._curve[i].z = e[i].z;
|
|
return this._compute(t), this
|
|
}, e.prototype._compute = function(e) {
|
|
var t = this._curve.length;
|
|
this._tangents[0] = this._getFirstNonNullVector(0), this._raw || this._tangents[0].normalize(), this._tangents[t - 1] = this._curve[t - 1].subtract(this._curve[t - 2]), this._raw || this._tangents[t - 1].normalize();
|
|
var i, n, r, o, s = this._tangents[0],
|
|
a = this._normalVector(s, e);
|
|
this._normals[0] = a, this._raw || this._normals[0].normalize(), this._binormals[0] = d.Cross(s, this._normals[0]), this._raw || this._binormals[0].normalize(), this._distances[0] = 0;
|
|
for (var c = 1; c < t; c++) i = this._getLastNonNullVector(c), c < t - 1 && (n = this._getFirstNonNullVector(c), this._tangents[c] = i.add(n), this._tangents[c].normalize()), this._distances[c] = this._distances[c - 1] + i.length(), r = this._tangents[c], o = this._binormals[c - 1], this._normals[c] = d.Cross(o, r), this._raw || this._normals[c].normalize(), this._binormals[c] = d.Cross(r, this._normals[c]), this._raw || this._binormals[c].normalize()
|
|
}, e.prototype._getFirstNonNullVector = function(e) {
|
|
for (var t = 1, i = this._curve[e + t].subtract(this._curve[e]); 0 === i.length() && e + t + 1 < this._curve.length;) t++, i = this._curve[e + t].subtract(this._curve[e]);
|
|
return i
|
|
}, e.prototype._getLastNonNullVector = function(e) {
|
|
for (var t = 1, i = this._curve[e].subtract(this._curve[e - t]); 0 === i.length() && e > t + 1;) t++, i = this._curve[e].subtract(this._curve[e - t]);
|
|
return i
|
|
}, e.prototype._normalVector = function(e, t) {
|
|
var i, n, r = e.length();
|
|
(0 === r && (r = 1), null == t) ? (n = o.a.WithinEpsilon(Math.abs(e.y) / r, 1, c) ? o.a.WithinEpsilon(Math.abs(e.x) / r, 1, c) ? o.a.WithinEpsilon(Math.abs(e.z) / r, 1, c) ? d.Zero() : new d(0, 0, 1) : new d(1, 0, 0) : new d(0, -1, 0), i = d.Cross(e, n)) : (i = d.Cross(e, t), d.CrossToRef(i, e, i));
|
|
return i.normalize(), i
|
|
}, e
|
|
}(),
|
|
S = function() {
|
|
function e(e) {
|
|
this._length = 0, this._points = e, this._length = this._computeLength(e)
|
|
}
|
|
return e.CreateQuadraticBezier = function(t, i, n, r) {
|
|
r = r > 2 ? r : 3;
|
|
for (var o = new Array, s = function(e, t, i, n) {
|
|
return (1 - e) * (1 - e) * t + 2 * e * (1 - e) * i + e * e * n
|
|
}, a = 0; a <= r; a++) o.push(new d(s(a / r, t.x, i.x, n.x), s(a / r, t.y, i.y, n.y), s(a / r, t.z, i.z, n.z)));
|
|
return new e(o)
|
|
}, e.CreateCubicBezier = function(t, i, n, r, o) {
|
|
o = o > 3 ? o : 4;
|
|
for (var s = new Array, a = function(e, t, i, n, r) {
|
|
return (1 - e) * (1 - e) * (1 - e) * t + 3 * e * (1 - e) * (1 - e) * i + 3 * e * e * (1 - e) * n + e * e * e * r
|
|
}, c = 0; c <= o; c++) s.push(new d(a(c / o, t.x, i.x, n.x, r.x), a(c / o, t.y, i.y, n.y, r.y), a(c / o, t.z, i.z, n.z, r.z)));
|
|
return new e(s)
|
|
}, e.CreateHermiteSpline = function(t, i, n, r, o) {
|
|
for (var s = new Array, a = 1 / o, c = 0; c <= o; c++) s.push(d.Hermite(t, i, n, r, c * a));
|
|
return new e(s)
|
|
}, e.CreateCatmullRomSpline = function(t, i, n) {
|
|
var r = new Array,
|
|
o = 1 / i,
|
|
s = 0;
|
|
if (n) {
|
|
for (var a = t.length, c = 0; c < a; c++) {
|
|
s = 0;
|
|
for (var l = 0; l < i; l++) r.push(d.CatmullRom(t[c % a], t[(c + 1) % a], t[(c + 2) % a], t[(c + 3) % a], s)), s += o
|
|
}
|
|
r.push(r[0])
|
|
} else {
|
|
var u = new Array;
|
|
u.push(t[0].clone()), Array.prototype.push.apply(u, t), u.push(t[t.length - 1].clone());
|
|
for (c = 0; c < u.length - 3; c++) {
|
|
s = 0;
|
|
for (l = 0; l < i; l++) r.push(d.CatmullRom(u[c], u[c + 1], u[c + 2], u[c + 3], s)), s += o
|
|
}
|
|
c--, r.push(d.CatmullRom(u[c], u[c + 1], u[c + 2], u[c + 3], s))
|
|
}
|
|
return new e(r)
|
|
}, e.prototype.getPoints = function() {
|
|
return this._points
|
|
}, e.prototype.length = function() {
|
|
return this._length
|
|
}, e.prototype.continue = function(t) {
|
|
for (var i = this._points[this._points.length - 1], n = this._points.slice(), r = t.getPoints(), o = 1; o < r.length; o++) n.push(r[o].subtract(r[0]).add(i));
|
|
return new e(n)
|
|
}, e.prototype._computeLength = function(e) {
|
|
for (var t = 0, i = 1; i < e.length; i++) t += e[i].subtract(e[i - 1]).length();
|
|
return t
|
|
}, e
|
|
}(),
|
|
C = function() {
|
|
function e(e, t) {
|
|
void 0 === e && (e = d.Zero()), void 0 === t && (t = d.Up()), this.position = e, this.normal = t
|
|
}
|
|
return e.prototype.clone = function() {
|
|
return new e(this.position.clone(), this.normal.clone())
|
|
}, e
|
|
}(),
|
|
M = function() {
|
|
function e(e, t, i) {
|
|
void 0 === e && (e = d.Zero()), void 0 === t && (t = d.Up()), void 0 === i && (i = h.Zero()), this.position = e, this.normal = t, this.uv = i
|
|
}
|
|
return e.prototype.clone = function() {
|
|
return new e(this.position.clone(), this.normal.clone(), this.uv.clone())
|
|
}, e
|
|
}(),
|
|
O = function() {
|
|
function e() {}
|
|
return e.Color3 = r.a.BuildArray(3, l.Black), e.Color4 = r.a.BuildArray(3, function() {
|
|
return new u(0, 0, 0, 0)
|
|
}), e.Vector2 = r.a.BuildArray(3, h.Zero), e.Vector3 = r.a.BuildArray(13, d.Zero), e.Vector4 = r.a.BuildArray(3, f.Zero), e.Quaternion = r.a.BuildArray(2, _.Zero), e.Matrix = r.a.BuildArray(8, g.Identity), e
|
|
}(),
|
|
I = function() {
|
|
function e() {}
|
|
return e.Vector3 = r.a.BuildArray(6, d.Zero), e.Matrix = r.a.BuildArray(2, g.Identity), e.Quaternion = r.a.BuildArray(3, _.Zero), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "d", function() {
|
|
return r
|
|
}), i.d(t, "a", function() {
|
|
return o
|
|
}), i.d(t, "c", function() {
|
|
return s
|
|
}), i.d(t, "b", function() {
|
|
return a
|
|
}), i.d(t, "e", function() {
|
|
return c
|
|
});
|
|
/*! *****************************************************************************
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
|
|
this file except in compliance with the License. You may obtain a copy of the
|
|
License at http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
|
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
|
MERCHANTABLITY OR NON-INFRINGEMENT.
|
|
|
|
See the Apache Version 2.0 License for specific language governing permissions
|
|
and limitations under the License.
|
|
***************************************************************************** */
|
|
var n = function(e, t) {
|
|
return (n = Object.setPrototypeOf || {
|
|
__proto__: []
|
|
}
|
|
instanceof Array && function(e, t) {
|
|
e.__proto__ = t
|
|
} || function(e, t) {
|
|
for (var i in t) t.hasOwnProperty(i) && (e[i] = t[i])
|
|
})(e, t)
|
|
};
|
|
|
|
function r(e, t) {
|
|
function i() {
|
|
this.constructor = e
|
|
}
|
|
n(e, t), e.prototype = null === t ? Object.create(t) : (i.prototype = t.prototype, new i)
|
|
}
|
|
var o = function() {
|
|
return (o = Object.assign || function(e) {
|
|
for (var t, i = 1, n = arguments.length; i < n; i++)
|
|
for (var r in t = arguments[i]) Object.prototype.hasOwnProperty.call(t, r) && (e[r] = t[r]);
|
|
return e
|
|
}).apply(this, arguments)
|
|
};
|
|
|
|
function s(e, t, i, n) {
|
|
var r, o = arguments.length,
|
|
s = o < 3 ? t : null === n ? n = Object.getOwnPropertyDescriptor(t, i) : n;
|
|
if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) s = Reflect.decorate(e, t, i, n);
|
|
else
|
|
for (var a = e.length - 1; a >= 0; a--)(r = e[a]) && (s = (o < 3 ? r(s) : o > 3 ? r(t, i, s) : r(t, i)) || s);
|
|
return o > 3 && s && Object.defineProperty(t, i, s), s
|
|
}
|
|
|
|
function a(e, t, i, n) {
|
|
return new(i || (i = Promise))(function(r, o) {
|
|
function s(e) {
|
|
try {
|
|
c(n.next(e))
|
|
} catch (e) {
|
|
o(e)
|
|
}
|
|
}
|
|
|
|
function a(e) {
|
|
try {
|
|
c(n.throw(e))
|
|
} catch (e) {
|
|
o(e)
|
|
}
|
|
}
|
|
|
|
function c(e) {
|
|
e.done ? r(e.value) : new i(function(t) {
|
|
t(e.value)
|
|
}).then(s, a)
|
|
}
|
|
c((n = n.apply(e, t || [])).next())
|
|
})
|
|
}
|
|
|
|
function c(e, t) {
|
|
var i, n, r, o, s = {
|
|
label: 0,
|
|
sent: function() {
|
|
if (1 & r[0]) throw r[1];
|
|
return r[1]
|
|
},
|
|
trys: [],
|
|
ops: []
|
|
};
|
|
return o = {
|
|
next: a(0),
|
|
throw: a(1),
|
|
return: a(2)
|
|
}, "function" == typeof Symbol && (o[Symbol.iterator] = function() {
|
|
return this
|
|
}), o;
|
|
|
|
function a(o) {
|
|
return function(a) {
|
|
return function(o) {
|
|
if (i) throw new TypeError("Generator is already executing.");
|
|
for (; s;) try {
|
|
if (i = 1, n && (r = 2 & o[0] ? n.return : o[0] ? n.throw || ((r = n.return) && r.call(n), 0) : n.next) && !(r = r.call(n, o[1])).done) return r;
|
|
switch (n = 0, r && (o = [2 & o[0], r.value]), o[0]) {
|
|
case 0:
|
|
case 1:
|
|
r = o;
|
|
break;
|
|
case 4:
|
|
return s.label++, {
|
|
value: o[1],
|
|
done: !1
|
|
};
|
|
case 5:
|
|
s.label++, n = o[1], o = [0];
|
|
continue;
|
|
case 7:
|
|
o = s.ops.pop(), s.trys.pop();
|
|
continue;
|
|
default:
|
|
if (!(r = (r = s.trys).length > 0 && r[r.length - 1]) && (6 === o[0] || 2 === o[0])) {
|
|
s = 0;
|
|
continue
|
|
}
|
|
if (3 === o[0] && (!r || o[1] > r[0] && o[1] < r[3])) {
|
|
s.label = o[1];
|
|
break
|
|
}
|
|
if (6 === o[0] && s.label < r[1]) {
|
|
s.label = r[1], r = o;
|
|
break
|
|
}
|
|
if (r && s.label < r[2]) {
|
|
s.label = r[2], s.ops.push(o);
|
|
break
|
|
}
|
|
r[2] && s.ops.pop(), s.trys.pop();
|
|
continue
|
|
}
|
|
o = t.call(e, s)
|
|
} catch (e) {
|
|
o = [6, e], n = 0
|
|
} finally {
|
|
i = r = 0
|
|
}
|
|
if (5 & o[0]) throw o[1];
|
|
return {
|
|
value: o[0] ? o[1] : void 0,
|
|
done: !0
|
|
}
|
|
}([o, a])
|
|
}
|
|
}
|
|
}
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "b", function() {
|
|
return h
|
|
}), i.d(t, "c", function() {
|
|
return d
|
|
}), i.d(t, "m", function() {
|
|
return f
|
|
}), i.d(t, "e", function() {
|
|
return p
|
|
}), i.d(t, "h", function() {
|
|
return _
|
|
}), i.d(t, "n", function() {
|
|
return g
|
|
}), i.d(t, "o", function() {
|
|
return m
|
|
}), i.d(t, "k", function() {
|
|
return v
|
|
}), i.d(t, "g", function() {
|
|
return y
|
|
}), i.d(t, "f", function() {
|
|
return b
|
|
}), i.d(t, "i", function() {
|
|
return T
|
|
}), i.d(t, "l", function() {
|
|
return E
|
|
}), i.d(t, "j", function() {
|
|
return A
|
|
}), i.d(t, "d", function() {
|
|
return x
|
|
}), i.d(t, "a", function() {
|
|
return R
|
|
});
|
|
var n = i(29),
|
|
r = i(0),
|
|
o = i(19),
|
|
s = {},
|
|
a = {},
|
|
c = function(e, t, i) {
|
|
var r = e();
|
|
n.a && n.a.AddTagsTo(r, t.tags);
|
|
var o = l(r);
|
|
for (var s in o) {
|
|
var a = o[s],
|
|
c = t[s],
|
|
u = a.type;
|
|
if (null != c && "uniqueId" !== s) switch (u) {
|
|
case 0:
|
|
case 6:
|
|
case 11:
|
|
r[s] = c;
|
|
break;
|
|
case 1:
|
|
r[s] = i || c.isRenderTarget ? c : c.clone();
|
|
break;
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
case 7:
|
|
case 10:
|
|
case 12:
|
|
r[s] = i ? c : c.clone()
|
|
}
|
|
}
|
|
return r
|
|
};
|
|
|
|
function l(e) {
|
|
var t = e.getClassName();
|
|
if (a[t]) return a[t];
|
|
a[t] = {};
|
|
for (var i = a[t], n = e, r = t; r;) {
|
|
var o = s[r];
|
|
for (var c in o) i[c] = o[c];
|
|
var l = void 0,
|
|
u = !1;
|
|
do {
|
|
if (!(l = Object.getPrototypeOf(n)).getClassName) {
|
|
u = !0;
|
|
break
|
|
}
|
|
if (l.getClassName() !== r) break;
|
|
n = l
|
|
} while (l);
|
|
if (u) break;
|
|
r = l.getClassName(), n = l
|
|
}
|
|
return i
|
|
}
|
|
|
|
function u(e, t) {
|
|
return function(i, n) {
|
|
var r = function(e) {
|
|
var t = e.getClassName();
|
|
return s[t] || (s[t] = {}), s[t]
|
|
}(i);
|
|
r[n] || (r[n] = {
|
|
type: e,
|
|
sourceName: t
|
|
})
|
|
}
|
|
}
|
|
|
|
function h(e, t) {
|
|
return void 0 === t && (t = null),
|
|
function(e, t) {
|
|
return void 0 === t && (t = null),
|
|
function(i, n) {
|
|
var r = t || "_" + n;
|
|
Object.defineProperty(i, n, {
|
|
get: function() {
|
|
return this[r]
|
|
},
|
|
set: function(t) {
|
|
this[r] !== t && (this[r] = t, i[e].apply(this))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
})
|
|
}
|
|
}(e, t)
|
|
}
|
|
|
|
function d(e) {
|
|
return u(0, e)
|
|
}
|
|
|
|
function f(e) {
|
|
return u(1, e)
|
|
}
|
|
|
|
function p(e) {
|
|
return u(2, e)
|
|
}
|
|
|
|
function _(e) {
|
|
return u(3, e)
|
|
}
|
|
|
|
function g(e) {
|
|
return u(4, e)
|
|
}
|
|
|
|
function m(e) {
|
|
return u(5, e)
|
|
}
|
|
|
|
function v(e) {
|
|
return u(6, e)
|
|
}
|
|
|
|
function y(e) {
|
|
return u(7, e)
|
|
}
|
|
|
|
function b(e) {
|
|
return u(8, e)
|
|
}
|
|
|
|
function T(e) {
|
|
return u(9, e)
|
|
}
|
|
|
|
function E(e) {
|
|
return u(10, e)
|
|
}
|
|
|
|
function A(e) {
|
|
return u(12, e)
|
|
}
|
|
|
|
function x(e) {
|
|
return u(11, e)
|
|
}
|
|
var R = function() {
|
|
function e() {}
|
|
return e.AppendSerializedAnimations = function(e, t) {
|
|
if (e.animations) {
|
|
t.animations = [];
|
|
for (var i = 0; i < e.animations.length; i++) {
|
|
var n = e.animations[i];
|
|
t.animations.push(n.serialize())
|
|
}
|
|
}
|
|
}, e.Serialize = function(e, t) {
|
|
t || (t = {}), n.a && (t.tags = n.a.GetTags(e));
|
|
var i = l(e);
|
|
for (var r in i) {
|
|
var o = i[r],
|
|
s = o.sourceName || r,
|
|
a = o.type,
|
|
c = e[r];
|
|
if (null != c) switch (a) {
|
|
case 0:
|
|
t[s] = c;
|
|
break;
|
|
case 1:
|
|
t[s] = c.serialize();
|
|
break;
|
|
case 2:
|
|
t[s] = c.asArray();
|
|
break;
|
|
case 3:
|
|
t[s] = c.serialize();
|
|
break;
|
|
case 4:
|
|
case 5:
|
|
t[s] = c.asArray();
|
|
break;
|
|
case 6:
|
|
t[s] = c.id;
|
|
break;
|
|
case 7:
|
|
t[s] = c.serialize();
|
|
break;
|
|
case 8:
|
|
t[s] = c.asArray();
|
|
break;
|
|
case 9:
|
|
t[s] = c.serialize();
|
|
break;
|
|
case 10:
|
|
t[s] = c.asArray();
|
|
break;
|
|
case 11:
|
|
t[s] = c.id;
|
|
case 12:
|
|
t[s] = c.asArray()
|
|
}
|
|
}
|
|
return t
|
|
}, e.Parse = function(t, i, o, s) {
|
|
void 0 === s && (s = null);
|
|
var a = t();
|
|
s || (s = ""), n.a && n.a.AddTagsTo(a, i.tags);
|
|
var c = l(a);
|
|
for (var u in c) {
|
|
var h = c[u],
|
|
d = i[h.sourceName || u],
|
|
f = h.type;
|
|
if (null != d) {
|
|
var p = a;
|
|
switch (f) {
|
|
case 0:
|
|
p[u] = d;
|
|
break;
|
|
case 1:
|
|
o && (p[u] = e._TextureParser(d, o, s));
|
|
break;
|
|
case 2:
|
|
p[u] = r.e.FromArray(d);
|
|
break;
|
|
case 3:
|
|
p[u] = e._FresnelParametersParser(d);
|
|
break;
|
|
case 4:
|
|
p[u] = r.w.FromArray(d);
|
|
break;
|
|
case 5:
|
|
p[u] = r.x.FromArray(d);
|
|
break;
|
|
case 6:
|
|
o && (p[u] = o.getLastMeshByID(d));
|
|
break;
|
|
case 7:
|
|
p[u] = e._ColorCurvesParser(d);
|
|
break;
|
|
case 8:
|
|
p[u] = r.f.FromArray(d);
|
|
break;
|
|
case 9:
|
|
p[u] = e._ImageProcessingConfigurationParser(d);
|
|
break;
|
|
case 10:
|
|
p[u] = r.q.FromArray(d);
|
|
break;
|
|
case 11:
|
|
o && (p[u] = o.getCameraByID(d));
|
|
case 12:
|
|
p[u] = r.j.FromArray(d)
|
|
}
|
|
}
|
|
}
|
|
return a
|
|
}, e.Clone = function(e, t) {
|
|
return c(e, t, !1)
|
|
}, e.Instanciate = function(e, t) {
|
|
return c(e, t, !0)
|
|
}, e._ImageProcessingConfigurationParser = function(e) {
|
|
throw o.a.WarnImport("ImageProcessingConfiguration")
|
|
}, e._FresnelParametersParser = function(e) {
|
|
throw o.a.WarnImport("FresnelParameters")
|
|
}, e._ColorCurvesParser = function(e) {
|
|
throw o.a.WarnImport("ColorCurves")
|
|
}, e._TextureParser = function(e, t, i) {
|
|
throw o.a.WarnImport("Texture")
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return e.ALPHA_DISABLE = 0, e.ALPHA_ADD = 1, e.ALPHA_COMBINE = 2, e.ALPHA_SUBTRACT = 3, e.ALPHA_MULTIPLY = 4, e.ALPHA_MAXIMIZED = 5, e.ALPHA_ONEONE = 6, e.ALPHA_PREMULTIPLIED = 7, e.ALPHA_PREMULTIPLIED_PORTERDUFF = 8, e.ALPHA_INTERPOLATE = 9, e.ALPHA_SCREENMODE = 10, e.DELAYLOADSTATE_NONE = 0, e.DELAYLOADSTATE_LOADED = 1, e.DELAYLOADSTATE_LOADING = 2, e.DELAYLOADSTATE_NOTLOADED = 4, e.NEVER = 512, e.ALWAYS = 519, e.LESS = 513, e.EQUAL = 514, e.LEQUAL = 515, e.GREATER = 516, e.GEQUAL = 518, e.NOTEQUAL = 517, e.KEEP = 7680, e.REPLACE = 7681, e.INCR = 7682, e.DECR = 7683, e.INVERT = 5386, e.INCR_WRAP = 34055, e.DECR_WRAP = 34056, e.TEXTURE_CLAMP_ADDRESSMODE = 0, e.TEXTURE_WRAP_ADDRESSMODE = 1, e.TEXTURE_MIRROR_ADDRESSMODE = 2, e.TEXTUREFORMAT_ALPHA = 0, e.TEXTUREFORMAT_LUMINANCE = 1, e.TEXTUREFORMAT_LUMINANCE_ALPHA = 2, e.TEXTUREFORMAT_RGB = 4, e.TEXTUREFORMAT_RGBA = 5, e.TEXTUREFORMAT_RED = 6, e.TEXTUREFORMAT_R = 6, e.TEXTUREFORMAT_RG = 7, e.TEXTUREFORMAT_RED_INTEGER = 8, e.TEXTUREFORMAT_R_INTEGER = 8, e.TEXTUREFORMAT_RG_INTEGER = 9, e.TEXTUREFORMAT_RGB_INTEGER = 10, e.TEXTUREFORMAT_RGBA_INTEGER = 11, e.TEXTURETYPE_UNSIGNED_BYTE = 0, e.TEXTURETYPE_UNSIGNED_INT = 0, e.TEXTURETYPE_FLOAT = 1, e.TEXTURETYPE_HALF_FLOAT = 2, e.TEXTURETYPE_BYTE = 3, e.TEXTURETYPE_SHORT = 4, e.TEXTURETYPE_UNSIGNED_SHORT = 5, e.TEXTURETYPE_INT = 6, e.TEXTURETYPE_UNSIGNED_INTEGER = 7, e.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4 = 8, e.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1 = 9, e.TEXTURETYPE_UNSIGNED_SHORT_5_6_5 = 10, e.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV = 11, e.TEXTURETYPE_UNSIGNED_INT_24_8 = 12, e.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV = 13, e.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV = 14, e.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV = 15, e.TEXTURE_NEAREST_SAMPLINGMODE = 1, e.TEXTURE_BILINEAR_SAMPLINGMODE = 2, e.TEXTURE_TRILINEAR_SAMPLINGMODE = 3, e.TEXTURE_NEAREST_NEAREST_MIPLINEAR = 1, e.TEXTURE_LINEAR_LINEAR_MIPNEAREST = 2, e.TEXTURE_LINEAR_LINEAR_MIPLINEAR = 3, e.TEXTURE_NEAREST_NEAREST_MIPNEAREST = 4, e.TEXTURE_NEAREST_LINEAR_MIPNEAREST = 5, e.TEXTURE_NEAREST_LINEAR_MIPLINEAR = 6, e.TEXTURE_NEAREST_LINEAR = 7, e.TEXTURE_NEAREST_NEAREST = 8, e.TEXTURE_LINEAR_NEAREST_MIPNEAREST = 9, e.TEXTURE_LINEAR_NEAREST_MIPLINEAR = 10, e.TEXTURE_LINEAR_LINEAR = 11, e.TEXTURE_LINEAR_NEAREST = 12, e.TEXTURE_EXPLICIT_MODE = 0, e.TEXTURE_SPHERICAL_MODE = 1, e.TEXTURE_PLANAR_MODE = 2, e.TEXTURE_CUBIC_MODE = 3, e.TEXTURE_PROJECTION_MODE = 4, e.TEXTURE_SKYBOX_MODE = 5, e.TEXTURE_INVCUBIC_MODE = 6, e.TEXTURE_EQUIRECTANGULAR_MODE = 7, e.TEXTURE_FIXED_EQUIRECTANGULAR_MODE = 8, e.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE = 9, e.SCALEMODE_FLOOR = 1, e.SCALEMODE_NEAREST = 2, e.SCALEMODE_CEILING = 3, e.MATERIAL_TextureDirtyFlag = 1, e.MATERIAL_LightDirtyFlag = 2, e.MATERIAL_FresnelDirtyFlag = 4, e.MATERIAL_AttributesDirtyFlag = 8, e.MATERIAL_MiscDirtyFlag = 16, e.MATERIAL_AllDirtyFlag = 31, e.MATERIAL_TriangleFillMode = 0, e.MATERIAL_WireFrameFillMode = 1, e.MATERIAL_PointFillMode = 2, e.MATERIAL_PointListDrawMode = 3, e.MATERIAL_LineListDrawMode = 4, e.MATERIAL_LineLoopDrawMode = 5, e.MATERIAL_LineStripDrawMode = 6, e.MATERIAL_TriangleStripDrawMode = 7, e.MATERIAL_TriangleFanDrawMode = 8, e.MATERIAL_ClockWiseSideOrientation = 0, e.MATERIAL_CounterClockWiseSideOrientation = 1, e.ACTION_NothingTrigger = 0, e.ACTION_OnPickTrigger = 1, e.ACTION_OnLeftPickTrigger = 2, e.ACTION_OnRightPickTrigger = 3, e.ACTION_OnCenterPickTrigger = 4, e.ACTION_OnPickDownTrigger = 5, e.ACTION_OnDoublePickTrigger = 6, e.ACTION_OnPickUpTrigger = 7, e.ACTION_OnPickOutTrigger = 16, e.ACTION_OnLongPressTrigger = 8, e.ACTION_OnPointerOverTrigger = 9, e.ACTION_OnPointerOutTrigger = 10, e.ACTION_OnEveryFrameTrigger = 11, e.ACTION_OnIntersectionEnterTrigger = 12, e.ACTION_OnIntersectionExitTrigger = 13, e.ACTION_OnKeyDownTrigger = 14, e.ACTION_OnKeyUpTrigger = 15, e.PARTICLES_BILLBOARDMODE_Y = 2, e.PARTICLES_BILLBOARDMODE_ALL = 7, e.PARTICLES_BILLBOARDMODE_STRETCHED = 8, e.PARTICLES_BaseAssetsUrl = "https://assets.babylonjs.com/particles", e.MESHES_CULLINGSTRATEGY_STANDARD = 0, e.MESHES_CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY = 1, e.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION = 2, e.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY = 3, e.SCENELOADER_NO_LOGGING = 0, e.SCENELOADER_MINIMAL_LOGGING = 1, e.SCENELOADER_SUMMARY_LOGGING = 2, e.SCENELOADER_DETAILED_LOGGING = 3, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
}), i.d(t, "b", function() {
|
|
return r
|
|
});
|
|
var n = function() {
|
|
function e(e, t, i, n, r, o, s) {
|
|
void 0 === n && (n = 0), void 0 === r && (r = !1), void 0 === o && (o = !1), void 0 === s && (s = !1), e.getScene ? this._engine = e.getScene().getEngine() : this._engine = e, this._updatable = i, this._instanced = o, this._data = t, this.byteStride = s ? n : n * Float32Array.BYTES_PER_ELEMENT, r || this.create()
|
|
}
|
|
return e.prototype.createVertexBuffer = function(e, t, i, n, o, s) {
|
|
void 0 === s && (s = !1);
|
|
var a = s ? t : t * Float32Array.BYTES_PER_ELEMENT,
|
|
c = n ? s ? n : n * Float32Array.BYTES_PER_ELEMENT : this.byteStride;
|
|
return new r(this._engine, this, e, this._updatable, !0, c, void 0 === o ? this._instanced : o, a, i, void 0, void 0, !0)
|
|
}, e.prototype.isUpdatable = function() {
|
|
return this._updatable
|
|
}, e.prototype.getData = function() {
|
|
return this._data
|
|
}, e.prototype.getBuffer = function() {
|
|
return this._buffer
|
|
}, e.prototype.getStrideSize = function() {
|
|
return this.byteStride / Float32Array.BYTES_PER_ELEMENT
|
|
}, e.prototype.create = function(e) {
|
|
void 0 === e && (e = null), !e && this._buffer || (e = e || this._data) && (this._buffer ? this._updatable && (this._engine.updateDynamicVertexBuffer(this._buffer, e), this._data = e) : this._updatable ? (this._buffer = this._engine.createDynamicVertexBuffer(e), this._data = e) : this._buffer = this._engine.createVertexBuffer(e))
|
|
}, e.prototype._rebuild = function() {
|
|
this._buffer = null, this.create(this._data)
|
|
}, e.prototype.update = function(e) {
|
|
this.create(e)
|
|
}, e.prototype.updateDirectly = function(e, t, i, n) {
|
|
void 0 === n && (n = !1), this._buffer && this._updatable && (this._engine.updateDynamicVertexBuffer(this._buffer, e, n ? t : t * Float32Array.BYTES_PER_ELEMENT, i ? i * this.byteStride : void 0), this._data = null)
|
|
}, e.prototype.dispose = function() {
|
|
this._buffer && this._engine._releaseBuffer(this._buffer) && (this._buffer = null)
|
|
}, e
|
|
}(),
|
|
r = function() {
|
|
function e(t, i, r, o, s, a, c, l, u, h, d, f) {
|
|
if (void 0 === d && (d = !1), void 0 === f && (f = !1), i instanceof n ? (this._buffer = i, this._ownsBuffer = !1) : (this._buffer = new n(t, i, o, a, s, c, f), this._ownsBuffer = !0), this._kind = r, null == h) {
|
|
var p = this.getData();
|
|
this.type = e.FLOAT, p instanceof Int8Array ? this.type = e.BYTE : p instanceof Uint8Array ? this.type = e.UNSIGNED_BYTE : p instanceof Int16Array ? this.type = e.SHORT : p instanceof Uint16Array ? this.type = e.UNSIGNED_SHORT : p instanceof Int32Array ? this.type = e.INT : p instanceof Uint32Array && (this.type = e.UNSIGNED_INT)
|
|
} else this.type = h;
|
|
var _ = e.GetTypeByteLength(this.type);
|
|
f ? (this._size = u || (a ? a / _ : e.DeduceStride(r)), this.byteStride = a || this._buffer.byteStride || this._size * _, this.byteOffset = l || 0) : (this._size = u || a || e.DeduceStride(r), this.byteStride = a ? a * _ : this._buffer.byteStride || this._size * _, this.byteOffset = (l || 0) * _), this.normalized = d, this._instanced = void 0 !== c && c, this._instanceDivisor = c ? 1 : 0
|
|
}
|
|
return Object.defineProperty(e.prototype, "instanceDivisor", {
|
|
get: function() {
|
|
return this._instanceDivisor
|
|
},
|
|
set: function(e) {
|
|
this._instanceDivisor = e, this._instanced = 0 != e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._rebuild = function() {
|
|
this._buffer && this._buffer._rebuild()
|
|
}, e.prototype.getKind = function() {
|
|
return this._kind
|
|
}, e.prototype.isUpdatable = function() {
|
|
return this._buffer.isUpdatable()
|
|
}, e.prototype.getData = function() {
|
|
return this._buffer.getData()
|
|
}, e.prototype.getBuffer = function() {
|
|
return this._buffer.getBuffer()
|
|
}, e.prototype.getStrideSize = function() {
|
|
return this.byteStride / e.GetTypeByteLength(this.type)
|
|
}, e.prototype.getOffset = function() {
|
|
return this.byteOffset / e.GetTypeByteLength(this.type)
|
|
}, e.prototype.getSize = function() {
|
|
return this._size
|
|
}, e.prototype.getIsInstanced = function() {
|
|
return this._instanced
|
|
}, e.prototype.getInstanceDivisor = function() {
|
|
return this._instanceDivisor
|
|
}, e.prototype.create = function(e) {
|
|
this._buffer.create(e)
|
|
}, e.prototype.update = function(e) {
|
|
this._buffer.update(e)
|
|
}, e.prototype.updateDirectly = function(e, t, i) {
|
|
void 0 === i && (i = !1), this._buffer.updateDirectly(e, t, void 0, i)
|
|
}, e.prototype.dispose = function() {
|
|
this._ownsBuffer && this._buffer.dispose()
|
|
}, e.prototype.forEach = function(t, i) {
|
|
e.ForEach(this._buffer.getData(), this.byteOffset, this.byteStride, this._size, this.type, t, this.normalized, i)
|
|
}, e.DeduceStride = function(t) {
|
|
switch (t) {
|
|
case e.UVKind:
|
|
case e.UV2Kind:
|
|
case e.UV3Kind:
|
|
case e.UV4Kind:
|
|
case e.UV5Kind:
|
|
case e.UV6Kind:
|
|
return 2;
|
|
case e.NormalKind:
|
|
case e.PositionKind:
|
|
return 3;
|
|
case e.ColorKind:
|
|
case e.MatricesIndicesKind:
|
|
case e.MatricesIndicesExtraKind:
|
|
case e.MatricesWeightsKind:
|
|
case e.MatricesWeightsExtraKind:
|
|
case e.TangentKind:
|
|
return 4;
|
|
default:
|
|
throw new Error("Invalid kind '" + t + "'")
|
|
}
|
|
}, e.GetTypeByteLength = function(t) {
|
|
switch (t) {
|
|
case e.BYTE:
|
|
case e.UNSIGNED_BYTE:
|
|
return 1;
|
|
case e.SHORT:
|
|
case e.UNSIGNED_SHORT:
|
|
return 2;
|
|
case e.INT:
|
|
case e.FLOAT:
|
|
return 4;
|
|
default:
|
|
throw new Error("Invalid type '" + t + "'")
|
|
}
|
|
}, e.ForEach = function(t, i, n, r, o, s, a, c) {
|
|
if (t instanceof Array)
|
|
for (var l = i / 4, u = n / 4, h = 0; h < s; h += r) {
|
|
for (var d = 0; d < r; d++) c(t[l + d], h + d);
|
|
l += u
|
|
} else {
|
|
var f = t instanceof ArrayBuffer ? new DataView(t) : new DataView(t.buffer, t.byteOffset, t.byteLength),
|
|
p = e.GetTypeByteLength(o);
|
|
for (h = 0; h < s; h += r) {
|
|
var _ = i;
|
|
for (d = 0; d < r; d++) {
|
|
c(e._GetFloatValue(f, o, _, a), h + d), _ += p
|
|
}
|
|
i += n
|
|
}
|
|
}
|
|
}, e._GetFloatValue = function(t, i, n, r) {
|
|
switch (i) {
|
|
case e.BYTE:
|
|
var o = t.getInt8(n);
|
|
return r && (o = Math.max(o / 127, -1)), o;
|
|
case e.UNSIGNED_BYTE:
|
|
o = t.getUint8(n);
|
|
return r && (o /= 255), o;
|
|
case e.SHORT:
|
|
o = t.getInt16(n, !0);
|
|
return r && (o = Math.max(o / 16383, -1)), o;
|
|
case e.UNSIGNED_SHORT:
|
|
o = t.getUint16(n, !0);
|
|
return r && (o /= 65535), o;
|
|
case e.FLOAT:
|
|
return t.getFloat32(n, !0);
|
|
default:
|
|
throw new Error("Invalid component type " + i)
|
|
}
|
|
}, e.BYTE = 5120, e.UNSIGNED_BYTE = 5121, e.SHORT = 5122, e.UNSIGNED_SHORT = 5123, e.INT = 5124, e.UNSIGNED_INT = 5125, e.FLOAT = 5126, e.PositionKind = "position", e.NormalKind = "normal", e.TangentKind = "tangent", e.UVKind = "uv", e.UV2Kind = "uv2", e.UV3Kind = "uv3", e.UV4Kind = "uv4", e.UV5Kind = "uv5", e.UV6Kind = "uv6", e.ColorKind = "color", e.MatricesIndicesKind = "matricesIndices", e.MatricesWeightsKind = "matricesWeights", e.MatricesIndicesExtraKind = "matricesIndicesExtra", e.MatricesWeightsExtraKind = "matricesWeightsExtra", e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "c", function() {
|
|
return a
|
|
}), i.d(t, "b", function() {
|
|
return c
|
|
}), i.d(t, "a", function() {
|
|
return l
|
|
});
|
|
var n = i(8),
|
|
r = i(3),
|
|
o = i(35),
|
|
s = i(6),
|
|
a = function() {
|
|
function e() {
|
|
this._defines = {}, this._currentRank = 32, this._maxRank = -1, this._mesh = null
|
|
}
|
|
return e.prototype.unBindMesh = function() {
|
|
this._mesh = null
|
|
}, e.prototype.addFallback = function(e, t) {
|
|
this._defines[e] || (e < this._currentRank && (this._currentRank = e), e > this._maxRank && (this._maxRank = e), this._defines[e] = new Array), this._defines[e].push(t)
|
|
}, e.prototype.addCPUSkinningFallback = function(e, t) {
|
|
this._mesh = t, e < this._currentRank && (this._currentRank = e), e > this._maxRank && (this._maxRank = e)
|
|
}, Object.defineProperty(e.prototype, "isMoreFallbacks", {
|
|
get: function() {
|
|
return this._currentRank <= this._maxRank
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.reduce = function(e, t) {
|
|
if (this._mesh && this._mesh.computeBonesUsingShaders && this._mesh.numBoneInfluencers > 0 && this._mesh.material) {
|
|
this._mesh.computeBonesUsingShaders = !1, e = e.replace("#define NUM_BONE_INFLUENCERS " + this._mesh.numBoneInfluencers, "#define NUM_BONE_INFLUENCERS 0"), t._bonesComputationForcedToCPU = !0;
|
|
for (var i = this._mesh.getScene(), n = 0; n < i.meshes.length; n++) {
|
|
var r = i.meshes[n];
|
|
if (r.material && (r.computeBonesUsingShaders && 0 !== r.numBoneInfluencers))
|
|
if (r.material.getEffect() === t) r.computeBonesUsingShaders = !1;
|
|
else if (r.subMeshes)
|
|
for (var o = 0, s = r.subMeshes; o < s.length; o++) {
|
|
if (s[o].effect === t) {
|
|
r.computeBonesUsingShaders = !1;
|
|
break
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
var a = this._defines[this._currentRank];
|
|
if (a)
|
|
for (n = 0; n < a.length; n++) e = e.replace("#define " + a[n], "");
|
|
this._currentRank++
|
|
}
|
|
return e
|
|
}, e
|
|
}(),
|
|
c = function() {
|
|
return function() {}
|
|
}(),
|
|
l = function() {
|
|
function e(t, i, r, o, s, a, c, l, u, h) {
|
|
var d, f, p = this;
|
|
if (void 0 === o && (o = null), void 0 === a && (a = null), void 0 === c && (c = null), void 0 === l && (l = null), void 0 === u && (u = null), this.name = null, this.defines = "", this.onCompiled = null, this.onError = null, this.onBind = null, this.uniqueId = 0, this.onCompileObservable = new n.c, this.onErrorObservable = new n.c, this._onBindObservable = null, this._bonesComputationForcedToCPU = !1, this._uniformBuffersNames = {}, this._samplers = {}, this._isReady = !1, this._compilationError = "", this._uniforms = {}, this._key = "", this._fallbacks = null, this._vertexSourceCode = "", this._fragmentSourceCode = "", this._vertexSourceCodeOverride = "", this._fragmentSourceCodeOverride = "", this._transformFeedbackVaryings = null, this._pipelineContext = null, this._valueCache = {}, this.name = t, i.attributes) {
|
|
var _ = i;
|
|
if (this._engine = r, this._attributesNames = _.attributes, this._uniformsNames = _.uniformsNames.concat(_.samplers), this._samplerList = _.samplers.slice(), this.defines = _.defines, this.onError = _.onError, this.onCompiled = _.onCompiled, this._fallbacks = _.fallbacks, this._indexParameters = _.indexParameters, this._transformFeedbackVaryings = _.transformFeedbackVaryings, _.uniformBuffersNames)
|
|
for (var g = 0; g < _.uniformBuffersNames.length; g++) this._uniformBuffersNames[_.uniformBuffersNames[g]] = g
|
|
} else this._engine = s, this.defines = null == a ? "" : a, this._uniformsNames = r.concat(o), this._samplerList = o ? o.slice() : [], this._attributesNames = i, this.onError = u, this.onCompiled = l, this._indexParameters = h, this._fallbacks = c;
|
|
this.uniqueId = e._uniqueIdSeed++, t.vertexElement ? (d = document.getElementById(t.vertexElement)) || (d = t.vertexElement) : d = t.vertex || t, t.fragmentElement ? (f = document.getElementById(t.fragmentElement)) || (f = t.fragmentElement) : f = t.fragment || t, this._loadVertexShader(d, function(e) {
|
|
p._processIncludes(e, function(e) {
|
|
p._processShaderConversion(e, !1, function(e) {
|
|
p._loadFragmentShader(f, function(i) {
|
|
p._processIncludes(i, function(i) {
|
|
p._processShaderConversion(i, !0, function(i) {
|
|
if (t) {
|
|
var n = t.vertexElement || t.vertex || t,
|
|
r = t.fragmentElement || t.fragment || t;
|
|
p._vertexSourceCode = "#define SHADER_NAME vertex:" + n + "\n" + e, p._fragmentSourceCode = "#define SHADER_NAME fragment:" + r + "\n" + i
|
|
} else p._vertexSourceCode = e, p._fragmentSourceCode = i;
|
|
p._prepareEffect()
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|
|
}
|
|
return Object.defineProperty(e.prototype, "onBindObservable", {
|
|
get: function() {
|
|
return this._onBindObservable || (this._onBindObservable = new n.c), this._onBindObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "key", {
|
|
get: function() {
|
|
return this._key
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.isReady = function() {
|
|
return !!this._isReady || !!this._pipelineContext && this._pipelineContext.isReady
|
|
}, e.prototype.getEngine = function() {
|
|
return this._engine
|
|
}, e.prototype.getPipelineContext = function() {
|
|
return this._pipelineContext
|
|
}, e.prototype.getAttributesNames = function() {
|
|
return this._attributesNames
|
|
}, e.prototype.getAttributeLocation = function(e) {
|
|
return this._attributes[e]
|
|
}, e.prototype.getAttributeLocationByName = function(e) {
|
|
var t = this._attributesNames.indexOf(e);
|
|
return this._attributes[t]
|
|
}, e.prototype.getAttributesCount = function() {
|
|
return this._attributes.length
|
|
}, e.prototype.getUniformIndex = function(e) {
|
|
return this._uniformsNames.indexOf(e)
|
|
}, e.prototype.getUniform = function(e) {
|
|
return this._uniforms[e]
|
|
}, e.prototype.getSamplers = function() {
|
|
return this._samplerList
|
|
}, e.prototype.getCompilationError = function() {
|
|
return this._compilationError
|
|
}, e.prototype.executeWhenCompiled = function(e) {
|
|
var t = this;
|
|
this.isReady() ? e(this) : (this.onCompileObservable.add(function(t) {
|
|
e(t)
|
|
}), this._pipelineContext && !this._pipelineContext.isAsync || setTimeout(function() {
|
|
t._checkIsReady()
|
|
}, 16))
|
|
}, e.prototype._checkIsReady = function() {
|
|
var e = this;
|
|
this.isReady() || setTimeout(function() {
|
|
e._checkIsReady()
|
|
}, 16)
|
|
}, e.prototype._loadVertexShader = function(t, i) {
|
|
var n;
|
|
if (o.a.IsWindowObjectExist() && t instanceof HTMLElement) return void i(o.a.GetDOMTextContent(t));
|
|
"base64:" !== t.substr(0, 7) ? e.ShadersStore[t + "VertexShader"] ? i(e.ShadersStore[t + "VertexShader"]) : (n = "." === t[0] || "/" === t[0] || t.indexOf("http") > -1 ? t : e.ShadersRepository + t, this._engine._loadFile(n + ".vertex.fx", i)) : i(window.atob(t.substr(7)))
|
|
}, e.prototype._loadFragmentShader = function(t, i) {
|
|
var n;
|
|
if (o.a.IsWindowObjectExist() && t instanceof HTMLElement) return void i(o.a.GetDOMTextContent(t));
|
|
"base64:" !== t.substr(0, 7) ? e.ShadersStore[t + "PixelShader"] ? i(e.ShadersStore[t + "PixelShader"]) : e.ShadersStore[t + "FragmentShader"] ? i(e.ShadersStore[t + "FragmentShader"]) : (n = "." === t[0] || "/" === t[0] || t.indexOf("http") > -1 ? t : e.ShadersRepository + t, this._engine._loadFile(n + ".fragment.fx", i)) : i(window.atob(t.substr(7)))
|
|
}, e.prototype._dumpShadersSource = function(e, t, i) {
|
|
var n = (this._engine.webGLVersion > 1 ? "#version 300 es\n#define WEBGL2 \n" : "") + (i ? i + "\n" : "");
|
|
t = n + t;
|
|
var r = 2,
|
|
o = /\n/gm,
|
|
a = "\n1\t" + (e = n + e).replace(o, function() {
|
|
return "\n" + r++ + "\t"
|
|
});
|
|
r = 2;
|
|
var c = "\n1\t" + t.replace(o, function() {
|
|
return "\n" + r++ + "\t"
|
|
});
|
|
this.name.vertexElement ? (s.a.Error("Vertex shader: " + this.name.vertexElement + a), s.a.Error("Fragment shader: " + this.name.fragmentElement + c)) : this.name.vertex ? (s.a.Error("Vertex shader: " + this.name.vertex + a), s.a.Error("Fragment shader: " + this.name.fragment + c)) : (s.a.Error("Vertex shader: " + this.name + a), s.a.Error("Fragment shader: " + this.name + c))
|
|
}, e.prototype._processShaderConversion = function(e, t, i) {
|
|
var n = this._processPrecision(e);
|
|
if (1 != this._engine.webGLVersion)
|
|
if (-1 === n.indexOf("#version 3")) {
|
|
var r = -1 !== n.search(/#extension.+GL_EXT_draw_buffers.+require/),
|
|
o = n.replace(/#extension.+(GL_OVR_multiview2|GL_OES_standard_derivatives|GL_EXT_shader_texture_lod|GL_EXT_frag_depth|GL_EXT_draw_buffers).+(enable|require)/g, "");
|
|
o = (o = (o = (o = o.replace(/varying(?![\n\r])\s/g, t ? "in " : "out ")).replace(/attribute[ \t]/g, "in ")).replace(/[ \t]attribute/g, " in")).replace(/texture2D\s*\(/g, "texture("), t && (o = (o = (o = (o = (o = (o = (o = o.replace(/texture2DLodEXT\s*\(/g, "textureLod(")).replace(/textureCubeLodEXT\s*\(/g, "textureLod(")).replace(/textureCube\s*\(/g, "texture(")).replace(/gl_FragDepthEXT/g, "gl_FragDepth")).replace(/gl_FragColor/g, "glFragColor")).replace(/gl_FragData/g, "glFragData")).replace(/void\s+?main\s*\(/g, (r ? "" : "out vec4 glFragColor;\n") + "void main(")), -1 !== this.defines.indexOf("#define MULTIVIEW\n") && !t && (o = "#extension GL_OVR_multiview2 : require\nlayout (num_views = 2) in;\n" + o), i(o)
|
|
} else i(n.replace("#version 300 es", ""));
|
|
else i(n)
|
|
}, e.prototype._processIncludes = function(t, i) {
|
|
for (var n = this, r = /#include<(.+)>(\((.*)\))*(\[(.*)\])*/g, o = r.exec(t), s = new String(t); null != o;) {
|
|
var a = o[1];
|
|
if (-1 !== a.indexOf("__decl__") && (a = a.replace(/__decl__/, ""), this._engine.supportsUniformBuffers && (a = (a = a.replace(/Vertex/, "Ubo")).replace(/Fragment/, "Ubo")), a += "Declaration"), !e.IncludesShadersStore[a]) {
|
|
var c = e.ShadersRepository + "ShadersInclude/" + a + ".fx";
|
|
return void this._engine._loadFile(c, function(t) {
|
|
e.IncludesShadersStore[a] = t, n._processIncludes(s, i)
|
|
})
|
|
}
|
|
var l = e.IncludesShadersStore[a];
|
|
if (o[2])
|
|
for (var u = o[3].split(","), h = 0; h < u.length; h += 2) {
|
|
var d = new RegExp(u[h], "g"),
|
|
f = u[h + 1];
|
|
l = l.replace(d, f)
|
|
}
|
|
if (o[4]) {
|
|
var p = o[5];
|
|
if (-1 !== p.indexOf("..")) {
|
|
var _ = p.split(".."),
|
|
g = parseInt(_[0]),
|
|
m = parseInt(_[1]),
|
|
v = l.slice(0);
|
|
l = "", isNaN(m) && (m = this._indexParameters[_[1]]);
|
|
for (var y = g; y < m; y++) this._engine.supportsUniformBuffers || (v = v.replace(/light\{X\}.(\w*)/g, function(e, t) {
|
|
return t + "{X}"
|
|
})), l += v.replace(/\{X\}/g, y.toString()) + "\n"
|
|
} else this._engine.supportsUniformBuffers || (l = l.replace(/light\{X\}.(\w*)/g, function(e, t) {
|
|
return t + "{X}"
|
|
})), l = l.replace(/\{X\}/g, p)
|
|
}
|
|
s = s.replace(o[0], l), o = r.exec(t)
|
|
}
|
|
i(s)
|
|
}, e.prototype._processPrecision = function(e) {
|
|
var t = this._engine._shouldUseHighPrecisionShader;
|
|
return -1 === e.indexOf("precision highp float") ? e = t ? "precision highp float;\n" + e : "precision mediump float;\n" + e : t || (e = e.replace("precision highp float", "precision mediump float")), e
|
|
}, e.prototype._rebuildProgram = function(e, t, i, n) {
|
|
var o = this;
|
|
this._isReady = !1, this._vertexSourceCodeOverride = e, this._fragmentSourceCodeOverride = t, this.onError = function(e, t) {
|
|
n && n(t)
|
|
}, this.onCompiled = function() {
|
|
for (var e = o.getEngine().scenes, t = 0; t < e.length; t++) e[t].markAllMaterialsAsDirty(r.a.MATERIAL_AllDirtyFlag);
|
|
o._pipelineContext._handlesSpectorRebuildCallback(i)
|
|
}, this._fallbacks = null, this._prepareEffect()
|
|
}, e.prototype._prepareEffect = function() {
|
|
var e = this,
|
|
t = this._attributesNames,
|
|
i = this.defines,
|
|
n = this._fallbacks;
|
|
this._valueCache = {};
|
|
var r = this._pipelineContext;
|
|
try {
|
|
var o = this._engine;
|
|
this._pipelineContext = o.createPipelineContext();
|
|
var a = this._rebuildProgram.bind(this);
|
|
this._vertexSourceCodeOverride && this._fragmentSourceCodeOverride ? o._preparePipelineContext(this._pipelineContext, this._vertexSourceCodeOverride, this._fragmentSourceCodeOverride, !0, a, null, this._transformFeedbackVaryings) : o._preparePipelineContext(this._pipelineContext, this._vertexSourceCode, this._fragmentSourceCode, !1, a, i, this._transformFeedbackVaryings), o._executeWhenRenderingStateIsCompiled(this._pipelineContext, function() {
|
|
if (o.supportsUniformBuffers)
|
|
for (var i in e._uniformBuffersNames) e.bindUniformBlock(i, e._uniformBuffersNames[i]);
|
|
var n;
|
|
for (o.getUniforms(e._pipelineContext, e._uniformsNames).forEach(function(t, i) {
|
|
e._uniforms[e._uniformsNames[i]] = t
|
|
}), e._attributes = o.getAttributes(e._pipelineContext, t), n = 0; n < e._samplerList.length; n++) {
|
|
null == e.getUniform(e._samplerList[n]) && (e._samplerList.splice(n, 1), n--)
|
|
}
|
|
e._samplerList.forEach(function(t, i) {
|
|
e._samplers[t] = i
|
|
}), o.bindSamplers(e), e._compilationError = "", e._isReady = !0, e.onCompiled && e.onCompiled(e), e.onCompileObservable.notifyObservers(e), e.onCompileObservable.clear(), e._fallbacks && e._fallbacks.unBindMesh(), r && e.getEngine()._deletePipelineContext(r)
|
|
}), this._pipelineContext.isAsync && this._checkIsReady()
|
|
} catch (e) {
|
|
this._compilationError = e.message, s.a.Error("Unable to compile effect:"), s.a.Error("Uniforms: " + this._uniformsNames.map(function(e) {
|
|
return " " + e
|
|
})), s.a.Error("Attributes: " + t.map(function(e) {
|
|
return " " + e
|
|
})), s.a.Error("Error: " + this._compilationError), r && (this._pipelineContext = r, this._isReady = !0, this.onError && this.onError(this, this._compilationError), this.onErrorObservable.notifyObservers(this)), n && n.isMoreFallbacks ? (s.a.Error("Trying next fallback."), this.defines = n.reduce(this.defines, this), this._prepareEffect()) : (this.onError && this.onError(this, this._compilationError), this.onErrorObservable.notifyObservers(this), this.onErrorObservable.clear(), this._fallbacks && this._fallbacks.unBindMesh())
|
|
}
|
|
}, Object.defineProperty(e.prototype, "isSupported", {
|
|
get: function() {
|
|
return "" === this._compilationError
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._bindTexture = function(e, t) {
|
|
this._engine._bindTexture(this._samplers[e], t)
|
|
}, e.prototype.setTexture = function(e, t) {
|
|
this._engine.setTexture(this._samplers[e], this._uniforms[e], t)
|
|
}, e.prototype.setDepthStencilTexture = function(e, t) {
|
|
this._engine.setDepthStencilTexture(this._samplers[e], this._uniforms[e], t)
|
|
}, e.prototype.setTextureArray = function(e, t) {
|
|
var i = e + "Ex";
|
|
if (-1 === this._samplerList.indexOf(i))
|
|
for (var n = this._samplers[e], r = 1; r < t.length; r++) this._samplerList.splice(n + r, 0, i), this._samplers[i] = n + r;
|
|
this._engine.setTextureArray(this._samplers[e], this._uniforms[e], t)
|
|
}, e.prototype.setTextureFromPostProcess = function(e, t) {
|
|
this._engine.setTextureFromPostProcess(this._samplers[e], t)
|
|
}, e.prototype.setTextureFromPostProcessOutput = function(e, t) {
|
|
this._engine.setTextureFromPostProcessOutput(this._samplers[e], t)
|
|
}, e.prototype._cacheMatrix = function(e, t) {
|
|
var i = this._valueCache[e],
|
|
n = t.updateFlag;
|
|
return (void 0 === i || i !== n) && (this._valueCache[e] = n, !0)
|
|
}, e.prototype._cacheFloat2 = function(e, t, i) {
|
|
var n = this._valueCache[e];
|
|
if (!n) return n = [t, i], this._valueCache[e] = n, !0;
|
|
var r = !1;
|
|
return n[0] !== t && (n[0] = t, r = !0), n[1] !== i && (n[1] = i, r = !0), r
|
|
}, e.prototype._cacheFloat3 = function(e, t, i, n) {
|
|
var r = this._valueCache[e];
|
|
if (!r) return r = [t, i, n], this._valueCache[e] = r, !0;
|
|
var o = !1;
|
|
return r[0] !== t && (r[0] = t, o = !0), r[1] !== i && (r[1] = i, o = !0), r[2] !== n && (r[2] = n, o = !0), o
|
|
}, e.prototype._cacheFloat4 = function(e, t, i, n, r) {
|
|
var o = this._valueCache[e];
|
|
if (!o) return o = [t, i, n, r], this._valueCache[e] = o, !0;
|
|
var s = !1;
|
|
return o[0] !== t && (o[0] = t, s = !0), o[1] !== i && (o[1] = i, s = !0), o[2] !== n && (o[2] = n, s = !0), o[3] !== r && (o[3] = r, s = !0), s
|
|
}, e.prototype.bindUniformBuffer = function(t, i) {
|
|
var n = this._uniformBuffersNames[i];
|
|
void 0 !== n && e._baseCache[n] !== t && (e._baseCache[n] = t, this._engine.bindUniformBufferBase(t, n))
|
|
}, e.prototype.bindUniformBlock = function(e, t) {
|
|
this._engine.bindUniformBlock(this._pipelineContext, e, t)
|
|
}, e.prototype.setInt = function(e, t) {
|
|
var i = this._valueCache[e];
|
|
return void 0 !== i && i === t ? this : (this._valueCache[e] = t, this._engine.setInt(this._uniforms[e], t), this)
|
|
}, e.prototype.setIntArray = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setIntArray(this._uniforms[e], t), this
|
|
}, e.prototype.setIntArray2 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setIntArray2(this._uniforms[e], t), this
|
|
}, e.prototype.setIntArray3 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setIntArray3(this._uniforms[e], t), this
|
|
}, e.prototype.setIntArray4 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setIntArray4(this._uniforms[e], t), this
|
|
}, e.prototype.setFloatArray = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setFloatArray(this._uniforms[e], t), this
|
|
}, e.prototype.setFloatArray2 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setFloatArray2(this._uniforms[e], t), this
|
|
}, e.prototype.setFloatArray3 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setFloatArray3(this._uniforms[e], t), this
|
|
}, e.prototype.setFloatArray4 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setFloatArray4(this._uniforms[e], t), this
|
|
}, e.prototype.setArray = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setArray(this._uniforms[e], t), this
|
|
}, e.prototype.setArray2 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setArray2(this._uniforms[e], t), this
|
|
}, e.prototype.setArray3 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setArray3(this._uniforms[e], t), this
|
|
}, e.prototype.setArray4 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setArray4(this._uniforms[e], t), this
|
|
}, e.prototype.setMatrices = function(e, t) {
|
|
return t ? (this._valueCache[e] = null, this._engine.setMatrices(this._uniforms[e], t), this) : this
|
|
}, e.prototype.setMatrix = function(e, t) {
|
|
return this._cacheMatrix(e, t) && this._engine.setMatrix(this._uniforms[e], t), this
|
|
}, e.prototype.setMatrix3x3 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setMatrix3x3(this._uniforms[e], t), this
|
|
}, e.prototype.setMatrix2x2 = function(e, t) {
|
|
return this._valueCache[e] = null, this._engine.setMatrix2x2(this._uniforms[e], t), this
|
|
}, e.prototype.setFloat = function(e, t) {
|
|
var i = this._valueCache[e];
|
|
return void 0 !== i && i === t ? this : (this._valueCache[e] = t, this._engine.setFloat(this._uniforms[e], t), this)
|
|
}, e.prototype.setBool = function(e, t) {
|
|
var i = this._valueCache[e];
|
|
return void 0 !== i && i === t ? this : (this._valueCache[e] = t, this._engine.setBool(this._uniforms[e], t ? 1 : 0), this)
|
|
}, e.prototype.setVector2 = function(e, t) {
|
|
return this._cacheFloat2(e, t.x, t.y) && this._engine.setFloat2(this._uniforms[e], t.x, t.y), this
|
|
}, e.prototype.setFloat2 = function(e, t, i) {
|
|
return this._cacheFloat2(e, t, i) && this._engine.setFloat2(this._uniforms[e], t, i), this
|
|
}, e.prototype.setVector3 = function(e, t) {
|
|
return this._cacheFloat3(e, t.x, t.y, t.z) && this._engine.setFloat3(this._uniforms[e], t.x, t.y, t.z), this
|
|
}, e.prototype.setFloat3 = function(e, t, i, n) {
|
|
return this._cacheFloat3(e, t, i, n) && this._engine.setFloat3(this._uniforms[e], t, i, n), this
|
|
}, e.prototype.setVector4 = function(e, t) {
|
|
return this._cacheFloat4(e, t.x, t.y, t.z, t.w) && this._engine.setFloat4(this._uniforms[e], t.x, t.y, t.z, t.w), this
|
|
}, e.prototype.setFloat4 = function(e, t, i, n, r) {
|
|
return this._cacheFloat4(e, t, i, n, r) && this._engine.setFloat4(this._uniforms[e], t, i, n, r), this
|
|
}, e.prototype.setColor3 = function(e, t) {
|
|
return this._cacheFloat3(e, t.r, t.g, t.b) && this._engine.setColor3(this._uniforms[e], t), this
|
|
}, e.prototype.setColor4 = function(e, t, i) {
|
|
return this._cacheFloat4(e, t.r, t.g, t.b, i) && this._engine.setColor4(this._uniforms[e], t, i), this
|
|
}, e.prototype.setDirectColor4 = function(e, t) {
|
|
return this._cacheFloat4(e, t.r, t.g, t.b, t.a) && this._engine.setDirectColor4(this._uniforms[e], t), this
|
|
}, e.prototype.dispose = function() {
|
|
this._engine._releaseEffect(this)
|
|
}, e.RegisterShader = function(t, i, n) {
|
|
i && (e.ShadersStore[t + "PixelShader"] = i), n && (e.ShadersStore[t + "VertexShader"] = n)
|
|
}, e.ResetCache = function() {
|
|
e._baseCache = {}
|
|
}, e.ShadersRepository = "src/Shaders/", e._uniqueIdSeed = 0, e._baseCache = {}, e.ShadersStore = {}, e.IncludesShadersStore = {}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return e._AddLogEntry = function(t) {
|
|
e._LogCache = t + e._LogCache, e.OnNewCacheEntry && e.OnNewCacheEntry(t)
|
|
}, e._FormatMessage = function(e) {
|
|
var t = function(e) {
|
|
return e < 10 ? "0" + e : "" + e
|
|
},
|
|
i = new Date;
|
|
return "[" + t(i.getHours()) + ":" + t(i.getMinutes()) + ":" + t(i.getSeconds()) + "]: " + e
|
|
}, e._LogDisabled = function(e) {}, e._LogEnabled = function(t) {
|
|
var i = e._FormatMessage(t);
|
|
console.log("BJS - " + i);
|
|
var n = "<div style='color:white'>" + i + "</div><br>";
|
|
e._AddLogEntry(n)
|
|
}, e._WarnDisabled = function(e) {}, e._WarnEnabled = function(t) {
|
|
var i = e._FormatMessage(t);
|
|
console.warn("BJS - " + i);
|
|
var n = "<div style='color:orange'>" + i + "</div><br>";
|
|
e._AddLogEntry(n)
|
|
}, e._ErrorDisabled = function(e) {}, e._ErrorEnabled = function(t) {
|
|
e.errorsCount++;
|
|
var i = e._FormatMessage(t);
|
|
console.error("BJS - " + i);
|
|
var n = "<div style='color:red'>" + i + "</div><br>";
|
|
e._AddLogEntry(n)
|
|
}, Object.defineProperty(e, "LogCache", {
|
|
get: function() {
|
|
return e._LogCache
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.ClearLogCache = function() {
|
|
e._LogCache = "", e.errorsCount = 0
|
|
}, Object.defineProperty(e, "LogLevels", {
|
|
set: function(t) {
|
|
(t & e.MessageLogLevel) === e.MessageLogLevel ? e.Log = e._LogEnabled : e.Log = e._LogDisabled, (t & e.WarningLogLevel) === e.WarningLogLevel ? e.Warn = e._WarnEnabled : e.Warn = e._WarnDisabled, (t & e.ErrorLogLevel) === e.ErrorLogLevel ? e.Error = e._ErrorEnabled : e.Error = e._ErrorDisabled
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.NoneLogLevel = 0, e.MessageLogLevel = 1, e.WarningLogLevel = 2, e.ErrorLogLevel = 4, e.AllLogLevel = 7, e._LogCache = "", e.errorsCount = 0, e.Log = e._LogEnabled, e.Warn = e._WarnEnabled, e.Error = e._ErrorEnabled, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return d
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(8),
|
|
s = i(9),
|
|
a = i(0),
|
|
c = i(44),
|
|
l = i(3),
|
|
u = i(22),
|
|
h = i(19),
|
|
d = function(e) {
|
|
function t(i, n, r, a, c, u, h, d, f, p) {
|
|
void 0 === r && (r = !1), void 0 === a && (a = !0), void 0 === c && (c = t.TRILINEAR_SAMPLINGMODE), void 0 === u && (u = null), void 0 === h && (h = null), void 0 === d && (d = null), void 0 === f && (f = !1);
|
|
var _ = e.call(this, n) || this;
|
|
if (_.url = null, _.uOffset = 0, _.vOffset = 0, _.uScale = 1, _.vScale = 1, _.uAng = 0, _.vAng = 0, _.wAng = 0, _.uRotationCenter = .5, _.vRotationCenter = .5, _.wRotationCenter = .5, _.inspectableCustomProperties = null, _._noMipmap = !1, _._invertY = !1, _._rowGenerationMatrix = null, _._cachedTextureMatrix = null, _._projectionModeMatrix = null, _._t0 = null, _._t1 = null, _._t2 = null, _._cachedUOffset = -1, _._cachedVOffset = -1, _._cachedUScale = 0, _._cachedVScale = 0, _._cachedUAng = -1, _._cachedVAng = -1, _._cachedWAng = -1, _._cachedProjectionMatrixId = -1, _._cachedCoordinatesMode = -1, _._initialSamplingMode = t.BILINEAR_SAMPLINGMODE, _._buffer = null, _._deleteBuffer = !1, _._format = null, _._delayedOnLoad = null, _._delayedOnError = null, _.onLoadObservable = new o.c, _._isBlocking = !0, _.name = i || "", _.url = i, _._noMipmap = r, _._invertY = a, _._initialSamplingMode = c, _._buffer = d, _._deleteBuffer = f, p && (_._format = p), !(n = _.getScene())) return _;
|
|
n.getEngine().onBeforeTextureInitObservable.notifyObservers(_);
|
|
var g = function() {
|
|
_._texture && _._texture._invertVScale && (_.vScale = -1), _.onLoadObservable.hasObservers() && _.onLoadObservable.notifyObservers(_), u && u(), !_.isBlocking && n && n.resetCachedMaterial()
|
|
};
|
|
return _.url ? (_._texture = _._getFromCache(_.url, r, c, a), _._texture ? _._texture.isReady ? s.h.SetImmediate(function() {
|
|
return g()
|
|
}) : _._texture.onLoadedObservable.add(g) : n.useDelayedTextureLoading ? (_.delayLoadState = l.a.DELAYLOADSTATE_NOTLOADED, _._delayedOnLoad = g, _._delayedOnError = h) : (_._texture = n.getEngine().createTexture(_.url, r, a, n, c, g, h, _._buffer, void 0, _._format), f && delete _._buffer), _) : (_._delayedOnLoad = g, _._delayedOnError = h, _)
|
|
}
|
|
return n.d(t, e), Object.defineProperty(t.prototype, "noMipmap", {
|
|
get: function() {
|
|
return this._noMipmap
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "isBlocking", {
|
|
get: function() {
|
|
return this._isBlocking
|
|
},
|
|
set: function(e) {
|
|
this._isBlocking = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "samplingMode", {
|
|
get: function() {
|
|
return this._texture ? this._texture.samplingMode : this._initialSamplingMode
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "invertY", {
|
|
get: function() {
|
|
return this._invertY
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.updateURL = function(e, t, i) {
|
|
void 0 === t && (t = null), this.url && (this.releaseInternalTexture(), this.getScene().markAllMaterialsAsDirty(l.a.MATERIAL_TextureDirtyFlag)), this.url = e, this._buffer = t, this.delayLoadState = l.a.DELAYLOADSTATE_NOTLOADED, i && (this._delayedOnLoad = i), this.delayLoad()
|
|
}, t.prototype.delayLoad = function() {
|
|
if (this.delayLoadState === l.a.DELAYLOADSTATE_NOTLOADED) {
|
|
var e = this.getScene();
|
|
e && (this.delayLoadState = l.a.DELAYLOADSTATE_LOADED, this._texture = this._getFromCache(this.url, this._noMipmap, this.samplingMode, this._invertY), this._texture ? this._delayedOnLoad && (this._texture.isReady ? s.h.SetImmediate(this._delayedOnLoad) : this._texture.onLoadedObservable.add(this._delayedOnLoad)) : (this._texture = e.getEngine().createTexture(this.url, this._noMipmap, this._invertY, e, this.samplingMode, this._delayedOnLoad, this._delayedOnError, this._buffer, null, this._format), this._deleteBuffer && delete this._buffer), this._delayedOnLoad = null, this._delayedOnError = null)
|
|
}
|
|
}, t.prototype._prepareRowForTextureGeneration = function(e, t, i, n) {
|
|
e *= this.uScale, t *= this.vScale, e -= this.uRotationCenter * this.uScale, t -= this.vRotationCenter * this.vScale, i -= this.wRotationCenter, a.x.TransformCoordinatesFromFloatsToRef(e, t, i, this._rowGenerationMatrix, n), n.x += this.uRotationCenter * this.uScale + this.uOffset, n.y += this.vRotationCenter * this.vScale + this.vOffset, n.z += this.wRotationCenter
|
|
}, t.prototype.getTextureMatrix = function() {
|
|
var e = this;
|
|
if (this.uOffset === this._cachedUOffset && this.vOffset === this._cachedVOffset && this.uScale === this._cachedUScale && this.vScale === this._cachedVScale && this.uAng === this._cachedUAng && this.vAng === this._cachedVAng && this.wAng === this._cachedWAng) return this._cachedTextureMatrix;
|
|
this._cachedUOffset = this.uOffset, this._cachedVOffset = this.vOffset, this._cachedUScale = this.uScale, this._cachedVScale = this.vScale, this._cachedUAng = this.uAng, this._cachedVAng = this.vAng, this._cachedWAng = this.wAng, this._cachedTextureMatrix || (this._cachedTextureMatrix = a.j.Zero(), this._rowGenerationMatrix = new a.j, this._t0 = a.x.Zero(), this._t1 = a.x.Zero(), this._t2 = a.x.Zero()), a.j.RotationYawPitchRollToRef(this.vAng, this.uAng, this.wAng, this._rowGenerationMatrix), this._prepareRowForTextureGeneration(0, 0, 0, this._t0), this._prepareRowForTextureGeneration(1, 0, 0, this._t1), this._prepareRowForTextureGeneration(0, 1, 0, this._t2), this._t1.subtractInPlace(this._t0), this._t2.subtractInPlace(this._t0), a.j.FromValuesToRef(this._t1.x, this._t1.y, this._t1.z, 0, this._t2.x, this._t2.y, this._t2.z, 0, this._t0.x, this._t0.y, this._t0.z, 0, 0, 0, 0, 1, this._cachedTextureMatrix);
|
|
var t = this.getScene();
|
|
return t ? (t.markAllMaterialsAsDirty(l.a.MATERIAL_TextureDirtyFlag, function(t) {
|
|
return t.hasTexture(e)
|
|
}), this._cachedTextureMatrix) : this._cachedTextureMatrix
|
|
}, t.prototype.getReflectionTextureMatrix = function() {
|
|
var e = this,
|
|
i = this.getScene();
|
|
if (!i) return this._cachedTextureMatrix;
|
|
if (this.uOffset === this._cachedUOffset && this.vOffset === this._cachedVOffset && this.uScale === this._cachedUScale && this.vScale === this._cachedVScale && this.coordinatesMode === this._cachedCoordinatesMode) {
|
|
if (this.coordinatesMode !== t.PROJECTION_MODE) return this._cachedTextureMatrix;
|
|
if (this._cachedProjectionMatrixId === i.getProjectionMatrix().updateFlag) return this._cachedTextureMatrix
|
|
}
|
|
switch (this._cachedTextureMatrix || (this._cachedTextureMatrix = a.j.Zero()), this._projectionModeMatrix || (this._projectionModeMatrix = a.j.Zero()), this._cachedUOffset = this.uOffset, this._cachedVOffset = this.vOffset, this._cachedUScale = this.uScale, this._cachedVScale = this.vScale, this._cachedCoordinatesMode = this.coordinatesMode, this.coordinatesMode) {
|
|
case t.PLANAR_MODE:
|
|
a.j.IdentityToRef(this._cachedTextureMatrix), this._cachedTextureMatrix[0] = this.uScale, this._cachedTextureMatrix[5] = this.vScale, this._cachedTextureMatrix[12] = this.uOffset, this._cachedTextureMatrix[13] = this.vOffset;
|
|
break;
|
|
case t.PROJECTION_MODE:
|
|
a.j.FromValuesToRef(.5, 0, 0, 0, 0, -.5, 0, 0, 0, 0, 0, 0, .5, .5, 1, 1, this._projectionModeMatrix);
|
|
var n = i.getProjectionMatrix();
|
|
this._cachedProjectionMatrixId = n.updateFlag, n.multiplyToRef(this._projectionModeMatrix, this._cachedTextureMatrix);
|
|
break;
|
|
default:
|
|
a.j.IdentityToRef(this._cachedTextureMatrix)
|
|
}
|
|
return i.markAllMaterialsAsDirty(l.a.MATERIAL_TextureDirtyFlag, function(t) {
|
|
return -1 !== t.getActiveTextures().indexOf(e)
|
|
}), this._cachedTextureMatrix
|
|
}, t.prototype.clone = function() {
|
|
var e = this;
|
|
return r.a.Clone(function() {
|
|
return new t(e._texture ? e._texture.url : null, e.getScene(), e._noMipmap, e._invertY, e.samplingMode, void 0, void 0, e._texture ? e._texture._buffer : void 0)
|
|
}, this)
|
|
}, t.prototype.serialize = function() {
|
|
var t = e.prototype.serialize.call(this);
|
|
return "string" == typeof this._buffer && "data:" === this._buffer.substr(0, 5) && (t.base64String = this._buffer, t.name = t.name.replace("data:", "")), t.invertY = this._invertY, t.samplingMode = this.samplingMode, t
|
|
}, t.prototype.getClassName = function() {
|
|
return "Texture"
|
|
}, t.prototype.dispose = function() {
|
|
e.prototype.dispose.call(this), this.onLoadObservable.clear(), this._delayedOnLoad = null, this._delayedOnError = null
|
|
}, t.Parse = function(e, i, n) {
|
|
if (e.customType) {
|
|
var o = s.h.Instantiate(e.customType).Parse(e, i, n);
|
|
return e.samplingMode && o.updateSamplingMode && o._samplingMode && o._samplingMode !== e.samplingMode && o.updateSamplingMode(e.samplingMode), o
|
|
}
|
|
if (e.isCube && !e.isRenderTarget) return t._CubeTextureParser(e, i, n);
|
|
if (!e.name && !e.isRenderTarget) return null;
|
|
var c = r.a.Parse(function() {
|
|
var r, o = !0;
|
|
if (e.noMipmap && (o = !1), e.mirrorPlane) {
|
|
var s = t._CreateMirror(e.name, e.renderTargetSize, i, o);
|
|
return s._waitingRenderList = e.renderList, s.mirrorPlane = a.n.FromArray(e.mirrorPlane), s
|
|
}
|
|
if (e.isRenderTarget) {
|
|
var c = null;
|
|
if (e.isCube) {
|
|
if (i.reflectionProbes)
|
|
for (var l = 0; l < i.reflectionProbes.length; l++) {
|
|
var u = i.reflectionProbes[l];
|
|
if (u.name === e.name) return u.cubeTexture
|
|
}
|
|
} else(c = t._CreateRenderTargetTexture(e.name, e.renderTargetSize, i, o))._waitingRenderList = e.renderList;
|
|
return c
|
|
}
|
|
if (e.base64String) r = t.CreateFromBase64String(e.base64String, e.name, i, !o);
|
|
else {
|
|
var h = n + e.name;
|
|
t.UseSerializedUrlIfAny && e.url && (h = e.url), r = new t(h, i, !o, e.invertY)
|
|
}
|
|
return r
|
|
}, e, i);
|
|
if (e.samplingMode) {
|
|
var l = e.samplingMode;
|
|
c && c.samplingMode !== l && c.updateSamplingMode(l)
|
|
}
|
|
if (c && e.animations)
|
|
for (var h = 0; h < e.animations.length; h++) {
|
|
var d = e.animations[h],
|
|
f = u.a.GetClass("BABYLON.Animation");
|
|
f && c.animations.push(f.Parse(d))
|
|
}
|
|
return c
|
|
}, t.CreateFromBase64String = function(e, i, n, r, o, s, a, c, u) {
|
|
return void 0 === s && (s = t.TRILINEAR_SAMPLINGMODE), void 0 === a && (a = null), void 0 === c && (c = null), void 0 === u && (u = l.a.TEXTUREFORMAT_RGBA), new t("data:" + i, n, r, o, s, a, c, e, !1, u)
|
|
}, t.LoadFromDataString = function(e, i, n, r, o, s, a, c, u, h) {
|
|
return void 0 === r && (r = !1), void 0 === o && (o = !1), void 0 === s && (s = !0), void 0 === a && (a = t.TRILINEAR_SAMPLINGMODE), void 0 === c && (c = null), void 0 === u && (u = null), void 0 === h && (h = l.a.TEXTUREFORMAT_RGBA), "data:" !== e.substr(0, 5) && (e = "data:" + e), new t(e, n, o, s, a, c, u, i, r, h)
|
|
}, t._CubeTextureParser = function(e, t, i) {
|
|
throw h.a.WarnImport("CubeTexture")
|
|
}, t._CreateMirror = function(e, t, i, n) {
|
|
throw h.a.WarnImport("MirrorTexture")
|
|
}, t._CreateRenderTargetTexture = function(e, t, i, n) {
|
|
throw h.a.WarnImport("RenderTargetTexture")
|
|
}, t.NEAREST_SAMPLINGMODE = l.a.TEXTURE_NEAREST_SAMPLINGMODE, t.NEAREST_NEAREST_MIPLINEAR = l.a.TEXTURE_NEAREST_NEAREST_MIPLINEAR, t.BILINEAR_SAMPLINGMODE = l.a.TEXTURE_BILINEAR_SAMPLINGMODE, t.LINEAR_LINEAR_MIPNEAREST = l.a.TEXTURE_LINEAR_LINEAR_MIPNEAREST, t.TRILINEAR_SAMPLINGMODE = l.a.TEXTURE_TRILINEAR_SAMPLINGMODE, t.LINEAR_LINEAR_MIPLINEAR = l.a.TEXTURE_LINEAR_LINEAR_MIPLINEAR, t.NEAREST_NEAREST_MIPNEAREST = l.a.TEXTURE_NEAREST_NEAREST_MIPNEAREST, t.NEAREST_LINEAR_MIPNEAREST = l.a.TEXTURE_NEAREST_LINEAR_MIPNEAREST, t.NEAREST_LINEAR_MIPLINEAR = l.a.TEXTURE_NEAREST_LINEAR_MIPLINEAR, t.NEAREST_LINEAR = l.a.TEXTURE_NEAREST_LINEAR, t.NEAREST_NEAREST = l.a.TEXTURE_NEAREST_NEAREST, t.LINEAR_NEAREST_MIPNEAREST = l.a.TEXTURE_LINEAR_NEAREST_MIPNEAREST, t.LINEAR_NEAREST_MIPLINEAR = l.a.TEXTURE_LINEAR_NEAREST_MIPLINEAR, t.LINEAR_LINEAR = l.a.TEXTURE_LINEAR_LINEAR, t.LINEAR_NEAREST = l.a.TEXTURE_LINEAR_NEAREST, t.EXPLICIT_MODE = l.a.TEXTURE_EXPLICIT_MODE, t.SPHERICAL_MODE = l.a.TEXTURE_SPHERICAL_MODE, t.PLANAR_MODE = l.a.TEXTURE_PLANAR_MODE, t.CUBIC_MODE = l.a.TEXTURE_CUBIC_MODE, t.PROJECTION_MODE = l.a.TEXTURE_PROJECTION_MODE, t.SKYBOX_MODE = l.a.TEXTURE_SKYBOX_MODE, t.INVCUBIC_MODE = l.a.TEXTURE_INVCUBIC_MODE, t.EQUIRECTANGULAR_MODE = l.a.TEXTURE_EQUIRECTANGULAR_MODE, t.FIXED_EQUIRECTANGULAR_MODE = l.a.TEXTURE_FIXED_EQUIRECTANGULAR_MODE, t.FIXED_EQUIRECTANGULAR_MIRRORED_MODE = l.a.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE, t.CLAMP_ADDRESSMODE = l.a.TEXTURE_CLAMP_ADDRESSMODE, t.WRAP_ADDRESSMODE = l.a.TEXTURE_WRAP_ADDRESSMODE, t.MIRROR_ADDRESSMODE = l.a.TEXTURE_MIRROR_ADDRESSMODE, t.UseSerializedUrlIfAny = !1, n.c([Object(r.c)()], t.prototype, "url", void 0), n.c([Object(r.c)()], t.prototype, "uOffset", void 0), n.c([Object(r.c)()], t.prototype, "vOffset", void 0), n.c([Object(r.c)()], t.prototype, "uScale", void 0), n.c([Object(r.c)()], t.prototype, "vScale", void 0), n.c([Object(r.c)()], t.prototype, "uAng", void 0), n.c([Object(r.c)()], t.prototype, "vAng", void 0), n.c([Object(r.c)()], t.prototype, "wAng", void 0), n.c([Object(r.c)()], t.prototype, "uRotationCenter", void 0), n.c([Object(r.c)()], t.prototype, "vRotationCenter", void 0), n.c([Object(r.c)()], t.prototype, "wRotationCenter", void 0), n.c([Object(r.c)()], t.prototype, "isBlocking", null), t
|
|
}(c.a);
|
|
r.a._TextureParser = d.Parse
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
}), i.d(t, "d", function() {
|
|
return r
|
|
}), i.d(t, "b", function() {
|
|
return o
|
|
}), i.d(t, "c", function() {
|
|
return s
|
|
});
|
|
var n = function() {
|
|
function e(e, t, i, n) {
|
|
void 0 === t && (t = !1), this.initalize(e, t, i, n)
|
|
}
|
|
return e.prototype.initalize = function(e, t, i, n) {
|
|
return void 0 === t && (t = !1), this.mask = e, this.skipNextObservers = t, this.target = i, this.currentTarget = n, this
|
|
}, e
|
|
}(),
|
|
r = function() {
|
|
return function(e, t, i) {
|
|
void 0 === i && (i = null), this.callback = e, this.mask = t, this.scope = i, this._willBeUnregistered = !1, this.unregisterOnNextCall = !1
|
|
}
|
|
}(),
|
|
o = function() {
|
|
function e() {}
|
|
return e.prototype.dispose = function() {
|
|
if (this._observers && this._observables)
|
|
for (var e = 0; e < this._observers.length; e++) this._observables[e].remove(this._observers[e]);
|
|
this._observers = null, this._observables = null
|
|
}, e.Watch = function(t, i, n, r) {
|
|
void 0 === n && (n = -1), void 0 === r && (r = null);
|
|
var o = new e;
|
|
o._observers = new Array, o._observables = t;
|
|
for (var s = 0, a = t; s < a.length; s++) {
|
|
var c = a[s].add(i, n, !1, r);
|
|
c && o._observers.push(c)
|
|
}
|
|
return o
|
|
}, e
|
|
}(),
|
|
s = function() {
|
|
function e(e) {
|
|
this._observers = new Array, this._eventState = new n(0), e && (this._onObserverAdded = e)
|
|
}
|
|
return e.prototype.add = function(e, t, i, n, o) {
|
|
if (void 0 === t && (t = -1), void 0 === i && (i = !1), void 0 === n && (n = null), void 0 === o && (o = !1), !e) return null;
|
|
var s = new r(e, t, n);
|
|
return s.unregisterOnNextCall = o, i ? this._observers.unshift(s) : this._observers.push(s), this._onObserverAdded && this._onObserverAdded(s), s
|
|
}, e.prototype.addOnce = function(e) {
|
|
return this.add(e, void 0, void 0, void 0, !0)
|
|
}, e.prototype.remove = function(e) {
|
|
return !!e && (-1 !== this._observers.indexOf(e) && (this._deferUnregister(e), !0))
|
|
}, e.prototype.removeCallback = function(e, t) {
|
|
for (var i = 0; i < this._observers.length; i++)
|
|
if (this._observers[i].callback === e && (!t || t === this._observers[i].scope)) return this._deferUnregister(this._observers[i]), !0;
|
|
return !1
|
|
}, e.prototype._deferUnregister = function(e) {
|
|
var t = this;
|
|
e.unregisterOnNextCall = !1, e._willBeUnregistered = !0, setTimeout(function() {
|
|
t._remove(e)
|
|
}, 0)
|
|
}, e.prototype._remove = function(e) {
|
|
if (!e) return !1;
|
|
var t = this._observers.indexOf(e);
|
|
return -1 !== t && (this._observers.splice(t, 1), !0)
|
|
}, e.prototype.makeObserverTopPriority = function(e) {
|
|
this._remove(e), this._observers.unshift(e)
|
|
}, e.prototype.makeObserverBottomPriority = function(e) {
|
|
this._remove(e), this._observers.push(e)
|
|
}, e.prototype.notifyObservers = function(e, t, i, n) {
|
|
if (void 0 === t && (t = -1), !this._observers.length) return !0;
|
|
var r = this._eventState;
|
|
r.mask = t, r.target = i, r.currentTarget = n, r.skipNextObservers = !1, r.lastReturnValue = e;
|
|
for (var o = 0, s = this._observers; o < s.length; o++) {
|
|
var a = s[o];
|
|
if (!a._willBeUnregistered && (a.mask & t && (a.scope ? r.lastReturnValue = a.callback.apply(a.scope, [e, r]) : r.lastReturnValue = a.callback(e, r), a.unregisterOnNextCall && this._deferUnregister(a)), r.skipNextObservers)) return !1
|
|
}
|
|
return !0
|
|
}, e.prototype.notifyObserversWithPromise = function(e, t, i, n) {
|
|
var r = this;
|
|
void 0 === t && (t = -1);
|
|
var o = Promise.resolve(e);
|
|
if (!this._observers.length) return o;
|
|
var s = this._eventState;
|
|
return s.mask = t, s.target = i, s.currentTarget = n, s.skipNextObservers = !1, this._observers.forEach(function(i) {
|
|
s.skipNextObservers || i._willBeUnregistered || i.mask & t && (o = i.scope ? o.then(function(t) {
|
|
return s.lastReturnValue = t, i.callback.apply(i.scope, [e, s])
|
|
}) : o.then(function(t) {
|
|
return s.lastReturnValue = t, i.callback(e, s)
|
|
}), i.unregisterOnNextCall && r._deferUnregister(i))
|
|
}), o.then(function() {
|
|
return e
|
|
})
|
|
}, e.prototype.notifyObserver = function(e, t, i) {
|
|
void 0 === i && (i = -1);
|
|
var n = this._eventState;
|
|
n.mask = i, n.skipNextObservers = !1, e.callback(t, n)
|
|
}, e.prototype.hasObservers = function() {
|
|
return this._observers.length > 0
|
|
}, e.prototype.clear = function() {
|
|
this._observers = new Array, this._onObserverAdded = null
|
|
}, e.prototype.clone = function() {
|
|
var t = new e;
|
|
return t._observers = this._observers.slice(0), t
|
|
}, e.prototype.hasSpecificMask = function(e) {
|
|
void 0 === e && (e = -1);
|
|
for (var t = 0, i = this._observers; t < i.length; t++) {
|
|
var n = i[t];
|
|
if (n.mask & e || n.mask === e) return !0
|
|
}
|
|
return !1
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "c", function() {
|
|
return g
|
|
}), i.d(t, "b", function() {
|
|
return m
|
|
}), i.d(t, "d", function() {
|
|
return v
|
|
}), i.d(t, "e", function() {
|
|
return y
|
|
}), i.d(t, "g", function() {
|
|
return b
|
|
}), i.d(t, "h", function() {
|
|
return T
|
|
}), i.d(t, "f", function() {
|
|
return E
|
|
}), i.d(t, "i", function() {
|
|
return A
|
|
}), i.d(t, "a", function() {
|
|
return x
|
|
});
|
|
var n = i(1),
|
|
r = i(0),
|
|
o = i(12),
|
|
s = i(8),
|
|
a = i(59),
|
|
c = i(3),
|
|
l = i(35),
|
|
u = i(6),
|
|
h = i(22),
|
|
d = i(32),
|
|
f = i(47),
|
|
p = i(19),
|
|
_ = i(60),
|
|
g = function() {
|
|
function e() {}
|
|
return e.prototype.getColorToRef = function(e) {
|
|
this.color2 ? r.f.LerpToRef(this.color1, this.color2, Math.random(), e) : e.copyFrom(this.color1)
|
|
}, e
|
|
}(),
|
|
m = function() {
|
|
return function() {}
|
|
}(),
|
|
v = function() {
|
|
function e() {}
|
|
return e.prototype.getFactor = function() {
|
|
return void 0 === this.factor2 ? this.factor1 : o.a.Lerp(this.factor1, this.factor2, Math.random())
|
|
}, e
|
|
}(),
|
|
y = function(e) {
|
|
function t(i, n) {
|
|
var r = e.call(this, i) || this;
|
|
return r.request = n, r.name = "LoadFileError", t._setPrototypeOf(r, t.prototype), r
|
|
}
|
|
return n.d(t, e), t._setPrototypeOf = Object.setPrototypeOf || function(e, t) {
|
|
return e.__proto__ = t, e
|
|
}, t
|
|
}(Error),
|
|
b = function() {
|
|
function e() {}
|
|
return e.ExponentialBackoff = function(e, t) {
|
|
return void 0 === e && (e = 3), void 0 === t && (t = 500),
|
|
function(i, n, r) {
|
|
return 0 !== n.status || r >= e || -1 !== i.indexOf("file:") ? -1 : Math.pow(2, r) * t
|
|
}
|
|
}, e
|
|
}(),
|
|
T = function() {
|
|
function e() {}
|
|
return e.FetchToRef = function(e, t, i, n, r, o) {
|
|
var s = 4 * ((Math.abs(e) * i % i | 0) + (Math.abs(t) * n % n | 0) * i);
|
|
o.r = r[s] / 255, o.g = r[s + 1] / 255, o.b = r[s + 2] / 255, o.a = r[s + 3] / 255
|
|
}, e.Mix = function(e, t, i) {
|
|
return e * (1 - i) + t * i
|
|
}, e.Instantiate = function(t) {
|
|
if (e.RegisteredExternalClasses && e.RegisteredExternalClasses[t]) return e.RegisteredExternalClasses[t];
|
|
var i = h.a.GetClass(t);
|
|
if (i) return i;
|
|
u.a.Warn(t + " not found, you may have missed an import.");
|
|
for (var n = t.split("."), r = window || this, o = 0, s = n.length; o < s; o++) r = r[n[o]];
|
|
return "function" != typeof r ? null : r
|
|
}, e.Slice = function(e, t, i) {
|
|
return e.slice ? e.slice(t, i) : Array.prototype.slice.call(e, t, i)
|
|
}, e.SetImmediate = function(e) {
|
|
l.a.IsWindowObjectExist() && window.setImmediate ? window.setImmediate(e) : setTimeout(e, 1)
|
|
}, e.IsExponentOfTwo = function(e) {
|
|
var t = 1;
|
|
do {
|
|
t *= 2
|
|
} while (t < e);
|
|
return t === e
|
|
}, e.FloatRound = function(t) {
|
|
return Math.fround ? Math.fround(t) : e._tmpFloatArray[0] = t
|
|
}, e.CeilingPOT = function(e) {
|
|
return e--, e |= e >> 1, e |= e >> 2, e |= e >> 4, e |= e >> 8, e |= e >> 16, ++e
|
|
}, e.FloorPOT = function(e) {
|
|
return e |= e >> 1, e |= e >> 2, e |= e >> 4, e |= e >> 8, (e |= e >> 16) - (e >> 1)
|
|
}, e.NearestPOT = function(t) {
|
|
var i = e.CeilingPOT(t),
|
|
n = e.FloorPOT(t);
|
|
return i - t > t - n ? n : i
|
|
}, e.GetExponentOfTwo = function(t, i, n) {
|
|
var r;
|
|
switch (void 0 === n && (n = c.a.SCALEMODE_NEAREST), n) {
|
|
case c.a.SCALEMODE_FLOOR:
|
|
r = e.FloorPOT(t);
|
|
break;
|
|
case c.a.SCALEMODE_NEAREST:
|
|
r = e.NearestPOT(t);
|
|
break;
|
|
case c.a.SCALEMODE_CEILING:
|
|
default:
|
|
r = e.CeilingPOT(t)
|
|
}
|
|
return Math.min(r, i)
|
|
}, e.GetFilename = function(e) {
|
|
var t = e.lastIndexOf("/");
|
|
return t < 0 ? e : e.substring(t + 1)
|
|
}, e.GetFolderPath = function(e, t) {
|
|
void 0 === t && (t = !1);
|
|
var i = e.lastIndexOf("/");
|
|
return i < 0 ? t ? e : "" : e.substring(0, i + 1)
|
|
}, e.ToDegrees = function(e) {
|
|
return 180 * e / Math.PI
|
|
}, e.ToRadians = function(e) {
|
|
return e * Math.PI / 180
|
|
}, e.EncodeArrayBufferTobase64 = function(e) {
|
|
for (var t, i, n, r, o, s, a, c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", l = "", u = 0, h = new Uint8Array(e); u < h.length;) r = (t = h[u++]) >> 2, o = (3 & t) << 4 | (i = u < h.length ? h[u++] : Number.NaN) >> 4, s = (15 & i) << 2 | (n = u < h.length ? h[u++] : Number.NaN) >> 6, a = 63 & n, isNaN(i) ? s = a = 64 : isNaN(n) && (a = 64), l += c.charAt(r) + c.charAt(o) + c.charAt(s) + c.charAt(a);
|
|
return "data:image/png;base64," + l
|
|
}, e.ExtractMinAndMaxIndexed = function(e, t, i, n, o) {
|
|
void 0 === o && (o = null);
|
|
for (var s = new r.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), a = new r.x(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE), c = i; c < i + n; c++) {
|
|
var l = 3 * t[c],
|
|
u = e[l],
|
|
h = e[l + 1],
|
|
d = e[l + 2];
|
|
s.minimizeInPlaceFromFloats(u, h, d), a.maximizeInPlaceFromFloats(u, h, d)
|
|
}
|
|
return o && (s.x -= s.x * o.x + o.y, s.y -= s.y * o.x + o.y, s.z -= s.z * o.x + o.y, a.x += a.x * o.x + o.y, a.y += a.y * o.x + o.y, a.z += a.z * o.x + o.y), {
|
|
minimum: s,
|
|
maximum: a
|
|
}
|
|
}, e.ExtractMinAndMax = function(e, t, i, n, o) {
|
|
void 0 === n && (n = null);
|
|
var s = new r.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE),
|
|
a = new r.x(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
|
|
o || (o = 3);
|
|
for (var c = t, l = t * o; c < t + i; c++, l += o) {
|
|
var u = e[l],
|
|
h = e[l + 1],
|
|
d = e[l + 2];
|
|
s.minimizeInPlaceFromFloats(u, h, d), a.maximizeInPlaceFromFloats(u, h, d)
|
|
}
|
|
return n && (s.x -= s.x * n.x + n.y, s.y -= s.y * n.x + n.y, s.z -= s.z * n.x + n.y, a.x += a.x * n.x + n.y, a.y += a.y * n.x + n.y, a.z += a.z * n.x + n.y), {
|
|
minimum: s,
|
|
maximum: a
|
|
}
|
|
}, e.MakeArray = function(e, t) {
|
|
return !0 === t || void 0 !== e && null != e ? Array.isArray(e) ? e : [e] : null
|
|
}, e.GetPointerPrefix = function() {
|
|
var e = "pointer";
|
|
return !l.a.IsWindowObjectExist() || window.PointerEvent || navigator.pointerEnabled || (e = "mouse"), e
|
|
}, e.QueueNewFrame = function(e, t) {
|
|
return l.a.IsWindowObjectExist() ? (t || (t = window), t.requestAnimationFrame ? t.requestAnimationFrame(e) : t.msRequestAnimationFrame ? t.msRequestAnimationFrame(e) : t.webkitRequestAnimationFrame ? t.webkitRequestAnimationFrame(e) : t.mozRequestAnimationFrame ? t.mozRequestAnimationFrame(e) : t.oRequestAnimationFrame ? t.oRequestAnimationFrame(e) : window.setTimeout(e, 16)) : setTimeout(e, 16)
|
|
}, e.RequestFullscreen = function(e) {
|
|
var t = e.requestFullscreen || e.msRequestFullscreen || e.webkitRequestFullscreen || e.mozRequestFullScreen;
|
|
t && t.call(e)
|
|
}, e.ExitFullscreen = function() {
|
|
var e = document;
|
|
document.exitFullscreen ? document.exitFullscreen() : e.mozCancelFullScreen ? e.mozCancelFullScreen() : e.webkitCancelFullScreen ? e.webkitCancelFullScreen() : e.msCancelFullScreen && e.msCancelFullScreen()
|
|
}, e.SetCorsBehavior = function(t, i) {
|
|
if ((!t || 0 !== t.indexOf("data:")) && e.CorsBehavior)
|
|
if ("string" == typeof e.CorsBehavior || e.CorsBehavior instanceof String) i.crossOrigin = e.CorsBehavior;
|
|
else {
|
|
var n = e.CorsBehavior(t);
|
|
n && (i.crossOrigin = n)
|
|
}
|
|
}, e.CleanUrl = function(e) {
|
|
return e = e.replace(/#/gm, "%23")
|
|
}, e.LoadImage = function(t, i, n, r) {
|
|
var o, s = !1;
|
|
t instanceof ArrayBuffer ? (o = URL.createObjectURL(new Blob([t])), s = !0) : t instanceof Blob ? (o = URL.createObjectURL(t), s = !0) : (o = e.CleanUrl(t), o = e.PreprocessUrl(t));
|
|
var c = new Image;
|
|
e.SetCorsBehavior(o, c);
|
|
var l = function() {
|
|
c.removeEventListener("load", l), c.removeEventListener("error", h), i(c), s && c.src && URL.revokeObjectURL(c.src)
|
|
},
|
|
h = function(e) {
|
|
c.removeEventListener("load", l), c.removeEventListener("error", h), u.a.Error("Error while trying to load image: " + t), n && n("Error while trying to load image: " + t, e), s && c.src && URL.revokeObjectURL(c.src)
|
|
};
|
|
c.addEventListener("load", l), c.addEventListener("error", h);
|
|
var d = function() {
|
|
c.src = o
|
|
};
|
|
if ("data:" !== o.substr(0, 5) && r && r.enableTexturesOffline) r.open(function() {
|
|
r && r.loadImage(o, c)
|
|
}, d);
|
|
else {
|
|
if (-1 !== o.indexOf("file:")) {
|
|
var f = decodeURIComponent(o.substring(5).toLowerCase());
|
|
if (a.a.FilesToLoad[f]) {
|
|
try {
|
|
var p;
|
|
try {
|
|
p = URL.createObjectURL(a.a.FilesToLoad[f])
|
|
} catch (e) {
|
|
p = URL.createObjectURL(a.a.FilesToLoad[f])
|
|
}
|
|
c.src = p, s = !0
|
|
} catch (e) {
|
|
c.src = ""
|
|
}
|
|
return c
|
|
}
|
|
}
|
|
d()
|
|
}
|
|
return c
|
|
}, e.LoadFile = function(t, i, n, r, o, c) {
|
|
if (t = e.CleanUrl(t), -1 !== (t = e.PreprocessUrl(t)).indexOf("file:")) {
|
|
var u = decodeURIComponent(t.substring(5).toLowerCase());
|
|
if (a.a.FilesToLoad[u]) return e.ReadFile(a.a.FilesToLoad[u], i, n, o)
|
|
}
|
|
var h = e.BaseUrl + t,
|
|
d = !1,
|
|
f = {
|
|
onCompleteObservable: new s.c,
|
|
abort: function() {
|
|
return d = !0
|
|
}
|
|
},
|
|
p = function() {
|
|
var t = new _.a,
|
|
r = null;
|
|
f.abort = function() {
|
|
d = !0, t.readyState !== (XMLHttpRequest.DONE || 4) && t.abort(), null !== r && (clearTimeout(r), r = null)
|
|
};
|
|
var s = function(a) {
|
|
t.open("GET", h), o && (t.responseType = "arraybuffer"), n && t.addEventListener("progress", n);
|
|
var u = function() {
|
|
t.removeEventListener("loadend", u), f.onCompleteObservable.notifyObservers(f), f.onCompleteObservable.clear()
|
|
};
|
|
t.addEventListener("loadend", u);
|
|
var p = function() {
|
|
if (!d && t.readyState === (XMLHttpRequest.DONE || 4)) {
|
|
if (t.removeEventListener("readystatechange", p), t.status >= 200 && t.status < 300 || 0 === t.status && (!l.a.IsWindowObjectExist() || e.IsFileURL())) return void i(o ? t.response : t.responseText, t.responseURL);
|
|
var n = e.DefaultRetryStrategy;
|
|
if (n) {
|
|
var f = n(h, t, a);
|
|
if (-1 !== f) return t.removeEventListener("loadend", u), t = new _.a, void(r = setTimeout(function() {
|
|
return s(a + 1)
|
|
}, f))
|
|
}
|
|
var g = new y("Error status: " + t.status + " " + t.statusText + " - Unable to load " + h, t);
|
|
if (!c) throw g;
|
|
c(t, g)
|
|
}
|
|
};
|
|
t.addEventListener("readystatechange", p), t.send()
|
|
};
|
|
s(0)
|
|
};
|
|
if (r && r.enableSceneOffline) {
|
|
var g = function(e) {
|
|
e && e.status > 400 ? c && c(e) : d || p()
|
|
};
|
|
r.open(function() {
|
|
d || r && r.loadFile(t, function(e) {
|
|
d || i(e), f.onCompleteObservable.notifyObservers(f)
|
|
}, n ? function(e) {
|
|
d || n(e)
|
|
} : void 0, g, o)
|
|
}, g)
|
|
} else p();
|
|
return f
|
|
}, e.LoadScript = function(e, t, i, n) {
|
|
if (l.a.IsWindowObjectExist()) {
|
|
var r = document.getElementsByTagName("head")[0],
|
|
o = document.createElement("script");
|
|
o.setAttribute("type", "text/javascript"), o.setAttribute("src", e), n && (o.id = n), o.onload = function() {
|
|
t && t()
|
|
}, o.onerror = function(t) {
|
|
i && i("Unable to load script '" + e + "'", t)
|
|
}, r.appendChild(o)
|
|
}
|
|
}, e.LoadScriptAsync = function(e, t) {
|
|
return new Promise(function(i, n) {
|
|
if (l.a.IsWindowObjectExist()) {
|
|
var r = document.getElementsByTagName("head")[0],
|
|
o = document.createElement("script");
|
|
o.setAttribute("type", "text/javascript"), o.setAttribute("src", e), t && (o.id = t), o.onload = function() {
|
|
i(!0)
|
|
}, o.onerror = function(e) {
|
|
i(!1)
|
|
}, r.appendChild(o)
|
|
} else i(!1)
|
|
})
|
|
}, e.ReadFileAsDataURL = function(e, t, i) {
|
|
var n = new FileReader,
|
|
r = {
|
|
onCompleteObservable: new s.c,
|
|
abort: function() {
|
|
return n.abort()
|
|
}
|
|
};
|
|
return n.onloadend = function(e) {
|
|
r.onCompleteObservable.notifyObservers(r)
|
|
}, n.onload = function(e) {
|
|
t(e.target.result)
|
|
}, n.onprogress = i, n.readAsDataURL(e), r
|
|
}, e.ReadFile = function(e, t, i, n) {
|
|
var r = new FileReader,
|
|
o = {
|
|
onCompleteObservable: new s.c,
|
|
abort: function() {
|
|
return r.abort()
|
|
}
|
|
};
|
|
return r.onloadend = function(e) {
|
|
return o.onCompleteObservable.notifyObservers(o)
|
|
}, r.onerror = function(i) {
|
|
u.a.Log("Error while reading file: " + e.name), t(JSON.stringify({
|
|
autoClear: !0,
|
|
clearColor: [1, 0, 0],
|
|
ambientColor: [0, 0, 0],
|
|
gravity: [0, -9.807, 0],
|
|
meshes: [],
|
|
cameras: [],
|
|
lights: []
|
|
}))
|
|
}, r.onload = function(e) {
|
|
t(e.target.result)
|
|
}, i && (r.onprogress = i), n ? r.readAsArrayBuffer(e) : r.readAsText(e), o
|
|
}, e.FileAsURL = function(e) {
|
|
var t = new Blob([e]);
|
|
return (window.URL || window.webkitURL).createObjectURL(t)
|
|
}, e.Format = function(e, t) {
|
|
return void 0 === t && (t = 2), e.toFixed(t)
|
|
}, e.CheckExtends = function(e, t, i) {
|
|
t.minimizeInPlace(e), i.maximizeInPlace(e)
|
|
}, e.DeepCopy = function(e, t, i, n) {
|
|
d.a.DeepCopy(e, t, i, n)
|
|
}, e.IsEmpty = function(e) {
|
|
for (var t in e)
|
|
if (e.hasOwnProperty(t)) return !1;
|
|
return !0
|
|
}, e.EndsWith = function(e, t) {
|
|
return -1 !== e.indexOf(t, e.length - t.length)
|
|
}, e.RegisterTopRootEvents = function(e) {
|
|
for (var t = 0; t < e.length; t++) {
|
|
var i = e[t];
|
|
window.addEventListener(i.name, i.handler, !1);
|
|
try {
|
|
window.parent && window.parent.addEventListener(i.name, i.handler, !1)
|
|
} catch (e) {}
|
|
}
|
|
}, e.UnregisterTopRootEvents = function(e) {
|
|
for (var t = 0; t < e.length; t++) {
|
|
var i = e[t];
|
|
window.removeEventListener(i.name, i.handler);
|
|
try {
|
|
window.parent && window.parent.removeEventListener(i.name, i.handler)
|
|
} catch (e) {}
|
|
}
|
|
}, e.DumpFramebuffer = function(t, i, n, r, o, s) {
|
|
void 0 === o && (o = "image/png");
|
|
for (var a = 4 * t, c = i / 2, l = n.readPixels(0, 0, t, i), u = 0; u < c; u++)
|
|
for (var h = 0; h < a; h++) {
|
|
var d = h + u * a,
|
|
f = h + (i - u - 1) * a,
|
|
p = l[d];
|
|
l[d] = l[f], l[f] = p
|
|
}
|
|
e._ScreenshotCanvas || (e._ScreenshotCanvas = document.createElement("canvas")), e._ScreenshotCanvas.width = t, e._ScreenshotCanvas.height = i;
|
|
var _ = e._ScreenshotCanvas.getContext("2d");
|
|
if (_) {
|
|
var g = _.createImageData(t, i);
|
|
g.data.set(l), _.putImageData(g, 0, 0), e.EncodeScreenshotCanvasData(r, o, s)
|
|
}
|
|
}, e.ToBlob = function(e, t, i) {
|
|
void 0 === i && (i = "image/png"), e.toBlob || (e.toBlob = function(e, t, i) {
|
|
var n = this;
|
|
setTimeout(function() {
|
|
for (var r = atob(n.toDataURL(t, i).split(",")[1]), o = r.length, s = new Uint8Array(o), a = 0; a < o; a++) s[a] = r.charCodeAt(a);
|
|
e(new Blob([s]))
|
|
})
|
|
}), e.toBlob(function(e) {
|
|
t(e)
|
|
}, i)
|
|
}, e.EncodeScreenshotCanvasData = function(t, i, n) {
|
|
(void 0 === i && (i = "image/png"), t) ? t(e._ScreenshotCanvas.toDataURL(i)): this.ToBlob(e._ScreenshotCanvas, function(t) {
|
|
if ("download" in document.createElement("a")) {
|
|
if (!n) {
|
|
var i = new Date,
|
|
r = (i.getFullYear() + "-" + (i.getMonth() + 1)).slice(2) + "-" + i.getDate() + "_" + i.getHours() + "-" + ("0" + i.getMinutes()).slice(-2);
|
|
n = "screenshot_" + r + ".png"
|
|
}
|
|
e.Download(t, n)
|
|
} else {
|
|
var o = URL.createObjectURL(t),
|
|
s = window.open("");
|
|
if (!s) return;
|
|
var a = s.document.createElement("img");
|
|
a.onload = function() {
|
|
URL.revokeObjectURL(o)
|
|
}, a.src = o, s.document.body.appendChild(a)
|
|
}
|
|
}, i)
|
|
}, e.Download = function(e, t) {
|
|
if (navigator && navigator.msSaveBlob) navigator.msSaveBlob(e, t);
|
|
else {
|
|
var i = window.URL.createObjectURL(e),
|
|
n = document.createElement("a");
|
|
document.body.appendChild(n), n.style.display = "none", n.href = i, n.download = t, n.addEventListener("click", function() {
|
|
n.parentElement && n.parentElement.removeChild(n)
|
|
}), n.click(), window.URL.revokeObjectURL(i)
|
|
}
|
|
}, e.CreateScreenshot = function(e, t, i, n, r) {
|
|
throw void 0 === r && (r = "image/png"), p.a.WarnImport("ScreenshotTools")
|
|
}, e.CreateScreenshotUsingRenderTarget = function(e, t, i, n, r, o, s, a) {
|
|
throw void 0 === r && (r = "image/png"), void 0 === o && (o = 1), void 0 === s && (s = !1), p.a.WarnImport("ScreenshotTools")
|
|
}, e.RandomId = function() {
|
|
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(e) {
|
|
var t = 16 * Math.random() | 0;
|
|
return ("x" === e ? t : 3 & t | 8).toString(16)
|
|
})
|
|
}, e.IsBase64 = function(e) {
|
|
return !(e.length < 5) && "data:" === e.substr(0, 5)
|
|
}, e.DecodeBase64 = function(e) {
|
|
for (var t = atob(e.split(",")[1]), i = t.length, n = new Uint8Array(new ArrayBuffer(i)), r = 0; r < i; r++) n[r] = t.charCodeAt(r);
|
|
return n.buffer
|
|
}, e.GetAbsoluteUrl = function(e) {
|
|
var t = document.createElement("a");
|
|
return t.href = e, t.href
|
|
}, Object.defineProperty(e, "errorsCount", {
|
|
get: function() {
|
|
return u.a.errorsCount
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.Log = function(e) {
|
|
u.a.Log(e)
|
|
}, e.Warn = function(e) {
|
|
u.a.Warn(e)
|
|
}, e.Error = function(e) {
|
|
u.a.Error(e)
|
|
}, Object.defineProperty(e, "LogCache", {
|
|
get: function() {
|
|
return u.a.LogCache
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.ClearLogCache = function() {
|
|
u.a.ClearLogCache()
|
|
}, Object.defineProperty(e, "LogLevels", {
|
|
set: function(e) {
|
|
u.a.LogLevels = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.IsFileURL = function() {
|
|
return "file:" === location.protocol
|
|
}, Object.defineProperty(e, "PerformanceLogLevel", {
|
|
set: function(t) {
|
|
return (t & e.PerformanceUserMarkLogLevel) === e.PerformanceUserMarkLogLevel ? (e.StartPerformanceCounter = e._StartUserMark, void(e.EndPerformanceCounter = e._EndUserMark)) : (t & e.PerformanceConsoleLogLevel) === e.PerformanceConsoleLogLevel ? (e.StartPerformanceCounter = e._StartPerformanceConsole, void(e.EndPerformanceCounter = e._EndPerformanceConsole)) : (e.StartPerformanceCounter = e._StartPerformanceCounterDisabled, void(e.EndPerformanceCounter = e._EndPerformanceCounterDisabled))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e._StartPerformanceCounterDisabled = function(e, t) {}, e._EndPerformanceCounterDisabled = function(e, t) {}, e._StartUserMark = function(t, i) {
|
|
if (void 0 === i && (i = !0), !e._performance) {
|
|
if (!l.a.IsWindowObjectExist()) return;
|
|
e._performance = window.performance
|
|
}
|
|
i && e._performance.mark && e._performance.mark(t + "-Begin")
|
|
}, e._EndUserMark = function(t, i) {
|
|
void 0 === i && (i = !0), i && e._performance.mark && (e._performance.mark(t + "-End"), e._performance.measure(t, t + "-Begin", t + "-End"))
|
|
}, e._StartPerformanceConsole = function(t, i) {
|
|
void 0 === i && (i = !0), i && (e._StartUserMark(t, i), console.time && console.time(t))
|
|
}, e._EndPerformanceConsole = function(t, i) {
|
|
void 0 === i && (i = !0), i && (e._EndUserMark(t, i), console.time && console.timeEnd(t))
|
|
}, Object.defineProperty(e, "Now", {
|
|
get: function() {
|
|
return f.a.Now
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.GetClassName = function(e, t) {
|
|
void 0 === t && (t = !1);
|
|
var i = null;
|
|
if (!t && e.getClassName) i = e.getClassName();
|
|
else {
|
|
if (e instanceof Object) i = (t ? e : Object.getPrototypeOf(e)).constructor.__bjsclassName__;
|
|
i || (i = typeof e)
|
|
}
|
|
return i
|
|
}, e.First = function(e, t) {
|
|
for (var i = 0, n = e; i < n.length; i++) {
|
|
var r = n[i];
|
|
if (t(r)) return r
|
|
}
|
|
return null
|
|
}, e.getFullClassName = function(e, t) {
|
|
void 0 === t && (t = !1);
|
|
var i = null,
|
|
n = null;
|
|
if (!t && e.getClassName) i = e.getClassName();
|
|
else {
|
|
if (e instanceof Object) {
|
|
var r = t ? e : Object.getPrototypeOf(e);
|
|
i = r.constructor.__bjsclassName__, n = r.constructor.__bjsmoduleName__
|
|
}
|
|
i || (i = typeof e)
|
|
}
|
|
return i ? (null != n ? n + "." : "") + i : null
|
|
}, e.DelayAsync = function(e) {
|
|
return new Promise(function(t) {
|
|
setTimeout(function() {
|
|
t()
|
|
}, e)
|
|
})
|
|
}, e.GetCurrentGradient = function(e, t, i) {
|
|
for (var n = 0; n < t.length - 1; n++) {
|
|
var r = t[n],
|
|
o = t[n + 1];
|
|
if (e >= r.gradient && e <= o.gradient) return void i(r, o, (e - r.gradient) / (o.gradient - r.gradient))
|
|
}
|
|
var s = t.length - 1;
|
|
i(t[s], t[s], 1)
|
|
}, e.BaseUrl = "", e.UseCustomRequestHeaders = !1, e.CustomRequestHeaders = _.a.CustomRequestHeaders, e.DefaultRetryStrategy = b.ExponentialBackoff(), e.CorsBehavior = "anonymous", e.UseFallbackTexture = !0, e.RegisteredExternalClasses = {}, e.fallbackTexture = "data:image/jpg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QBmRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAExAAIAAAAQAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQubmV0IDQuMC41AP/bAEMABAIDAwMCBAMDAwQEBAQFCQYFBQUFCwgIBgkNCw0NDQsMDA4QFBEODxMPDAwSGBITFRYXFxcOERkbGRYaFBYXFv/bAEMBBAQEBQUFCgYGChYPDA8WFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFv/AABEIAQABAAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APH6KKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FCiiigD6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++gooooA+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gUKKKKAPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76CiiigD5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BQooooA+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/voKKKKAPl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FCiiigD6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++gooooA+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gUKKKKAPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76CiiigD5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BQooooA+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/voKKKKAPl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FCiiigD6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++gooooA+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gUKKKKAPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76Pl+iiivuj+BT6gooor4U/vo+X6KKK+6P4FPqCiiivhT++j5fooor7o/gU+oKKKK+FP76P//Z", e._tmpFloatArray = new Float32Array(1), e.GetDOMTextContent = l.a.GetDOMTextContent, e.PreprocessUrl = function(e) {
|
|
return e
|
|
}, e.NoneLogLevel = u.a.NoneLogLevel, e.MessageLogLevel = u.a.MessageLogLevel, e.WarningLogLevel = u.a.WarningLogLevel, e.ErrorLogLevel = u.a.ErrorLogLevel, e.AllLogLevel = u.a.AllLogLevel, e.IsWindowObjectExist = l.a.IsWindowObjectExist, e.PerformanceNoneLogLevel = 0, e.PerformanceUserMarkLogLevel = 1, e.PerformanceConsoleLogLevel = 2, e.StartPerformanceCounter = e._StartPerformanceCounterDisabled, e.EndPerformanceCounter = e._EndPerformanceCounterDisabled, e
|
|
}(),
|
|
E = function() {
|
|
function e() {
|
|
this._startMonitoringTime = 0, this._min = 0, this._max = 0, this._average = 0, this._lastSecAverage = 0, this._current = 0, this._totalValueCount = 0, this._totalAccumulated = 0, this._lastSecAccumulated = 0, this._lastSecTime = 0, this._lastSecValueCount = 0
|
|
}
|
|
return Object.defineProperty(e.prototype, "min", {
|
|
get: function() {
|
|
return this._min
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "max", {
|
|
get: function() {
|
|
return this._max
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "average", {
|
|
get: function() {
|
|
return this._average
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "lastSecAverage", {
|
|
get: function() {
|
|
return this._lastSecAverage
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "current", {
|
|
get: function() {
|
|
return this._current
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "total", {
|
|
get: function() {
|
|
return this._totalAccumulated
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "count", {
|
|
get: function() {
|
|
return this._totalValueCount
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.fetchNewFrame = function() {
|
|
this._totalValueCount++, this._current = 0, this._lastSecValueCount++
|
|
}, e.prototype.addCount = function(t, i) {
|
|
e.Enabled && (this._current += t, i && this._fetchResult())
|
|
}, e.prototype.beginMonitoring = function() {
|
|
e.Enabled && (this._startMonitoringTime = f.a.Now)
|
|
}, e.prototype.endMonitoring = function(t) {
|
|
if (void 0 === t && (t = !0), e.Enabled) {
|
|
t && this.fetchNewFrame();
|
|
var i = f.a.Now;
|
|
this._current = i - this._startMonitoringTime, t && this._fetchResult()
|
|
}
|
|
}, e.prototype._fetchResult = function() {
|
|
this._totalAccumulated += this._current, this._lastSecAccumulated += this._current, this._min = Math.min(this._min, this._current), this._max = Math.max(this._max, this._current), this._average = this._totalAccumulated / this._totalValueCount;
|
|
var e = f.a.Now;
|
|
e - this._lastSecTime > 1e3 && (this._lastSecAverage = this._lastSecAccumulated / this._lastSecValueCount, this._lastSecTime = e, this._lastSecAccumulated = 0, this._lastSecValueCount = 0)
|
|
}, e.Enabled = !0, e
|
|
}();
|
|
|
|
function A(e, t) {
|
|
return function(i) {
|
|
i.__bjsclassName__ = e, i.__bjsmoduleName__ = null != t ? t : null
|
|
}
|
|
}
|
|
var x = function() {
|
|
function e(e, t, i, n) {
|
|
void 0 === n && (n = 0), this.iterations = e, this.index = n - 1, this._done = !1, this._fn = t, this._successCallback = i
|
|
}
|
|
return e.prototype.executeNext = function() {
|
|
this._done || (this.index + 1 < this.iterations ? (++this.index, this._fn(this)) : this.breakLoop())
|
|
}, e.prototype.breakLoop = function() {
|
|
this._done = !0, this._successCallback()
|
|
}, e.Run = function(t, i, n, r) {
|
|
void 0 === r && (r = 0);
|
|
var o = new e(t, i, n, r);
|
|
return o.executeNext(), o
|
|
}, e.SyncAsyncForLoop = function(t, i, n, r, o, s) {
|
|
return void 0 === s && (s = 0), e.Run(Math.ceil(t / i), function(e) {
|
|
o && o() ? e.breakLoop() : setTimeout(function() {
|
|
for (var r = 0; r < i; ++r) {
|
|
var s = e.index * i + r;
|
|
if (s >= t) break;
|
|
if (n(s), o && o()) {
|
|
e.breakLoop();
|
|
break
|
|
}
|
|
}
|
|
e.executeNext()
|
|
}, s)
|
|
}, r)
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "d", function() {
|
|
return x
|
|
}), i.d(t, "a", function() {
|
|
return R
|
|
}), i.d(t, "c", function() {
|
|
return P
|
|
}), i.d(t, "b", function() {
|
|
return S
|
|
});
|
|
var n = i(1),
|
|
r = i(8),
|
|
o = i(105),
|
|
s = i(61),
|
|
a = i(106),
|
|
c = i(9),
|
|
l = i(0),
|
|
u = i(12),
|
|
h = i(5),
|
|
d = i(20),
|
|
f = i(26),
|
|
p = i(94),
|
|
_ = i(3),
|
|
g = i(35),
|
|
m = i(6),
|
|
v = i(23),
|
|
y = i(92),
|
|
b = i(19),
|
|
T = i(107),
|
|
E = i(73),
|
|
A = function() {
|
|
return function() {}
|
|
}(),
|
|
x = function() {
|
|
return function() {}
|
|
}(),
|
|
R = function() {
|
|
return function() {}
|
|
}(),
|
|
P = function() {
|
|
return function() {}
|
|
}(),
|
|
S = function() {
|
|
function e(t, i, n, s) {
|
|
var u = this;
|
|
void 0 === s && (s = !1), this.forcePOTTextures = !1, this.isFullscreen = !1, this.isPointerLock = !1, this.cullBackFaces = !0, this.renderEvenInBackground = !0, this.preventCacheWipeBetweenFrames = !1, this.enableOfflineSupport = !1, this.disableManifestCheck = !1, this.scenes = new Array, this.onNewSceneAddedObservable = new r.c, this.postProcesses = new Array, this.validateShaderPrograms = !1, this.onResizeObservable = new r.c, this.onCanvasBlurObservable = new r.c, this.onCanvasFocusObservable = new r.c, this.onCanvasPointerOutObservable = new r.c, this.onBeforeTextureInitObservable = new r.c, this.disableUniformBuffers = !1, this._uniformBuffers = new Array, this.onBeginFrameObservable = new r.c, this.customAnimationFrameRequester = null, this.onEndFrameObservable = new r.c, this.onBeforeShaderCompilationObservable = new r.c, this.onAfterShaderCompilationObservable = new r.c, this._windowIsBackground = !1, this._webGLVersion = 1, this._highPrecisionShadersAllowed = !0, this._badOS = !1, this._badDesktopOS = !1, this._colorWrite = !0, this._drawCalls = new c.f, this._renderingQueueLaunched = !1, this._activeRenderLoops = new Array, this._deterministicLockstep = !1, this._lockstepMaxSteps = 4, this.onContextLostObservable = new r.c, this.onContextRestoredObservable = new r.c, this._contextWasLost = !1, this._doNotHandleContextLost = !1, this._performanceMonitor = new o.a, this._fps = 60, this._deltaTime = 0, this.disablePerformanceMonitorInBackground = !1, this.disableVertexArrayObjects = !1, this._depthCullingState = new p.b, this._stencilState = new p.c, this._alphaState = new p.a, this._alphaMode = e.ALPHA_DISABLE, this._internalTexturesCache = new Array, this._activeChannel = 0, this._currentTextureChannel = -1, this._boundTexturesCache = {}, this._compiledEffects = {}, this._vertexAttribArraysEnabled = [], this._uintIndicesCurrentlySet = !1, this._currentBoundBuffer = new Array, this._currentFramebuffer = null, this._currentBufferPointers = new Array, this._currentInstanceLocations = new Array, this._currentInstanceBuffers = new Array, this._vaoRecordInProgress = !1, this._mustWipeVertexAttributes = !1, this._nextFreeTextureSlots = new Array, this._maxSimultaneousTextures = 0, this._activeRequests = new Array, this._texturesSupported = new Array, this.premultipliedAlpha = !0, this._viewportCached = new l.y(0, 0, 0, 0), this._unpackFlipYCached = null, this.enableUnpackFlipYCached = !0, this._boundUniforms = {}, a.a.Apply();
|
|
var h = null;
|
|
if (e.Instances.push(this), t) {
|
|
if (n = n || {}, t.getContext) {
|
|
if (h = t, this._renderingCanvas = h, null != i && (n.antialias = i), void 0 === n.deterministicLockstep && (n.deterministicLockstep = !1), void 0 === n.lockstepMaxSteps && (n.lockstepMaxSteps = 4), void 0 === n.preserveDrawingBuffer && (n.preserveDrawingBuffer = !1), void 0 === n.audioEngine && (n.audioEngine = !0), void 0 === n.stencil && (n.stencil = !0), !1 === n.premultipliedAlpha && (this.premultipliedAlpha = !1), this._deterministicLockstep = n.deterministicLockstep, this._lockstepMaxSteps = n.lockstepMaxSteps, this._doNotHandleContextLost = !!n.doNotHandleContextLost, navigator && navigator.userAgent)
|
|
for (var d = navigator.userAgent, f = 0, _ = e.ExceptionList; f < _.length; f++) {
|
|
var v = _[f],
|
|
y = v.key,
|
|
b = v.targets;
|
|
if (new RegExp(y).test(d)) {
|
|
if (v.capture && v.captureConstraint) {
|
|
var T = v.capture,
|
|
E = v.captureConstraint,
|
|
x = new RegExp(T).exec(d);
|
|
if (x && x.length > 0)
|
|
if (parseInt(x[x.length - 1]) >= E) continue
|
|
}
|
|
for (var R = 0, P = b; R < P.length; R++) {
|
|
switch (P[R]) {
|
|
case "uniformBuffer":
|
|
this.disableUniformBuffers = !0;
|
|
break;
|
|
case "vao":
|
|
this.disableVertexArrayObjects = !0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!n.disableWebGL2Support) try {
|
|
this._gl = h.getContext("webgl2", n) || h.getContext("experimental-webgl2", n), this._gl && (this._webGLVersion = 2, this._gl.deleteQuery || (this._webGLVersion = 1))
|
|
} catch (e) {}
|
|
if (!this._gl) {
|
|
if (!h) throw new Error("The provided canvas is null or undefined.");
|
|
try {
|
|
this._gl = h.getContext("webgl", n) || h.getContext("experimental-webgl", n)
|
|
} catch (e) {
|
|
throw new Error("WebGL not supported")
|
|
}
|
|
}
|
|
if (!this._gl) throw new Error("WebGL not supported");
|
|
this._gl.pixelStorei(this._gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, this._gl.NONE), this._onCanvasFocus = function() {
|
|
u.onCanvasFocusObservable.notifyObservers(u)
|
|
}, this._onCanvasBlur = function() {
|
|
u.onCanvasBlurObservable.notifyObservers(u)
|
|
}, h.addEventListener("focus", this._onCanvasFocus), h.addEventListener("blur", this._onCanvasBlur), this._onBlur = function() {
|
|
u.disablePerformanceMonitorInBackground && u._performanceMonitor.disable(), u._windowIsBackground = !0
|
|
}, this._onFocus = function() {
|
|
u.disablePerformanceMonitorInBackground && u._performanceMonitor.enable(), u._windowIsBackground = !1
|
|
}, this._onCanvasPointerOut = function(e) {
|
|
u.onCanvasPointerOutObservable.notifyObservers(e)
|
|
}, g.a.IsWindowObjectExist() && (window.addEventListener("blur", this._onBlur), window.addEventListener("focus", this._onFocus)), h.addEventListener("pointerout", this._onCanvasPointerOut), this._doNotHandleContextLost || (this._onContextLost = function(e) {
|
|
e.preventDefault(), u._contextWasLost = !0, m.a.Warn("WebGL context lost."), u.onContextLostObservable.notifyObservers(u)
|
|
}, this._onContextRestored = function() {
|
|
setTimeout(function() {
|
|
u._initGLContext(), u._rebuildEffects(), u._rebuildInternalTextures(), u._rebuildBuffers(), u.wipeCaches(!0), m.a.Warn("WebGL context successfully restored."), u.onContextRestoredObservable.notifyObservers(u), u._contextWasLost = !1
|
|
}, 0)
|
|
}, h.addEventListener("webglcontextlost", this._onContextLost, !1), h.addEventListener("webglcontextrestored", this._onContextRestored, !1)), n.doNotHandleTouchAction || this._disableTouchAction()
|
|
} else {
|
|
this._gl = t, this._renderingCanvas = this._gl.canvas, this._gl.renderbufferStorageMultisample && (this._webGLVersion = 2);
|
|
var S = this._gl.getContextAttributes();
|
|
S && (n.stencil = S.stencil)
|
|
}
|
|
void 0 !== n.useHighPrecisionFloats && (this._highPrecisionShadersAllowed = n.useHighPrecisionFloats);
|
|
var C = g.a.IsWindowObjectExist() && window.devicePixelRatio || 1,
|
|
M = n.limitDeviceRatio || C;
|
|
if (this._hardwareScalingLevel = s ? 1 / Math.min(M, C) : 1, this.resize(), this._isStencilEnable = !!n.stencil, this._initGLContext(), h) {
|
|
var O = document;
|
|
this._onFullscreenChange = function() {
|
|
void 0 !== O.fullscreen ? u.isFullscreen = O.fullscreen : void 0 !== O.mozFullScreen ? u.isFullscreen = O.mozFullScreen : void 0 !== O.webkitIsFullScreen ? u.isFullscreen = O.webkitIsFullScreen : void 0 !== O.msIsFullScreen && (u.isFullscreen = O.msIsFullScreen), u.isFullscreen && u._pointerLockRequested && h && (h.requestPointerLock = h.requestPointerLock || h.msRequestPointerLock || h.mozRequestPointerLock || h.webkitRequestPointerLock, h.requestPointerLock && h.requestPointerLock())
|
|
}, document.addEventListener("fullscreenchange", this._onFullscreenChange, !1), document.addEventListener("mozfullscreenchange", this._onFullscreenChange, !1), document.addEventListener("webkitfullscreenchange", this._onFullscreenChange, !1), document.addEventListener("msfullscreenchange", this._onFullscreenChange, !1), this._onPointerLockChange = function() {
|
|
u.isPointerLock = O.mozPointerLockElement === h || O.webkitPointerLockElement === h || O.msPointerLockElement === h || O.pointerLockElement === h
|
|
}, document.addEventListener("pointerlockchange", this._onPointerLockChange, !1), document.addEventListener("mspointerlockchange", this._onPointerLockChange, !1), document.addEventListener("mozpointerlockchange", this._onPointerLockChange, !1), document.addEventListener("webkitpointerlockchange", this._onPointerLockChange, !1), this._connectVREvents(h, O)
|
|
}!e.audioEngine && n.audioEngine && e.AudioEngineFactory && (e.audioEngine = e.AudioEngineFactory(this.getRenderingCanvas()));
|
|
for (var I = 0; I < this._caps.maxVertexAttribs; I++) this._currentBufferPointers[I] = new A;
|
|
this._prepareVRComponent(), n.autoEnableWebVR && this.initWebVR(), this._badOS = /iPad/i.test(navigator.userAgent) || /iPhone/i.test(navigator.userAgent), this._badDesktopOS = /^((?!chrome|android).)*safari/i.test(navigator.userAgent), console.log("Babylon.js v" + e.Version + " - " + this.description), this.enableOfflineSupport = void 0 !== e.OfflineProviderFactory
|
|
}
|
|
}
|
|
return Object.defineProperty(e, "Instances", {
|
|
get: function() {
|
|
return v.a.Instances
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "LastCreatedEngine", {
|
|
get: function() {
|
|
return v.a.LastCreatedEngine
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "LastCreatedScene", {
|
|
get: function() {
|
|
return v.a.LastCreatedScene
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.MarkAllMaterialsAsDirty = function(t, i) {
|
|
for (var n = 0; n < e.Instances.length; n++)
|
|
for (var r = e.Instances[n], o = 0; o < r.scenes.length; o++) r.scenes[o].markAllMaterialsAsDirty(t, i)
|
|
}, Object.defineProperty(e, "NpmPackage", {
|
|
get: function() {
|
|
return "babylonjs@4.0.3"
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "Version", {
|
|
get: function() {
|
|
return "4.0.3"
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "description", {
|
|
get: function() {
|
|
var e = "WebGL" + this.webGLVersion;
|
|
return this._caps.parallelShaderCompile && (e += " - Parallel shader compilation"), e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ShadersRepository", {
|
|
get: function() {
|
|
return h.a.ShadersRepository
|
|
},
|
|
set: function(e) {
|
|
h.a.ShadersRepository = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.DefaultLoadingScreenFactory = function(e) {
|
|
throw b.a.WarnImport("LoadingScreen")
|
|
}, Object.defineProperty(e.prototype, "supportsUniformBuffers", {
|
|
get: function() {
|
|
return this.webGLVersion > 1 && !this.disableUniformBuffers
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "_shouldUseHighPrecisionShader", {
|
|
get: function() {
|
|
return this._caps.highPrecisionShaderSupported && this._highPrecisionShadersAllowed
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "needPOTTextures", {
|
|
get: function() {
|
|
return this._webGLVersion < 2 || this.forcePOTTextures
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "doNotHandleContextLost", {
|
|
get: function() {
|
|
return this._doNotHandleContextLost
|
|
},
|
|
set: function(e) {
|
|
this._doNotHandleContextLost = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "performanceMonitor", {
|
|
get: function() {
|
|
return this._performanceMonitor
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "texturesSupported", {
|
|
get: function() {
|
|
return this._texturesSupported
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "textureFormatInUse", {
|
|
get: function() {
|
|
return this._textureFormatInUse
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "currentViewport", {
|
|
get: function() {
|
|
return this._cachedViewport
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "emptyTexture", {
|
|
get: function() {
|
|
return this._emptyTexture || (this._emptyTexture = this.createRawTexture(new Uint8Array(4), 1, 1, e.TEXTUREFORMAT_RGBA, !1, !1, e.TEXTURE_NEAREST_SAMPLINGMODE)), this._emptyTexture
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "emptyTexture3D", {
|
|
get: function() {
|
|
return this._emptyTexture3D || (this._emptyTexture3D = this.createRawTexture3D(new Uint8Array(4), 1, 1, 1, e.TEXTUREFORMAT_RGBA, !1, !1, e.TEXTURE_NEAREST_SAMPLINGMODE)), this._emptyTexture3D
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "emptyCubeTexture", {
|
|
get: function() {
|
|
if (!this._emptyCubeTexture) {
|
|
var t = new Uint8Array(4),
|
|
i = [t, t, t, t, t, t];
|
|
this._emptyCubeTexture = this.createRawCubeTexture(i, 1, e.TEXTUREFORMAT_RGBA, e.TEXTURETYPE_UNSIGNED_INT, !1, !1, e.TEXTURE_NEAREST_SAMPLINGMODE)
|
|
}
|
|
return this._emptyCubeTexture
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.initWebVR = function() {
|
|
throw b.a.WarnImport("WebVRCamera")
|
|
}, e.prototype._prepareVRComponent = function() {}, e.prototype._connectVREvents = function(e, t) {}, e.prototype._submitVRFrame = function() {}, e.prototype.disableVR = function() {}, e.prototype.isVRPresenting = function() {
|
|
return !1
|
|
}, e.prototype._requestVRFrame = function() {}, e.prototype._disableTouchAction = function() {
|
|
this._renderingCanvas && (this._renderingCanvas.setAttribute("touch-action", "none"), this._renderingCanvas.style.touchAction = "none", this._renderingCanvas.style.msTouchAction = "none")
|
|
}, e.prototype._rebuildInternalTextures = function() {
|
|
for (var e = 0, t = this._internalTexturesCache.slice(); e < t.length; e++) {
|
|
t[e]._rebuild()
|
|
}
|
|
}, e.prototype._rebuildEffects = function() {
|
|
for (var e in this._compiledEffects) {
|
|
this._compiledEffects[e]._prepareEffect()
|
|
}
|
|
h.a.ResetCache()
|
|
}, e.prototype.areAllEffectsReady = function() {
|
|
for (var e in this._compiledEffects) {
|
|
if (!this._compiledEffects[e].isReady()) return !1
|
|
}
|
|
return !0
|
|
}, e.prototype._rebuildBuffers = function() {
|
|
for (var e = 0, t = this.scenes; e < t.length; e++) {
|
|
var i = t[e];
|
|
i.resetCachedMaterial(), i._rebuildGeometries(), i._rebuildTextures()
|
|
}
|
|
for (var n = 0, r = this._uniformBuffers; n < r.length; n++) {
|
|
r[n]._rebuild()
|
|
}
|
|
}, e.prototype._initGLContext = function() {
|
|
this._caps = new P, this._caps.maxTexturesImageUnits = this._gl.getParameter(this._gl.MAX_TEXTURE_IMAGE_UNITS), this._caps.maxCombinedTexturesImageUnits = this._gl.getParameter(this._gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS), this._caps.maxVertexTextureImageUnits = this._gl.getParameter(this._gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS), this._caps.maxTextureSize = this._gl.getParameter(this._gl.MAX_TEXTURE_SIZE), this._caps.maxCubemapTextureSize = this._gl.getParameter(this._gl.MAX_CUBE_MAP_TEXTURE_SIZE), this._caps.maxRenderTextureSize = this._gl.getParameter(this._gl.MAX_RENDERBUFFER_SIZE), this._caps.maxVertexAttribs = this._gl.getParameter(this._gl.MAX_VERTEX_ATTRIBS), this._caps.maxVaryingVectors = this._gl.getParameter(this._gl.MAX_VARYING_VECTORS), this._caps.maxFragmentUniformVectors = this._gl.getParameter(this._gl.MAX_FRAGMENT_UNIFORM_VECTORS), this._caps.maxVertexUniformVectors = this._gl.getParameter(this._gl.MAX_VERTEX_UNIFORM_VECTORS), this._glVersion = this._gl.getParameter(this._gl.VERSION);
|
|
var e = this._gl.getExtension("WEBGL_debug_renderer_info");
|
|
if (null != e && (this._glRenderer = this._gl.getParameter(e.UNMASKED_RENDERER_WEBGL), this._glVendor = this._gl.getParameter(e.UNMASKED_VENDOR_WEBGL)), this._glVendor || (this._glVendor = "Unknown vendor"), this._glRenderer || (this._glRenderer = "Unknown renderer"), this._gl.HALF_FLOAT_OES = 36193, 34842 !== this._gl.RGBA16F && (this._gl.RGBA16F = 34842), 34836 !== this._gl.RGBA32F && (this._gl.RGBA32F = 34836), 35056 !== this._gl.DEPTH24_STENCIL8 && (this._gl.DEPTH24_STENCIL8 = 35056), this._caps.standardDerivatives = this._webGLVersion > 1 || null !== this._gl.getExtension("OES_standard_derivatives"), this._caps.astc = this._gl.getExtension("WEBGL_compressed_texture_astc") || this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_astc"), this._caps.s3tc = this._gl.getExtension("WEBGL_compressed_texture_s3tc") || this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc"), this._caps.pvrtc = this._gl.getExtension("WEBGL_compressed_texture_pvrtc") || this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"), this._caps.etc1 = this._gl.getExtension("WEBGL_compressed_texture_etc1") || this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_etc1"), this._caps.etc2 = this._gl.getExtension("WEBGL_compressed_texture_etc") || this._gl.getExtension("WEBKIT_WEBGL_compressed_texture_etc") || this._gl.getExtension("WEBGL_compressed_texture_es3_0"), this._caps.textureAnisotropicFilterExtension = this._gl.getExtension("EXT_texture_filter_anisotropic") || this._gl.getExtension("WEBKIT_EXT_texture_filter_anisotropic") || this._gl.getExtension("MOZ_EXT_texture_filter_anisotropic"), this._caps.maxAnisotropy = this._caps.textureAnisotropicFilterExtension ? this._gl.getParameter(this._caps.textureAnisotropicFilterExtension.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 0, this._caps.uintIndices = this._webGLVersion > 1 || null !== this._gl.getExtension("OES_element_index_uint"), this._caps.fragmentDepthSupported = this._webGLVersion > 1 || null !== this._gl.getExtension("EXT_frag_depth"), this._caps.highPrecisionShaderSupported = !1, this._caps.timerQuery = this._gl.getExtension("EXT_disjoint_timer_query_webgl2") || this._gl.getExtension("EXT_disjoint_timer_query"), this._caps.timerQuery && (1 === this._webGLVersion && (this._gl.getQuery = this._caps.timerQuery.getQueryEXT.bind(this._caps.timerQuery)), this._caps.canUseTimestampForTimerQuery = this._gl.getQuery(this._caps.timerQuery.TIMESTAMP_EXT, this._caps.timerQuery.QUERY_COUNTER_BITS_EXT) > 0), this._caps.colorBufferFloat = this._webGLVersion > 1 && this._gl.getExtension("EXT_color_buffer_float"), this._caps.textureFloat = !!(this._webGLVersion > 1 || this._gl.getExtension("OES_texture_float")), this._caps.textureFloatLinearFiltering = !(!this._caps.textureFloat || !this._gl.getExtension("OES_texture_float_linear")), this._caps.textureFloatRender = !(!this._caps.textureFloat || !this._canRenderToFloatFramebuffer()), this._caps.textureHalfFloat = !!(this._webGLVersion > 1 || this._gl.getExtension("OES_texture_half_float")), this._caps.textureHalfFloatLinearFiltering = !!(this._webGLVersion > 1 || this._caps.textureHalfFloat && this._gl.getExtension("OES_texture_half_float_linear")), this._webGLVersion > 1 && (this._gl.HALF_FLOAT_OES = 5131), this._caps.textureHalfFloatRender = this._caps.textureHalfFloat && this._canRenderToHalfFloatFramebuffer(), this._caps.textureLOD = !!(this._webGLVersion > 1 || this._gl.getExtension("EXT_shader_texture_lod")), this._caps.multiview = this._gl.getExtension("OVR_multiview2"), this._webGLVersion > 1) this._caps.drawBuffersExtension = !0;
|
|
else {
|
|
var t = this._gl.getExtension("WEBGL_draw_buffers");
|
|
if (null !== t) {
|
|
this._caps.drawBuffersExtension = !0, this._gl.drawBuffers = t.drawBuffersWEBGL.bind(t), this._gl.DRAW_FRAMEBUFFER = this._gl.FRAMEBUFFER;
|
|
for (var i = 0; i < 16; i++) this._gl["COLOR_ATTACHMENT" + i + "_WEBGL"] = t["COLOR_ATTACHMENT" + i + "_WEBGL"]
|
|
} else this._caps.drawBuffersExtension = !1
|
|
}
|
|
if (this._caps.parallelShaderCompile = this._gl.getExtension("KHR_parallel_shader_compile"), this._webGLVersion > 1) this._caps.depthTextureExtension = !0;
|
|
else {
|
|
var n = this._gl.getExtension("WEBGL_depth_texture");
|
|
null != n && (this._caps.depthTextureExtension = !0, this._gl.UNSIGNED_INT_24_8 = n.UNSIGNED_INT_24_8_WEBGL)
|
|
}
|
|
if (this.disableVertexArrayObjects) this._caps.vertexArrayObject = !1;
|
|
else if (this._webGLVersion > 1) this._caps.vertexArrayObject = !0;
|
|
else {
|
|
var r = this._gl.getExtension("OES_vertex_array_object");
|
|
null != r ? (this._caps.vertexArrayObject = !0, this._gl.createVertexArray = r.createVertexArrayOES.bind(r), this._gl.bindVertexArray = r.bindVertexArrayOES.bind(r), this._gl.deleteVertexArray = r.deleteVertexArrayOES.bind(r)) : this._caps.vertexArrayObject = !1
|
|
}
|
|
if (this._webGLVersion > 1) this._caps.instancedArrays = !0;
|
|
else {
|
|
var o = this._gl.getExtension("ANGLE_instanced_arrays");
|
|
null != o ? (this._caps.instancedArrays = !0, this._gl.drawArraysInstanced = o.drawArraysInstancedANGLE.bind(o), this._gl.drawElementsInstanced = o.drawElementsInstancedANGLE.bind(o), this._gl.vertexAttribDivisor = o.vertexAttribDivisorANGLE.bind(o)) : this._caps.instancedArrays = !1
|
|
}
|
|
if (this._caps.astc && this.texturesSupported.push("-astc.ktx"), this._caps.s3tc && this.texturesSupported.push("-dxt.ktx"), this._caps.pvrtc && this.texturesSupported.push("-pvrtc.ktx"), this._caps.etc2 && this.texturesSupported.push("-etc2.ktx"), this._caps.etc1 && this.texturesSupported.push("-etc1.ktx"), this._gl.getShaderPrecisionFormat) {
|
|
var s = this._gl.getShaderPrecisionFormat(this._gl.VERTEX_SHADER, this._gl.HIGH_FLOAT),
|
|
a = this._gl.getShaderPrecisionFormat(this._gl.FRAGMENT_SHADER, this._gl.HIGH_FLOAT);
|
|
s && a && (this._caps.highPrecisionShaderSupported = 0 !== s.precision && 0 !== a.precision)
|
|
}
|
|
this.setDepthBuffer(!0), this.setDepthFunctionToLessOrEqual(), this.setDepthWrite(!0), this._maxSimultaneousTextures = this._caps.maxCombinedTexturesImageUnits;
|
|
for (var c = 0; c < this._maxSimultaneousTextures; c++) this._nextFreeTextureSlots.push(c)
|
|
}, Object.defineProperty(e.prototype, "webGLVersion", {
|
|
get: function() {
|
|
return this._webGLVersion
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isStencilEnable", {
|
|
get: function() {
|
|
return this._isStencilEnable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._prepareWorkingCanvas = function() {
|
|
if (!this._workingCanvas) {
|
|
this._workingCanvas = document.createElement("canvas");
|
|
var e = this._workingCanvas.getContext("2d");
|
|
e && (this._workingContext = e)
|
|
}
|
|
}, e.prototype.resetTextureCache = function() {
|
|
for (var e in this._boundTexturesCache) this._boundTexturesCache.hasOwnProperty(e) && (this._boundTexturesCache[e] = null);
|
|
this._currentTextureChannel = -1
|
|
}, e.prototype.isDeterministicLockStep = function() {
|
|
return this._deterministicLockstep
|
|
}, e.prototype.getLockstepMaxSteps = function() {
|
|
return this._lockstepMaxSteps
|
|
}, e.prototype.getGlInfo = function() {
|
|
return {
|
|
vendor: this._glVendor,
|
|
renderer: this._glRenderer,
|
|
version: this._glVersion
|
|
}
|
|
}, e.prototype.getAspectRatio = function(e, t) {
|
|
void 0 === t && (t = !1);
|
|
var i = e.viewport;
|
|
return this.getRenderWidth(t) * i.width / (this.getRenderHeight(t) * i.height)
|
|
}, e.prototype.getScreenAspectRatio = function() {
|
|
return this.getRenderWidth(!0) / this.getRenderHeight(!0)
|
|
}, e.prototype.getRenderWidth = function(e) {
|
|
return void 0 === e && (e = !1), !e && this._currentRenderTarget ? this._currentRenderTarget.width : this._gl.drawingBufferWidth
|
|
}, e.prototype.getRenderHeight = function(e) {
|
|
return void 0 === e && (e = !1), !e && this._currentRenderTarget ? this._currentRenderTarget.height : this._gl.drawingBufferHeight
|
|
}, e.prototype.getRenderingCanvas = function() {
|
|
return this._renderingCanvas
|
|
}, e.prototype.getRenderingCanvasClientRect = function() {
|
|
return this._renderingCanvas ? this._renderingCanvas.getBoundingClientRect() : null
|
|
}, e.prototype.setHardwareScalingLevel = function(e) {
|
|
this._hardwareScalingLevel = e, this.resize()
|
|
}, e.prototype.getHardwareScalingLevel = function() {
|
|
return this._hardwareScalingLevel
|
|
}, e.prototype.getLoadedTexturesCache = function() {
|
|
return this._internalTexturesCache
|
|
}, e.prototype.getCaps = function() {
|
|
return this._caps
|
|
}, e.prototype.getDepthFunction = function() {
|
|
return this._depthCullingState.depthFunc
|
|
}, e.prototype.setDepthFunction = function(e) {
|
|
this._depthCullingState.depthFunc = e
|
|
}, e.prototype.setDepthFunctionToGreater = function() {
|
|
this._depthCullingState.depthFunc = this._gl.GREATER
|
|
}, e.prototype.setDepthFunctionToGreaterOrEqual = function() {
|
|
this._depthCullingState.depthFunc = this._gl.GEQUAL
|
|
}, e.prototype.setDepthFunctionToLess = function() {
|
|
this._depthCullingState.depthFunc = this._gl.LESS
|
|
}, e.prototype.cacheStencilState = function() {
|
|
this._cachedStencilBuffer = this.getStencilBuffer(), this._cachedStencilFunction = this.getStencilFunction(), this._cachedStencilMask = this.getStencilMask(), this._cachedStencilOperationPass = this.getStencilOperationPass(), this._cachedStencilOperationFail = this.getStencilOperationFail(), this._cachedStencilOperationDepthFail = this.getStencilOperationDepthFail(), this._cachedStencilReference = this.getStencilFunctionReference()
|
|
}, e.prototype.restoreStencilState = function() {
|
|
this.setStencilFunction(this._cachedStencilFunction), this.setStencilMask(this._cachedStencilMask), this.setStencilBuffer(this._cachedStencilBuffer), this.setStencilOperationPass(this._cachedStencilOperationPass), this.setStencilOperationFail(this._cachedStencilOperationFail), this.setStencilOperationDepthFail(this._cachedStencilOperationDepthFail), this.setStencilFunctionReference(this._cachedStencilReference)
|
|
}, e.prototype.setDepthFunctionToLessOrEqual = function() {
|
|
this._depthCullingState.depthFunc = this._gl.LEQUAL
|
|
}, e.prototype.getStencilBuffer = function() {
|
|
return this._stencilState.stencilTest
|
|
}, e.prototype.setStencilBuffer = function(e) {
|
|
this._stencilState.stencilTest = e
|
|
}, e.prototype.getStencilMask = function() {
|
|
return this._stencilState.stencilMask
|
|
}, e.prototype.setStencilMask = function(e) {
|
|
this._stencilState.stencilMask = e
|
|
}, e.prototype.getStencilFunction = function() {
|
|
return this._stencilState.stencilFunc
|
|
}, e.prototype.getStencilFunctionReference = function() {
|
|
return this._stencilState.stencilFuncRef
|
|
}, e.prototype.getStencilFunctionMask = function() {
|
|
return this._stencilState.stencilFuncMask
|
|
}, e.prototype.setStencilFunction = function(e) {
|
|
this._stencilState.stencilFunc = e
|
|
}, e.prototype.setStencilFunctionReference = function(e) {
|
|
this._stencilState.stencilFuncRef = e
|
|
}, e.prototype.setStencilFunctionMask = function(e) {
|
|
this._stencilState.stencilFuncMask = e
|
|
}, e.prototype.getStencilOperationFail = function() {
|
|
return this._stencilState.stencilOpStencilFail
|
|
}, e.prototype.getStencilOperationDepthFail = function() {
|
|
return this._stencilState.stencilOpDepthFail
|
|
}, e.prototype.getStencilOperationPass = function() {
|
|
return this._stencilState.stencilOpStencilDepthPass
|
|
}, e.prototype.setStencilOperationFail = function(e) {
|
|
this._stencilState.stencilOpStencilFail = e
|
|
}, e.prototype.setStencilOperationDepthFail = function(e) {
|
|
this._stencilState.stencilOpDepthFail = e
|
|
}, e.prototype.setStencilOperationPass = function(e) {
|
|
this._stencilState.stencilOpStencilDepthPass = e
|
|
}, e.prototype.setDitheringState = function(e) {
|
|
e ? this._gl.enable(this._gl.DITHER) : this._gl.disable(this._gl.DITHER)
|
|
}, e.prototype.setRasterizerState = function(e) {
|
|
e ? this._gl.disable(this._gl.RASTERIZER_DISCARD) : this._gl.enable(this._gl.RASTERIZER_DISCARD)
|
|
}, e.prototype.stopRenderLoop = function(e) {
|
|
if (e) {
|
|
var t = this._activeRenderLoops.indexOf(e);
|
|
t >= 0 && this._activeRenderLoops.splice(t, 1)
|
|
} else this._activeRenderLoops = []
|
|
}, e.prototype._renderLoop = function() {
|
|
if (!this._contextWasLost) {
|
|
var e = !0;
|
|
if (!this.renderEvenInBackground && this._windowIsBackground && (e = !1), e) {
|
|
this.beginFrame();
|
|
for (var t = 0; t < this._activeRenderLoops.length; t++) {
|
|
(0, this._activeRenderLoops[t])()
|
|
}
|
|
this.endFrame()
|
|
}
|
|
}
|
|
this._activeRenderLoops.length > 0 ? this.customAnimationFrameRequester ? (this.customAnimationFrameRequester.requestID = c.h.QueueNewFrame(this.customAnimationFrameRequester.renderFunction || this._bindedRenderFunction, this.customAnimationFrameRequester), this._frameHandler = this.customAnimationFrameRequester.requestID) : this.isVRPresenting() ? this._requestVRFrame() : this._frameHandler = c.h.QueueNewFrame(this._bindedRenderFunction) : this._renderingQueueLaunched = !1
|
|
}, e.prototype.runRenderLoop = function(e) {
|
|
-1 === this._activeRenderLoops.indexOf(e) && (this._activeRenderLoops.push(e), this._renderingQueueLaunched || (this._renderingQueueLaunched = !0, this._bindedRenderFunction = this._renderLoop.bind(this), this._frameHandler = c.h.QueueNewFrame(this._bindedRenderFunction)))
|
|
}, e.prototype.switchFullscreen = function(e) {
|
|
this.isFullscreen ? this.exitFullscreen() : this.enterFullscreen(e)
|
|
}, e.prototype.enterFullscreen = function(e) {
|
|
this.isFullscreen || (this._pointerLockRequested = e, this._renderingCanvas && c.h.RequestFullscreen(this._renderingCanvas))
|
|
}, e.prototype.exitFullscreen = function() {
|
|
this.isFullscreen && c.h.ExitFullscreen()
|
|
}, e.prototype.clear = function(e, t, i, n) {
|
|
void 0 === n && (n = !1), this.applyStates();
|
|
var r = 0;
|
|
t && e && (this._gl.clearColor(e.r, e.g, e.b, void 0 !== e.a ? e.a : 1), r |= this._gl.COLOR_BUFFER_BIT), i && (this._gl.clearDepth(1), r |= this._gl.DEPTH_BUFFER_BIT), n && (this._gl.clearStencil(0), r |= this._gl.STENCIL_BUFFER_BIT), this._gl.clear(r)
|
|
}, e.prototype.scissorClear = function(e, t, i, n, r) {
|
|
this.enableScissor(e, t, i, n), this.clear(r, !0, !0, !0), this.disableScissor()
|
|
}, e.prototype.enableScissor = function(e, t, i, n) {
|
|
var r = this._gl;
|
|
r.enable(r.SCISSOR_TEST), r.scissor(e, t, i, n)
|
|
}, e.prototype.disableScissor = function() {
|
|
var e = this._gl;
|
|
e.disable(e.SCISSOR_TEST)
|
|
}, e.prototype._viewport = function(e, t, i, n) {
|
|
e === this._viewportCached.x && t === this._viewportCached.y && i === this._viewportCached.z && n === this._viewportCached.w || (this._viewportCached.x = e, this._viewportCached.y = t, this._viewportCached.z = i, this._viewportCached.w = n, this._gl.viewport(e, t, i, n))
|
|
}, e.prototype.setViewport = function(e, t, i) {
|
|
var n = t || this.getRenderWidth(),
|
|
r = i || this.getRenderHeight(),
|
|
o = e.x || 0,
|
|
s = e.y || 0;
|
|
this._cachedViewport = e, this._viewport(o * n, s * r, n * e.width, r * e.height)
|
|
}, e.prototype.setDirectViewport = function(e, t, i, n) {
|
|
var r = this._cachedViewport;
|
|
return this._cachedViewport = null, this._viewport(e, t, i, n), r
|
|
}, e.prototype.beginFrame = function() {
|
|
this.onBeginFrameObservable.notifyObservers(this), this._measureFps()
|
|
}, e.prototype.endFrame = function() {
|
|
this._badOS && this.flushFramebuffer(), this._submitVRFrame(), this.onEndFrameObservable.notifyObservers(this)
|
|
}, e.prototype.resize = function() {
|
|
if (!this.isVRPresenting()) {
|
|
var e = this._renderingCanvas ? this._renderingCanvas.clientWidth : window.innerWidth,
|
|
t = this._renderingCanvas ? this._renderingCanvas.clientHeight : window.innerHeight;
|
|
this.setSize(e / this._hardwareScalingLevel, t / this._hardwareScalingLevel)
|
|
}
|
|
}, e.prototype.setSize = function(e, t) {
|
|
if (this._renderingCanvas && (this._renderingCanvas.width !== e || this._renderingCanvas.height !== t)) {
|
|
this._renderingCanvas.width = e, this._renderingCanvas.height = t;
|
|
for (var i = 0; i < this.scenes.length; i++)
|
|
for (var n = this.scenes[i], r = 0; r < n.cameras.length; r++) {
|
|
n.cameras[r]._currentRenderId = 0
|
|
}
|
|
this.onResizeObservable.hasObservers && this.onResizeObservable.notifyObservers(this)
|
|
}
|
|
}, e.prototype.bindFramebuffer = function(e, t, i, n, r, o, s) {
|
|
void 0 === s && (s = 0), this._currentRenderTarget && this.unBindFramebuffer(this._currentRenderTarget), this._currentRenderTarget = e, this._bindUnboundFramebuffer(e._MSAAFramebuffer ? e._MSAAFramebuffer : e._framebuffer);
|
|
var a = this._gl;
|
|
e.isCube && (void 0 === t && (t = 0), a.framebufferTexture2D(a.FRAMEBUFFER, a.COLOR_ATTACHMENT0, a.TEXTURE_CUBE_MAP_POSITIVE_X + t, e._webGLTexture, s), o && (o._generateStencilBuffer ? a.framebufferTexture2D(a.FRAMEBUFFER, a.DEPTH_STENCIL_ATTACHMENT, a.TEXTURE_CUBE_MAP_POSITIVE_X + t, o._webGLTexture, s) : a.framebufferTexture2D(a.FRAMEBUFFER, a.DEPTH_ATTACHMENT, a.TEXTURE_CUBE_MAP_POSITIVE_X + t, o._webGLTexture, s))), this._cachedViewport && !r ? this.setViewport(this._cachedViewport, i, n) : (i || (i = e.width, s && (i /= Math.pow(2, s))), n || (n = e.height, s && (n /= Math.pow(2, s))), this._viewport(0, 0, i, n)), this.wipeCaches()
|
|
}, e.prototype._bindUnboundFramebuffer = function(e) {
|
|
this._currentFramebuffer !== e && (this._gl.bindFramebuffer(this._gl.FRAMEBUFFER, e), this._currentFramebuffer = e)
|
|
}, e.prototype.unBindFramebuffer = function(e, t, i) {
|
|
void 0 === t && (t = !1), this._currentRenderTarget = null;
|
|
var n = this._gl;
|
|
e._MSAAFramebuffer && (n.bindFramebuffer(n.READ_FRAMEBUFFER, e._MSAAFramebuffer), n.bindFramebuffer(n.DRAW_FRAMEBUFFER, e._framebuffer), n.blitFramebuffer(0, 0, e.width, e.height, 0, 0, e.width, e.height, n.COLOR_BUFFER_BIT, n.NEAREST)), !e.generateMipMaps || t || e.isCube || (this._bindTextureDirectly(n.TEXTURE_2D, e, !0), n.generateMipmap(n.TEXTURE_2D), this._bindTextureDirectly(n.TEXTURE_2D, null)), i && (e._MSAAFramebuffer && this._bindUnboundFramebuffer(e._framebuffer), i()), this._bindUnboundFramebuffer(null)
|
|
}, e.prototype.generateMipMapsForCubemap = function(e) {
|
|
if (e.generateMipMaps) {
|
|
var t = this._gl;
|
|
this._bindTextureDirectly(t.TEXTURE_CUBE_MAP, e, !0), t.generateMipmap(t.TEXTURE_CUBE_MAP), this._bindTextureDirectly(t.TEXTURE_CUBE_MAP, null)
|
|
}
|
|
}, e.prototype.flushFramebuffer = function() {
|
|
this._gl.flush()
|
|
}, e.prototype.restoreDefaultFramebuffer = function() {
|
|
this._currentRenderTarget ? this.unBindFramebuffer(this._currentRenderTarget) : this._bindUnboundFramebuffer(null), this._cachedViewport && this.setViewport(this._cachedViewport), this.wipeCaches()
|
|
}, e.prototype.createUniformBuffer = function(e) {
|
|
var t = this._gl.createBuffer();
|
|
if (!t) throw new Error("Unable to create uniform buffer");
|
|
var i = new E.a(t);
|
|
return this.bindUniformBuffer(i), e instanceof Float32Array ? this._gl.bufferData(this._gl.UNIFORM_BUFFER, e, this._gl.STATIC_DRAW) : this._gl.bufferData(this._gl.UNIFORM_BUFFER, new Float32Array(e), this._gl.STATIC_DRAW), this.bindUniformBuffer(null), i.references = 1, i
|
|
}, e.prototype.createDynamicUniformBuffer = function(e) {
|
|
var t = this._gl.createBuffer();
|
|
if (!t) throw new Error("Unable to create dynamic uniform buffer");
|
|
var i = new E.a(t);
|
|
return this.bindUniformBuffer(i), e instanceof Float32Array ? this._gl.bufferData(this._gl.UNIFORM_BUFFER, e, this._gl.DYNAMIC_DRAW) : this._gl.bufferData(this._gl.UNIFORM_BUFFER, new Float32Array(e), this._gl.DYNAMIC_DRAW), this.bindUniformBuffer(null), i.references = 1, i
|
|
}, e.prototype.updateUniformBuffer = function(e, t, i, n) {
|
|
this.bindUniformBuffer(e), void 0 === i && (i = 0), void 0 === n ? t instanceof Float32Array ? this._gl.bufferSubData(this._gl.UNIFORM_BUFFER, i, t) : this._gl.bufferSubData(this._gl.UNIFORM_BUFFER, i, new Float32Array(t)) : t instanceof Float32Array ? this._gl.bufferSubData(this._gl.UNIFORM_BUFFER, 0, t.subarray(i, i + n)) : this._gl.bufferSubData(this._gl.UNIFORM_BUFFER, 0, new Float32Array(t).subarray(i, i + n)), this.bindUniformBuffer(null)
|
|
}, e.prototype._resetVertexBufferBinding = function() {
|
|
this.bindArrayBuffer(null), this._cachedVertexBuffers = null
|
|
}, e.prototype.createVertexBuffer = function(e) {
|
|
var t = this._gl.createBuffer();
|
|
if (!t) throw new Error("Unable to create vertex buffer");
|
|
var i = new E.a(t);
|
|
return this.bindArrayBuffer(i), e instanceof Array ? this._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(e), this._gl.STATIC_DRAW) : this._gl.bufferData(this._gl.ARRAY_BUFFER, e, this._gl.STATIC_DRAW), this._resetVertexBufferBinding(), i.references = 1, i
|
|
}, e.prototype.createDynamicVertexBuffer = function(e) {
|
|
var t = this._gl.createBuffer();
|
|
if (!t) throw new Error("Unable to create dynamic vertex buffer");
|
|
var i = new E.a(t);
|
|
return this.bindArrayBuffer(i), e instanceof Array ? this._gl.bufferData(this._gl.ARRAY_BUFFER, new Float32Array(e), this._gl.DYNAMIC_DRAW) : this._gl.bufferData(this._gl.ARRAY_BUFFER, e, this._gl.DYNAMIC_DRAW), this._resetVertexBufferBinding(), i.references = 1, i
|
|
}, e.prototype.updateDynamicIndexBuffer = function(e, t, i) {
|
|
var n;
|
|
void 0 === i && (i = 0), this._currentBoundBuffer[this._gl.ELEMENT_ARRAY_BUFFER] = null, this.bindIndexBuffer(e), n = t instanceof Uint16Array || t instanceof Uint32Array ? t : e.is32Bits ? new Uint32Array(t) : new Uint16Array(t), this._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER, n, this._gl.DYNAMIC_DRAW), this._resetIndexBufferBinding()
|
|
}, e.prototype.updateDynamicVertexBuffer = function(e, t, i, n) {
|
|
this.bindArrayBuffer(e), void 0 === i && (i = 0), void 0 === n ? t instanceof Array ? this._gl.bufferSubData(this._gl.ARRAY_BUFFER, i, new Float32Array(t)) : this._gl.bufferSubData(this._gl.ARRAY_BUFFER, i, t) : t instanceof Array ? this._gl.bufferSubData(this._gl.ARRAY_BUFFER, 0, new Float32Array(t).subarray(i, i + n)) : (t = t instanceof ArrayBuffer ? new Uint8Array(t, i, n) : new Uint8Array(t.buffer, t.byteOffset + i, n), this._gl.bufferSubData(this._gl.ARRAY_BUFFER, 0, t)), this._resetVertexBufferBinding()
|
|
}, e.prototype._resetIndexBufferBinding = function() {
|
|
this.bindIndexBuffer(null), this._cachedIndexBuffer = null
|
|
}, e.prototype.createIndexBuffer = function(e, t) {
|
|
var i, n = this._gl.createBuffer(),
|
|
r = new E.a(n);
|
|
if (!n) throw new Error("Unable to create index buffer");
|
|
this.bindIndexBuffer(r);
|
|
var o = !1;
|
|
if (e instanceof Uint16Array) i = e;
|
|
else if (this._caps.uintIndices)
|
|
if (e instanceof Uint32Array) i = e, o = !0;
|
|
else {
|
|
for (var s = 0; s < e.length; s++)
|
|
if (e[s] > 65535) {
|
|
o = !0;
|
|
break
|
|
} i = o ? new Uint32Array(e) : new Uint16Array(e)
|
|
}
|
|
else i = new Uint16Array(e);
|
|
return this._gl.bufferData(this._gl.ELEMENT_ARRAY_BUFFER, i, t ? this._gl.DYNAMIC_DRAW : this._gl.STATIC_DRAW), this._resetIndexBufferBinding(), r.references = 1, r.is32Bits = o, r
|
|
}, e.prototype.bindArrayBuffer = function(e) {
|
|
this._vaoRecordInProgress || this._unbindVertexArrayObject(), this.bindBuffer(e, this._gl.ARRAY_BUFFER)
|
|
}, e.prototype.bindUniformBuffer = function(e) {
|
|
this._gl.bindBuffer(this._gl.UNIFORM_BUFFER, e ? e.underlyingResource : null)
|
|
}, e.prototype.bindUniformBufferBase = function(e, t) {
|
|
this._gl.bindBufferBase(this._gl.UNIFORM_BUFFER, t, e ? e.underlyingResource : null)
|
|
}, e.prototype.bindUniformBlock = function(e, t, i) {
|
|
var n = e.program,
|
|
r = this._gl.getUniformBlockIndex(n, t);
|
|
this._gl.uniformBlockBinding(n, r, i)
|
|
}, e.prototype.bindIndexBuffer = function(e) {
|
|
this._vaoRecordInProgress || this._unbindVertexArrayObject(), this.bindBuffer(e, this._gl.ELEMENT_ARRAY_BUFFER)
|
|
}, e.prototype.bindBuffer = function(e, t) {
|
|
(this._vaoRecordInProgress || this._currentBoundBuffer[t] !== e) && (this._gl.bindBuffer(t, e ? e.underlyingResource : null), this._currentBoundBuffer[t] = e)
|
|
}, e.prototype.updateArrayBuffer = function(e) {
|
|
this._gl.bufferSubData(this._gl.ARRAY_BUFFER, 0, e)
|
|
}, e.prototype._vertexAttribPointer = function(e, t, i, n, r, o, s) {
|
|
var a = this._currentBufferPointers[t],
|
|
c = !1;
|
|
a.active ? (a.buffer !== e && (a.buffer = e, c = !0), a.size !== i && (a.size = i, c = !0), a.type !== n && (a.type = n, c = !0), a.normalized !== r && (a.normalized = r, c = !0), a.stride !== o && (a.stride = o, c = !0), a.offset !== s && (a.offset = s, c = !0)) : (c = !0, a.active = !0, a.index = t, a.size = i, a.type = n, a.normalized = r, a.stride = o, a.offset = s, a.buffer = e), (c || this._vaoRecordInProgress) && (this.bindArrayBuffer(e), this._gl.vertexAttribPointer(t, i, n, r, o, s))
|
|
}, e.prototype._bindIndexBufferWithCache = function(e) {
|
|
null != e && this._cachedIndexBuffer !== e && (this._cachedIndexBuffer = e, this.bindIndexBuffer(e), this._uintIndicesCurrentlySet = e.is32Bits)
|
|
}, e.prototype._bindVertexBuffersAttributes = function(e, t) {
|
|
var i = t.getAttributesNames();
|
|
this._vaoRecordInProgress || this._unbindVertexArrayObject(), this.unbindAllAttributes();
|
|
for (var n = 0; n < i.length; n++) {
|
|
var r = t.getAttributeLocation(n);
|
|
if (r >= 0) {
|
|
var o = e[i[n]];
|
|
if (!o) continue;
|
|
this._gl.enableVertexAttribArray(r), this._vaoRecordInProgress || (this._vertexAttribArraysEnabled[r] = !0);
|
|
var s = o.getBuffer();
|
|
s && (this._vertexAttribPointer(s, r, o.getSize(), o.type, o.normalized, o.byteStride, o.byteOffset), o.getIsInstanced() && (this._gl.vertexAttribDivisor(r, o.getInstanceDivisor()), this._vaoRecordInProgress || (this._currentInstanceLocations.push(r), this._currentInstanceBuffers.push(s))))
|
|
}
|
|
}
|
|
}, e.prototype.recordVertexArrayObject = function(e, t, i) {
|
|
var n = this._gl.createVertexArray();
|
|
return this._vaoRecordInProgress = !0, this._gl.bindVertexArray(n), this._mustWipeVertexAttributes = !0, this._bindVertexBuffersAttributes(e, i), this.bindIndexBuffer(t), this._vaoRecordInProgress = !1, this._gl.bindVertexArray(null), n
|
|
}, e.prototype.bindVertexArrayObject = function(e, t) {
|
|
this._cachedVertexArrayObject !== e && (this._cachedVertexArrayObject = e, this._gl.bindVertexArray(e), this._cachedVertexBuffers = null, this._cachedIndexBuffer = null, this._uintIndicesCurrentlySet = null != t && t.is32Bits, this._mustWipeVertexAttributes = !0)
|
|
}, e.prototype.bindBuffersDirectly = function(e, t, i, n, r) {
|
|
if (this._cachedVertexBuffers !== e || this._cachedEffectForVertexBuffers !== r) {
|
|
this._cachedVertexBuffers = e, this._cachedEffectForVertexBuffers = r;
|
|
var o = r.getAttributesCount();
|
|
this._unbindVertexArrayObject(), this.unbindAllAttributes();
|
|
for (var s = 0, a = 0; a < o; a++)
|
|
if (a < i.length) {
|
|
var c = r.getAttributeLocation(a);
|
|
c >= 0 && (this._gl.enableVertexAttribArray(c), this._vertexAttribArraysEnabled[c] = !0, this._vertexAttribPointer(e, c, i[a], this._gl.FLOAT, !1, n, s)), s += 4 * i[a]
|
|
}
|
|
}
|
|
this._bindIndexBufferWithCache(t)
|
|
}, e.prototype._unbindVertexArrayObject = function() {
|
|
this._cachedVertexArrayObject && (this._cachedVertexArrayObject = null, this._gl.bindVertexArray(null))
|
|
}, e.prototype.bindBuffers = function(e, t, i) {
|
|
this._cachedVertexBuffers === e && this._cachedEffectForVertexBuffers === i || (this._cachedVertexBuffers = e, this._cachedEffectForVertexBuffers = i, this._bindVertexBuffersAttributes(e, i)), this._bindIndexBufferWithCache(t)
|
|
}, e.prototype.unbindInstanceAttributes = function() {
|
|
for (var e, t = 0, i = this._currentInstanceLocations.length; t < i; t++) {
|
|
var n = this._currentInstanceBuffers[t];
|
|
e != n && n.references && (e = n, this.bindArrayBuffer(n));
|
|
var r = this._currentInstanceLocations[t];
|
|
this._gl.vertexAttribDivisor(r, 0)
|
|
}
|
|
this._currentInstanceBuffers.length = 0, this._currentInstanceLocations.length = 0
|
|
}, e.prototype.releaseVertexArrayObject = function(e) {
|
|
this._gl.deleteVertexArray(e)
|
|
}, e.prototype._releaseBuffer = function(e) {
|
|
return e.references--, 0 === e.references && (this._gl.deleteBuffer(e.underlyingResource), !0)
|
|
}, e.prototype.createInstancesBuffer = function(e) {
|
|
var t = this._gl.createBuffer();
|
|
if (!t) throw new Error("Unable to create instance buffer");
|
|
var i = new E.a(t);
|
|
return i.capacity = e, this.bindArrayBuffer(i), this._gl.bufferData(this._gl.ARRAY_BUFFER, e, this._gl.DYNAMIC_DRAW), i
|
|
}, e.prototype.deleteInstancesBuffer = function(e) {
|
|
this._gl.deleteBuffer(e)
|
|
}, e.prototype.updateAndBindInstancesBuffer = function(e, t, i) {
|
|
if (this.bindArrayBuffer(e), t && this._gl.bufferSubData(this._gl.ARRAY_BUFFER, 0, t), void 0 !== i[0].index) {
|
|
for (var n = 0, r = 0; r < i.length; r++) {
|
|
n += 4 * (o = i[r]).attributeSize
|
|
}
|
|
for (r = 0; r < i.length; r++) {
|
|
var o = i[r];
|
|
this._vertexAttribArraysEnabled[o.index] || (this._gl.enableVertexAttribArray(o.index), this._vertexAttribArraysEnabled[o.index] = !0), this._vertexAttribPointer(e, o.index, o.attributeSize, o.attribyteType || this._gl.FLOAT, o.normalized || !1, n, o.offset), this._gl.vertexAttribDivisor(o.index, 1), this._currentInstanceLocations.push(o.index), this._currentInstanceBuffers.push(e)
|
|
}
|
|
} else
|
|
for (var s = 0; s < 4; s++) {
|
|
var a = i[s];
|
|
this._vertexAttribArraysEnabled[a] || (this._gl.enableVertexAttribArray(a), this._vertexAttribArraysEnabled[a] = !0), this._vertexAttribPointer(e, a, 4, this._gl.FLOAT, !1, 64, 16 * s), this._gl.vertexAttribDivisor(a, 1), this._currentInstanceLocations.push(a), this._currentInstanceBuffers.push(e)
|
|
}
|
|
}, e.prototype.applyStates = function() {
|
|
this._depthCullingState.apply(this._gl), this._stencilState.apply(this._gl), this._alphaState.apply(this._gl)
|
|
}, e.prototype.draw = function(e, t, i, n) {
|
|
this.drawElementsType(e ? d.a.TriangleFillMode : d.a.WireFrameFillMode, t, i, n)
|
|
}, e.prototype.drawPointClouds = function(e, t, i) {
|
|
this.drawArraysType(d.a.PointFillMode, e, t, i)
|
|
}, e.prototype.drawUnIndexed = function(e, t, i, n) {
|
|
this.drawArraysType(e ? d.a.TriangleFillMode : d.a.WireFrameFillMode, t, i, n)
|
|
}, e.prototype.drawElementsType = function(e, t, i, n) {
|
|
this.applyStates(), this._drawCalls.addCount(1, !1);
|
|
var r = this._drawMode(e),
|
|
o = this._uintIndicesCurrentlySet ? this._gl.UNSIGNED_INT : this._gl.UNSIGNED_SHORT,
|
|
s = this._uintIndicesCurrentlySet ? 4 : 2;
|
|
n ? this._gl.drawElementsInstanced(r, i, o, t * s, n) : this._gl.drawElements(r, i, o, t * s)
|
|
}, e.prototype.drawArraysType = function(e, t, i, n) {
|
|
this.applyStates(), this._drawCalls.addCount(1, !1);
|
|
var r = this._drawMode(e);
|
|
n ? this._gl.drawArraysInstanced(r, t, i, n) : this._gl.drawArrays(r, t, i)
|
|
}, e.prototype._drawMode = function(e) {
|
|
switch (e) {
|
|
case d.a.TriangleFillMode:
|
|
return this._gl.TRIANGLES;
|
|
case d.a.PointFillMode:
|
|
return this._gl.POINTS;
|
|
case d.a.WireFrameFillMode:
|
|
return this._gl.LINES;
|
|
case d.a.PointListDrawMode:
|
|
return this._gl.POINTS;
|
|
case d.a.LineListDrawMode:
|
|
return this._gl.LINES;
|
|
case d.a.LineLoopDrawMode:
|
|
return this._gl.LINE_LOOP;
|
|
case d.a.LineStripDrawMode:
|
|
return this._gl.LINE_STRIP;
|
|
case d.a.TriangleStripDrawMode:
|
|
return this._gl.TRIANGLE_STRIP;
|
|
case d.a.TriangleFanDrawMode:
|
|
return this._gl.TRIANGLE_FAN;
|
|
default:
|
|
return this._gl.TRIANGLES
|
|
}
|
|
}, e.prototype._releaseEffect = function(e) {
|
|
this._compiledEffects[e._key] && (delete this._compiledEffects[e._key], this._deletePipelineContext(e.getPipelineContext()))
|
|
}, e.prototype._deletePipelineContext = function(e) {
|
|
var t = e;
|
|
t && t.program && (t.program.__SPECTOR_rebuildProgram = null, t.transformFeedback && (this.deleteTransformFeedback(t.transformFeedback), t.transformFeedback = null), this._gl.deleteProgram(t.program))
|
|
}, e.prototype.createEffect = function(e, t, i, n, r, o, s, a, c) {
|
|
var l = (e.vertexElement || e.vertex || e) + "+" + (e.fragmentElement || e.fragment || e) + "@" + (r || t.defines);
|
|
if (this._compiledEffects[l]) {
|
|
var u = this._compiledEffects[l];
|
|
return s && u.isReady() && s(u), u
|
|
}
|
|
var d = new h.a(e, t, i, n, this, r, o, s, a, c);
|
|
return d._key = l, this._compiledEffects[l] = d, d
|
|
}, e.prototype._compileShader = function(e, t, i, n) {
|
|
return this._compileRawShader(n + (i ? i + "\n" : "") + e, t)
|
|
}, e.prototype._compileRawShader = function(e, t) {
|
|
var i = this._gl,
|
|
n = i.createShader("vertex" === t ? i.VERTEX_SHADER : i.FRAGMENT_SHADER);
|
|
if (!n) throw new Error("Something went wrong while compile the shader.");
|
|
return i.shaderSource(n, e), i.compileShader(n), n
|
|
}, e.prototype.createRawShaderProgram = function(e, t, i, n, r) {
|
|
void 0 === r && (r = null), n = n || this._gl;
|
|
var o = this._compileRawShader(t, "vertex"),
|
|
s = this._compileRawShader(i, "fragment");
|
|
return this._createShaderProgram(e, o, s, n, r)
|
|
}, e.prototype.createShaderProgram = function(e, t, i, n, r, o) {
|
|
void 0 === o && (o = null), r = r || this._gl, this.onBeforeShaderCompilationObservable.notifyObservers(this);
|
|
var s = this._webGLVersion > 1 ? "#version 300 es\n#define WEBGL2 \n" : "",
|
|
a = this._compileShader(t, "vertex", n, s),
|
|
c = this._compileShader(i, "fragment", n, s),
|
|
l = this._createShaderProgram(e, a, c, r, o);
|
|
return this.onAfterShaderCompilationObservable.notifyObservers(this), l
|
|
}, e.prototype.createPipelineContext = function() {
|
|
var e = new T.a;
|
|
return e.engine = this, this._caps.parallelShaderCompile && (e.isParallelCompiled = !0), e
|
|
}, e.prototype._createShaderProgram = function(e, t, i, n, r) {
|
|
void 0 === r && (r = null);
|
|
var o = n.createProgram();
|
|
if (e.program = o, !o) throw new Error("Unable to create program");
|
|
if (n.attachShader(o, t), n.attachShader(o, i), this.webGLVersion > 1 && r) {
|
|
var s = this.createTransformFeedback();
|
|
this.bindTransformFeedback(s), this.setTranformFeedbackVaryings(o, r), e.transformFeedback = s
|
|
}
|
|
return n.linkProgram(o), this.webGLVersion > 1 && r && this.bindTransformFeedback(null), e.context = n, e.vertexShader = t, e.fragmentShader = i, e.isParallelCompiled || this._finalizePipelineContext(e), o
|
|
}, e.prototype._finalizePipelineContext = function(e) {
|
|
var t = e.context,
|
|
i = e.vertexShader,
|
|
n = e.fragmentShader,
|
|
r = e.program;
|
|
if (!t.getProgramParameter(r, t.LINK_STATUS)) {
|
|
var o, s;
|
|
if (!this._gl.getShaderParameter(i, this._gl.COMPILE_STATUS))
|
|
if (o = this._gl.getShaderInfoLog(i)) throw new Error(o);
|
|
if (!this._gl.getShaderParameter(n, this._gl.COMPILE_STATUS))
|
|
if (o = this._gl.getShaderInfoLog(n)) throw new Error(o);
|
|
if (s = t.getProgramInfoLog(r)) throw new Error(s)
|
|
}
|
|
if (this.validateShaderPrograms && (t.validateProgram(r), !t.getProgramParameter(r, t.VALIDATE_STATUS) && (s = t.getProgramInfoLog(r)))) throw new Error(s);
|
|
t.deleteShader(i), t.deleteShader(n), e.vertexShader = void 0, e.fragmentShader = void 0, e.onCompiled && (e.onCompiled(), e.onCompiled = void 0)
|
|
}, e.prototype._preparePipelineContext = function(e, t, i, n, r, o, s) {
|
|
var a = e;
|
|
a.program = n ? this.createRawShaderProgram(a, t, i, void 0, s) : this.createShaderProgram(a, t, i, o, void 0, s), a.program.__SPECTOR_rebuildProgram = r
|
|
}, e.prototype._isRenderingStateCompiled = function(e) {
|
|
var t = e;
|
|
return !!this._gl.getProgramParameter(t.program, this._caps.parallelShaderCompile.COMPLETION_STATUS_KHR) && (this._finalizePipelineContext(t), !0)
|
|
}, e.prototype._executeWhenRenderingStateIsCompiled = function(e, t) {
|
|
var i = e;
|
|
i.isParallelCompiled ? i.onCompiled = t : t()
|
|
}, e.prototype.getUniforms = function(e, t) {
|
|
for (var i = new Array, n = e, r = 0; r < t.length; r++) i.push(this._gl.getUniformLocation(n.program, t[r]));
|
|
return i
|
|
}, e.prototype.getAttributes = function(e, t) {
|
|
for (var i = [], n = e, r = 0; r < t.length; r++) try {
|
|
i.push(this._gl.getAttribLocation(n.program, t[r]))
|
|
} catch (e) {
|
|
i.push(-1)
|
|
}
|
|
return i
|
|
}, e.prototype.enableEffect = function(e) {
|
|
e && e !== this._currentEffect && (this.bindSamplers(e), this._currentEffect = e, e.onBind && e.onBind(e), e._onBindObservable && e._onBindObservable.notifyObservers(e))
|
|
}, e.prototype.setIntArray = function(e, t) {
|
|
e && this._gl.uniform1iv(e, t)
|
|
}, e.prototype.setIntArray2 = function(e, t) {
|
|
e && t.length % 2 == 0 && this._gl.uniform2iv(e, t)
|
|
}, e.prototype.setIntArray3 = function(e, t) {
|
|
e && t.length % 3 == 0 && this._gl.uniform3iv(e, t)
|
|
}, e.prototype.setIntArray4 = function(e, t) {
|
|
e && t.length % 4 == 0 && this._gl.uniform4iv(e, t)
|
|
}, e.prototype.setFloatArray = function(e, t) {
|
|
e && this._gl.uniform1fv(e, t)
|
|
}, e.prototype.setFloatArray2 = function(e, t) {
|
|
e && t.length % 2 == 0 && this._gl.uniform2fv(e, t)
|
|
}, e.prototype.setFloatArray3 = function(e, t) {
|
|
e && t.length % 3 == 0 && this._gl.uniform3fv(e, t)
|
|
}, e.prototype.setFloatArray4 = function(e, t) {
|
|
e && t.length % 4 == 0 && this._gl.uniform4fv(e, t)
|
|
}, e.prototype.setArray = function(e, t) {
|
|
e && this._gl.uniform1fv(e, t)
|
|
}, e.prototype.setArray2 = function(e, t) {
|
|
e && t.length % 2 == 0 && this._gl.uniform2fv(e, t)
|
|
}, e.prototype.setArray3 = function(e, t) {
|
|
e && t.length % 3 == 0 && this._gl.uniform3fv(e, t)
|
|
}, e.prototype.setArray4 = function(e, t) {
|
|
e && t.length % 4 == 0 && this._gl.uniform4fv(e, t)
|
|
}, e.prototype.setMatrices = function(e, t) {
|
|
e && this._gl.uniformMatrix4fv(e, !1, t)
|
|
}, e.prototype.setMatrix = function(e, t) {
|
|
e && this._gl.uniformMatrix4fv(e, !1, t.toArray())
|
|
}, e.prototype.setMatrix3x3 = function(e, t) {
|
|
e && this._gl.uniformMatrix3fv(e, !1, t)
|
|
}, e.prototype.setMatrix2x2 = function(e, t) {
|
|
e && this._gl.uniformMatrix2fv(e, !1, t)
|
|
}, e.prototype.setInt = function(e, t) {
|
|
e && this._gl.uniform1i(e, t)
|
|
}, e.prototype.setFloat = function(e, t) {
|
|
e && this._gl.uniform1f(e, t)
|
|
}, e.prototype.setFloat2 = function(e, t, i) {
|
|
e && this._gl.uniform2f(e, t, i)
|
|
}, e.prototype.setFloat3 = function(e, t, i, n) {
|
|
e && this._gl.uniform3f(e, t, i, n)
|
|
}, e.prototype.setBool = function(e, t) {
|
|
e && this._gl.uniform1i(e, t)
|
|
}, e.prototype.setFloat4 = function(e, t, i, n, r) {
|
|
e && this._gl.uniform4f(e, t, i, n, r)
|
|
}, e.prototype.setColor3 = function(e, t) {
|
|
e && this._gl.uniform3f(e, t.r, t.g, t.b)
|
|
}, e.prototype.setColor4 = function(e, t, i) {
|
|
e && this._gl.uniform4f(e, t.r, t.g, t.b, i)
|
|
}, e.prototype.setDirectColor4 = function(e, t) {
|
|
e && this._gl.uniform4f(e, t.r, t.g, t.b, t.a)
|
|
}, e.prototype.setState = function(e, t, i, n) {
|
|
void 0 === t && (t = 0), void 0 === n && (n = !1), (this._depthCullingState.cull !== e || i) && (this._depthCullingState.cull = e);
|
|
var r = this.cullBackFaces ? this._gl.BACK : this._gl.FRONT;
|
|
(this._depthCullingState.cullFace !== r || i) && (this._depthCullingState.cullFace = r), this.setZOffset(t);
|
|
var o = n ? this._gl.CW : this._gl.CCW;
|
|
(this._depthCullingState.frontFace !== o || i) && (this._depthCullingState.frontFace = o)
|
|
}, e.prototype.setZOffset = function(e) {
|
|
this._depthCullingState.zOffset = e
|
|
}, e.prototype.getZOffset = function() {
|
|
return this._depthCullingState.zOffset
|
|
}, e.prototype.setDepthBuffer = function(e) {
|
|
this._depthCullingState.depthTest = e
|
|
}, e.prototype.getDepthWrite = function() {
|
|
return this._depthCullingState.depthMask
|
|
}, e.prototype.setDepthWrite = function(e) {
|
|
this._depthCullingState.depthMask = e
|
|
}, e.prototype.setColorWrite = function(e) {
|
|
this._gl.colorMask(e, e, e, e), this._colorWrite = e
|
|
}, e.prototype.getColorWrite = function() {
|
|
return this._colorWrite
|
|
}, e.prototype.setAlphaConstants = function(e, t, i, n) {
|
|
this._alphaState.setAlphaBlendConstants(e, t, i, n)
|
|
}, e.prototype.setAlphaMode = function(t, i) {
|
|
if (void 0 === i && (i = !1), this._alphaMode !== t) {
|
|
switch (t) {
|
|
case e.ALPHA_DISABLE:
|
|
this._alphaState.alphaBlend = !1;
|
|
break;
|
|
case e.ALPHA_PREMULTIPLIED:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE), this._alphaState.alphaBlend = !0;
|
|
break;
|
|
case e.ALPHA_PREMULTIPLIED_PORTERDUFF:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA), this._alphaState.alphaBlend = !0;
|
|
break;
|
|
case e.ALPHA_COMBINE:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE), this._alphaState.alphaBlend = !0;
|
|
break;
|
|
case e.ALPHA_ONEONE:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ZERO, this._gl.ONE), this._alphaState.alphaBlend = !0;
|
|
break;
|
|
case e.ALPHA_ADD:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ONE), this._alphaState.alphaBlend = !0;
|
|
break;
|
|
case e.ALPHA_SUBTRACT:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.ZERO, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE), this._alphaState.alphaBlend = !0;
|
|
break;
|
|
case e.ALPHA_MULTIPLY:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_COLOR, this._gl.ZERO, this._gl.ONE, this._gl.ONE), this._alphaState.alphaBlend = !0;
|
|
break;
|
|
case e.ALPHA_MAXIMIZED:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE), this._alphaState.alphaBlend = !0;
|
|
break;
|
|
case e.ALPHA_INTERPOLATE:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.CONSTANT_COLOR, this._gl.ONE_MINUS_CONSTANT_COLOR, this._gl.CONSTANT_ALPHA, this._gl.ONE_MINUS_CONSTANT_ALPHA), this._alphaState.alphaBlend = !0;
|
|
break;
|
|
case e.ALPHA_SCREENMODE:
|
|
this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA), this._alphaState.alphaBlend = !0
|
|
}
|
|
i || this.setDepthWrite(t === e.ALPHA_DISABLE), this._alphaMode = t
|
|
}
|
|
}, e.prototype.getAlphaMode = function() {
|
|
return this._alphaMode
|
|
}, e.prototype.clearInternalTexturesCache = function() {
|
|
this._internalTexturesCache = []
|
|
}, e.prototype.wipeCaches = function(e) {
|
|
this.preventCacheWipeBetweenFrames && !e || (this._currentEffect = null, this._viewportCached.x = 0, this._viewportCached.y = 0, this._viewportCached.z = 0, this._viewportCached.w = 0, e && (this.resetTextureCache(), this._currentProgram = null, this._stencilState.reset(), this._depthCullingState.reset(), this.setDepthFunctionToLessOrEqual(), this._alphaState.reset(), this._unpackFlipYCached = null), this._resetVertexBufferBinding(), this._cachedIndexBuffer = null, this._cachedEffectForVertexBuffers = null, this._unbindVertexArrayObject(), this.bindIndexBuffer(null))
|
|
}, e.prototype.setTextureFormatToUse = function(e) {
|
|
for (var t = 0, i = this.texturesSupported.length; t < i; t++)
|
|
for (var n = 0, r = e.length; n < r; n++)
|
|
if (this._texturesSupported[t] === e[n].toLowerCase()) return this._textureFormatInUse = this._texturesSupported[t];
|
|
return this._textureFormatInUse = null, null
|
|
}, e.prototype._getSamplingParameters = function(t, i) {
|
|
var n = this._gl,
|
|
r = n.NEAREST,
|
|
o = n.NEAREST;
|
|
switch (t) {
|
|
case e.TEXTURE_BILINEAR_SAMPLINGMODE:
|
|
r = n.LINEAR, o = i ? n.LINEAR_MIPMAP_NEAREST : n.LINEAR;
|
|
break;
|
|
case e.TEXTURE_TRILINEAR_SAMPLINGMODE:
|
|
r = n.LINEAR, o = i ? n.LINEAR_MIPMAP_LINEAR : n.LINEAR;
|
|
break;
|
|
case e.TEXTURE_NEAREST_SAMPLINGMODE:
|
|
r = n.NEAREST, o = i ? n.NEAREST_MIPMAP_LINEAR : n.NEAREST;
|
|
break;
|
|
case e.TEXTURE_NEAREST_NEAREST_MIPNEAREST:
|
|
r = n.NEAREST, o = i ? n.NEAREST_MIPMAP_NEAREST : n.NEAREST;
|
|
break;
|
|
case e.TEXTURE_NEAREST_LINEAR_MIPNEAREST:
|
|
r = n.NEAREST, o = i ? n.LINEAR_MIPMAP_NEAREST : n.LINEAR;
|
|
break;
|
|
case e.TEXTURE_NEAREST_LINEAR_MIPLINEAR:
|
|
r = n.NEAREST, o = i ? n.LINEAR_MIPMAP_LINEAR : n.LINEAR;
|
|
break;
|
|
case e.TEXTURE_NEAREST_LINEAR:
|
|
r = n.NEAREST, o = n.LINEAR;
|
|
break;
|
|
case e.TEXTURE_NEAREST_NEAREST:
|
|
r = n.NEAREST, o = n.NEAREST;
|
|
break;
|
|
case e.TEXTURE_LINEAR_NEAREST_MIPNEAREST:
|
|
r = n.LINEAR, o = i ? n.NEAREST_MIPMAP_NEAREST : n.NEAREST;
|
|
break;
|
|
case e.TEXTURE_LINEAR_NEAREST_MIPLINEAR:
|
|
r = n.LINEAR, o = i ? n.NEAREST_MIPMAP_LINEAR : n.NEAREST;
|
|
break;
|
|
case e.TEXTURE_LINEAR_LINEAR:
|
|
r = n.LINEAR, o = n.LINEAR;
|
|
break;
|
|
case e.TEXTURE_LINEAR_NEAREST:
|
|
r = n.LINEAR, o = n.NEAREST
|
|
}
|
|
return {
|
|
min: o,
|
|
mag: r
|
|
}
|
|
}, e.prototype._createTexture = function() {
|
|
var e = this._gl.createTexture();
|
|
if (!e) throw new Error("Unable to create texture");
|
|
return e
|
|
}, e.prototype.createTexture = function(t, i, n, r, o, s, a, l, u, h, d, p) {
|
|
var _ = this;
|
|
void 0 === o && (o = e.TEXTURE_TRILINEAR_SAMPLINGMODE), void 0 === s && (s = null), void 0 === a && (a = null), void 0 === l && (l = null), void 0 === u && (u = null), void 0 === h && (h = null), void 0 === d && (d = null), void 0 === p && (p = []);
|
|
for (var g = String(t), m = "data:" === g.substr(0, 5), v = "blob:" === g.substr(0, 5), y = m && -1 !== g.indexOf(";base64,"), b = u || new f.a(this, f.a.DATASOURCE_URL), T = g.lastIndexOf("."), E = d || (T > -1 ? g.substring(T).toLowerCase() : ""), A = null, x = 0, R = e._TextureLoaders; x < R.length; x++) {
|
|
var P = R[x];
|
|
if (-1 === p.indexOf(P) && P.canLoad(E, this._textureFormatInUse, u, y, !!l)) {
|
|
A = P;
|
|
break
|
|
}
|
|
}
|
|
A && (g = A.transformUrl(g, this._textureFormatInUse)), r && r._addPendingData(b), b.url = g, b.generateMipMaps = !i, b.samplingMode = o, b.invertY = n, this._doNotHandleContextLost || (b._buffer = l);
|
|
var S = null;
|
|
s && !u && (S = b.onLoadedObservable.add(s)), u || this._internalTexturesCache.push(b);
|
|
var C = function(e, n) {
|
|
r && r._removePendingData(b);
|
|
var s = !1;
|
|
A && (A.getFallbackTextureUrl(g, _._textureFormatInUse) && (s = !0, p.push(A), c.h.Warn(A.constructor.name + " failed when trying to load " + b.url + ", falling back to the next supported loader"), _.createTexture(t, i, b.invertY, r, o, null, null, l, b, void 0, void 0, p)));
|
|
s || (S && b.onLoadedObservable.remove(S), c.h.UseFallbackTexture && _.createTexture(c.h.fallbackTexture, i, b.invertY, r, o, null, null, l, b)), a && a(e || "Unknown error", n)
|
|
};
|
|
if (A) {
|
|
var M = function(e) {
|
|
A.loadData(e, b, function(e, t, i, n, s, a) {
|
|
a ? C("TextureLoader failed to load data") : _._prepareWebGLTexture(b, r, e, t, b.invertY, !i, n, function() {
|
|
return s(), !1
|
|
}, o)
|
|
})
|
|
};
|
|
l ? M(l) : this._loadFile(g, M, void 0, r ? r.offlineProvider : void 0, !0, function(e, t) {
|
|
C("Unable to load " + (e && e.responseURL, t))
|
|
})
|
|
} else {
|
|
var O = function(t) {
|
|
v && !_._doNotHandleContextLost && (b._buffer = t), _._prepareWebGLTexture(b, r, t.width, t.height, b.invertY, i, !1, function(i, n, o) {
|
|
var s = _._gl,
|
|
a = t.width === i && t.height === n,
|
|
c = h ? _._getInternalFormat(h) : ".jpg" === E ? s.RGB : s.RGBA;
|
|
if (a) return s.texImage2D(s.TEXTURE_2D, 0, c, c, s.UNSIGNED_BYTE, t), !1;
|
|
var l = _._caps.maxTextureSize;
|
|
if (t.width > l || t.height > l || null === e._RescalePostProcessFactory) return _._prepareWorkingCanvas(), !(!_._workingCanvas || !_._workingContext) && (_._workingCanvas.width = i, _._workingCanvas.height = n, _._workingContext.drawImage(t, 0, 0, t.width, t.height, 0, 0, i, n), s.texImage2D(s.TEXTURE_2D, 0, c, c, s.UNSIGNED_BYTE, _._workingCanvas), b.width = i, b.height = n, !1);
|
|
var u = new f.a(_, f.a.DATASOURCE_TEMP);
|
|
return _._bindTextureDirectly(s.TEXTURE_2D, u, !0), s.texImage2D(s.TEXTURE_2D, 0, c, c, s.UNSIGNED_BYTE, t), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_MAG_FILTER, s.LINEAR), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_MIN_FILTER, s.LINEAR), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_WRAP_S, s.CLAMP_TO_EDGE), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_WRAP_T, s.CLAMP_TO_EDGE), _._rescaleTexture(u, b, r, c, function() {
|
|
_._releaseTexture(u), _._bindTextureDirectly(s.TEXTURE_2D, b, !0), o()
|
|
}), !0
|
|
}, o)
|
|
};
|
|
!m || y ? l instanceof HTMLImageElement ? O(l) : c.h.LoadImage(g, O, C, r ? r.offlineProvider : null) : "string" == typeof l || l instanceof ArrayBuffer || l instanceof Blob ? c.h.LoadImage(l, O, C, r ? r.offlineProvider : null) : O(l)
|
|
}
|
|
return b
|
|
}, e.prototype._rescaleTexture = function(t, i, n, r, o) {
|
|
var s = this,
|
|
a = this.createRenderTargetTexture({
|
|
width: i.width,
|
|
height: i.height
|
|
}, {
|
|
generateMipMaps: !1,
|
|
type: e.TEXTURETYPE_UNSIGNED_INT,
|
|
samplingMode: e.TEXTURE_BILINEAR_SAMPLINGMODE,
|
|
generateDepthBuffer: !1,
|
|
generateStencilBuffer: !1
|
|
});
|
|
!this._rescalePostProcess && e._RescalePostProcessFactory && (this._rescalePostProcess = e._RescalePostProcessFactory(this)), this._rescalePostProcess.getEffect().executeWhenCompiled(function() {
|
|
s._rescalePostProcess.onApply = function(e) {
|
|
e._bindTexture("textureSampler", t)
|
|
};
|
|
var e = n;
|
|
e || (e = s.scenes[s.scenes.length - 1]), e.postProcessManager.directRender([s._rescalePostProcess], a, !0), s._bindTextureDirectly(s._gl.TEXTURE_2D, i, !0), s._gl.copyTexImage2D(s._gl.TEXTURE_2D, 0, r, 0, 0, i.width, i.height, 0), s.unBindFramebuffer(a), s._releaseTexture(a), o && o()
|
|
})
|
|
}, e.prototype.createRawTexture = function(t, i, n, r, o, s, a, c, l) {
|
|
throw void 0 === c && (c = null), void 0 === l && (l = e.TEXTURETYPE_UNSIGNED_INT), b.a.WarnImport("Engine.RawTexture")
|
|
}, e.prototype._unpackFlipY = function(e) {
|
|
this._unpackFlipYCached !== e && (this._gl.pixelStorei(this._gl.UNPACK_FLIP_Y_WEBGL, e ? 1 : 0), this.enableUnpackFlipYCached && (this._unpackFlipYCached = e))
|
|
}, e.prototype._getUnpackAlignement = function() {
|
|
return this._gl.getParameter(this._gl.UNPACK_ALIGNMENT)
|
|
}, e.prototype.createDynamicTexture = function(e, t, i, n) {
|
|
var r = new f.a(this, f.a.DATASOURCE_DYNAMIC);
|
|
return r.baseWidth = e, r.baseHeight = t, i && (e = this.needPOTTextures ? c.h.GetExponentOfTwo(e, this._caps.maxTextureSize) : e, t = this.needPOTTextures ? c.h.GetExponentOfTwo(t, this._caps.maxTextureSize) : t), r.width = e, r.height = t, r.isReady = !1, r.generateMipMaps = i, r.samplingMode = n, this.updateTextureSamplingMode(n, r), this._internalTexturesCache.push(r), r
|
|
}, e.prototype.updateTextureSamplingMode = function(e, t) {
|
|
var i = this._getSamplingParameters(e, t.generateMipMaps);
|
|
t.isCube ? (this._setTextureParameterInteger(this._gl.TEXTURE_CUBE_MAP, this._gl.TEXTURE_MAG_FILTER, i.mag, t), this._setTextureParameterInteger(this._gl.TEXTURE_CUBE_MAP, this._gl.TEXTURE_MIN_FILTER, i.min), this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, null)) : t.is3D ? (this._setTextureParameterInteger(this._gl.TEXTURE_3D, this._gl.TEXTURE_MAG_FILTER, i.mag, t), this._setTextureParameterInteger(this._gl.TEXTURE_3D, this._gl.TEXTURE_MIN_FILTER, i.min), this._bindTextureDirectly(this._gl.TEXTURE_3D, null)) : (this._setTextureParameterInteger(this._gl.TEXTURE_2D, this._gl.TEXTURE_MAG_FILTER, i.mag, t), this._setTextureParameterInteger(this._gl.TEXTURE_2D, this._gl.TEXTURE_MIN_FILTER, i.min), this._bindTextureDirectly(this._gl.TEXTURE_2D, null)), t.samplingMode = e
|
|
}, e.prototype.updateDynamicTexture = function(e, t, i, n, r, o) {
|
|
if (void 0 === n && (n = !1), void 0 === o && (o = !1), e) {
|
|
this._bindTextureDirectly(this._gl.TEXTURE_2D, e, !0, o), this._unpackFlipY(i), n && this._gl.pixelStorei(this._gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 1);
|
|
var s = r ? this._getInternalFormat(r) : this._gl.RGBA;
|
|
this._gl.texImage2D(this._gl.TEXTURE_2D, 0, s, s, this._gl.UNSIGNED_BYTE, t), e.generateMipMaps && this._gl.generateMipmap(this._gl.TEXTURE_2D), this._bindTextureDirectly(this._gl.TEXTURE_2D, null), n && this._gl.pixelStorei(this._gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0), e.isReady = !0
|
|
}
|
|
}, e.prototype.updateVideoTexture = function(e, t, i) {
|
|
if (e && !e._isDisabled) {
|
|
var n = this._bindTextureDirectly(this._gl.TEXTURE_2D, e, !0);
|
|
this._unpackFlipY(!i);
|
|
try {
|
|
if (void 0 === this._videoTextureSupported && (this._gl.texImage2D(this._gl.TEXTURE_2D, 0, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, t), 0 !== this._gl.getError() ? this._videoTextureSupported = !1 : this._videoTextureSupported = !0), this._videoTextureSupported) this._gl.texImage2D(this._gl.TEXTURE_2D, 0, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, t);
|
|
else {
|
|
if (!e._workingCanvas) {
|
|
e._workingCanvas = document.createElement("canvas");
|
|
var r = e._workingCanvas.getContext("2d");
|
|
if (!r) throw new Error("Unable to get 2d context");
|
|
e._workingContext = r, e._workingCanvas.width = e.width, e._workingCanvas.height = e.height
|
|
}
|
|
e._workingContext.drawImage(t, 0, 0, t.videoWidth, t.videoHeight, 0, 0, e.width, e.height), this._gl.texImage2D(this._gl.TEXTURE_2D, 0, this._gl.RGBA, this._gl.RGBA, this._gl.UNSIGNED_BYTE, e._workingCanvas)
|
|
}
|
|
e.generateMipMaps && this._gl.generateMipmap(this._gl.TEXTURE_2D), n || this._bindTextureDirectly(this._gl.TEXTURE_2D, null), e.isReady = !0
|
|
} catch (t) {
|
|
e._isDisabled = !0
|
|
}
|
|
}
|
|
}, e.prototype.updateTextureComparisonFunction = function(t, i) {
|
|
if (1 !== this.webGLVersion) {
|
|
var n = this._gl;
|
|
t.isCube ? (this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, t, !0), 0 === i ? (n.texParameteri(n.TEXTURE_CUBE_MAP, n.TEXTURE_COMPARE_FUNC, e.LEQUAL), n.texParameteri(n.TEXTURE_CUBE_MAP, n.TEXTURE_COMPARE_MODE, n.NONE)) : (n.texParameteri(n.TEXTURE_CUBE_MAP, n.TEXTURE_COMPARE_FUNC, i), n.texParameteri(n.TEXTURE_CUBE_MAP, n.TEXTURE_COMPARE_MODE, n.COMPARE_REF_TO_TEXTURE)), this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, null)) : (this._bindTextureDirectly(this._gl.TEXTURE_2D, t, !0), 0 === i ? (n.texParameteri(n.TEXTURE_2D, n.TEXTURE_COMPARE_FUNC, e.LEQUAL), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_COMPARE_MODE, n.NONE)) : (n.texParameteri(n.TEXTURE_2D, n.TEXTURE_COMPARE_FUNC, i), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_COMPARE_MODE, n.COMPARE_REF_TO_TEXTURE)), this._bindTextureDirectly(this._gl.TEXTURE_2D, null)), t._comparisonFunction = i
|
|
} else m.a.Error("WebGL 1 does not support texture comparison.")
|
|
}, e.prototype._setupDepthStencilTexture = function(t, i, n, r, o) {
|
|
var s = i.width || i,
|
|
a = i.height || i;
|
|
t.baseWidth = s, t.baseHeight = a, t.width = s, t.height = a, t.isReady = !0, t.samples = 1, t.generateMipMaps = !1, t._generateDepthBuffer = !0, t._generateStencilBuffer = n, t.samplingMode = r ? e.TEXTURE_BILINEAR_SAMPLINGMODE : e.TEXTURE_NEAREST_SAMPLINGMODE, t.type = e.TEXTURETYPE_UNSIGNED_INT, t._comparisonFunction = o;
|
|
var c = this._gl,
|
|
l = t.isCube ? c.TEXTURE_CUBE_MAP : c.TEXTURE_2D,
|
|
u = this._getSamplingParameters(t.samplingMode, !1);
|
|
c.texParameteri(l, c.TEXTURE_MAG_FILTER, u.mag), c.texParameteri(l, c.TEXTURE_MIN_FILTER, u.min), c.texParameteri(l, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE), c.texParameteri(l, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE), 0 === o ? (c.texParameteri(l, c.TEXTURE_COMPARE_FUNC, e.LEQUAL), c.texParameteri(l, c.TEXTURE_COMPARE_MODE, c.NONE)) : (c.texParameteri(l, c.TEXTURE_COMPARE_FUNC, o), c.texParameteri(l, c.TEXTURE_COMPARE_MODE, c.COMPARE_REF_TO_TEXTURE))
|
|
}, e.prototype.createDepthStencilTexture = function(e, t) {
|
|
if (t.isCube) {
|
|
var i = e.width || e;
|
|
return this._createDepthStencilCubeTexture(i, t)
|
|
}
|
|
return this._createDepthStencilTexture(e, t)
|
|
}, e.prototype._createDepthStencilTexture = function(e, t) {
|
|
var i = new f.a(this, f.a.DATASOURCE_DEPTHTEXTURE);
|
|
if (!this._caps.depthTextureExtension) return m.a.Error("Depth texture is not supported by your browser or hardware."), i;
|
|
var r = n.a({
|
|
bilinearFiltering: !1,
|
|
comparisonFunction: 0,
|
|
generateStencil: !1
|
|
}, t),
|
|
o = this._gl;
|
|
return this._bindTextureDirectly(o.TEXTURE_2D, i, !0), this._setupDepthStencilTexture(i, e, r.generateStencil, r.bilinearFiltering, r.comparisonFunction), this.webGLVersion > 1 ? r.generateStencil ? o.texImage2D(o.TEXTURE_2D, 0, o.DEPTH24_STENCIL8, i.width, i.height, 0, o.DEPTH_STENCIL, o.UNSIGNED_INT_24_8, null) : o.texImage2D(o.TEXTURE_2D, 0, o.DEPTH_COMPONENT24, i.width, i.height, 0, o.DEPTH_COMPONENT, o.UNSIGNED_INT, null) : r.generateStencil ? o.texImage2D(o.TEXTURE_2D, 0, o.DEPTH_STENCIL, i.width, i.height, 0, o.DEPTH_STENCIL, o.UNSIGNED_INT_24_8, null) : o.texImage2D(o.TEXTURE_2D, 0, o.DEPTH_COMPONENT, i.width, i.height, 0, o.DEPTH_COMPONENT, o.UNSIGNED_INT, null), this._bindTextureDirectly(o.TEXTURE_2D, null), i
|
|
}, e.prototype.setFrameBufferDepthStencilTexture = function(e) {
|
|
var t = e.getInternalTexture();
|
|
if (t && t._framebuffer && e.depthStencilTexture) {
|
|
var i = this._gl,
|
|
n = e.depthStencilTexture;
|
|
this._bindUnboundFramebuffer(t._framebuffer), n.isCube ? n._generateStencilBuffer ? i.framebufferTexture2D(i.FRAMEBUFFER, i.DEPTH_STENCIL_ATTACHMENT, i.TEXTURE_CUBE_MAP_POSITIVE_X, n._webGLTexture, 0) : i.framebufferTexture2D(i.FRAMEBUFFER, i.DEPTH_ATTACHMENT, i.TEXTURE_CUBE_MAP_POSITIVE_X, n._webGLTexture, 0) : n._generateStencilBuffer ? i.framebufferTexture2D(i.FRAMEBUFFER, i.DEPTH_STENCIL_ATTACHMENT, i.TEXTURE_2D, n._webGLTexture, 0) : i.framebufferTexture2D(i.FRAMEBUFFER, i.DEPTH_ATTACHMENT, i.TEXTURE_2D, n._webGLTexture, 0), this._bindUnboundFramebuffer(null)
|
|
}
|
|
}, e.prototype.createRenderTargetTexture = function(t, i) {
|
|
var n = new y.a;
|
|
void 0 !== i && "object" == typeof i ? (n.generateMipMaps = i.generateMipMaps, n.generateDepthBuffer = void 0 === i.generateDepthBuffer || i.generateDepthBuffer, n.generateStencilBuffer = n.generateDepthBuffer && i.generateStencilBuffer, n.type = void 0 === i.type ? e.TEXTURETYPE_UNSIGNED_INT : i.type, n.samplingMode = void 0 === i.samplingMode ? e.TEXTURE_TRILINEAR_SAMPLINGMODE : i.samplingMode, n.format = void 0 === i.format ? e.TEXTUREFORMAT_RGBA : i.format) : (n.generateMipMaps = i, n.generateDepthBuffer = !0, n.generateStencilBuffer = !1, n.type = e.TEXTURETYPE_UNSIGNED_INT, n.samplingMode = e.TEXTURE_TRILINEAR_SAMPLINGMODE, n.format = e.TEXTUREFORMAT_RGBA), (n.type !== e.TEXTURETYPE_FLOAT || this._caps.textureFloatLinearFiltering) && (n.type !== e.TEXTURETYPE_HALF_FLOAT || this._caps.textureHalfFloatLinearFiltering) || (n.samplingMode = e.TEXTURE_NEAREST_SAMPLINGMODE);
|
|
var r = this._gl,
|
|
o = new f.a(this, f.a.DATASOURCE_RENDERTARGET);
|
|
this._bindTextureDirectly(r.TEXTURE_2D, o, !0);
|
|
var s = t.width || t,
|
|
a = t.height || t,
|
|
c = this._getSamplingParameters(n.samplingMode, !!n.generateMipMaps);
|
|
n.type !== e.TEXTURETYPE_FLOAT || this._caps.textureFloat || (n.type = e.TEXTURETYPE_UNSIGNED_INT, m.a.Warn("Float textures are not supported. Render target forced to TEXTURETYPE_UNSIGNED_BYTE type")), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_MAG_FILTER, c.mag), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_MIN_FILTER, c.min), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_S, r.CLAMP_TO_EDGE), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_T, r.CLAMP_TO_EDGE), r.texImage2D(r.TEXTURE_2D, 0, this._getRGBABufferInternalSizedFormat(n.type, n.format), s, a, 0, this._getInternalFormat(n.format), this._getWebGLTextureType(n.type), null);
|
|
var l = this._currentFramebuffer,
|
|
u = r.createFramebuffer();
|
|
return this._bindUnboundFramebuffer(u), r.framebufferTexture2D(r.FRAMEBUFFER, r.COLOR_ATTACHMENT0, r.TEXTURE_2D, o._webGLTexture, 0), o._depthStencilBuffer = this._setupFramebufferDepthAttachments(!!n.generateStencilBuffer, n.generateDepthBuffer, s, a), n.generateMipMaps && this._gl.generateMipmap(this._gl.TEXTURE_2D), this._bindTextureDirectly(r.TEXTURE_2D, null), r.bindRenderbuffer(r.RENDERBUFFER, null), this._bindUnboundFramebuffer(l), o._framebuffer = u, o.baseWidth = s, o.baseHeight = a, o.width = s, o.height = a, o.isReady = !0, o.samples = 1, o.generateMipMaps = !!n.generateMipMaps, o.samplingMode = n.samplingMode, o.type = n.type, o.format = n.format, o._generateDepthBuffer = n.generateDepthBuffer, o._generateStencilBuffer = !!n.generateStencilBuffer, this._internalTexturesCache.push(o), o
|
|
}, e.prototype._setupFramebufferDepthAttachments = function(e, t, i, n, r) {
|
|
void 0 === r && (r = 1);
|
|
var o = null,
|
|
s = this._gl;
|
|
return e ? (o = s.createRenderbuffer(), s.bindRenderbuffer(s.RENDERBUFFER, o), r > 1 ? s.renderbufferStorageMultisample(s.RENDERBUFFER, r, s.DEPTH24_STENCIL8, i, n) : s.renderbufferStorage(s.RENDERBUFFER, s.DEPTH_STENCIL, i, n), s.framebufferRenderbuffer(s.FRAMEBUFFER, s.DEPTH_STENCIL_ATTACHMENT, s.RENDERBUFFER, o)) : t && (o = s.createRenderbuffer(), s.bindRenderbuffer(s.RENDERBUFFER, o), r > 1 ? s.renderbufferStorageMultisample(s.RENDERBUFFER, r, s.DEPTH_COMPONENT16, i, n) : s.renderbufferStorage(s.RENDERBUFFER, s.DEPTH_COMPONENT16, i, n), s.framebufferRenderbuffer(s.FRAMEBUFFER, s.DEPTH_ATTACHMENT, s.RENDERBUFFER, o)), o
|
|
}, e.prototype.updateRenderTargetTextureSampleCount = function(e, t) {
|
|
if (this.webGLVersion < 2 || !e) return 1;
|
|
if (e.samples === t) return t;
|
|
var i = this._gl;
|
|
if (t = Math.min(t, i.getParameter(i.MAX_SAMPLES)), e._depthStencilBuffer && (i.deleteRenderbuffer(e._depthStencilBuffer), e._depthStencilBuffer = null), e._MSAAFramebuffer && (i.deleteFramebuffer(e._MSAAFramebuffer), e._MSAAFramebuffer = null), e._MSAARenderBuffer && (i.deleteRenderbuffer(e._MSAARenderBuffer), e._MSAARenderBuffer = null), t > 1) {
|
|
var n = i.createFramebuffer();
|
|
if (!n) throw new Error("Unable to create multi sampled framebuffer");
|
|
e._MSAAFramebuffer = n, this._bindUnboundFramebuffer(e._MSAAFramebuffer);
|
|
var r = i.createRenderbuffer();
|
|
if (!r) throw new Error("Unable to create multi sampled framebuffer");
|
|
i.bindRenderbuffer(i.RENDERBUFFER, r), i.renderbufferStorageMultisample(i.RENDERBUFFER, t, this._getRGBAMultiSampleBufferFormat(e.type), e.width, e.height), i.framebufferRenderbuffer(i.FRAMEBUFFER, i.COLOR_ATTACHMENT0, i.RENDERBUFFER, r), e._MSAARenderBuffer = r
|
|
} else this._bindUnboundFramebuffer(e._framebuffer);
|
|
return e.samples = t, e._depthStencilBuffer = this._setupFramebufferDepthAttachments(e._generateStencilBuffer, e._generateDepthBuffer, e.width, e.height, t), i.bindRenderbuffer(i.RENDERBUFFER, null), this._bindUnboundFramebuffer(null), t
|
|
}, e.prototype._uploadCompressedDataToTextureDirectly = function(e, t, i, n, r, o, s) {
|
|
void 0 === o && (o = 0), void 0 === s && (s = 0);
|
|
var a = this._gl,
|
|
c = a.TEXTURE_2D;
|
|
e.isCube && (c = a.TEXTURE_CUBE_MAP_POSITIVE_X + o), this._gl.compressedTexImage2D(c, s, t, i, n, 0, r)
|
|
}, e.prototype._uploadDataToTextureDirectly = function(e, t, i, n) {
|
|
void 0 === i && (i = 0), void 0 === n && (n = 0);
|
|
var r = this._gl,
|
|
o = this._getWebGLTextureType(e.type),
|
|
s = this._getInternalFormat(e.format),
|
|
a = this._getRGBABufferInternalSizedFormat(e.type, s);
|
|
this._unpackFlipY(e.invertY);
|
|
var c = r.TEXTURE_2D;
|
|
e.isCube && (c = r.TEXTURE_CUBE_MAP_POSITIVE_X + i);
|
|
var l = Math.round(u.a.Log2(e.width)),
|
|
h = Math.round(u.a.Log2(e.height)),
|
|
d = Math.pow(2, Math.max(l - n, 0)),
|
|
f = Math.pow(2, Math.max(h - n, 0));
|
|
r.texImage2D(c, n, a, d, f, 0, s, o, t)
|
|
}, e.prototype._uploadArrayBufferViewToTexture = function(e, t, i, n) {
|
|
void 0 === i && (i = 0), void 0 === n && (n = 0);
|
|
var r = this._gl,
|
|
o = e.isCube ? r.TEXTURE_CUBE_MAP : r.TEXTURE_2D;
|
|
this._bindTextureDirectly(o, e, !0), this._uploadDataToTextureDirectly(e, t, i, n), this._bindTextureDirectly(o, null, !0)
|
|
}, e.prototype._uploadImageToTexture = function(e, t, i, n) {
|
|
void 0 === i && (i = 0), void 0 === n && (n = 0);
|
|
var r = this._gl,
|
|
o = this._getWebGLTextureType(e.type),
|
|
s = this._getInternalFormat(e.format),
|
|
a = this._getRGBABufferInternalSizedFormat(e.type, s),
|
|
c = e.isCube ? r.TEXTURE_CUBE_MAP : r.TEXTURE_2D;
|
|
this._bindTextureDirectly(c, e, !0), this._unpackFlipY(e.invertY);
|
|
var l = r.TEXTURE_2D;
|
|
e.isCube && (l = r.TEXTURE_CUBE_MAP_POSITIVE_X + i), r.texImage2D(l, n, a, s, o, t), this._bindTextureDirectly(c, null, !0)
|
|
}, e.prototype._setCubeMapTextureParams = function(e) {
|
|
var t = this._gl;
|
|
t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_MAG_FILTER, t.LINEAR), t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_MIN_FILTER, e ? t.LINEAR_MIPMAP_LINEAR : t.LINEAR), t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_WRAP_S, t.CLAMP_TO_EDGE), t.texParameteri(t.TEXTURE_CUBE_MAP, t.TEXTURE_WRAP_T, t.CLAMP_TO_EDGE), this._bindTextureDirectly(t.TEXTURE_CUBE_MAP, null)
|
|
}, e.prototype.createRawCubeTexture = function(e, t, i, n, r, o, s, a) {
|
|
throw void 0 === a && (a = null), b.a.WarnImport("Engine.RawTexture")
|
|
}, e.prototype.createRawTexture3D = function(t, i, n, r, o, s, a, c, l, u) {
|
|
throw void 0 === l && (l = null), void 0 === u && (u = e.TEXTURETYPE_UNSIGNED_INT), b.a.WarnImport("Engine.RawTexture")
|
|
}, e.prototype._prepareWebGLTextureContinuation = function(e, t, i, n, r) {
|
|
var o = this._gl;
|
|
if (o) {
|
|
var s = this._getSamplingParameters(r, !i);
|
|
o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MAG_FILTER, s.mag), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MIN_FILTER, s.min), i || n || o.generateMipmap(o.TEXTURE_2D), this._bindTextureDirectly(o.TEXTURE_2D, null), t && t._removePendingData(e), e.onLoadedObservable.notifyObservers(e), e.onLoadedObservable.clear()
|
|
}
|
|
}, e.prototype._prepareWebGLTexture = function(t, i, n, r, o, s, a, l, u) {
|
|
var h = this;
|
|
void 0 === u && (u = e.TEXTURE_TRILINEAR_SAMPLINGMODE);
|
|
var d = this.getCaps().maxTextureSize,
|
|
f = Math.min(d, this.needPOTTextures ? c.h.GetExponentOfTwo(n, d) : n),
|
|
p = Math.min(d, this.needPOTTextures ? c.h.GetExponentOfTwo(r, d) : r),
|
|
_ = this._gl;
|
|
_ && (t._webGLTexture ? (this._bindTextureDirectly(_.TEXTURE_2D, t, !0), this._unpackFlipY(void 0 === o || !!o), t.baseWidth = n, t.baseHeight = r, t.width = f, t.height = p, t.isReady = !0, l(f, p, function() {
|
|
h._prepareWebGLTextureContinuation(t, i, s, a, u)
|
|
}) || this._prepareWebGLTextureContinuation(t, i, s, a, u)) : i && i._removePendingData(t))
|
|
}, e.prototype._convertRGBtoRGBATextureData = function(t, i, n, r) {
|
|
var o;
|
|
o = r === e.TEXTURETYPE_FLOAT ? new Float32Array(i * n * 4) : new Uint32Array(i * n * 4);
|
|
for (var s = 0; s < i; s++)
|
|
for (var a = 0; a < n; a++) {
|
|
var c = 3 * (a * i + s),
|
|
l = 4 * (a * i + s);
|
|
o[l + 0] = t[c + 0], o[l + 1] = t[c + 1], o[l + 2] = t[c + 2], o[l + 3] = 1
|
|
}
|
|
return o
|
|
}, e.prototype._releaseFramebufferObjects = function(e) {
|
|
var t = this._gl;
|
|
e._framebuffer && (t.deleteFramebuffer(e._framebuffer), e._framebuffer = null), e._depthStencilBuffer && (t.deleteRenderbuffer(e._depthStencilBuffer), e._depthStencilBuffer = null), e._MSAAFramebuffer && (t.deleteFramebuffer(e._MSAAFramebuffer), e._MSAAFramebuffer = null), e._MSAARenderBuffer && (t.deleteRenderbuffer(e._MSAARenderBuffer), e._MSAARenderBuffer = null)
|
|
}, e.prototype._releaseTexture = function(e) {
|
|
var t = this._gl;
|
|
this._releaseFramebufferObjects(e), t.deleteTexture(e._webGLTexture), this.unbindAllTextures();
|
|
var i = this._internalTexturesCache.indexOf(e); - 1 !== i && this._internalTexturesCache.splice(i, 1), e._lodTextureHigh && e._lodTextureHigh.dispose(), e._lodTextureMid && e._lodTextureMid.dispose(), e._lodTextureLow && e._lodTextureLow.dispose(), this.scenes.forEach(function(t) {
|
|
t.postProcesses.forEach(function(t) {
|
|
t._outputTexture == e && (t._outputTexture = null)
|
|
}), t.cameras.forEach(function(t) {
|
|
t._postProcesses.forEach(function(t) {
|
|
t && t._outputTexture == e && (t._outputTexture = null)
|
|
})
|
|
})
|
|
})
|
|
}, e.prototype.setProgram = function(e) {
|
|
this._currentProgram !== e && (this._gl.useProgram(e), this._currentProgram = e)
|
|
}, e.prototype.bindSamplers = function(e) {
|
|
var t = e.getPipelineContext();
|
|
this.setProgram(t.program);
|
|
for (var i = e.getSamplers(), n = 0; n < i.length; n++) {
|
|
var r = e.getUniform(i[n]);
|
|
r && (this._boundUniforms[n] = r)
|
|
}
|
|
this._currentEffect = null
|
|
}, e.prototype._activateCurrentTexture = function() {
|
|
this._currentTextureChannel !== this._activeChannel && (this._gl.activeTexture(this._gl.TEXTURE0 + this._activeChannel), this._currentTextureChannel = this._activeChannel)
|
|
}, e.prototype._bindTextureDirectly = function(e, t, i, n) {
|
|
void 0 === i && (i = !1), void 0 === n && (n = !1);
|
|
var r = !1,
|
|
o = t && t._associatedChannel > -1;
|
|
return i && o && (this._activeChannel = t._associatedChannel), this._boundTexturesCache[this._activeChannel] !== t || n ? (this._activateCurrentTexture(), t && t.isMultiview ? this._gl.bindTexture(e, t ? t._colorTextureArray : null) : this._gl.bindTexture(e, t ? t._webGLTexture : null), this._boundTexturesCache[this._activeChannel] = t, t && (t._associatedChannel = this._activeChannel)) : i && (r = !0, this._activateCurrentTexture()), o && !i && this._bindSamplerUniformToChannel(t._associatedChannel, this._activeChannel), r
|
|
}, e.prototype._bindTexture = function(e, t) {
|
|
void 0 !== e && (t && (t._associatedChannel = e), this._activeChannel = e, this._bindTextureDirectly(this._gl.TEXTURE_2D, t))
|
|
}, e.prototype.setTextureFromPostProcess = function(e, t) {
|
|
this._bindTexture(e, t ? t._textures.data[t._currentRenderTextureInd] : null)
|
|
}, e.prototype.setTextureFromPostProcessOutput = function(e, t) {
|
|
this._bindTexture(e, t ? t._outputTexture : null)
|
|
}, e.prototype.unbindAllTextures = function() {
|
|
for (var e = 0; e < this._maxSimultaneousTextures; e++) this._activeChannel = e, this._bindTextureDirectly(this._gl.TEXTURE_2D, null), this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, null), this.webGLVersion > 1 && this._bindTextureDirectly(this._gl.TEXTURE_3D, null)
|
|
}, e.prototype.setTexture = function(e, t, i) {
|
|
void 0 !== e && (t && (this._boundUniforms[e] = t), this._setTexture(e, i))
|
|
}, e.prototype.setDepthStencilTexture = function(e, t, i) {
|
|
void 0 !== e && (t && (this._boundUniforms[e] = t), i && i.depthStencilTexture ? this._setTexture(e, i, !1, !0) : this._setTexture(e, null))
|
|
}, e.prototype._bindSamplerUniformToChannel = function(e, t) {
|
|
var i = this._boundUniforms[e];
|
|
i._currentState !== t && (this._gl.uniform1i(i, t), i._currentState = t)
|
|
}, e.prototype._getTextureWrapMode = function(t) {
|
|
switch (t) {
|
|
case e.TEXTURE_WRAP_ADDRESSMODE:
|
|
return this._gl.REPEAT;
|
|
case e.TEXTURE_CLAMP_ADDRESSMODE:
|
|
return this._gl.CLAMP_TO_EDGE;
|
|
case e.TEXTURE_MIRROR_ADDRESSMODE:
|
|
return this._gl.MIRRORED_REPEAT
|
|
}
|
|
return this._gl.REPEAT
|
|
}, e.prototype._setTexture = function(t, i, n, r) {
|
|
if (void 0 === n && (n = !1), void 0 === r && (r = !1), !i) return null != this._boundTexturesCache[t] && (this._activeChannel = t, this._bindTextureDirectly(this._gl.TEXTURE_2D, null), this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, null), this.webGLVersion > 1 && this._bindTextureDirectly(this._gl.TEXTURE_3D, null)), !1;
|
|
if (i.video) this._activeChannel = t, i.update();
|
|
else if (i.delayLoadState === e.DELAYLOADSTATE_NOTLOADED) return i.delayLoad(), !1;
|
|
var o;
|
|
o = r ? i.depthStencilTexture : i.isReady() ? i.getInternalTexture() : i.isCube ? this.emptyCubeTexture : i.is3D ? this.emptyTexture3D : this.emptyTexture, !n && o && (o._associatedChannel = t);
|
|
var s = !0;
|
|
if (this._boundTexturesCache[t] === o && (n || this._bindSamplerUniformToChannel(o._associatedChannel, t), s = !1), this._activeChannel = t, o && o.isMultiview) s && this._bindTextureDirectly(this._gl.TEXTURE_2D_ARRAY, o, n);
|
|
else if (o && o.is3D) s && this._bindTextureDirectly(this._gl.TEXTURE_3D, o, n), o && o._cachedWrapU !== i.wrapU && (o._cachedWrapU = i.wrapU, this._setTextureParameterInteger(this._gl.TEXTURE_3D, this._gl.TEXTURE_WRAP_S, this._getTextureWrapMode(i.wrapU), o)), o && o._cachedWrapV !== i.wrapV && (o._cachedWrapV = i.wrapV, this._setTextureParameterInteger(this._gl.TEXTURE_3D, this._gl.TEXTURE_WRAP_T, this._getTextureWrapMode(i.wrapV), o)), o && o._cachedWrapR !== i.wrapR && (o._cachedWrapR = i.wrapR, this._setTextureParameterInteger(this._gl.TEXTURE_3D, this._gl.TEXTURE_WRAP_R, this._getTextureWrapMode(i.wrapR), o)), this._setAnisotropicLevel(this._gl.TEXTURE_3D, i);
|
|
else if (o && o.isCube) {
|
|
if (s && this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, o, n), o._cachedCoordinatesMode !== i.coordinatesMode) {
|
|
o._cachedCoordinatesMode = i.coordinatesMode;
|
|
var a = i.coordinatesMode !== e.TEXTURE_CUBIC_MODE && i.coordinatesMode !== e.TEXTURE_SKYBOX_MODE ? this._gl.REPEAT : this._gl.CLAMP_TO_EDGE;
|
|
this._setTextureParameterInteger(this._gl.TEXTURE_CUBE_MAP, this._gl.TEXTURE_WRAP_S, a, o), this._setTextureParameterInteger(this._gl.TEXTURE_CUBE_MAP, this._gl.TEXTURE_WRAP_T, a)
|
|
}
|
|
this._setAnisotropicLevel(this._gl.TEXTURE_CUBE_MAP, i)
|
|
} else s && this._bindTextureDirectly(this._gl.TEXTURE_2D, o, n), o && o._cachedWrapU !== i.wrapU && (o._cachedWrapU = i.wrapU, this._setTextureParameterInteger(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_S, this._getTextureWrapMode(i.wrapU), o)), o && o._cachedWrapV !== i.wrapV && (o._cachedWrapV = i.wrapV, this._setTextureParameterInteger(this._gl.TEXTURE_2D, this._gl.TEXTURE_WRAP_T, this._getTextureWrapMode(i.wrapV), o)), this._setAnisotropicLevel(this._gl.TEXTURE_2D, i);
|
|
return !0
|
|
}, e.prototype.setTextureArray = function(e, t, i) {
|
|
if (void 0 !== e && t) {
|
|
this._textureUnits && this._textureUnits.length === i.length || (this._textureUnits = new Int32Array(i.length));
|
|
for (var n = 0; n < i.length; n++) {
|
|
var r = i[n].getInternalTexture();
|
|
r ? (this._textureUnits[e + n] = e + n, r._associatedChannel = e + n) : this._textureUnits[e + n] = -1
|
|
}
|
|
this._gl.uniform1iv(t, this._textureUnits);
|
|
for (var o = 0; o < i.length; o++) this._setTexture(this._textureUnits[o], i[o], !0)
|
|
}
|
|
}, e.prototype._setAnisotropicLevel = function(t, i) {
|
|
var n = i.getInternalTexture();
|
|
if (n) {
|
|
var r = this._caps.textureAnisotropicFilterExtension,
|
|
o = i.anisotropicFilteringLevel;
|
|
n.samplingMode !== e.TEXTURE_LINEAR_LINEAR_MIPNEAREST && n.samplingMode !== e.TEXTURE_LINEAR_LINEAR_MIPLINEAR && n.samplingMode !== e.TEXTURE_LINEAR_LINEAR && (o = 1), r && n._cachedAnisotropicFilteringLevel !== o && (this._setTextureParameterFloat(t, r.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(o, this._caps.maxAnisotropy), n), n._cachedAnisotropicFilteringLevel = o)
|
|
}
|
|
}, e.prototype._setTextureParameterFloat = function(e, t, i, n) {
|
|
this._bindTextureDirectly(e, n, !0, !0), this._gl.texParameterf(e, t, i)
|
|
}, e.prototype._setTextureParameterInteger = function(e, t, i, n) {
|
|
n && this._bindTextureDirectly(e, n, !0, !0), this._gl.texParameteri(e, t, i)
|
|
}, e.prototype.readPixels = function(e, t, i, n) {
|
|
var r = new Uint8Array(n * i * 4);
|
|
return this._gl.readPixels(e, t, i, n, this._gl.RGBA, this._gl.UNSIGNED_BYTE, r), r
|
|
}, e.prototype.addExternalData = function(e, t) {
|
|
return this._externalData || (this._externalData = new s.a), this._externalData.add(e, t)
|
|
}, e.prototype.getExternalData = function(e) {
|
|
return this._externalData || (this._externalData = new s.a), this._externalData.get(e)
|
|
}, e.prototype.getOrAddExternalDataWithFactory = function(e, t) {
|
|
return this._externalData || (this._externalData = new s.a), this._externalData.getOrAddWithFactory(e, t)
|
|
}, e.prototype.removeExternalData = function(e) {
|
|
return this._externalData || (this._externalData = new s.a), this._externalData.remove(e)
|
|
}, e.prototype.unbindAllAttributes = function() {
|
|
if (this._mustWipeVertexAttributes) {
|
|
this._mustWipeVertexAttributes = !1;
|
|
for (var e = 0; e < this._caps.maxVertexAttribs; e++) this._gl.disableVertexAttribArray(e), this._vertexAttribArraysEnabled[e] = !1, this._currentBufferPointers[e].active = !1
|
|
} else {
|
|
e = 0;
|
|
for (var t = this._vertexAttribArraysEnabled.length; e < t; e++) e >= this._caps.maxVertexAttribs || !this._vertexAttribArraysEnabled[e] || (this._gl.disableVertexAttribArray(e), this._vertexAttribArraysEnabled[e] = !1, this._currentBufferPointers[e].active = !1)
|
|
}
|
|
}, e.prototype.releaseEffects = function() {
|
|
for (var e in this._compiledEffects) {
|
|
var t = this._compiledEffects[e].getPipelineContext();
|
|
this._deletePipelineContext(t)
|
|
}
|
|
this._compiledEffects = {}
|
|
}, e.prototype.dispose = function() {
|
|
for (this.hideLoadingUI(), this.stopRenderLoop(), this.onNewSceneAddedObservable.clear(); this.postProcesses.length;) this.postProcesses[0].dispose();
|
|
for (this._emptyTexture && (this._releaseTexture(this._emptyTexture), this._emptyTexture = null), this._emptyCubeTexture && (this._releaseTexture(this._emptyCubeTexture), this._emptyCubeTexture = null), this._rescalePostProcess && this._rescalePostProcess.dispose(); this.scenes.length;) this.scenes[0].dispose();
|
|
1 === e.Instances.length && e.audioEngine && e.audioEngine.dispose(), this.releaseEffects(), this.unbindAllAttributes(), this._boundUniforms = [], this._dummyFramebuffer && this._gl.deleteFramebuffer(this._dummyFramebuffer), this.disableVR(), g.a.IsWindowObjectExist() && (window.removeEventListener("blur", this._onBlur), window.removeEventListener("focus", this._onFocus), this._renderingCanvas && (this._renderingCanvas.removeEventListener("focus", this._onCanvasFocus), this._renderingCanvas.removeEventListener("blur", this._onCanvasBlur), this._renderingCanvas.removeEventListener("pointerout", this._onCanvasPointerOut), this._doNotHandleContextLost || (this._renderingCanvas.removeEventListener("webglcontextlost", this._onContextLost), this._renderingCanvas.removeEventListener("webglcontextrestored", this._onContextRestored))), document.removeEventListener("fullscreenchange", this._onFullscreenChange), document.removeEventListener("mozfullscreenchange", this._onFullscreenChange), document.removeEventListener("webkitfullscreenchange", this._onFullscreenChange), document.removeEventListener("msfullscreenchange", this._onFullscreenChange), document.removeEventListener("pointerlockchange", this._onPointerLockChange), document.removeEventListener("mspointerlockchange", this._onPointerLockChange), document.removeEventListener("mozpointerlockchange", this._onPointerLockChange), document.removeEventListener("webkitpointerlockchange", this._onPointerLockChange));
|
|
var t = e.Instances.indexOf(this);
|
|
t >= 0 && e.Instances.splice(t, 1), this._workingCanvas = null, this._workingContext = null, this._currentBufferPointers = [], this._renderingCanvas = null, this._currentProgram = null, this._bindedRenderFunction = null, this.onResizeObservable.clear(), this.onCanvasBlurObservable.clear(), this.onCanvasFocusObservable.clear(), this.onCanvasPointerOutObservable.clear(), this.onBeginFrameObservable.clear(), this.onEndFrameObservable.clear(), h.a.ResetCache();
|
|
for (var i = 0, n = this._activeRequests; i < n.length; i++) {
|
|
n[i].abort()
|
|
}
|
|
}, e.prototype.displayLoadingUI = function() {
|
|
if (g.a.IsWindowObjectExist()) {
|
|
var e = this.loadingScreen;
|
|
e && e.displayLoadingUI()
|
|
}
|
|
}, e.prototype.hideLoadingUI = function() {
|
|
if (g.a.IsWindowObjectExist()) {
|
|
var e = this._loadingScreen;
|
|
e && e.hideLoadingUI()
|
|
}
|
|
}, Object.defineProperty(e.prototype, "loadingScreen", {
|
|
get: function() {
|
|
return !this._loadingScreen && this._renderingCanvas && (this._loadingScreen = e.DefaultLoadingScreenFactory(this._renderingCanvas)), this._loadingScreen
|
|
},
|
|
set: function(e) {
|
|
this._loadingScreen = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "loadingUIText", {
|
|
set: function(e) {
|
|
this.loadingScreen.loadingUIText = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "loadingUIBackgroundColor", {
|
|
set: function(e) {
|
|
this.loadingScreen.loadingUIBackgroundColor = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.attachContextLostEvent = function(e) {
|
|
this._renderingCanvas && this._renderingCanvas.addEventListener("webglcontextlost", e, !1)
|
|
}, e.prototype.attachContextRestoredEvent = function(e) {
|
|
this._renderingCanvas && this._renderingCanvas.addEventListener("webglcontextrestored", e, !1)
|
|
}, e.prototype.getVertexShaderSource = function(e) {
|
|
var t = this._gl.getAttachedShaders(e);
|
|
return t ? this._gl.getShaderSource(t[0]) : null
|
|
}, e.prototype.getFragmentShaderSource = function(e) {
|
|
var t = this._gl.getAttachedShaders(e);
|
|
return t ? this._gl.getShaderSource(t[1]) : null
|
|
}, e.prototype.getError = function() {
|
|
return this._gl.getError()
|
|
}, e.prototype.getFps = function() {
|
|
return this._fps
|
|
}, e.prototype.getDeltaTime = function() {
|
|
return this._deltaTime
|
|
}, e.prototype._measureFps = function() {
|
|
this._performanceMonitor.sampleFrame(), this._fps = this._performanceMonitor.averageFPS, this._deltaTime = this._performanceMonitor.instantaneousFrameTime || 0
|
|
}, e.prototype._readTexturePixels = function(e, t, i, n, r, o) {
|
|
void 0 === n && (n = -1), void 0 === r && (r = 0), void 0 === o && (o = null);
|
|
var s = this._gl;
|
|
if (!this._dummyFramebuffer) {
|
|
var a = s.createFramebuffer();
|
|
if (!a) throw new Error("Unable to create dummy framebuffer");
|
|
this._dummyFramebuffer = a
|
|
}
|
|
s.bindFramebuffer(s.FRAMEBUFFER, this._dummyFramebuffer), n > -1 ? s.framebufferTexture2D(s.FRAMEBUFFER, s.COLOR_ATTACHMENT0, s.TEXTURE_CUBE_MAP_POSITIVE_X + n, e._webGLTexture, r) : s.framebufferTexture2D(s.FRAMEBUFFER, s.COLOR_ATTACHMENT0, s.TEXTURE_2D, e._webGLTexture, r);
|
|
var c = void 0 !== e.type ? this._getWebGLTextureType(e.type) : s.UNSIGNED_BYTE;
|
|
switch (c) {
|
|
case s.UNSIGNED_BYTE:
|
|
o || (o = new Uint8Array(4 * t * i)), c = s.UNSIGNED_BYTE;
|
|
break;
|
|
default:
|
|
o || (o = new Float32Array(4 * t * i)), c = s.FLOAT
|
|
}
|
|
return s.readPixels(0, 0, t, i, s.RGBA, c, o), s.bindFramebuffer(s.FRAMEBUFFER, this._currentFramebuffer), o
|
|
}, e.prototype._canRenderToFloatFramebuffer = function() {
|
|
return this._webGLVersion > 1 ? this._caps.colorBufferFloat : this._canRenderToFramebuffer(e.TEXTURETYPE_FLOAT)
|
|
}, e.prototype._canRenderToHalfFloatFramebuffer = function() {
|
|
return this._webGLVersion > 1 ? this._caps.colorBufferFloat : this._canRenderToFramebuffer(e.TEXTURETYPE_HALF_FLOAT)
|
|
}, e.prototype._canRenderToFramebuffer = function(e) {
|
|
for (var t = this._gl; t.getError() !== t.NO_ERROR;);
|
|
var i = !0,
|
|
n = t.createTexture();
|
|
t.bindTexture(t.TEXTURE_2D, n), t.texImage2D(t.TEXTURE_2D, 0, this._getRGBABufferInternalSizedFormat(e), 1, 1, 0, t.RGBA, this._getWebGLTextureType(e), null), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.NEAREST), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t.NEAREST);
|
|
var r = t.createFramebuffer();
|
|
t.bindFramebuffer(t.FRAMEBUFFER, r), t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, n, 0);
|
|
var o = t.checkFramebufferStatus(t.FRAMEBUFFER);
|
|
if ((i = (i = i && o === t.FRAMEBUFFER_COMPLETE) && t.getError() === t.NO_ERROR) && (t.clear(t.COLOR_BUFFER_BIT), i = i && t.getError() === t.NO_ERROR), i) {
|
|
t.bindFramebuffer(t.FRAMEBUFFER, null);
|
|
var s = t.RGBA,
|
|
a = t.UNSIGNED_BYTE,
|
|
c = new Uint8Array(4);
|
|
t.readPixels(0, 0, 1, 1, s, a, c), i = i && t.getError() === t.NO_ERROR
|
|
}
|
|
for (t.deleteTexture(n), t.deleteFramebuffer(r), t.bindFramebuffer(t.FRAMEBUFFER, null); !i && t.getError() !== t.NO_ERROR;);
|
|
return i
|
|
}, e.prototype._getWebGLTextureType = function(t) {
|
|
if (1 === this._webGLVersion) {
|
|
switch (t) {
|
|
case e.TEXTURETYPE_FLOAT:
|
|
return this._gl.FLOAT;
|
|
case e.TEXTURETYPE_HALF_FLOAT:
|
|
return this._gl.HALF_FLOAT_OES;
|
|
case e.TEXTURETYPE_UNSIGNED_BYTE:
|
|
return this._gl.UNSIGNED_BYTE
|
|
}
|
|
return this._gl.UNSIGNED_BYTE
|
|
}
|
|
switch (t) {
|
|
case e.TEXTURETYPE_BYTE:
|
|
return this._gl.BYTE;
|
|
case e.TEXTURETYPE_UNSIGNED_BYTE:
|
|
return this._gl.UNSIGNED_BYTE;
|
|
case e.TEXTURETYPE_SHORT:
|
|
return this._gl.SHORT;
|
|
case e.TEXTURETYPE_UNSIGNED_SHORT:
|
|
return this._gl.UNSIGNED_SHORT;
|
|
case e.TEXTURETYPE_INT:
|
|
return this._gl.INT;
|
|
case e.TEXTURETYPE_UNSIGNED_INTEGER:
|
|
return this._gl.UNSIGNED_INT;
|
|
case e.TEXTURETYPE_FLOAT:
|
|
return this._gl.FLOAT;
|
|
case e.TEXTURETYPE_HALF_FLOAT:
|
|
return this._gl.HALF_FLOAT;
|
|
case e.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4:
|
|
return this._gl.UNSIGNED_SHORT_4_4_4_4;
|
|
case e.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1:
|
|
return this._gl.UNSIGNED_SHORT_5_5_5_1;
|
|
case e.TEXTURETYPE_UNSIGNED_SHORT_5_6_5:
|
|
return this._gl.UNSIGNED_SHORT_5_6_5;
|
|
case e.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV:
|
|
return this._gl.UNSIGNED_INT_2_10_10_10_REV;
|
|
case e.TEXTURETYPE_UNSIGNED_INT_24_8:
|
|
return this._gl.UNSIGNED_INT_24_8;
|
|
case e.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV:
|
|
return this._gl.UNSIGNED_INT_10F_11F_11F_REV;
|
|
case e.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV:
|
|
return this._gl.UNSIGNED_INT_5_9_9_9_REV;
|
|
case e.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV:
|
|
return this._gl.FLOAT_32_UNSIGNED_INT_24_8_REV
|
|
}
|
|
return this._gl.UNSIGNED_BYTE
|
|
}, e.prototype._getInternalFormat = function(t) {
|
|
var i = this._gl.RGBA;
|
|
switch (t) {
|
|
case e.TEXTUREFORMAT_ALPHA:
|
|
i = this._gl.ALPHA;
|
|
break;
|
|
case e.TEXTUREFORMAT_LUMINANCE:
|
|
i = this._gl.LUMINANCE;
|
|
break;
|
|
case e.TEXTUREFORMAT_LUMINANCE_ALPHA:
|
|
i = this._gl.LUMINANCE_ALPHA;
|
|
break;
|
|
case e.TEXTUREFORMAT_RED:
|
|
i = this._gl.RED;
|
|
break;
|
|
case e.TEXTUREFORMAT_RG:
|
|
i = this._gl.RG;
|
|
break;
|
|
case e.TEXTUREFORMAT_RGB:
|
|
i = this._gl.RGB;
|
|
break;
|
|
case e.TEXTUREFORMAT_RGBA:
|
|
i = this._gl.RGBA
|
|
}
|
|
if (this._webGLVersion > 1) switch (t) {
|
|
case e.TEXTUREFORMAT_RED_INTEGER:
|
|
i = this._gl.RED_INTEGER;
|
|
break;
|
|
case e.TEXTUREFORMAT_RG_INTEGER:
|
|
i = this._gl.RG_INTEGER;
|
|
break;
|
|
case e.TEXTUREFORMAT_RGB_INTEGER:
|
|
i = this._gl.RGB_INTEGER;
|
|
break;
|
|
case e.TEXTUREFORMAT_RGBA_INTEGER:
|
|
i = this._gl.RGBA_INTEGER
|
|
}
|
|
return i
|
|
}, e.prototype._getRGBABufferInternalSizedFormat = function(t, i) {
|
|
if (1 === this._webGLVersion) {
|
|
if (void 0 !== i) switch (i) {
|
|
case e.TEXTUREFORMAT_ALPHA:
|
|
return this._gl.ALPHA;
|
|
case e.TEXTUREFORMAT_LUMINANCE:
|
|
return this._gl.LUMINANCE;
|
|
case e.TEXTUREFORMAT_LUMINANCE_ALPHA:
|
|
return this._gl.LUMINANCE_ALPHA
|
|
}
|
|
return this._gl.RGBA
|
|
}
|
|
switch (t) {
|
|
case e.TEXTURETYPE_BYTE:
|
|
switch (i) {
|
|
case e.TEXTUREFORMAT_RED:
|
|
return this._gl.R8_SNORM;
|
|
case e.TEXTUREFORMAT_RG:
|
|
return this._gl.RG8_SNORM;
|
|
case e.TEXTUREFORMAT_RGB:
|
|
return this._gl.RGB8_SNORM;
|
|
case e.TEXTUREFORMAT_RED_INTEGER:
|
|
return this._gl.R8I;
|
|
case e.TEXTUREFORMAT_RG_INTEGER:
|
|
return this._gl.RG8I;
|
|
case e.TEXTUREFORMAT_RGB_INTEGER:
|
|
return this._gl.RGB8I;
|
|
case e.TEXTUREFORMAT_RGBA_INTEGER:
|
|
return this._gl.RGBA8I;
|
|
default:
|
|
return this._gl.RGBA8_SNORM
|
|
}
|
|
case e.TEXTURETYPE_UNSIGNED_BYTE:
|
|
switch (i) {
|
|
case e.TEXTUREFORMAT_RED:
|
|
return this._gl.R8;
|
|
case e.TEXTUREFORMAT_RG:
|
|
return this._gl.RG8;
|
|
case e.TEXTUREFORMAT_RGB:
|
|
return this._gl.RGB8;
|
|
case e.TEXTUREFORMAT_RGBA:
|
|
return this._gl.RGBA8;
|
|
case e.TEXTUREFORMAT_RED_INTEGER:
|
|
return this._gl.R8UI;
|
|
case e.TEXTUREFORMAT_RG_INTEGER:
|
|
return this._gl.RG8UI;
|
|
case e.TEXTUREFORMAT_RGB_INTEGER:
|
|
return this._gl.RGB8UI;
|
|
case e.TEXTUREFORMAT_RGBA_INTEGER:
|
|
return this._gl.RGBA8UI;
|
|
case e.TEXTUREFORMAT_ALPHA:
|
|
return this._gl.ALPHA;
|
|
case e.TEXTUREFORMAT_LUMINANCE:
|
|
return this._gl.LUMINANCE;
|
|
case e.TEXTUREFORMAT_LUMINANCE_ALPHA:
|
|
return this._gl.LUMINANCE_ALPHA;
|
|
default:
|
|
return this._gl.RGBA8
|
|
}
|
|
case e.TEXTURETYPE_SHORT:
|
|
switch (i) {
|
|
case e.TEXTUREFORMAT_RED_INTEGER:
|
|
return this._gl.R16I;
|
|
case e.TEXTUREFORMAT_RG_INTEGER:
|
|
return this._gl.RG16I;
|
|
case e.TEXTUREFORMAT_RGB_INTEGER:
|
|
return this._gl.RGB16I;
|
|
case e.TEXTUREFORMAT_RGBA_INTEGER:
|
|
default:
|
|
return this._gl.RGBA16I
|
|
}
|
|
case e.TEXTURETYPE_UNSIGNED_SHORT:
|
|
switch (i) {
|
|
case e.TEXTUREFORMAT_RED_INTEGER:
|
|
return this._gl.R16UI;
|
|
case e.TEXTUREFORMAT_RG_INTEGER:
|
|
return this._gl.RG16UI;
|
|
case e.TEXTUREFORMAT_RGB_INTEGER:
|
|
return this._gl.RGB16UI;
|
|
case e.TEXTUREFORMAT_RGBA_INTEGER:
|
|
default:
|
|
return this._gl.RGBA16UI
|
|
}
|
|
case e.TEXTURETYPE_INT:
|
|
switch (i) {
|
|
case e.TEXTUREFORMAT_RED_INTEGER:
|
|
return this._gl.R32I;
|
|
case e.TEXTUREFORMAT_RG_INTEGER:
|
|
return this._gl.RG32I;
|
|
case e.TEXTUREFORMAT_RGB_INTEGER:
|
|
return this._gl.RGB32I;
|
|
case e.TEXTUREFORMAT_RGBA_INTEGER:
|
|
default:
|
|
return this._gl.RGBA32I
|
|
}
|
|
case e.TEXTURETYPE_UNSIGNED_INTEGER:
|
|
switch (i) {
|
|
case e.TEXTUREFORMAT_RED_INTEGER:
|
|
return this._gl.R32UI;
|
|
case e.TEXTUREFORMAT_RG_INTEGER:
|
|
return this._gl.RG32UI;
|
|
case e.TEXTUREFORMAT_RGB_INTEGER:
|
|
return this._gl.RGB32UI;
|
|
case e.TEXTUREFORMAT_RGBA_INTEGER:
|
|
default:
|
|
return this._gl.RGBA32UI
|
|
}
|
|
case e.TEXTURETYPE_FLOAT:
|
|
switch (i) {
|
|
case e.TEXTUREFORMAT_RED:
|
|
return this._gl.R32F;
|
|
case e.TEXTUREFORMAT_RG:
|
|
return this._gl.RG32F;
|
|
case e.TEXTUREFORMAT_RGB:
|
|
return this._gl.RGB32F;
|
|
case e.TEXTUREFORMAT_RGBA:
|
|
default:
|
|
return this._gl.RGBA32F
|
|
}
|
|
case e.TEXTURETYPE_HALF_FLOAT:
|
|
switch (i) {
|
|
case e.TEXTUREFORMAT_RED:
|
|
return this._gl.R16F;
|
|
case e.TEXTUREFORMAT_RG:
|
|
return this._gl.RG16F;
|
|
case e.TEXTUREFORMAT_RGB:
|
|
return this._gl.RGB16F;
|
|
case e.TEXTUREFORMAT_RGBA:
|
|
default:
|
|
return this._gl.RGBA16F
|
|
}
|
|
case e.TEXTURETYPE_UNSIGNED_SHORT_5_6_5:
|
|
return this._gl.RGB565;
|
|
case e.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV:
|
|
return this._gl.R11F_G11F_B10F;
|
|
case e.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV:
|
|
return this._gl.RGB9_E5;
|
|
case e.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4:
|
|
return this._gl.RGBA4;
|
|
case e.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1:
|
|
return this._gl.RGB5_A1;
|
|
case e.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV:
|
|
switch (i) {
|
|
case e.TEXTUREFORMAT_RGBA:
|
|
return this._gl.RGB10_A2;
|
|
case e.TEXTUREFORMAT_RGBA_INTEGER:
|
|
return this._gl.RGB10_A2UI;
|
|
default:
|
|
return this._gl.RGB10_A2
|
|
}
|
|
}
|
|
return this._gl.RGBA8
|
|
}, e.prototype._getRGBAMultiSampleBufferFormat = function(t) {
|
|
return t === e.TEXTURETYPE_FLOAT ? this._gl.RGBA32F : t === e.TEXTURETYPE_HALF_FLOAT ? this._gl.RGBA16F : this._gl.RGBA8
|
|
}, e.prototype._loadFile = function(e, t, i, n, r, o) {
|
|
var s = this,
|
|
a = c.h.LoadFile(e, t, i, n, r, o);
|
|
return this._activeRequests.push(a), a.onCompleteObservable.add(function(e) {
|
|
s._activeRequests.splice(s._activeRequests.indexOf(e), 1)
|
|
}), a
|
|
}, e.prototype._loadFileAsync = function(e, t, i) {
|
|
var n = this;
|
|
return new Promise(function(r, o) {
|
|
n._loadFile(e, function(e) {
|
|
r(e)
|
|
}, void 0, t, i, function(e, t) {
|
|
o(t)
|
|
})
|
|
})
|
|
}, e.isSupported = function() {
|
|
try {
|
|
var e = document.createElement("canvas");
|
|
return null != (e.getContext("webgl") || e.getContext("experimental-webgl")) && !!window.WebGLRenderingContext
|
|
} catch (e) {
|
|
return !1
|
|
}
|
|
}, e.ExceptionList = [{
|
|
key: "Chrome/63.0",
|
|
capture: "63\\.0\\.3239\\.(\\d+)",
|
|
captureConstraint: 108,
|
|
targets: ["uniformBuffer"]
|
|
}, {
|
|
key: "Firefox/58",
|
|
capture: null,
|
|
captureConstraint: null,
|
|
targets: ["uniformBuffer"]
|
|
}, {
|
|
key: "Firefox/59",
|
|
capture: null,
|
|
captureConstraint: null,
|
|
targets: ["uniformBuffer"]
|
|
}, {
|
|
key: "Chrome/72.+?Mobile",
|
|
capture: null,
|
|
captureConstraint: null,
|
|
targets: ["vao"]
|
|
}, {
|
|
key: "Chrome/73.+?Mobile",
|
|
capture: null,
|
|
captureConstraint: null,
|
|
targets: ["vao"]
|
|
}, {
|
|
key: "Chrome/74.+?Mobile",
|
|
capture: null,
|
|
captureConstraint: null,
|
|
targets: ["vao"]
|
|
}, {
|
|
key: "Mac OS.+Chrome/71",
|
|
capture: null,
|
|
captureConstraint: null,
|
|
targets: ["vao"]
|
|
}, {
|
|
key: "Mac OS.+Chrome/72",
|
|
capture: null,
|
|
captureConstraint: null,
|
|
targets: ["vao"]
|
|
}], e._TextureLoaders = [], e.ALPHA_DISABLE = _.a.ALPHA_DISABLE, e.ALPHA_ADD = _.a.ALPHA_ADD, e.ALPHA_COMBINE = _.a.ALPHA_COMBINE, e.ALPHA_SUBTRACT = _.a.ALPHA_SUBTRACT, e.ALPHA_MULTIPLY = _.a.ALPHA_MULTIPLY, e.ALPHA_MAXIMIZED = _.a.ALPHA_MAXIMIZED, e.ALPHA_ONEONE = _.a.ALPHA_ONEONE, e.ALPHA_PREMULTIPLIED = _.a.ALPHA_PREMULTIPLIED, e.ALPHA_PREMULTIPLIED_PORTERDUFF = _.a.ALPHA_PREMULTIPLIED_PORTERDUFF, e.ALPHA_INTERPOLATE = _.a.ALPHA_INTERPOLATE, e.ALPHA_SCREENMODE = _.a.ALPHA_SCREENMODE, e.DELAYLOADSTATE_NONE = _.a.DELAYLOADSTATE_NONE, e.DELAYLOADSTATE_LOADED = _.a.DELAYLOADSTATE_LOADED, e.DELAYLOADSTATE_LOADING = _.a.DELAYLOADSTATE_LOADING, e.DELAYLOADSTATE_NOTLOADED = _.a.DELAYLOADSTATE_NOTLOADED, e.NEVER = _.a.NEVER, e.ALWAYS = _.a.ALWAYS, e.LESS = _.a.LESS, e.EQUAL = _.a.EQUAL, e.LEQUAL = _.a.LEQUAL, e.GREATER = _.a.GREATER, e.GEQUAL = _.a.GEQUAL, e.NOTEQUAL = _.a.NOTEQUAL, e.KEEP = _.a.KEEP, e.REPLACE = _.a.REPLACE, e.INCR = _.a.INCR, e.DECR = _.a.DECR, e.INVERT = _.a.INVERT, e.INCR_WRAP = _.a.INCR_WRAP, e.DECR_WRAP = _.a.DECR_WRAP, e.TEXTURE_CLAMP_ADDRESSMODE = _.a.TEXTURE_CLAMP_ADDRESSMODE, e.TEXTURE_WRAP_ADDRESSMODE = _.a.TEXTURE_WRAP_ADDRESSMODE, e.TEXTURE_MIRROR_ADDRESSMODE = _.a.TEXTURE_MIRROR_ADDRESSMODE, e.TEXTUREFORMAT_ALPHA = _.a.TEXTUREFORMAT_ALPHA, e.TEXTUREFORMAT_LUMINANCE = _.a.TEXTUREFORMAT_LUMINANCE, e.TEXTUREFORMAT_LUMINANCE_ALPHA = _.a.TEXTUREFORMAT_LUMINANCE_ALPHA, e.TEXTUREFORMAT_RGB = _.a.TEXTUREFORMAT_RGB, e.TEXTUREFORMAT_RGBA = _.a.TEXTUREFORMAT_RGBA, e.TEXTUREFORMAT_RED = _.a.TEXTUREFORMAT_RED, e.TEXTUREFORMAT_R = _.a.TEXTUREFORMAT_R, e.TEXTUREFORMAT_RG = _.a.TEXTUREFORMAT_RG, e.TEXTUREFORMAT_RED_INTEGER = _.a.TEXTUREFORMAT_RED_INTEGER, e.TEXTUREFORMAT_R_INTEGER = _.a.TEXTUREFORMAT_R_INTEGER, e.TEXTUREFORMAT_RG_INTEGER = _.a.TEXTUREFORMAT_RG_INTEGER, e.TEXTUREFORMAT_RGB_INTEGER = _.a.TEXTUREFORMAT_RGB_INTEGER, e.TEXTUREFORMAT_RGBA_INTEGER = _.a.TEXTUREFORMAT_RGBA_INTEGER, e.TEXTURETYPE_UNSIGNED_BYTE = _.a.TEXTURETYPE_UNSIGNED_BYTE, e.TEXTURETYPE_UNSIGNED_INT = _.a.TEXTURETYPE_UNSIGNED_INT, e.TEXTURETYPE_FLOAT = _.a.TEXTURETYPE_FLOAT, e.TEXTURETYPE_HALF_FLOAT = _.a.TEXTURETYPE_HALF_FLOAT, e.TEXTURETYPE_BYTE = _.a.TEXTURETYPE_BYTE, e.TEXTURETYPE_SHORT = _.a.TEXTURETYPE_SHORT, e.TEXTURETYPE_UNSIGNED_SHORT = _.a.TEXTURETYPE_UNSIGNED_SHORT, e.TEXTURETYPE_INT = _.a.TEXTURETYPE_INT, e.TEXTURETYPE_UNSIGNED_INTEGER = _.a.TEXTURETYPE_UNSIGNED_INTEGER, e.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4 = _.a.TEXTURETYPE_UNSIGNED_SHORT_4_4_4_4, e.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1 = _.a.TEXTURETYPE_UNSIGNED_SHORT_5_5_5_1, e.TEXTURETYPE_UNSIGNED_SHORT_5_6_5 = _.a.TEXTURETYPE_UNSIGNED_SHORT_5_6_5, e.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV = _.a.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV, e.TEXTURETYPE_UNSIGNED_INT_24_8 = _.a.TEXTURETYPE_UNSIGNED_INT_24_8, e.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV = _.a.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV, e.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV = _.a.TEXTURETYPE_UNSIGNED_INT_5_9_9_9_REV, e.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV = _.a.TEXTURETYPE_FLOAT_32_UNSIGNED_INT_24_8_REV, e.TEXTURE_NEAREST_SAMPLINGMODE = _.a.TEXTURE_NEAREST_SAMPLINGMODE, e.TEXTURE_BILINEAR_SAMPLINGMODE = _.a.TEXTURE_BILINEAR_SAMPLINGMODE, e.TEXTURE_TRILINEAR_SAMPLINGMODE = _.a.TEXTURE_TRILINEAR_SAMPLINGMODE, e.TEXTURE_NEAREST_NEAREST_MIPLINEAR = _.a.TEXTURE_NEAREST_NEAREST_MIPLINEAR, e.TEXTURE_LINEAR_LINEAR_MIPNEAREST = _.a.TEXTURE_LINEAR_LINEAR_MIPNEAREST, e.TEXTURE_LINEAR_LINEAR_MIPLINEAR = _.a.TEXTURE_LINEAR_LINEAR_MIPLINEAR, e.TEXTURE_NEAREST_NEAREST_MIPNEAREST = _.a.TEXTURE_NEAREST_NEAREST_MIPNEAREST, e.TEXTURE_NEAREST_LINEAR_MIPNEAREST = _.a.TEXTURE_NEAREST_LINEAR_MIPNEAREST, e.TEXTURE_NEAREST_LINEAR_MIPLINEAR = _.a.TEXTURE_NEAREST_LINEAR_MIPLINEAR, e.TEXTURE_NEAREST_LINEAR = _.a.TEXTURE_NEAREST_LINEAR, e.TEXTURE_NEAREST_NEAREST = _.a.TEXTURE_NEAREST_NEAREST, e.TEXTURE_LINEAR_NEAREST_MIPNEAREST = _.a.TEXTURE_LINEAR_NEAREST_MIPNEAREST, e.TEXTURE_LINEAR_NEAREST_MIPLINEAR = _.a.TEXTURE_LINEAR_NEAREST_MIPLINEAR, e.TEXTURE_LINEAR_LINEAR = _.a.TEXTURE_LINEAR_LINEAR, e.TEXTURE_LINEAR_NEAREST = _.a.TEXTURE_LINEAR_NEAREST, e.TEXTURE_EXPLICIT_MODE = _.a.TEXTURE_EXPLICIT_MODE, e.TEXTURE_SPHERICAL_MODE = _.a.TEXTURE_SPHERICAL_MODE, e.TEXTURE_PLANAR_MODE = _.a.TEXTURE_PLANAR_MODE, e.TEXTURE_CUBIC_MODE = _.a.TEXTURE_CUBIC_MODE, e.TEXTURE_PROJECTION_MODE = _.a.TEXTURE_PROJECTION_MODE, e.TEXTURE_SKYBOX_MODE = _.a.TEXTURE_SKYBOX_MODE, e.TEXTURE_INVCUBIC_MODE = _.a.TEXTURE_INVCUBIC_MODE, e.TEXTURE_EQUIRECTANGULAR_MODE = _.a.TEXTURE_EQUIRECTANGULAR_MODE, e.TEXTURE_FIXED_EQUIRECTANGULAR_MODE = _.a.TEXTURE_FIXED_EQUIRECTANGULAR_MODE, e.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE = _.a.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE, e.SCALEMODE_FLOOR = _.a.SCALEMODE_FLOOR, e.SCALEMODE_NEAREST = _.a.SCALEMODE_NEAREST, e.SCALEMODE_CEILING = _.a.SCALEMODE_CEILING, e.CollisionsEpsilon = .001, e._RescalePostProcessFactory = null, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "b", function() {
|
|
return P
|
|
}), i.d(t, "c", function() {
|
|
return C
|
|
}), i.d(t, "a", function() {
|
|
return O
|
|
});
|
|
var n = i(1),
|
|
r = i(8),
|
|
o = i(9),
|
|
s = i(32),
|
|
a = i(29),
|
|
c = i(0),
|
|
l = i(25),
|
|
u = i(4),
|
|
h = i(13),
|
|
d = i(57),
|
|
f = i(24),
|
|
p = i(49),
|
|
_ = i(43),
|
|
g = i(20),
|
|
m = i(66),
|
|
v = i(55),
|
|
y = i(3),
|
|
b = i(2),
|
|
T = i(6),
|
|
E = i(22),
|
|
A = i(19),
|
|
x = i(14),
|
|
R = i(110),
|
|
P = function() {
|
|
return function() {}
|
|
}(),
|
|
S = function() {
|
|
return function() {
|
|
this.visibleInstances = {}, this.batchCache = new C, this.instancesBufferSize = 2048
|
|
}
|
|
}(),
|
|
C = function() {
|
|
return function() {
|
|
this.mustReturn = !1, this.visibleInstances = new Array, this.renderSelf = new Array, this.hardwareInstancedRendering = new Array
|
|
}
|
|
}(),
|
|
M = function() {
|
|
return function() {
|
|
this._areNormalsFrozen = !1, this._source = null, this.meshMap = null, this._preActivateId = -1, this._LODLevels = new Array, this._morphTargetManager = null
|
|
}
|
|
}(),
|
|
O = function(e) {
|
|
function t(i, n, r, o, c, l) {
|
|
void 0 === n && (n = null), void 0 === r && (r = null), void 0 === o && (o = null), void 0 === l && (l = !0);
|
|
var u = e.call(this, i, n) || this;
|
|
if (u._internalMeshDataInfo = new M, u.delayLoadState = y.a.DELAYLOADSTATE_NONE, u.instances = new Array, u._creationDataStorage = null, u._geometry = null, u._instanceDataStorage = new S, u._effectiveMaterial = null, u._shouldGenerateFlatShading = !1, u._originalBuilderSideOrientation = t.DEFAULTSIDE, u.overrideMaterialSideOrientation = null, n = u.getScene(), o) {
|
|
if (o._geometry && o._geometry.applyToMesh(u), s.a.DeepCopy(o, u, ["name", "material", "skeleton", "instances", "parent", "uniqueId", "source", "metadata", "hasLODLevels", "geometry", "isBlocked", "areNormalsFrozen", "onBeforeDrawObservable", "onBeforeRenderObservable", "onAfterRenderObservable", "onBeforeDraw", "onAfterWorldMatrixUpdateObservable", "onCollideObservable", "onCollisionPositionChangeObservable", "onRebuildObservable", "onDisposeObservable"], ["_poseMatrix"]), u._internalMeshDataInfo._source = o, n.useClonedMeshhMap && (o._internalMeshDataInfo.meshMap || (o._internalMeshDataInfo.meshMap = {}), o._internalMeshDataInfo.meshMap[u.uniqueId] = u), u._originalBuilderSideOrientation = o._originalBuilderSideOrientation, u._creationDataStorage = o._creationDataStorage, o._ranges) {
|
|
var h = o._ranges;
|
|
for (var i in h) h.hasOwnProperty(i) && h[i] && u.createAnimationRange(i, h[i].from, h[i].to)
|
|
}
|
|
var d;
|
|
if (o.metadata && o.metadata.clone ? u.metadata = o.metadata.clone() : u.metadata = o.metadata, a.a && a.a.HasTags(o) && a.a.AddTagsTo(u, a.a.GetTags(o, !0)), u.parent = o.parent, u.setPivotMatrix(o.getPivotMatrix()), u.id = i + "." + o.id, u.material = o.material, !c)
|
|
for (var f = o.getDescendants(!0), p = 0; p < f.length; p++) {
|
|
var _ = f[p];
|
|
_.clone && _.clone(i + "." + _.name, u)
|
|
}
|
|
if (n.getPhysicsEngine) {
|
|
var g = n.getPhysicsEngine();
|
|
if (l && g) {
|
|
var m = g.getImpostorForPhysicsObject(o);
|
|
m && (u.physicsImpostor = m.clone(u))
|
|
}
|
|
}
|
|
for (d = 0; d < n.particleSystems.length; d++) {
|
|
var v = n.particleSystems[d];
|
|
v.emitter === o && v.clone(v.name, u)
|
|
}
|
|
u.refreshBoundingInfo(), u.computeWorldMatrix(!0)
|
|
}
|
|
return null !== r && (u.parent = r), u._instanceDataStorage.hardwareInstancedRendering = u.getEngine().getCaps().instancedArrays, u
|
|
}
|
|
return n.d(t, e), t._GetDefaultSideOrientation = function(e) {
|
|
return e || t.FRONTSIDE
|
|
}, Object.defineProperty(t.prototype, "onBeforeRenderObservable", {
|
|
get: function() {
|
|
return this._internalMeshDataInfo._onBeforeRenderObservable || (this._internalMeshDataInfo._onBeforeRenderObservable = new r.c), this._internalMeshDataInfo._onBeforeRenderObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onBeforeBindObservable", {
|
|
get: function() {
|
|
return this._internalMeshDataInfo._onBeforeBindObservable || (this._internalMeshDataInfo._onBeforeBindObservable = new r.c), this._internalMeshDataInfo._onBeforeBindObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onAfterRenderObservable", {
|
|
get: function() {
|
|
return this._internalMeshDataInfo._onAfterRenderObservable || (this._internalMeshDataInfo._onAfterRenderObservable = new r.c), this._internalMeshDataInfo._onAfterRenderObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onBeforeDrawObservable", {
|
|
get: function() {
|
|
return this._internalMeshDataInfo._onBeforeDrawObservable || (this._internalMeshDataInfo._onBeforeDrawObservable = new r.c), this._internalMeshDataInfo._onBeforeDrawObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onBeforeDraw", {
|
|
set: function(e) {
|
|
this._onBeforeDrawObserver && this.onBeforeDrawObservable.remove(this._onBeforeDrawObserver), this._onBeforeDrawObserver = this.onBeforeDrawObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "morphTargetManager", {
|
|
get: function() {
|
|
return this._internalMeshDataInfo._morphTargetManager
|
|
},
|
|
set: function(e) {
|
|
this._internalMeshDataInfo._morphTargetManager !== e && (this._internalMeshDataInfo._morphTargetManager = e, this._syncGeometryWithMorphTargetManager())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "source", {
|
|
get: function() {
|
|
return this._internalMeshDataInfo._source
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "isUnIndexed", {
|
|
get: function() {
|
|
return this._unIndexed
|
|
},
|
|
set: function(e) {
|
|
this._unIndexed !== e && (this._unIndexed = e, this._markSubMeshesAsAttributesDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "Mesh"
|
|
}, Object.defineProperty(t.prototype, "_isMesh", {
|
|
get: function() {
|
|
return !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.toString = function(t) {
|
|
var i = e.prototype.toString.call(this, t);
|
|
if (i += ", n vertices: " + this.getTotalVertices(), i += ", parent: " + (this._waitingParentId ? this._waitingParentId : this.parent ? this.parent.name : "NONE"), this.animations)
|
|
for (var n = 0; n < this.animations.length; n++) i += ", animation[0]: " + this.animations[n].toString(t);
|
|
if (t)
|
|
if (this._geometry) {
|
|
var r = this.getIndices(),
|
|
o = this.getVerticesData(u.b.PositionKind);
|
|
o && r && (i += ", flat shading: " + (o.length / 3 === r.length ? "YES" : "NO"))
|
|
} else i += ", flat shading: UNKNOWN";
|
|
return i
|
|
}, t.prototype._unBindEffect = function() {
|
|
e.prototype._unBindEffect.call(this);
|
|
for (var t = 0, i = this.instances; t < i.length; t++) {
|
|
i[t]._unBindEffect()
|
|
}
|
|
}, Object.defineProperty(t.prototype, "hasLODLevels", {
|
|
get: function() {
|
|
return this._internalMeshDataInfo._LODLevels.length > 0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getLODLevels = function() {
|
|
return this._internalMeshDataInfo._LODLevels
|
|
}, t.prototype._sortLODLevels = function() {
|
|
this._internalMeshDataInfo._LODLevels.sort(function(e, t) {
|
|
return e.distance < t.distance ? 1 : e.distance > t.distance ? -1 : 0
|
|
})
|
|
}, t.prototype.addLODLevel = function(e, t) {
|
|
if (t && t._masterMesh) return T.a.Warn("You cannot use a mesh as LOD level twice"), this;
|
|
var i = new R.a(e, t);
|
|
return this._internalMeshDataInfo._LODLevels.push(i), t && (t._masterMesh = this), this._sortLODLevels(), this
|
|
}, t.prototype.getLODLevelAtDistance = function(e) {
|
|
for (var t = this._internalMeshDataInfo, i = 0; i < t._LODLevels.length; i++) {
|
|
var n = t._LODLevels[i];
|
|
if (n.distance === e) return n.mesh
|
|
}
|
|
return null
|
|
}, t.prototype.removeLODLevel = function(e) {
|
|
for (var t = this._internalMeshDataInfo, i = 0; i < t._LODLevels.length; i++) t._LODLevels[i].mesh === e && (t._LODLevels.splice(i, 1), e && (e._masterMesh = null));
|
|
return this._sortLODLevels(), this
|
|
}, t.prototype.getLOD = function(e, t) {
|
|
var i, n = this._internalMeshDataInfo;
|
|
if (!n._LODLevels || 0 === n._LODLevels.length) return this;
|
|
t ? i = t : i = this.getBoundingInfo().boundingSphere;
|
|
var r = i.centerWorld.subtract(e.globalPosition).length();
|
|
if (n._LODLevels[n._LODLevels.length - 1].distance > r) return this.onLODLevelSelection && this.onLODLevelSelection(r, this, n._LODLevels[n._LODLevels.length - 1].mesh), this;
|
|
for (var o = 0; o < n._LODLevels.length; o++) {
|
|
var s = n._LODLevels[o];
|
|
if (s.distance < r) return s.mesh && (s.mesh._preActivate(), s.mesh._updateSubMeshesBoundingInfo(this.worldMatrixFromCache)), this.onLODLevelSelection && this.onLODLevelSelection(r, this, s.mesh), s.mesh
|
|
}
|
|
return this.onLODLevelSelection && this.onLODLevelSelection(r, this, this), this
|
|
}, Object.defineProperty(t.prototype, "geometry", {
|
|
get: function() {
|
|
return this._geometry
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getTotalVertices = function() {
|
|
return null === this._geometry || void 0 === this._geometry ? 0 : this._geometry.getTotalVertices()
|
|
}, t.prototype.getVerticesData = function(e, t, i) {
|
|
return this._geometry ? this._geometry.getVerticesData(e, t, i) : null
|
|
}, t.prototype.getVertexBuffer = function(e) {
|
|
return this._geometry ? this._geometry.getVertexBuffer(e) : null
|
|
}, t.prototype.isVerticesDataPresent = function(e) {
|
|
return this._geometry ? this._geometry.isVerticesDataPresent(e) : !!this._delayInfo && -1 !== this._delayInfo.indexOf(e)
|
|
}, t.prototype.isVertexBufferUpdatable = function(e) {
|
|
return this._geometry ? this._geometry.isVertexBufferUpdatable(e) : !!this._delayInfo && -1 !== this._delayInfo.indexOf(e)
|
|
}, t.prototype.getVerticesDataKinds = function() {
|
|
if (!this._geometry) {
|
|
var e = new Array;
|
|
return this._delayInfo && this._delayInfo.forEach(function(t) {
|
|
e.push(t)
|
|
}), e
|
|
}
|
|
return this._geometry.getVerticesDataKinds()
|
|
}, t.prototype.getTotalIndices = function() {
|
|
return this._geometry ? this._geometry.getTotalIndices() : 0
|
|
}, t.prototype.getIndices = function(e, t) {
|
|
return this._geometry ? this._geometry.getIndices(e, t) : []
|
|
}, Object.defineProperty(t.prototype, "isBlocked", {
|
|
get: function() {
|
|
return null !== this._masterMesh && void 0 !== this._masterMesh
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.isReady = function(t, i) {
|
|
if (void 0 === t && (t = !1), void 0 === i && (i = !1), this.delayLoadState === y.a.DELAYLOADSTATE_LOADING) return !1;
|
|
if (!e.prototype.isReady.call(this, t)) return !1;
|
|
if (!this.subMeshes || 0 === this.subMeshes.length) return !0;
|
|
if (!t) return !0;
|
|
var n = this.getEngine(),
|
|
r = this.getScene(),
|
|
o = i || n.getCaps().instancedArrays && this.instances.length > 0;
|
|
this.computeWorldMatrix();
|
|
var s = this.material || r.defaultMaterial;
|
|
if (s)
|
|
if (s._storeEffectOnSubMeshes)
|
|
for (var a = 0, c = this.subMeshes; a < c.length; a++) {
|
|
var l = (_ = c[a]).getMaterial();
|
|
if (l)
|
|
if (l._storeEffectOnSubMeshes) {
|
|
if (!l.isReadyForSubMesh(this, _, o)) return !1
|
|
} else if (!l.isReady(this, o)) return !1
|
|
} else if (!s.isReady(this, o)) return !1;
|
|
for (var u = 0, h = this.lightSources; u < h.length; u++) {
|
|
var d = h[u].getShadowGenerator();
|
|
if (d)
|
|
for (var f = 0, p = this.subMeshes; f < p.length; f++) {
|
|
var _ = p[f];
|
|
if (!d.isReady(_, o)) return !1
|
|
}
|
|
}
|
|
for (var g = 0, m = this._internalMeshDataInfo._LODLevels; g < m.length; g++) {
|
|
var v = m[g];
|
|
if (v.mesh && !v.mesh.isReady(o)) return !1
|
|
}
|
|
return !0
|
|
}, Object.defineProperty(t.prototype, "areNormalsFrozen", {
|
|
get: function() {
|
|
return this._internalMeshDataInfo._areNormalsFrozen
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.freezeNormals = function() {
|
|
return this._internalMeshDataInfo._areNormalsFrozen = !0, this
|
|
}, t.prototype.unfreezeNormals = function() {
|
|
return this._internalMeshDataInfo._areNormalsFrozen = !1, this
|
|
}, Object.defineProperty(t.prototype, "overridenInstanceCount", {
|
|
set: function(e) {
|
|
this._instanceDataStorage.overridenInstanceCount = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._preActivate = function() {
|
|
var e = this._internalMeshDataInfo,
|
|
t = this.getScene().getRenderId();
|
|
return e._preActivateId === t ? this : (e._preActivateId = t, this._instanceDataStorage.visibleInstances = null, this)
|
|
}, t.prototype._preActivateForIntermediateRendering = function(e) {
|
|
return this._instanceDataStorage.visibleInstances && (this._instanceDataStorage.visibleInstances.intermediateDefaultRenderId = e), this
|
|
}, t.prototype._registerInstanceForRenderId = function(e, t) {
|
|
return this._instanceDataStorage.visibleInstances || (this._instanceDataStorage.visibleInstances = {
|
|
defaultRenderId: t,
|
|
selfDefaultRenderId: this._renderId
|
|
}), this._instanceDataStorage.visibleInstances[t] || (this._instanceDataStorage.visibleInstances[t] = new Array), this._instanceDataStorage.visibleInstances[t].push(e), this
|
|
}, t.prototype.refreshBoundingInfo = function(e) {
|
|
if (void 0 === e && (e = !1), this._boundingInfo && this._boundingInfo.isLocked) return this;
|
|
var t = this.geometry ? this.geometry.boundingBias : null;
|
|
return this._refreshBoundingInfo(this._getPositionData(e), t), this
|
|
}, t.prototype._createGlobalSubMesh = function(e) {
|
|
var t = this.getTotalVertices();
|
|
if (!t || !this.getIndices()) return null;
|
|
if (this.subMeshes && this.subMeshes.length > 0) {
|
|
var i = this.getIndices();
|
|
if (!i) return null;
|
|
var n = i.length,
|
|
r = !1;
|
|
if (e) r = !0;
|
|
else
|
|
for (var o = 0, s = this.subMeshes; o < s.length; o++) {
|
|
var a = s[o];
|
|
if (a.indexStart + a.indexCount >= n) {
|
|
r = !0;
|
|
break
|
|
}
|
|
if (a.verticesStart + a.verticesCount >= t) {
|
|
r = !0;
|
|
break
|
|
}
|
|
}
|
|
if (!r) return this.subMeshes[0]
|
|
}
|
|
return this.releaseSubMeshes(), new p.b(0, 0, t, 0, this.getTotalIndices(), this)
|
|
}, t.prototype.subdivide = function(e) {
|
|
if (!(e < 1)) {
|
|
for (var t = this.getTotalIndices(), i = t / e | 0, n = 0; i % 3 != 0;) i++;
|
|
this.releaseSubMeshes();
|
|
for (var r = 0; r < e && !(n >= t); r++) p.b.CreateFromIndices(0, n, Math.min(i, t - n), this), n += i;
|
|
this.synchronizeInstances()
|
|
}
|
|
}, t.prototype.setVerticesData = function(e, t, i, n) {
|
|
if (void 0 === i && (i = !1), this._geometry) this._geometry.setVerticesData(e, t, i, n);
|
|
else {
|
|
var r = new h.a;
|
|
r.set(t, e);
|
|
var o = this.getScene();
|
|
new d.a(d.a.RandomId(), o, r, i, this)
|
|
}
|
|
return this
|
|
}, t.prototype.markVerticesDataAsUpdatable = function(e, t) {
|
|
void 0 === t && (t = !0);
|
|
var i = this.getVertexBuffer(e);
|
|
i && i.isUpdatable() !== t && this.setVerticesData(e, this.getVerticesData(e), t)
|
|
}, t.prototype.setVerticesBuffer = function(e) {
|
|
return this._geometry || (this._geometry = d.a.CreateGeometryForMesh(this)), this._geometry.setVerticesBuffer(e), this
|
|
}, t.prototype.updateVerticesData = function(e, t, i, n) {
|
|
return this._geometry ? (n ? (this.makeGeometryUnique(), this.updateVerticesData(e, t, i, !1)) : this._geometry.updateVerticesData(e, t, i), this) : this
|
|
}, t.prototype.updateMeshPositions = function(e, t) {
|
|
void 0 === t && (t = !0);
|
|
var i = this.getVerticesData(u.b.PositionKind);
|
|
if (!i) return this;
|
|
if (e(i), this.updateVerticesData(u.b.PositionKind, i, !1, !1), t) {
|
|
var n = this.getIndices(),
|
|
r = this.getVerticesData(u.b.NormalKind);
|
|
if (!r) return this;
|
|
h.a.ComputeNormals(i, n, r), this.updateVerticesData(u.b.NormalKind, r, !1, !1)
|
|
}
|
|
return this
|
|
}, t.prototype.makeGeometryUnique = function() {
|
|
if (!this._geometry) return this;
|
|
var e = this._geometry,
|
|
t = this._geometry.copy(d.a.RandomId());
|
|
return e.releaseForMesh(this, !0), t.applyToMesh(this), this
|
|
}, t.prototype.setIndices = function(e, t, i) {
|
|
if (void 0 === t && (t = null), void 0 === i && (i = !1), this._geometry) this._geometry.setIndices(e, t, i);
|
|
else {
|
|
var n = new h.a;
|
|
n.indices = e;
|
|
var r = this.getScene();
|
|
new d.a(d.a.RandomId(), r, n, i, this)
|
|
}
|
|
return this
|
|
}, t.prototype.updateIndices = function(e, t, i) {
|
|
return void 0 === i && (i = !1), this._geometry ? (this._geometry.updateIndices(e, t, i), this) : this
|
|
}, t.prototype.toLeftHanded = function() {
|
|
return this._geometry ? (this._geometry.toLeftHanded(), this) : this
|
|
}, t.prototype._bind = function(e, t, i) {
|
|
if (!this._geometry) return this;
|
|
var n, r = this.getScene().getEngine();
|
|
if (this._unIndexed) n = null;
|
|
else switch (i) {
|
|
case g.a.PointFillMode:
|
|
n = null;
|
|
break;
|
|
case g.a.WireFrameFillMode:
|
|
n = e._getLinesIndexBuffer(this.getIndices(), r);
|
|
break;
|
|
default:
|
|
case g.a.TriangleFillMode:
|
|
n = this._geometry.getIndexBuffer()
|
|
}
|
|
return this._geometry._bind(t, n), this
|
|
}, t.prototype._draw = function(e, t, i) {
|
|
if (!this._geometry || !this._geometry.getVertexBuffers() || !this._unIndexed && !this._geometry.getIndexBuffer()) return this;
|
|
this._internalMeshDataInfo._onBeforeDrawObservable && this._internalMeshDataInfo._onBeforeDrawObservable.notifyObservers(this);
|
|
var n = this.getScene().getEngine();
|
|
return this._unIndexed || t == g.a.PointFillMode ? n.drawArraysType(t, e.verticesStart, e.verticesCount, i) : t == g.a.WireFrameFillMode ? n.drawElementsType(t, 0, e._linesIndexCount, i) : n.drawElementsType(t, e.indexStart, e.indexCount, i), this
|
|
}, t.prototype.registerBeforeRender = function(e) {
|
|
return this.onBeforeRenderObservable.add(e), this
|
|
}, t.prototype.unregisterBeforeRender = function(e) {
|
|
return this.onBeforeRenderObservable.removeCallback(e), this
|
|
}, t.prototype.registerAfterRender = function(e) {
|
|
return this.onAfterRenderObservable.add(e), this
|
|
}, t.prototype.unregisterAfterRender = function(e) {
|
|
return this.onAfterRenderObservable.removeCallback(e), this
|
|
}, t.prototype._getInstancesRenderList = function(e) {
|
|
if (this._instanceDataStorage.isFrozen && this._instanceDataStorage.previousBatch) return this._instanceDataStorage.previousBatch;
|
|
var t = this.getScene(),
|
|
i = t._isInIntermediateRendering(),
|
|
n = i ? this._internalAbstractMeshDataInfo._onlyForInstancesIntermediate : this._internalAbstractMeshDataInfo._onlyForInstances,
|
|
r = this._instanceDataStorage.batchCache;
|
|
if (r.mustReturn = !1, r.renderSelf[e] = !n && this.isEnabled() && this.isVisible, r.visibleInstances[e] = null, this._instanceDataStorage.visibleInstances) {
|
|
var o = this._instanceDataStorage.visibleInstances,
|
|
s = t.getRenderId(),
|
|
a = i ? o.intermediateDefaultRenderId : o.defaultRenderId;
|
|
r.visibleInstances[e] = o[s], !r.visibleInstances[e] && a && (r.visibleInstances[e] = o[a])
|
|
}
|
|
return r.hardwareInstancedRendering[e] = this._instanceDataStorage.hardwareInstancedRendering && null !== r.visibleInstances[e] && void 0 !== r.visibleInstances[e], this._instanceDataStorage.previousBatch = r, r
|
|
}, t.prototype._renderWithInstances = function(e, t, i, n, r) {
|
|
var o = i.visibleInstances[e._id];
|
|
if (!o) return this;
|
|
for (var s = this._instanceDataStorage, a = s.instancesBufferSize, c = s.instancesBuffer, l = 16 * (o.length + 1) * 4; s.instancesBufferSize < l;) s.instancesBufferSize *= 2;
|
|
s.instancesData && a == s.instancesBufferSize || (s.instancesData = new Float32Array(s.instancesBufferSize / 4));
|
|
var h = 0,
|
|
d = 0,
|
|
f = this._effectiveMesh.getWorldMatrix();
|
|
if (i.renderSelf[e._id] && (f.copyToArray(s.instancesData, h), h += 16, d++), o)
|
|
for (var p = 0; p < o.length; p++) {
|
|
o[p].getWorldMatrix().copyToArray(s.instancesData, h), h += 16, d++
|
|
}
|
|
return c && a == s.instancesBufferSize ? c.updateDirectly(s.instancesData, 0, d) : (c && c.dispose(), c = new u.a(r, s.instancesData, !0, 16, !1, !0), s.instancesBuffer = c, this.setVerticesBuffer(c.createVertexBuffer("world0", 0, 4)), this.setVerticesBuffer(c.createVertexBuffer("world1", 4, 4)), this.setVerticesBuffer(c.createVertexBuffer("world2", 8, 4)), this.setVerticesBuffer(c.createVertexBuffer("world3", 12, 4))), this._bind(e, n, t), this._draw(e, t, d), r.unbindInstanceAttributes(), this
|
|
}, t.prototype._processRendering = function(e, t, i, n, r, o, s) {
|
|
var a = this.getScene().getEngine();
|
|
if (r) this._renderWithInstances(e, i, n, t, a);
|
|
else {
|
|
n.renderSelf[e._id] && (o && o(!1, this._effectiveMesh.getWorldMatrix(), s), this._draw(e, i, this._instanceDataStorage.overridenInstanceCount));
|
|
var c = n.visibleInstances[e._id];
|
|
if (c)
|
|
for (var l = 0; l < c.length; l++) {
|
|
var u = c[l].getWorldMatrix();
|
|
o && o(!0, u, s), this._draw(e, i)
|
|
}
|
|
}
|
|
return this
|
|
}, t.prototype._freeze = function() {
|
|
if (this._instanceDataStorage.isFrozen = !0, this.subMeshes)
|
|
for (var e = 0; e < this.subMeshes.length; e++) this._getInstancesRenderList(e)
|
|
}, t.prototype._unFreeze = function() {
|
|
this._instanceDataStorage.isFrozen = !1
|
|
}, t.prototype.render = function(e, t) {
|
|
var i = this.getScene();
|
|
if (i._isInIntermediateRendering() ? this._internalAbstractMeshDataInfo._isActiveIntermediate = !1 : this._internalAbstractMeshDataInfo._isActive = !1, this._checkOcclusionQuery()) return this;
|
|
var n = this._getInstancesRenderList(e._id);
|
|
if (n.mustReturn) return this;
|
|
if (!this._geometry || !this._geometry.getVertexBuffers() || !this._unIndexed && !this._geometry.getIndexBuffer()) return this;
|
|
this._internalMeshDataInfo._onBeforeRenderObservable && this._internalMeshDataInfo._onBeforeRenderObservable.notifyObservers(this);
|
|
var r, o = i.getEngine(),
|
|
s = n.hardwareInstancedRendering[e._id],
|
|
a = this._instanceDataStorage,
|
|
c = e.getMaterial();
|
|
if (!c) return this;
|
|
if (!a.isFrozen || !this._effectiveMaterial || this._effectiveMaterial !== c)
|
|
if (this._effectiveMaterial = c, this._effectiveMaterial._storeEffectOnSubMeshes) {
|
|
if (!this._effectiveMaterial.isReadyForSubMesh(this, e, s)) return this
|
|
} else if (!this._effectiveMaterial.isReady(this, s)) return this;
|
|
t && o.setAlphaMode(this._effectiveMaterial.alphaMode);
|
|
for (var l = 0, u = i._beforeRenderingMeshStage; l < u.length; l++) {
|
|
u[l].action(this, e, n)
|
|
}
|
|
if (!(r = this._effectiveMaterial._storeEffectOnSubMeshes ? e.effect : this._effectiveMaterial.getEffect())) return this;
|
|
var h, d = this._effectiveMesh;
|
|
a.isFrozen ? h = a.sideOrientation : (null == (h = this.overrideMaterialSideOrientation) && (h = this._effectiveMaterial.sideOrientation, d._getWorldMatrixDeterminant() < 0 && (h = h === g.a.ClockWiseSideOrientation ? g.a.CounterClockWiseSideOrientation : g.a.ClockWiseSideOrientation)), a.sideOrientation = h);
|
|
var f = this._effectiveMaterial._preBind(r, h);
|
|
this._effectiveMaterial.forceDepthWrite && o.setDepthWrite(!0);
|
|
var p = i.forcePointsCloud ? g.a.PointFillMode : i.forceWireframe ? g.a.WireFrameFillMode : this._effectiveMaterial.fillMode;
|
|
this._internalMeshDataInfo._onBeforeBindObservable && this._internalMeshDataInfo._onBeforeBindObservable.notifyObservers(this), s || this._bind(e, r, p);
|
|
var _ = d.getWorldMatrix();
|
|
this._effectiveMaterial._storeEffectOnSubMeshes ? this._effectiveMaterial.bindForSubMesh(_, this, e) : this._effectiveMaterial.bind(_, this), !this._effectiveMaterial.backFaceCulling && this._effectiveMaterial.separateCullingPass && (o.setState(!0, this._effectiveMaterial.zOffset, !1, !f), this._processRendering(e, r, p, n, s, this._onBeforeDraw, this._effectiveMaterial), o.setState(!0, this._effectiveMaterial.zOffset, !1, f)), this._processRendering(e, r, p, n, s, this._onBeforeDraw, this._effectiveMaterial), this._effectiveMaterial.unbind();
|
|
for (var m = 0, v = i._afterRenderingMeshStage; m < v.length; m++) {
|
|
v[m].action(this, e, n)
|
|
}
|
|
return this._internalMeshDataInfo._onAfterRenderObservable && this._internalMeshDataInfo._onAfterRenderObservable.notifyObservers(this), this
|
|
}, t.prototype._onBeforeDraw = function(e, t, i) {
|
|
e && i && i.bindOnlyWorldMatrix(t)
|
|
}, t.prototype.cleanMatrixWeights = function() {
|
|
this.isVerticesDataPresent(u.b.MatricesWeightsKind) && (this.isVerticesDataPresent(u.b.MatricesWeightsExtraKind) ? this.normalizeSkinWeightsAndExtra() : this.normalizeSkinFourWeights())
|
|
}, t.prototype.normalizeSkinFourWeights = function() {
|
|
for (var e = this.getVerticesData(u.b.MatricesWeightsKind), t = e.length, i = 0; i < t; i += 4) {
|
|
var n = e[i] + e[i + 1] + e[i + 2] + e[i + 3];
|
|
if (0 === n) e[i] = 1;
|
|
else {
|
|
var r = 1 / n;
|
|
e[i] *= r, e[i + 1] *= r, e[i + 2] *= r, e[i + 3] *= r
|
|
}
|
|
}
|
|
this.setVerticesData(u.b.MatricesWeightsKind, e)
|
|
}, t.prototype.normalizeSkinWeightsAndExtra = function() {
|
|
for (var e = this.getVerticesData(u.b.MatricesWeightsExtraKind), t = this.getVerticesData(u.b.MatricesWeightsKind), i = t.length, n = 0; n < i; n += 4) {
|
|
var r = t[n] + t[n + 1] + t[n + 2] + t[n + 3];
|
|
if (0 === (r += e[n] + e[n + 1] + e[n + 2] + e[n + 3])) t[n] = 1;
|
|
else {
|
|
var o = 1 / r;
|
|
t[n] *= o, t[n + 1] *= o, t[n + 2] *= o, t[n + 3] *= o, e[n] *= o, e[n + 1] *= o, e[n + 2] *= o, e[n + 3] *= o
|
|
}
|
|
}
|
|
this.setVerticesData(u.b.MatricesWeightsKind, t), this.setVerticesData(u.b.MatricesWeightsKind, e)
|
|
}, t.prototype.validateSkinning = function() {
|
|
var e = this.getVerticesData(u.b.MatricesWeightsExtraKind),
|
|
t = this.getVerticesData(u.b.MatricesWeightsKind);
|
|
if (null === t || null == this.skeleton) return {
|
|
skinned: !1,
|
|
valid: !0,
|
|
report: "not skinned"
|
|
};
|
|
for (var i = t.length, n = 0, r = 0, o = 0, s = 0, a = null === e ? 4 : 8, c = new Array, l = 0; l <= a; l++) c[l] = 0;
|
|
for (l = 0; l < i; l += 4) {
|
|
for (var h = t[l], d = h, f = 0 === d ? 0 : 1, p = 1; p < a; p++) {
|
|
var _ = p < 4 ? t[l + p] : e[l + p - 4];
|
|
_ > h && n++, 0 !== _ && f++, d += _, h = _
|
|
}
|
|
if (c[f]++, f > o && (o = f), 0 === d) r++;
|
|
else {
|
|
var g = 1 / d,
|
|
m = 0;
|
|
for (p = 0; p < a; p++) m += p < 4 ? Math.abs(t[l + p] - t[l + p] * g) : Math.abs(e[l + p - 4] - e[l + p - 4] * g);
|
|
m > .001 && s++
|
|
}
|
|
}
|
|
var v = this.skeleton.bones.length,
|
|
y = this.getVerticesData(u.b.MatricesIndicesKind),
|
|
b = this.getVerticesData(u.b.MatricesIndicesExtraKind),
|
|
T = 0;
|
|
for (l = 0; l < i; l++)
|
|
for (p = 0; p < a; p++) {
|
|
var E = p < 4 ? y[p] : b[p - 4];
|
|
(E >= v || E < 0) && T++
|
|
}
|
|
return {
|
|
skinned: !0,
|
|
valid: 0 === r && 0 === s && 0 === T,
|
|
report: "Number of Weights = " + i / 4 + "\nMaximum influences = " + o + "\nMissing Weights = " + r + "\nNot Sorted = " + n + "\nNot Normalized = " + s + "\nWeightCounts = [" + c + "]\nNumber of bones = " + v + "\nBad Bone Indices = " + T
|
|
}
|
|
}, t.prototype._checkDelayState = function() {
|
|
var e = this.getScene();
|
|
return this._geometry ? this._geometry.load(e) : this.delayLoadState === y.a.DELAYLOADSTATE_NOTLOADED && (this.delayLoadState = y.a.DELAYLOADSTATE_LOADING, this._queueLoad(e)), this
|
|
}, t.prototype._queueLoad = function(e) {
|
|
var t = this;
|
|
e._addPendingData(this);
|
|
var i = -1 !== this.delayLoadingFile.indexOf(".babylonbinarymeshdata");
|
|
return o.h.LoadFile(this.delayLoadingFile, function(i) {
|
|
i instanceof ArrayBuffer ? t._delayLoadingFunction(i, t) : t._delayLoadingFunction(JSON.parse(i), t), t.instances.forEach(function(e) {
|
|
e.refreshBoundingInfo(), e._syncSubMeshes()
|
|
}), t.delayLoadState = y.a.DELAYLOADSTATE_LOADED, e._removePendingData(t)
|
|
}, function() {}, e.offlineProvider, i), this
|
|
}, t.prototype.isInFrustum = function(t) {
|
|
return this.delayLoadState !== y.a.DELAYLOADSTATE_LOADING && (!!e.prototype.isInFrustum.call(this, t) && (this._checkDelayState(), !0))
|
|
}, t.prototype.setMaterialByID = function(e) {
|
|
var t, i = this.getScene().materials;
|
|
for (t = i.length - 1; t > -1; t--)
|
|
if (i[t].id === e) return this.material = i[t], this;
|
|
var n = this.getScene().multiMaterials;
|
|
for (t = n.length - 1; t > -1; t--)
|
|
if (n[t].id === e) return this.material = n[t], this;
|
|
return this
|
|
}, t.prototype.getAnimatables = function() {
|
|
var e = new Array;
|
|
return this.material && e.push(this.material), this.skeleton && e.push(this.skeleton), e
|
|
}, t.prototype.bakeTransformIntoVertices = function(e) {
|
|
if (!this.isVerticesDataPresent(u.b.PositionKind)) return this;
|
|
var t = this.subMeshes.splice(0);
|
|
this._resetPointsArrayCache();
|
|
var i, n = this.getVerticesData(u.b.PositionKind),
|
|
r = new Array;
|
|
for (i = 0; i < n.length; i += 3) c.x.TransformCoordinates(c.x.FromArray(n, i), e).toArray(r, i);
|
|
if (this.setVerticesData(u.b.PositionKind, r, this.getVertexBuffer(u.b.PositionKind).isUpdatable()), this.isVerticesDataPresent(u.b.NormalKind)) {
|
|
for (n = this.getVerticesData(u.b.NormalKind), r = [], i = 0; i < n.length; i += 3) c.x.TransformNormal(c.x.FromArray(n, i), e).normalize().toArray(r, i);
|
|
this.setVerticesData(u.b.NormalKind, r, this.getVertexBuffer(u.b.NormalKind).isUpdatable())
|
|
}
|
|
return e.m[0] * e.m[5] * e.m[10] < 0 && this.flipFaces(), this.releaseSubMeshes(), this.subMeshes = t, this
|
|
}, t.prototype.bakeCurrentTransformIntoVertices = function() {
|
|
return this.bakeTransformIntoVertices(this.computeWorldMatrix(!0)), this.scaling.copyFromFloats(1, 1, 1), this.position.copyFromFloats(0, 0, 0), this.rotation.copyFromFloats(0, 0, 0), this.rotationQuaternion && (this.rotationQuaternion = c.q.Identity()), this._worldMatrix = c.j.Identity(), this
|
|
}, Object.defineProperty(t.prototype, "_positions", {
|
|
get: function() {
|
|
return this._geometry ? this._geometry._positions : null
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._resetPointsArrayCache = function() {
|
|
return this._geometry && this._geometry._resetPointsArrayCache(), this
|
|
}, t.prototype._generatePointsArray = function() {
|
|
return !!this._geometry && this._geometry._generatePointsArray()
|
|
}, t.prototype.clone = function(e, i, n, r) {
|
|
return void 0 === e && (e = ""), void 0 === r && (r = !0), new t(e, this.getScene(), i, this, n, r)
|
|
}, t.prototype.dispose = function(t, i) {
|
|
void 0 === i && (i = !1), this.morphTargetManager = null, this._geometry && this._geometry.releaseForMesh(this, !0);
|
|
var n = this._internalMeshDataInfo;
|
|
if (n._onBeforeDrawObservable && n._onBeforeDrawObservable.clear(), n._onBeforeBindObservable && n._onBeforeBindObservable.clear(), n._onBeforeRenderObservable && n._onBeforeRenderObservable.clear(), n._onAfterRenderObservable && n._onAfterRenderObservable.clear(), this._scene.useClonedMeshhMap) {
|
|
if (n.meshMap)
|
|
for (var r in n.meshMap) {
|
|
(a = n.meshMap[r]) && (a._internalMeshDataInfo._source = null, n.meshMap[r] = void 0)
|
|
}
|
|
n._source && n._source._internalMeshDataInfo.meshMap && (n._source._internalMeshDataInfo.meshMap[this.uniqueId] = void 0)
|
|
} else
|
|
for (var o = 0, s = this.getScene().meshes; o < s.length; o++) {
|
|
var a;
|
|
(a = s[o])._internalMeshDataInfo && a._internalMeshDataInfo._source && a._internalMeshDataInfo._source === this && (a._internalMeshDataInfo._source = null)
|
|
}
|
|
for (n._source = null, this._instanceDataStorage.instancesBuffer && (this._instanceDataStorage.instancesBuffer.dispose(), this._instanceDataStorage.instancesBuffer = null); this.instances.length;) this.instances[0].dispose();
|
|
e.prototype.dispose.call(this, t, i)
|
|
}, t.prototype.applyDisplacementMap = function(e, t, i, n, r, s, a) {
|
|
var c = this;
|
|
void 0 === a && (a = !1);
|
|
var l = this.getScene();
|
|
return o.h.LoadImage(e, function(e) {
|
|
var o = document.createElement("canvas"),
|
|
l = o.getContext("2d"),
|
|
u = e.width,
|
|
h = e.height;
|
|
o.width = u, o.height = h, l.drawImage(e, 0, 0);
|
|
var d = l.getImageData(0, 0, u, h).data;
|
|
c.applyDisplacementMapFromBuffer(d, u, h, t, i, r, s, a), n && n(c)
|
|
}, function() {}, l.offlineProvider), this
|
|
}, t.prototype.applyDisplacementMapFromBuffer = function(e, t, i, n, r, o, s, a) {
|
|
if (void 0 === a && (a = !1), !this.isVerticesDataPresent(u.b.PositionKind) || !this.isVerticesDataPresent(u.b.NormalKind) || !this.isVerticesDataPresent(u.b.UVKind)) return T.a.Warn("Cannot call applyDisplacementMap: Given mesh is not complete. Position, Normal or UV are missing"), this;
|
|
var l = this.getVerticesData(u.b.PositionKind, !0, !0),
|
|
d = this.getVerticesData(u.b.NormalKind),
|
|
f = this.getVerticesData(u.b.UVKind),
|
|
p = c.x.Zero(),
|
|
_ = c.x.Zero(),
|
|
g = c.w.Zero();
|
|
o = o || c.w.Zero(), s = s || new c.w(1, 1);
|
|
for (var m = 0; m < l.length; m += 3) {
|
|
c.x.FromArrayToRef(l, m, p), c.x.FromArrayToRef(d, m, _), c.w.FromArrayToRef(f, m / 3 * 2, g);
|
|
var v = 4 * ((Math.abs(g.x * s.x + o.x) * t % t | 0) + (Math.abs(g.y * s.y + o.y) * i % i | 0) * t),
|
|
y = .3 * (e[v] / 255) + .59 * (e[v + 1] / 255) + .11 * (e[v + 2] / 255);
|
|
_.normalize(), _.scaleInPlace(n + (r - n) * y), (p = p.add(_)).toArray(l, m)
|
|
}
|
|
return h.a.ComputeNormals(l, this.getIndices(), d), a ? (this.setVerticesData(u.b.PositionKind, l), this.setVerticesData(u.b.NormalKind, d)) : (this.updateVerticesData(u.b.PositionKind, l), this.updateVerticesData(u.b.NormalKind, d)), this
|
|
}, t.prototype.convertToFlatShadedMesh = function() {
|
|
var e, t, i = this.getVerticesDataKinds(),
|
|
n = {},
|
|
r = {},
|
|
o = {},
|
|
s = !1;
|
|
for (e = 0; e < i.length; e++) {
|
|
t = i[e];
|
|
var a = this.getVertexBuffer(t);
|
|
t !== u.b.NormalKind ? (n[t] = a, r[t] = n[t].getData(), o[t] = []) : (s = a.isUpdatable(), i.splice(e, 1), e--)
|
|
}
|
|
var l, h = this.subMeshes.slice(0),
|
|
d = this.getIndices(),
|
|
f = this.getTotalIndices();
|
|
for (l = 0; l < f; l++) {
|
|
var _ = d[l];
|
|
for (e = 0; e < i.length; e++)
|
|
for (var g = n[t = i[e]].getStrideSize(), m = 0; m < g; m++) o[t].push(r[t][_ * g + m])
|
|
}
|
|
var v = [],
|
|
y = o[u.b.PositionKind];
|
|
for (l = 0; l < f; l += 3) {
|
|
d[l] = l, d[l + 1] = l + 1, d[l + 2] = l + 2;
|
|
for (var b = c.x.FromArray(y, 3 * l), T = c.x.FromArray(y, 3 * (l + 1)), E = c.x.FromArray(y, 3 * (l + 2)), A = b.subtract(T), x = E.subtract(T), R = c.x.Normalize(c.x.Cross(A, x)), P = 0; P < 3; P++) v.push(R.x), v.push(R.y), v.push(R.z)
|
|
}
|
|
for (this.setIndices(d), this.setVerticesData(u.b.NormalKind, v, s), e = 0; e < i.length; e++) t = i[e], this.setVerticesData(t, o[t], n[t].isUpdatable());
|
|
this.releaseSubMeshes();
|
|
for (var S = 0; S < h.length; S++) {
|
|
var C = h[S];
|
|
p.b.AddToMesh(C.materialIndex, C.indexStart, C.indexCount, C.indexStart, C.indexCount, this)
|
|
}
|
|
return this.synchronizeInstances(), this
|
|
}, t.prototype.convertToUnIndexedMesh = function() {
|
|
var e, t, i = this.getVerticesDataKinds(),
|
|
n = {},
|
|
r = {},
|
|
o = {};
|
|
for (e = 0; e < i.length; e++) {
|
|
t = i[e];
|
|
var s = this.getVertexBuffer(t);
|
|
n[t] = s, r[t] = n[t].getData(), o[t] = []
|
|
}
|
|
var a, c = this.subMeshes.slice(0),
|
|
l = this.getIndices(),
|
|
u = this.getTotalIndices();
|
|
for (a = 0; a < u; a++) {
|
|
var h = l[a];
|
|
for (e = 0; e < i.length; e++)
|
|
for (var d = n[t = i[e]].getStrideSize(), f = 0; f < d; f++) o[t].push(r[t][h * d + f])
|
|
}
|
|
for (a = 0; a < u; a += 3) l[a] = a, l[a + 1] = a + 1, l[a + 2] = a + 2;
|
|
for (this.setIndices(l), e = 0; e < i.length; e++) t = i[e], this.setVerticesData(t, o[t], n[t].isUpdatable());
|
|
this.releaseSubMeshes();
|
|
for (var _ = 0; _ < c.length; _++) {
|
|
var g = c[_];
|
|
p.b.AddToMesh(g.materialIndex, g.indexStart, g.indexCount, g.indexStart, g.indexCount, this)
|
|
}
|
|
return this._unIndexed = !0, this.synchronizeInstances(), this
|
|
}, t.prototype.flipFaces = function(e) {
|
|
void 0 === e && (e = !1);
|
|
var t, i, n = h.a.ExtractFromMesh(this);
|
|
if (e && this.isVerticesDataPresent(u.b.NormalKind) && n.normals)
|
|
for (t = 0; t < n.normals.length; t++) n.normals[t] *= -1;
|
|
if (n.indices)
|
|
for (t = 0; t < n.indices.length; t += 3) i = n.indices[t + 1], n.indices[t + 1] = n.indices[t + 2], n.indices[t + 2] = i;
|
|
return n.applyToMesh(this), this
|
|
}, t.prototype.increaseVertices = function(e) {
|
|
var t = h.a.ExtractFromMesh(this),
|
|
i = t.uvs,
|
|
n = t.indices,
|
|
r = t.positions,
|
|
o = t.normals;
|
|
if (null === n || null === r || null === o || null === i) T.a.Warn("VertexData contains null entries");
|
|
else {
|
|
for (var s, a, l = e + 1, u = new Array, d = 0; d < l + 1; d++) u[d] = new Array;
|
|
var f, p = new c.x(0, 0, 0),
|
|
_ = new c.x(0, 0, 0),
|
|
g = new c.w(0, 0),
|
|
m = new Array,
|
|
v = new Array,
|
|
y = new Array,
|
|
b = r.length,
|
|
E = i.length;
|
|
for (d = 0; d < n.length; d += 3) {
|
|
v[0] = n[d], v[1] = n[d + 1], v[2] = n[d + 2];
|
|
for (var A = 0; A < 3; A++)
|
|
if (s = v[A], a = v[(A + 1) % 3], void 0 === y[s] && void 0 === y[a] ? (y[s] = new Array, y[a] = new Array) : (void 0 === y[s] && (y[s] = new Array), void 0 === y[a] && (y[a] = new Array)), void 0 === y[s][a] && void 0 === y[a][s]) {
|
|
y[s][a] = [], p.x = (r[3 * a] - r[3 * s]) / l, p.y = (r[3 * a + 1] - r[3 * s + 1]) / l, p.z = (r[3 * a + 2] - r[3 * s + 2]) / l, _.x = (o[3 * a] - o[3 * s]) / l, _.y = (o[3 * a + 1] - o[3 * s + 1]) / l, _.z = (o[3 * a + 2] - o[3 * s + 2]) / l, g.x = (i[2 * a] - i[2 * s]) / l, g.y = (i[2 * a + 1] - i[2 * s + 1]) / l, y[s][a].push(s);
|
|
for (var x = 1; x < l; x++) y[s][a].push(r.length / 3), r[b] = r[3 * s] + x * p.x, o[b++] = o[3 * s] + x * _.x, r[b] = r[3 * s + 1] + x * p.y, o[b++] = o[3 * s + 1] + x * _.y, r[b] = r[3 * s + 2] + x * p.z, o[b++] = o[3 * s + 2] + x * _.z, i[E++] = i[2 * s] + x * g.x, i[E++] = i[2 * s + 1] + x * g.y;
|
|
y[s][a].push(a), y[a][s] = new Array, f = y[s][a].length;
|
|
for (var R = 0; R < f; R++) y[a][s][R] = y[s][a][f - 1 - R]
|
|
} u[0][0] = n[d], u[1][0] = y[n[d]][n[d + 1]][1], u[1][1] = y[n[d]][n[d + 2]][1];
|
|
for (x = 2; x < l; x++) {
|
|
u[x][0] = y[n[d]][n[d + 1]][x], u[x][x] = y[n[d]][n[d + 2]][x], p.x = (r[3 * u[x][x]] - r[3 * u[x][0]]) / x, p.y = (r[3 * u[x][x] + 1] - r[3 * u[x][0] + 1]) / x, p.z = (r[3 * u[x][x] + 2] - r[3 * u[x][0] + 2]) / x, _.x = (o[3 * u[x][x]] - o[3 * u[x][0]]) / x, _.y = (o[3 * u[x][x] + 1] - o[3 * u[x][0] + 1]) / x, _.z = (o[3 * u[x][x] + 2] - o[3 * u[x][0] + 2]) / x, g.x = (i[2 * u[x][x]] - i[2 * u[x][0]]) / x, g.y = (i[2 * u[x][x] + 1] - i[2 * u[x][0] + 1]) / x;
|
|
for (A = 1; A < x; A++) u[x][A] = r.length / 3, r[b] = r[3 * u[x][0]] + A * p.x, o[b++] = o[3 * u[x][0]] + A * _.x, r[b] = r[3 * u[x][0] + 1] + A * p.y, o[b++] = o[3 * u[x][0] + 1] + A * _.y, r[b] = r[3 * u[x][0] + 2] + A * p.z, o[b++] = o[3 * u[x][0] + 2] + A * _.z, i[E++] = i[2 * u[x][0]] + A * g.x, i[E++] = i[2 * u[x][0] + 1] + A * g.y
|
|
}
|
|
u[l] = y[n[d + 1]][n[d + 2]], m.push(u[0][0], u[1][0], u[1][1]);
|
|
for (x = 1; x < l; x++) {
|
|
for (A = 0; A < x; A++) m.push(u[x][A], u[x + 1][A], u[x + 1][A + 1]), m.push(u[x][A], u[x + 1][A + 1], u[x][A + 1]);
|
|
m.push(u[x][A], u[x + 1][A], u[x + 1][A + 1])
|
|
}
|
|
}
|
|
t.indices = m, t.applyToMesh(this)
|
|
}
|
|
}, t.prototype.forceSharedVertices = function() {
|
|
var e = h.a.ExtractFromMesh(this),
|
|
t = e.uvs,
|
|
i = e.indices,
|
|
n = e.positions,
|
|
r = e.normals;
|
|
if (null === i || null === n || null === r || null === t) T.a.Warn("VertexData contains null entries");
|
|
else {
|
|
for (var o, s, a = new Array, c = new Array, l = new Array, u = new Array, d = 0, f = new Array, p = 0; p < i.length; p += 3) {
|
|
s = [i[p], i[p + 1], i[p + 2]], u = new Array;
|
|
for (var _ = 0; _ < 3; _++) {
|
|
u[_] = "";
|
|
for (var g = 0; g < 3; g++) Math.abs(n[3 * s[_] + g]) < 1e-8 && (n[3 * s[_] + g] = 0), u[_] += n[3 * s[_] + g] + "|";
|
|
u[_] = u[_].slice(0, -1)
|
|
}
|
|
if (u[0] != u[1] && u[0] != u[2] && u[1] != u[2])
|
|
for (_ = 0; _ < 3; _++) {
|
|
if ((o = f.indexOf(u[_])) < 0) {
|
|
f.push(u[_]), o = d++;
|
|
for (g = 0; g < 3; g++) a.push(n[3 * s[_] + g]);
|
|
for (g = 0; g < 2; g++) l.push(t[2 * s[_] + g])
|
|
}
|
|
c.push(o)
|
|
}
|
|
}
|
|
var m = new Array;
|
|
h.a.ComputeNormals(a, c, m), e.positions = a, e.indices = c, e.normals = m, e.uvs = l, e.applyToMesh(this)
|
|
}
|
|
}, t._instancedMeshFactory = function(e, t) {
|
|
throw A.a.WarnImport("InstancedMesh")
|
|
}, t._PhysicsImpostorParser = function(e, t, i) {
|
|
throw A.a.WarnImport("PhysicsImpostor")
|
|
}, t.prototype.createInstance = function(e) {
|
|
return t._instancedMeshFactory(e, this)
|
|
}, t.prototype.synchronizeInstances = function() {
|
|
for (var e = 0; e < this.instances.length; e++) {
|
|
this.instances[e]._syncSubMeshes()
|
|
}
|
|
return this
|
|
}, t.prototype.optimizeIndices = function(e) {
|
|
var t = this,
|
|
i = this.getIndices(),
|
|
n = this.getVerticesData(u.b.PositionKind);
|
|
if (!n || !i) return this;
|
|
for (var r = new Array, s = 0; s < n.length; s += 3) r.push(c.x.FromArray(n, s));
|
|
var a = new Array;
|
|
return o.a.SyncAsyncForLoop(r.length, 40, function(e) {
|
|
for (var t = r.length - 1 - e, i = r[t], n = 0; n < t; ++n) {
|
|
var o = r[n];
|
|
if (i.equals(o)) {
|
|
a[t] = n;
|
|
break
|
|
}
|
|
}
|
|
}, function() {
|
|
for (var n = 0; n < i.length; ++n) i[n] = a[i[n]] || i[n];
|
|
var r = t.subMeshes.slice(0);
|
|
t.setIndices(i), t.subMeshes = r, e && e(t)
|
|
}), this
|
|
}, t.prototype.serialize = function(e) {
|
|
e.name = this.name, e.id = this.id, e.type = this.getClassName(), a.a && a.a.HasTags(this) && (e.tags = a.a.GetTags(this)), e.position = this.position.asArray(), this.rotationQuaternion ? e.rotationQuaternion = this.rotationQuaternion.asArray() : this.rotation && (e.rotation = this.rotation.asArray()), e.scaling = this.scaling.asArray(), this._postMultiplyPivotMatrix ? e.pivotMatrix = this.getPivotMatrix().asArray() : e.localMatrix = this.getPivotMatrix().asArray(), e.isEnabled = this.isEnabled(!1), e.isVisible = this.isVisible, e.infiniteDistance = this.infiniteDistance, e.pickable = this.isPickable, e.receiveShadows = this.receiveShadows, e.billboardMode = this.billboardMode, e.visibility = this.visibility, e.checkCollisions = this.checkCollisions, e.isBlocker = this.isBlocker, this.parent && (e.parentId = this.parent.id), e.isUnIndexed = this.isUnIndexed;
|
|
var t = this._geometry;
|
|
if (t) {
|
|
var i = t.id;
|
|
e.geometryId = i, e.subMeshes = [];
|
|
for (var n = 0; n < this.subMeshes.length; n++) {
|
|
var r = this.subMeshes[n];
|
|
e.subMeshes.push({
|
|
materialIndex: r.materialIndex,
|
|
verticesStart: r.verticesStart,
|
|
verticesCount: r.verticesCount,
|
|
indexStart: r.indexStart,
|
|
indexCount: r.indexCount
|
|
})
|
|
}
|
|
}
|
|
if (this.material ? e.materialId = this.material.id : this.material = null, this.morphTargetManager && (e.morphTargetManagerId = this.morphTargetManager.uniqueId), this.skeleton && (e.skeletonId = this.skeleton.id), this.getScene()._getComponent(x.a.NAME_PHYSICSENGINE)) {
|
|
var o = this.getPhysicsImpostor();
|
|
o && (e.physicsMass = o.getParam("mass"), e.physicsFriction = o.getParam("friction"), e.physicsRestitution = o.getParam("mass"), e.physicsImpostor = o.type)
|
|
}
|
|
this.metadata && (e.metadata = this.metadata), e.instances = [];
|
|
for (var s = 0; s < this.instances.length; s++) {
|
|
var c = this.instances[s];
|
|
if (!c.doNotSerialize) {
|
|
var l = {
|
|
name: c.name,
|
|
id: c.id,
|
|
position: c.position.asArray(),
|
|
scaling: c.scaling.asArray()
|
|
};
|
|
c.parent && (l.parentId = c.parent.id), c.rotationQuaternion ? l.rotationQuaternion = c.rotationQuaternion.asArray() : c.rotation && (l.rotation = c.rotation.asArray()), e.instances.push(l), b.a.AppendSerializedAnimations(c, l), l.ranges = c.serializeAnimationRanges()
|
|
}
|
|
}
|
|
b.a.AppendSerializedAnimations(this, e), e.ranges = this.serializeAnimationRanges(), e.layerMask = this.layerMask, e.alphaIndex = this.alphaIndex, e.hasVertexAlpha = this.hasVertexAlpha, e.overlayAlpha = this.overlayAlpha, e.overlayColor = this.overlayColor.asArray(), e.renderOverlay = this.renderOverlay, e.applyFog = this.applyFog, this.actionManager && (e.actions = this.actionManager.serialize(this.name))
|
|
}, t.prototype._syncGeometryWithMorphTargetManager = function() {
|
|
if (this.geometry) {
|
|
this._markSubMeshesAsAttributesDirty();
|
|
var e = this._internalMeshDataInfo._morphTargetManager;
|
|
if (e && e.vertexCount) {
|
|
if (e.vertexCount !== this.getTotalVertices()) return T.a.Error("Mesh is incompatible with morph targets. Targets and mesh must all have the same vertices count."), void(this.morphTargetManager = null);
|
|
for (var t = 0; t < e.numInfluencers; t++) {
|
|
var i = e.getActiveTarget(t),
|
|
n = i.getPositions();
|
|
if (!n) return void T.a.Error("Invalid morph target. Target must have positions.");
|
|
this.geometry.setVerticesData(u.b.PositionKind + t, n, !1, 3);
|
|
var r = i.getNormals();
|
|
r && this.geometry.setVerticesData(u.b.NormalKind + t, r, !1, 3);
|
|
var o = i.getTangents();
|
|
o && this.geometry.setVerticesData(u.b.TangentKind + t, o, !1, 3)
|
|
}
|
|
} else
|
|
for (t = 0; this.geometry.isVerticesDataPresent(u.b.PositionKind + t);) this.geometry.removeVerticesData(u.b.PositionKind + t), this.geometry.isVerticesDataPresent(u.b.NormalKind + t) && this.geometry.removeVerticesData(u.b.NormalKind + t), this.geometry.isVerticesDataPresent(u.b.TangentKind + t) && this.geometry.removeVerticesData(u.b.TangentKind + t), t++
|
|
}
|
|
}, t.Parse = function(e, i, n) {
|
|
var r;
|
|
if ((r = e.type && "GroundMesh" === e.type ? t._GroundMeshParser(e, i) : new t(e.name, i)).id = e.id, a.a && a.a.AddTagsTo(r, e.tags), r.position = c.x.FromArray(e.position), void 0 !== e.metadata && (r.metadata = e.metadata), e.rotationQuaternion ? r.rotationQuaternion = c.q.FromArray(e.rotationQuaternion) : e.rotation && (r.rotation = c.x.FromArray(e.rotation)), r.scaling = c.x.FromArray(e.scaling), e.localMatrix ? r.setPreTransformMatrix(c.j.FromArray(e.localMatrix)) : e.pivotMatrix && r.setPivotMatrix(c.j.FromArray(e.pivotMatrix)), r.setEnabled(e.isEnabled), r.isVisible = e.isVisible, r.infiniteDistance = e.infiniteDistance, r.showBoundingBox = e.showBoundingBox, r.showSubMeshesBoundingBox = e.showSubMeshesBoundingBox, void 0 !== e.applyFog && (r.applyFog = e.applyFog), void 0 !== e.pickable && (r.isPickable = e.pickable), void 0 !== e.alphaIndex && (r.alphaIndex = e.alphaIndex), r.receiveShadows = e.receiveShadows, r.billboardMode = e.billboardMode, void 0 !== e.visibility && (r.visibility = e.visibility), r.checkCollisions = e.checkCollisions, void 0 !== e.isBlocker && (r.isBlocker = e.isBlocker), r._shouldGenerateFlatShading = e.useFlatShading, e.freezeWorldMatrix && (r._waitingData.freezeWorldMatrix = e.freezeWorldMatrix), e.parentId && (r._waitingParentId = e.parentId), void 0 !== e.actions && (r._waitingData.actions = e.actions), void 0 !== e.overlayAlpha && (r.overlayAlpha = e.overlayAlpha), void 0 !== e.overlayColor && (r.overlayColor = c.e.FromArray(e.overlayColor)), void 0 !== e.renderOverlay && (r.renderOverlay = e.renderOverlay), r.isUnIndexed = !!e.isUnIndexed, r.hasVertexAlpha = e.hasVertexAlpha, e.delayLoadingFile ? (r.delayLoadState = y.a.DELAYLOADSTATE_NOTLOADED, r.delayLoadingFile = n + e.delayLoadingFile, r._boundingInfo = new _.a(c.x.FromArray(e.boundingBoxMinimum), c.x.FromArray(e.boundingBoxMaximum)), e._binaryInfo && (r._binaryInfo = e._binaryInfo), r._delayInfo = [], e.hasUVs && r._delayInfo.push(u.b.UVKind), e.hasUVs2 && r._delayInfo.push(u.b.UV2Kind), e.hasUVs3 && r._delayInfo.push(u.b.UV3Kind), e.hasUVs4 && r._delayInfo.push(u.b.UV4Kind), e.hasUVs5 && r._delayInfo.push(u.b.UV5Kind), e.hasUVs6 && r._delayInfo.push(u.b.UV6Kind), e.hasColors && r._delayInfo.push(u.b.ColorKind), e.hasMatricesIndices && r._delayInfo.push(u.b.MatricesIndicesKind), e.hasMatricesWeights && r._delayInfo.push(u.b.MatricesWeightsKind), r._delayLoadingFunction = d.a._ImportGeometry, v.a.ForceFullSceneLoadingForIncremental && r._checkDelayState()) : d.a._ImportGeometry(e, r), e.materialId ? r.setMaterialByID(e.materialId) : r.material = null, e.morphTargetManagerId > -1 && (r.morphTargetManager = i.getMorphTargetManagerById(e.morphTargetManagerId)), e.skeletonId > -1 && (r.skeleton = i.getLastSkeletonByID(e.skeletonId), e.numBoneInfluencers && (r.numBoneInfluencers = e.numBoneInfluencers)), e.animations) {
|
|
for (var o = 0; o < e.animations.length; o++) {
|
|
var s = e.animations[o];
|
|
(g = E.a.GetClass("BABYLON.Animation")) && r.animations.push(g.Parse(s))
|
|
}
|
|
l.a.ParseAnimationRanges(r, e, i)
|
|
}
|
|
if (e.autoAnimate && i.beginAnimation(r, e.autoAnimateFrom, e.autoAnimateTo, e.autoAnimateLoop, e.autoAnimateSpeed || 1), e.layerMask && !isNaN(e.layerMask) ? r.layerMask = Math.abs(parseInt(e.layerMask)) : r.layerMask = 268435455, e.physicsImpostor && t._PhysicsImpostorParser(i, r, e), e.lodMeshIds && (r._waitingData.lods = {
|
|
ids: e.lodMeshIds,
|
|
distances: e.lodDistances ? e.lodDistances : null,
|
|
coverages: e.lodCoverages ? e.lodCoverages : null
|
|
}), e.instances)
|
|
for (var h = 0; h < e.instances.length; h++) {
|
|
var f = e.instances[h],
|
|
p = r.createInstance(f.name);
|
|
if (f.id && (p.id = f.id), a.a && (f.tags ? a.a.AddTagsTo(p, f.tags) : a.a.AddTagsTo(p, e.tags)), p.position = c.x.FromArray(f.position), void 0 !== f.metadata && (p.metadata = f.metadata), f.parentId && (p._waitingParentId = f.parentId), f.rotationQuaternion ? p.rotationQuaternion = c.q.FromArray(f.rotationQuaternion) : f.rotation && (p.rotation = c.x.FromArray(f.rotation)), p.scaling = c.x.FromArray(f.scaling), null != f.checkCollisions && null != f.checkCollisions && (p.checkCollisions = f.checkCollisions), null != f.pickable && null != f.pickable && (p.isPickable = f.pickable), null != f.showBoundingBox && null != f.showBoundingBox && (p.showBoundingBox = f.showBoundingBox), null != f.showSubMeshesBoundingBox && null != f.showSubMeshesBoundingBox && (p.showSubMeshesBoundingBox = f.showSubMeshesBoundingBox), null != f.alphaIndex && null != f.showSubMeshesBoundingBox && (p.alphaIndex = f.alphaIndex), f.physicsImpostor && t._PhysicsImpostorParser(i, p, f), f.animations) {
|
|
for (o = 0; o < f.animations.length; o++) {
|
|
var g;
|
|
s = f.animations[o], (g = E.a.GetClass("BABYLON.Animation")) && p.animations.push(g.Parse(s))
|
|
}
|
|
l.a.ParseAnimationRanges(p, f, i), f.autoAnimate && i.beginAnimation(p, f.autoAnimateFrom, f.autoAnimateTo, f.autoAnimateLoop, f.autoAnimateSpeed || 1)
|
|
}
|
|
}
|
|
return r
|
|
}, t.CreateRibbon = function(e, t, i, n, r, o, s, a, c) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateDisc = function(e, t, i, n, r, o) {
|
|
throw void 0 === n && (n = null), A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateBox = function(e, t, i, n, r) {
|
|
throw void 0 === i && (i = null), A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateSphere = function(e, t, i, n, r, o) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateHemisphere = function(e, t, i, n) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateCylinder = function(e, t, i, n, r, o, s, a, c) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateTorus = function(e, t, i, n, r, o, s) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateTorusKnot = function(e, t, i, n, r, o, s, a, c, l) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateLines = function(e, t, i, n, r) {
|
|
throw void 0 === i && (i = null), void 0 === n && (n = !1), void 0 === r && (r = null), A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateDashedLines = function(e, t, i, n, r, o, s, a) {
|
|
throw void 0 === o && (o = null), A.a.WarnImport("MeshBuilder")
|
|
}, t.CreatePolygon = function(e, t, i, n, r, o, s) {
|
|
throw void 0 === s && (s = earcut), A.a.WarnImport("MeshBuilder")
|
|
}, t.ExtrudePolygon = function(e, t, i, n, r, o, s, a) {
|
|
throw void 0 === a && (a = earcut), A.a.WarnImport("MeshBuilder")
|
|
}, t.ExtrudeShape = function(e, t, i, n, r, o, s, a, c, l) {
|
|
throw void 0 === s && (s = null), A.a.WarnImport("MeshBuilder")
|
|
}, t.ExtrudeShapeCustom = function(e, t, i, n, r, o, s, a, c, l, u, h) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateLathe = function(e, t, i, n, r, o, s) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreatePlane = function(e, t, i, n, r) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateGround = function(e, t, i, n, r, o) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateTiledGround = function(e, t, i, n, r, o, s, a, c) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateGroundFromHeightMap = function(e, t, i, n, r, o, s, a, c, l, u) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateTube = function(e, t, i, n, r, o, s, a, c, l) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreatePolyhedron = function(e, t, i) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateIcoSphere = function(e, t, i) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.CreateDecal = function(e, t, i, n, r, o) {
|
|
throw A.a.WarnImport("MeshBuilder")
|
|
}, t.prototype.setPositionsForCPUSkinning = function() {
|
|
var e = this._internalMeshDataInfo;
|
|
if (!e._sourcePositions) {
|
|
var t = this.getVerticesData(u.b.PositionKind);
|
|
if (!t) return e._sourcePositions;
|
|
e._sourcePositions = new Float32Array(t), this.isVertexBufferUpdatable(u.b.PositionKind) || this.setVerticesData(u.b.PositionKind, t, !0)
|
|
}
|
|
return e._sourcePositions
|
|
}, t.prototype.setNormalsForCPUSkinning = function() {
|
|
var e = this._internalMeshDataInfo;
|
|
if (!e._sourceNormals) {
|
|
var t = this.getVerticesData(u.b.NormalKind);
|
|
if (!t) return e._sourceNormals;
|
|
e._sourceNormals = new Float32Array(t), this.isVertexBufferUpdatable(u.b.NormalKind) || this.setVerticesData(u.b.NormalKind, t, !0)
|
|
}
|
|
return e._sourceNormals
|
|
}, t.prototype.applySkeleton = function(e) {
|
|
if (!this.geometry) return this;
|
|
if (this.geometry._softwareSkinningFrameId == this.getScene().getFrameId()) return this;
|
|
if (this.geometry._softwareSkinningFrameId = this.getScene().getFrameId(), !this.isVerticesDataPresent(u.b.PositionKind)) return this;
|
|
if (!this.isVerticesDataPresent(u.b.NormalKind)) return this;
|
|
if (!this.isVerticesDataPresent(u.b.MatricesIndicesKind)) return this;
|
|
if (!this.isVerticesDataPresent(u.b.MatricesWeightsKind)) return this;
|
|
var t = this._internalMeshDataInfo;
|
|
if (!t._sourcePositions) {
|
|
var i = this.subMeshes.slice();
|
|
this.setPositionsForCPUSkinning(), this.subMeshes = i
|
|
}
|
|
t._sourceNormals || this.setNormalsForCPUSkinning();
|
|
var n = this.getVerticesData(u.b.PositionKind);
|
|
if (!n) return this;
|
|
n instanceof Float32Array || (n = new Float32Array(n));
|
|
var r = this.getVerticesData(u.b.NormalKind);
|
|
if (!r) return this;
|
|
r instanceof Float32Array || (r = new Float32Array(r));
|
|
var o = this.getVerticesData(u.b.MatricesIndicesKind),
|
|
s = this.getVerticesData(u.b.MatricesWeightsKind);
|
|
if (!s || !o) return this;
|
|
for (var a, l = this.numBoneInfluencers > 4, h = l ? this.getVerticesData(u.b.MatricesIndicesExtraKind) : null, d = l ? this.getVerticesData(u.b.MatricesWeightsExtraKind) : null, f = e.getTransformMatrices(this), p = c.x.Zero(), _ = new c.j, g = new c.j, m = 0, v = 0; v < n.length; v += 3, m += 4) {
|
|
var y;
|
|
for (a = 0; a < 4; a++)(y = s[m + a]) > 0 && (c.j.FromFloat32ArrayToRefScaled(f, Math.floor(16 * o[m + a]), y, g), _.addToSelf(g));
|
|
if (l)
|
|
for (a = 0; a < 4; a++)(y = d[m + a]) > 0 && (c.j.FromFloat32ArrayToRefScaled(f, Math.floor(16 * h[m + a]), y, g), _.addToSelf(g));
|
|
c.x.TransformCoordinatesFromFloatsToRef(t._sourcePositions[v], t._sourcePositions[v + 1], t._sourcePositions[v + 2], _, p), p.toArray(n, v), c.x.TransformNormalFromFloatsToRef(t._sourceNormals[v], t._sourceNormals[v + 1], t._sourceNormals[v + 2], _, p), p.toArray(r, v), _.reset()
|
|
}
|
|
return this.updateVerticesData(u.b.PositionKind, n), this.updateVerticesData(u.b.NormalKind, r), this
|
|
}, t.MinMax = function(e) {
|
|
var t = null,
|
|
i = null;
|
|
return e.forEach(function(e) {
|
|
var n = e.getBoundingInfo().boundingBox;
|
|
t && i ? (t.minimizeInPlace(n.minimumWorld), i.maximizeInPlace(n.maximumWorld)) : (t = n.minimumWorld, i = n.maximumWorld)
|
|
}), t && i ? {
|
|
min: t,
|
|
max: i
|
|
} : {
|
|
min: c.x.Zero(),
|
|
max: c.x.Zero()
|
|
}
|
|
}, t.Center = function(e) {
|
|
var i = e instanceof Array ? t.MinMax(e) : e;
|
|
return c.x.Center(i.min, i.max)
|
|
}, t.MergeMeshes = function(e, i, n, r, o, s) {
|
|
var a;
|
|
if (void 0 === i && (i = !0), !n) {
|
|
var c = 0;
|
|
for (a = 0; a < e.length; a++)
|
|
if (e[a] && (c += e[a].getTotalVertices()) > 65536) return T.a.Warn("Cannot merge meshes because resulting mesh will have more than 65536 vertices. Please use allow32BitsIndices = true to use 32 bits indices"), null
|
|
}
|
|
if (s) {
|
|
var l, u, d = null;
|
|
o = !1
|
|
}
|
|
var f, _ = new Array,
|
|
g = new Array,
|
|
v = null,
|
|
y = new Array,
|
|
b = null;
|
|
for (a = 0; a < e.length; a++)
|
|
if (e[a]) {
|
|
var E = e[a];
|
|
if (E.isAnInstance) return T.a.Warn("Cannot merge instance meshes."), null;
|
|
var A = E.computeWorldMatrix(!0);
|
|
if ((f = h.a.ExtractFromMesh(E, !0, !0)).transform(A), v ? v.merge(f, n) : (v = f, b = E), o && y.push(E.getTotalIndices()), s)
|
|
if (E.material) {
|
|
var x = E.material;
|
|
if (x instanceof m.a) {
|
|
for (u = 0; u < x.subMaterials.length; u++) _.indexOf(x.subMaterials[u]) < 0 && _.push(x.subMaterials[u]);
|
|
for (l = 0; l < E.subMeshes.length; l++) g.push(_.indexOf(x.subMaterials[E.subMeshes[l].materialIndex])), y.push(E.subMeshes[l].indexCount)
|
|
} else
|
|
for (_.indexOf(x) < 0 && _.push(x), l = 0; l < E.subMeshes.length; l++) g.push(_.indexOf(x)), y.push(E.subMeshes[l].indexCount)
|
|
} else
|
|
for (l = 0; l < E.subMeshes.length; l++) g.push(0), y.push(E.subMeshes[l].indexCount)
|
|
} if (b = b, r || (r = new t(b.name + "_merged", b.getScene())), v.applyToMesh(r), r.checkCollisions = b.checkCollisions, i)
|
|
for (a = 0; a < e.length; a++) e[a] && e[a].dispose();
|
|
if (o || s) {
|
|
r.releaseSubMeshes(), a = 0;
|
|
for (var R = 0; a < y.length;) p.b.CreateFromIndices(0, R, y[a], r), R += y[a], a++
|
|
}
|
|
if (s) {
|
|
for ((d = new m.a(b.name + "_merged", b.getScene())).subMaterials = _, l = 0; l < r.subMeshes.length; l++) r.subMeshes[l].materialIndex = g[l];
|
|
r.material = d
|
|
} else r.material = b.material;
|
|
return r
|
|
}, t.prototype.addInstance = function(e) {
|
|
e._indexInSourceMeshInstanceArray = this.instances.length, this.instances.push(e)
|
|
}, t.prototype.removeInstance = function(e) {
|
|
var t = e._indexInSourceMeshInstanceArray;
|
|
if (-1 != t) {
|
|
if (t !== this.instances.length - 1) {
|
|
var i = this.instances[this.instances.length - 1];
|
|
this.instances[t] = i, i._indexInSourceMeshInstanceArray = t
|
|
}
|
|
e._indexInSourceMeshInstanceArray = -1, this.instances.pop()
|
|
}
|
|
}, t.FRONTSIDE = h.a.FRONTSIDE, t.BACKSIDE = h.a.BACKSIDE, t.DOUBLESIDE = h.a.DOUBLESIDE, t.DEFAULTSIDE = h.a.DEFAULTSIDE, t.NO_CAP = 0, t.CAP_START = 1, t.CAP_END = 2, t.CAP_ALL = 3, t._GroundMeshParser = function(e, t) {
|
|
throw A.a.WarnImport("GroundMesh")
|
|
}, t
|
|
}(f.a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return e.WithinEpsilon = function(e, t, i) {
|
|
void 0 === i && (i = 1.401298e-45);
|
|
var n = e - t;
|
|
return -i <= n && n <= i
|
|
}, e.ToHex = function(e) {
|
|
var t = e.toString(16);
|
|
return e <= 15 ? ("0" + t).toUpperCase() : t.toUpperCase()
|
|
}, e.Sign = function(e) {
|
|
return 0 === (e = +e) || isNaN(e) ? e : e > 0 ? 1 : -1
|
|
}, e.Clamp = function(e, t, i) {
|
|
return void 0 === t && (t = 0), void 0 === i && (i = 1), Math.min(i, Math.max(t, e))
|
|
}, e.Log2 = function(e) {
|
|
return Math.log(e) * Math.LOG2E
|
|
}, e.Repeat = function(e, t) {
|
|
return e - Math.floor(e / t) * t
|
|
}, e.Normalize = function(e, t, i) {
|
|
return (e - t) / (i - t)
|
|
}, e.Denormalize = function(e, t, i) {
|
|
return e * (i - t) + t
|
|
}, e.DeltaAngle = function(t, i) {
|
|
var n = e.Repeat(i - t, 360);
|
|
return n > 180 && (n -= 360), n
|
|
}, e.PingPong = function(t, i) {
|
|
var n = e.Repeat(t, 2 * i);
|
|
return i - Math.abs(n - i)
|
|
}, e.SmoothStep = function(t, i, n) {
|
|
var r = e.Clamp(n);
|
|
return i * (r = -2 * r * r * r + 3 * r * r) + t * (1 - r)
|
|
}, e.MoveTowards = function(t, i, n) {
|
|
return Math.abs(i - t) <= n ? i : t + e.Sign(i - t) * n
|
|
}, e.MoveTowardsAngle = function(t, i, n) {
|
|
var r = e.DeltaAngle(t, i),
|
|
o = 0;
|
|
return -n < r && r < n ? o = i : (i = t + r, o = e.MoveTowards(t, i, n)), o
|
|
}, e.Lerp = function(e, t, i) {
|
|
return e + (t - e) * i
|
|
}, e.LerpAngle = function(t, i, n) {
|
|
var r = e.Repeat(i - t, 360);
|
|
return r > 180 && (r -= 360), t + r * e.Clamp(n)
|
|
}, e.InverseLerp = function(t, i, n) {
|
|
return t != i ? e.Clamp((n - t) / (i - t)) : 0
|
|
}, e.Hermite = function(e, t, i, n, r) {
|
|
var o = r * r,
|
|
s = r * o;
|
|
return e * (2 * s - 3 * o + 1) + i * (-2 * s + 3 * o) + t * (s - 2 * o + r) + n * (s - o)
|
|
}, e.RandomRange = function(e, t) {
|
|
return e === t ? e : Math.random() * (t - e) + e
|
|
}, e.RangeToPercent = function(e, t, i) {
|
|
return (e - t) / (i - t)
|
|
}, e.PercentToRange = function(e, t, i) {
|
|
return (i - t) * e + t
|
|
}, e.NormalizeRadians = function(t) {
|
|
return t -= e.TwoPi * Math.floor((t + Math.PI) / e.TwoPi)
|
|
}, e.TwoPi = 2 * Math.PI, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return s
|
|
});
|
|
var n = i(0),
|
|
r = i(4),
|
|
o = i(19),
|
|
s = function() {
|
|
function e() {}
|
|
return e.prototype.set = function(e, t) {
|
|
switch (t) {
|
|
case r.b.PositionKind:
|
|
this.positions = e;
|
|
break;
|
|
case r.b.NormalKind:
|
|
this.normals = e;
|
|
break;
|
|
case r.b.TangentKind:
|
|
this.tangents = e;
|
|
break;
|
|
case r.b.UVKind:
|
|
this.uvs = e;
|
|
break;
|
|
case r.b.UV2Kind:
|
|
this.uvs2 = e;
|
|
break;
|
|
case r.b.UV3Kind:
|
|
this.uvs3 = e;
|
|
break;
|
|
case r.b.UV4Kind:
|
|
this.uvs4 = e;
|
|
break;
|
|
case r.b.UV5Kind:
|
|
this.uvs5 = e;
|
|
break;
|
|
case r.b.UV6Kind:
|
|
this.uvs6 = e;
|
|
break;
|
|
case r.b.ColorKind:
|
|
this.colors = e;
|
|
break;
|
|
case r.b.MatricesIndicesKind:
|
|
this.matricesIndices = e;
|
|
break;
|
|
case r.b.MatricesWeightsKind:
|
|
this.matricesWeights = e;
|
|
break;
|
|
case r.b.MatricesIndicesExtraKind:
|
|
this.matricesIndicesExtra = e;
|
|
break;
|
|
case r.b.MatricesWeightsExtraKind:
|
|
this.matricesWeightsExtra = e
|
|
}
|
|
}, e.prototype.applyToMesh = function(e, t) {
|
|
return this._applyTo(e, t), this
|
|
}, e.prototype.applyToGeometry = function(e, t) {
|
|
return this._applyTo(e, t), this
|
|
}, e.prototype.updateMesh = function(e) {
|
|
return this._update(e), this
|
|
}, e.prototype.updateGeometry = function(e) {
|
|
return this._update(e), this
|
|
}, e.prototype._applyTo = function(e, t) {
|
|
return void 0 === t && (t = !1), this.positions && e.setVerticesData(r.b.PositionKind, this.positions, t), this.normals && e.setVerticesData(r.b.NormalKind, this.normals, t), this.tangents && e.setVerticesData(r.b.TangentKind, this.tangents, t), this.uvs && e.setVerticesData(r.b.UVKind, this.uvs, t), this.uvs2 && e.setVerticesData(r.b.UV2Kind, this.uvs2, t), this.uvs3 && e.setVerticesData(r.b.UV3Kind, this.uvs3, t), this.uvs4 && e.setVerticesData(r.b.UV4Kind, this.uvs4, t), this.uvs5 && e.setVerticesData(r.b.UV5Kind, this.uvs5, t), this.uvs6 && e.setVerticesData(r.b.UV6Kind, this.uvs6, t), this.colors && e.setVerticesData(r.b.ColorKind, this.colors, t), this.matricesIndices && e.setVerticesData(r.b.MatricesIndicesKind, this.matricesIndices, t), this.matricesWeights && e.setVerticesData(r.b.MatricesWeightsKind, this.matricesWeights, t), this.matricesIndicesExtra && e.setVerticesData(r.b.MatricesIndicesExtraKind, this.matricesIndicesExtra, t), this.matricesWeightsExtra && e.setVerticesData(r.b.MatricesWeightsExtraKind, this.matricesWeightsExtra, t), this.indices ? e.setIndices(this.indices, null, t) : e.setIndices([], null), this
|
|
}, e.prototype._update = function(e, t, i) {
|
|
return this.positions && e.updateVerticesData(r.b.PositionKind, this.positions, t, i), this.normals && e.updateVerticesData(r.b.NormalKind, this.normals, t, i), this.tangents && e.updateVerticesData(r.b.TangentKind, this.tangents, t, i), this.uvs && e.updateVerticesData(r.b.UVKind, this.uvs, t, i), this.uvs2 && e.updateVerticesData(r.b.UV2Kind, this.uvs2, t, i), this.uvs3 && e.updateVerticesData(r.b.UV3Kind, this.uvs3, t, i), this.uvs4 && e.updateVerticesData(r.b.UV4Kind, this.uvs4, t, i), this.uvs5 && e.updateVerticesData(r.b.UV5Kind, this.uvs5, t, i), this.uvs6 && e.updateVerticesData(r.b.UV6Kind, this.uvs6, t, i), this.colors && e.updateVerticesData(r.b.ColorKind, this.colors, t, i), this.matricesIndices && e.updateVerticesData(r.b.MatricesIndicesKind, this.matricesIndices, t, i), this.matricesWeights && e.updateVerticesData(r.b.MatricesWeightsKind, this.matricesWeights, t, i), this.matricesIndicesExtra && e.updateVerticesData(r.b.MatricesIndicesExtraKind, this.matricesIndicesExtra, t, i), this.matricesWeightsExtra && e.updateVerticesData(r.b.MatricesWeightsExtraKind, this.matricesWeightsExtra, t, i), this.indices && e.setIndices(this.indices, null), this
|
|
}, e.prototype.transform = function(e) {
|
|
var t, i = e.m[0] * e.m[5] * e.m[10] < 0,
|
|
r = n.x.Zero();
|
|
if (this.positions) {
|
|
var o = n.x.Zero();
|
|
for (t = 0; t < this.positions.length; t += 3) n.x.FromArrayToRef(this.positions, t, o), n.x.TransformCoordinatesToRef(o, e, r), this.positions[t] = r.x, this.positions[t + 1] = r.y, this.positions[t + 2] = r.z
|
|
}
|
|
if (this.normals) {
|
|
var s = n.x.Zero();
|
|
for (t = 0; t < this.normals.length; t += 3) n.x.FromArrayToRef(this.normals, t, s), n.x.TransformNormalToRef(s, e, r), this.normals[t] = r.x, this.normals[t + 1] = r.y, this.normals[t + 2] = r.z
|
|
}
|
|
if (this.tangents) {
|
|
var a = n.y.Zero(),
|
|
c = n.y.Zero();
|
|
for (t = 0; t < this.tangents.length; t += 4) n.y.FromArrayToRef(this.tangents, t, a), n.y.TransformNormalToRef(a, e, c), this.tangents[t] = c.x, this.tangents[t + 1] = c.y, this.tangents[t + 2] = c.z, this.tangents[t + 3] = c.w
|
|
}
|
|
if (i && this.indices)
|
|
for (t = 0; t < this.indices.length; t += 3) {
|
|
var l = this.indices[t + 1];
|
|
this.indices[t + 1] = this.indices[t + 2], this.indices[t + 2] = l
|
|
}
|
|
return this
|
|
}, e.prototype.merge = function(e, t) {
|
|
if (void 0 === t && (t = !1), this._validate(), e._validate(), !this.normals != !e.normals || !this.tangents != !e.tangents || !this.uvs != !e.uvs || !this.uvs2 != !e.uvs2 || !this.uvs3 != !e.uvs3 || !this.uvs4 != !e.uvs4 || !this.uvs5 != !e.uvs5 || !this.uvs6 != !e.uvs6 || !this.colors != !e.colors || !this.matricesIndices != !e.matricesIndices || !this.matricesWeights != !e.matricesWeights || !this.matricesIndicesExtra != !e.matricesIndicesExtra || !this.matricesWeightsExtra != !e.matricesWeightsExtra) throw new Error("Cannot merge vertex data that do not have the same set of attributes");
|
|
if (e.indices) {
|
|
this.indices || (this.indices = []);
|
|
var i = this.positions ? this.positions.length / 3 : 0;
|
|
if (void 0 !== this.indices.BYTES_PER_ELEMENT) {
|
|
var n = this.indices.length + e.indices.length,
|
|
r = t || this.indices instanceof Uint32Array ? new Uint32Array(n) : new Uint16Array(n);
|
|
r.set(this.indices);
|
|
for (var o = this.indices.length, s = 0; s < e.indices.length; s++) r[o + s] = e.indices[s] + i;
|
|
this.indices = r
|
|
} else
|
|
for (s = 0; s < e.indices.length; s++) this.indices.push(e.indices[s] + i)
|
|
}
|
|
return this.positions = this._mergeElement(this.positions, e.positions), this.normals = this._mergeElement(this.normals, e.normals), this.tangents = this._mergeElement(this.tangents, e.tangents), this.uvs = this._mergeElement(this.uvs, e.uvs), this.uvs2 = this._mergeElement(this.uvs2, e.uvs2), this.uvs3 = this._mergeElement(this.uvs3, e.uvs3), this.uvs4 = this._mergeElement(this.uvs4, e.uvs4), this.uvs5 = this._mergeElement(this.uvs5, e.uvs5), this.uvs6 = this._mergeElement(this.uvs6, e.uvs6), this.colors = this._mergeElement(this.colors, e.colors), this.matricesIndices = this._mergeElement(this.matricesIndices, e.matricesIndices), this.matricesWeights = this._mergeElement(this.matricesWeights, e.matricesWeights), this.matricesIndicesExtra = this._mergeElement(this.matricesIndicesExtra, e.matricesIndicesExtra), this.matricesWeightsExtra = this._mergeElement(this.matricesWeightsExtra, e.matricesWeightsExtra), this
|
|
}, e.prototype._mergeElement = function(e, t) {
|
|
if (!e) return t;
|
|
if (!t) return e;
|
|
var i = t.length + e.length,
|
|
n = e instanceof Float32Array,
|
|
r = t instanceof Float32Array;
|
|
if (n) {
|
|
var o = new Float32Array(i);
|
|
return o.set(e), o.set(t, e.length), o
|
|
}
|
|
if (r) {
|
|
var s = e.slice(0),
|
|
a = 0;
|
|
for (i = t.length; a < i; a++) s.push(t[a]);
|
|
return s
|
|
}
|
|
return e.concat(t)
|
|
}, e.prototype._validate = function() {
|
|
if (!this.positions) throw new Error("Positions are required");
|
|
var e = function(e, t) {
|
|
var i = r.b.DeduceStride(e);
|
|
if (t.length % i != 0) throw new Error("The " + e + "s array count must be a multiple of " + i);
|
|
return t.length / i
|
|
},
|
|
t = e(r.b.PositionKind, this.positions),
|
|
i = function(i, n) {
|
|
var r = e(i, n);
|
|
if (r !== t) throw new Error("The " + i + "s element count (" + r + ") does not match the positions count (" + t + ")")
|
|
};
|
|
this.normals && i(r.b.NormalKind, this.normals), this.tangents && i(r.b.TangentKind, this.tangents), this.uvs && i(r.b.UVKind, this.uvs), this.uvs2 && i(r.b.UV2Kind, this.uvs2), this.uvs3 && i(r.b.UV3Kind, this.uvs3), this.uvs4 && i(r.b.UV4Kind, this.uvs4), this.uvs5 && i(r.b.UV5Kind, this.uvs5), this.uvs6 && i(r.b.UV6Kind, this.uvs6), this.colors && i(r.b.ColorKind, this.colors), this.matricesIndices && i(r.b.MatricesIndicesKind, this.matricesIndices), this.matricesWeights && i(r.b.MatricesWeightsKind, this.matricesWeights), this.matricesIndicesExtra && i(r.b.MatricesIndicesExtraKind, this.matricesIndicesExtra), this.matricesWeightsExtra && i(r.b.MatricesWeightsExtraKind, this.matricesWeightsExtra)
|
|
}, e.prototype.serialize = function() {
|
|
var e = this.serialize();
|
|
return this.positions && (e.positions = this.positions), this.normals && (e.normals = this.normals), this.tangents && (e.tangents = this.tangents), this.uvs && (e.uvs = this.uvs), this.uvs2 && (e.uvs2 = this.uvs2), this.uvs3 && (e.uvs3 = this.uvs3), this.uvs4 && (e.uvs4 = this.uvs4), this.uvs5 && (e.uvs5 = this.uvs5), this.uvs6 && (e.uvs6 = this.uvs6), this.colors && (e.colors = this.colors), this.matricesIndices && (e.matricesIndices = this.matricesIndices, e.matricesIndices._isExpanded = !0), this.matricesWeights && (e.matricesWeights = this.matricesWeights), this.matricesIndicesExtra && (e.matricesIndicesExtra = this.matricesIndicesExtra, e.matricesIndicesExtra._isExpanded = !0), this.matricesWeightsExtra && (e.matricesWeightsExtra = this.matricesWeightsExtra), e.indices = this.indices, e
|
|
}, e.ExtractFromMesh = function(t, i, n) {
|
|
return e._ExtractFrom(t, i, n)
|
|
}, e.ExtractFromGeometry = function(t, i, n) {
|
|
return e._ExtractFrom(t, i, n)
|
|
}, e._ExtractFrom = function(t, i, n) {
|
|
var o = new e;
|
|
return t.isVerticesDataPresent(r.b.PositionKind) && (o.positions = t.getVerticesData(r.b.PositionKind, i, n)), t.isVerticesDataPresent(r.b.NormalKind) && (o.normals = t.getVerticesData(r.b.NormalKind, i, n)), t.isVerticesDataPresent(r.b.TangentKind) && (o.tangents = t.getVerticesData(r.b.TangentKind, i, n)), t.isVerticesDataPresent(r.b.UVKind) && (o.uvs = t.getVerticesData(r.b.UVKind, i, n)), t.isVerticesDataPresent(r.b.UV2Kind) && (o.uvs2 = t.getVerticesData(r.b.UV2Kind, i, n)), t.isVerticesDataPresent(r.b.UV3Kind) && (o.uvs3 = t.getVerticesData(r.b.UV3Kind, i, n)), t.isVerticesDataPresent(r.b.UV4Kind) && (o.uvs4 = t.getVerticesData(r.b.UV4Kind, i, n)), t.isVerticesDataPresent(r.b.UV5Kind) && (o.uvs5 = t.getVerticesData(r.b.UV5Kind, i, n)), t.isVerticesDataPresent(r.b.UV6Kind) && (o.uvs6 = t.getVerticesData(r.b.UV6Kind, i, n)), t.isVerticesDataPresent(r.b.ColorKind) && (o.colors = t.getVerticesData(r.b.ColorKind, i, n)), t.isVerticesDataPresent(r.b.MatricesIndicesKind) && (o.matricesIndices = t.getVerticesData(r.b.MatricesIndicesKind, i, n)), t.isVerticesDataPresent(r.b.MatricesWeightsKind) && (o.matricesWeights = t.getVerticesData(r.b.MatricesWeightsKind, i, n)), t.isVerticesDataPresent(r.b.MatricesIndicesExtraKind) && (o.matricesIndicesExtra = t.getVerticesData(r.b.MatricesIndicesExtraKind, i, n)), t.isVerticesDataPresent(r.b.MatricesWeightsExtraKind) && (o.matricesWeightsExtra = t.getVerticesData(r.b.MatricesWeightsExtraKind, i, n)), o.indices = t.getIndices(i, n), o
|
|
}, e.CreateRibbon = function(e) {
|
|
throw o.a.WarnImport("ribbonBuilder")
|
|
}, e.CreateBox = function(e) {
|
|
throw o.a.WarnImport("boxBuilder")
|
|
}, e.CreateSphere = function(e) {
|
|
throw o.a.WarnImport("sphereBuilder")
|
|
}, e.CreateCylinder = function(e) {
|
|
throw o.a.WarnImport("cylinderBuilder")
|
|
}, e.CreateTorus = function(e) {
|
|
throw o.a.WarnImport("torusBuilder")
|
|
}, e.CreateLineSystem = function(e) {
|
|
throw o.a.WarnImport("linesBuilder")
|
|
}, e.CreateDashedLines = function(e) {
|
|
throw o.a.WarnImport("linesBuilder")
|
|
}, e.CreateGround = function(e) {
|
|
throw o.a.WarnImport("groundBuilder")
|
|
}, e.CreateTiledGround = function(e) {
|
|
throw o.a.WarnImport("groundBuilder")
|
|
}, e.CreateGroundFromHeightMap = function(e) {
|
|
throw o.a.WarnImport("groundBuilder")
|
|
}, e.CreatePlane = function(e) {
|
|
throw o.a.WarnImport("planeBuilder")
|
|
}, e.CreateDisc = function(e) {
|
|
throw o.a.WarnImport("discBuilder")
|
|
}, e.CreatePolygon = function(e, t, i, n, r, s) {
|
|
throw o.a.WarnImport("polygonBuilder")
|
|
}, e.CreateIcoSphere = function(e) {
|
|
throw o.a.WarnImport("icoSphereBuilder")
|
|
}, e.CreatePolyhedron = function(e) {
|
|
throw o.a.WarnImport("polyhedronBuilder")
|
|
}, e.CreateTorusKnot = function(e) {
|
|
throw o.a.WarnImport("torusKnotBuilder")
|
|
}, e.ComputeNormals = function(e, t, i, r) {
|
|
var o = 0,
|
|
s = 0,
|
|
a = 0,
|
|
c = 0,
|
|
l = 0,
|
|
u = 0,
|
|
h = 0,
|
|
d = 0,
|
|
f = 0,
|
|
p = 0,
|
|
_ = 0,
|
|
g = 0,
|
|
m = 0,
|
|
v = 0,
|
|
y = 0,
|
|
b = 0,
|
|
T = 0,
|
|
E = 0,
|
|
A = 0,
|
|
x = 0,
|
|
R = !1,
|
|
P = !1,
|
|
S = !1,
|
|
C = !1,
|
|
M = 1,
|
|
O = 0,
|
|
I = null;
|
|
if (r && (R = !!r.facetNormals, P = !!r.facetPositions, S = !!r.facetPartitioning, M = !0 === r.useRightHandedSystem ? -1 : 1, O = r.ratio || 0, C = !!r.depthSort, I = r.distanceTo, C)) {
|
|
void 0 === I && (I = n.x.Zero());
|
|
var D = r.depthSortedFacets
|
|
}
|
|
var L = 0,
|
|
w = 0,
|
|
F = 0,
|
|
N = 0;
|
|
if (S && r && r.bbSize) {
|
|
var B = 0,
|
|
U = 0,
|
|
V = 0,
|
|
G = 0,
|
|
k = 0,
|
|
z = 0,
|
|
j = 0,
|
|
H = 0,
|
|
W = 0,
|
|
X = 0,
|
|
Y = 0,
|
|
K = 0,
|
|
Q = 0,
|
|
q = 0,
|
|
Z = 0,
|
|
J = 0,
|
|
$ = r.bbSize.x > r.bbSize.y ? r.bbSize.x : r.bbSize.y;
|
|
$ = $ > r.bbSize.z ? $ : r.bbSize.z, L = r.subDiv.X * O / r.bbSize.x, w = r.subDiv.Y * O / r.bbSize.y, F = r.subDiv.Z * O / r.bbSize.z, N = r.subDiv.max * r.subDiv.max, r.facetPartitioning.length = 0
|
|
}
|
|
for (o = 0; o < e.length; o++) i[o] = 0;
|
|
var ee = t.length / 3 | 0;
|
|
for (o = 0; o < ee; o++) {
|
|
if (m = (g = 3 * t[3 * o]) + 1, v = g + 2, b = (y = 3 * t[3 * o + 1]) + 1, T = y + 2, A = (E = 3 * t[3 * o + 2]) + 1, x = E + 2, s = e[g] - e[y], a = e[m] - e[b], c = e[v] - e[T], l = e[E] - e[y], u = e[A] - e[b], d = M * (a * (h = e[x] - e[T]) - c * u), f = M * (c * l - s * h), p = M * (s * u - a * l), d /= _ = 0 === (_ = Math.sqrt(d * d + f * f + p * p)) ? 1 : _, f /= _, p /= _, R && r && (r.facetNormals[o].x = d, r.facetNormals[o].y = f, r.facetNormals[o].z = p), P && r && (r.facetPositions[o].x = (e[g] + e[y] + e[E]) / 3, r.facetPositions[o].y = (e[m] + e[b] + e[A]) / 3, r.facetPositions[o].z = (e[v] + e[T] + e[x]) / 3), S && r && (B = Math.floor((r.facetPositions[o].x - r.bInfo.minimum.x * O) * L), U = Math.floor((r.facetPositions[o].y - r.bInfo.minimum.y * O) * w), V = Math.floor((r.facetPositions[o].z - r.bInfo.minimum.z * O) * F), G = Math.floor((e[g] - r.bInfo.minimum.x * O) * L), k = Math.floor((e[m] - r.bInfo.minimum.y * O) * w), z = Math.floor((e[v] - r.bInfo.minimum.z * O) * F), j = Math.floor((e[y] - r.bInfo.minimum.x * O) * L), H = Math.floor((e[b] - r.bInfo.minimum.y * O) * w), W = Math.floor((e[T] - r.bInfo.minimum.z * O) * F), X = Math.floor((e[E] - r.bInfo.minimum.x * O) * L), Y = Math.floor((e[A] - r.bInfo.minimum.y * O) * w), K = Math.floor((e[x] - r.bInfo.minimum.z * O) * F), q = G + r.subDiv.max * k + N * z, Z = j + r.subDiv.max * H + N * W, J = X + r.subDiv.max * Y + N * K, Q = B + r.subDiv.max * U + N * V, r.facetPartitioning[Q] = r.facetPartitioning[Q] ? r.facetPartitioning[Q] : new Array, r.facetPartitioning[q] = r.facetPartitioning[q] ? r.facetPartitioning[q] : new Array, r.facetPartitioning[Z] = r.facetPartitioning[Z] ? r.facetPartitioning[Z] : new Array, r.facetPartitioning[J] = r.facetPartitioning[J] ? r.facetPartitioning[J] : new Array, r.facetPartitioning[q].push(o), Z != q && r.facetPartitioning[Z].push(o), J != Z && J != q && r.facetPartitioning[J].push(o), Q != q && Q != Z && Q != J && r.facetPartitioning[Q].push(o)), C && r && r.facetPositions) {
|
|
var te = D[o];
|
|
te.ind = 3 * o, te.sqDistance = n.x.DistanceSquared(r.facetPositions[o], I)
|
|
}
|
|
i[g] += d, i[m] += f, i[v] += p, i[y] += d, i[b] += f, i[T] += p, i[E] += d, i[A] += f, i[x] += p
|
|
}
|
|
for (o = 0; o < i.length / 3; o++) d = i[3 * o], f = i[3 * o + 1], p = i[3 * o + 2], d /= _ = 0 === (_ = Math.sqrt(d * d + f * f + p * p)) ? 1 : _, f /= _, p /= _, i[3 * o] = d, i[3 * o + 1] = f, i[3 * o + 2] = p
|
|
}, e._ComputeSides = function(t, i, r, o, s, a, c) {
|
|
var l, u, h = r.length,
|
|
d = o.length;
|
|
switch (t = t || e.DEFAULTSIDE) {
|
|
case e.FRONTSIDE:
|
|
break;
|
|
case e.BACKSIDE:
|
|
var f;
|
|
for (l = 0; l < h; l += 3) f = r[l], r[l] = r[l + 2], r[l + 2] = f;
|
|
for (u = 0; u < d; u++) o[u] = -o[u];
|
|
break;
|
|
case e.DOUBLESIDE:
|
|
for (var p = i.length, _ = p / 3, g = 0; g < p; g++) i[p + g] = i[g];
|
|
for (l = 0; l < h; l += 3) r[l + h] = r[l + 2] + _, r[l + 1 + h] = r[l + 1] + _, r[l + 2 + h] = r[l] + _;
|
|
for (u = 0; u < d; u++) o[d + u] = -o[u];
|
|
var m = s.length,
|
|
v = 0;
|
|
for (v = 0; v < m; v++) s[v + m] = s[v];
|
|
for (a = a || new n.y(0, 0, 1, 1), c = c || new n.y(0, 0, 1, 1), v = 0, l = 0; l < m / 2; l++) s[v] = a.x + (a.z - a.x) * s[v], s[v + 1] = a.y + (a.w - a.y) * s[v + 1], s[v + m] = c.x + (c.z - c.x) * s[v + m], s[v + m + 1] = c.y + (c.w - c.y) * s[v + m + 1], v += 2
|
|
}
|
|
}, e.ImportVertexData = function(t, i) {
|
|
var o = new e,
|
|
s = t.positions;
|
|
s && o.set(s, r.b.PositionKind);
|
|
var a = t.normals;
|
|
a && o.set(a, r.b.NormalKind);
|
|
var c = t.tangents;
|
|
c && o.set(c, r.b.TangentKind);
|
|
var l = t.uvs;
|
|
l && o.set(l, r.b.UVKind);
|
|
var u = t.uv2s;
|
|
u && o.set(u, r.b.UV2Kind);
|
|
var h = t.uv3s;
|
|
h && o.set(h, r.b.UV3Kind);
|
|
var d = t.uv4s;
|
|
d && o.set(d, r.b.UV4Kind);
|
|
var f = t.uv5s;
|
|
f && o.set(f, r.b.UV5Kind);
|
|
var p = t.uv6s;
|
|
p && o.set(p, r.b.UV6Kind);
|
|
var _ = t.colors;
|
|
_ && o.set(n.f.CheckColors4(_, s.length / 3), r.b.ColorKind);
|
|
var g = t.matricesIndices;
|
|
g && o.set(g, r.b.MatricesIndicesKind);
|
|
var m = t.matricesWeights;
|
|
m && o.set(m, r.b.MatricesWeightsKind);
|
|
var v = t.indices;
|
|
v && (o.indices = v), i.setAllVerticesData(o, t.updatable)
|
|
}, e.FRONTSIDE = 0, e.BACKSIDE = 1, e.DOUBLESIDE = 2, e.DEFAULTSIDE = 0, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
}), i.d(t, "b", function() {
|
|
return o
|
|
});
|
|
var n = i(1),
|
|
r = function() {
|
|
function e() {}
|
|
return e.NAME_EFFECTLAYER = "EffectLayer", e.NAME_LAYER = "Layer", e.NAME_LENSFLARESYSTEM = "LensFlareSystem", e.NAME_BOUNDINGBOXRENDERER = "BoundingBoxRenderer", e.NAME_PARTICLESYSTEM = "ParticleSystem", e.NAME_GAMEPAD = "Gamepad", e.NAME_SIMPLIFICATIONQUEUE = "SimplificationQueue", e.NAME_GEOMETRYBUFFERRENDERER = "GeometryBufferRenderer", e.NAME_DEPTHRENDERER = "DepthRenderer", e.NAME_POSTPROCESSRENDERPIPELINEMANAGER = "PostProcessRenderPipelineManager", e.NAME_SPRITE = "Sprite", e.NAME_OUTLINERENDERER = "Outline", e.NAME_PROCEDURALTEXTURE = "ProceduralTexture", e.NAME_SHADOWGENERATOR = "ShadowGenerator", e.NAME_OCTREE = "Octree", e.NAME_PHYSICSENGINE = "PhysicsEngine", e.NAME_AUDIO = "Audio", e.STEP_ISREADYFORMESH_EFFECTLAYER = 0, e.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER = 0, e.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER = 0, e.STEP_ACTIVEMESH_BOUNDINGBOXRENDERER = 0, e.STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER = 1, e.STEP_BEFORECAMERADRAW_EFFECTLAYER = 0, e.STEP_BEFORECAMERADRAW_LAYER = 1, e.STEP_BEFORERENDERTARGETDRAW_LAYER = 0, e.STEP_BEFORERENDERINGMESH_OUTLINE = 0, e.STEP_AFTERRENDERINGMESH_OUTLINE = 0, e.STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW = 0, e.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER = 1, e.STEP_BEFORECAMERAUPDATE_SIMPLIFICATIONQUEUE = 0, e.STEP_BEFORECAMERAUPDATE_GAMEPAD = 1, e.STEP_BEFORECLEAR_PROCEDURALTEXTURE = 0, e.STEP_AFTERRENDERTARGETDRAW_LAYER = 0, e.STEP_AFTERCAMERADRAW_EFFECTLAYER = 0, e.STEP_AFTERCAMERADRAW_LENSFLARESYSTEM = 1, e.STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW = 2, e.STEP_AFTERCAMERADRAW_LAYER = 3, e.STEP_AFTERRENDER_AUDIO = 0, e.STEP_GATHERRENDERTARGETS_SHADOWGENERATOR = 0, e.STEP_GATHERRENDERTARGETS_GEOMETRYBUFFERRENDERER = 1, e.STEP_GATHERRENDERTARGETS_DEPTHRENDERER = 2, e.STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER = 3, e.STEP_GATHERACTIVECAMERARENDERTARGETS_DEPTHRENDERER = 0, e.STEP_POINTERMOVE_SPRITE = 0, e.STEP_POINTERDOWN_SPRITE = 0, e.STEP_POINTERUP_SPRITE = 0, e
|
|
}(),
|
|
o = function(e) {
|
|
function t(t) {
|
|
return e.apply(this, t) || this
|
|
}
|
|
return n.d(t, e), t.Create = function() {
|
|
return Object.create(t.prototype)
|
|
}, t.prototype.registerStep = function(e, t, i) {
|
|
var n = 0;
|
|
for (Number.MAX_VALUE; n < this.length; n++) {
|
|
if (e < this[n].index) break
|
|
}
|
|
this.splice(n, 0, {
|
|
index: e,
|
|
component: t,
|
|
action: i.bind(t)
|
|
})
|
|
}, t.prototype.clear = function() {
|
|
this.length = 0
|
|
}, t
|
|
}(Array)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return l
|
|
});
|
|
var n = i(6),
|
|
r = i(16),
|
|
o = i(0),
|
|
s = i(23),
|
|
a = i(4),
|
|
c = i(38),
|
|
l = function() {
|
|
function e() {}
|
|
return e.BindEyePosition = function(e, t) {
|
|
if (t._forcedViewPosition) e.setVector3("vEyePosition", t._forcedViewPosition);
|
|
else {
|
|
var i = t.activeCamera.globalPosition;
|
|
i || (i = t.activeCamera.devicePosition), e.setVector3("vEyePosition", t._mirroredCameraPosition ? t._mirroredCameraPosition : i)
|
|
}
|
|
}, e.PrepareDefinesForMergedUV = function(e, t, i) {
|
|
t._needUVs = !0, t[i] = !0, e.getTextureMatrix().isIdentityAs3x2() ? (t[i + "DIRECTUV"] = e.coordinatesIndex + 1, 0 === e.coordinatesIndex ? t.MAINUV1 = !0 : t.MAINUV2 = !0) : t[i + "DIRECTUV"] = 0
|
|
}, e.BindTextureMatrix = function(e, t, i) {
|
|
var n = e.getTextureMatrix();
|
|
n.isIdentityAs3x2() || t.updateMatrix(i + "Matrix", n)
|
|
}, e.PrepareDefinesForMisc = function(e, t, i, n, o, s, a) {
|
|
a._areMiscDirty && (a.LOGARITHMICDEPTH = i, a.POINTSIZE = n, a.FOG = t.fogEnabled && e.applyFog && t.fogMode !== r.a.FOGMODE_NONE && o, a.NONUNIFORMSCALING = e.nonUniformScaling, a.ALPHATEST = s)
|
|
}, e.PrepareDefinesForFrameBoundValues = function(e, t, i, n, r) {
|
|
void 0 === r && (r = null);
|
|
var o, s, a, c, l = !1;
|
|
o = null == r ? void 0 !== e.clipPlane && null !== e.clipPlane : r, s = null == r ? void 0 !== e.clipPlane2 && null !== e.clipPlane2 : r, a = null == r ? void 0 !== e.clipPlane3 && null !== e.clipPlane3 : r, c = null == r ? void 0 !== e.clipPlane4 && null !== e.clipPlane4 : r, i.CLIPPLANE !== o && (i.CLIPPLANE = o, l = !0), i.CLIPPLANE2 !== s && (i.CLIPPLANE2 = s, l = !0), i.CLIPPLANE3 !== a && (i.CLIPPLANE3 = a, l = !0), i.CLIPPLANE4 !== c && (i.CLIPPLANE4 = c, l = !0), i.DEPTHPREPASS !== !t.getColorWrite() && (i.DEPTHPREPASS = !i.DEPTHPREPASS, l = !0), i.INSTANCES !== n && (i.INSTANCES = n, l = !0), l && i.markAsUnprocessed()
|
|
}, e.PrepareDefinesForAttributes = function(e, t, i, n, r, o) {
|
|
if (void 0 === r && (r = !1), void 0 === o && (o = !0), !t._areAttributesDirty && t._needNormals === t._normals && t._needUVs === t._uvs) return !1;
|
|
if (t._normals = t._needNormals, t._uvs = t._needUVs, t.NORMAL = t._needNormals && e.isVerticesDataPresent(a.b.NormalKind), t._needNormals && e.isVerticesDataPresent(a.b.TangentKind) && (t.TANGENT = !0), t._needUVs ? (t.UV1 = e.isVerticesDataPresent(a.b.UVKind), t.UV2 = e.isVerticesDataPresent(a.b.UV2Kind)) : (t.UV1 = !1, t.UV2 = !1), i) {
|
|
var s = e.useVertexColors && e.isVerticesDataPresent(a.b.ColorKind);
|
|
t.VERTEXCOLOR = s, t.VERTEXALPHA = e.hasVertexAlpha && s && o
|
|
}
|
|
if (n)
|
|
if (e.useBones && e.computeBonesUsingShaders && e.skeleton) {
|
|
t.NUM_BONE_INFLUENCERS = e.numBoneInfluencers;
|
|
var c = void 0 !== t.BONETEXTURE;
|
|
e.skeleton.isUsingTextureForMatrices && c ? t.BONETEXTURE = !0 : (t.BonesPerMesh = e.skeleton.bones.length + 1, t.BONETEXTURE = !c && void 0)
|
|
} else t.NUM_BONE_INFLUENCERS = 0, t.BonesPerMesh = 0;
|
|
if (r) {
|
|
var l = e.morphTargetManager;
|
|
l ? (t.MORPHTARGETS_TANGENT = l.supportsTangents && t.TANGENT, t.MORPHTARGETS_NORMAL = l.supportsNormals && t.NORMAL, t.MORPHTARGETS = l.numInfluencers > 0, t.NUM_MORPH_INFLUENCERS = l.numInfluencers) : (t.MORPHTARGETS_TANGENT = !1, t.MORPHTARGETS_NORMAL = !1, t.MORPHTARGETS = !1, t.NUM_MORPH_INFLUENCERS = 0)
|
|
}
|
|
return !0
|
|
}, e.PrepareDefinesForMultiview = function(e, t) {
|
|
if (e.activeCamera) {
|
|
var i = t.MULTIVIEW;
|
|
t.MULTIVIEW = null !== e.activeCamera.outputRenderTarget && e.activeCamera.outputRenderTarget.getViewCount() > 1, t.MULTIVIEW != i && t.markAsUnprocessed()
|
|
}
|
|
}, e.PrepareDefinesForLights = function(e, t, i, n, r, o) {
|
|
if (void 0 === r && (r = 4), void 0 === o && (o = !1), !i._areLightsDirty) return i._needNormals;
|
|
var s = 0,
|
|
a = !1,
|
|
l = !1,
|
|
u = !1,
|
|
h = !1,
|
|
d = !1;
|
|
if (e.lightsEnabled && !o)
|
|
for (var f = 0, p = t.lightSources; f < p.length; f++) {
|
|
var _ = p[f];
|
|
switch (a = !0, void 0 === i["LIGHT" + s] && (l = !0), i["LIGHT" + s] = !0, i["SPOTLIGHT" + s] = !1, i["HEMILIGHT" + s] = !1, i["POINTLIGHT" + s] = !1, i["DIRLIGHT" + s] = !1, _.prepareLightSpecificDefines(i, s), i["LIGHT_FALLOFF_PHYSICAL" + s] = !1, i["LIGHT_FALLOFF_GLTF" + s] = !1, i["LIGHT_FALLOFF_STANDARD" + s] = !1, _.falloffType) {
|
|
case c.a.FALLOFF_GLTF:
|
|
i["LIGHT_FALLOFF_GLTF" + s] = !0;
|
|
break;
|
|
case c.a.FALLOFF_PHYSICAL:
|
|
i["LIGHT_FALLOFF_PHYSICAL" + s] = !0;
|
|
break;
|
|
case c.a.FALLOFF_STANDARD:
|
|
i["LIGHT_FALLOFF_STANDARD" + s] = !0
|
|
}
|
|
if (n && !_.specular.equalsFloats(0, 0, 0) && (d = !0), i["SHADOW" + s] = !1, i["SHADOWPCF" + s] = !1, i["SHADOWPCSS" + s] = !1, i["SHADOWPOISSON" + s] = !1, i["SHADOWESM" + s] = !1, i["SHADOWCUBE" + s] = !1, i["SHADOWLOWQUALITY" + s] = !1, i["SHADOWMEDIUMQUALITY" + s] = !1, t && t.receiveShadows && e.shadowsEnabled && _.shadowEnabled) {
|
|
var g = _.getShadowGenerator();
|
|
if (g) {
|
|
var m = g.getShadowMap();
|
|
m && m.renderList && m.renderList.length > 0 && (h = !0, g.prepareDefines(i, s))
|
|
}
|
|
}
|
|
if (_.lightmapMode != c.a.LIGHTMAP_DEFAULT ? (u = !0, i["LIGHTMAPEXCLUDED" + s] = !0, i["LIGHTMAPNOSPECULAR" + s] = _.lightmapMode == c.a.LIGHTMAP_SHADOWSONLY) : (i["LIGHTMAPEXCLUDED" + s] = !1, i["LIGHTMAPNOSPECULAR" + s] = !1), ++s === r) break
|
|
}
|
|
i.SPECULARTERM = d, i.SHADOWS = h;
|
|
for (var v = s; v < r; v++) void 0 !== i["LIGHT" + v] && (i["LIGHT" + v] = !1, i["HEMILIGHT" + v] = !1, i["POINTLIGHT" + v] = !1, i["DIRLIGHT" + v] = !1, i["SPOTLIGHT" + v] = !1, i["SHADOW" + v] = !1, i["SHADOWPCF" + v] = !1, i["SHADOWPCSS" + v] = !1, i["SHADOWPOISSON" + v] = !1, i["SHADOWESM" + v] = !1, i["SHADOWCUBE" + v] = !1, i["SHADOWLOWQUALITY" + v] = !1, i["SHADOWMEDIUMQUALITY" + v] = !1);
|
|
var y = e.getEngine().getCaps();
|
|
return void 0 === i.SHADOWFLOAT && (l = !0), i.SHADOWFLOAT = h && (y.textureFloatRender && y.textureFloatLinearFiltering || y.textureHalfFloatRender && y.textureHalfFloatLinearFiltering), i.LIGHTMAPEXCLUDED = u, l && i.rebuild(), a
|
|
}, e.PrepareUniformsAndSamplersList = function(e, t, i, n) {
|
|
var r;
|
|
void 0 === n && (n = 4);
|
|
var o = null;
|
|
if (e.uniformsNames) {
|
|
var s = e;
|
|
r = s.uniformsNames, o = s.uniformBuffersNames, t = s.samplers, i = s.defines, n = s.maxSimultaneousLights
|
|
} else r = e, t || (t = []);
|
|
for (var a = 0; a < n && i["LIGHT" + a]; a++) r.push("vLightData" + a, "vLightDiffuse" + a, "vLightSpecular" + a, "vLightDirection" + a, "vLightFalloff" + a, "vLightGround" + a, "lightMatrix" + a, "shadowsInfo" + a, "depthValues" + a), o && o.push("Light" + a), t.push("shadowSampler" + a), t.push("depthSampler" + a), i["PROJECTEDLIGHTTEXTURE" + a] && (t.push("projectionLightSampler" + a), r.push("textureProjectionMatrix" + a));
|
|
i.NUM_MORPH_INFLUENCERS && r.push("morphTargetInfluences")
|
|
}, e.HandleFallbacksForShadows = function(e, t, i, n) {
|
|
void 0 === i && (i = 4), void 0 === n && (n = 0);
|
|
for (var r = 0, o = 0; o < i && e["LIGHT" + o]; o++) o > 0 && (r = n + o, t.addFallback(r, "LIGHT" + o)), e.SHADOWS || (e["SHADOW" + o] && t.addFallback(n, "SHADOW" + o), e["SHADOWPCF" + o] && t.addFallback(n, "SHADOWPCF" + o), e["SHADOWPCSS" + o] && t.addFallback(n, "SHADOWPCSS" + o), e["SHADOWPOISSON" + o] && t.addFallback(n, "SHADOWPOISSON" + o), e["SHADOWESM" + o] && t.addFallback(n, "SHADOWESM" + o));
|
|
return r++
|
|
}, e.PrepareAttributesForMorphTargets = function(e, t, i) {
|
|
var r = i.NUM_MORPH_INFLUENCERS;
|
|
if (r > 0 && s.a.LastCreatedEngine)
|
|
for (var o = s.a.LastCreatedEngine.getCaps().maxVertexAttribs, c = t.morphTargetManager, l = c && c.supportsNormals && i.NORMAL, u = c && c.supportsTangents && i.TANGENT, h = 0; h < r; h++) e.push(a.b.PositionKind + h), l && e.push(a.b.NormalKind + h), u && e.push(a.b.TangentKind + h), e.length > o && n.a.Error("Cannot add more vertex attributes for mesh " + t.name)
|
|
}, e.PrepareAttributesForBones = function(e, t, i, n) {
|
|
i.NUM_BONE_INFLUENCERS > 0 && (n.addCPUSkinningFallback(0, t), e.push(a.b.MatricesIndicesKind), e.push(a.b.MatricesWeightsKind), i.NUM_BONE_INFLUENCERS > 4 && (e.push(a.b.MatricesIndicesExtraKind), e.push(a.b.MatricesWeightsExtraKind)))
|
|
}, e.PrepareAttributesForInstances = function(e, t) {
|
|
t.INSTANCES && (e.push("world0"), e.push("world1"), e.push("world2"), e.push("world3"))
|
|
}, e.BindLightShadow = function(e, t, i, n) {
|
|
if (e.shadowEnabled && t.receiveShadows) {
|
|
var r = e.getShadowGenerator();
|
|
r && r.bindShadowLight(i, n)
|
|
}
|
|
}, e.BindLightProperties = function(e, t, i) {
|
|
e.transferToEffect(t, i + "")
|
|
}, e.BindLights = function(t, i, n, r, s, a) {
|
|
void 0 === s && (s = 4), void 0 === a && (a = !1);
|
|
for (var c = Math.min(i.lightSources.length, s), l = 0; l < c; l++) {
|
|
var u = i.lightSources[l],
|
|
h = l.toString(),
|
|
d = u.getScaledIntensity();
|
|
u._uniformBuffer.bindToEffect(n, "Light" + l), e.BindLightProperties(u, n, l), u.diffuse.scaleToRef(d, o.t.Color3[0]), u._uniformBuffer.updateColor4("vLightDiffuse", o.t.Color3[0], a ? u.radius : u.range, h), r.SPECULARTERM && (u.specular.scaleToRef(d, o.t.Color3[1]), u._uniformBuffer.updateColor3("vLightSpecular", o.t.Color3[1], h)), t.shadowsEnabled && this.BindLightShadow(u, i, h, n), u._uniformBuffer.update()
|
|
}
|
|
}, e.BindFogParameters = function(e, t, i, n) {
|
|
void 0 === n && (n = !1), e.fogEnabled && t.applyFog && e.fogMode !== r.a.FOGMODE_NONE && (i.setFloat4("vFogInfos", e.fogMode, e.fogStart, e.fogEnd, e.fogDensity), n ? (e.fogColor.toLinearSpaceToRef(this._tempFogColor), i.setColor3("vFogColor", this._tempFogColor)) : i.setColor3("vFogColor", e.fogColor))
|
|
}, e.BindBonesParameters = function(e, t) {
|
|
if (t && e && (e.computeBonesUsingShaders && t._bonesComputationForcedToCPU && (e.computeBonesUsingShaders = !1), e.useBones && e.computeBonesUsingShaders && e.skeleton)) {
|
|
var i = e.skeleton;
|
|
if (i.isUsingTextureForMatrices && t.getUniformIndex("boneTextureWidth") > -1) {
|
|
var n = i.getTransformMatrixTexture();
|
|
t.setTexture("boneSampler", n), t.setFloat("boneTextureWidth", 4 * (i.bones.length + 1))
|
|
} else {
|
|
var r = i.getTransformMatrices(e);
|
|
r && t.setMatrices("mBones", r)
|
|
}
|
|
}
|
|
}, e.BindMorphTargetParameters = function(e, t) {
|
|
var i = e.morphTargetManager;
|
|
e && i && t.setFloatArray("morphTargetInfluences", i.influences)
|
|
}, e.BindLogDepth = function(e, t, i) {
|
|
e.LOGARITHMICDEPTH && t.setFloat("logarithmicDepthConstant", 2 / (Math.log(i.activeCamera.maxZ + 1) / Math.LN2))
|
|
}, e.BindClipPlane = function(e, t) {
|
|
if (t.clipPlane) {
|
|
var i = t.clipPlane;
|
|
e.setFloat4("vClipPlane", i.normal.x, i.normal.y, i.normal.z, i.d)
|
|
}
|
|
if (t.clipPlane2) {
|
|
i = t.clipPlane2;
|
|
e.setFloat4("vClipPlane2", i.normal.x, i.normal.y, i.normal.z, i.d)
|
|
}
|
|
if (t.clipPlane3) {
|
|
i = t.clipPlane3;
|
|
e.setFloat4("vClipPlane3", i.normal.x, i.normal.y, i.normal.z, i.d)
|
|
}
|
|
if (t.clipPlane4) {
|
|
i = t.clipPlane4;
|
|
e.setFloat4("vClipPlane4", i.normal.x, i.normal.y, i.normal.z, i.d)
|
|
}
|
|
}, e._tempFogColor = o.e.Black(), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = i(1),
|
|
r = i(9),
|
|
o = i(47),
|
|
s = i(8),
|
|
a = i(28),
|
|
c = i(61),
|
|
l = i(29),
|
|
u = i(0),
|
|
h = i(42),
|
|
d = i(24),
|
|
f = i(21),
|
|
p = i(30),
|
|
_ = i(31),
|
|
g = i(63),
|
|
m = i(38),
|
|
v = i(50),
|
|
y = i(36),
|
|
b = i(83),
|
|
T = i(91),
|
|
E = i(14),
|
|
A = i(3),
|
|
x = i(35),
|
|
R = i(6),
|
|
P = i(23),
|
|
S = i(19),
|
|
C = i(17),
|
|
M = i(79),
|
|
O = i(51),
|
|
I = function() {
|
|
function e() {
|
|
this._singleClick = !1, this._doubleClick = !1, this._hasSwiped = !1, this._ignore = !1
|
|
}
|
|
return Object.defineProperty(e.prototype, "singleClick", {
|
|
get: function() {
|
|
return this._singleClick
|
|
},
|
|
set: function(e) {
|
|
this._singleClick = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "doubleClick", {
|
|
get: function() {
|
|
return this._doubleClick
|
|
},
|
|
set: function(e) {
|
|
this._doubleClick = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "hasSwiped", {
|
|
get: function() {
|
|
return this._hasSwiped
|
|
},
|
|
set: function(e) {
|
|
this._hasSwiped = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "ignore", {
|
|
get: function() {
|
|
return this._ignore
|
|
},
|
|
set: function(e) {
|
|
this._ignore = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e
|
|
}(),
|
|
D = function() {
|
|
function e(e) {
|
|
this._wheelEventName = "", this._meshPickProceed = !1, this._currentPickResult = null, this._previousPickResult = null, this._totalPointersPressed = 0, this._doubleClickOccured = !1, this._pointerX = 0, this._pointerY = 0, this._startingPointerPosition = new u.w(0, 0), this._previousStartingPointerPosition = new u.w(0, 0), this._startingPointerTime = 0, this._previousStartingPointerTime = 0, this._pointerCaptures = {}, this._scene = e
|
|
}
|
|
return Object.defineProperty(e.prototype, "meshUnderPointer", {
|
|
get: function() {
|
|
return this._pointerOverMesh
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "unTranslatedPointer", {
|
|
get: function() {
|
|
return new u.w(this._unTranslatedPointerX, this._unTranslatedPointerY)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "pointerX", {
|
|
get: function() {
|
|
return this._pointerX
|
|
},
|
|
set: function(e) {
|
|
this._pointerX = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "pointerY", {
|
|
get: function() {
|
|
return this._pointerY
|
|
},
|
|
set: function(e) {
|
|
this._pointerY = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._updatePointerPosition = function(e) {
|
|
var t = this._scene.getEngine().getRenderingCanvasClientRect();
|
|
t && (this._pointerX = e.clientX - t.left, this._pointerY = e.clientY - t.top, this._unTranslatedPointerX = this._pointerX, this._unTranslatedPointerY = this._pointerY)
|
|
}, e.prototype._processPointerMove = function(e, t) {
|
|
var i = this._scene,
|
|
n = i.getEngine().getRenderingCanvas();
|
|
if (n) {
|
|
n.tabIndex = 1, n.style.cursor = i.defaultCursor;
|
|
var r = !!(e && e.hit && e.pickedMesh);
|
|
r ? (i.setPointerOverMesh(e.pickedMesh), this._pointerOverMesh && this._pointerOverMesh.actionManager && this._pointerOverMesh.actionManager.hasPointerTriggers && (this._pointerOverMesh.actionManager.hoverCursor ? n.style.cursor = this._pointerOverMesh.actionManager.hoverCursor : n.style.cursor = i.hoverCursor)) : i.setPointerOverMesh(null);
|
|
for (var o = 0, s = i._pointerMoveStage; o < s.length; o++) {
|
|
e = s[o].action(this._unTranslatedPointerX, this._unTranslatedPointerY, e, r, n)
|
|
}
|
|
if (e) {
|
|
var a = t.type === this._wheelEventName ? C.a.POINTERWHEEL : C.a.POINTERMOVE;
|
|
if (i.onPointerMove && i.onPointerMove(t, e, a), i.onPointerObservable.hasObservers()) {
|
|
var c = new C.b(a, t, e);
|
|
this._setRayOnPointerInfo(c), i.onPointerObservable.notifyObservers(c, a)
|
|
}
|
|
}
|
|
}
|
|
}, e.prototype._setRayOnPointerInfo = function(e) {
|
|
var t = this._scene;
|
|
e.pickInfo && !e.pickInfo._pickingUnavailable && (e.pickInfo.ray || (e.pickInfo.ray = t.createPickingRay(e.event.offsetX, e.event.offsetY, u.j.Identity(), t.activeCamera)))
|
|
}, e.prototype._checkPrePointerObservable = function(e, t, i) {
|
|
var n = this._scene,
|
|
r = new C.d(i, t, this._unTranslatedPointerX, this._unTranslatedPointerY);
|
|
return e && (r.ray = e.ray), n.onPrePointerObservable.notifyObservers(r, i), !!r.skipOnPointerObservable
|
|
}, e.prototype.simulatePointerMove = function(e, t) {
|
|
var i = new PointerEvent("pointermove", t);
|
|
this._checkPrePointerObservable(e, i, C.a.POINTERMOVE) || this._processPointerMove(e, i)
|
|
}, e.prototype.simulatePointerDown = function(e, t) {
|
|
var i = new PointerEvent("pointerdown", t);
|
|
this._checkPrePointerObservable(e, i, C.a.POINTERDOWN) || this._processPointerDown(e, i)
|
|
}, e.prototype._processPointerDown = function(t, i) {
|
|
var n = this,
|
|
r = this._scene;
|
|
if (t && t.hit && t.pickedMesh) {
|
|
this._pickedDownMesh = t.pickedMesh;
|
|
var o = t.pickedMesh.actionManager;
|
|
if (o) {
|
|
if (o.hasPickTriggers) switch (o.processTrigger(A.a.ACTION_OnPickDownTrigger, y.a.CreateNew(t.pickedMesh, i)), i.button) {
|
|
case 0:
|
|
o.processTrigger(A.a.ACTION_OnLeftPickTrigger, y.a.CreateNew(t.pickedMesh, i));
|
|
break;
|
|
case 1:
|
|
o.processTrigger(A.a.ACTION_OnCenterPickTrigger, y.a.CreateNew(t.pickedMesh, i));
|
|
break;
|
|
case 2:
|
|
o.processTrigger(A.a.ACTION_OnRightPickTrigger, y.a.CreateNew(t.pickedMesh, i))
|
|
}
|
|
o.hasSpecificTrigger(A.a.ACTION_OnLongPressTrigger) && window.setTimeout(function() {
|
|
var t = r.pick(n._unTranslatedPointerX, n._unTranslatedPointerY, function(e) {
|
|
return e.isPickable && e.isVisible && e.isReady() && e.actionManager && e.actionManager.hasSpecificTrigger(A.a.ACTION_OnLongPressTrigger) && e == n._pickedDownMesh
|
|
}, !1, r.cameraToUseForPointers);
|
|
t && t.hit && t.pickedMesh && o && 0 !== n._totalPointersPressed && Date.now() - n._startingPointerTime > e.LongPressDelay && !n._isPointerSwiping() && (n._startingPointerTime = 0, o.processTrigger(A.a.ACTION_OnLongPressTrigger, y.a.CreateNew(t.pickedMesh, i)))
|
|
}, e.LongPressDelay)
|
|
}
|
|
} else
|
|
for (var s = 0, a = r._pointerDownStage; s < a.length; s++) {
|
|
t = a[s].action(this._unTranslatedPointerX, this._unTranslatedPointerY, t, i)
|
|
}
|
|
if (t) {
|
|
var c = C.a.POINTERDOWN;
|
|
if (r.onPointerDown && r.onPointerDown(i, t, c), r.onPointerObservable.hasObservers()) {
|
|
var l = new C.b(c, i, t);
|
|
this._setRayOnPointerInfo(l), r.onPointerObservable.notifyObservers(l, c)
|
|
}
|
|
}
|
|
}, e.prototype._isPointerSwiping = function() {
|
|
return Math.abs(this._startingPointerPosition.x - this._pointerX) > e.DragMovementThreshold || Math.abs(this._startingPointerPosition.y - this._pointerY) > e.DragMovementThreshold
|
|
}, e.prototype.simulatePointerUp = function(e, t, i) {
|
|
var n = new PointerEvent("pointerup", t),
|
|
r = new I;
|
|
i ? r.doubleClick = !0 : r.singleClick = !0, this._checkPrePointerObservable(e, n, C.a.POINTERUP) || this._processPointerUp(e, n, r)
|
|
}, e.prototype._processPointerUp = function(e, t, i) {
|
|
var n = this._scene;
|
|
if (e && e && e.pickedMesh) {
|
|
if (this._pickedUpMesh = e.pickedMesh, this._pickedDownMesh === this._pickedUpMesh && (n.onPointerPick && n.onPointerPick(t, e), i.singleClick && !i.ignore && n.onPointerObservable.hasObservers())) {
|
|
var r = C.a.POINTERPICK,
|
|
o = new C.b(r, t, e);
|
|
this._setRayOnPointerInfo(o), n.onPointerObservable.notifyObservers(o, r)
|
|
}
|
|
var s = e.pickedMesh._getActionManagerForTrigger();
|
|
if (s && !i.ignore) {
|
|
s.processTrigger(A.a.ACTION_OnPickUpTrigger, y.a.CreateNew(e.pickedMesh, t)), !i.hasSwiped && i.singleClick && s.processTrigger(A.a.ACTION_OnPickTrigger, y.a.CreateNew(e.pickedMesh, t));
|
|
var a = e.pickedMesh._getActionManagerForTrigger(A.a.ACTION_OnDoublePickTrigger);
|
|
i.doubleClick && a && a.processTrigger(A.a.ACTION_OnDoublePickTrigger, y.a.CreateNew(e.pickedMesh, t))
|
|
}
|
|
} else if (!i.ignore)
|
|
for (var c = 0, l = n._pointerUpStage; c < l.length; c++) {
|
|
e = l[c].action(this._unTranslatedPointerX, this._unTranslatedPointerY, e, t)
|
|
}
|
|
if (this._pickedDownMesh && this._pickedDownMesh !== this._pickedUpMesh) {
|
|
var u = this._pickedDownMesh._getActionManagerForTrigger(A.a.ACTION_OnPickOutTrigger);
|
|
u && u.processTrigger(A.a.ACTION_OnPickOutTrigger, y.a.CreateNew(this._pickedDownMesh, t))
|
|
}
|
|
var h = 0;
|
|
if (n.onPointerObservable.hasObservers()) {
|
|
if (!i.ignore && !i.hasSwiped && (i.singleClick && n.onPointerObservable.hasSpecificMask(C.a.POINTERTAP) ? h = C.a.POINTERTAP : i.doubleClick && n.onPointerObservable.hasSpecificMask(C.a.POINTERDOUBLETAP) && (h = C.a.POINTERDOUBLETAP), h)) {
|
|
o = new C.b(h, t, e);
|
|
this._setRayOnPointerInfo(o), n.onPointerObservable.notifyObservers(o, h)
|
|
}
|
|
if (!i.ignore) {
|
|
h = C.a.POINTERUP;
|
|
o = new C.b(h, t, e);
|
|
this._setRayOnPointerInfo(o), n.onPointerObservable.notifyObservers(o, h)
|
|
}
|
|
}
|
|
n.onPointerUp && !i.ignore && n.onPointerUp(t, e, h)
|
|
}, e.prototype.isPointerCaptured = function(e) {
|
|
return void 0 === e && (e = 0), this._pointerCaptures[e]
|
|
}, e.prototype.attachControl = function(t, i, n) {
|
|
var o = this;
|
|
void 0 === t && (t = !0), void 0 === i && (i = !0), void 0 === n && (n = !0);
|
|
var s = this._scene,
|
|
a = s.getEngine().getRenderingCanvas();
|
|
if (a) {
|
|
var c = s.getEngine();
|
|
this._initActionManager = function(e, t) {
|
|
if (!o._meshPickProceed) {
|
|
var i = s.pick(o._unTranslatedPointerX, o._unTranslatedPointerY, s.pointerDownPredicate, !1, s.cameraToUseForPointers);
|
|
o._currentPickResult = i, i && (e = i.hit && i.pickedMesh ? i.pickedMesh._getActionManagerForTrigger() : null), o._meshPickProceed = !0
|
|
}
|
|
return e
|
|
}, this._delayedSimpleClick = function(t, i, n) {
|
|
(Date.now() - o._previousStartingPointerTime > e.DoubleClickDelay && !o._doubleClickOccured || t !== o._previousButtonPressed) && (o._doubleClickOccured = !1, i.singleClick = !0, i.ignore = !1, n(i, o._currentPickResult))
|
|
}, this._initClickEvent = function(t, i, n, r) {
|
|
var s = new I;
|
|
o._currentPickResult = null;
|
|
var a = null,
|
|
c = t.hasSpecificMask(C.a.POINTERPICK) || i.hasSpecificMask(C.a.POINTERPICK) || t.hasSpecificMask(C.a.POINTERTAP) || i.hasSpecificMask(C.a.POINTERTAP) || t.hasSpecificMask(C.a.POINTERDOUBLETAP) || i.hasSpecificMask(C.a.POINTERDOUBLETAP);
|
|
!c && M.a && (a = o._initActionManager(a, s)) && (c = a.hasPickTriggers);
|
|
var l = !1;
|
|
if (c) {
|
|
var u = n.button;
|
|
if (s.hasSwiped = o._isPointerSwiping(), !s.hasSwiped) {
|
|
var h = !e.ExclusiveDoubleClickMode;
|
|
h || (h = !t.hasSpecificMask(C.a.POINTERDOUBLETAP) && !i.hasSpecificMask(C.a.POINTERDOUBLETAP)) && !M.a.HasSpecificTrigger(A.a.ACTION_OnDoublePickTrigger) && (a = o._initActionManager(a, s)) && (h = !a.hasSpecificTrigger(A.a.ACTION_OnDoublePickTrigger)), h ? (Date.now() - o._previousStartingPointerTime > e.DoubleClickDelay || u !== o._previousButtonPressed) && (s.singleClick = !0, r(s, o._currentPickResult), l = !0) : (o._previousDelayedSimpleClickTimeout = o._delayedSimpleClickTimeout, o._delayedSimpleClickTimeout = window.setTimeout(o._delayedSimpleClick.bind(o, u, s, r), e.DoubleClickDelay));
|
|
var d = t.hasSpecificMask(C.a.POINTERDOUBLETAP) || i.hasSpecificMask(C.a.POINTERDOUBLETAP);
|
|
!d && M.a.HasSpecificTrigger(A.a.ACTION_OnDoublePickTrigger) && (a = o._initActionManager(a, s)) && (d = a.hasSpecificTrigger(A.a.ACTION_OnDoublePickTrigger)), d && (u === o._previousButtonPressed && Date.now() - o._previousStartingPointerTime < e.DoubleClickDelay && !o._doubleClickOccured ? (s.hasSwiped || o._isPointerSwiping() ? (o._doubleClickOccured = !1, o._previousStartingPointerTime = o._startingPointerTime, o._previousStartingPointerPosition.x = o._startingPointerPosition.x, o._previousStartingPointerPosition.y = o._startingPointerPosition.y, o._previousButtonPressed = u, e.ExclusiveDoubleClickMode ? (o._previousDelayedSimpleClickTimeout && clearTimeout(o._previousDelayedSimpleClickTimeout), o._previousDelayedSimpleClickTimeout = o._delayedSimpleClickTimeout, r(s, o._previousPickResult)) : r(s, o._currentPickResult)) : (o._previousStartingPointerTime = 0, o._doubleClickOccured = !0, s.doubleClick = !0, s.ignore = !1, e.ExclusiveDoubleClickMode && o._previousDelayedSimpleClickTimeout && clearTimeout(o._previousDelayedSimpleClickTimeout), o._previousDelayedSimpleClickTimeout = o._delayedSimpleClickTimeout, r(s, o._currentPickResult)), l = !0) : (o._doubleClickOccured = !1, o._previousStartingPointerTime = o._startingPointerTime, o._previousStartingPointerPosition.x = o._startingPointerPosition.x, o._previousStartingPointerPosition.y = o._startingPointerPosition.y, o._previousButtonPressed = u))
|
|
}
|
|
}
|
|
l || r(s, o._currentPickResult)
|
|
}, this._onPointerMove = function(e) {
|
|
if (o._updatePointerPosition(e), !o._checkPrePointerObservable(null, e, e.type === o._wheelEventName ? C.a.POINTERWHEEL : C.a.POINTERMOVE) && (s.cameraToUseForPointers || s.activeCamera)) {
|
|
s.pointerMovePredicate || (s.pointerMovePredicate = function(e) {
|
|
return e.isPickable && e.isVisible && e.isReady() && e.isEnabled() && (e.enablePointerMoveEvents || s.constantlyUpdateMeshUnderPointer || null !== e.actionManager && void 0 !== e.actionManager) && (!s.cameraToUseForPointers || 0 != (s.cameraToUseForPointers.layerMask & e.layerMask))
|
|
});
|
|
var t = s.pick(o._unTranslatedPointerX, o._unTranslatedPointerY, s.pointerMovePredicate, !1, s.cameraToUseForPointers);
|
|
o._processPointerMove(t, e)
|
|
}
|
|
}, this._onPointerDown = function(e) {
|
|
if (o._totalPointersPressed++, o._pickedDownMesh = null, o._meshPickProceed = !1, o._updatePointerPosition(e), s.preventDefaultOnPointerDown && a && (e.preventDefault(), a.focus()), o._startingPointerPosition.x = o._pointerX, o._startingPointerPosition.y = o._pointerY, o._startingPointerTime = Date.now(), !o._checkPrePointerObservable(null, e, C.a.POINTERDOWN) && (s.cameraToUseForPointers || s.activeCamera)) {
|
|
o._pointerCaptures[e.pointerId] = !0, s.pointerDownPredicate || (s.pointerDownPredicate = function(e) {
|
|
return e.isPickable && e.isVisible && e.isReady() && e.isEnabled() && (!s.cameraToUseForPointers || 0 != (s.cameraToUseForPointers.layerMask & e.layerMask))
|
|
}), o._pickedDownMesh = null;
|
|
var t = s.pick(o._unTranslatedPointerX, o._unTranslatedPointerY, s.pointerDownPredicate, !1, s.cameraToUseForPointers);
|
|
o._processPointerDown(t, e)
|
|
}
|
|
}, this._onPointerUp = function(e) {
|
|
0 !== o._totalPointersPressed && (o._totalPointersPressed--, o._pickedUpMesh = null, o._meshPickProceed = !1, o._updatePointerPosition(e), s.preventDefaultOnPointerUp && a && (e.preventDefault(), a.focus()), o._initClickEvent(s.onPrePointerObservable, s.onPointerObservable, e, function(t, i) {
|
|
if (s.onPrePointerObservable.hasObservers() && !t.ignore) {
|
|
if (!t.hasSwiped) {
|
|
if (t.singleClick && s.onPrePointerObservable.hasSpecificMask(C.a.POINTERTAP) && o._checkPrePointerObservable(null, e, C.a.POINTERTAP)) return;
|
|
if (t.doubleClick && s.onPrePointerObservable.hasSpecificMask(C.a.POINTERDOUBLETAP) && o._checkPrePointerObservable(null, e, C.a.POINTERDOUBLETAP)) return
|
|
}
|
|
if (o._checkPrePointerObservable(null, e, C.a.POINTERUP)) return
|
|
}
|
|
o._pointerCaptures[e.pointerId] && (o._pointerCaptures[e.pointerId] = !1, (s.cameraToUseForPointers || s.activeCamera) && (s.pointerUpPredicate || (s.pointerUpPredicate = function(e) {
|
|
return e.isPickable && e.isVisible && e.isReady() && e.isEnabled() && (!s.cameraToUseForPointers || 0 != (s.cameraToUseForPointers.layerMask & e.layerMask))
|
|
}), !o._meshPickProceed && (M.a && M.a.HasTriggers || s.onPointerObservable.hasObservers()) && o._initActionManager(null, t), i || (i = o._currentPickResult), o._processPointerUp(i, e, t), o._previousPickResult = o._currentPickResult))
|
|
}))
|
|
}, this._onKeyDown = function(e) {
|
|
var t = O.a.KEYDOWN;
|
|
if (s.onPreKeyboardObservable.hasObservers()) {
|
|
var i = new O.c(t, e);
|
|
if (s.onPreKeyboardObservable.notifyObservers(i, t), i.skipOnPointerObservable) return
|
|
}
|
|
if (s.onKeyboardObservable.hasObservers()) {
|
|
i = new O.b(t, e);
|
|
s.onKeyboardObservable.notifyObservers(i, t)
|
|
}
|
|
s.actionManager && s.actionManager.processTrigger(A.a.ACTION_OnKeyDownTrigger, y.a.CreateNewFromScene(s, e))
|
|
}, this._onKeyUp = function(e) {
|
|
var t = O.a.KEYUP;
|
|
if (s.onPreKeyboardObservable.hasObservers()) {
|
|
var i = new O.c(t, e);
|
|
if (s.onPreKeyboardObservable.notifyObservers(i, t), i.skipOnPointerObservable) return
|
|
}
|
|
if (s.onKeyboardObservable.hasObservers()) {
|
|
i = new O.b(t, e);
|
|
s.onKeyboardObservable.notifyObservers(i, t)
|
|
}
|
|
s.actionManager && s.actionManager.processTrigger(A.a.ACTION_OnKeyUpTrigger, y.a.CreateNewFromScene(s, e))
|
|
}, this._onCanvasFocusObserver = c.onCanvasFocusObservable.add(function() {
|
|
a && (a.addEventListener("keydown", o._onKeyDown, !1), a.addEventListener("keyup", o._onKeyUp, !1))
|
|
}), this._onCanvasBlurObserver = c.onCanvasBlurObservable.add(function() {
|
|
a && (a.removeEventListener("keydown", o._onKeyDown), a.removeEventListener("keyup", o._onKeyUp))
|
|
});
|
|
var l = r.h.GetPointerPrefix();
|
|
n && (a.addEventListener(l + "move", this._onPointerMove, !1), this._wheelEventName = "onwheel" in document.createElement("div") ? "wheel" : void 0 !== document.onmousewheel ? "mousewheel" : "DOMMouseScroll", a.addEventListener(this._wheelEventName, this._onPointerMove, !1)), i && a.addEventListener(l + "down", this._onPointerDown, !1), t && window.addEventListener(l + "up", this._onPointerUp, !1)
|
|
}
|
|
}, e.prototype.detachControl = function() {
|
|
var e = r.h.GetPointerPrefix(),
|
|
t = this._scene.getEngine().getRenderingCanvas(),
|
|
i = this._scene.getEngine();
|
|
t && (t.removeEventListener(e + "move", this._onPointerMove), t.removeEventListener(e + "down", this._onPointerDown), window.removeEventListener(e + "up", this._onPointerUp), this._onCanvasBlurObserver && i.onCanvasBlurObservable.remove(this._onCanvasBlurObserver), this._onCanvasFocusObserver && i.onCanvasFocusObservable.remove(this._onCanvasFocusObserver), t.removeEventListener("keydown", this._onKeyDown), t.removeEventListener("keyup", this._onKeyUp), t.style.cursor = this._scene.defaultCursor)
|
|
}, e.prototype.setPointerOverMesh = function(e) {
|
|
var t;
|
|
this._pointerOverMesh !== e && (this._pointerOverMesh && (t = this._pointerOverMesh._getActionManagerForTrigger(A.a.ACTION_OnPointerOutTrigger)) && t.processTrigger(A.a.ACTION_OnPointerOutTrigger, y.a.CreateNew(this._pointerOverMesh)), this._pointerOverMesh = e, this._pointerOverMesh && (t = this._pointerOverMesh._getActionManagerForTrigger(A.a.ACTION_OnPointerOverTrigger)) && t.processTrigger(A.a.ACTION_OnPointerOverTrigger, y.a.CreateNew(this._pointerOverMesh)))
|
|
}, e.prototype.getPointerOverMesh = function() {
|
|
return this._pointerOverMesh
|
|
}, e.DragMovementThreshold = 10, e.LongPressDelay = 500, e.DoubleClickDelay = 300, e.ExclusiveDoubleClickMode = !1, e
|
|
}();
|
|
i.d(t, "a", function() {
|
|
return L
|
|
});
|
|
var L = function(e) {
|
|
function t(i, n) {
|
|
var o = e.call(this) || this;
|
|
return o._inputManager = new D(o), o.cameraToUseForPointers = null, o._isScene = !0, o.autoClear = !0, o.autoClearDepthAndStencil = !0, o.clearColor = new u.f(.2, .2, .3, 1), o.ambientColor = new u.e(0, 0, 0), o._forceWireframe = !1, o._forcePointsCloud = !1, o.animationsEnabled = !0, o._animationPropertiesOverride = null, o.useConstantAnimationDeltaTime = !1, o.constantlyUpdateMeshUnderPointer = !1, o.hoverCursor = "pointer", o.defaultCursor = "", o.preventDefaultOnPointerDown = !0, o.preventDefaultOnPointerUp = !0, o.metadata = null, o.reservedDataStore = null, o.disableOfflineSupportExceptionRules = new Array, o.onDisposeObservable = new s.c, o._onDisposeObserver = null, o.onBeforeRenderObservable = new s.c, o._onBeforeRenderObserver = null, o.onAfterRenderObservable = new s.c, o._onAfterRenderObserver = null, o.onBeforeAnimationsObservable = new s.c, o.onAfterAnimationsObservable = new s.c, o.onBeforeDrawPhaseObservable = new s.c, o.onAfterDrawPhaseObservable = new s.c, o.onReadyObservable = new s.c, o.onBeforeCameraRenderObservable = new s.c, o._onBeforeCameraRenderObserver = null, o.onAfterCameraRenderObservable = new s.c, o._onAfterCameraRenderObserver = null, o.onBeforeActiveMeshesEvaluationObservable = new s.c, o.onAfterActiveMeshesEvaluationObservable = new s.c, o.onBeforeParticlesRenderingObservable = new s.c, o.onAfterParticlesRenderingObservable = new s.c, o.onDataLoadedObservable = new s.c, o.onNewCameraAddedObservable = new s.c, o.onCameraRemovedObservable = new s.c, o.onNewLightAddedObservable = new s.c, o.onLightRemovedObservable = new s.c, o.onNewGeometryAddedObservable = new s.c, o.onGeometryRemovedObservable = new s.c, o.onNewTransformNodeAddedObservable = new s.c, o.onTransformNodeRemovedObservable = new s.c, o.onNewMeshAddedObservable = new s.c, o.onMeshRemovedObservable = new s.c, o.onNewSkeletonAddedObservable = new s.c, o.onSkeletonRemovedObservable = new s.c, o.onNewMaterialAddedObservable = new s.c, o.onMaterialRemovedObservable = new s.c, o.onNewTextureAddedObservable = new s.c, o.onTextureRemovedObservable = new s.c, o.onBeforeRenderTargetsRenderObservable = new s.c, o.onAfterRenderTargetsRenderObservable = new s.c, o.onBeforeStepObservable = new s.c, o.onAfterStepObservable = new s.c, o.onActiveCameraChanged = new s.c, o.onBeforeRenderingGroupObservable = new s.c, o.onAfterRenderingGroupObservable = new s.c, o.onMeshImportedObservable = new s.c, o._registeredForLateAnimationBindings = new a.b(256), o.onPrePointerObservable = new s.c, o.onPointerObservable = new s.c, o.onPreKeyboardObservable = new s.c, o.onKeyboardObservable = new s.c, o._useRightHandedSystem = !1, o._timeAccumulator = 0, o._currentStepId = 0, o._currentInternalStep = 0, o._fogEnabled = !0, o._fogMode = t.FOGMODE_NONE, o.fogColor = new u.e(.2, .2, .3), o.fogDensity = .1, o.fogStart = 0, o.fogEnd = 1e3, o._shadowsEnabled = !0, o._lightsEnabled = !0, o.activeCameras = new Array, o._texturesEnabled = !0, o.particlesEnabled = !0, o.spritesEnabled = !0, o._skeletonsEnabled = !0, o.lensFlaresEnabled = !0, o.collisionsEnabled = !0, o.gravity = new u.x(0, -9.807, 0), o.postProcessesEnabled = !0, o.postProcesses = new Array, o.renderTargetsEnabled = !0, o.dumpNextRenderTargets = !1, o.customRenderTargets = new Array, o.importedMeshesFiles = new Array, o.probesEnabled = !0, o._meshesForIntersections = new a.b(256), o.proceduralTexturesEnabled = !0, o._totalVertices = new r.f, o._activeIndices = new r.f, o._activeParticles = new r.f, o._activeBones = new r.f, o._animationTime = 0, o.animationTimeScale = 1, o._renderId = 0, o._frameId = 0, o._executeWhenReadyTimeoutId = -1, o._intermediateRendering = !1, o._viewUpdateFlag = -1, o._projectionUpdateFlag = -1, o._toBeDisposed = new Array(256), o._activeRequests = new Array, o._pendingData = new Array, o._isDisposed = !1, o.dispatchAllSubMeshesOfActiveMeshes = !1, o._activeMeshes = new a.a(256), o._processedMaterials = new a.a(256), o._renderTargets = new a.b(256), o._activeParticleSystems = new a.a(256), o._activeSkeletons = new a.b(32), o._softwareSkinnedMeshes = new a.b(32), o._activeAnimatables = new Array, o._transformMatrix = u.j.Zero(), o.requireLightSorting = !1, o._components = [], o._serializableComponents = [], o._transientComponents = [], o._beforeCameraUpdateStage = E.b.Create(), o._beforeClearStage = E.b.Create(), o._gatherRenderTargetsStage = E.b.Create(), o._gatherActiveCameraRenderTargetsStage = E.b.Create(), o._isReadyForMeshStage = E.b.Create(), o._beforeEvaluateActiveMeshStage = E.b.Create(), o._evaluateSubMeshStage = E.b.Create(), o._activeMeshStage = E.b.Create(), o._cameraDrawRenderTargetStage = E.b.Create(), o._beforeCameraDrawStage = E.b.Create(), o._beforeRenderTargetDrawStage = E.b.Create(), o._beforeRenderingGroupDrawStage = E.b.Create(), o._beforeRenderingMeshStage = E.b.Create(), o._afterRenderingMeshStage = E.b.Create(), o._afterRenderingGroupDrawStage = E.b.Create(), o._afterCameraDrawStage = E.b.Create(), o._afterRenderTargetDrawStage = E.b.Create(), o._afterRenderStage = E.b.Create(), o._pointerMoveStage = E.b.Create(), o._pointerDownStage = E.b.Create(), o._pointerUpStage = E.b.Create(), o.geometriesByUniqueId = null, o._defaultMeshCandidates = {
|
|
data: [],
|
|
length: 0
|
|
}, o._defaultSubMeshCandidates = {
|
|
data: [],
|
|
length: 0
|
|
}, o._preventFreeActiveMeshesAndRenderingGroups = !1, o._activeMeshesFrozen = !1, o._allowPostProcessClearColor = !0, o.getDeterministicFrameTime = function() {
|
|
return 1e3 / 60
|
|
}, o._blockMaterialDirtyMechanism = !1, o._engine = i || P.a.LastCreatedEngine, n && n.virtual || (P.a._LastCreatedScene = o, o._engine.scenes.push(o)), o._uid = null, o._renderingManager = new T.b(o), b.a && (o.postProcessManager = new b.a(o)), x.a.IsWindowObjectExist() && o.attachControl(), o._createUbo(), _.a && (o._imageProcessingConfiguration = new _.a), o.setDefaultCandidateProviders(), n && !0 === n.useGeometryUniqueIdsMap && (o.geometriesByUniqueId = {}), o.useMaterialMeshMap = n && n.useGeometryUniqueIdsMap || !1, o.useClonedMeshhMap = n && n.useClonedMeshhMap || !1, n && n.virtual || o._engine.onNewSceneAddedObservable.notifyObservers(o), o
|
|
}
|
|
return n.d(t, e), t.DefaultMaterialFactory = function(e) {
|
|
throw S.a.WarnImport("StandardMaterial")
|
|
}, t.CollisionCoordinatorFactory = function() {
|
|
throw S.a.WarnImport("DefaultCollisionCoordinator")
|
|
}, Object.defineProperty(t.prototype, "environmentTexture", {
|
|
get: function() {
|
|
return this._environmentTexture
|
|
},
|
|
set: function(e) {
|
|
this._environmentTexture !== e && (this._environmentTexture = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "imageProcessingConfiguration", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "forceWireframe", {
|
|
get: function() {
|
|
return this._forceWireframe
|
|
},
|
|
set: function(e) {
|
|
this._forceWireframe !== e && (this._forceWireframe = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "forcePointsCloud", {
|
|
get: function() {
|
|
return this._forcePointsCloud
|
|
},
|
|
set: function(e) {
|
|
this._forcePointsCloud !== e && (this._forcePointsCloud = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "animationPropertiesOverride", {
|
|
get: function() {
|
|
return this._animationPropertiesOverride
|
|
},
|
|
set: function(e) {
|
|
this._animationPropertiesOverride = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onDispose", {
|
|
set: function(e) {
|
|
this._onDisposeObserver && this.onDisposeObservable.remove(this._onDisposeObserver), this._onDisposeObserver = this.onDisposeObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "beforeRender", {
|
|
set: function(e) {
|
|
this._onBeforeRenderObserver && this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver), e && (this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(e))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "afterRender", {
|
|
set: function(e) {
|
|
this._onAfterRenderObserver && this.onAfterRenderObservable.remove(this._onAfterRenderObserver), e && (this._onAfterRenderObserver = this.onAfterRenderObservable.add(e))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "beforeCameraRender", {
|
|
set: function(e) {
|
|
this._onBeforeCameraRenderObserver && this.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver), this._onBeforeCameraRenderObserver = this.onBeforeCameraRenderObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "afterCameraRender", {
|
|
set: function(e) {
|
|
this._onAfterCameraRenderObserver && this.onAfterCameraRenderObservable.remove(this._onAfterCameraRenderObserver), this._onAfterCameraRenderObserver = this.onAfterCameraRenderObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "unTranslatedPointer", {
|
|
get: function() {
|
|
return this._inputManager.unTranslatedPointer
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "DragMovementThreshold", {
|
|
get: function() {
|
|
return D.DragMovementThreshold
|
|
},
|
|
set: function(e) {
|
|
D.DragMovementThreshold = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "LongPressDelay", {
|
|
get: function() {
|
|
return D.LongPressDelay
|
|
},
|
|
set: function(e) {
|
|
D.LongPressDelay = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "DoubleClickDelay", {
|
|
get: function() {
|
|
return D.DoubleClickDelay
|
|
},
|
|
set: function(e) {
|
|
D.DoubleClickDelay = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "ExclusiveDoubleClickMode", {
|
|
get: function() {
|
|
return D.ExclusiveDoubleClickMode
|
|
},
|
|
set: function(e) {
|
|
D.ExclusiveDoubleClickMode = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "useRightHandedSystem", {
|
|
get: function() {
|
|
return this._useRightHandedSystem
|
|
},
|
|
set: function(e) {
|
|
this._useRightHandedSystem !== e && (this._useRightHandedSystem = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.setStepId = function(e) {
|
|
this._currentStepId = e
|
|
}, t.prototype.getStepId = function() {
|
|
return this._currentStepId
|
|
}, t.prototype.getInternalStep = function() {
|
|
return this._currentInternalStep
|
|
}, Object.defineProperty(t.prototype, "fogEnabled", {
|
|
get: function() {
|
|
return this._fogEnabled
|
|
},
|
|
set: function(e) {
|
|
this._fogEnabled !== e && (this._fogEnabled = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "fogMode", {
|
|
get: function() {
|
|
return this._fogMode
|
|
},
|
|
set: function(e) {
|
|
this._fogMode !== e && (this._fogMode = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "shadowsEnabled", {
|
|
get: function() {
|
|
return this._shadowsEnabled
|
|
},
|
|
set: function(e) {
|
|
this._shadowsEnabled !== e && (this._shadowsEnabled = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_LightDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "lightsEnabled", {
|
|
get: function() {
|
|
return this._lightsEnabled
|
|
},
|
|
set: function(e) {
|
|
this._lightsEnabled !== e && (this._lightsEnabled = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_LightDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "activeCamera", {
|
|
get: function() {
|
|
return this._activeCamera
|
|
},
|
|
set: function(e) {
|
|
e !== this._activeCamera && (this._activeCamera = e, this.onActiveCameraChanged.notifyObservers(this))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "defaultMaterial", {
|
|
get: function() {
|
|
return this._defaultMaterial || (this._defaultMaterial = t.DefaultMaterialFactory(this)), this._defaultMaterial
|
|
},
|
|
set: function(e) {
|
|
this._defaultMaterial = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "texturesEnabled", {
|
|
get: function() {
|
|
return this._texturesEnabled
|
|
},
|
|
set: function(e) {
|
|
this._texturesEnabled !== e && (this._texturesEnabled = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "skeletonsEnabled", {
|
|
get: function() {
|
|
return this._skeletonsEnabled
|
|
},
|
|
set: function(e) {
|
|
this._skeletonsEnabled !== e && (this._skeletonsEnabled = e, this.markAllMaterialsAsDirty(A.a.MATERIAL_AttributesDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "collisionCoordinator", {
|
|
get: function() {
|
|
return this._collisionCoordinator || (this._collisionCoordinator = t.CollisionCoordinatorFactory(), this._collisionCoordinator.init(this)), this._collisionCoordinator
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "frustumPlanes", {
|
|
get: function() {
|
|
return this._frustumPlanes
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._registerTransientComponents = function() {
|
|
if (this._transientComponents.length > 0) {
|
|
for (var e = 0, t = this._transientComponents; e < t.length; e++) {
|
|
t[e].register()
|
|
}
|
|
this._transientComponents = []
|
|
}
|
|
}, t.prototype._addComponent = function(e) {
|
|
this._components.push(e), this._transientComponents.push(e);
|
|
var t = e;
|
|
t.addFromContainer && this._serializableComponents.push(t)
|
|
}, t.prototype._getComponent = function(e) {
|
|
for (var t = 0, i = this._components; t < i.length; t++) {
|
|
var n = i[t];
|
|
if (n.name === e) return n
|
|
}
|
|
return null
|
|
}, t.prototype.getClassName = function() {
|
|
return "Scene"
|
|
}, t.prototype._getDefaultMeshCandidates = function() {
|
|
return this._defaultMeshCandidates.data = this.meshes, this._defaultMeshCandidates.length = this.meshes.length, this._defaultMeshCandidates
|
|
}, t.prototype._getDefaultSubMeshCandidates = function(e) {
|
|
return this._defaultSubMeshCandidates.data = e.subMeshes, this._defaultSubMeshCandidates.length = e.subMeshes.length, this._defaultSubMeshCandidates
|
|
}, t.prototype.setDefaultCandidateProviders = function() {
|
|
this.getActiveMeshCandidates = this._getDefaultMeshCandidates.bind(this), this.getActiveSubMeshCandidates = this._getDefaultSubMeshCandidates.bind(this), this.getIntersectingSubMeshCandidates = this._getDefaultSubMeshCandidates.bind(this), this.getCollidingSubMeshCandidates = this._getDefaultSubMeshCandidates.bind(this)
|
|
}, Object.defineProperty(t.prototype, "meshUnderPointer", {
|
|
get: function() {
|
|
return this._inputManager.meshUnderPointer
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "pointerX", {
|
|
get: function() {
|
|
return this._inputManager.pointerX
|
|
},
|
|
set: function(e) {
|
|
this._inputManager.pointerX = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "pointerY", {
|
|
get: function() {
|
|
return this._inputManager.pointerY
|
|
},
|
|
set: function(e) {
|
|
this._inputManager.pointerY = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getCachedMaterial = function() {
|
|
return this._cachedMaterial
|
|
}, t.prototype.getCachedEffect = function() {
|
|
return this._cachedEffect
|
|
}, t.prototype.getCachedVisibility = function() {
|
|
return this._cachedVisibility
|
|
}, t.prototype.isCachedMaterialInvalid = function(e, t, i) {
|
|
return void 0 === i && (i = 1), this._cachedEffect !== t || this._cachedMaterial !== e || this._cachedVisibility !== i
|
|
}, t.prototype.getEngine = function() {
|
|
return this._engine
|
|
}, t.prototype.getTotalVertices = function() {
|
|
return this._totalVertices.current
|
|
}, Object.defineProperty(t.prototype, "totalVerticesPerfCounter", {
|
|
get: function() {
|
|
return this._totalVertices
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getActiveIndices = function() {
|
|
return this._activeIndices.current
|
|
}, Object.defineProperty(t.prototype, "totalActiveIndicesPerfCounter", {
|
|
get: function() {
|
|
return this._activeIndices
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getActiveParticles = function() {
|
|
return this._activeParticles.current
|
|
}, Object.defineProperty(t.prototype, "activeParticlesPerfCounter", {
|
|
get: function() {
|
|
return this._activeParticles
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getActiveBones = function() {
|
|
return this._activeBones.current
|
|
}, Object.defineProperty(t.prototype, "activeBonesPerfCounter", {
|
|
get: function() {
|
|
return this._activeBones
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getActiveMeshes = function() {
|
|
return this._activeMeshes
|
|
}, t.prototype.getAnimationRatio = function() {
|
|
return void 0 !== this._animationRatio ? this._animationRatio : 1
|
|
}, t.prototype.getRenderId = function() {
|
|
return this._renderId
|
|
}, t.prototype.getFrameId = function() {
|
|
return this._frameId
|
|
}, t.prototype.incrementRenderId = function() {
|
|
this._renderId++
|
|
}, t.prototype._createUbo = function() {
|
|
this._sceneUbo = new g.a(this._engine, void 0, !0), this._sceneUbo.addUniform("viewProjection", 16), this._sceneUbo.addUniform("view", 16)
|
|
}, t.prototype.simulatePointerMove = function(e, t) {
|
|
return this._inputManager.simulatePointerMove(e, t), this
|
|
}, t.prototype.simulatePointerDown = function(e, t) {
|
|
return this._inputManager.simulatePointerDown(e, t), this
|
|
}, t.prototype.simulatePointerUp = function(e, t, i) {
|
|
return this._inputManager.simulatePointerUp(e, t, i), this
|
|
}, t.prototype.isPointerCaptured = function(e) {
|
|
return void 0 === e && (e = 0), this._inputManager.isPointerCaptured(e)
|
|
}, t.prototype.attachControl = function(e, t, i) {
|
|
void 0 === e && (e = !0), void 0 === t && (t = !0), void 0 === i && (i = !0), this._inputManager.attachControl(e, t, i)
|
|
}, t.prototype.detachControl = function() {
|
|
this._inputManager.detachControl()
|
|
}, t.prototype.isReady = function() {
|
|
if (this._isDisposed) return !1;
|
|
var e, t = this.getEngine();
|
|
if (!t.areAllEffectsReady()) return !1;
|
|
if (this._pendingData.length > 0) return !1;
|
|
for (e = 0; e < this.meshes.length; e++) {
|
|
var i = this.meshes[e];
|
|
if (i.isEnabled() && (i.subMeshes && 0 !== i.subMeshes.length)) {
|
|
if (!i.isReady(!0)) return !1;
|
|
for (var n = "InstancedMesh" === i.getClassName() || "InstancedLinesMesh" === i.getClassName() || t.getCaps().instancedArrays && i.instances.length > 0, r = 0, o = this._isReadyForMeshStage; r < o.length; r++) {
|
|
if (!o[r].action(i, n)) return !1
|
|
}
|
|
}
|
|
}
|
|
for (e = 0; e < this.geometries.length; e++) {
|
|
if (this.geometries[e].delayLoadState === A.a.DELAYLOADSTATE_LOADING) return !1
|
|
}
|
|
if (this.activeCameras && this.activeCameras.length > 0)
|
|
for (var s = 0, a = this.activeCameras; s < a.length; s++) {
|
|
if (!a[s].isReady(!0)) return !1
|
|
} else if (this.activeCamera && !this.activeCamera.isReady(!0)) return !1;
|
|
for (var c = 0, l = this.particleSystems; c < l.length; c++) {
|
|
if (!l[c].isReady()) return !1
|
|
}
|
|
return !0
|
|
}, t.prototype.resetCachedMaterial = function() {
|
|
this._cachedMaterial = null, this._cachedEffect = null, this._cachedVisibility = null
|
|
}, t.prototype.registerBeforeRender = function(e) {
|
|
this.onBeforeRenderObservable.add(e)
|
|
}, t.prototype.unregisterBeforeRender = function(e) {
|
|
this.onBeforeRenderObservable.removeCallback(e)
|
|
}, t.prototype.registerAfterRender = function(e) {
|
|
this.onAfterRenderObservable.add(e)
|
|
}, t.prototype.unregisterAfterRender = function(e) {
|
|
this.onAfterRenderObservable.removeCallback(e)
|
|
}, t.prototype._executeOnceBeforeRender = function(e) {
|
|
var t = this,
|
|
i = function() {
|
|
e(), setTimeout(function() {
|
|
t.unregisterBeforeRender(i)
|
|
})
|
|
};
|
|
this.registerBeforeRender(i)
|
|
}, t.prototype.executeOnceBeforeRender = function(e, t) {
|
|
var i = this;
|
|
void 0 !== t ? setTimeout(function() {
|
|
i._executeOnceBeforeRender(e)
|
|
}, t) : this._executeOnceBeforeRender(e)
|
|
}, t.prototype._addPendingData = function(e) {
|
|
this._pendingData.push(e)
|
|
}, t.prototype._removePendingData = function(e) {
|
|
var t = this.isLoading,
|
|
i = this._pendingData.indexOf(e); - 1 !== i && this._pendingData.splice(i, 1), t && !this.isLoading && this.onDataLoadedObservable.notifyObservers(this)
|
|
}, t.prototype.getWaitingItemsCount = function() {
|
|
return this._pendingData.length
|
|
}, Object.defineProperty(t.prototype, "isLoading", {
|
|
get: function() {
|
|
return this._pendingData.length > 0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.executeWhenReady = function(e) {
|
|
var t = this;
|
|
this.onReadyObservable.add(e), -1 === this._executeWhenReadyTimeoutId && (this._executeWhenReadyTimeoutId = setTimeout(function() {
|
|
t._checkIsReady()
|
|
}, 150))
|
|
}, t.prototype.whenReadyAsync = function() {
|
|
var e = this;
|
|
return new Promise(function(t) {
|
|
e.executeWhenReady(function() {
|
|
t()
|
|
})
|
|
})
|
|
}, t.prototype._checkIsReady = function() {
|
|
var e = this;
|
|
if (this._registerTransientComponents(), this.isReady()) return this.onReadyObservable.notifyObservers(this), this.onReadyObservable.clear(), void(this._executeWhenReadyTimeoutId = -1);
|
|
this._executeWhenReadyTimeoutId = setTimeout(function() {
|
|
e._checkIsReady()
|
|
}, 150)
|
|
}, Object.defineProperty(t.prototype, "animatables", {
|
|
get: function() {
|
|
return this._activeAnimatables
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.resetLastAnimationTimeFrame = function() {
|
|
this._animationTimeLast = o.a.Now
|
|
}, t.prototype.getViewMatrix = function() {
|
|
return this._viewMatrix
|
|
}, t.prototype.getProjectionMatrix = function() {
|
|
return this._projectionMatrix
|
|
}, t.prototype.getTransformMatrix = function() {
|
|
return this._transformMatrix
|
|
}, t.prototype.setTransformMatrix = function(e, t, i, n) {
|
|
this._viewUpdateFlag === e.updateFlag && this._projectionUpdateFlag === t.updateFlag || (this._viewUpdateFlag = e.updateFlag, this._projectionUpdateFlag = t.updateFlag, this._viewMatrix = e, this._projectionMatrix = t, this._viewMatrix.multiplyToRef(this._projectionMatrix, this._transformMatrix), this._frustumPlanes ? u.i.GetPlanesToRef(this._transformMatrix, this._frustumPlanes) : this._frustumPlanes = u.i.GetPlanes(this._transformMatrix), this._multiviewSceneUbo && this._multiviewSceneUbo.useUbo ? this._updateMultiviewUbo(i, n) : this._sceneUbo.useUbo && (this._sceneUbo.updateMatrix("viewProjection", this._transformMatrix), this._sceneUbo.updateMatrix("view", this._viewMatrix), this._sceneUbo.update()))
|
|
}, t.prototype.getSceneUniformBuffer = function() {
|
|
return this._multiviewSceneUbo ? this._multiviewSceneUbo : this._sceneUbo
|
|
}, t.prototype.getUniqueId = function() {
|
|
var e = t._uniqueIdCounter;
|
|
return t._uniqueIdCounter++, e
|
|
}, t.prototype.addMesh = function(e, t) {
|
|
var i = this;
|
|
void 0 === t && (t = !1), this.meshes.push(e), e._resyncLightSources(), this.onNewMeshAddedObservable.notifyObservers(e), t && e.getChildMeshes().forEach(function(e) {
|
|
i.addMesh(e)
|
|
})
|
|
}, t.prototype.removeMesh = function(e, t) {
|
|
var i = this;
|
|
void 0 === t && (t = !1);
|
|
var n = this.meshes.indexOf(e);
|
|
return -1 !== n && (this.meshes[n] = this.meshes[this.meshes.length - 1], this.meshes.pop()), this.onMeshRemovedObservable.notifyObservers(e), t && e.getChildMeshes().forEach(function(e) {
|
|
i.removeMesh(e)
|
|
}), n
|
|
}, t.prototype.addTransformNode = function(e) {
|
|
e._indexInSceneTransformNodesArray = this.transformNodes.length, this.transformNodes.push(e), this.onNewTransformNodeAddedObservable.notifyObservers(e)
|
|
}, t.prototype.removeTransformNode = function(e) {
|
|
var t = e._indexInSceneTransformNodesArray;
|
|
if (-1 !== t) {
|
|
if (t !== this.transformNodes.length - 1) {
|
|
var i = this.transformNodes[this.transformNodes.length - 1];
|
|
this.transformNodes[t] = i, i._indexInSceneTransformNodesArray = t
|
|
}
|
|
e._indexInSceneTransformNodesArray = -1, this.transformNodes.pop()
|
|
}
|
|
return this.onTransformNodeRemovedObservable.notifyObservers(e), t
|
|
}, t.prototype.removeSkeleton = function(e) {
|
|
var t = this.skeletons.indexOf(e);
|
|
return -1 !== t && (this.skeletons.splice(t, 1), this.onSkeletonRemovedObservable.notifyObservers(e)), t
|
|
}, t.prototype.removeMorphTargetManager = function(e) {
|
|
var t = this.morphTargetManagers.indexOf(e);
|
|
return -1 !== t && this.morphTargetManagers.splice(t, 1), t
|
|
}, t.prototype.removeLight = function(e) {
|
|
var t = this.lights.indexOf(e);
|
|
if (-1 !== t) {
|
|
for (var i = 0, n = this.meshes; i < n.length; i++) {
|
|
n[i]._removeLightSource(e)
|
|
}
|
|
this.lights.splice(t, 1), this.sortLightsByPriority()
|
|
}
|
|
return this.onLightRemovedObservable.notifyObservers(e), t
|
|
}, t.prototype.removeCamera = function(e) {
|
|
var t = this.cameras.indexOf(e); - 1 !== t && this.cameras.splice(t, 1);
|
|
var i = this.activeCameras.indexOf(e);
|
|
return -1 !== i && this.activeCameras.splice(i, 1), this.activeCamera === e && (this.cameras.length > 0 ? this.activeCamera = this.cameras[0] : this.activeCamera = null), this.onCameraRemovedObservable.notifyObservers(e), t
|
|
}, t.prototype.removeParticleSystem = function(e) {
|
|
var t = this.particleSystems.indexOf(e);
|
|
return -1 !== t && this.particleSystems.splice(t, 1), t
|
|
}, t.prototype.removeAnimation = function(e) {
|
|
var t = this.animations.indexOf(e);
|
|
return -1 !== t && this.animations.splice(t, 1), t
|
|
}, t.prototype.stopAnimation = function(e, t, i) {}, t.prototype.removeAnimationGroup = function(e) {
|
|
var t = this.animationGroups.indexOf(e);
|
|
return -1 !== t && this.animationGroups.splice(t, 1), t
|
|
}, t.prototype.removeMultiMaterial = function(e) {
|
|
var t = this.multiMaterials.indexOf(e);
|
|
return -1 !== t && this.multiMaterials.splice(t, 1), t
|
|
}, t.prototype.removeMaterial = function(e) {
|
|
var t = e._indexInSceneMaterialArray;
|
|
if (-1 !== t && t < this.materials.length) {
|
|
if (t !== this.materials.length - 1) {
|
|
var i = this.materials[this.materials.length - 1];
|
|
this.materials[t] = i, i._indexInSceneMaterialArray = t
|
|
}
|
|
e._indexInSceneMaterialArray = -1, this.materials.pop()
|
|
}
|
|
return this.onMaterialRemovedObservable.notifyObservers(e), t
|
|
}, t.prototype.removeActionManager = function(e) {
|
|
var t = this.actionManagers.indexOf(e);
|
|
return -1 !== t && this.actionManagers.splice(t, 1), t
|
|
}, t.prototype.removeTexture = function(e) {
|
|
var t = this.textures.indexOf(e);
|
|
return -1 !== t && this.textures.splice(t, 1), this.onTextureRemovedObservable.notifyObservers(e), t
|
|
}, t.prototype.addLight = function(e) {
|
|
this.lights.push(e), this.sortLightsByPriority();
|
|
for (var t = 0, i = this.meshes; t < i.length; t++) {
|
|
var n = i[t]; - 1 === n.lightSources.indexOf(e) && (n.lightSources.push(e), n._resyncLightSources())
|
|
}
|
|
this.onNewLightAddedObservable.notifyObservers(e)
|
|
}, t.prototype.sortLightsByPriority = function() {
|
|
this.requireLightSorting && this.lights.sort(m.a.CompareLightsPriority)
|
|
}, t.prototype.addCamera = function(e) {
|
|
this.cameras.push(e), this.onNewCameraAddedObservable.notifyObservers(e)
|
|
}, t.prototype.addSkeleton = function(e) {
|
|
this.skeletons.push(e), this.onNewSkeletonAddedObservable.notifyObservers(e)
|
|
}, t.prototype.addParticleSystem = function(e) {
|
|
this.particleSystems.push(e)
|
|
}, t.prototype.addAnimation = function(e) {
|
|
this.animations.push(e)
|
|
}, t.prototype.addAnimationGroup = function(e) {
|
|
this.animationGroups.push(e)
|
|
}, t.prototype.addMultiMaterial = function(e) {
|
|
this.multiMaterials.push(e)
|
|
}, t.prototype.addMaterial = function(e) {
|
|
e._indexInSceneMaterialArray = this.materials.length, this.materials.push(e), this.onNewMaterialAddedObservable.notifyObservers(e)
|
|
}, t.prototype.addMorphTargetManager = function(e) {
|
|
this.morphTargetManagers.push(e)
|
|
}, t.prototype.addGeometry = function(e) {
|
|
this.geometriesByUniqueId && (this.geometriesByUniqueId[e.uniqueId] = this.geometries.length), this.geometries.push(e)
|
|
}, t.prototype.addActionManager = function(e) {
|
|
this.actionManagers.push(e)
|
|
}, t.prototype.addTexture = function(e) {
|
|
this.textures.push(e), this.onNewTextureAddedObservable.notifyObservers(e)
|
|
}, t.prototype.switchActiveCamera = function(e, t) {
|
|
void 0 === t && (t = !0);
|
|
var i = this._engine.getRenderingCanvas();
|
|
i && (this.activeCamera && this.activeCamera.detachControl(i), this.activeCamera = e, t && e.attachControl(i))
|
|
}, t.prototype.setActiveCameraByID = function(e) {
|
|
var t = this.getCameraByID(e);
|
|
return t ? (this.activeCamera = t, t) : null
|
|
}, t.prototype.setActiveCameraByName = function(e) {
|
|
var t = this.getCameraByName(e);
|
|
return t ? (this.activeCamera = t, t) : null
|
|
}, t.prototype.getAnimationGroupByName = function(e) {
|
|
for (var t = 0; t < this.animationGroups.length; t++)
|
|
if (this.animationGroups[t].name === e) return this.animationGroups[t];
|
|
return null
|
|
}, t.prototype.getMaterialByUniqueID = function(e) {
|
|
for (var t = 0; t < this.materials.length; t++)
|
|
if (this.materials[t].uniqueId === e) return this.materials[t];
|
|
return null
|
|
}, t.prototype.getMaterialByID = function(e) {
|
|
for (var t = 0; t < this.materials.length; t++)
|
|
if (this.materials[t].id === e) return this.materials[t];
|
|
return null
|
|
}, t.prototype.getMaterialByName = function(e) {
|
|
for (var t = 0; t < this.materials.length; t++)
|
|
if (this.materials[t].name === e) return this.materials[t];
|
|
return null
|
|
}, t.prototype.getCameraByID = function(e) {
|
|
for (var t = 0; t < this.cameras.length; t++)
|
|
if (this.cameras[t].id === e) return this.cameras[t];
|
|
return null
|
|
}, t.prototype.getCameraByUniqueID = function(e) {
|
|
for (var t = 0; t < this.cameras.length; t++)
|
|
if (this.cameras[t].uniqueId === e) return this.cameras[t];
|
|
return null
|
|
}, t.prototype.getCameraByName = function(e) {
|
|
for (var t = 0; t < this.cameras.length; t++)
|
|
if (this.cameras[t].name === e) return this.cameras[t];
|
|
return null
|
|
}, t.prototype.getBoneByID = function(e) {
|
|
for (var t = 0; t < this.skeletons.length; t++)
|
|
for (var i = this.skeletons[t], n = 0; n < i.bones.length; n++)
|
|
if (i.bones[n].id === e) return i.bones[n];
|
|
return null
|
|
}, t.prototype.getBoneByName = function(e) {
|
|
for (var t = 0; t < this.skeletons.length; t++)
|
|
for (var i = this.skeletons[t], n = 0; n < i.bones.length; n++)
|
|
if (i.bones[n].name === e) return i.bones[n];
|
|
return null
|
|
}, t.prototype.getLightByName = function(e) {
|
|
for (var t = 0; t < this.lights.length; t++)
|
|
if (this.lights[t].name === e) return this.lights[t];
|
|
return null
|
|
}, t.prototype.getLightByID = function(e) {
|
|
for (var t = 0; t < this.lights.length; t++)
|
|
if (this.lights[t].id === e) return this.lights[t];
|
|
return null
|
|
}, t.prototype.getLightByUniqueID = function(e) {
|
|
for (var t = 0; t < this.lights.length; t++)
|
|
if (this.lights[t].uniqueId === e) return this.lights[t];
|
|
return null
|
|
}, t.prototype.getParticleSystemByID = function(e) {
|
|
for (var t = 0; t < this.particleSystems.length; t++)
|
|
if (this.particleSystems[t].id === e) return this.particleSystems[t];
|
|
return null
|
|
}, t.prototype.getGeometryByID = function(e) {
|
|
for (var t = 0; t < this.geometries.length; t++)
|
|
if (this.geometries[t].id === e) return this.geometries[t];
|
|
return null
|
|
}, t.prototype._getGeometryByUniqueID = function(e) {
|
|
if (this.geometriesByUniqueId) {
|
|
var t = this.geometriesByUniqueId[e];
|
|
if (void 0 !== t) return this.geometries[t]
|
|
} else
|
|
for (var i = 0; i < this.geometries.length; i++)
|
|
if (this.geometries[i].uniqueId === e) return this.geometries[i];
|
|
return null
|
|
}, t.prototype.pushGeometry = function(e, t) {
|
|
return !(!t && this._getGeometryByUniqueID(e.uniqueId)) && (this.addGeometry(e), this.onNewGeometryAddedObservable.notifyObservers(e), !0)
|
|
}, t.prototype.removeGeometry = function(e) {
|
|
var t;
|
|
if (this.geometriesByUniqueId) {
|
|
if (void 0 === (t = this.geometriesByUniqueId[e.uniqueId])) return !1
|
|
} else if ((t = this.geometries.indexOf(e)) < 0) return !1;
|
|
if (t !== this.geometries.length - 1) {
|
|
var i = this.geometries[this.geometries.length - 1];
|
|
this.geometries[t] = i, this.geometriesByUniqueId && (this.geometriesByUniqueId[i.uniqueId] = t, this.geometriesByUniqueId[e.uniqueId] = void 0)
|
|
}
|
|
return this.geometries.pop(), this.onGeometryRemovedObservable.notifyObservers(e), !0
|
|
}, t.prototype.getGeometries = function() {
|
|
return this.geometries
|
|
}, t.prototype.getMeshByID = function(e) {
|
|
for (var t = 0; t < this.meshes.length; t++)
|
|
if (this.meshes[t].id === e) return this.meshes[t];
|
|
return null
|
|
}, t.prototype.getMeshesByID = function(e) {
|
|
return this.meshes.filter(function(t) {
|
|
return t.id === e
|
|
})
|
|
}, t.prototype.getTransformNodeByID = function(e) {
|
|
for (var t = 0; t < this.transformNodes.length; t++)
|
|
if (this.transformNodes[t].id === e) return this.transformNodes[t];
|
|
return null
|
|
}, t.prototype.getTransformNodeByUniqueID = function(e) {
|
|
for (var t = 0; t < this.transformNodes.length; t++)
|
|
if (this.transformNodes[t].uniqueId === e) return this.transformNodes[t];
|
|
return null
|
|
}, t.prototype.getTransformNodesByID = function(e) {
|
|
return this.transformNodes.filter(function(t) {
|
|
return t.id === e
|
|
})
|
|
}, t.prototype.getMeshByUniqueID = function(e) {
|
|
for (var t = 0; t < this.meshes.length; t++)
|
|
if (this.meshes[t].uniqueId === e) return this.meshes[t];
|
|
return null
|
|
}, t.prototype.getLastMeshByID = function(e) {
|
|
for (var t = this.meshes.length - 1; t >= 0; t--)
|
|
if (this.meshes[t].id === e) return this.meshes[t];
|
|
return null
|
|
}, t.prototype.getLastEntryByID = function(e) {
|
|
var t;
|
|
for (t = this.meshes.length - 1; t >= 0; t--)
|
|
if (this.meshes[t].id === e) return this.meshes[t];
|
|
for (t = this.transformNodes.length - 1; t >= 0; t--)
|
|
if (this.transformNodes[t].id === e) return this.transformNodes[t];
|
|
for (t = this.cameras.length - 1; t >= 0; t--)
|
|
if (this.cameras[t].id === e) return this.cameras[t];
|
|
for (t = this.lights.length - 1; t >= 0; t--)
|
|
if (this.lights[t].id === e) return this.lights[t];
|
|
return null
|
|
}, t.prototype.getNodeByID = function(e) {
|
|
var t = this.getMeshByID(e);
|
|
if (t) return t;
|
|
var i = this.getTransformNodeByID(e);
|
|
if (i) return i;
|
|
var n = this.getLightByID(e);
|
|
if (n) return n;
|
|
var r = this.getCameraByID(e);
|
|
if (r) return r;
|
|
var o = this.getBoneByID(e);
|
|
return o || null
|
|
}, t.prototype.getNodeByName = function(e) {
|
|
var t = this.getMeshByName(e);
|
|
if (t) return t;
|
|
var i = this.getTransformNodeByName(e);
|
|
if (i) return i;
|
|
var n = this.getLightByName(e);
|
|
if (n) return n;
|
|
var r = this.getCameraByName(e);
|
|
if (r) return r;
|
|
var o = this.getBoneByName(e);
|
|
return o || null
|
|
}, t.prototype.getMeshByName = function(e) {
|
|
for (var t = 0; t < this.meshes.length; t++)
|
|
if (this.meshes[t].name === e) return this.meshes[t];
|
|
return null
|
|
}, t.prototype.getTransformNodeByName = function(e) {
|
|
for (var t = 0; t < this.transformNodes.length; t++)
|
|
if (this.transformNodes[t].name === e) return this.transformNodes[t];
|
|
return null
|
|
}, t.prototype.getLastSkeletonByID = function(e) {
|
|
for (var t = this.skeletons.length - 1; t >= 0; t--)
|
|
if (this.skeletons[t].id === e) return this.skeletons[t];
|
|
return null
|
|
}, t.prototype.getSkeletonByUniqueId = function(e) {
|
|
for (var t = 0; t < this.skeletons.length; t++)
|
|
if (this.skeletons[t].uniqueId === e) return this.skeletons[t];
|
|
return null
|
|
}, t.prototype.getSkeletonById = function(e) {
|
|
for (var t = 0; t < this.skeletons.length; t++)
|
|
if (this.skeletons[t].id === e) return this.skeletons[t];
|
|
return null
|
|
}, t.prototype.getSkeletonByName = function(e) {
|
|
for (var t = 0; t < this.skeletons.length; t++)
|
|
if (this.skeletons[t].name === e) return this.skeletons[t];
|
|
return null
|
|
}, t.prototype.getMorphTargetManagerById = function(e) {
|
|
for (var t = 0; t < this.morphTargetManagers.length; t++)
|
|
if (this.morphTargetManagers[t].uniqueId === e) return this.morphTargetManagers[t];
|
|
return null
|
|
}, t.prototype.getMorphTargetById = function(e) {
|
|
for (var t = 0; t < this.morphTargetManagers.length; ++t)
|
|
for (var i = this.morphTargetManagers[t], n = 0; n < i.numTargets; ++n) {
|
|
var r = i.getTarget(n);
|
|
if (r.id === e) return r
|
|
}
|
|
return null
|
|
}, t.prototype.isActiveMesh = function(e) {
|
|
return -1 !== this._activeMeshes.indexOf(e)
|
|
}, Object.defineProperty(t.prototype, "uid", {
|
|
get: function() {
|
|
return this._uid || (this._uid = r.h.RandomId()), this._uid
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.addExternalData = function(e, t) {
|
|
return this._externalData || (this._externalData = new c.a), this._externalData.add(e, t)
|
|
}, t.prototype.getExternalData = function(e) {
|
|
return this._externalData ? this._externalData.get(e) : null
|
|
}, t.prototype.getOrAddExternalDataWithFactory = function(e, t) {
|
|
return this._externalData || (this._externalData = new c.a), this._externalData.getOrAddWithFactory(e, t)
|
|
}, t.prototype.removeExternalData = function(e) {
|
|
return this._externalData.remove(e)
|
|
}, t.prototype._evaluateSubMesh = function(e, t, i) {
|
|
if (i.isAnInstance || this.dispatchAllSubMeshesOfActiveMeshes || t.alwaysSelectAsActiveMesh || 1 === t.subMeshes.length || e.isInFrustum(this._frustumPlanes)) {
|
|
for (var n = 0, r = this._evaluateSubMeshStage; n < r.length; n++) {
|
|
r[n].action(t, e)
|
|
}
|
|
var o = e.getMaterial();
|
|
null != o && (o.hasRenderTargetTextures && null != o.getRenderTargetTextures && -1 === this._processedMaterials.indexOf(o) && (this._processedMaterials.push(o), this._renderTargets.concatWithNoDuplicate(o.getRenderTargetTextures())), this._activeIndices.addCount(e.indexCount, !1), this._renderingManager.dispatch(e, t, o))
|
|
}
|
|
}, t.prototype.freeProcessedMaterials = function() {
|
|
this._processedMaterials.dispose()
|
|
}, Object.defineProperty(t.prototype, "blockfreeActiveMeshesAndRenderingGroups", {
|
|
get: function() {
|
|
return this._preventFreeActiveMeshesAndRenderingGroups
|
|
},
|
|
set: function(e) {
|
|
this._preventFreeActiveMeshesAndRenderingGroups !== e && (e && (this.freeActiveMeshes(), this.freeRenderingGroups()), this._preventFreeActiveMeshesAndRenderingGroups = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.freeActiveMeshes = function() {
|
|
if (!this.blockfreeActiveMeshesAndRenderingGroups && (this._activeMeshes.dispose(), this.activeCamera && this.activeCamera._activeMeshes && this.activeCamera._activeMeshes.dispose(), this.activeCameras))
|
|
for (var e = 0; e < this.activeCameras.length; e++) {
|
|
var t = this.activeCameras[e];
|
|
t && t._activeMeshes && t._activeMeshes.dispose()
|
|
}
|
|
}, t.prototype.freeRenderingGroups = function() {
|
|
if (!this.blockfreeActiveMeshesAndRenderingGroups && (this._renderingManager && this._renderingManager.freeRenderingGroups(), this.textures))
|
|
for (var e = 0; e < this.textures.length; e++) {
|
|
var t = this.textures[e];
|
|
t && t.renderList && t.freeRenderingGroups()
|
|
}
|
|
}, t.prototype._isInIntermediateRendering = function() {
|
|
return this._intermediateRendering
|
|
}, t.prototype.freezeActiveMeshes = function() {
|
|
if (!this.activeCamera) return this;
|
|
this._frustumPlanes || this.setTransformMatrix(this.activeCamera.getViewMatrix(), this.activeCamera.getProjectionMatrix()), this._evaluateActiveMeshes(), this._activeMeshesFrozen = !0;
|
|
for (var e = 0; e < this._activeMeshes.length; e++) this._activeMeshes.data[e]._freeze();
|
|
return this
|
|
}, t.prototype.unfreezeActiveMeshes = function() {
|
|
for (var e = 0; e < this._activeMeshes.length; e++) this._activeMeshes.data[e]._unFreeze();
|
|
return this._activeMeshesFrozen = !1, this
|
|
}, t.prototype._evaluateActiveMeshes = function() {
|
|
if (this._activeMeshesFrozen && this._activeMeshes.length)
|
|
for (var e = this._activeMeshes.length, t = 0; t < e; t++) {
|
|
(s = this._activeMeshes.data[t]).computeWorldMatrix()
|
|
} else if (this.activeCamera) {
|
|
this.onBeforeActiveMeshesEvaluationObservable.notifyObservers(this), this.activeCamera._activeMeshes.reset(), this._activeMeshes.reset(), this._renderingManager.reset(), this._processedMaterials.reset(), this._activeParticleSystems.reset(), this._activeSkeletons.reset(), this._softwareSkinnedMeshes.reset();
|
|
for (var i = 0, n = this._beforeEvaluateActiveMeshStage; i < n.length; i++) {
|
|
n[i].action()
|
|
}
|
|
var r = this.getActiveMeshCandidates(),
|
|
o = r.length;
|
|
for (t = 0; t < o; t++) {
|
|
var s;
|
|
if (!(s = r.data[t]).isBlocked && (this._totalVertices.addCount(s.getTotalVertices(), !1), s.isReady() && s.isEnabled() && 0 !== s.scaling.lengthSquared())) {
|
|
s.computeWorldMatrix(), s.actionManager && s.actionManager.hasSpecificTriggers2(A.a.ACTION_OnIntersectionEnterTrigger, A.a.ACTION_OnIntersectionExitTrigger) && this._meshesForIntersections.pushNoDuplicate(s);
|
|
var a = this.customLODSelector ? this.customLODSelector(s, this.activeCamera) : s.getLOD(this.activeCamera);
|
|
null != a && (a !== s && a.billboardMode !== h.a.BILLBOARDMODE_NONE && a.computeWorldMatrix(), s._preActivate(), s.isVisible && s.visibility > 0 && 0 != (s.layerMask & this.activeCamera.layerMask) && (s.alwaysSelectAsActiveMesh || s.isInFrustum(this._frustumPlanes)) && (this._activeMeshes.push(s), this.activeCamera._activeMeshes.push(s), a !== s && a._activate(this._renderId, !1), s._activate(this._renderId, !1) && (s.isAnInstance || (a._internalAbstractMeshDataInfo._onlyForInstances = !1), a._internalAbstractMeshDataInfo._isActive = !0, this._activeMesh(s, a)), s._postActivate()))
|
|
}
|
|
}
|
|
if (this.onAfterActiveMeshesEvaluationObservable.notifyObservers(this), this.particlesEnabled) {
|
|
this.onBeforeParticlesRenderingObservable.notifyObservers(this);
|
|
for (var c = 0; c < this.particleSystems.length; c++) {
|
|
var l = this.particleSystems[c];
|
|
if (l.isStarted() && l.emitter) {
|
|
var u = l.emitter;
|
|
u.position && !u.isEnabled() || (this._activeParticleSystems.push(l), l.animate(), this._renderingManager.dispatchParticles(l))
|
|
}
|
|
}
|
|
this.onAfterParticlesRenderingObservable.notifyObservers(this)
|
|
}
|
|
}
|
|
}, t.prototype._activeMesh = function(e, t) {
|
|
this._skeletonsEnabled && null !== t.skeleton && void 0 !== t.skeleton && (this._activeSkeletons.pushNoDuplicate(t.skeleton) && t.skeleton.prepare(), t.computeBonesUsingShaders || this._softwareSkinnedMeshes.pushNoDuplicate(t));
|
|
for (var i = 0, n = this._activeMeshStage; i < n.length; i++) {
|
|
n[i].action(e, t)
|
|
}
|
|
if (null != t && void 0 !== t.subMeshes && null !== t.subMeshes && t.subMeshes.length > 0)
|
|
for (var r = this.getActiveSubMeshCandidates(t), o = r.length, s = 0; s < o; s++) {
|
|
var a = r.data[s];
|
|
this._evaluateSubMesh(a, t, e)
|
|
}
|
|
}, t.prototype.updateTransformMatrix = function(e) {
|
|
this.activeCamera && this.setTransformMatrix(this.activeCamera.getViewMatrix(), this.activeCamera.getProjectionMatrix(e))
|
|
}, t.prototype._bindFrameBuffer = function() {
|
|
if (this.activeCamera && this.activeCamera._multiviewTexture) this.activeCamera._multiviewTexture._bindFrameBuffer();
|
|
else if (this.activeCamera && this.activeCamera.outputRenderTarget) {
|
|
if (this.getEngine().getCaps().multiview && this.activeCamera.outputRenderTarget && this.activeCamera.outputRenderTarget.getViewCount() > 1) this.activeCamera.outputRenderTarget._bindFrameBuffer();
|
|
else {
|
|
var e = this.activeCamera.outputRenderTarget.getInternalTexture();
|
|
e ? this.getEngine().bindFramebuffer(e) : R.a.Error("Camera contains invalid customDefaultRenderTarget")
|
|
}
|
|
} else this.getEngine().restoreDefaultFramebuffer()
|
|
}, t.prototype._renderForCamera = function(e, t) {
|
|
if (!e || !e._skipRendering) {
|
|
var i = this._engine;
|
|
if (this._activeCamera = e, !this.activeCamera) throw new Error("Active camera not set");
|
|
i.setViewport(this.activeCamera.viewport), this.resetCachedMaterial(), this._renderId++, this.getEngine().getCaps().multiview && e.outputRenderTarget && e.outputRenderTarget.getViewCount() > 1 ? this.setTransformMatrix(e._rigCameras[0].getViewMatrix(), e._rigCameras[0].getProjectionMatrix(), e._rigCameras[1].getViewMatrix(), e._rigCameras[1].getProjectionMatrix()) : this.updateTransformMatrix(), this.onBeforeCameraRenderObservable.notifyObservers(this.activeCamera), this._evaluateActiveMeshes();
|
|
for (var n = 0; n < this._softwareSkinnedMeshes.length; n++) {
|
|
var o = this._softwareSkinnedMeshes.data[n];
|
|
o.applySkeleton(o.skeleton)
|
|
}
|
|
this.onBeforeRenderTargetsRenderObservable.notifyObservers(this), e.customRenderTargets && e.customRenderTargets.length > 0 && this._renderTargets.concatWithNoDuplicate(e.customRenderTargets), t && t.customRenderTargets && t.customRenderTargets.length > 0 && this._renderTargets.concatWithNoDuplicate(t.customRenderTargets);
|
|
for (var s = 0, a = this._gatherActiveCameraRenderTargetsStage; s < a.length; s++) {
|
|
a[s].action(this._renderTargets)
|
|
}
|
|
if (this.renderTargetsEnabled) {
|
|
this._intermediateRendering = !0;
|
|
var c = !1;
|
|
if (this._renderTargets.length > 0) {
|
|
r.h.StartPerformanceCounter("Render targets", this._renderTargets.length > 0);
|
|
for (var l = 0; l < this._renderTargets.length; l++) {
|
|
var u = this._renderTargets.data[l];
|
|
if (u._shouldRender()) {
|
|
this._renderId++;
|
|
var h = u.activeCamera && u.activeCamera !== this.activeCamera;
|
|
u.render(h, this.dumpNextRenderTargets), c = !0
|
|
}
|
|
}
|
|
r.h.EndPerformanceCounter("Render targets", this._renderTargets.length > 0), this._renderId++
|
|
}
|
|
for (var d = 0, f = this._cameraDrawRenderTargetStage; d < f.length; d++) {
|
|
c = f[d].action(this.activeCamera) || c
|
|
}
|
|
this._intermediateRendering = !1, c && this._bindFrameBuffer()
|
|
}
|
|
this.onAfterRenderTargetsRenderObservable.notifyObservers(this), this.postProcessManager && !e._multiviewTexture && this.postProcessManager._prepareFrame();
|
|
for (var p = 0, _ = this._beforeCameraDrawStage; p < _.length; p++) {
|
|
_[p].action(this.activeCamera)
|
|
}
|
|
this.onBeforeDrawPhaseObservable.notifyObservers(this), this._renderingManager.render(null, null, !0, !0), this.onAfterDrawPhaseObservable.notifyObservers(this);
|
|
for (var g = 0, m = this._afterCameraDrawStage; g < m.length; g++) {
|
|
m[g].action(this.activeCamera)
|
|
}
|
|
this.postProcessManager && !e._multiviewTexture && this.postProcessManager._finalizeFrame(e.isIntermediate), this._renderTargets.reset(), this.onAfterCameraRenderObservable.notifyObservers(this.activeCamera)
|
|
}
|
|
}, t.prototype._processSubCameras = function(e) {
|
|
if (e.cameraRigMode === f.a.RIG_MODE_NONE || e.outputRenderTarget && e.outputRenderTarget.getViewCount() > 1 && this.getEngine().getCaps().multiview) this._renderForCamera(e);
|
|
else {
|
|
if (e._useMultiviewToSingleView) this._renderMultiviewToSingleView(e);
|
|
else
|
|
for (var t = 0; t < e._rigCameras.length; t++) this._renderForCamera(e._rigCameras[t], e);
|
|
this._activeCamera = e, this.setTransformMatrix(this._activeCamera.getViewMatrix(), this._activeCamera.getProjectionMatrix())
|
|
}
|
|
}, t.prototype._checkIntersections = function() {
|
|
for (var e = 0; e < this._meshesForIntersections.length; e++) {
|
|
var t = this._meshesForIntersections.data[e];
|
|
if (t.actionManager)
|
|
for (var i = 0; t.actionManager && i < t.actionManager.actions.length; i++) {
|
|
var n = t.actionManager.actions[i];
|
|
if (n.trigger === A.a.ACTION_OnIntersectionEnterTrigger || n.trigger === A.a.ACTION_OnIntersectionExitTrigger) {
|
|
var r = n.getTriggerParameter(),
|
|
o = r instanceof d.a ? r : r.mesh,
|
|
s = o.intersectsMesh(t, r.usePreciseIntersection),
|
|
a = t._intersectionsInProgress.indexOf(o);
|
|
s && -1 === a ? n.trigger === A.a.ACTION_OnIntersectionEnterTrigger ? (n._executeCurrent(y.a.CreateNew(t, void 0, o)), t._intersectionsInProgress.push(o)) : n.trigger === A.a.ACTION_OnIntersectionExitTrigger && t._intersectionsInProgress.push(o) : !s && a > -1 && (n.trigger === A.a.ACTION_OnIntersectionExitTrigger && n._executeCurrent(y.a.CreateNew(t, void 0, o)), t.actionManager.hasSpecificTrigger(A.a.ACTION_OnIntersectionExitTrigger, function(e) {
|
|
var t = e instanceof d.a ? e : e.mesh;
|
|
return o === t
|
|
}) && n.trigger !== A.a.ACTION_OnIntersectionExitTrigger || t._intersectionsInProgress.splice(a, 1))
|
|
}
|
|
}
|
|
}
|
|
}, t.prototype._advancePhysicsEngineStep = function(e) {}, t.prototype._animate = function() {}, t.prototype.animate = function() {
|
|
if (this._engine.isDeterministicLockStep()) {
|
|
var e = Math.max(t.MinDeltaTime, Math.min(this._engine.getDeltaTime(), t.MaxDeltaTime)) + this._timeAccumulator,
|
|
i = this.getDeterministicFrameTime(),
|
|
n = 0,
|
|
r = this._engine.getLockstepMaxSteps(),
|
|
o = Math.floor(e / 60);
|
|
o = Math.min(o, r);
|
|
do {
|
|
this.onBeforeStepObservable.notifyObservers(this), this._animationRatio = .06 * i, this._animate(), this.onAfterAnimationsObservable.notifyObservers(this), this._advancePhysicsEngineStep(i), this.onAfterStepObservable.notifyObservers(this), this._currentStepId++, n++, e -= i
|
|
} while (e > 0 && n < o);
|
|
this._timeAccumulator = e < 0 ? 0 : e
|
|
} else {
|
|
e = this.useConstantAnimationDeltaTime ? 16 : Math.max(t.MinDeltaTime, Math.min(this._engine.getDeltaTime(), t.MaxDeltaTime));
|
|
this._animationRatio = .06 * e, this._animate(), this.onAfterAnimationsObservable.notifyObservers(this), this._advancePhysicsEngineStep(e)
|
|
}
|
|
}, t.prototype.render = function(e, t) {
|
|
if (void 0 === e && (e = !0), void 0 === t && (t = !1), !this.isDisposed) {
|
|
this._frameId++, this._registerTransientComponents(), this._activeParticles.fetchNewFrame(), this._totalVertices.fetchNewFrame(), this._activeIndices.fetchNewFrame(), this._activeBones.fetchNewFrame(), this._meshesForIntersections.reset(), this.resetCachedMaterial(), this.onBeforeAnimationsObservable.notifyObservers(this), this.actionManager && this.actionManager.processTrigger(A.a.ACTION_OnEveryFrameTrigger), t || this.animate();
|
|
for (var i = 0, n = this._beforeCameraUpdateStage; i < n.length; i++) {
|
|
n[i].action()
|
|
}
|
|
if (e)
|
|
if (this.activeCameras.length > 0)
|
|
for (var o = 0; o < this.activeCameras.length; o++) {
|
|
var s = this.activeCameras[o];
|
|
if (s.update(), s.cameraRigMode !== f.a.RIG_MODE_NONE)
|
|
for (var a = 0; a < s._rigCameras.length; a++) s._rigCameras[a].update()
|
|
} else if (this.activeCamera && (this.activeCamera.update(), this.activeCamera.cameraRigMode !== f.a.RIG_MODE_NONE))
|
|
for (a = 0; a < this.activeCamera._rigCameras.length; a++) this.activeCamera._rigCameras[a].update();
|
|
this.onBeforeRenderObservable.notifyObservers(this), this.onBeforeRenderTargetsRenderObservable.notifyObservers(this);
|
|
var c = this.getEngine(),
|
|
l = this.activeCamera;
|
|
if (this.renderTargetsEnabled) {
|
|
r.h.StartPerformanceCounter("Custom render targets", this.customRenderTargets.length > 0), this._intermediateRendering = !0;
|
|
for (var u = 0; u < this.customRenderTargets.length; u++) {
|
|
var h = this.customRenderTargets[u];
|
|
if (h._shouldRender()) {
|
|
if (this._renderId++, this.activeCamera = h.activeCamera || this.activeCamera, !this.activeCamera) throw new Error("Active camera not set");
|
|
c.setViewport(this.activeCamera.viewport), this.updateTransformMatrix(), h.render(l !== this.activeCamera, this.dumpNextRenderTargets)
|
|
}
|
|
}
|
|
r.h.EndPerformanceCounter("Custom render targets", this.customRenderTargets.length > 0), this._intermediateRendering = !1, this._renderId++
|
|
}
|
|
this.activeCamera = l, this._bindFrameBuffer(), this.onAfterRenderTargetsRenderObservable.notifyObservers(this);
|
|
for (var d = 0, p = this._beforeClearStage; d < p.length; d++) {
|
|
p[d].action()
|
|
}(this.autoClearDepthAndStencil || this.autoClear) && this._engine.clear(this.clearColor, this.autoClear || this.forceWireframe || this.forcePointsCloud, this.autoClearDepthAndStencil, this.autoClearDepthAndStencil);
|
|
for (var _ = 0, g = this._gatherRenderTargetsStage; _ < g.length; _++) {
|
|
g[_].action(this._renderTargets)
|
|
}
|
|
if (this.activeCameras.length > 0)
|
|
for (o = 0; o < this.activeCameras.length; o++) o > 0 && this._engine.clear(null, !1, !0, !0), this._processSubCameras(this.activeCameras[o]);
|
|
else {
|
|
if (!this.activeCamera) throw new Error("No camera defined");
|
|
this._processSubCameras(this.activeCamera)
|
|
}
|
|
this._checkIntersections();
|
|
for (var m = 0, v = this._afterRenderStage; m < v.length; m++) {
|
|
v[m].action()
|
|
}
|
|
if (this.afterRender && this.afterRender(), this.onAfterRenderObservable.notifyObservers(this), this._toBeDisposed.length) {
|
|
for (a = 0; a < this._toBeDisposed.length; a++) {
|
|
var y = this._toBeDisposed[a];
|
|
y && y.dispose()
|
|
}
|
|
this._toBeDisposed = []
|
|
}
|
|
this.dumpNextRenderTargets && (this.dumpNextRenderTargets = !1), this._activeBones.addCount(0, !0), this._activeIndices.addCount(0, !0), this._activeParticles.addCount(0, !0)
|
|
}
|
|
}, t.prototype.freezeMaterials = function() {
|
|
for (var e = 0; e < this.materials.length; e++) this.materials[e].freeze()
|
|
}, t.prototype.unfreezeMaterials = function() {
|
|
for (var e = 0; e < this.materials.length; e++) this.materials[e].unfreeze()
|
|
}, t.prototype.dispose = function() {
|
|
this.beforeRender = null, this.afterRender = null, this.skeletons = [], this.morphTargetManagers = [], this._transientComponents = [], this._isReadyForMeshStage.clear(), this._beforeEvaluateActiveMeshStage.clear(), this._evaluateSubMeshStage.clear(), this._activeMeshStage.clear(), this._cameraDrawRenderTargetStage.clear(), this._beforeCameraDrawStage.clear(), this._beforeRenderTargetDrawStage.clear(), this._beforeRenderingGroupDrawStage.clear(), this._beforeRenderingMeshStage.clear(), this._afterRenderingMeshStage.clear(), this._afterRenderingGroupDrawStage.clear(), this._afterCameraDrawStage.clear(), this._afterRenderTargetDrawStage.clear(), this._afterRenderStage.clear(), this._beforeCameraUpdateStage.clear(), this._beforeClearStage.clear(), this._gatherRenderTargetsStage.clear(), this._gatherActiveCameraRenderTargetsStage.clear(), this._pointerMoveStage.clear(), this._pointerDownStage.clear(), this._pointerUpStage.clear();
|
|
for (var e = 0, t = this._components; e < t.length; e++) {
|
|
t[e].dispose()
|
|
}
|
|
this.importedMeshesFiles = new Array, this.stopAllAnimations && this.stopAllAnimations(), this.resetCachedMaterial(), this.activeCamera && (this.activeCamera._activeMeshes.dispose(), this.activeCamera = null), this._activeMeshes.dispose(), this._renderingManager.dispose(), this._processedMaterials.dispose(), this._activeParticleSystems.dispose(), this._activeSkeletons.dispose(), this._softwareSkinnedMeshes.dispose(), this._renderTargets.dispose(), this._registeredForLateAnimationBindings.dispose(), this._meshesForIntersections.dispose(), this._toBeDisposed = [];
|
|
for (var i = 0, n = this._activeRequests; i < n.length; i++) {
|
|
n[i].abort()
|
|
}
|
|
this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear(), this.onBeforeRenderObservable.clear(), this.onAfterRenderObservable.clear(), this.onBeforeRenderTargetsRenderObservable.clear(), this.onAfterRenderTargetsRenderObservable.clear(), this.onAfterStepObservable.clear(), this.onBeforeStepObservable.clear(), this.onBeforeActiveMeshesEvaluationObservable.clear(), this.onAfterActiveMeshesEvaluationObservable.clear(), this.onBeforeParticlesRenderingObservable.clear(), this.onAfterParticlesRenderingObservable.clear(), this.onBeforeDrawPhaseObservable.clear(), this.onAfterDrawPhaseObservable.clear(), this.onBeforeAnimationsObservable.clear(), this.onAfterAnimationsObservable.clear(), this.onDataLoadedObservable.clear(), this.onBeforeRenderingGroupObservable.clear(), this.onAfterRenderingGroupObservable.clear(), this.onMeshImportedObservable.clear(), this.onBeforeCameraRenderObservable.clear(), this.onAfterCameraRenderObservable.clear(), this.onReadyObservable.clear(), this.onNewCameraAddedObservable.clear(), this.onCameraRemovedObservable.clear(), this.onNewLightAddedObservable.clear(), this.onLightRemovedObservable.clear(), this.onNewGeometryAddedObservable.clear(), this.onGeometryRemovedObservable.clear(), this.onNewTransformNodeAddedObservable.clear(), this.onTransformNodeRemovedObservable.clear(), this.onNewMeshAddedObservable.clear(), this.onMeshRemovedObservable.clear(), this.onNewSkeletonAddedObservable.clear(), this.onSkeletonRemovedObservable.clear(), this.onNewMaterialAddedObservable.clear(), this.onMaterialRemovedObservable.clear(), this.onNewTextureAddedObservable.clear(), this.onTextureRemovedObservable.clear(), this.onPrePointerObservable.clear(), this.onPointerObservable.clear(), this.onPreKeyboardObservable.clear(), this.onKeyboardObservable.clear(), this.onActiveCameraChanged.clear(), this.detachControl();
|
|
var r, o = this._engine.getRenderingCanvas();
|
|
if (o)
|
|
for (r = 0; r < this.cameras.length; r++) this.cameras[r].detachControl(o);
|
|
for (; this.animationGroups.length;) this.animationGroups[0].dispose();
|
|
for (; this.lights.length;) this.lights[0].dispose();
|
|
for (; this.meshes.length;) this.meshes[0].dispose(!0);
|
|
for (; this.transformNodes.length;) this.transformNodes[0].dispose(!0);
|
|
for (; this.cameras.length;) this.cameras[0].dispose();
|
|
for (this._defaultMaterial && this._defaultMaterial.dispose(); this.multiMaterials.length;) this.multiMaterials[0].dispose();
|
|
for (; this.materials.length;) this.materials[0].dispose();
|
|
for (; this.particleSystems.length;) this.particleSystems[0].dispose();
|
|
for (; this.postProcesses.length;) this.postProcesses[0].dispose();
|
|
for (; this.textures.length;) this.textures[0].dispose();
|
|
this._sceneUbo.dispose(), this._multiviewSceneUbo && this._multiviewSceneUbo.dispose(), this.postProcessManager.dispose(), (r = this._engine.scenes.indexOf(this)) > -1 && this._engine.scenes.splice(r, 1), this._engine.wipeCaches(!0), this._isDisposed = !0
|
|
}, Object.defineProperty(t.prototype, "isDisposed", {
|
|
get: function() {
|
|
return this._isDisposed
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.clearCachedVertexData = function() {
|
|
for (var e = 0; e < this.meshes.length; e++) {
|
|
var t = this.meshes[e].geometry;
|
|
if (t)
|
|
for (var i in t._indices = [], t._vertexBuffers) t._vertexBuffers.hasOwnProperty(i) && (t._vertexBuffers[i]._buffer._data = null)
|
|
}
|
|
}, t.prototype.cleanCachedTextureBuffer = function() {
|
|
for (var e = 0, t = this.textures; e < t.length; e++) {
|
|
var i = t[e];
|
|
i._buffer && (i._buffer = null)
|
|
}
|
|
}, t.prototype.getWorldExtends = function(e) {
|
|
var t = new u.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE),
|
|
i = new u.x(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
|
|
return e = e || function() {
|
|
return !0
|
|
}, this.meshes.filter(e).forEach(function(e) {
|
|
if (e.computeWorldMatrix(!0), e.subMeshes && 0 !== e.subMeshes.length && !e.infiniteDistance) {
|
|
var n = e.getBoundingInfo(),
|
|
o = n.boundingBox.minimumWorld,
|
|
s = n.boundingBox.maximumWorld;
|
|
r.h.CheckExtends(o, t, i), r.h.CheckExtends(s, t, i)
|
|
}
|
|
}), {
|
|
min: t,
|
|
max: i
|
|
}
|
|
}, t.prototype.createPickingRay = function(e, t, i, n, r) {
|
|
throw void 0 === r && (r = !1), S.a.WarnImport("Ray")
|
|
}, t.prototype.createPickingRayToRef = function(e, t, i, n, r, o) {
|
|
throw void 0 === o && (o = !1), S.a.WarnImport("Ray")
|
|
}, t.prototype.createPickingRayInCameraSpace = function(e, t, i) {
|
|
throw S.a.WarnImport("Ray")
|
|
}, t.prototype.createPickingRayInCameraSpaceToRef = function(e, t, i, n) {
|
|
throw S.a.WarnImport("Ray")
|
|
}, t.prototype.pick = function(e, t, i, n, r, o) {
|
|
var s = new v.a;
|
|
return s._pickingUnavailable = !0, s
|
|
}, t.prototype.pickWithRay = function(e, t, i, n) {
|
|
throw S.a.WarnImport("Ray")
|
|
}, t.prototype.multiPick = function(e, t, i, n, r) {
|
|
throw S.a.WarnImport("Ray")
|
|
}, t.prototype.multiPickWithRay = function(e, t, i) {
|
|
throw S.a.WarnImport("Ray")
|
|
}, t.prototype.setPointerOverMesh = function(e) {
|
|
this._inputManager.setPointerOverMesh(e)
|
|
}, t.prototype.getPointerOverMesh = function() {
|
|
return this._inputManager.getPointerOverMesh()
|
|
}, t.prototype._rebuildGeometries = function() {
|
|
for (var e = 0, t = this.geometries; e < t.length; e++) {
|
|
t[e]._rebuild()
|
|
}
|
|
for (var i = 0, n = this.meshes; i < n.length; i++) {
|
|
n[i]._rebuild()
|
|
}
|
|
this.postProcessManager && this.postProcessManager._rebuild();
|
|
for (var r = 0, o = this._components; r < o.length; r++) {
|
|
o[r].rebuild()
|
|
}
|
|
for (var s = 0, a = this.particleSystems; s < a.length; s++) {
|
|
a[s].rebuild()
|
|
}
|
|
}, t.prototype._rebuildTextures = function() {
|
|
for (var e = 0, t = this.textures; e < t.length; e++) {
|
|
t[e]._rebuild()
|
|
}
|
|
this.markAllMaterialsAsDirty(A.a.MATERIAL_TextureDirtyFlag)
|
|
}, t.prototype._getByTags = function(e, t, i) {
|
|
if (void 0 === t) return e;
|
|
var n = [];
|
|
for (var r in i = i || function(e) {}, e) {
|
|
var o = e[r];
|
|
l.a && l.a.MatchesQuery(o, t) && (n.push(o), i(o))
|
|
}
|
|
return n
|
|
}, t.prototype.getMeshesByTags = function(e, t) {
|
|
return this._getByTags(this.meshes, e, t)
|
|
}, t.prototype.getCamerasByTags = function(e, t) {
|
|
return this._getByTags(this.cameras, e, t)
|
|
}, t.prototype.getLightsByTags = function(e, t) {
|
|
return this._getByTags(this.lights, e, t)
|
|
}, t.prototype.getMaterialByTags = function(e, t) {
|
|
return this._getByTags(this.materials, e, t).concat(this._getByTags(this.multiMaterials, e, t))
|
|
}, t.prototype.setRenderingOrder = function(e, t, i, n) {
|
|
void 0 === t && (t = null), void 0 === i && (i = null), void 0 === n && (n = null), this._renderingManager.setRenderingOrder(e, t, i, n)
|
|
}, t.prototype.setRenderingAutoClearDepthStencil = function(e, t, i, n) {
|
|
void 0 === i && (i = !0), void 0 === n && (n = !0), this._renderingManager.setRenderingAutoClearDepthStencil(e, t, i, n)
|
|
}, t.prototype.getAutoClearDepthStencilSetup = function(e) {
|
|
return this._renderingManager.getAutoClearDepthStencilSetup(e)
|
|
}, Object.defineProperty(t.prototype, "blockMaterialDirtyMechanism", {
|
|
get: function() {
|
|
return this._blockMaterialDirtyMechanism
|
|
},
|
|
set: function(e) {
|
|
this._blockMaterialDirtyMechanism !== e && (this._blockMaterialDirtyMechanism = e, e || this.markAllMaterialsAsDirty(A.a.MATERIAL_AllDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.markAllMaterialsAsDirty = function(e, t) {
|
|
if (!this._blockMaterialDirtyMechanism)
|
|
for (var i = 0, n = this.materials; i < n.length; i++) {
|
|
var r = n[i];
|
|
t && !t(r) || r.markAsDirty(e)
|
|
}
|
|
}, t.prototype._loadFile = function(e, t, i, n, o, s) {
|
|
var a = this,
|
|
c = r.h.LoadFile(e, t, i, n ? this.offlineProvider : void 0, o, s);
|
|
return this._activeRequests.push(c), c.onCompleteObservable.add(function(e) {
|
|
a._activeRequests.splice(a._activeRequests.indexOf(e), 1)
|
|
}), c
|
|
}, t.prototype._loadFileAsync = function(e, t, i) {
|
|
var n = this;
|
|
return new Promise(function(r, o) {
|
|
n._loadFile(e, function(e) {
|
|
r(e)
|
|
}, void 0, t, i, function(e, t) {
|
|
o(t)
|
|
})
|
|
})
|
|
}, t._uniqueIdCounter = 0, t.FOGMODE_NONE = 0, t.FOGMODE_EXP = 1, t.FOGMODE_EXP2 = 2, t.FOGMODE_LINEAR = 3, t.MinDeltaTime = 1, t.MaxDeltaTime = 1e3, t
|
|
}(p.a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return o
|
|
}), i.d(t, "c", function() {
|
|
return s
|
|
}), i.d(t, "d", function() {
|
|
return a
|
|
}), i.d(t, "b", function() {
|
|
return c
|
|
});
|
|
var n = i(1),
|
|
r = i(0),
|
|
o = function() {
|
|
function e() {}
|
|
return e.POINTERDOWN = 1, e.POINTERUP = 2, e.POINTERMOVE = 4, e.POINTERWHEEL = 8, e.POINTERPICK = 16, e.POINTERTAP = 32, e.POINTERDOUBLETAP = 64, e
|
|
}(),
|
|
s = function() {
|
|
return function(e, t) {
|
|
this.type = e, this.event = t
|
|
}
|
|
}(),
|
|
a = function(e) {
|
|
function t(t, i, n, o) {
|
|
var s = e.call(this, t, i) || this;
|
|
return s.ray = null, s.skipOnPointerObservable = !1, s.localPosition = new r.w(n, o), s
|
|
}
|
|
return n.d(t, e), t
|
|
}(s),
|
|
c = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, i) || this;
|
|
return r.pickInfo = n, r
|
|
}
|
|
return n.d(t, e), t
|
|
}(s)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return o
|
|
});
|
|
var n = i(10),
|
|
r = i(3),
|
|
o = function() {
|
|
function e() {}
|
|
return Object.defineProperty(e, "DiffuseTextureEnabled", {
|
|
get: function() {
|
|
return this._DiffuseTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._DiffuseTextureEnabled !== e && (this._DiffuseTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "AmbientTextureEnabled", {
|
|
get: function() {
|
|
return this._AmbientTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._AmbientTextureEnabled !== e && (this._AmbientTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "OpacityTextureEnabled", {
|
|
get: function() {
|
|
return this._OpacityTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._OpacityTextureEnabled !== e && (this._OpacityTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ReflectionTextureEnabled", {
|
|
get: function() {
|
|
return this._ReflectionTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._ReflectionTextureEnabled !== e && (this._ReflectionTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "EmissiveTextureEnabled", {
|
|
get: function() {
|
|
return this._EmissiveTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._EmissiveTextureEnabled !== e && (this._EmissiveTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "SpecularTextureEnabled", {
|
|
get: function() {
|
|
return this._SpecularTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._SpecularTextureEnabled !== e && (this._SpecularTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "BumpTextureEnabled", {
|
|
get: function() {
|
|
return this._BumpTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._BumpTextureEnabled !== e && (this._BumpTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "LightmapTextureEnabled", {
|
|
get: function() {
|
|
return this._LightmapTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._LightmapTextureEnabled !== e && (this._LightmapTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "RefractionTextureEnabled", {
|
|
get: function() {
|
|
return this._RefractionTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._RefractionTextureEnabled !== e && (this._RefractionTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ColorGradingTextureEnabled", {
|
|
get: function() {
|
|
return this._ColorGradingTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._ColorGradingTextureEnabled !== e && (this._ColorGradingTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "FresnelEnabled", {
|
|
get: function() {
|
|
return this._FresnelEnabled
|
|
},
|
|
set: function(e) {
|
|
this._FresnelEnabled !== e && (this._FresnelEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_FresnelDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ClearCoatTextureEnabled", {
|
|
get: function() {
|
|
return this._ClearCoatTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._ClearCoatTextureEnabled !== e && (this._ClearCoatTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ClearCoatBumpTextureEnabled", {
|
|
get: function() {
|
|
return this._ClearCoatBumpTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._ClearCoatBumpTextureEnabled !== e && (this._ClearCoatBumpTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ClearCoatTintTextureEnabled", {
|
|
get: function() {
|
|
return this._ClearCoatTintTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._ClearCoatTintTextureEnabled !== e && (this._ClearCoatTintTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "SheenTextureEnabled", {
|
|
get: function() {
|
|
return this._SheenTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._SheenTextureEnabled !== e && (this._SheenTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "AnisotropicTextureEnabled", {
|
|
get: function() {
|
|
return this._AnisotropicTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._AnisotropicTextureEnabled !== e && (this._AnisotropicTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ThicknessTextureEnabled", {
|
|
get: function() {
|
|
return this._ThicknessTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
this._ThicknessTextureEnabled !== e && (this._ThicknessTextureEnabled = e, n.b.MarkAllMaterialsAsDirty(r.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e._DiffuseTextureEnabled = !0, e._AmbientTextureEnabled = !0, e._OpacityTextureEnabled = !0, e._ReflectionTextureEnabled = !0, e._EmissiveTextureEnabled = !0, e._SpecularTextureEnabled = !0, e._BumpTextureEnabled = !0, e._LightmapTextureEnabled = !0, e._RefractionTextureEnabled = !0, e._ColorGradingTextureEnabled = !0, e._FresnelEnabled = !0, e._ClearCoatTextureEnabled = !0, e._ClearCoatBumpTextureEnabled = !0, e._ClearCoatTintTextureEnabled = !0, e._SheenTextureEnabled = !0, e._AnisotropicTextureEnabled = !0, e._ThicknessTextureEnabled = !0, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return e.WarnImport = function(e) {
|
|
return e + " needs to be imported before as it contains a side-effect required by your code."
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return f
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(9),
|
|
s = i(8),
|
|
a = i(0),
|
|
c = i(23),
|
|
l = i(49),
|
|
u = i(63),
|
|
h = i(3),
|
|
d = i(6),
|
|
f = function() {
|
|
function e(t, i, n) {
|
|
this.metadata = null, this.reservedDataStore = null, this.checkReadyOnEveryCall = !1, this.checkReadyOnlyOnce = !1, this.state = "", this._alpha = 1, this._backFaceCulling = !0, this.onCompiled = null, this.onError = null, this.getRenderTargetTextures = null, this.doNotSerialize = !1, this._storeEffectOnSubMeshes = !1, this.animations = null, this.onDisposeObservable = new s.c, this._onDisposeObserver = null, this._onUnBindObservable = null, this._onBindObserver = null, this._alphaMode = h.a.ALPHA_COMBINE, this._needDepthPrePass = !1, this.disableDepthWrite = !1, this.forceDepthWrite = !1, this.separateCullingPass = !1, this._fogEnabled = !0, this.pointSize = 1, this.zOffset = 0, this._effect = null, this._wasPreviouslyReady = !1, this._useUBO = !1, this._fillMode = e.TriangleFillMode, this._cachedDepthWriteState = !1, this._indexInSceneMaterialArray = -1, this.meshMap = null, this.name = t, this.id = t || o.h.RandomId(), this._scene = i || c.a.LastCreatedScene, this.uniqueId = this._scene.getUniqueId(), this._scene.useRightHandedSystem ? this.sideOrientation = e.ClockWiseSideOrientation : this.sideOrientation = e.CounterClockWiseSideOrientation, this._uniformBuffer = new u.a(this._scene.getEngine()), this._useUBO = this.getScene().getEngine().supportsUniformBuffers, n || this._scene.addMaterial(this), this._scene.useMaterialMeshMap && (this.meshMap = {})
|
|
}
|
|
return Object.defineProperty(e.prototype, "alpha", {
|
|
get: function() {
|
|
return this._alpha
|
|
},
|
|
set: function(t) {
|
|
this._alpha !== t && (this._alpha = t, this.markAsDirty(e.MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "backFaceCulling", {
|
|
get: function() {
|
|
return this._backFaceCulling
|
|
},
|
|
set: function(t) {
|
|
this._backFaceCulling !== t && (this._backFaceCulling = t, this.markAsDirty(e.TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "hasRenderTargetTextures", {
|
|
get: function() {
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onDispose", {
|
|
set: function(e) {
|
|
this._onDisposeObserver && this.onDisposeObservable.remove(this._onDisposeObserver), this._onDisposeObserver = this.onDisposeObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onBindObservable", {
|
|
get: function() {
|
|
return this._onBindObservable || (this._onBindObservable = new s.c), this._onBindObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onBind", {
|
|
set: function(e) {
|
|
this._onBindObserver && this.onBindObservable.remove(this._onBindObserver), this._onBindObserver = this.onBindObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onUnBindObservable", {
|
|
get: function() {
|
|
return this._onUnBindObservable || (this._onUnBindObservable = new s.c), this._onUnBindObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "alphaMode", {
|
|
get: function() {
|
|
return this._alphaMode
|
|
},
|
|
set: function(t) {
|
|
this._alphaMode !== t && (this._alphaMode = t, this.markAsDirty(e.TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "needDepthPrePass", {
|
|
get: function() {
|
|
return this._needDepthPrePass
|
|
},
|
|
set: function(e) {
|
|
this._needDepthPrePass !== e && (this._needDepthPrePass = e, this._needDepthPrePass && (this.checkReadyOnEveryCall = !0))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "fogEnabled", {
|
|
get: function() {
|
|
return this._fogEnabled
|
|
},
|
|
set: function(t) {
|
|
this._fogEnabled !== t && (this._fogEnabled = t, this.markAsDirty(e.MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "wireframe", {
|
|
get: function() {
|
|
switch (this._fillMode) {
|
|
case e.WireFrameFillMode:
|
|
case e.LineListDrawMode:
|
|
case e.LineLoopDrawMode:
|
|
case e.LineStripDrawMode:
|
|
return !0
|
|
}
|
|
return this._scene.forceWireframe
|
|
},
|
|
set: function(t) {
|
|
this.fillMode = t ? e.WireFrameFillMode : e.TriangleFillMode
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "pointsCloud", {
|
|
get: function() {
|
|
switch (this._fillMode) {
|
|
case e.PointFillMode:
|
|
case e.PointListDrawMode:
|
|
return !0
|
|
}
|
|
return this._scene.forcePointsCloud
|
|
},
|
|
set: function(t) {
|
|
this.fillMode = t ? e.PointFillMode : e.TriangleFillMode
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "fillMode", {
|
|
get: function() {
|
|
return this._fillMode
|
|
},
|
|
set: function(t) {
|
|
this._fillMode !== t && (this._fillMode = t, this.markAsDirty(e.MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.toString = function(e) {
|
|
return "Name: " + this.name
|
|
}, e.prototype.getClassName = function() {
|
|
return "Material"
|
|
}, Object.defineProperty(e.prototype, "isFrozen", {
|
|
get: function() {
|
|
return this.checkReadyOnlyOnce
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.freeze = function() {
|
|
this.checkReadyOnlyOnce = !0
|
|
}, e.prototype.unfreeze = function() {
|
|
this.checkReadyOnlyOnce = !1
|
|
}, e.prototype.isReady = function(e, t) {
|
|
return !0
|
|
}, e.prototype.isReadyForSubMesh = function(e, t, i) {
|
|
return !1
|
|
}, e.prototype.getEffect = function() {
|
|
return this._effect
|
|
}, e.prototype.getScene = function() {
|
|
return this._scene
|
|
}, e.prototype.needAlphaBlending = function() {
|
|
return this.alpha < 1
|
|
}, e.prototype.needAlphaBlendingForMesh = function(e) {
|
|
return this.needAlphaBlending() || e.visibility < 1 || e.hasVertexAlpha
|
|
}, e.prototype.needAlphaTesting = function() {
|
|
return !1
|
|
}, e.prototype.getAlphaTestTexture = function() {
|
|
return null
|
|
}, e.prototype.markDirty = function() {
|
|
this._wasPreviouslyReady = !1
|
|
}, e.prototype._preBind = function(t, i) {
|
|
void 0 === i && (i = null);
|
|
var n = this._scene.getEngine(),
|
|
r = (null == i ? this.sideOrientation : i) === e.ClockWiseSideOrientation;
|
|
return n.enableEffect(t || this._effect), n.setState(this.backFaceCulling, this.zOffset, !1, r), r
|
|
}, e.prototype.bind = function(e, t) {}, e.prototype.bindForSubMesh = function(e, t, i) {}, e.prototype.bindOnlyWorldMatrix = function(e) {}, e.prototype.bindSceneUniformBuffer = function(e, t) {
|
|
t.bindToEffect(e, "Scene")
|
|
}, e.prototype.bindView = function(e) {
|
|
this._useUBO ? this.bindSceneUniformBuffer(e, this.getScene().getSceneUniformBuffer()) : e.setMatrix("view", this.getScene().getViewMatrix())
|
|
}, e.prototype.bindViewProjection = function(e) {
|
|
this._useUBO ? this.bindSceneUniformBuffer(e, this.getScene().getSceneUniformBuffer()) : e.setMatrix("viewProjection", this.getScene().getTransformMatrix())
|
|
}, e.prototype._shouldTurnAlphaTestOn = function(e) {
|
|
return !this.needAlphaBlendingForMesh(e) && this.needAlphaTesting()
|
|
}, e.prototype._afterBind = function(e) {
|
|
if (this._scene._cachedMaterial = this, this._scene._cachedVisibility = e ? e.visibility : 1, this._onBindObservable && e && this._onBindObservable.notifyObservers(e), this.disableDepthWrite) {
|
|
var t = this._scene.getEngine();
|
|
this._cachedDepthWriteState = t.getDepthWrite(), t.setDepthWrite(!1)
|
|
}
|
|
}, e.prototype.unbind = function() {
|
|
(this._onUnBindObservable && this._onUnBindObservable.notifyObservers(this), this.disableDepthWrite) && this._scene.getEngine().setDepthWrite(this._cachedDepthWriteState)
|
|
}, e.prototype.getActiveTextures = function() {
|
|
return []
|
|
}, e.prototype.hasTexture = function(e) {
|
|
return !1
|
|
}, e.prototype.clone = function(e) {
|
|
return null
|
|
}, e.prototype.getBindedMeshes = function() {
|
|
var e = this;
|
|
if (this.meshMap) {
|
|
var t = new Array;
|
|
for (var i in this.meshMap) {
|
|
var n = this.meshMap[i];
|
|
n && t.push(n)
|
|
}
|
|
return t
|
|
}
|
|
return this._scene.meshes.filter(function(t) {
|
|
return t.material === e
|
|
})
|
|
}, e.prototype.forceCompilation = function(e, t, i) {
|
|
var r = this,
|
|
o = n.a({
|
|
clipPlane: !1
|
|
}, i),
|
|
s = new l.a,
|
|
c = this.getScene(),
|
|
u = function() {
|
|
if (r._scene && r._scene.getEngine()) {
|
|
s._materialDefines && (s._materialDefines._renderId = -1);
|
|
var i = c.clipPlane;
|
|
o.clipPlane && (c.clipPlane = new a.n(0, 0, 0, 1)), r._storeEffectOnSubMeshes ? r.isReadyForSubMesh(e, s) ? t && t(r) : setTimeout(u, 16) : r.isReady() ? t && t(r) : setTimeout(u, 16), o.clipPlane && (c.clipPlane = i)
|
|
}
|
|
};
|
|
u()
|
|
}, e.prototype.forceCompilationAsync = function(e, t) {
|
|
var i = this;
|
|
return new Promise(function(n) {
|
|
i.forceCompilation(e, function() {
|
|
n()
|
|
}, t)
|
|
})
|
|
}, e.prototype.markAsDirty = function(t) {
|
|
this.getScene().blockMaterialDirtyMechanism || (e._DirtyCallbackArray.length = 0, t & e.TextureDirtyFlag && e._DirtyCallbackArray.push(e._TextureDirtyCallBack), t & e.LightDirtyFlag && e._DirtyCallbackArray.push(e._LightsDirtyCallBack), t & e.FresnelDirtyFlag && e._DirtyCallbackArray.push(e._FresnelDirtyCallBack), t & e.AttributesDirtyFlag && e._DirtyCallbackArray.push(e._AttributeDirtyCallBack), t & e.MiscDirtyFlag && e._DirtyCallbackArray.push(e._MiscDirtyCallBack), e._DirtyCallbackArray.length && this._markAllSubMeshesAsDirty(e._RunDirtyCallBacks), this.getScene().resetCachedMaterial())
|
|
}, e.prototype._markAllSubMeshesAsDirty = function(e) {
|
|
if (!this.getScene().blockMaterialDirtyMechanism)
|
|
for (var t = 0, i = this.getScene().meshes; t < i.length; t++) {
|
|
var n = i[t];
|
|
if (n.subMeshes)
|
|
for (var r = 0, o = n.subMeshes; r < o.length; r++) {
|
|
var s = o[r];
|
|
s.getMaterial() === this && (s._materialDefines && e(s._materialDefines))
|
|
}
|
|
}
|
|
}, e.prototype._markAllSubMeshesAsImageProcessingDirty = function() {
|
|
this._markAllSubMeshesAsDirty(e._ImageProcessingDirtyCallBack)
|
|
}, e.prototype._markAllSubMeshesAsTexturesDirty = function() {
|
|
this._markAllSubMeshesAsDirty(e._TextureDirtyCallBack)
|
|
}, e.prototype._markAllSubMeshesAsFresnelDirty = function() {
|
|
this._markAllSubMeshesAsDirty(e._FresnelDirtyCallBack)
|
|
}, e.prototype._markAllSubMeshesAsFresnelAndMiscDirty = function() {
|
|
this._markAllSubMeshesAsDirty(e._FresnelAndMiscDirtyCallBack)
|
|
}, e.prototype._markAllSubMeshesAsLightsDirty = function() {
|
|
this._markAllSubMeshesAsDirty(e._LightsDirtyCallBack)
|
|
}, e.prototype._markAllSubMeshesAsAttributesDirty = function() {
|
|
this._markAllSubMeshesAsDirty(e._AttributeDirtyCallBack)
|
|
}, e.prototype._markAllSubMeshesAsMiscDirty = function() {
|
|
this._markAllSubMeshesAsDirty(e._MiscDirtyCallBack)
|
|
}, e.prototype._markAllSubMeshesAsTexturesAndMiscDirty = function() {
|
|
this._markAllSubMeshesAsDirty(e._TextureAndMiscDirtyCallBack)
|
|
}, e.prototype.dispose = function(e, t, i) {
|
|
var n = this.getScene();
|
|
if (n.stopAnimation(this), n.freeProcessedMaterials(), n.removeMaterial(this), !0 !== i)
|
|
if (this.meshMap)
|
|
for (var r in this.meshMap) {
|
|
(a = this.meshMap[r]) && (a.material = null, this.releaseVertexArrayObject(a, e))
|
|
} else
|
|
for (var o = 0, s = n.meshes; o < s.length; o++) {
|
|
var a;
|
|
(a = s[o]).material !== this || a.sourceMesh || (a.material = null, this.releaseVertexArrayObject(a, e))
|
|
}
|
|
this._uniformBuffer.dispose(), e && this._effect && (this._storeEffectOnSubMeshes || this._effect.dispose(), this._effect = null), this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear(), this._onBindObservable && this._onBindObservable.clear(), this._onUnBindObservable && this._onUnBindObservable.clear()
|
|
}, e.prototype.releaseVertexArrayObject = function(e, t) {
|
|
if (e.geometry) {
|
|
var i = e.geometry;
|
|
if (this._storeEffectOnSubMeshes)
|
|
for (var n = 0, r = e.subMeshes; n < r.length; n++) {
|
|
var o = r[n];
|
|
i._releaseVertexArrayObject(o._materialEffect), t && o._materialEffect && o._materialEffect.dispose()
|
|
} else i._releaseVertexArrayObject(this._effect)
|
|
}
|
|
}, e.prototype.serialize = function() {
|
|
return r.a.Serialize(this)
|
|
}, e.Parse = function(e, t, i) {
|
|
if (e.customType) {
|
|
if ("BABYLON.PBRMaterial" === e.customType && e.overloadedAlbedo && (e.customType = "BABYLON.LegacyPBRMaterial", !BABYLON.LegacyPBRMaterial)) return d.a.Error("Your scene is trying to load a legacy version of the PBRMaterial, please, include it from the materials library."), null
|
|
} else e.customType = "BABYLON.StandardMaterial";
|
|
return o.h.Instantiate(e.customType).Parse(e, t, i)
|
|
}, e.TriangleFillMode = h.a.MATERIAL_TriangleFillMode, e.WireFrameFillMode = h.a.MATERIAL_WireFrameFillMode, e.PointFillMode = h.a.MATERIAL_PointFillMode, e.PointListDrawMode = h.a.MATERIAL_PointListDrawMode, e.LineListDrawMode = h.a.MATERIAL_LineListDrawMode, e.LineLoopDrawMode = h.a.MATERIAL_LineLoopDrawMode, e.LineStripDrawMode = h.a.MATERIAL_LineStripDrawMode, e.TriangleStripDrawMode = h.a.MATERIAL_TriangleStripDrawMode, e.TriangleFanDrawMode = h.a.MATERIAL_TriangleFanDrawMode, e.ClockWiseSideOrientation = h.a.MATERIAL_ClockWiseSideOrientation, e.CounterClockWiseSideOrientation = h.a.MATERIAL_CounterClockWiseSideOrientation, e.TextureDirtyFlag = h.a.MATERIAL_TextureDirtyFlag, e.LightDirtyFlag = h.a.MATERIAL_LightDirtyFlag, e.FresnelDirtyFlag = h.a.MATERIAL_FresnelDirtyFlag, e.AttributesDirtyFlag = h.a.MATERIAL_AttributesDirtyFlag, e.MiscDirtyFlag = h.a.MATERIAL_MiscDirtyFlag, e.AllDirtyFlag = h.a.MATERIAL_AllDirtyFlag, e._ImageProcessingDirtyCallBack = function(e) {
|
|
return e.markAsImageProcessingDirty()
|
|
}, e._TextureDirtyCallBack = function(e) {
|
|
return e.markAsTexturesDirty()
|
|
}, e._FresnelDirtyCallBack = function(e) {
|
|
return e.markAsFresnelDirty()
|
|
}, e._MiscDirtyCallBack = function(e) {
|
|
return e.markAsMiscDirty()
|
|
}, e._LightsDirtyCallBack = function(e) {
|
|
return e.markAsLightDirty()
|
|
}, e._AttributeDirtyCallBack = function(e) {
|
|
return e.markAsAttributesDirty()
|
|
}, e._FresnelAndMiscDirtyCallBack = function(t) {
|
|
e._FresnelDirtyCallBack(t), e._MiscDirtyCallBack(t)
|
|
}, e._TextureAndMiscDirtyCallBack = function(t) {
|
|
e._TextureDirtyCallBack(t), e._MiscDirtyCallBack(t)
|
|
}, e._DirtyCallbackArray = [], e._RunDirtyCallBacks = function(t) {
|
|
for (var i = 0, n = e._DirtyCallbackArray; i < n.length; i++) {
|
|
(0, n[i])(t)
|
|
}
|
|
}, n.c([Object(r.c)()], e.prototype, "id", void 0), n.c([Object(r.c)()], e.prototype, "uniqueId", void 0), n.c([Object(r.c)()], e.prototype, "name", void 0), n.c([Object(r.c)()], e.prototype, "checkReadyOnEveryCall", void 0), n.c([Object(r.c)()], e.prototype, "checkReadyOnlyOnce", void 0), n.c([Object(r.c)()], e.prototype, "state", void 0), n.c([Object(r.c)("alpha")], e.prototype, "_alpha", void 0), n.c([Object(r.c)("backFaceCulling")], e.prototype, "_backFaceCulling", void 0), n.c([Object(r.c)()], e.prototype, "sideOrientation", void 0), n.c([Object(r.c)("alphaMode")], e.prototype, "_alphaMode", void 0), n.c([Object(r.c)()], e.prototype, "_needDepthPrePass", void 0), n.c([Object(r.c)()], e.prototype, "disableDepthWrite", void 0), n.c([Object(r.c)()], e.prototype, "forceDepthWrite", void 0), n.c([Object(r.c)()], e.prototype, "separateCullingPass", void 0), n.c([Object(r.c)("fogEnabled")], e.prototype, "_fogEnabled", void 0), n.c([Object(r.c)()], e.prototype, "pointSize", void 0), n.c([Object(r.c)()], e.prototype, "zOffset", void 0), n.c([Object(r.c)()], e.prototype, "wireframe", null), n.c([Object(r.c)()], e.prototype, "pointsCloud", null), n.c([Object(r.c)()], e.prototype, "fillMode", null), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return f
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(28),
|
|
s = i(9),
|
|
a = i(8),
|
|
c = i(0),
|
|
l = i(25),
|
|
u = i(6),
|
|
h = i(22),
|
|
d = i(19),
|
|
f = function(e) {
|
|
function t(i, n, r, s) {
|
|
void 0 === s && (s = !0);
|
|
var l = e.call(this, i, r) || this;
|
|
return l._position = c.x.Zero(), l.upVector = c.x.Up(), l.orthoLeft = null, l.orthoRight = null, l.orthoBottom = null, l.orthoTop = null, l.fov = .8, l.minZ = 1, l.maxZ = 1e4, l.inertia = .9, l.mode = t.PERSPECTIVE_CAMERA, l.isIntermediate = !1, l.viewport = new c.z(0, 0, 1, 1), l.layerMask = 268435455, l.fovMode = t.FOVMODE_VERTICAL_FIXED, l.cameraRigMode = t.RIG_MODE_NONE, l.customRenderTargets = new Array, l.outputRenderTarget = null, l.onViewMatrixChangedObservable = new a.c, l.onProjectionMatrixChangedObservable = new a.c, l.onAfterCheckInputsObservable = new a.c, l.onRestoreStateObservable = new a.c, l._rigCameras = new Array, l._webvrViewMatrix = c.j.Identity(), l._skipRendering = !1, l._projectionMatrix = new c.j, l._postProcesses = new Array, l._activeMeshes = new o.a(256), l._globalPosition = c.x.Zero(), l._computedViewMatrix = c.j.Identity(), l._doNotComputeProjectionMatrix = !1, l._transformMatrix = c.j.Zero(), l._refreshFrustumPlanes = !0, l._isCamera = !0, l._isLeftCamera = !1, l._isRightCamera = !0, l.getScene().addCamera(l), s && !l.getScene().activeCamera && (l.getScene().activeCamera = l), l.position = n, l
|
|
}
|
|
return n.d(t, e), Object.defineProperty(t.prototype, "position", {
|
|
get: function() {
|
|
return this._position
|
|
},
|
|
set: function(e) {
|
|
this._position = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.storeState = function() {
|
|
return this._stateStored = !0, this._storedFov = this.fov, this
|
|
}, t.prototype._restoreStateValues = function() {
|
|
return !!this._stateStored && (this.fov = this._storedFov, !0)
|
|
}, t.prototype.restoreState = function() {
|
|
return !!this._restoreStateValues() && (this.onRestoreStateObservable.notifyObservers(this), !0)
|
|
}, t.prototype.getClassName = function() {
|
|
return "Camera"
|
|
}, t.prototype.toString = function(e) {
|
|
var t = "Name: " + this.name;
|
|
if (t += ", type: " + this.getClassName(), this.animations)
|
|
for (var i = 0; i < this.animations.length; i++) t += ", animation[0]: " + this.animations[i].toString(e);
|
|
return t
|
|
}, Object.defineProperty(t.prototype, "globalPosition", {
|
|
get: function() {
|
|
return this._globalPosition
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getActiveMeshes = function() {
|
|
return this._activeMeshes
|
|
}, t.prototype.isActiveMesh = function(e) {
|
|
return -1 !== this._activeMeshes.indexOf(e)
|
|
}, t.prototype.isReady = function(t) {
|
|
if (void 0 === t && (t = !1), t)
|
|
for (var i = 0, n = this._postProcesses; i < n.length; i++) {
|
|
var r = n[i];
|
|
if (r && !r.isReady()) return !1
|
|
}
|
|
return e.prototype.isReady.call(this, t)
|
|
}, t.prototype._initCache = function() {
|
|
e.prototype._initCache.call(this), this._cache.position = new c.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), this._cache.upVector = new c.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), this._cache.mode = void 0, this._cache.minZ = void 0, this._cache.maxZ = void 0, this._cache.fov = void 0, this._cache.fovMode = void 0, this._cache.aspectRatio = void 0, this._cache.orthoLeft = void 0, this._cache.orthoRight = void 0, this._cache.orthoBottom = void 0, this._cache.orthoTop = void 0, this._cache.renderWidth = void 0, this._cache.renderHeight = void 0
|
|
}, t.prototype._updateCache = function(t) {
|
|
t || e.prototype._updateCache.call(this), this._cache.position.copyFrom(this.position), this._cache.upVector.copyFrom(this.upVector)
|
|
}, t.prototype._isSynchronized = function() {
|
|
return this._isSynchronizedViewMatrix() && this._isSynchronizedProjectionMatrix()
|
|
}, t.prototype._isSynchronizedViewMatrix = function() {
|
|
return !!e.prototype._isSynchronized.call(this) && (this._cache.position.equals(this.position) && this._cache.upVector.equals(this.upVector) && this.isSynchronizedWithParent())
|
|
}, t.prototype._isSynchronizedProjectionMatrix = function() {
|
|
var e = this._cache.mode === this.mode && this._cache.minZ === this.minZ && this._cache.maxZ === this.maxZ;
|
|
if (!e) return !1;
|
|
var i = this.getEngine();
|
|
return e = this.mode === t.PERSPECTIVE_CAMERA ? this._cache.fov === this.fov && this._cache.fovMode === this.fovMode && this._cache.aspectRatio === i.getAspectRatio(this) : this._cache.orthoLeft === this.orthoLeft && this._cache.orthoRight === this.orthoRight && this._cache.orthoBottom === this.orthoBottom && this._cache.orthoTop === this.orthoTop && this._cache.renderWidth === i.getRenderWidth() && this._cache.renderHeight === i.getRenderHeight()
|
|
}, t.prototype.attachControl = function(e, t) {}, t.prototype.detachControl = function(e) {}, t.prototype.update = function() {
|
|
this._checkInputs(), this.cameraRigMode !== t.RIG_MODE_NONE && this._updateRigCameras()
|
|
}, t.prototype._checkInputs = function() {
|
|
this.onAfterCheckInputsObservable.notifyObservers(this)
|
|
}, Object.defineProperty(t.prototype, "rigCameras", {
|
|
get: function() {
|
|
return this._rigCameras
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rigPostProcess", {
|
|
get: function() {
|
|
return this._rigPostProcess
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._getFirstPostProcess = function() {
|
|
for (var e = 0; e < this._postProcesses.length; e++)
|
|
if (null !== this._postProcesses[e]) return this._postProcesses[e];
|
|
return null
|
|
}, t.prototype._cascadePostProcessesToRigCams = function() {
|
|
var e = this._getFirstPostProcess();
|
|
e && e.markTextureDirty();
|
|
for (var t = 0, i = this._rigCameras.length; t < i; t++) {
|
|
var n = this._rigCameras[t],
|
|
r = n._rigPostProcess;
|
|
if (r) "pass" === r.getEffectName() && (n.isIntermediate = 0 === this._postProcesses.length), n._postProcesses = this._postProcesses.slice(0).concat(r), r.markTextureDirty();
|
|
else n._postProcesses = this._postProcesses.slice(0)
|
|
}
|
|
}, t.prototype.attachPostProcess = function(e, t) {
|
|
return void 0 === t && (t = null), !e.isReusable() && this._postProcesses.indexOf(e) > -1 ? (u.a.Error("You're trying to reuse a post process not defined as reusable."), 0) : (null == t || t < 0 ? this._postProcesses.push(e) : null === this._postProcesses[t] ? this._postProcesses[t] = e : this._postProcesses.splice(t, 0, e), this._cascadePostProcessesToRigCams(), this._postProcesses.indexOf(e))
|
|
}, t.prototype.detachPostProcess = function(e) {
|
|
var t = this._postProcesses.indexOf(e); - 1 !== t && (this._postProcesses[t] = null), this._cascadePostProcessesToRigCams()
|
|
}, t.prototype.getWorldMatrix = function() {
|
|
return this._isSynchronizedViewMatrix() ? this._worldMatrix : (this.getViewMatrix(), this._worldMatrix)
|
|
}, t.prototype._getViewMatrix = function() {
|
|
return c.j.Identity()
|
|
}, t.prototype.getViewMatrix = function(e) {
|
|
return !e && this._isSynchronizedViewMatrix() ? this._computedViewMatrix : (this.updateCache(), this._computedViewMatrix = this._getViewMatrix(), this._currentRenderId = this.getScene().getRenderId(), this._childUpdateId++, this._refreshFrustumPlanes = !0, this._cameraRigParams && this._cameraRigParams.vrPreViewMatrix && this._computedViewMatrix.multiplyToRef(this._cameraRigParams.vrPreViewMatrix, this._computedViewMatrix), this.parent && this.parent.onViewMatrixChangedObservable && this.parent.onViewMatrixChangedObservable.notifyObservers(this.parent), this.onViewMatrixChangedObservable.notifyObservers(this), this._computedViewMatrix.invertToRef(this._worldMatrix), this._computedViewMatrix)
|
|
}, t.prototype.freezeProjectionMatrix = function(e) {
|
|
this._doNotComputeProjectionMatrix = !0, void 0 !== e && (this._projectionMatrix = e)
|
|
}, t.prototype.unfreezeProjectionMatrix = function() {
|
|
this._doNotComputeProjectionMatrix = !1
|
|
}, t.prototype.getProjectionMatrix = function(e) {
|
|
if (this._doNotComputeProjectionMatrix || !e && this._isSynchronizedProjectionMatrix()) return this._projectionMatrix;
|
|
this._cache.mode = this.mode, this._cache.minZ = this.minZ, this._cache.maxZ = this.maxZ, this._refreshFrustumPlanes = !0;
|
|
var i = this.getEngine(),
|
|
n = this.getScene();
|
|
if (this.mode === t.PERSPECTIVE_CAMERA) this._cache.fov = this.fov, this._cache.fovMode = this.fovMode, this._cache.aspectRatio = i.getAspectRatio(this), this.minZ <= 0 && (this.minZ = .1), n.useRightHandedSystem ? c.j.PerspectiveFovRHToRef(this.fov, i.getAspectRatio(this), this.minZ, this.maxZ, this._projectionMatrix, this.fovMode === t.FOVMODE_VERTICAL_FIXED) : c.j.PerspectiveFovLHToRef(this.fov, i.getAspectRatio(this), this.minZ, this.maxZ, this._projectionMatrix, this.fovMode === t.FOVMODE_VERTICAL_FIXED);
|
|
else {
|
|
var r = i.getRenderWidth() / 2,
|
|
o = i.getRenderHeight() / 2;
|
|
n.useRightHandedSystem ? c.j.OrthoOffCenterRHToRef(this.orthoLeft || -r, this.orthoRight || r, this.orthoBottom || -o, this.orthoTop || o, this.minZ, this.maxZ, this._projectionMatrix) : c.j.OrthoOffCenterLHToRef(this.orthoLeft || -r, this.orthoRight || r, this.orthoBottom || -o, this.orthoTop || o, this.minZ, this.maxZ, this._projectionMatrix), this._cache.orthoLeft = this.orthoLeft, this._cache.orthoRight = this.orthoRight, this._cache.orthoBottom = this.orthoBottom, this._cache.orthoTop = this.orthoTop, this._cache.renderWidth = i.getRenderWidth(), this._cache.renderHeight = i.getRenderHeight()
|
|
}
|
|
return this.onProjectionMatrixChangedObservable.notifyObservers(this), this._projectionMatrix
|
|
}, t.prototype.getTransformationMatrix = function() {
|
|
return this._computedViewMatrix.multiplyToRef(this._projectionMatrix, this._transformMatrix), this._transformMatrix
|
|
}, t.prototype._updateFrustumPlanes = function() {
|
|
this._refreshFrustumPlanes && (this.getTransformationMatrix(), this._frustumPlanes ? c.i.GetPlanesToRef(this._transformMatrix, this._frustumPlanes) : this._frustumPlanes = c.i.GetPlanes(this._transformMatrix), this._refreshFrustumPlanes = !1)
|
|
}, t.prototype.isInFrustum = function(e, t) {
|
|
if (void 0 === t && (t = !1), this._updateFrustumPlanes(), t && this.rigCameras.length > 0) {
|
|
var i = !1;
|
|
return this.rigCameras.forEach(function(t) {
|
|
t._updateFrustumPlanes(), i = i || e.isInFrustum(t._frustumPlanes)
|
|
}), i
|
|
}
|
|
return e.isInFrustum(this._frustumPlanes)
|
|
}, t.prototype.isCompletelyInFrustum = function(e) {
|
|
return this._updateFrustumPlanes(), e.isCompletelyInFrustum(this._frustumPlanes)
|
|
}, t.prototype.getForwardRay = function(e, t, i) {
|
|
throw void 0 === e && (e = 100), d.a.WarnImport("Ray")
|
|
}, t.prototype.dispose = function(i, n) {
|
|
for (void 0 === n && (n = !1), this.onViewMatrixChangedObservable.clear(), this.onProjectionMatrixChangedObservable.clear(), this.onAfterCheckInputsObservable.clear(), this.onRestoreStateObservable.clear(), this.inputs && this.inputs.clear(), this.getScene().stopAnimation(this), this.getScene().removeCamera(this); this._rigCameras.length > 0;) {
|
|
var r = this._rigCameras.pop();
|
|
r && r.dispose()
|
|
}
|
|
if (this._rigPostProcess) this._rigPostProcess.dispose(this), this._rigPostProcess = null, this._postProcesses = [];
|
|
else if (this.cameraRigMode !== t.RIG_MODE_NONE) this._rigPostProcess = null, this._postProcesses = [];
|
|
else
|
|
for (var o = this._postProcesses.length; --o >= 0;) {
|
|
var s = this._postProcesses[o];
|
|
s && s.dispose(this)
|
|
}
|
|
for (o = this.customRenderTargets.length; --o >= 0;) this.customRenderTargets[o].dispose();
|
|
this.customRenderTargets = [], this._activeMeshes.dispose(), e.prototype.dispose.call(this, i, n)
|
|
}, Object.defineProperty(t.prototype, "isLeftCamera", {
|
|
get: function() {
|
|
return this._isLeftCamera
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "isRightCamera", {
|
|
get: function() {
|
|
return this._isRightCamera
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "leftCamera", {
|
|
get: function() {
|
|
return this._rigCameras.length < 1 ? null : this._rigCameras[0]
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rightCamera", {
|
|
get: function() {
|
|
return this._rigCameras.length < 2 ? null : this._rigCameras[1]
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getLeftTarget = function() {
|
|
return this._rigCameras.length < 1 ? null : this._rigCameras[0].getTarget()
|
|
}, t.prototype.getRightTarget = function() {
|
|
return this._rigCameras.length < 2 ? null : this._rigCameras[1].getTarget()
|
|
}, t.prototype.setCameraRigMode = function(e, i) {
|
|
if (this.cameraRigMode !== e) {
|
|
for (; this._rigCameras.length > 0;) {
|
|
var n = this._rigCameras.pop();
|
|
n && n.dispose()
|
|
}
|
|
if (this.cameraRigMode = e, this._cameraRigParams = {}, this._cameraRigParams.interaxialDistance = i.interaxialDistance || .0637, this._cameraRigParams.stereoHalfAngle = s.h.ToRadians(this._cameraRigParams.interaxialDistance / .0637), this.cameraRigMode !== t.RIG_MODE_NONE) {
|
|
var r = this.createRigCamera(this.name + "_L", 0);
|
|
r && (r._isLeftCamera = !0);
|
|
var o = this.createRigCamera(this.name + "_R", 1);
|
|
o && (o._isRightCamera = !0), r && o && (this._rigCameras.push(r), this._rigCameras.push(o))
|
|
}
|
|
switch (this.cameraRigMode) {
|
|
case t.RIG_MODE_STEREOSCOPIC_ANAGLYPH:
|
|
t._setStereoscopicAnaglyphRigMode(this);
|
|
break;
|
|
case t.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:
|
|
case t.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:
|
|
case t.RIG_MODE_STEREOSCOPIC_OVERUNDER:
|
|
t._setStereoscopicRigMode(this);
|
|
break;
|
|
case t.RIG_MODE_VR:
|
|
t._setVRRigMode(this, i);
|
|
break;
|
|
case t.RIG_MODE_WEBVR:
|
|
t._setWebVRRigMode(this, i)
|
|
}
|
|
this._cascadePostProcessesToRigCams(), this.update()
|
|
}
|
|
}, t._setStereoscopicRigMode = function(e) {
|
|
throw "Import Cameras/RigModes/stereoscopicRigMode before using stereoscopic rig mode"
|
|
}, t._setStereoscopicAnaglyphRigMode = function(e) {
|
|
throw "Import Cameras/RigModes/stereoscopicAnaglyphRigMode before using stereoscopic anaglyph rig mode"
|
|
}, t._setVRRigMode = function(e, t) {
|
|
throw "Import Cameras/RigModes/vrRigMode before using VR rig mode"
|
|
}, t._setWebVRRigMode = function(e, t) {
|
|
throw "Import Cameras/RigModes/WebVRRigMode before using Web VR rig mode"
|
|
}, t.prototype._getVRProjectionMatrix = function() {
|
|
return c.j.PerspectiveFovLHToRef(this._cameraRigParams.vrMetrics.aspectRatioFov, this._cameraRigParams.vrMetrics.aspectRatio, this.minZ, this.maxZ, this._cameraRigParams.vrWorkMatrix), this._cameraRigParams.vrWorkMatrix.multiplyToRef(this._cameraRigParams.vrHMatrix, this._projectionMatrix), this._projectionMatrix
|
|
}, t.prototype._updateCameraRotationMatrix = function() {}, t.prototype._updateWebVRCameraRotationMatrix = function() {}, t.prototype._getWebVRProjectionMatrix = function() {
|
|
return c.j.Identity()
|
|
}, t.prototype._getWebVRViewMatrix = function() {
|
|
return c.j.Identity()
|
|
}, t.prototype.setCameraRigParameter = function(e, t) {
|
|
this._cameraRigParams || (this._cameraRigParams = {}), this._cameraRigParams[e] = t, "interaxialDistance" === e && (this._cameraRigParams.stereoHalfAngle = s.h.ToRadians(t / .0637))
|
|
}, t.prototype.createRigCamera = function(e, t) {
|
|
return null
|
|
}, t.prototype._updateRigCameras = function() {
|
|
for (var e = 0; e < this._rigCameras.length; e++) this._rigCameras[e].minZ = this.minZ, this._rigCameras[e].maxZ = this.maxZ, this._rigCameras[e].fov = this.fov, this._rigCameras[e].upVector.copyFrom(this.upVector);
|
|
this.cameraRigMode === t.RIG_MODE_STEREOSCOPIC_ANAGLYPH && (this._rigCameras[0].viewport = this._rigCameras[1].viewport = this.viewport)
|
|
}, t.prototype._setupInputs = function() {}, t.prototype.serialize = function() {
|
|
var e = r.a.Serialize(this);
|
|
return e.type = this.getClassName(), this.parent && (e.parentId = this.parent.id), this.inputs && this.inputs.serialize(e), r.a.AppendSerializedAnimations(this, e), e.ranges = this.serializeAnimationRanges(), e
|
|
}, t.prototype.clone = function(e) {
|
|
return r.a.Clone(t.GetConstructorFromName(this.getClassName(), e, this.getScene(), this.interaxialDistance, this.isStereoscopicSideBySide), this)
|
|
}, t.prototype.getDirection = function(e) {
|
|
var t = c.x.Zero();
|
|
return this.getDirectionToRef(e, t), t
|
|
}, t.prototype.getDirectionToRef = function(e, t) {
|
|
c.x.TransformNormalToRef(e, this.getWorldMatrix(), t)
|
|
}, t.GetConstructorFromName = function(e, i, n, r, o) {
|
|
void 0 === r && (r = 0), void 0 === o && (o = !0);
|
|
var s = l.a.Construct(e, i, n, {
|
|
interaxial_distance: r,
|
|
isStereoscopicSideBySide: o
|
|
});
|
|
return s || function() {
|
|
return t._createDefaultParsedCamera(i, n)
|
|
}
|
|
}, t.prototype.computeWorldMatrix = function() {
|
|
return this.getWorldMatrix()
|
|
}, t.Parse = function(e, i) {
|
|
var n = e.type,
|
|
o = t.GetConstructorFromName(n, e.name, i, e.interaxial_distance, e.isStereoscopicSideBySide),
|
|
s = r.a.Parse(o, e, i);
|
|
if (e.parentId && (s._waitingParentId = e.parentId), s.inputs && (s.inputs.parse(e), s._setupInputs()), s.setPosition && (s.position.copyFromFloats(0, 0, 0), s.setPosition(c.x.FromArray(e.position))), e.target && s.setTarget && s.setTarget(c.x.FromArray(e.target)), e.cameraRigMode) {
|
|
var a = e.interaxial_distance ? {
|
|
interaxialDistance: e.interaxial_distance
|
|
} : {};
|
|
s.setCameraRigMode(e.cameraRigMode, a)
|
|
}
|
|
if (e.animations) {
|
|
for (var u = 0; u < e.animations.length; u++) {
|
|
var d = e.animations[u],
|
|
f = h.a.GetClass("BABYLON.Animation");
|
|
f && s.animations.push(f.Parse(d))
|
|
}
|
|
l.a.ParseAnimationRanges(s, e, i)
|
|
}
|
|
return e.autoAnimate && i.beginAnimation(s, e.autoAnimateFrom, e.autoAnimateTo, e.autoAnimateLoop, e.autoAnimateSpeed || 1), s
|
|
}, t._createDefaultParsedCamera = function(e, t) {
|
|
throw d.a.WarnImport("UniversalCamera")
|
|
}, t.PERSPECTIVE_CAMERA = 0, t.ORTHOGRAPHIC_CAMERA = 1, t.FOVMODE_VERTICAL_FIXED = 0, t.FOVMODE_HORIZONTAL_FIXED = 1, t.RIG_MODE_NONE = 0, t.RIG_MODE_STEREOSCOPIC_ANAGLYPH = 10, t.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL = 11, t.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED = 12, t.RIG_MODE_STEREOSCOPIC_OVERUNDER = 13, t.RIG_MODE_VR = 20, t.RIG_MODE_WEBVR = 21, t.RIG_MODE_CUSTOM = 22, t.ForceAttachControlToAlwaysPreventDefault = !1, n.c([Object(r.o)("position")], t.prototype, "_position", void 0), n.c([Object(r.o)()], t.prototype, "upVector", void 0), n.c([Object(r.c)()], t.prototype, "orthoLeft", void 0), n.c([Object(r.c)()], t.prototype, "orthoRight", void 0), n.c([Object(r.c)()], t.prototype, "orthoBottom", void 0), n.c([Object(r.c)()], t.prototype, "orthoTop", void 0), n.c([Object(r.c)()], t.prototype, "fov", void 0), n.c([Object(r.c)()], t.prototype, "minZ", void 0), n.c([Object(r.c)()], t.prototype, "maxZ", void 0), n.c([Object(r.c)()], t.prototype, "inertia", void 0), n.c([Object(r.c)()], t.prototype, "mode", void 0), n.c([Object(r.c)()], t.prototype, "layerMask", void 0), n.c([Object(r.c)()], t.prototype, "fovMode", void 0), n.c([Object(r.c)()], t.prototype, "cameraRigMode", void 0), n.c([Object(r.c)()], t.prototype, "interaxialDistance", void 0), n.c([Object(r.c)()], t.prototype, "isStereoscopicSideBySide", void 0), t
|
|
}(l.a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return e.GetClass = function(e) {
|
|
return this.RegisteredTypes && this.RegisteredTypes[e] ? this.RegisteredTypes[e] : null
|
|
}, e.RegisteredTypes = {}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return Object.defineProperty(e, "LastCreatedEngine", {
|
|
get: function() {
|
|
return 0 === this.Instances.length ? null : this.Instances[this.Instances.length - 1]
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "LastCreatedScene", {
|
|
get: function() {
|
|
return this._LastCreatedScene
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.Instances = new Array, e._LastCreatedScene = null, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return v
|
|
});
|
|
var n = i(1),
|
|
r = i(9),
|
|
o = i(8),
|
|
s = i(0),
|
|
a = i(10),
|
|
c = i(4),
|
|
l = i(13),
|
|
u = i(42),
|
|
h = i(50),
|
|
d = i(43),
|
|
f = i(3),
|
|
p = i(108),
|
|
_ = i(19),
|
|
g = function() {
|
|
return function() {
|
|
this.facetNb = 0, this.partitioningSubdivisions = 10, this.partitioningBBoxRatio = 1.01, this.facetDataEnabled = !1, this.facetParameters = {}, this.bbSize = s.x.Zero(), this.subDiv = {
|
|
max: 1,
|
|
X: 1,
|
|
Y: 1,
|
|
Z: 1
|
|
}, this.facetDepthSort = !1, this.facetDepthSortEnabled = !1
|
|
}
|
|
}(),
|
|
m = function() {
|
|
return function() {
|
|
this._hasVertexAlpha = !1, this._useVertexColors = !0, this._numBoneInfluencers = 4, this._applyFog = !0, this._receiveShadows = !1, this._facetData = new g, this._visibility = 1, this._skeleton = null, this._layerMask = 268435455, this._computeBonesUsingShaders = !0, this._isActive = !1, this._onlyForInstances = !1, this._isActiveIntermediate = !1, this._onlyForInstancesIntermediate = !1
|
|
}
|
|
}(),
|
|
v = function(e) {
|
|
function t(i, n) {
|
|
void 0 === n && (n = null);
|
|
var r = e.call(this, i, n, !1) || this;
|
|
return r._internalAbstractMeshDataInfo = new m, r.cullingStrategy = t.CULLINGSTRATEGY_STANDARD, r.onCollideObservable = new o.c, r.onCollisionPositionChangeObservable = new o.c, r.onMaterialChangedObservable = new o.c, r.definedFacingForward = !0, r._occlusionQuery = null, r._renderingGroup = null, r.alphaIndex = Number.MAX_VALUE, r.isVisible = !0, r.isPickable = !0, r.showSubMeshesBoundingBox = !1, r.isBlocker = !1, r.enablePointerMoveEvents = !1, r.renderingGroupId = 0, r._material = null, r.outlineColor = s.e.Red(), r.outlineWidth = .02, r.overlayColor = s.e.Red(), r.overlayAlpha = .5, r.useOctreeForRenderingSelection = !0, r.useOctreeForPicking = !0, r.useOctreeForCollisions = !0, r.alwaysSelectAsActiveMesh = !1, r.doNotSyncBoundingInfo = !1, r.actionManager = null, r._meshCollisionData = new p.a, r.ellipsoid = new s.x(.5, 1, .5), r.ellipsoidOffset = new s.x(0, 0, 0), r.edgesWidth = 1, r.edgesColor = new s.f(1, 0, 0, 1), r._edgesRenderer = null, r._masterMesh = null, r._boundingInfo = null, r._renderId = 0, r._intersectionsInProgress = new Array, r._unIndexed = !1, r._lightSources = new Array, r._waitingData = {
|
|
lods: null,
|
|
actions: null,
|
|
freezeWorldMatrix: null
|
|
}, r._bonesTransformMatrices = null, r.onRebuildObservable = new o.c, r._onCollisionPositionChange = function(e, t, i) {
|
|
void 0 === i && (i = null), t.subtractToRef(r._meshCollisionData._oldPositionForCollisions, r._meshCollisionData._diffPositionForCollisions), r._meshCollisionData._diffPositionForCollisions.length() > a.b.CollisionsEpsilon && r.position.addInPlace(r._meshCollisionData._diffPositionForCollisions), i && r.onCollideObservable.notifyObservers(i), r.onCollisionPositionChangeObservable.notifyObservers(r.position)
|
|
}, r.getScene().addMesh(r), r._resyncLightSources(), r
|
|
}
|
|
return n.d(t, e), Object.defineProperty(t, "BILLBOARDMODE_NONE", {
|
|
get: function() {
|
|
return u.a.BILLBOARDMODE_NONE
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "BILLBOARDMODE_X", {
|
|
get: function() {
|
|
return u.a.BILLBOARDMODE_X
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "BILLBOARDMODE_Y", {
|
|
get: function() {
|
|
return u.a.BILLBOARDMODE_Y
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "BILLBOARDMODE_Z", {
|
|
get: function() {
|
|
return u.a.BILLBOARDMODE_Z
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "BILLBOARDMODE_ALL", {
|
|
get: function() {
|
|
return u.a.BILLBOARDMODE_ALL
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "facetNb", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._facetData.facetNb
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "partitioningSubdivisions", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._facetData.partitioningSubdivisions
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._facetData.partitioningSubdivisions = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "partitioningBBoxRatio", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._facetData.partitioningBBoxRatio
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._facetData.partitioningBBoxRatio = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "mustDepthSortFacets", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._facetData.facetDepthSort
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._facetData.facetDepthSort = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "facetDepthSortFrom", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._facetData.facetDepthSortFrom
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._facetData.facetDepthSortFrom = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "isFacetDataEnabled", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._facetData.facetDataEnabled
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._updateNonUniformScalingState = function(t) {
|
|
return !!e.prototype._updateNonUniformScalingState.call(this, t) && (this._markSubMeshesAsMiscDirty(), !0)
|
|
}, Object.defineProperty(t.prototype, "onCollide", {
|
|
set: function(e) {
|
|
this._meshCollisionData._onCollideObserver && this.onCollideObservable.remove(this._meshCollisionData._onCollideObserver), this._meshCollisionData._onCollideObserver = this.onCollideObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onCollisionPositionChange", {
|
|
set: function(e) {
|
|
this._meshCollisionData._onCollisionPositionChangeObserver && this.onCollisionPositionChangeObservable.remove(this._meshCollisionData._onCollisionPositionChangeObserver), this._meshCollisionData._onCollisionPositionChangeObserver = this.onCollisionPositionChangeObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "visibility", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._visibility
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._visibility !== e && (this._internalAbstractMeshDataInfo._visibility = e, this._markSubMeshesAsMiscDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "material", {
|
|
get: function() {
|
|
return this._material
|
|
},
|
|
set: function(e) {
|
|
this._material !== e && (this._material && this._material.meshMap && (this._material.meshMap[this.uniqueId] = void 0), this._material = e, e && e.meshMap && (e.meshMap[this.uniqueId] = this), this.onMaterialChangedObservable.hasObservers && this.onMaterialChangedObservable.notifyObservers(this), this.subMeshes && this._unBindEffect())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "receiveShadows", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._receiveShadows
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._receiveShadows !== e && (this._internalAbstractMeshDataInfo._receiveShadows = e, this._markSubMeshesAsLightDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "hasVertexAlpha", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._hasVertexAlpha
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._hasVertexAlpha !== e && (this._internalAbstractMeshDataInfo._hasVertexAlpha = e, this._markSubMeshesAsAttributesDirty(), this._markSubMeshesAsMiscDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "useVertexColors", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._useVertexColors
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._useVertexColors !== e && (this._internalAbstractMeshDataInfo._useVertexColors = e, this._markSubMeshesAsAttributesDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "computeBonesUsingShaders", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._computeBonesUsingShaders
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._computeBonesUsingShaders !== e && (this._internalAbstractMeshDataInfo._computeBonesUsingShaders = e, this._markSubMeshesAsAttributesDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "numBoneInfluencers", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._numBoneInfluencers
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._numBoneInfluencers !== e && (this._internalAbstractMeshDataInfo._numBoneInfluencers = e, this._markSubMeshesAsAttributesDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "applyFog", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._applyFog
|
|
},
|
|
set: function(e) {
|
|
this._internalAbstractMeshDataInfo._applyFog !== e && (this._internalAbstractMeshDataInfo._applyFog = e, this._markSubMeshesAsMiscDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "layerMask", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._layerMask
|
|
},
|
|
set: function(e) {
|
|
e !== this._internalAbstractMeshDataInfo._layerMask && (this._internalAbstractMeshDataInfo._layerMask = e, this._resyncLightSources())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "collisionMask", {
|
|
get: function() {
|
|
return this._meshCollisionData._collisionMask
|
|
},
|
|
set: function(e) {
|
|
this._meshCollisionData._collisionMask = isNaN(e) ? -1 : e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "collisionGroup", {
|
|
get: function() {
|
|
return this._meshCollisionData._collisionGroup
|
|
},
|
|
set: function(e) {
|
|
this._meshCollisionData._collisionGroup = isNaN(e) ? -1 : e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "lightSources", {
|
|
get: function() {
|
|
return this._lightSources
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "_positions", {
|
|
get: function() {
|
|
return null
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "skeleton", {
|
|
get: function() {
|
|
return this._internalAbstractMeshDataInfo._skeleton
|
|
},
|
|
set: function(e) {
|
|
var t = this._internalAbstractMeshDataInfo._skeleton;
|
|
t && t.needInitialSkinMatrix && t._unregisterMeshWithPoseMatrix(this), e && e.needInitialSkinMatrix && e._registerMeshWithPoseMatrix(this), this._internalAbstractMeshDataInfo._skeleton = e, this._internalAbstractMeshDataInfo._skeleton || (this._bonesTransformMatrices = null), this._markSubMeshesAsAttributesDirty()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "AbstractMesh"
|
|
}, t.prototype.toString = function(e) {
|
|
var t = "Name: " + this.name + ", isInstance: " + ("InstancedMesh" !== this.getClassName() ? "YES" : "NO");
|
|
t += ", # of submeshes: " + (this.subMeshes ? this.subMeshes.length : 0);
|
|
var i = this._internalAbstractMeshDataInfo._skeleton;
|
|
return i && (t += ", skeleton: " + i.name), e && (t += ", billboard mode: " + ["NONE", "X", "Y", null, "Z", null, null, "ALL"][this.billboardMode], t += ", freeze wrld mat: " + (this._isWorldMatrixFrozen || this._waitingData.freezeWorldMatrix ? "YES" : "NO")), t
|
|
}, t.prototype._getEffectiveParent = function() {
|
|
return this._masterMesh && this.billboardMode !== u.a.BILLBOARDMODE_NONE ? this._masterMesh : e.prototype._getEffectiveParent.call(this)
|
|
}, t.prototype._getActionManagerForTrigger = function(e, t) {
|
|
if (void 0 === t && (t = !0), this.actionManager && (t || this.actionManager.isRecursive)) {
|
|
if (!e) return this.actionManager;
|
|
if (this.actionManager.hasSpecificTrigger(e)) return this.actionManager
|
|
}
|
|
return this.parent ? this.parent._getActionManagerForTrigger(e, !1) : null
|
|
}, t.prototype._rebuild = function() {
|
|
if (this.onRebuildObservable.notifyObservers(this), this._occlusionQuery && (this._occlusionQuery = null), this.subMeshes)
|
|
for (var e = 0, t = this.subMeshes; e < t.length; e++) {
|
|
t[e]._rebuild()
|
|
}
|
|
}, t.prototype._resyncLightSources = function() {
|
|
this._lightSources.length = 0;
|
|
for (var e = 0, t = this.getScene().lights; e < t.length; e++) {
|
|
var i = t[e];
|
|
i.isEnabled() && (i.canAffectMesh(this) && this._lightSources.push(i))
|
|
}
|
|
this._markSubMeshesAsLightDirty()
|
|
}, t.prototype._resyncLighSource = function(e) {
|
|
var t = e.isEnabled() && e.canAffectMesh(this),
|
|
i = this._lightSources.indexOf(e);
|
|
if (-1 === i) {
|
|
if (!t) return;
|
|
this._lightSources.push(e)
|
|
} else {
|
|
if (t) return;
|
|
this._lightSources.splice(i, 1)
|
|
}
|
|
this._markSubMeshesAsLightDirty()
|
|
}, t.prototype._unBindEffect = function() {
|
|
for (var e = 0, t = this.subMeshes; e < t.length; e++) {
|
|
t[e].setEffect(null)
|
|
}
|
|
}, t.prototype._removeLightSource = function(e) {
|
|
var t = this._lightSources.indexOf(e); - 1 !== t && (this._lightSources.splice(t, 1), this._markSubMeshesAsLightDirty())
|
|
}, t.prototype._markSubMeshesAsDirty = function(e) {
|
|
if (this.subMeshes)
|
|
for (var t = 0, i = this.subMeshes; t < i.length; t++) {
|
|
var n = i[t];
|
|
n._materialDefines && e(n._materialDefines)
|
|
}
|
|
}, t.prototype._markSubMeshesAsLightDirty = function() {
|
|
this._markSubMeshesAsDirty(function(e) {
|
|
return e.markAsLightDirty()
|
|
})
|
|
}, t.prototype._markSubMeshesAsAttributesDirty = function() {
|
|
this._markSubMeshesAsDirty(function(e) {
|
|
return e.markAsAttributesDirty()
|
|
})
|
|
}, t.prototype._markSubMeshesAsMiscDirty = function() {
|
|
if (this.subMeshes)
|
|
for (var e = 0, t = this.subMeshes; e < t.length; e++) {
|
|
var i = t[e].getMaterial();
|
|
i && i.markAsDirty(f.a.MATERIAL_MiscDirtyFlag)
|
|
}
|
|
}, Object.defineProperty(t.prototype, "scaling", {
|
|
get: function() {
|
|
return this._scaling
|
|
},
|
|
set: function(e) {
|
|
this._scaling = e, this.physicsImpostor && this.physicsImpostor.forceUpdate()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "isBlocked", {
|
|
get: function() {
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getLOD = function(e) {
|
|
return this
|
|
}, t.prototype.getTotalVertices = function() {
|
|
return 0
|
|
}, t.prototype.getTotalIndices = function() {
|
|
return 0
|
|
}, t.prototype.getIndices = function() {
|
|
return null
|
|
}, t.prototype.getVerticesData = function(e) {
|
|
return null
|
|
}, t.prototype.setVerticesData = function(e, t, i, n) {
|
|
return this
|
|
}, t.prototype.updateVerticesData = function(e, t, i, n) {
|
|
return this
|
|
}, t.prototype.setIndices = function(e, t) {
|
|
return this
|
|
}, t.prototype.isVerticesDataPresent = function(e) {
|
|
return !1
|
|
}, t.prototype.getBoundingInfo = function() {
|
|
return this._masterMesh ? this._masterMesh.getBoundingInfo() : (this._boundingInfo || this._updateBoundingInfo(), this._boundingInfo)
|
|
}, t.prototype.normalizeToUnitCube = function(e, t) {
|
|
void 0 === e && (e = !0), void 0 === t && (t = !1);
|
|
var i = null,
|
|
n = null;
|
|
t && (this.rotationQuaternion ? (n = this.rotationQuaternion.clone(), this.rotationQuaternion.copyFromFloats(0, 0, 0, 1)) : this.rotation && (i = this.rotation.clone(), this.rotation.copyFromFloats(0, 0, 0)));
|
|
var r = this.getHierarchyBoundingVectors(e),
|
|
o = r.max.subtract(r.min),
|
|
s = Math.max(o.x, o.y, o.z);
|
|
if (0 === s) return this;
|
|
var a = 1 / s;
|
|
return this.scaling.scaleInPlace(a), t && (this.rotationQuaternion && n ? this.rotationQuaternion.copyFrom(n) : this.rotation && i && this.rotation.copyFrom(i)), this
|
|
}, t.prototype.setBoundingInfo = function(e) {
|
|
return this._boundingInfo = e, this
|
|
}, Object.defineProperty(t.prototype, "useBones", {
|
|
get: function() {
|
|
return this.skeleton && this.getScene().skeletonsEnabled && this.isVerticesDataPresent(c.b.MatricesIndicesKind) && this.isVerticesDataPresent(c.b.MatricesWeightsKind)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._preActivate = function() {}, t.prototype._preActivateForIntermediateRendering = function(e) {}, t.prototype._activate = function(e, t) {
|
|
return this._renderId = e, !0
|
|
}, t.prototype._postActivate = function() {}, t.prototype._freeze = function() {}, t.prototype._unFreeze = function() {}, t.prototype.getWorldMatrix = function() {
|
|
return this._masterMesh && this.billboardMode === u.a.BILLBOARDMODE_NONE ? this._masterMesh.getWorldMatrix() : e.prototype.getWorldMatrix.call(this)
|
|
}, t.prototype._getWorldMatrixDeterminant = function() {
|
|
return this._masterMesh ? this._masterMesh._getWorldMatrixDeterminant() : e.prototype._getWorldMatrixDeterminant.call(this)
|
|
}, Object.defineProperty(t.prototype, "isAnInstance", {
|
|
get: function() {
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.movePOV = function(e, t, i) {
|
|
return this.position.addInPlace(this.calcMovePOV(e, t, i)), this
|
|
}, t.prototype.calcMovePOV = function(e, t, i) {
|
|
var n = new s.j;
|
|
(this.rotationQuaternion ? this.rotationQuaternion : s.q.RotationYawPitchRoll(this.rotation.y, this.rotation.x, this.rotation.z)).toRotationMatrix(n);
|
|
var r = s.x.Zero(),
|
|
o = this.definedFacingForward ? -1 : 1;
|
|
return s.x.TransformCoordinatesFromFloatsToRef(e * o, t, i * o, n, r), r
|
|
}, t.prototype.rotatePOV = function(e, t, i) {
|
|
return this.rotation.addInPlace(this.calcRotatePOV(e, t, i)), this
|
|
}, t.prototype.calcRotatePOV = function(e, t, i) {
|
|
var n = this.definedFacingForward ? 1 : -1;
|
|
return new s.x(e * n, t, i * n)
|
|
}, t.prototype.refreshBoundingInfo = function(e) {
|
|
return void 0 === e && (e = !1), this._boundingInfo && this._boundingInfo.isLocked ? this : (this._refreshBoundingInfo(this._getPositionData(e), null), this)
|
|
}, t.prototype._refreshBoundingInfo = function(e, t) {
|
|
if (e) {
|
|
var i = r.h.ExtractMinAndMax(e, 0, this.getTotalVertices(), t);
|
|
this._boundingInfo ? this._boundingInfo.reConstruct(i.minimum, i.maximum) : this._boundingInfo = new d.a(i.minimum, i.maximum)
|
|
}
|
|
if (this.subMeshes)
|
|
for (var n = 0; n < this.subMeshes.length; n++) this.subMeshes[n].refreshBoundingInfo(e);
|
|
this._updateBoundingInfo()
|
|
}, t.prototype._getPositionData = function(e) {
|
|
var t = this.getVerticesData(c.b.PositionKind);
|
|
if (t && e && this.skeleton) {
|
|
t = r.h.Slice(t), this._generatePointsArray();
|
|
var i = this.getVerticesData(c.b.MatricesIndicesKind),
|
|
n = this.getVerticesData(c.b.MatricesWeightsKind);
|
|
if (n && i) {
|
|
var o = this.numBoneInfluencers > 4,
|
|
a = o ? this.getVerticesData(c.b.MatricesIndicesExtraKind) : null,
|
|
l = o ? this.getVerticesData(c.b.MatricesWeightsExtraKind) : null;
|
|
this.skeleton.prepare();
|
|
for (var u = this.skeleton.getTransformMatrices(this), h = s.t.Vector3[0], d = s.t.Matrix[0], f = s.t.Matrix[1], p = 0, _ = 0; _ < t.length; _ += 3, p += 4) {
|
|
var g, m;
|
|
for (d.reset(), g = 0; g < 4; g++)(m = n[p + g]) > 0 && (s.j.FromFloat32ArrayToRefScaled(u, Math.floor(16 * i[p + g]), m, f), d.addToSelf(f));
|
|
if (o)
|
|
for (g = 0; g < 4; g++)(m = l[p + g]) > 0 && (s.j.FromFloat32ArrayToRefScaled(u, Math.floor(16 * a[p + g]), m, f), d.addToSelf(f));
|
|
s.x.TransformCoordinatesFromFloatsToRef(t[_], t[_ + 1], t[_ + 2], d, h), h.toArray(t, _), this._positions && this._positions[_ / 3].copyFrom(h)
|
|
}
|
|
}
|
|
}
|
|
return t
|
|
}, t.prototype._updateBoundingInfo = function() {
|
|
var e = this._effectiveMesh;
|
|
return this._boundingInfo ? this._boundingInfo.update(e.worldMatrixFromCache) : this._boundingInfo = new d.a(this.absolutePosition, this.absolutePosition, e.worldMatrixFromCache), this._updateSubMeshesBoundingInfo(e.worldMatrixFromCache), this
|
|
}, t.prototype._updateSubMeshesBoundingInfo = function(e) {
|
|
if (!this.subMeshes) return this;
|
|
for (var t = this.subMeshes.length, i = 0; i < t; i++) {
|
|
var n = this.subMeshes[i];
|
|
(t > 1 || !n.IsGlobal) && n.updateBoundingInfo(e)
|
|
}
|
|
return this
|
|
}, t.prototype._afterComputeWorldMatrix = function() {
|
|
this.doNotSyncBoundingInfo || this._updateBoundingInfo()
|
|
}, Object.defineProperty(t.prototype, "_effectiveMesh", {
|
|
get: function() {
|
|
return this.skeleton && this.skeleton.overrideMesh || this
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.isInFrustum = function(e) {
|
|
return null !== this._boundingInfo && this._boundingInfo.isInFrustum(e, this.cullingStrategy)
|
|
}, t.prototype.isCompletelyInFrustum = function(e) {
|
|
return null !== this._boundingInfo && this._boundingInfo.isCompletelyInFrustum(e)
|
|
}, t.prototype.intersectsMesh = function(e, t, i) {
|
|
if (void 0 === t && (t = !1), !this._boundingInfo || !e._boundingInfo) return !1;
|
|
if (this._boundingInfo.intersects(e._boundingInfo, t)) return !0;
|
|
if (i)
|
|
for (var n = 0, r = this.getChildMeshes(); n < r.length; n++) {
|
|
if (r[n].intersectsMesh(e, t, !0)) return !0
|
|
}
|
|
return !1
|
|
}, t.prototype.intersectsPoint = function(e) {
|
|
return !!this._boundingInfo && this._boundingInfo.intersectsPoint(e)
|
|
}, Object.defineProperty(t.prototype, "checkCollisions", {
|
|
get: function() {
|
|
return this._meshCollisionData._checkCollisions
|
|
},
|
|
set: function(e) {
|
|
this._meshCollisionData._checkCollisions = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "collider", {
|
|
get: function() {
|
|
return this._meshCollisionData._collider
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.moveWithCollisions = function(e) {
|
|
this.getAbsolutePosition().addToRef(this.ellipsoidOffset, this._meshCollisionData._oldPositionForCollisions);
|
|
var t = this.getScene().collisionCoordinator;
|
|
return this._meshCollisionData._collider || (this._meshCollisionData._collider = t.createCollider()), this._meshCollisionData._collider._radius = this.ellipsoid, t.getNewPosition(this._meshCollisionData._oldPositionForCollisions, e, this._meshCollisionData._collider, 3, this, this._onCollisionPositionChange, this.uniqueId), this
|
|
}, t.prototype._collideForSubMesh = function(e, t, i) {
|
|
if (this._generatePointsArray(), !this._positions) return this;
|
|
if (!e._lastColliderWorldVertices || !e._lastColliderTransformMatrix.equals(t)) {
|
|
e._lastColliderTransformMatrix = t.clone(), e._lastColliderWorldVertices = [], e._trianglePlanes = [];
|
|
for (var n = e.verticesStart, r = e.verticesStart + e.verticesCount, o = n; o < r; o++) e._lastColliderWorldVertices.push(s.x.TransformCoordinates(this._positions[o], t))
|
|
}
|
|
return i._collide(e._trianglePlanes, e._lastColliderWorldVertices, this.getIndices(), e.indexStart, e.indexStart + e.indexCount, e.verticesStart, !!e.getMaterial()), i.collisionFound && (i.collidedMesh = this), this
|
|
}, t.prototype._processCollisionsForSubMeshes = function(e, t) {
|
|
for (var i = this._scene.getCollidingSubMeshCandidates(this, e), n = i.length, r = 0; r < n; r++) {
|
|
var o = i.data[r];
|
|
n > 1 && !o._checkCollision(e) || this._collideForSubMesh(o, t, e)
|
|
}
|
|
return this
|
|
}, t.prototype._checkCollision = function(e) {
|
|
if (!this._boundingInfo || !this._boundingInfo._checkCollision(e)) return this;
|
|
var t = s.t.Matrix[0],
|
|
i = s.t.Matrix[1];
|
|
return s.j.ScalingToRef(1 / e._radius.x, 1 / e._radius.y, 1 / e._radius.z, t), this.worldMatrixFromCache.multiplyToRef(t, i), this._processCollisionsForSubMeshes(e, i), this
|
|
}, t.prototype._generatePointsArray = function() {
|
|
return !1
|
|
}, t.prototype.intersects = function(e, t, i) {
|
|
var n = new h.a,
|
|
r = "InstancedLinesMesh" === this.getClassName() || "LinesMesh" === this.getClassName() ? this.intersectionThreshold : 0,
|
|
o = this._boundingInfo;
|
|
if (!(this.subMeshes && o && e.intersectsSphere(o.boundingSphere, r) && e.intersectsBox(o.boundingBox, r))) return n;
|
|
if (!this._generatePointsArray()) return n;
|
|
for (var a = null, c = this._scene.getIntersectingSubMeshCandidates(this, e), l = c.length, u = 0; u < l; u++) {
|
|
var d = c.data[u];
|
|
if (!(l > 1) || d.canIntersects(e)) {
|
|
var f = d.intersects(e, this._positions, this.getIndices(), t, i);
|
|
if (f && (t || !a || f.distance < a.distance) && ((a = f).subMeshId = u, t)) break
|
|
}
|
|
}
|
|
if (a) {
|
|
var p = this.getWorldMatrix(),
|
|
_ = s.t.Vector3[0],
|
|
g = s.t.Vector3[1];
|
|
s.x.TransformCoordinatesToRef(e.origin, p, _), e.direction.scaleToRef(a.distance, g);
|
|
var m = s.x.TransformNormal(g, p).addInPlace(_);
|
|
return n.hit = !0, n.distance = s.x.Distance(_, m), n.pickedPoint = m, n.pickedMesh = this, n.bu = a.bu || 0, n.bv = a.bv || 0, n.faceId = a.faceId, n.subMeshId = a.subMeshId, n
|
|
}
|
|
return n
|
|
}, t.prototype.clone = function(e, t, i) {
|
|
return null
|
|
}, t.prototype.releaseSubMeshes = function() {
|
|
if (this.subMeshes)
|
|
for (; this.subMeshes.length;) this.subMeshes[0].dispose();
|
|
else this.subMeshes = new Array;
|
|
return this
|
|
}, t.prototype.dispose = function(t, i) {
|
|
var n, r = this;
|
|
for (void 0 === i && (i = !1), this.getScene().freeActiveMeshes(), this.getScene().freeRenderingGroups(), void 0 !== this.actionManager && null !== this.actionManager && (this.actionManager.dispose(), this.actionManager = null), this._internalAbstractMeshDataInfo._skeleton = null, n = 0; n < this._intersectionsInProgress.length; n++) {
|
|
var o = this._intersectionsInProgress[n],
|
|
s = o._intersectionsInProgress.indexOf(this);
|
|
o._intersectionsInProgress.splice(s, 1)
|
|
}
|
|
this._intersectionsInProgress = [], this.getScene().lights.forEach(function(e) {
|
|
var t = e.includedOnlyMeshes.indexOf(r); - 1 !== t && e.includedOnlyMeshes.splice(t, 1), -1 !== (t = e.excludedMeshes.indexOf(r)) && e.excludedMeshes.splice(t, 1);
|
|
var i = e.getShadowGenerator();
|
|
if (i) {
|
|
var n = i.getShadowMap();
|
|
n && n.renderList && -1 !== (t = n.renderList.indexOf(r)) && n.renderList.splice(t, 1)
|
|
}
|
|
}), "InstancedMesh" === this.getClassName() && "InstancedLinesMesh" === this.getClassName() || this.releaseSubMeshes();
|
|
var a = this.getScene().getEngine();
|
|
if (this._occlusionQuery && (this.isOcclusionQueryInProgress = !1, a.deleteQuery(this._occlusionQuery), this._occlusionQuery = null), a.wipeCaches(), this.getScene().removeMesh(this), i && this.material && ("MultiMaterial" === this.material.getClassName() ? this.material.dispose(!1, !0, !0) : this.material.dispose(!1, !0)), !t)
|
|
for (n = 0; n < this.getScene().particleSystems.length; n++) this.getScene().particleSystems[n].emitter === this && (this.getScene().particleSystems[n].dispose(), n--);
|
|
this._internalAbstractMeshDataInfo._facetData.facetDataEnabled && this.disableFacetData(), this.onAfterWorldMatrixUpdateObservable.clear(), this.onCollideObservable.clear(), this.onCollisionPositionChangeObservable.clear(), this.onRebuildObservable.clear(), e.prototype.dispose.call(this, t, i)
|
|
}, t.prototype.addChild = function(e) {
|
|
return e.setParent(this), this
|
|
}, t.prototype.removeChild = function(e) {
|
|
return e.setParent(null), this
|
|
}, t.prototype._initFacetData = function() {
|
|
var e = this._internalAbstractMeshDataInfo._facetData;
|
|
e.facetNormals || (e.facetNormals = new Array), e.facetPositions || (e.facetPositions = new Array), e.facetPartitioning || (e.facetPartitioning = new Array), e.facetNb = this.getIndices().length / 3 | 0, e.partitioningSubdivisions = e.partitioningSubdivisions ? e.partitioningSubdivisions : 10, e.partitioningBBoxRatio = e.partitioningBBoxRatio ? e.partitioningBBoxRatio : 1.01;
|
|
for (var t = 0; t < e.facetNb; t++) e.facetNormals[t] = s.x.Zero(), e.facetPositions[t] = s.x.Zero();
|
|
return e.facetDataEnabled = !0, this
|
|
}, t.prototype.updateFacetData = function() {
|
|
var e = this._internalAbstractMeshDataInfo._facetData;
|
|
e.facetDataEnabled || this._initFacetData();
|
|
var t = this.getVerticesData(c.b.PositionKind),
|
|
i = this.getIndices(),
|
|
n = this.getVerticesData(c.b.NormalKind),
|
|
r = this.getBoundingInfo();
|
|
if (e.facetDepthSort && !e.facetDepthSortEnabled) {
|
|
if (e.facetDepthSortEnabled = !0, i instanceof Uint16Array) e.depthSortedIndices = new Uint16Array(i);
|
|
else if (i instanceof Uint32Array) e.depthSortedIndices = new Uint32Array(i);
|
|
else {
|
|
for (var o = !1, a = 0; a < i.length; a++)
|
|
if (i[a] > 65535) {
|
|
o = !0;
|
|
break
|
|
} e.depthSortedIndices = o ? new Uint32Array(i) : new Uint16Array(i)
|
|
}
|
|
if (e.facetDepthSortFunction = function(e, t) {
|
|
return t.sqDistance - e.sqDistance
|
|
}, !e.facetDepthSortFrom) {
|
|
var u = this.getScene().activeCamera;
|
|
e.facetDepthSortFrom = u ? u.position : s.x.Zero()
|
|
}
|
|
e.depthSortedFacets = [];
|
|
for (var h = 0; h < e.facetNb; h++) {
|
|
var d = {
|
|
ind: 3 * h,
|
|
sqDistance: 0
|
|
};
|
|
e.depthSortedFacets.push(d)
|
|
}
|
|
e.invertedMatrix = s.j.Identity(), e.facetDepthSortOrigin = s.x.Zero()
|
|
}
|
|
e.bbSize.x = r.maximum.x - r.minimum.x > s.h ? r.maximum.x - r.minimum.x : s.h, e.bbSize.y = r.maximum.y - r.minimum.y > s.h ? r.maximum.y - r.minimum.y : s.h, e.bbSize.z = r.maximum.z - r.minimum.z > s.h ? r.maximum.z - r.minimum.z : s.h;
|
|
var f = e.bbSize.x > e.bbSize.y ? e.bbSize.x : e.bbSize.y;
|
|
if (f = f > e.bbSize.z ? f : e.bbSize.z, e.subDiv.max = e.partitioningSubdivisions, e.subDiv.X = Math.floor(e.subDiv.max * e.bbSize.x / f), e.subDiv.Y = Math.floor(e.subDiv.max * e.bbSize.y / f), e.subDiv.Z = Math.floor(e.subDiv.max * e.bbSize.z / f), e.subDiv.X = e.subDiv.X < 1 ? 1 : e.subDiv.X, e.subDiv.Y = e.subDiv.Y < 1 ? 1 : e.subDiv.Y, e.subDiv.Z = e.subDiv.Z < 1 ? 1 : e.subDiv.Z, e.facetParameters.facetNormals = this.getFacetLocalNormals(), e.facetParameters.facetPositions = this.getFacetLocalPositions(), e.facetParameters.facetPartitioning = this.getFacetLocalPartitioning(), e.facetParameters.bInfo = r, e.facetParameters.bbSize = e.bbSize, e.facetParameters.subDiv = e.subDiv, e.facetParameters.ratio = this.partitioningBBoxRatio, e.facetParameters.depthSort = e.facetDepthSort, e.facetDepthSort && e.facetDepthSortEnabled && (this.computeWorldMatrix(!0), this._worldMatrix.invertToRef(e.invertedMatrix), s.x.TransformCoordinatesToRef(e.facetDepthSortFrom, e.invertedMatrix, e.facetDepthSortOrigin), e.facetParameters.distanceTo = e.facetDepthSortOrigin), e.facetParameters.depthSortedFacets = e.depthSortedFacets, l.a.ComputeNormals(t, i, n, e.facetParameters), e.facetDepthSort && e.facetDepthSortEnabled) {
|
|
e.depthSortedFacets.sort(e.facetDepthSortFunction);
|
|
var p = e.depthSortedIndices.length / 3 | 0;
|
|
for (h = 0; h < p; h++) {
|
|
var _ = e.depthSortedFacets[h].ind;
|
|
e.depthSortedIndices[3 * h] = i[_], e.depthSortedIndices[3 * h + 1] = i[_ + 1], e.depthSortedIndices[3 * h + 2] = i[_ + 2]
|
|
}
|
|
this.updateIndices(e.depthSortedIndices, void 0, !0)
|
|
}
|
|
return this
|
|
}, t.prototype.getFacetLocalNormals = function() {
|
|
var e = this._internalAbstractMeshDataInfo._facetData;
|
|
return e.facetNormals || this.updateFacetData(), e.facetNormals
|
|
}, t.prototype.getFacetLocalPositions = function() {
|
|
var e = this._internalAbstractMeshDataInfo._facetData;
|
|
return e.facetPositions || this.updateFacetData(), e.facetPositions
|
|
}, t.prototype.getFacetLocalPartitioning = function() {
|
|
var e = this._internalAbstractMeshDataInfo._facetData;
|
|
return e.facetPartitioning || this.updateFacetData(), e.facetPartitioning
|
|
}, t.prototype.getFacetPosition = function(e) {
|
|
var t = s.x.Zero();
|
|
return this.getFacetPositionToRef(e, t), t
|
|
}, t.prototype.getFacetPositionToRef = function(e, t) {
|
|
var i = this.getFacetLocalPositions()[e],
|
|
n = this.getWorldMatrix();
|
|
return s.x.TransformCoordinatesToRef(i, n, t), this
|
|
}, t.prototype.getFacetNormal = function(e) {
|
|
var t = s.x.Zero();
|
|
return this.getFacetNormalToRef(e, t), t
|
|
}, t.prototype.getFacetNormalToRef = function(e, t) {
|
|
var i = this.getFacetLocalNormals()[e];
|
|
return s.x.TransformNormalToRef(i, this.getWorldMatrix(), t), this
|
|
}, t.prototype.getFacetsAtLocalCoordinates = function(e, t, i) {
|
|
var n = this.getBoundingInfo(),
|
|
r = this._internalAbstractMeshDataInfo._facetData,
|
|
o = Math.floor((e - n.minimum.x * r.partitioningBBoxRatio) * r.subDiv.X * r.partitioningBBoxRatio / r.bbSize.x),
|
|
s = Math.floor((t - n.minimum.y * r.partitioningBBoxRatio) * r.subDiv.Y * r.partitioningBBoxRatio / r.bbSize.y),
|
|
a = Math.floor((i - n.minimum.z * r.partitioningBBoxRatio) * r.subDiv.Z * r.partitioningBBoxRatio / r.bbSize.z);
|
|
return o < 0 || o > r.subDiv.max || s < 0 || s > r.subDiv.max || a < 0 || a > r.subDiv.max ? null : r.facetPartitioning[o + r.subDiv.max * s + r.subDiv.max * r.subDiv.max * a]
|
|
}, t.prototype.getClosestFacetAtCoordinates = function(e, t, i, n, r, o) {
|
|
void 0 === r && (r = !1), void 0 === o && (o = !0);
|
|
var a = this.getWorldMatrix(),
|
|
c = s.t.Matrix[5];
|
|
a.invertToRef(c);
|
|
var l = s.t.Vector3[8];
|
|
s.x.TransformCoordinatesFromFloatsToRef(e, t, i, c, l);
|
|
var u = this.getClosestFacetAtLocalCoordinates(l.x, l.y, l.z, n, r, o);
|
|
return n && s.x.TransformCoordinatesFromFloatsToRef(n.x, n.y, n.z, a, n), u
|
|
}, t.prototype.getClosestFacetAtLocalCoordinates = function(e, t, i, n, r, o) {
|
|
void 0 === r && (r = !1), void 0 === o && (o = !0);
|
|
var s = null,
|
|
a = 0,
|
|
c = 0,
|
|
l = 0,
|
|
u = 0,
|
|
h = 0,
|
|
d = 0,
|
|
f = 0,
|
|
p = 0,
|
|
_ = this.getFacetLocalPositions(),
|
|
g = this.getFacetLocalNormals(),
|
|
m = this.getFacetsAtLocalCoordinates(e, t, i);
|
|
if (!m) return null;
|
|
for (var v, y, b, T = Number.MAX_VALUE, E = T, A = 0; A < m.length; A++) y = g[v = m[A]], u = (e - (b = _[v]).x) * y.x + (t - b.y) * y.y + (i - b.z) * y.z, (!r || r && o && u >= 0 || r && !o && u <= 0) && (u = y.x * b.x + y.y * b.y + y.z * b.z, h = -(y.x * e + y.y * t + y.z * i - u) / (y.x * y.x + y.y * y.y + y.z * y.z), (E = (a = (d = e + y.x * h) - e) * a + (c = (f = t + y.y * h) - t) * c + (l = (p = i + y.z * h) - i) * l) < T && (T = E, s = v, n && (n.x = d, n.y = f, n.z = p)));
|
|
return s
|
|
}, t.prototype.getFacetDataParameters = function() {
|
|
return this._internalAbstractMeshDataInfo._facetData.facetParameters
|
|
}, t.prototype.disableFacetData = function() {
|
|
var e = this._internalAbstractMeshDataInfo._facetData;
|
|
return e.facetDataEnabled && (e.facetDataEnabled = !1, e.facetPositions = new Array, e.facetNormals = new Array, e.facetPartitioning = new Array, e.facetParameters = null, e.depthSortedIndices = new Uint32Array(0)), this
|
|
}, t.prototype.updateIndices = function(e, t, i) {
|
|
return void 0 === i && (i = !1), this
|
|
}, t.prototype.createNormals = function(e) {
|
|
var t, i = this.getVerticesData(c.b.PositionKind),
|
|
n = this.getIndices();
|
|
return t = this.isVerticesDataPresent(c.b.NormalKind) ? this.getVerticesData(c.b.NormalKind) : [], l.a.ComputeNormals(i, n, t, {
|
|
useRightHandedSystem: this.getScene().useRightHandedSystem
|
|
}), this.setVerticesData(c.b.NormalKind, t, e), this
|
|
}, t.prototype.alignWithNormal = function(e, t) {
|
|
t || (t = s.c.Y);
|
|
var i = s.t.Vector3[0],
|
|
n = s.t.Vector3[1];
|
|
return s.x.CrossToRef(t, e, n), s.x.CrossToRef(e, n, i), this.rotationQuaternion ? s.q.RotationQuaternionFromAxisToRef(i, e, n, this.rotationQuaternion) : s.x.RotationFromAxisToRef(i, e, n, this.rotation), this
|
|
}, t.prototype._checkOcclusionQuery = function() {
|
|
return !1
|
|
}, t.prototype.disableEdgesRendering = function() {
|
|
throw _.a.WarnImport("EdgesRenderer")
|
|
}, t.prototype.enableEdgesRendering = function(e, t) {
|
|
throw _.a.WarnImport("EdgesRenderer")
|
|
}, t.OCCLUSION_TYPE_NONE = 0, t.OCCLUSION_TYPE_OPTIMISTIC = 1, t.OCCLUSION_TYPE_STRICT = 2, t.OCCLUSION_ALGORITHM_TYPE_ACCURATE = 0, t.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE = 1, t.CULLINGSTRATEGY_STANDARD = f.a.MESHES_CULLINGSTRATEGY_STANDARD, t.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY = f.a.MESHES_CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY, t.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION = f.a.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION, t.CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY = f.a.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY, t
|
|
}(u.a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return u
|
|
});
|
|
var n = i(1),
|
|
r = i(0),
|
|
o = i(2),
|
|
s = i(8),
|
|
a = i(23),
|
|
c = i(19),
|
|
l = i(9),
|
|
u = function() {
|
|
function e(e, t, i) {
|
|
void 0 === t && (t = null), void 0 === i && (i = !0), this.state = "", this.metadata = null, this.reservedDataStore = null, this.doNotSerialize = !1, this._isDisposed = !1, this.animations = new Array, this._ranges = {}, this.onReady = null, this._isEnabled = !0, this._isParentEnabled = !0, this._isReady = !0, this._currentRenderId = -1, this._parentUpdateId = -1, this._childUpdateId = -1, this._waitingParentId = null, this._cache = {}, this._parentNode = null, this._children = null, this._worldMatrix = r.j.Identity(), this._worldMatrixDeterminant = 0, this._worldMatrixDeterminantIsDirty = !0, this._sceneRootNodesIndex = -1, this._animationPropertiesOverride = null, this._isNode = !0, this.onDisposeObservable = new s.c, this._onDisposeObserver = null, this._behaviors = new Array, this.name = e, this.id = e, this._scene = t || a.a.LastCreatedScene, this.uniqueId = this._scene.getUniqueId(), this._initCache(), i && this.addToSceneRootNodes()
|
|
}
|
|
return e.AddNodeConstructor = function(e, t) {
|
|
this._NodeConstructors[e] = t
|
|
}, e.Construct = function(e, t, i, n) {
|
|
var r = this._NodeConstructors[e];
|
|
return r ? r(t, i, n) : null
|
|
}, e.prototype.isDisposed = function() {
|
|
return this._isDisposed
|
|
}, Object.defineProperty(e.prototype, "parent", {
|
|
get: function() {
|
|
return this._parentNode
|
|
},
|
|
set: function(e) {
|
|
if (this._parentNode !== e) {
|
|
var t = this._parentNode;
|
|
if (this._parentNode && void 0 !== this._parentNode._children && null !== this._parentNode._children) {
|
|
var i = this._parentNode._children.indexOf(this); - 1 !== i && this._parentNode._children.splice(i, 1), e || this._isDisposed || this.addToSceneRootNodes()
|
|
}
|
|
this._parentNode = e, this._parentNode && (void 0 !== this._parentNode._children && null !== this._parentNode._children || (this._parentNode._children = new Array), this._parentNode._children.push(this), t || this.removeFromSceneRootNodes()), this._syncParentEnabledState()
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.addToSceneRootNodes = function() {
|
|
-1 === this._sceneRootNodesIndex && (this._sceneRootNodesIndex = this._scene.rootNodes.length, this._scene.rootNodes.push(this))
|
|
}, e.prototype.removeFromSceneRootNodes = function() {
|
|
if (-1 !== this._sceneRootNodesIndex) {
|
|
var e = this._scene.rootNodes,
|
|
t = e.length - 1;
|
|
e[this._sceneRootNodesIndex] = e[t], e[this._sceneRootNodesIndex]._sceneRootNodesIndex = this._sceneRootNodesIndex, this._scene.rootNodes.pop(), this._sceneRootNodesIndex = -1
|
|
}
|
|
}, Object.defineProperty(e.prototype, "animationPropertiesOverride", {
|
|
get: function() {
|
|
return this._animationPropertiesOverride ? this._animationPropertiesOverride : this._scene.animationPropertiesOverride
|
|
},
|
|
set: function(e) {
|
|
this._animationPropertiesOverride = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getClassName = function() {
|
|
return "Node"
|
|
}, Object.defineProperty(e.prototype, "onDispose", {
|
|
set: function(e) {
|
|
this._onDisposeObserver && this.onDisposeObservable.remove(this._onDisposeObserver), this._onDisposeObserver = this.onDisposeObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getScene = function() {
|
|
return this._scene
|
|
}, e.prototype.getEngine = function() {
|
|
return this._scene.getEngine()
|
|
}, e.prototype.addBehavior = function(e, t) {
|
|
var i = this;
|
|
return void 0 === t && (t = !1), -1 !== this._behaviors.indexOf(e) ? this : (e.init(), this._scene.isLoading && !t ? this._scene.onDataLoadedObservable.addOnce(function() {
|
|
e.attach(i)
|
|
}) : e.attach(this), this._behaviors.push(e), this)
|
|
}, e.prototype.removeBehavior = function(e) {
|
|
var t = this._behaviors.indexOf(e);
|
|
return -1 === t ? this : (this._behaviors[t].detach(), this._behaviors.splice(t, 1), this)
|
|
}, Object.defineProperty(e.prototype, "behaviors", {
|
|
get: function() {
|
|
return this._behaviors
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getBehaviorByName = function(e) {
|
|
for (var t = 0, i = this._behaviors; t < i.length; t++) {
|
|
var n = i[t];
|
|
if (n.name === e) return n
|
|
}
|
|
return null
|
|
}, e.prototype.getWorldMatrix = function() {
|
|
return this._currentRenderId !== this._scene.getRenderId() && this.computeWorldMatrix(), this._worldMatrix
|
|
}, e.prototype._getWorldMatrixDeterminant = function() {
|
|
return this._worldMatrixDeterminantIsDirty && (this._worldMatrixDeterminantIsDirty = !1, this._worldMatrixDeterminant = this._worldMatrix.determinant()), this._worldMatrixDeterminant
|
|
}, Object.defineProperty(e.prototype, "worldMatrixFromCache", {
|
|
get: function() {
|
|
return this._worldMatrix
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._initCache = function() {
|
|
this._cache = {}, this._cache.parent = void 0
|
|
}, e.prototype.updateCache = function(e) {
|
|
!e && this.isSynchronized() || (this._cache.parent = this.parent, this._updateCache())
|
|
}, e.prototype._getActionManagerForTrigger = function(e, t) {
|
|
return void 0 === t && (t = !0), this.parent ? this.parent._getActionManagerForTrigger(e, !1) : null
|
|
}, e.prototype._updateCache = function(e) {}, e.prototype._isSynchronized = function() {
|
|
return !0
|
|
}, e.prototype._markSyncedWithParent = function() {
|
|
this._parentNode && (this._parentUpdateId = this._parentNode._childUpdateId)
|
|
}, e.prototype.isSynchronizedWithParent = function() {
|
|
return !this._parentNode || this._parentUpdateId === this._parentNode._childUpdateId && this._parentNode.isSynchronized()
|
|
}, e.prototype.isSynchronized = function() {
|
|
return this._cache.parent != this._parentNode ? (this._cache.parent = this._parentNode, !1) : !(this._parentNode && !this.isSynchronizedWithParent()) && this._isSynchronized()
|
|
}, e.prototype.isReady = function(e) {
|
|
return void 0 === e && (e = !1), this._isReady
|
|
}, e.prototype.isEnabled = function(e) {
|
|
return void 0 === e && (e = !0), !1 === e ? this._isEnabled : !!this._isEnabled && this._isParentEnabled
|
|
}, e.prototype._syncParentEnabledState = function() {
|
|
this._isParentEnabled = !this._parentNode || this._parentNode.isEnabled(), this._children && this._children.forEach(function(e) {
|
|
e._syncParentEnabledState()
|
|
})
|
|
}, e.prototype.setEnabled = function(e) {
|
|
this._isEnabled = e, this._syncParentEnabledState()
|
|
}, e.prototype.isDescendantOf = function(e) {
|
|
return !!this.parent && (this.parent === e || this.parent.isDescendantOf(e))
|
|
}, e.prototype._getDescendants = function(e, t, i) {
|
|
if (void 0 === t && (t = !1), this._children)
|
|
for (var n = 0; n < this._children.length; n++) {
|
|
var r = this._children[n];
|
|
i && !i(r) || e.push(r), t || r._getDescendants(e, !1, i)
|
|
}
|
|
}, e.prototype.getDescendants = function(e, t) {
|
|
var i = new Array;
|
|
return this._getDescendants(i, e, t), i
|
|
}, e.prototype.getChildMeshes = function(e, t) {
|
|
var i = [];
|
|
return this._getDescendants(i, e, function(e) {
|
|
return (!t || t(e)) && void 0 !== e.cullingStrategy
|
|
}), i
|
|
}, e.prototype.getChildren = function(e, t) {
|
|
return void 0 === t && (t = !0), this.getDescendants(t, e)
|
|
}, e.prototype._setReady = function(e) {
|
|
e !== this._isReady && (e ? (this.onReady && this.onReady(this), this._isReady = !0) : this._isReady = !1)
|
|
}, e.prototype.getAnimationByName = function(e) {
|
|
for (var t = 0; t < this.animations.length; t++) {
|
|
var i = this.animations[t];
|
|
if (i.name === e) return i
|
|
}
|
|
return null
|
|
}, e.prototype.createAnimationRange = function(t, i, n) {
|
|
if (!this._ranges[t]) {
|
|
this._ranges[t] = e._AnimationRangeFactory(t, i, n);
|
|
for (var r = 0, o = this.animations.length; r < o; r++) this.animations[r] && this.animations[r].createRange(t, i, n)
|
|
}
|
|
}, e.prototype.deleteAnimationRange = function(e, t) {
|
|
void 0 === t && (t = !0);
|
|
for (var i = 0, n = this.animations.length; i < n; i++) this.animations[i] && this.animations[i].deleteRange(e, t);
|
|
this._ranges[e] = null
|
|
}, e.prototype.getAnimationRange = function(e) {
|
|
return this._ranges[e]
|
|
}, e.prototype.getAnimationRanges = function() {
|
|
var e, t = [];
|
|
for (e in this._ranges) t.push(this._ranges[e]);
|
|
return t
|
|
}, e.prototype.beginAnimation = function(e, t, i, n) {
|
|
var r = this.getAnimationRange(e);
|
|
return r ? this._scene.beginAnimation(this, r.from, r.to, t, i, n) : null
|
|
}, e.prototype.serializeAnimationRanges = function() {
|
|
var e = [];
|
|
for (var t in this._ranges) {
|
|
var i = this._ranges[t];
|
|
if (i) {
|
|
var n = {};
|
|
n.name = t, n.from = i.from, n.to = i.to, e.push(n)
|
|
}
|
|
}
|
|
return e
|
|
}, e.prototype.computeWorldMatrix = function(e) {
|
|
return this._worldMatrix || (this._worldMatrix = r.j.Identity()), this._worldMatrix
|
|
}, e.prototype.dispose = function(e, t) {
|
|
if (void 0 === t && (t = !1), this._isDisposed = !0, !e)
|
|
for (var i = 0, n = this.getDescendants(!0); i < n.length; i++) {
|
|
n[i].dispose(e, t)
|
|
}
|
|
this.parent ? this.parent = null : this.removeFromSceneRootNodes(), this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear();
|
|
for (var r = 0, o = this._behaviors; r < o.length; r++) {
|
|
o[r].detach()
|
|
}
|
|
this._behaviors = []
|
|
}, e.ParseAnimationRanges = function(e, t, i) {
|
|
if (t.ranges)
|
|
for (var n = 0; n < t.ranges.length; n++) {
|
|
var r = t.ranges[n];
|
|
e.createAnimationRange(r.name, r.from, r.to)
|
|
}
|
|
}, e.prototype.getHierarchyBoundingVectors = function(e, t) {
|
|
var i, n;
|
|
void 0 === e && (e = !0), void 0 === t && (t = null), this.getScene().incrementRenderId(), this.computeWorldMatrix(!0);
|
|
if (this.getBoundingInfo && this.subMeshes) {
|
|
var o = this.getBoundingInfo();
|
|
i = o.boundingBox.minimumWorld, n = o.boundingBox.maximumWorld
|
|
} else i = new r.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), n = new r.x(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE);
|
|
if (e)
|
|
for (var s = 0, a = this.getDescendants(!1); s < a.length; s++) {
|
|
var c = a[s];
|
|
if (c.computeWorldMatrix(!0), (!t || t(c)) && c.getBoundingInfo && 0 !== c.getTotalVertices()) {
|
|
var u = c.getBoundingInfo().boundingBox,
|
|
h = u.minimumWorld,
|
|
d = u.maximumWorld;
|
|
l.h.CheckExtends(h, i, n), l.h.CheckExtends(d, i, n)
|
|
}
|
|
}
|
|
return {
|
|
min: i,
|
|
max: n
|
|
}
|
|
}, e._AnimationRangeFactory = function(e, t, i) {
|
|
throw c.a.WarnImport("AnimationRange")
|
|
}, e._NodeConstructors = {}, n.c([Object(o.c)()], e.prototype, "name", void 0), n.c([Object(o.c)()], e.prototype, "id", void 0), n.c([Object(o.c)()], e.prototype, "uniqueId", void 0), n.c([Object(o.c)()], e.prototype, "state", void 0), n.c([Object(o.c)()], e.prototype, "metadata", void 0), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return a
|
|
});
|
|
var n = i(8),
|
|
r = i(92),
|
|
o = i(3),
|
|
s = i(19),
|
|
a = function() {
|
|
function e(t, i, r) {
|
|
void 0 === r && (r = !1), this.isReady = !1, this.isCube = !1, this.is3D = !1, this.isMultiview = !1, this.url = "", this.samplingMode = -1, this.generateMipMaps = !1, this.samples = 0, this.type = -1, this.format = -1, this.onLoadedObservable = new n.c, this.width = 0, this.height = 0, this.depth = 0, this.baseWidth = 0, this.baseHeight = 0, this.baseDepth = 0, this.invertY = !1, this._invertVScale = !1, this._associatedChannel = -1, this._dataSource = e.DATASOURCE_UNKNOWN, this._buffer = null, this._bufferView = null, this._bufferViewArray = null, this._bufferViewArrayArray = null, this._size = 0, this._extension = "", this._files = null, this._workingCanvas = null, this._workingContext = null, this._framebuffer = null, this._depthStencilBuffer = null, this._MSAAFramebuffer = null, this._MSAARenderBuffer = null, this._attachments = null, this._cachedCoordinatesMode = null, this._cachedWrapU = null, this._cachedWrapV = null, this._cachedWrapR = null, this._cachedAnisotropicFilteringLevel = null, this._isDisabled = !1, this._compression = null, this._generateStencilBuffer = !1, this._generateDepthBuffer = !1, this._comparisonFunction = 0, this._sphericalPolynomial = null, this._lodGenerationScale = 0, this._lodGenerationOffset = 0, this._colorTextureArray = null, this._depthStencilTextureArray = null, this._lodTextureHigh = null, this._lodTextureMid = null, this._lodTextureLow = null, this._isRGBD = !1, this._webGLTexture = null, this._references = 1, this._engine = t, this._dataSource = i, r || (this._webGLTexture = t._createTexture())
|
|
}
|
|
return e.prototype.getEngine = function() {
|
|
return this._engine
|
|
}, Object.defineProperty(e.prototype, "dataSource", {
|
|
get: function() {
|
|
return this._dataSource
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.incrementReferences = function() {
|
|
this._references++
|
|
}, e.prototype.updateSize = function(e, t, i) {
|
|
void 0 === i && (i = 1), this.width = e, this.height = t, this.depth = i, this.baseWidth = e, this.baseHeight = t, this.baseDepth = i, this._size = e * t * i
|
|
}, e.prototype._rebuild = function() {
|
|
var t, i = this;
|
|
switch (this.isReady = !1, this._cachedCoordinatesMode = null, this._cachedWrapU = null, this._cachedWrapV = null, this._cachedAnisotropicFilteringLevel = null, this._dataSource) {
|
|
case e.DATASOURCE_TEMP:
|
|
return;
|
|
case e.DATASOURCE_URL:
|
|
return void(t = this._engine.createTexture(this.url, !this.generateMipMaps, this.invertY, null, this.samplingMode, function() {
|
|
t._swapAndDie(i), i.isReady = !0
|
|
}, null, this._buffer, void 0, this.format));
|
|
case e.DATASOURCE_RAW:
|
|
return (t = this._engine.createRawTexture(this._bufferView, this.baseWidth, this.baseHeight, this.format, this.generateMipMaps, this.invertY, this.samplingMode, this._compression))._swapAndDie(this), void(this.isReady = !0);
|
|
case e.DATASOURCE_RAW3D:
|
|
return (t = this._engine.createRawTexture3D(this._bufferView, this.baseWidth, this.baseHeight, this.baseDepth, this.format, this.generateMipMaps, this.invertY, this.samplingMode, this._compression))._swapAndDie(this), void(this.isReady = !0);
|
|
case e.DATASOURCE_DYNAMIC:
|
|
return (t = this._engine.createDynamicTexture(this.baseWidth, this.baseHeight, this.generateMipMaps, this.samplingMode))._swapAndDie(this), void this._engine.updateDynamicTexture(this, this._engine.getRenderingCanvas(), this.invertY, void 0, void 0, !0);
|
|
case e.DATASOURCE_RENDERTARGET:
|
|
var n = new r.a;
|
|
if (n.generateDepthBuffer = this._generateDepthBuffer, n.generateMipMaps = this.generateMipMaps, n.generateStencilBuffer = this._generateStencilBuffer, n.samplingMode = this.samplingMode, n.type = this.type, this.isCube) t = this._engine.createRenderTargetCubeTexture(this.width, n);
|
|
else {
|
|
var s = {
|
|
width: this.width,
|
|
height: this.height
|
|
};
|
|
t = this._engine.createRenderTargetTexture(s, n)
|
|
}
|
|
return t._swapAndDie(this), void(this.isReady = !0);
|
|
case e.DATASOURCE_DEPTHTEXTURE:
|
|
var a = {
|
|
bilinearFiltering: this.samplingMode !== o.a.TEXTURE_BILINEAR_SAMPLINGMODE,
|
|
comparisonFunction: this._comparisonFunction,
|
|
generateStencil: this._generateStencilBuffer,
|
|
isCube: this.isCube
|
|
};
|
|
return (t = this._engine.createDepthStencilTexture({
|
|
width: this.width,
|
|
height: this.height
|
|
}, a))._swapAndDie(this), void(this.isReady = !0);
|
|
case e.DATASOURCE_CUBE:
|
|
return void(t = this._engine.createCubeTexture(this.url, null, this._files, !this.generateMipMaps, function() {
|
|
t._swapAndDie(i), i.isReady = !0
|
|
}, null, this.format, this._extension));
|
|
case e.DATASOURCE_CUBERAW:
|
|
return (t = this._engine.createRawCubeTexture(this._bufferViewArray, this.width, this.format, this.type, this.generateMipMaps, this.invertY, this.samplingMode, this._compression))._swapAndDie(this), void(this.isReady = !0);
|
|
case e.DATASOURCE_CUBERAW_RGBD:
|
|
return t = this._engine.createRawCubeTexture(null, this.width, this.format, this.type, this.generateMipMaps, this.invertY, this.samplingMode, this._compression), void e._UpdateRGBDAsync(t, this._bufferViewArrayArray, this._sphericalPolynomial, this._lodGenerationScale, this._lodGenerationOffset).then(function() {
|
|
t._swapAndDie(i), i.isReady = !0
|
|
});
|
|
case e.DATASOURCE_CUBEPREFILTERED:
|
|
return void((t = this._engine.createPrefilteredCubeTexture(this.url, null, this._lodGenerationScale, this._lodGenerationOffset, function(e) {
|
|
e && e._swapAndDie(i), i.isReady = !0
|
|
}, null, this.format, this._extension))._sphericalPolynomial = this._sphericalPolynomial)
|
|
}
|
|
}, e.prototype._swapAndDie = function(e) {
|
|
e._webGLTexture = this._webGLTexture, e._isRGBD = this._isRGBD, this._framebuffer && (e._framebuffer = this._framebuffer), this._depthStencilBuffer && (e._depthStencilBuffer = this._depthStencilBuffer), this._lodTextureHigh && (e._lodTextureHigh && e._lodTextureHigh.dispose(), e._lodTextureHigh = this._lodTextureHigh), this._lodTextureMid && (e._lodTextureMid && e._lodTextureMid.dispose(), e._lodTextureMid = this._lodTextureMid), this._lodTextureLow && (e._lodTextureLow && e._lodTextureLow.dispose(), e._lodTextureLow = this._lodTextureLow);
|
|
var t = this._engine.getLoadedTexturesCache(),
|
|
i = t.indexOf(this); - 1 !== i && t.splice(i, 1)
|
|
}, e.prototype.dispose = function() {
|
|
this._webGLTexture && (this._references--, 0 === this._references && (this._engine._releaseTexture(this), this._webGLTexture = null))
|
|
}, e._UpdateRGBDAsync = function(e, t, i, n, r) {
|
|
throw s.a.WarnImport("environmentTextureTools")
|
|
}, e.DATASOURCE_UNKNOWN = 0, e.DATASOURCE_URL = 1, e.DATASOURCE_TEMP = 2, e.DATASOURCE_RAW = 3, e.DATASOURCE_DYNAMIC = 4, e.DATASOURCE_RENDERTARGET = 5, e.DATASOURCE_MULTIRENDERTARGET = 6, e.DATASOURCE_CUBE = 7, e.DATASOURCE_CUBERAW = 8, e.DATASOURCE_CUBEPREFILTERED = 9, e.DATASOURCE_RAW3D = 10, e.DATASOURCE_DEPTHTEXTURE = 11, e.DATASOURCE_CUBERAW_RGBD = 12, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return l
|
|
});
|
|
var n = i(6),
|
|
r = i(34),
|
|
o = i(0),
|
|
s = i(24),
|
|
a = i(11),
|
|
c = i(37);
|
|
a.a._PhysicsImpostorParser = function(e, t, i) {
|
|
return new l(t, i.physicsImpostor, {
|
|
mass: i.physicsMass,
|
|
friction: i.physicsFriction,
|
|
restitution: i.physicsRestitution
|
|
}, e)
|
|
};
|
|
var l = function() {
|
|
function e(e, t, i, r) {
|
|
var s = this;
|
|
void 0 === i && (i = {
|
|
mass: 0
|
|
}), this.object = e, this.type = t, this._options = i, this._scene = r, this._pluginData = {}, this._bodyUpdateRequired = !1, this._onBeforePhysicsStepCallbacks = new Array, this._onAfterPhysicsStepCallbacks = new Array, this._onPhysicsCollideCallbacks = [], this._deltaPosition = o.x.Zero(), this._isDisposed = !1, this.soft = !1, this.segments = 0, this._tmpQuat = new o.q, this._tmpQuat2 = new o.q, this.beforeStep = function() {
|
|
s._physicsEngine && (s.object.translate(s._deltaPosition, -1), s._deltaRotationConjugated && s.object.rotationQuaternion && s.object.rotationQuaternion.multiplyToRef(s._deltaRotationConjugated, s.object.rotationQuaternion), s.object.computeWorldMatrix(!1), s.object.parent && s.object.rotationQuaternion ? (s.getParentsRotation(), s._tmpQuat.multiplyToRef(s.object.rotationQuaternion, s._tmpQuat)) : s._tmpQuat.copyFrom(s.object.rotationQuaternion || new o.q), s._options.disableBidirectionalTransformation || s.object.rotationQuaternion && s._physicsEngine.getPhysicsPlugin().setPhysicsBodyTransformation(s, s.object.getAbsolutePosition(), s._tmpQuat), s._onBeforePhysicsStepCallbacks.forEach(function(e) {
|
|
e(s)
|
|
}))
|
|
}, this.afterStep = function() {
|
|
s._physicsEngine && (s._onAfterPhysicsStepCallbacks.forEach(function(e) {
|
|
e(s)
|
|
}), s._physicsEngine.getPhysicsPlugin().setTransformationFromPhysicsBody(s), s.object.parent && s.object.rotationQuaternion && (s.getParentsRotation(), s._tmpQuat.conjugateInPlace(), s._tmpQuat.multiplyToRef(s.object.rotationQuaternion, s.object.rotationQuaternion)), s.object.setAbsolutePosition(s.object.position), s._deltaRotation && s.object.rotationQuaternion && s.object.rotationQuaternion.multiplyToRef(s._deltaRotation, s.object.rotationQuaternion), s.object.translate(s._deltaPosition, 1))
|
|
}, this.onCollideEvent = null, this.onCollide = function(e) {
|
|
if ((s._onPhysicsCollideCallbacks.length || s.onCollideEvent) && s._physicsEngine) {
|
|
var t = s._physicsEngine.getImpostorWithPhysicsBody(e.body);
|
|
t && (s.onCollideEvent && s.onCollideEvent(s, t), s._onPhysicsCollideCallbacks.filter(function(e) {
|
|
return -1 !== e.otherImpostors.indexOf(t)
|
|
}).forEach(function(e) {
|
|
e.callback(s, t)
|
|
}))
|
|
}
|
|
}, this.object ? (!this._scene && e.getScene && (this._scene = e.getScene()), this._scene && (this.type > 100 && (this.soft = !0), this._physicsEngine = this._scene.getPhysicsEngine(), this._physicsEngine ? (this.object.rotationQuaternion || (this.object.rotation ? this.object.rotationQuaternion = o.q.RotationYawPitchRoll(this.object.rotation.y, this.object.rotation.x, this.object.rotation.z) : this.object.rotationQuaternion = new o.q), this._options.mass = void 0 === i.mass ? 0 : i.mass, this._options.friction = void 0 === i.friction ? .2 : i.friction, this._options.restitution = void 0 === i.restitution ? .2 : i.restitution, this.soft && (this._options.mass = this._options.mass > 0 ? this._options.mass : 1, this._options.pressure = void 0 === i.pressure ? 200 : i.pressure, this._options.stiffness = void 0 === i.stiffness ? 1 : i.stiffness, this._options.velocityIterations = void 0 === i.velocityIterations ? 20 : i.velocityIterations, this._options.positionIterations = void 0 === i.positionIterations ? 20 : i.positionIterations, this._options.fixedPoints = void 0 === i.fixedPoints ? 0 : i.fixedPoints, this._options.margin = void 0 === i.margin ? 0 : i.margin, this._options.damping = void 0 === i.damping ? 0 : i.damping, this._options.path = void 0 === i.path ? null : i.path, this._options.shape = void 0 === i.shape ? null : i.shape), this._joints = [], !this.object.parent || this._options.ignoreParent ? this._init() : this.object.parent.physicsImpostor && n.a.Warn("You must affect impostors to children before affecting impostor to parent.")) : n.a.Error("Physics not enabled. Please use scene.enablePhysics(...) before creating impostors."))) : n.a.Error("No object was provided. A physics object is obligatory")
|
|
}
|
|
return Object.defineProperty(e.prototype, "isDisposed", {
|
|
get: function() {
|
|
return this._isDisposed
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "mass", {
|
|
get: function() {
|
|
return this._physicsEngine ? this._physicsEngine.getPhysicsPlugin().getBodyMass(this) : 0
|
|
},
|
|
set: function(e) {
|
|
this.setMass(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "friction", {
|
|
get: function() {
|
|
return this._physicsEngine ? this._physicsEngine.getPhysicsPlugin().getBodyFriction(this) : 0
|
|
},
|
|
set: function(e) {
|
|
this._physicsEngine && this._physicsEngine.getPhysicsPlugin().setBodyFriction(this, e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "restitution", {
|
|
get: function() {
|
|
return this._physicsEngine ? this._physicsEngine.getPhysicsPlugin().getBodyRestitution(this) : 0
|
|
},
|
|
set: function(e) {
|
|
this._physicsEngine && this._physicsEngine.getPhysicsPlugin().setBodyRestitution(this, e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "pressure", {
|
|
get: function() {
|
|
if (!this._physicsEngine) return 0;
|
|
var e = this._physicsEngine.getPhysicsPlugin();
|
|
return e.setBodyPressure ? e.getBodyPressure(this) : 0
|
|
},
|
|
set: function(e) {
|
|
if (this._physicsEngine) {
|
|
var t = this._physicsEngine.getPhysicsPlugin();
|
|
t.setBodyPressure && t.setBodyPressure(this, e)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "stiffness", {
|
|
get: function() {
|
|
if (!this._physicsEngine) return 0;
|
|
var e = this._physicsEngine.getPhysicsPlugin();
|
|
return e.getBodyStiffness ? e.getBodyStiffness(this) : 0
|
|
},
|
|
set: function(e) {
|
|
if (this._physicsEngine) {
|
|
var t = this._physicsEngine.getPhysicsPlugin();
|
|
t.setBodyStiffness && t.setBodyStiffness(this, e)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "velocityIterations", {
|
|
get: function() {
|
|
if (!this._physicsEngine) return 0;
|
|
var e = this._physicsEngine.getPhysicsPlugin();
|
|
return e.getBodyVelocityIterations ? e.getBodyVelocityIterations(this) : 0
|
|
},
|
|
set: function(e) {
|
|
if (this._physicsEngine) {
|
|
var t = this._physicsEngine.getPhysicsPlugin();
|
|
t.setBodyVelocityIterations && t.setBodyVelocityIterations(this, e)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "positionIterations", {
|
|
get: function() {
|
|
if (!this._physicsEngine) return 0;
|
|
var e = this._physicsEngine.getPhysicsPlugin();
|
|
return e.getBodyPositionIterations ? e.getBodyPositionIterations(this) : 0
|
|
},
|
|
set: function(e) {
|
|
if (this._physicsEngine) {
|
|
var t = this._physicsEngine.getPhysicsPlugin();
|
|
t.setBodyPositionIterations && t.setBodyPositionIterations(this, e)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._init = function() {
|
|
this._physicsEngine && (this._physicsEngine.removeImpostor(this), this.physicsBody = null, this._parent = this._parent || this._getPhysicsParent(), this._isDisposed || this.parent && !this._options.ignoreParent || this._physicsEngine.addImpostor(this))
|
|
}, e.prototype._getPhysicsParent = function() {
|
|
return this.object.parent instanceof s.a ? this.object.parent.physicsImpostor : null
|
|
}, e.prototype.isBodyInitRequired = function() {
|
|
return this._bodyUpdateRequired || !this._physicsBody && !this._parent
|
|
}, e.prototype.setScalingUpdated = function() {
|
|
this.forceUpdate()
|
|
}, e.prototype.forceUpdate = function() {
|
|
this._init(), this.parent && !this._options.ignoreParent && this.parent.forceUpdate()
|
|
}, Object.defineProperty(e.prototype, "physicsBody", {
|
|
get: function() {
|
|
return this._parent && !this._options.ignoreParent ? this._parent.physicsBody : this._physicsBody
|
|
},
|
|
set: function(e) {
|
|
this._physicsBody && this._physicsEngine && this._physicsEngine.getPhysicsPlugin().removePhysicsBody(this), this._physicsBody = e, this.resetUpdateFlags()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "parent", {
|
|
get: function() {
|
|
return !this._options.ignoreParent && this._parent ? this._parent : null
|
|
},
|
|
set: function(e) {
|
|
this._parent = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.resetUpdateFlags = function() {
|
|
this._bodyUpdateRequired = !1
|
|
}, e.prototype.getObjectExtendSize = function() {
|
|
if (this.object.getBoundingInfo) {
|
|
var t = this.object.rotationQuaternion;
|
|
this.object.rotationQuaternion = e.IDENTITY_QUATERNION, this.object.computeWorldMatrix && this.object.computeWorldMatrix(!0);
|
|
var i = this.object.getBoundingInfo().boundingBox.extendSizeWorld.scale(2);
|
|
return this.object.rotationQuaternion = t, this.object.computeWorldMatrix && this.object.computeWorldMatrix(!0), i
|
|
}
|
|
return e.DEFAULT_OBJECT_SIZE
|
|
}, e.prototype.getObjectCenter = function() {
|
|
return this.object.getBoundingInfo ? this.object.getBoundingInfo().boundingBox.centerWorld : this.object.position
|
|
}, e.prototype.getParam = function(e) {
|
|
return this._options[e]
|
|
}, e.prototype.setParam = function(e, t) {
|
|
this._options[e] = t, this._bodyUpdateRequired = !0
|
|
}, e.prototype.setMass = function(e) {
|
|
this.getParam("mass") !== e && this.setParam("mass", e), this._physicsEngine && this._physicsEngine.getPhysicsPlugin().setBodyMass(this, e)
|
|
}, e.prototype.getLinearVelocity = function() {
|
|
return this._physicsEngine ? this._physicsEngine.getPhysicsPlugin().getLinearVelocity(this) : o.x.Zero()
|
|
}, e.prototype.setLinearVelocity = function(e) {
|
|
this._physicsEngine && this._physicsEngine.getPhysicsPlugin().setLinearVelocity(this, e)
|
|
}, e.prototype.getAngularVelocity = function() {
|
|
return this._physicsEngine ? this._physicsEngine.getPhysicsPlugin().getAngularVelocity(this) : o.x.Zero()
|
|
}, e.prototype.setAngularVelocity = function(e) {
|
|
this._physicsEngine && this._physicsEngine.getPhysicsPlugin().setAngularVelocity(this, e)
|
|
}, e.prototype.executeNativeFunction = function(e) {
|
|
this._physicsEngine && e(this._physicsEngine.getPhysicsPlugin().world, this.physicsBody)
|
|
}, e.prototype.registerBeforePhysicsStep = function(e) {
|
|
this._onBeforePhysicsStepCallbacks.push(e)
|
|
}, e.prototype.unregisterBeforePhysicsStep = function(e) {
|
|
var t = this._onBeforePhysicsStepCallbacks.indexOf(e);
|
|
t > -1 ? this._onBeforePhysicsStepCallbacks.splice(t, 1) : n.a.Warn("Function to remove was not found")
|
|
}, e.prototype.registerAfterPhysicsStep = function(e) {
|
|
this._onAfterPhysicsStepCallbacks.push(e)
|
|
}, e.prototype.unregisterAfterPhysicsStep = function(e) {
|
|
var t = this._onAfterPhysicsStepCallbacks.indexOf(e);
|
|
t > -1 ? this._onAfterPhysicsStepCallbacks.splice(t, 1) : n.a.Warn("Function to remove was not found")
|
|
}, e.prototype.registerOnPhysicsCollide = function(e, t) {
|
|
var i = e instanceof Array ? e : [e];
|
|
this._onPhysicsCollideCallbacks.push({
|
|
callback: t,
|
|
otherImpostors: i
|
|
})
|
|
}, e.prototype.unregisterOnPhysicsCollide = function(e, t) {
|
|
var i = e instanceof Array ? e : [e],
|
|
r = -1;
|
|
this._onPhysicsCollideCallbacks.some(function(e, n) {
|
|
if (e.callback === t && e.otherImpostors.length === i.length) {
|
|
var o = e.otherImpostors.every(function(e) {
|
|
return i.indexOf(e) > -1
|
|
});
|
|
return o && (r = n), o
|
|
}
|
|
return !1
|
|
}) ? this._onPhysicsCollideCallbacks.splice(r, 1) : n.a.Warn("Function to remove was not found")
|
|
}, e.prototype.getParentsRotation = function() {
|
|
var e = this.object.parent;
|
|
for (this._tmpQuat.copyFromFloats(0, 0, 0, 1); e;) e.rotationQuaternion ? this._tmpQuat2.copyFrom(e.rotationQuaternion) : o.q.RotationYawPitchRollToRef(e.rotation.y, e.rotation.x, e.rotation.z, this._tmpQuat2), this._tmpQuat.multiplyToRef(this._tmpQuat2, this._tmpQuat), e = e.parent;
|
|
return this._tmpQuat
|
|
}, e.prototype.applyForce = function(e, t) {
|
|
return this._physicsEngine && this._physicsEngine.getPhysicsPlugin().applyForce(this, e, t), this
|
|
}, e.prototype.applyImpulse = function(e, t) {
|
|
return this._physicsEngine && this._physicsEngine.getPhysicsPlugin().applyImpulse(this, e, t), this
|
|
}, e.prototype.createJoint = function(e, t, i) {
|
|
var n = new c.e(t, i);
|
|
return this.addJoint(e, n), this
|
|
}, e.prototype.addJoint = function(e, t) {
|
|
return this._joints.push({
|
|
otherImpostor: e,
|
|
joint: t
|
|
}), this._physicsEngine && this._physicsEngine.addJoint(this, e, t), this
|
|
}, e.prototype.addAnchor = function(e, t, i, n, r) {
|
|
if (!this._physicsEngine) return this;
|
|
var o = this._physicsEngine.getPhysicsPlugin();
|
|
return o.appendAnchor ? (this._physicsEngine && o.appendAnchor(this, e, t, i, n, r), this) : this
|
|
}, e.prototype.addHook = function(e, t, i, n) {
|
|
if (!this._physicsEngine) return this;
|
|
var r = this._physicsEngine.getPhysicsPlugin();
|
|
return r.appendAnchor ? (this._physicsEngine && r.appendHook(this, e, t, i, n), this) : this
|
|
}, e.prototype.sleep = function() {
|
|
return this._physicsEngine && this._physicsEngine.getPhysicsPlugin().sleepBody(this), this
|
|
}, e.prototype.wakeUp = function() {
|
|
return this._physicsEngine && this._physicsEngine.getPhysicsPlugin().wakeUpBody(this), this
|
|
}, e.prototype.clone = function(t) {
|
|
return t ? new e(t, this.type, this._options, this._scene) : null
|
|
}, e.prototype.dispose = function() {
|
|
var e = this;
|
|
this._physicsEngine && (this._joints.forEach(function(t) {
|
|
e._physicsEngine && e._physicsEngine.removeJoint(e, t.otherImpostor, t.joint)
|
|
}), this._physicsEngine.removeImpostor(this), this.parent && this.parent.forceUpdate(), this._isDisposed = !0)
|
|
}, e.prototype.setDeltaPosition = function(e) {
|
|
this._deltaPosition.copyFrom(e)
|
|
}, e.prototype.setDeltaRotation = function(e) {
|
|
this._deltaRotation || (this._deltaRotation = new o.q), this._deltaRotation.copyFrom(e), this._deltaRotationConjugated = this._deltaRotation.conjugate()
|
|
}, e.prototype.getBoxSizeToRef = function(e) {
|
|
return this._physicsEngine && this._physicsEngine.getPhysicsPlugin().getBoxSizeToRef(this, e), this
|
|
}, e.prototype.getRadius = function() {
|
|
return this._physicsEngine ? this._physicsEngine.getPhysicsPlugin().getRadius(this) : 0
|
|
}, e.prototype.syncBoneWithImpostor = function(t, i, n, r, s) {
|
|
var a = e._tmpVecs[0],
|
|
c = this.object;
|
|
if (c.rotationQuaternion)
|
|
if (s) {
|
|
var l = e._tmpQuat;
|
|
c.rotationQuaternion.multiplyToRef(s, l), t.setRotationQuaternion(l, o.s.WORLD, i)
|
|
} else t.setRotationQuaternion(c.rotationQuaternion, o.s.WORLD, i);
|
|
a.x = 0, a.y = 0, a.z = 0, n && (a.x = n.x, a.y = n.y, a.z = n.z, t.getDirectionToRef(a, i, a), null == r && (r = n.length()), a.x *= r, a.y *= r, a.z *= r), t.getParent() ? (a.addInPlace(c.getAbsolutePosition()), t.setAbsolutePosition(a, i)) : (i.setAbsolutePosition(c.getAbsolutePosition()), i.position.x -= a.x, i.position.y -= a.y, i.position.z -= a.z)
|
|
}, e.prototype.syncImpostorWithBone = function(t, i, n, r, s, a) {
|
|
var c = this.object;
|
|
if (c.rotationQuaternion)
|
|
if (s) {
|
|
var l = e._tmpQuat;
|
|
t.getRotationQuaternionToRef(o.s.WORLD, i, l), l.multiplyToRef(s, c.rotationQuaternion)
|
|
} else t.getRotationQuaternionToRef(o.s.WORLD, i, c.rotationQuaternion);
|
|
var u = e._tmpVecs[0],
|
|
h = e._tmpVecs[1];
|
|
a || ((a = e._tmpVecs[2]).x = 0, a.y = 1, a.z = 0), t.getDirectionToRef(a, i, h), t.getAbsolutePositionToRef(i, u), null == r && n && (r = n.length()), null != r && (u.x += h.x * r, u.y += h.y * r, u.z += h.z * r), c.setAbsolutePosition(u)
|
|
}, e.DEFAULT_OBJECT_SIZE = new o.x(1, 1, 1), e.IDENTITY_QUATERNION = o.q.Identity(), e._tmpVecs = r.a.BuildArray(3, o.x.Zero), e._tmpQuat = o.q.Identity(), e.NoImpostor = 0, e.SphereImpostor = 1, e.BoxImpostor = 2, e.PlaneImpostor = 3, e.MeshImpostor = 4, e.CylinderImpostor = 7, e.ParticleImpostor = 8, e.HeightmapImpostor = 9, e.ConvexHullImpostor = 10, e.RopeImpostor = 101, e.ClothImpostor = 102, e.SoftbodyImpostor = 103, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
}), i.d(t, "b", function() {
|
|
return o
|
|
});
|
|
var n = i(1),
|
|
r = function() {
|
|
function e(t) {
|
|
this.length = 0, this.data = new Array(t), this._id = e._GlobalId++
|
|
}
|
|
return e.prototype.push = function(e) {
|
|
this.data[this.length++] = e, this.length > this.data.length && (this.data.length *= 2)
|
|
}, e.prototype.forEach = function(e) {
|
|
for (var t = 0; t < this.length; t++) e(this.data[t])
|
|
}, e.prototype.sort = function(e) {
|
|
this.data.sort(e)
|
|
}, e.prototype.reset = function() {
|
|
this.length = 0
|
|
}, e.prototype.dispose = function() {
|
|
this.reset(), this.data && (this.data.length = 0, this.data = [])
|
|
}, e.prototype.concat = function(e) {
|
|
if (0 !== e.length) {
|
|
this.length + e.length > this.data.length && (this.data.length = 2 * (this.length + e.length));
|
|
for (var t = 0; t < e.length; t++) this.data[this.length++] = (e.data || e)[t]
|
|
}
|
|
}, e.prototype.indexOf = function(e) {
|
|
var t = this.data.indexOf(e);
|
|
return t >= this.length ? -1 : t
|
|
}, e.prototype.contains = function(e) {
|
|
return -1 !== this.indexOf(e)
|
|
}, e._GlobalId = 0, e
|
|
}(),
|
|
o = function(e) {
|
|
function t() {
|
|
var t = null !== e && e.apply(this, arguments) || this;
|
|
return t._duplicateId = 0, t
|
|
}
|
|
return n.d(t, e), t.prototype.push = function(t) {
|
|
e.prototype.push.call(this, t), t.__smartArrayFlags || (t.__smartArrayFlags = {}), t.__smartArrayFlags[this._id] = this._duplicateId
|
|
}, t.prototype.pushNoDuplicate = function(e) {
|
|
return (!e.__smartArrayFlags || e.__smartArrayFlags[this._id] !== this._duplicateId) && (this.push(e), !0)
|
|
}, t.prototype.reset = function() {
|
|
e.prototype.reset.call(this), this._duplicateId++
|
|
}, t.prototype.concatWithNoDuplicate = function(e) {
|
|
if (0 !== e.length) {
|
|
this.length + e.length > this.data.length && (this.data.length = 2 * (this.length + e.length));
|
|
for (var t = 0; t < e.length; t++) {
|
|
var i = (e.data || e)[t];
|
|
this.pushNoDuplicate(i)
|
|
}
|
|
}
|
|
}, t
|
|
}(r)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return o
|
|
});
|
|
var n = i(9),
|
|
r = i(104),
|
|
o = function() {
|
|
function e() {}
|
|
return e.EnableFor = function(t) {
|
|
t._tags = t._tags || {}, t.hasTags = function() {
|
|
return e.HasTags(t)
|
|
}, t.addTags = function(i) {
|
|
return e.AddTagsTo(t, i)
|
|
}, t.removeTags = function(i) {
|
|
return e.RemoveTagsFrom(t, i)
|
|
}, t.matchesTagsQuery = function(i) {
|
|
return e.MatchesQuery(t, i)
|
|
}
|
|
}, e.DisableFor = function(e) {
|
|
delete e._tags, delete e.hasTags, delete e.addTags, delete e.removeTags, delete e.matchesTagsQuery
|
|
}, e.HasTags = function(e) {
|
|
return !!e._tags && !n.h.IsEmpty(e._tags)
|
|
}, e.GetTags = function(e, t) {
|
|
if (void 0 === t && (t = !0), !e._tags) return null;
|
|
if (t) {
|
|
var i = [];
|
|
for (var n in e._tags) e._tags.hasOwnProperty(n) && !0 === e._tags[n] && i.push(n);
|
|
return i.join(" ")
|
|
}
|
|
return e._tags
|
|
}, e.AddTagsTo = function(t, i) {
|
|
i && ("string" == typeof i && i.split(" ").forEach(function(i, n, r) {
|
|
e._AddTagTo(t, i)
|
|
}))
|
|
}, e._AddTagTo = function(t, i) {
|
|
"" !== (i = i.trim()) && "true" !== i && "false" !== i && (i.match(/[\s]/) || i.match(/^([!]|([|]|[&]){2})/) || (e.EnableFor(t), t._tags[i] = !0))
|
|
}, e.RemoveTagsFrom = function(t, i) {
|
|
if (e.HasTags(t)) {
|
|
var n = i.split(" ");
|
|
for (var r in n) e._RemoveTagFrom(t, n[r])
|
|
}
|
|
}, e._RemoveTagFrom = function(e, t) {
|
|
delete e._tags[t]
|
|
}, e.MatchesQuery = function(t, i) {
|
|
return void 0 === i || ("" === i ? e.HasTags(t) : r.a.Eval(i, function(i) {
|
|
return e.HasTags(t) && t._tags[i]
|
|
}))
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {
|
|
this.rootNodes = new Array, this.cameras = new Array, this.lights = new Array, this.meshes = new Array, this.skeletons = new Array, this.particleSystems = new Array, this.animations = [], this.animationGroups = new Array, this.multiMaterials = new Array, this.materials = new Array, this.morphTargetManagers = new Array, this.geometries = new Array, this.transformNodes = new Array, this.actionManagers = new Array, this.textures = new Array, this.environmentTexture = null
|
|
}
|
|
return e.AddParser = function(e, t) {
|
|
this._BabylonFileParsers[e] = t
|
|
}, e.GetParser = function(e) {
|
|
return this._BabylonFileParsers[e] ? this._BabylonFileParsers[e] : null
|
|
}, e.AddIndividualParser = function(e, t) {
|
|
this._IndividualBabylonFileParsers[e] = t
|
|
}, e.GetIndividualParser = function(e) {
|
|
return this._IndividualBabylonFileParsers[e] ? this._IndividualBabylonFileParsers[e] : null
|
|
}, e.Parse = function(e, t, i, n) {
|
|
for (var r in this._BabylonFileParsers) this._BabylonFileParsers.hasOwnProperty(r) && this._BabylonFileParsers[r](e, t, i, n)
|
|
}, e._BabylonFileParsers = {}, e._IndividualBabylonFileParsers = {}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "b", function() {
|
|
return u
|
|
}), i.d(t, "a", function() {
|
|
return h
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(8),
|
|
s = i(9),
|
|
a = i(0),
|
|
c = i(64),
|
|
l = i(93),
|
|
u = function(e) {
|
|
function t() {
|
|
var t = e.call(this) || this;
|
|
return t.IMAGEPROCESSING = !1, t.VIGNETTE = !1, t.VIGNETTEBLENDMODEMULTIPLY = !1, t.VIGNETTEBLENDMODEOPAQUE = !1, t.TONEMAPPING = !1, t.TONEMAPPING_ACES = !1, t.CONTRAST = !1, t.COLORCURVES = !1, t.COLORGRADING = !1, t.COLORGRADING3D = !1, t.SAMPLER3DGREENDEPTH = !1, t.SAMPLER3DBGRMAP = !1, t.IMAGEPROCESSINGPOSTPROCESS = !1, t.EXPOSURE = !1, t.rebuild(), t
|
|
}
|
|
return n.d(t, e), t
|
|
}(c.a),
|
|
h = function() {
|
|
function e() {
|
|
this.colorCurves = new l.a, this._colorCurvesEnabled = !1, this._colorGradingEnabled = !1, this._colorGradingWithGreenDepth = !0, this._colorGradingBGR = !0, this._exposure = 1, this._toneMappingEnabled = !1, this._toneMappingType = e.TONEMAPPING_STANDARD, this._contrast = 1, this.vignetteStretch = 0, this.vignetteCentreX = 0, this.vignetteCentreY = 0, this.vignetteWeight = 1.5, this.vignetteColor = new a.f(0, 0, 0, 0), this.vignetteCameraFov = .5, this._vignetteBlendMode = e.VIGNETTEMODE_MULTIPLY, this._vignetteEnabled = !1, this._applyByPostProcess = !1, this._isEnabled = !0, this.onUpdateParameters = new o.c
|
|
}
|
|
return Object.defineProperty(e.prototype, "colorCurvesEnabled", {
|
|
get: function() {
|
|
return this._colorCurvesEnabled
|
|
},
|
|
set: function(e) {
|
|
this._colorCurvesEnabled !== e && (this._colorCurvesEnabled = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "colorGradingTexture", {
|
|
get: function() {
|
|
return this._colorGradingTexture
|
|
},
|
|
set: function(e) {
|
|
this._colorGradingTexture !== e && (this._colorGradingTexture = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "colorGradingEnabled", {
|
|
get: function() {
|
|
return this._colorGradingEnabled
|
|
},
|
|
set: function(e) {
|
|
this._colorGradingEnabled !== e && (this._colorGradingEnabled = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "colorGradingWithGreenDepth", {
|
|
get: function() {
|
|
return this._colorGradingWithGreenDepth
|
|
},
|
|
set: function(e) {
|
|
this._colorGradingWithGreenDepth !== e && (this._colorGradingWithGreenDepth = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "colorGradingBGR", {
|
|
get: function() {
|
|
return this._colorGradingBGR
|
|
},
|
|
set: function(e) {
|
|
this._colorGradingBGR !== e && (this._colorGradingBGR = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "exposure", {
|
|
get: function() {
|
|
return this._exposure
|
|
},
|
|
set: function(e) {
|
|
this._exposure !== e && (this._exposure = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "toneMappingEnabled", {
|
|
get: function() {
|
|
return this._toneMappingEnabled
|
|
},
|
|
set: function(e) {
|
|
this._toneMappingEnabled !== e && (this._toneMappingEnabled = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "toneMappingType", {
|
|
get: function() {
|
|
return this._toneMappingType
|
|
},
|
|
set: function(e) {
|
|
this._toneMappingType !== e && (this._toneMappingType = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "contrast", {
|
|
get: function() {
|
|
return this._contrast
|
|
},
|
|
set: function(e) {
|
|
this._contrast !== e && (this._contrast = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "vignetteBlendMode", {
|
|
get: function() {
|
|
return this._vignetteBlendMode
|
|
},
|
|
set: function(e) {
|
|
this._vignetteBlendMode !== e && (this._vignetteBlendMode = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "vignetteEnabled", {
|
|
get: function() {
|
|
return this._vignetteEnabled
|
|
},
|
|
set: function(e) {
|
|
this._vignetteEnabled !== e && (this._vignetteEnabled = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "applyByPostProcess", {
|
|
get: function() {
|
|
return this._applyByPostProcess
|
|
},
|
|
set: function(e) {
|
|
this._applyByPostProcess !== e && (this._applyByPostProcess = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isEnabled", {
|
|
get: function() {
|
|
return this._isEnabled
|
|
},
|
|
set: function(e) {
|
|
this._isEnabled !== e && (this._isEnabled = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._updateParameters = function() {
|
|
this.onUpdateParameters.notifyObservers(this)
|
|
}, e.prototype.getClassName = function() {
|
|
return "ImageProcessingConfiguration"
|
|
}, e.PrepareUniforms = function(e, t) {
|
|
t.EXPOSURE && e.push("exposureLinear"), t.CONTRAST && e.push("contrast"), t.COLORGRADING && e.push("colorTransformSettings"), t.VIGNETTE && (e.push("vInverseScreenSize"), e.push("vignetteSettings1"), e.push("vignetteSettings2")), t.COLORCURVES && l.a.PrepareUniforms(e)
|
|
}, e.PrepareSamplers = function(e, t) {
|
|
t.COLORGRADING && e.push("txColorTransform")
|
|
}, e.prototype.prepareDefines = function(t, i) {
|
|
if (void 0 === i && (i = !1), i !== this.applyByPostProcess || !this._isEnabled) return t.VIGNETTE = !1, t.TONEMAPPING = !1, t.TONEMAPPING_ACES = !1, t.CONTRAST = !1, t.EXPOSURE = !1, t.COLORCURVES = !1, t.COLORGRADING = !1, t.COLORGRADING3D = !1, t.IMAGEPROCESSING = !1, void(t.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess && this._isEnabled);
|
|
switch (t.VIGNETTE = this.vignetteEnabled, t.VIGNETTEBLENDMODEMULTIPLY = this.vignetteBlendMode === e._VIGNETTEMODE_MULTIPLY, t.VIGNETTEBLENDMODEOPAQUE = !t.VIGNETTEBLENDMODEMULTIPLY, t.TONEMAPPING = this.toneMappingEnabled, this._toneMappingType) {
|
|
case e.TONEMAPPING_ACES:
|
|
t.TONEMAPPING_ACES = !0;
|
|
break;
|
|
default:
|
|
t.TONEMAPPING_ACES = !1
|
|
}
|
|
t.CONTRAST = 1 !== this.contrast, t.EXPOSURE = 1 !== this.exposure, t.COLORCURVES = this.colorCurvesEnabled && !!this.colorCurves, t.COLORGRADING = this.colorGradingEnabled && !!this.colorGradingTexture, t.COLORGRADING ? t.COLORGRADING3D = this.colorGradingTexture.is3D : t.COLORGRADING3D = !1, t.SAMPLER3DGREENDEPTH = this.colorGradingWithGreenDepth, t.SAMPLER3DBGRMAP = this.colorGradingBGR, t.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess, t.IMAGEPROCESSING = t.VIGNETTE || t.TONEMAPPING || t.CONTRAST || t.EXPOSURE || t.COLORCURVES || t.COLORGRADING
|
|
}, e.prototype.isReady = function() {
|
|
return !this.colorGradingEnabled || !this.colorGradingTexture || this.colorGradingTexture.isReady()
|
|
}, e.prototype.bind = function(e, t) {
|
|
if (void 0 === t && (t = 1), this._colorCurvesEnabled && this.colorCurves && l.a.Bind(this.colorCurves, e), this._vignetteEnabled) {
|
|
var i = 1 / e.getEngine().getRenderWidth(),
|
|
n = 1 / e.getEngine().getRenderHeight();
|
|
e.setFloat2("vInverseScreenSize", i, n);
|
|
var r = Math.tan(.5 * this.vignetteCameraFov),
|
|
o = r * t,
|
|
a = Math.sqrt(o * r);
|
|
o = s.h.Mix(o, a, this.vignetteStretch), r = s.h.Mix(r, a, this.vignetteStretch), e.setFloat4("vignetteSettings1", o, r, -o * this.vignetteCentreX, -r * this.vignetteCentreY);
|
|
var c = -2 * this.vignetteWeight;
|
|
e.setFloat4("vignetteSettings2", this.vignetteColor.r, this.vignetteColor.g, this.vignetteColor.b, c)
|
|
}
|
|
if (e.setFloat("exposureLinear", this.exposure), e.setFloat("contrast", this.contrast), this.colorGradingTexture) {
|
|
e.setTexture("txColorTransform", this.colorGradingTexture);
|
|
var u = this.colorGradingTexture.getSize().height;
|
|
e.setFloat4("colorTransformSettings", (u - 1) / u, .5 / u, u, this.colorGradingTexture.level)
|
|
}
|
|
}, e.prototype.clone = function() {
|
|
return r.a.Clone(function() {
|
|
return new e
|
|
}, this)
|
|
}, e.prototype.serialize = function() {
|
|
return r.a.Serialize(this)
|
|
}, e.Parse = function(t) {
|
|
return r.a.Parse(function() {
|
|
return new e
|
|
}, t, null, null)
|
|
}, Object.defineProperty(e, "VIGNETTEMODE_MULTIPLY", {
|
|
get: function() {
|
|
return this._VIGNETTEMODE_MULTIPLY
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "VIGNETTEMODE_OPAQUE", {
|
|
get: function() {
|
|
return this._VIGNETTEMODE_OPAQUE
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.TONEMAPPING_STANDARD = 0, e.TONEMAPPING_ACES = 1, e._VIGNETTEMODE_MULTIPLY = 0, e._VIGNETTEMODE_OPAQUE = 1, n.c([Object(r.g)()], e.prototype, "colorCurves", void 0), n.c([Object(r.c)()], e.prototype, "_colorCurvesEnabled", void 0), n.c([Object(r.m)("colorGradingTexture")], e.prototype, "_colorGradingTexture", void 0), n.c([Object(r.c)()], e.prototype, "_colorGradingEnabled", void 0), n.c([Object(r.c)()], e.prototype, "_colorGradingWithGreenDepth", void 0), n.c([Object(r.c)()], e.prototype, "_colorGradingBGR", void 0), n.c([Object(r.c)()], e.prototype, "_exposure", void 0), n.c([Object(r.c)()], e.prototype, "_toneMappingEnabled", void 0), n.c([Object(r.c)()], e.prototype, "_toneMappingType", void 0), n.c([Object(r.c)()], e.prototype, "_contrast", void 0), n.c([Object(r.c)()], e.prototype, "vignetteStretch", void 0), n.c([Object(r.c)()], e.prototype, "vignetteCentreX", void 0), n.c([Object(r.c)()], e.prototype, "vignetteCentreY", void 0), n.c([Object(r.c)()], e.prototype, "vignetteWeight", void 0), n.c([Object(r.f)()], e.prototype, "vignetteColor", void 0), n.c([Object(r.c)()], e.prototype, "vignetteCameraFov", void 0), n.c([Object(r.c)()], e.prototype, "_vignetteBlendMode", void 0), n.c([Object(r.c)()], e.prototype, "_vignetteEnabled", void 0), n.c([Object(r.c)()], e.prototype, "_applyByPostProcess", void 0), n.c([Object(r.c)()], e.prototype, "_isEnabled", void 0), e
|
|
}();
|
|
r.a._ImageProcessingConfigurationParser = h.Parse
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
});
|
|
var n = function(e, t) {
|
|
return e ? e.getClassName && "Mesh" === e.getClassName() ? null : e.getClassName && "SubMesh" === e.getClassName() ? e.clone(t) : e.clone ? e.clone() : null : null
|
|
},
|
|
r = function() {
|
|
function e() {}
|
|
return e.DeepCopy = function(e, t, i, r) {
|
|
for (var o in e)
|
|
if (("_" !== o[0] || r && -1 !== r.indexOf(o)) && (!i || -1 === i.indexOf(o))) {
|
|
var s = e[o],
|
|
a = typeof s;
|
|
if ("function" !== a) try {
|
|
if ("object" === a)
|
|
if (s instanceof Array) {
|
|
if (t[o] = [], s.length > 0)
|
|
if ("object" == typeof s[0])
|
|
for (var c = 0; c < s.length; c++) {
|
|
var l = n(s[c], t); - 1 === t[o].indexOf(l) && t[o].push(l)
|
|
} else t[o] = s.slice(0)
|
|
} else t[o] = n(s, t);
|
|
else t[o] = s
|
|
} catch (e) {}
|
|
}
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(28),
|
|
s = i(16),
|
|
a = i(0),
|
|
c = i(4),
|
|
l = i(31),
|
|
u = i(5),
|
|
h = i(64),
|
|
d = i(75),
|
|
f = i(15),
|
|
p = i(7),
|
|
_ = i(22),
|
|
g = i(18),
|
|
m = "uniform vec4 vDiffuseColor;\n#ifdef SPECULARTERM\nuniform vec4 vSpecularColor;\n#endif\nuniform vec3 vEmissiveColor;\nuniform float visibility;\n\n#ifdef DIFFUSE\nuniform vec2 vDiffuseInfos;\n#endif\n#ifdef AMBIENT\nuniform vec2 vAmbientInfos;\n#endif\n#ifdef OPACITY\nuniform vec2 vOpacityInfos;\n#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\n#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\n#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\nuniform vec2 vTangentSpaceParams;\n#endif\n#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION)\nuniform mat4 view;\n#endif\n#ifdef REFRACTION\nuniform vec4 vRefractionInfos;\n#ifndef REFRACTIONMAP_3D\nuniform mat4 refractionMatrix;\n#endif\n#ifdef REFRACTIONFRESNEL\nuniform vec4 refractionLeftColor;\nuniform vec4 refractionRightColor;\n#endif\n#endif\n#if defined(SPECULAR) && defined(SPECULARTERM)\nuniform vec2 vSpecularInfos;\n#endif\n#ifdef DIFFUSEFRESNEL\nuniform vec4 diffuseLeftColor;\nuniform vec4 diffuseRightColor;\n#endif\n#ifdef OPACITYFRESNEL\nuniform vec4 opacityParts;\n#endif\n#ifdef EMISSIVEFRESNEL\nuniform vec4 emissiveLeftColor;\nuniform vec4 emissiveRightColor;\n#endif\n\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\n#if defined(REFLECTIONMAP_PLANAR) || defined(REFLECTIONMAP_CUBIC) || defined(REFLECTIONMAP_PROJECTION) || defined(REFLECTIONMAP_EQUIRECTANGULAR) || defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_SKYBOX)\nuniform mat4 reflectionMatrix;\n#endif\n#ifndef REFLECTIONMAP_SKYBOX\n#if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)\nuniform vec3 vReflectionPosition;\nuniform vec3 vReflectionSize;\n#endif\n#endif\n#ifdef REFLECTIONFRESNEL\nuniform vec4 reflectionLeftColor;\nuniform vec4 reflectionRightColor;\n#endif\n#endif";
|
|
u.a.IncludesShadersStore.defaultFragmentDeclaration = m;
|
|
var v = "layout(std140,column_major) uniform;\nuniform Material\n{\nvec4 diffuseLeftColor;\nvec4 diffuseRightColor;\nvec4 opacityParts;\nvec4 reflectionLeftColor;\nvec4 reflectionRightColor;\nvec4 refractionLeftColor;\nvec4 refractionRightColor;\nvec4 emissiveLeftColor;\nvec4 emissiveRightColor;\nvec2 vDiffuseInfos;\nvec2 vAmbientInfos;\nvec2 vOpacityInfos;\nvec2 vReflectionInfos;\nvec3 vReflectionPosition;\nvec3 vReflectionSize;\nvec2 vEmissiveInfos;\nvec2 vLightmapInfos;\nvec2 vSpecularInfos;\nvec3 vBumpInfos;\nmat4 diffuseMatrix;\nmat4 ambientMatrix;\nmat4 opacityMatrix;\nmat4 reflectionMatrix;\nmat4 emissiveMatrix;\nmat4 lightmapMatrix;\nmat4 specularMatrix;\nmat4 bumpMatrix;\nvec2 vTangentSpaceParams;\nfloat pointSize;\nmat4 refractionMatrix;\nvec4 vRefractionInfos;\nvec4 vSpecularColor;\nvec3 vEmissiveColor;\nfloat visibility;\nvec4 vDiffuseColor;\n};\nuniform Scene {\nmat4 viewProjection;\n#ifdef MULTIVIEW\nmat4 viewProjectionR;\n#endif\nmat4 view;\n};\n";
|
|
u.a.IncludesShadersStore.defaultUboDeclaration = v;
|
|
i(56), i(84), i(85), i(120), i(112);
|
|
var y = "#ifdef FRESNEL\nfloat computeFresnelTerm(vec3 viewDirection,vec3 worldNormal,float bias,float power)\n{\nfloat fresnelTerm=pow(bias+abs(dot(viewDirection,worldNormal)),power);\nreturn clamp(fresnelTerm,0.,1.);\n}\n#endif";
|
|
u.a.IncludesShadersStore.fresnelFunction = y;
|
|
i(113), i(86), i(87), i(121), i(95), i(88), i(98), i(89), i(122), i(123), i(114), i(115), i(99);
|
|
var b = "#include<__decl__defaultFragment>\n#if defined(BUMP) || !defined(NORMAL)\n#extension GL_OES_standard_derivatives : enable\n#endif\n#define CUSTOM_FRAGMENT_BEGIN\n#ifdef LOGARITHMICDEPTH\n#extension GL_EXT_frag_depth : enable\n#endif\n\n#define RECIPROCAL_PI2 0.15915494\nuniform vec3 vEyePosition;\nuniform vec3 vAmbientColor;\n\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n#ifdef MAINUV1\nvarying vec2 vMainUV1;\n#endif\n#ifdef MAINUV2\nvarying vec2 vMainUV2;\n#endif\n\n#include<helperFunctions>\n\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<lightsFragmentFunctions>\n#include<shadowsFragmentFunctions>\n\n#ifdef DIFFUSE\n#if DIFFUSEDIRECTUV == 1\n#define vDiffuseUV vMainUV1\n#elif DIFFUSEDIRECTUV == 2\n#define vDiffuseUV vMainUV2\n#else\nvarying vec2 vDiffuseUV;\n#endif\nuniform sampler2D diffuseSampler;\n#endif\n#ifdef AMBIENT\n#if AMBIENTDIRECTUV == 1\n#define vAmbientUV vMainUV1\n#elif AMBIENTDIRECTUV == 2\n#define vAmbientUV vMainUV2\n#else\nvarying vec2 vAmbientUV;\n#endif\nuniform sampler2D ambientSampler;\n#endif\n#ifdef OPACITY\n#if OPACITYDIRECTUV == 1\n#define vOpacityUV vMainUV1\n#elif OPACITYDIRECTUV == 2\n#define vOpacityUV vMainUV2\n#else\nvarying vec2 vOpacityUV;\n#endif\nuniform sampler2D opacitySampler;\n#endif\n#ifdef EMISSIVE\n#if EMISSIVEDIRECTUV == 1\n#define vEmissiveUV vMainUV1\n#elif EMISSIVEDIRECTUV == 2\n#define vEmissiveUV vMainUV2\n#else\nvarying vec2 vEmissiveUV;\n#endif\nuniform sampler2D emissiveSampler;\n#endif\n#ifdef LIGHTMAP\n#if LIGHTMAPDIRECTUV == 1\n#define vLightmapUV vMainUV1\n#elif LIGHTMAPDIRECTUV == 2\n#define vLightmapUV vMainUV2\n#else\nvarying vec2 vLightmapUV;\n#endif\nuniform sampler2D lightmapSampler;\n#endif\n#ifdef REFRACTION\n#ifdef REFRACTIONMAP_3D\nuniform samplerCube refractionCubeSampler;\n#else\nuniform sampler2D refraction2DSampler;\n#endif\n#endif\n#if defined(SPECULAR) && defined(SPECULARTERM)\n#if SPECULARDIRECTUV == 1\n#define vSpecularUV vMainUV1\n#elif SPECULARDIRECTUV == 2\n#define vSpecularUV vMainUV2\n#else\nvarying vec2 vSpecularUV;\n#endif\nuniform sampler2D specularSampler;\n#endif\n#ifdef ALPHATEST\nuniform float alphaCutOff;\n#endif\n\n#include<fresnelFunction>\n\n#ifdef REFLECTION\n#ifdef REFLECTIONMAP_3D\nuniform samplerCube reflectionCubeSampler;\n#else\nuniform sampler2D reflection2DSampler;\n#endif\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#else\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#endif\n#include<reflectionFunction>\n#endif\n#include<imageProcessingDeclaration>\n#include<imageProcessingFunctions>\n#include<bumpFragmentFunctions>\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n#include<fogFragmentDeclaration>\n#define CUSTOM_FRAGMENT_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\nvec3 viewDirectionW=normalize(vEyePosition-vPositionW);\n\nvec4 baseColor=vec4(1.,1.,1.,1.);\nvec3 diffuseColor=vDiffuseColor.rgb;\n\nfloat alpha=vDiffuseColor.a;\n\n#ifdef NORMAL\nvec3 normalW=normalize(vNormalW);\n#else\nvec3 normalW=normalize(-cross(dFdx(vPositionW),dFdy(vPositionW)));\n#endif\n#include<bumpFragment>\n#ifdef TWOSIDEDLIGHTING\nnormalW=gl_FrontFacing ? normalW : -normalW;\n#endif\n#ifdef DIFFUSE\nbaseColor=texture2D(diffuseSampler,vDiffuseUV+uvOffset);\n#ifdef ALPHATEST\nif (baseColor.a<alphaCutOff)\ndiscard;\n#endif\n#ifdef ALPHAFROMDIFFUSE\nalpha*=baseColor.a;\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_ALPHA\nbaseColor.rgb*=vDiffuseInfos.y;\n#endif\n#include<depthPrePass>\n#ifdef VERTEXCOLOR\nbaseColor.rgb*=vColor.rgb;\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_DIFFUSE\n\nvec3 baseAmbientColor=vec3(1.,1.,1.);\n#ifdef AMBIENT\nbaseAmbientColor=texture2D(ambientSampler,vAmbientUV+uvOffset).rgb*vAmbientInfos.y;\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_LIGHTS\n\n#ifdef SPECULARTERM\nfloat glossiness=vSpecularColor.a;\nvec3 specularColor=vSpecularColor.rgb;\n#ifdef SPECULAR\nvec4 specularMapColor=texture2D(specularSampler,vSpecularUV+uvOffset);\nspecularColor=specularMapColor.rgb;\n#ifdef GLOSSINESS\nglossiness=glossiness*specularMapColor.a;\n#endif\n#endif\n#else\nfloat glossiness=0.;\n#endif\n\nvec3 diffuseBase=vec3(0.,0.,0.);\nlightingInfo info;\n#ifdef SPECULARTERM\nvec3 specularBase=vec3(0.,0.,0.);\n#endif\nfloat shadow=1.;\n#ifdef LIGHTMAP\nvec3 lightmapColor=texture2D(lightmapSampler,vLightmapUV+uvOffset).rgb*vLightmapInfos.y;\n#endif\n#include<lightFragment>[0..maxSimultaneousLights]\n\nvec3 refractionColor=vec3(0.,0.,0.);\n#ifdef REFRACTION\nvec3 refractionVector=normalize(refract(-viewDirectionW,normalW,vRefractionInfos.y));\n#ifdef REFRACTIONMAP_3D\nrefractionVector.y=refractionVector.y*vRefractionInfos.w;\nif (dot(refractionVector,viewDirectionW)<1.0) {\nrefractionColor=textureCube(refractionCubeSampler,refractionVector).rgb;\n}\n#else\nvec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*vRefractionInfos.z,1.0)));\nvec2 refractionCoords=vRefractionUVW.xy/vRefractionUVW.z;\nrefractionCoords.y=1.0-refractionCoords.y;\nrefractionColor=texture2D(refraction2DSampler,refractionCoords).rgb;\n#endif\n#ifdef IS_REFRACTION_LINEAR\nrefractionColor=toGammaSpace(refractionColor);\n#endif\nrefractionColor*=vRefractionInfos.x;\n#endif\n\nvec3 reflectionColor=vec3(0.,0.,0.);\n#ifdef REFLECTION\nvec3 vReflectionUVW=computeReflectionCoords(vec4(vPositionW,1.0),normalW);\n#ifdef REFLECTIONMAP_3D\n#ifdef ROUGHNESS\nfloat bias=vReflectionInfos.y;\n#ifdef SPECULARTERM\n#ifdef SPECULAR\n#ifdef GLOSSINESS\nbias*=(1.0-specularMapColor.a);\n#endif\n#endif\n#endif\nreflectionColor=textureCube(reflectionCubeSampler,vReflectionUVW,bias).rgb;\n#else\nreflectionColor=textureCube(reflectionCubeSampler,vReflectionUVW).rgb;\n#endif\n#else\nvec2 coords=vReflectionUVW.xy;\n#ifdef REFLECTIONMAP_PROJECTION\ncoords/=vReflectionUVW.z;\n#endif\ncoords.y=1.0-coords.y;\nreflectionColor=texture2D(reflection2DSampler,coords).rgb;\n#endif\n#ifdef IS_REFLECTION_LINEAR\nreflectionColor=toGammaSpace(reflectionColor);\n#endif\nreflectionColor*=vReflectionInfos.x;\n#ifdef REFLECTIONFRESNEL\nfloat reflectionFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,reflectionRightColor.a,reflectionLeftColor.a);\n#ifdef REFLECTIONFRESNELFROMSPECULAR\n#ifdef SPECULARTERM\nreflectionColor*=specularColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb;\n#else\nreflectionColor*=reflectionLeftColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb;\n#endif\n#else\nreflectionColor*=reflectionLeftColor.rgb*(1.0-reflectionFresnelTerm)+reflectionFresnelTerm*reflectionRightColor.rgb;\n#endif\n#endif\n#endif\n#ifdef REFRACTIONFRESNEL\nfloat refractionFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,refractionRightColor.a,refractionLeftColor.a);\nrefractionColor*=refractionLeftColor.rgb*(1.0-refractionFresnelTerm)+refractionFresnelTerm*refractionRightColor.rgb;\n#endif\n#ifdef OPACITY\nvec4 opacityMap=texture2D(opacitySampler,vOpacityUV+uvOffset);\n#ifdef OPACITYRGB\nopacityMap.rgb=opacityMap.rgb*vec3(0.3,0.59,0.11);\nalpha*=(opacityMap.x+opacityMap.y+opacityMap.z)* vOpacityInfos.y;\n#else\nalpha*=opacityMap.a*vOpacityInfos.y;\n#endif\n#endif\n#ifdef VERTEXALPHA\nalpha*=vColor.a;\n#endif\n#ifdef OPACITYFRESNEL\nfloat opacityFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,opacityParts.z,opacityParts.w);\nalpha+=opacityParts.x*(1.0-opacityFresnelTerm)+opacityFresnelTerm*opacityParts.y;\n#endif\n\nvec3 emissiveColor=vEmissiveColor;\n#ifdef EMISSIVE\nemissiveColor+=texture2D(emissiveSampler,vEmissiveUV+uvOffset).rgb*vEmissiveInfos.y;\n#endif\n#ifdef EMISSIVEFRESNEL\nfloat emissiveFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,emissiveRightColor.a,emissiveLeftColor.a);\nemissiveColor*=emissiveLeftColor.rgb*(1.0-emissiveFresnelTerm)+emissiveFresnelTerm*emissiveRightColor.rgb;\n#endif\n\n#ifdef DIFFUSEFRESNEL\nfloat diffuseFresnelTerm=computeFresnelTerm(viewDirectionW,normalW,diffuseRightColor.a,diffuseLeftColor.a);\ndiffuseBase*=diffuseLeftColor.rgb*(1.0-diffuseFresnelTerm)+diffuseFresnelTerm*diffuseRightColor.rgb;\n#endif\n\n#ifdef EMISSIVEASILLUMINATION\nvec3 finalDiffuse=clamp(diffuseBase*diffuseColor+vAmbientColor,0.0,1.0)*baseColor.rgb;\n#else\n#ifdef LINKEMISSIVEWITHDIFFUSE\nvec3 finalDiffuse=clamp((diffuseBase+emissiveColor)*diffuseColor+vAmbientColor,0.0,1.0)*baseColor.rgb;\n#else\nvec3 finalDiffuse=clamp(diffuseBase*diffuseColor+emissiveColor+vAmbientColor,0.0,1.0)*baseColor.rgb;\n#endif\n#endif\n#ifdef SPECULARTERM\nvec3 finalSpecular=specularBase*specularColor;\n#ifdef SPECULAROVERALPHA\nalpha=clamp(alpha+dot(finalSpecular,vec3(0.3,0.59,0.11)),0.,1.);\n#endif\n#else\nvec3 finalSpecular=vec3(0.0);\n#endif\n#ifdef REFLECTIONOVERALPHA\nalpha=clamp(alpha+dot(reflectionColor,vec3(0.3,0.59,0.11)),0.,1.);\n#endif\n\n#ifdef EMISSIVEASILLUMINATION\nvec4 color=vec4(clamp(finalDiffuse*baseAmbientColor+finalSpecular+reflectionColor+emissiveColor+refractionColor,0.0,1.0),alpha);\n#else\nvec4 color=vec4(finalDiffuse*baseAmbientColor+finalSpecular+reflectionColor+refractionColor,alpha);\n#endif\n\n#ifdef LIGHTMAP\n#ifndef LIGHTMAPEXCLUDED\n#ifdef USELIGHTMAPASSHADOWMAP\ncolor.rgb*=lightmapColor;\n#else\ncolor.rgb+=lightmapColor;\n#endif\n#endif\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_FOG\ncolor.rgb=max(color.rgb,0.);\n#include<logDepthFragment>\n#include<fogFragment>\n\n\n#ifdef IMAGEPROCESSINGPOSTPROCESS\ncolor.rgb=toLinearSpace(color.rgb);\n#else\n#ifdef IMAGEPROCESSING\ncolor.rgb=toLinearSpace(color.rgb);\ncolor=applyImageProcessing(color);\n#endif\n#endif\ncolor.a*=visibility;\n#ifdef PREMULTIPLYALPHA\n\ncolor.rgb*=color.a;\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR\ngl_FragColor=color;\n}\n";
|
|
u.a.ShadersStore.defaultPixelShader = b;
|
|
var T = "\nuniform mat4 viewProjection;\nuniform mat4 view;\n#ifdef DIFFUSE\nuniform mat4 diffuseMatrix;\nuniform vec2 vDiffuseInfos;\n#endif\n#ifdef AMBIENT\nuniform mat4 ambientMatrix;\nuniform vec2 vAmbientInfos;\n#endif\n#ifdef OPACITY\nuniform mat4 opacityMatrix;\nuniform vec2 vOpacityInfos;\n#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\nuniform mat4 emissiveMatrix;\n#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\nuniform mat4 lightmapMatrix;\n#endif\n#if defined(SPECULAR) && defined(SPECULARTERM)\nuniform vec2 vSpecularInfos;\nuniform mat4 specularMatrix;\n#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\nuniform mat4 bumpMatrix;\n#endif\n#ifdef REFLECTION\nuniform mat4 reflectionMatrix;\n#endif\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif\n";
|
|
u.a.IncludesShadersStore.defaultVertexDeclaration = T;
|
|
i(67), i(68), i(124), i(96), i(100), i(101), i(102), i(103), i(69), i(70), i(125), i(90), i(116), i(117);
|
|
u.a.IncludesShadersStore.pointCloudVertex = "#ifdef POINTSIZE\ngl_PointSize=pointSize;\n#endif";
|
|
i(118);
|
|
var E = "#include<__decl__defaultVertex>\n\n#define CUSTOM_VERTEX_BEGIN\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#ifdef TANGENT\nattribute vec4 tangent;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<helperFunctions>\n#include<bonesDeclaration>\n\n#include<instancesDeclaration>\n#ifdef MAINUV1\nvarying vec2 vMainUV1;\n#endif\n#ifdef MAINUV2\nvarying vec2 vMainUV2;\n#endif\n#if defined(DIFFUSE) && DIFFUSEDIRECTUV == 0\nvarying vec2 vDiffuseUV;\n#endif\n#if defined(AMBIENT) && AMBIENTDIRECTUV == 0\nvarying vec2 vAmbientUV;\n#endif\n#if defined(OPACITY) && OPACITYDIRECTUV == 0\nvarying vec2 vOpacityUV;\n#endif\n#if defined(EMISSIVE) && EMISSIVEDIRECTUV == 0\nvarying vec2 vEmissiveUV;\n#endif\n#if defined(LIGHTMAP) && LIGHTMAPDIRECTUV == 0\nvarying vec2 vLightmapUV;\n#endif\n#if defined(SPECULAR) && defined(SPECULARTERM) && SPECULARDIRECTUV == 0\nvarying vec2 vSpecularUV;\n#endif\n#if defined(BUMP) && BUMPDIRECTUV == 0\nvarying vec2 vBumpUV;\n#endif\n\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n#include<bumpVertexDeclaration>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvec3 positionUpdated=position;\n#ifdef NORMAL\nvec3 normalUpdated=normal;\n#endif\n#ifdef TANGENT\nvec4 tangentUpdated=tangent;\n#endif\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\n#ifdef REFLECTIONMAP_SKYBOX_TRANSFORMED\nvPositionUVW=(reflectionMatrix*vec4(position,1.0)).xyz;\n#else\nvPositionUVW=position;\n#endif\n#endif\n#define CUSTOM_VERTEX_UPDATE_POSITION\n#define CUSTOM_VERTEX_UPDATE_NORMAL\n#include<instancesVertex>\n#include<bonesVertex>\n#ifdef MULTIVIEW\nif (gl_ViewID_OVR == 0u) {\ngl_Position=viewProjection*finalWorld*vec4(positionUpdated,1.0);\n} else {\ngl_Position=viewProjectionR*finalWorld*vec4(positionUpdated,1.0);\n}\n#else\ngl_Position=viewProjection*finalWorld*vec4(positionUpdated,1.0);\n#endif\nvec4 worldPos=finalWorld*vec4(positionUpdated,1.0);\nvPositionW=vec3(worldPos);\n#ifdef NORMAL\nmat3 normalWorld=mat3(finalWorld);\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvNormalW=normalize(normalWorld*normalUpdated);\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvDirectionW=normalize(vec3(finalWorld*vec4(positionUpdated,0.0)));\n#endif\n\n#ifndef UV1\nvec2 uv=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2=vec2(0.,0.);\n#endif\n#ifdef MAINUV1\nvMainUV1=uv;\n#endif\n#ifdef MAINUV2\nvMainUV2=uv2;\n#endif\n#if defined(DIFFUSE) && DIFFUSEDIRECTUV == 0\nif (vDiffuseInfos.x == 0.)\n{\nvDiffuseUV=vec2(diffuseMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvDiffuseUV=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(AMBIENT) && AMBIENTDIRECTUV == 0\nif (vAmbientInfos.x == 0.)\n{\nvAmbientUV=vec2(ambientMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvAmbientUV=vec2(ambientMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(OPACITY) && OPACITYDIRECTUV == 0\nif (vOpacityInfos.x == 0.)\n{\nvOpacityUV=vec2(opacityMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvOpacityUV=vec2(opacityMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(EMISSIVE) && EMISSIVEDIRECTUV == 0\nif (vEmissiveInfos.x == 0.)\n{\nvEmissiveUV=vec2(emissiveMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvEmissiveUV=vec2(emissiveMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(LIGHTMAP) && LIGHTMAPDIRECTUV == 0\nif (vLightmapInfos.x == 0.)\n{\nvLightmapUV=vec2(lightmapMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvLightmapUV=vec2(lightmapMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(SPECULAR) && defined(SPECULARTERM) && SPECULARDIRECTUV == 0\nif (vSpecularInfos.x == 0.)\n{\nvSpecularUV=vec2(specularMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvSpecularUV=vec2(specularMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(BUMP) && BUMPDIRECTUV == 0\nif (vBumpInfos.x == 0.)\n{\nvBumpUV=vec2(bumpMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvBumpUV=vec2(bumpMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#include<bumpVertex>\n#include<clipPlaneVertex>\n#include<fogVertex>\n#include<shadowsVertex>[0..maxSimultaneousLights]\n#ifdef VERTEXCOLOR\n\nvColor=color;\n#endif\n#include<pointCloudVertex>\n#include<logDepthVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}\n";
|
|
u.a.ShadersStore.defaultVertexShader = E;
|
|
var A = i(3);
|
|
i.d(t, "b", function() {
|
|
return x
|
|
}), i.d(t, "a", function() {
|
|
return R
|
|
});
|
|
var x = function(e) {
|
|
function t() {
|
|
var t = e.call(this) || this;
|
|
return t.MAINUV1 = !1, t.MAINUV2 = !1, t.DIFFUSE = !1, t.DIFFUSEDIRECTUV = 0, t.AMBIENT = !1, t.AMBIENTDIRECTUV = 0, t.OPACITY = !1, t.OPACITYDIRECTUV = 0, t.OPACITYRGB = !1, t.REFLECTION = !1, t.EMISSIVE = !1, t.EMISSIVEDIRECTUV = 0, t.SPECULAR = !1, t.SPECULARDIRECTUV = 0, t.BUMP = !1, t.BUMPDIRECTUV = 0, t.PARALLAX = !1, t.PARALLAXOCCLUSION = !1, t.SPECULAROVERALPHA = !1, t.CLIPPLANE = !1, t.CLIPPLANE2 = !1, t.CLIPPLANE3 = !1, t.CLIPPLANE4 = !1, t.ALPHATEST = !1, t.DEPTHPREPASS = !1, t.ALPHAFROMDIFFUSE = !1, t.POINTSIZE = !1, t.FOG = !1, t.SPECULARTERM = !1, t.DIFFUSEFRESNEL = !1, t.OPACITYFRESNEL = !1, t.REFLECTIONFRESNEL = !1, t.REFRACTIONFRESNEL = !1, t.EMISSIVEFRESNEL = !1, t.FRESNEL = !1, t.NORMAL = !1, t.UV1 = !1, t.UV2 = !1, t.VERTEXCOLOR = !1, t.VERTEXALPHA = !1, t.NUM_BONE_INFLUENCERS = 0, t.BonesPerMesh = 0, t.BONETEXTURE = !1, t.INSTANCES = !1, t.GLOSSINESS = !1, t.ROUGHNESS = !1, t.EMISSIVEASILLUMINATION = !1, t.LINKEMISSIVEWITHDIFFUSE = !1, t.REFLECTIONFRESNELFROMSPECULAR = !1, t.LIGHTMAP = !1, t.LIGHTMAPDIRECTUV = 0, t.OBJECTSPACE_NORMALMAP = !1, t.USELIGHTMAPASSHADOWMAP = !1, t.REFLECTIONMAP_3D = !1, t.REFLECTIONMAP_SPHERICAL = !1, t.REFLECTIONMAP_PLANAR = !1, t.REFLECTIONMAP_CUBIC = !1, t.USE_LOCAL_REFLECTIONMAP_CUBIC = !1, t.REFLECTIONMAP_PROJECTION = !1, t.REFLECTIONMAP_SKYBOX = !1, t.REFLECTIONMAP_SKYBOX_TRANSFORMED = !1, t.REFLECTIONMAP_EXPLICIT = !1, t.REFLECTIONMAP_EQUIRECTANGULAR = !1, t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = !1, t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = !1, t.INVERTCUBICMAP = !1, t.LOGARITHMICDEPTH = !1, t.REFRACTION = !1, t.REFRACTIONMAP_3D = !1, t.REFLECTIONOVERALPHA = !1, t.TWOSIDEDLIGHTING = !1, t.SHADOWFLOAT = !1, t.MORPHTARGETS = !1, t.MORPHTARGETS_NORMAL = !1, t.MORPHTARGETS_TANGENT = !1, t.NUM_MORPH_INFLUENCERS = 0, t.NONUNIFORMSCALING = !1, t.PREMULTIPLYALPHA = !1, t.IMAGEPROCESSING = !1, t.VIGNETTE = !1, t.VIGNETTEBLENDMODEMULTIPLY = !1, t.VIGNETTEBLENDMODEOPAQUE = !1, t.TONEMAPPING = !1, t.TONEMAPPING_ACES = !1, t.CONTRAST = !1, t.COLORCURVES = !1, t.COLORGRADING = !1, t.COLORGRADING3D = !1, t.SAMPLER3DGREENDEPTH = !1, t.SAMPLER3DBGRMAP = !1, t.IMAGEPROCESSINGPOSTPROCESS = !1, t.MULTIVIEW = !1, t.IS_REFLECTION_LINEAR = !1, t.IS_REFRACTION_LINEAR = !1, t.EXPOSURE = !1, t.rebuild(), t
|
|
}
|
|
return n.d(t, e), t.prototype.setReflectionMode = function(e) {
|
|
for (var t = 0, i = ["REFLECTIONMAP_CUBIC", "REFLECTIONMAP_EXPLICIT", "REFLECTIONMAP_PLANAR", "REFLECTIONMAP_PROJECTION", "REFLECTIONMAP_PROJECTION", "REFLECTIONMAP_SKYBOX", "REFLECTIONMAP_SPHERICAL", "REFLECTIONMAP_EQUIRECTANGULAR", "REFLECTIONMAP_EQUIRECTANGULAR_FIXED", "REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED"]; t < i.length; t++) {
|
|
var n = i[t];
|
|
this[n] = n === e
|
|
}
|
|
}, t
|
|
}(h.a),
|
|
R = function(e) {
|
|
function t(i, n) {
|
|
var r = e.call(this, i, n) || this;
|
|
return r._diffuseTexture = null, r._ambientTexture = null, r._opacityTexture = null, r._reflectionTexture = null, r._emissiveTexture = null, r._specularTexture = null, r._bumpTexture = null, r._lightmapTexture = null, r._refractionTexture = null, r.ambientColor = new a.e(0, 0, 0), r.diffuseColor = new a.e(1, 1, 1), r.specularColor = new a.e(1, 1, 1), r.emissiveColor = new a.e(0, 0, 0), r.specularPower = 64, r._useAlphaFromDiffuseTexture = !1, r._useEmissiveAsIllumination = !1, r._linkEmissiveWithDiffuse = !1, r._useSpecularOverAlpha = !1, r._useReflectionOverAlpha = !1, r._disableLighting = !1, r._useObjectSpaceNormalMap = !1, r._useParallax = !1, r._useParallaxOcclusion = !1, r.parallaxScaleBias = .05, r._roughness = 0, r.indexOfRefraction = .98, r.invertRefractionY = !0, r.alphaCutOff = .4, r._useLightmapAsShadowmap = !1, r._useReflectionFresnelFromSpecular = !1, r._useGlossinessFromSpecularMapAlpha = !1, r._maxSimultaneousLights = 4, r._invertNormalMapX = !1, r._invertNormalMapY = !1, r._twoSidedLighting = !1, r._renderTargets = new o.a(16), r._worldViewProjectionMatrix = a.j.Zero(), r._globalAmbientColor = new a.e(0, 0, 0), r._attachImageProcessingConfiguration(null), r.getRenderTargetTextures = function() {
|
|
return r._renderTargets.reset(), t.ReflectionTextureEnabled && r._reflectionTexture && r._reflectionTexture.isRenderTarget && r._renderTargets.push(r._reflectionTexture), t.RefractionTextureEnabled && r._refractionTexture && r._refractionTexture.isRenderTarget && r._renderTargets.push(r._refractionTexture), r._renderTargets
|
|
}, r
|
|
}
|
|
return n.d(t, e), Object.defineProperty(t.prototype, "imageProcessingConfiguration", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration
|
|
},
|
|
set: function(e) {
|
|
this._attachImageProcessingConfiguration(e), this._markAllSubMeshesAsTexturesDirty()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._attachImageProcessingConfiguration = function(e) {
|
|
var t = this;
|
|
e !== this._imageProcessingConfiguration && (this._imageProcessingConfiguration && this._imageProcessingObserver && this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver), this._imageProcessingConfiguration = e || this.getScene().imageProcessingConfiguration, this._imageProcessingConfiguration && (this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(function() {
|
|
t._markAllSubMeshesAsImageProcessingDirty()
|
|
})))
|
|
}, Object.defineProperty(t.prototype, "cameraColorCurvesEnabled", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorCurvesEnabled
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorCurvesEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorGradingEnabled", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorGradingEnabled
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorGradingEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraToneMappingEnabled", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.toneMappingEnabled
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.toneMappingEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraExposure", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.exposure
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.exposure = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraContrast", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.contrast
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.contrast = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorGradingTexture", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.colorGradingTexture
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.colorGradingTexture = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorCurves", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.colorCurves
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.colorCurves = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "hasRenderTargetTextures", {
|
|
get: function() {
|
|
return !!(t.ReflectionTextureEnabled && this._reflectionTexture && this._reflectionTexture.isRenderTarget) || !!(t.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "StandardMaterial"
|
|
}, Object.defineProperty(t.prototype, "useLogarithmicDepth", {
|
|
get: function() {
|
|
return this._useLogarithmicDepth
|
|
},
|
|
set: function(e) {
|
|
this._useLogarithmicDepth = e && this.getScene().getEngine().getCaps().fragmentDepthSupported, this._markAllSubMeshesAsMiscDirty()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.needAlphaBlending = function() {
|
|
return this.alpha < 1 || null != this._opacityTexture || this._shouldUseAlphaFromDiffuseTexture() || this._opacityFresnelParameters && this._opacityFresnelParameters.isEnabled
|
|
}, t.prototype.needAlphaTesting = function() {
|
|
return null != this._diffuseTexture && this._diffuseTexture.hasAlpha
|
|
}, t.prototype._shouldUseAlphaFromDiffuseTexture = function() {
|
|
return null != this._diffuseTexture && this._diffuseTexture.hasAlpha && this._useAlphaFromDiffuseTexture
|
|
}, t.prototype.getAlphaTestTexture = function() {
|
|
return this._diffuseTexture
|
|
}, t.prototype.isReadyForSubMesh = function(e, i, n) {
|
|
if (void 0 === n && (n = !1), i.effect && this.isFrozen && this._wasPreviouslyReady) return !0;
|
|
i._materialDefines || (i._materialDefines = new x);
|
|
var r = this.getScene(),
|
|
o = i._materialDefines;
|
|
if (!this.checkReadyOnEveryCall && i.effect && o._renderId === r.getRenderId()) return !0;
|
|
var s = r.getEngine();
|
|
if (o._needNormals = f.a.PrepareDefinesForLights(r, e, o, !0, this._maxSimultaneousLights, this._disableLighting), f.a.PrepareDefinesForMultiview(r, o), o._areTexturesDirty) {
|
|
if (o._needUVs = !1, o.MAINUV1 = !1, o.MAINUV2 = !1, r.texturesEnabled) {
|
|
if (this._diffuseTexture && t.DiffuseTextureEnabled) {
|
|
if (!this._diffuseTexture.isReadyOrNotBlocking()) return !1;
|
|
f.a.PrepareDefinesForMergedUV(this._diffuseTexture, o, "DIFFUSE")
|
|
} else o.DIFFUSE = !1;
|
|
if (this._ambientTexture && t.AmbientTextureEnabled) {
|
|
if (!this._ambientTexture.isReadyOrNotBlocking()) return !1;
|
|
f.a.PrepareDefinesForMergedUV(this._ambientTexture, o, "AMBIENT")
|
|
} else o.AMBIENT = !1;
|
|
if (this._opacityTexture && t.OpacityTextureEnabled) {
|
|
if (!this._opacityTexture.isReadyOrNotBlocking()) return !1;
|
|
f.a.PrepareDefinesForMergedUV(this._opacityTexture, o, "OPACITY"), o.OPACITYRGB = this._opacityTexture.getAlphaFromRGB
|
|
} else o.OPACITY = !1;
|
|
if (this._reflectionTexture && t.ReflectionTextureEnabled) {
|
|
if (!this._reflectionTexture.isReadyOrNotBlocking()) return !1;
|
|
switch (o._needNormals = !0, o.REFLECTION = !0, o.ROUGHNESS = this._roughness > 0, o.REFLECTIONOVERALPHA = this._useReflectionOverAlpha, o.INVERTCUBICMAP = this._reflectionTexture.coordinatesMode === p.a.INVCUBIC_MODE, o.REFLECTIONMAP_3D = this._reflectionTexture.isCube, this._reflectionTexture.coordinatesMode) {
|
|
case p.a.EXPLICIT_MODE:
|
|
o.setReflectionMode("REFLECTIONMAP_EXPLICIT");
|
|
break;
|
|
case p.a.PLANAR_MODE:
|
|
o.setReflectionMode("REFLECTIONMAP_PLANAR");
|
|
break;
|
|
case p.a.PROJECTION_MODE:
|
|
o.setReflectionMode("REFLECTIONMAP_PROJECTION");
|
|
break;
|
|
case p.a.SKYBOX_MODE:
|
|
o.setReflectionMode("REFLECTIONMAP_SKYBOX"), o.REFLECTIONMAP_SKYBOX_TRANSFORMED = !this._reflectionTexture.getReflectionTextureMatrix().isIdentity();
|
|
break;
|
|
case p.a.SPHERICAL_MODE:
|
|
o.setReflectionMode("REFLECTIONMAP_SPHERICAL");
|
|
break;
|
|
case p.a.EQUIRECTANGULAR_MODE:
|
|
o.setReflectionMode("REFLECTIONMAP_EQUIRECTANGULAR");
|
|
break;
|
|
case p.a.FIXED_EQUIRECTANGULAR_MODE:
|
|
o.setReflectionMode("REFLECTIONMAP_EQUIRECTANGULAR_FIXED");
|
|
break;
|
|
case p.a.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:
|
|
o.setReflectionMode("REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED");
|
|
break;
|
|
case p.a.CUBIC_MODE:
|
|
case p.a.INVCUBIC_MODE:
|
|
default:
|
|
o.setReflectionMode("REFLECTIONMAP_CUBIC")
|
|
}
|
|
o.USE_LOCAL_REFLECTIONMAP_CUBIC = !!this._reflectionTexture.boundingBoxSize
|
|
} else o.REFLECTION = !1;
|
|
if (this._emissiveTexture && t.EmissiveTextureEnabled) {
|
|
if (!this._emissiveTexture.isReadyOrNotBlocking()) return !1;
|
|
f.a.PrepareDefinesForMergedUV(this._emissiveTexture, o, "EMISSIVE")
|
|
} else o.EMISSIVE = !1;
|
|
if (this._lightmapTexture && t.LightmapTextureEnabled) {
|
|
if (!this._lightmapTexture.isReadyOrNotBlocking()) return !1;
|
|
f.a.PrepareDefinesForMergedUV(this._lightmapTexture, o, "LIGHTMAP"), o.USELIGHTMAPASSHADOWMAP = this._useLightmapAsShadowmap
|
|
} else o.LIGHTMAP = !1;
|
|
if (this._specularTexture && t.SpecularTextureEnabled) {
|
|
if (!this._specularTexture.isReadyOrNotBlocking()) return !1;
|
|
f.a.PrepareDefinesForMergedUV(this._specularTexture, o, "SPECULAR"), o.GLOSSINESS = this._useGlossinessFromSpecularMapAlpha
|
|
} else o.SPECULAR = !1;
|
|
if (r.getEngine().getCaps().standardDerivatives && this._bumpTexture && t.BumpTextureEnabled) {
|
|
if (!this._bumpTexture.isReady()) return !1;
|
|
f.a.PrepareDefinesForMergedUV(this._bumpTexture, o, "BUMP"), o.PARALLAX = this._useParallax, o.PARALLAXOCCLUSION = this._useParallaxOcclusion, o.OBJECTSPACE_NORMALMAP = this._useObjectSpaceNormalMap
|
|
} else o.BUMP = !1;
|
|
if (this._refractionTexture && t.RefractionTextureEnabled) {
|
|
if (!this._refractionTexture.isReadyOrNotBlocking()) return !1;
|
|
o._needUVs = !0, o.REFRACTION = !0, o.REFRACTIONMAP_3D = this._refractionTexture.isCube
|
|
} else o.REFRACTION = !1;
|
|
o.TWOSIDEDLIGHTING = !this._backFaceCulling && this._twoSidedLighting
|
|
} else o.DIFFUSE = !1, o.AMBIENT = !1, o.OPACITY = !1, o.REFLECTION = !1, o.EMISSIVE = !1, o.LIGHTMAP = !1, o.BUMP = !1, o.REFRACTION = !1;
|
|
o.ALPHAFROMDIFFUSE = this._shouldUseAlphaFromDiffuseTexture(), o.EMISSIVEASILLUMINATION = this._useEmissiveAsIllumination, o.LINKEMISSIVEWITHDIFFUSE = this._linkEmissiveWithDiffuse, o.SPECULAROVERALPHA = this._useSpecularOverAlpha, o.PREMULTIPLYALPHA = this.alphaMode === A.a.ALPHA_PREMULTIPLIED || this.alphaMode === A.a.ALPHA_PREMULTIPLIED_PORTERDUFF
|
|
}
|
|
if (o._areImageProcessingDirty && this._imageProcessingConfiguration) {
|
|
if (!this._imageProcessingConfiguration.isReady()) return !1;
|
|
this._imageProcessingConfiguration.prepareDefines(o), o.IS_REFLECTION_LINEAR = null != this.reflectionTexture && !this.reflectionTexture.gammaSpace, o.IS_REFRACTION_LINEAR = null != this.refractionTexture && !this.refractionTexture.gammaSpace
|
|
}
|
|
if (o._areFresnelDirty && (t.FresnelEnabled ? (this._diffuseFresnelParameters || this._opacityFresnelParameters || this._emissiveFresnelParameters || this._refractionFresnelParameters || this._reflectionFresnelParameters) && (o.DIFFUSEFRESNEL = this._diffuseFresnelParameters && this._diffuseFresnelParameters.isEnabled, o.OPACITYFRESNEL = this._opacityFresnelParameters && this._opacityFresnelParameters.isEnabled, o.REFLECTIONFRESNEL = this._reflectionFresnelParameters && this._reflectionFresnelParameters.isEnabled, o.REFLECTIONFRESNELFROMSPECULAR = this._useReflectionFresnelFromSpecular, o.REFRACTIONFRESNEL = this._refractionFresnelParameters && this._refractionFresnelParameters.isEnabled, o.EMISSIVEFRESNEL = this._emissiveFresnelParameters && this._emissiveFresnelParameters.isEnabled, o._needNormals = !0, o.FRESNEL = !0) : o.FRESNEL = !1), f.a.PrepareDefinesForMisc(e, r, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(e), o), f.a.PrepareDefinesForAttributes(e, o, !0, !0, !0), f.a.PrepareDefinesForFrameBoundValues(r, s, o, n), o.isDirty) {
|
|
o.markAsProcessed();
|
|
var a = new u.c;
|
|
o.REFLECTION && a.addFallback(0, "REFLECTION"), o.SPECULAR && a.addFallback(0, "SPECULAR"), o.BUMP && a.addFallback(0, "BUMP"), o.PARALLAX && a.addFallback(1, "PARALLAX"), o.PARALLAXOCCLUSION && a.addFallback(0, "PARALLAXOCCLUSION"), o.SPECULAROVERALPHA && a.addFallback(0, "SPECULAROVERALPHA"), o.FOG && a.addFallback(1, "FOG"), o.POINTSIZE && a.addFallback(0, "POINTSIZE"), o.LOGARITHMICDEPTH && a.addFallback(0, "LOGARITHMICDEPTH"), f.a.HandleFallbacksForShadows(o, a, this._maxSimultaneousLights), o.SPECULARTERM && a.addFallback(0, "SPECULARTERM"), o.DIFFUSEFRESNEL && a.addFallback(1, "DIFFUSEFRESNEL"), o.OPACITYFRESNEL && a.addFallback(2, "OPACITYFRESNEL"), o.REFLECTIONFRESNEL && a.addFallback(3, "REFLECTIONFRESNEL"), o.EMISSIVEFRESNEL && a.addFallback(4, "EMISSIVEFRESNEL"), o.FRESNEL && a.addFallback(4, "FRESNEL"), o.MULTIVIEW && a.addFallback(0, "MULTIVIEW");
|
|
var h = [c.b.PositionKind];
|
|
o.NORMAL && h.push(c.b.NormalKind), o.UV1 && h.push(c.b.UVKind), o.UV2 && h.push(c.b.UV2Kind), o.VERTEXCOLOR && h.push(c.b.ColorKind), f.a.PrepareAttributesForBones(h, e, o, a), f.a.PrepareAttributesForInstances(h, o), f.a.PrepareAttributesForMorphTargets(h, e, o);
|
|
var d = "default",
|
|
_ = ["world", "view", "viewProjection", "vEyePosition", "vLightsType", "vAmbientColor", "vDiffuseColor", "vSpecularColor", "vEmissiveColor", "visibility", "vFogInfos", "vFogColor", "pointSize", "vDiffuseInfos", "vAmbientInfos", "vOpacityInfos", "vReflectionInfos", "vEmissiveInfos", "vSpecularInfos", "vBumpInfos", "vLightmapInfos", "vRefractionInfos", "mBones", "vClipPlane", "vClipPlane2", "vClipPlane3", "vClipPlane4", "diffuseMatrix", "ambientMatrix", "opacityMatrix", "reflectionMatrix", "emissiveMatrix", "specularMatrix", "bumpMatrix", "normalMatrix", "lightmapMatrix", "refractionMatrix", "diffuseLeftColor", "diffuseRightColor", "opacityParts", "reflectionLeftColor", "reflectionRightColor", "emissiveLeftColor", "emissiveRightColor", "refractionLeftColor", "refractionRightColor", "vReflectionPosition", "vReflectionSize", "logarithmicDepthConstant", "vTangentSpaceParams", "alphaCutOff", "boneTextureWidth"],
|
|
g = ["diffuseSampler", "ambientSampler", "opacitySampler", "reflectionCubeSampler", "reflection2DSampler", "emissiveSampler", "specularSampler", "bumpSampler", "lightmapSampler", "refractionCubeSampler", "refraction2DSampler", "boneSampler"],
|
|
m = ["Material", "Scene"];
|
|
l.a && (l.a.PrepareUniforms(_, o), l.a.PrepareSamplers(g, o)), f.a.PrepareUniformsAndSamplersList({
|
|
uniformsNames: _,
|
|
uniformBuffersNames: m,
|
|
samplers: g,
|
|
defines: o,
|
|
maxSimultaneousLights: this._maxSimultaneousLights
|
|
}), this.customShaderNameResolve && (d = this.customShaderNameResolve(d, _, m, g, o));
|
|
var v = o.toString(),
|
|
y = i.effect,
|
|
b = r.getEngine().createEffect(d, {
|
|
attributes: h,
|
|
uniformsNames: _,
|
|
uniformBuffersNames: m,
|
|
samplers: g,
|
|
defines: v,
|
|
fallbacks: a,
|
|
onCompiled: this.onCompiled,
|
|
onError: this.onError,
|
|
indexParameters: {
|
|
maxSimultaneousLights: this._maxSimultaneousLights,
|
|
maxSimultaneousMorphTargets: o.NUM_MORPH_INFLUENCERS
|
|
}
|
|
}, s);
|
|
b && (this.allowShaderHotSwapping && y && !b.isReady() ? (b = y, o.markAsUnprocessed()) : (r.resetCachedMaterial(), i.setEffect(b, o), this.buildUniformLayout()))
|
|
}
|
|
return !(!i.effect || !i.effect.isReady()) && (o._renderId = r.getRenderId(), this._wasPreviouslyReady = !0, !0)
|
|
}, t.prototype.buildUniformLayout = function() {
|
|
var e = this._uniformBuffer;
|
|
e.addUniform("diffuseLeftColor", 4), e.addUniform("diffuseRightColor", 4), e.addUniform("opacityParts", 4), e.addUniform("reflectionLeftColor", 4), e.addUniform("reflectionRightColor", 4), e.addUniform("refractionLeftColor", 4), e.addUniform("refractionRightColor", 4), e.addUniform("emissiveLeftColor", 4), e.addUniform("emissiveRightColor", 4), e.addUniform("vDiffuseInfos", 2), e.addUniform("vAmbientInfos", 2), e.addUniform("vOpacityInfos", 2), e.addUniform("vReflectionInfos", 2), e.addUniform("vReflectionPosition", 3), e.addUniform("vReflectionSize", 3), e.addUniform("vEmissiveInfos", 2), e.addUniform("vLightmapInfos", 2), e.addUniform("vSpecularInfos", 2), e.addUniform("vBumpInfos", 3), e.addUniform("diffuseMatrix", 16), e.addUniform("ambientMatrix", 16), e.addUniform("opacityMatrix", 16), e.addUniform("reflectionMatrix", 16), e.addUniform("emissiveMatrix", 16), e.addUniform("lightmapMatrix", 16), e.addUniform("specularMatrix", 16), e.addUniform("bumpMatrix", 16), e.addUniform("vTangentSpaceParams", 2), e.addUniform("pointSize", 1), e.addUniform("refractionMatrix", 16), e.addUniform("vRefractionInfos", 4), e.addUniform("vSpecularColor", 4), e.addUniform("vEmissiveColor", 3), e.addUniform("visibility", 1), e.addUniform("vDiffuseColor", 4), e.create()
|
|
}, t.prototype.unbind = function() {
|
|
if (this._activeEffect) {
|
|
var t = !1;
|
|
this._reflectionTexture && this._reflectionTexture.isRenderTarget && (this._activeEffect.setTexture("reflection2DSampler", null), t = !0), this._refractionTexture && this._refractionTexture.isRenderTarget && (this._activeEffect.setTexture("refraction2DSampler", null), t = !0), t && this._markAllSubMeshesAsTexturesDirty()
|
|
}
|
|
e.prototype.unbind.call(this)
|
|
}, t.prototype.bindForSubMesh = function(e, i, n) {
|
|
var r = this.getScene(),
|
|
o = n._materialDefines;
|
|
if (o) {
|
|
var c = n.effect;
|
|
if (c) {
|
|
this._activeEffect = c, o.INSTANCES || this.bindOnlyWorldMatrix(e), o.OBJECTSPACE_NORMALMAP && (e.toNormalMatrix(this._normalMatrix), this.bindOnlyNormalMatrix(this._normalMatrix));
|
|
var l = this._mustRebind(r, c, i.visibility);
|
|
f.a.BindBonesParameters(i, c);
|
|
var u = this._uniformBuffer;
|
|
if (l) {
|
|
if (u.bindToEffect(c, "Material"), this.bindViewProjection(c), !u.useUbo || !this.isFrozen || !u.isSync) {
|
|
if (t.FresnelEnabled && o.FRESNEL && (this.diffuseFresnelParameters && this.diffuseFresnelParameters.isEnabled && (u.updateColor4("diffuseLeftColor", this.diffuseFresnelParameters.leftColor, this.diffuseFresnelParameters.power), u.updateColor4("diffuseRightColor", this.diffuseFresnelParameters.rightColor, this.diffuseFresnelParameters.bias)), this.opacityFresnelParameters && this.opacityFresnelParameters.isEnabled && u.updateColor4("opacityParts", new a.e(this.opacityFresnelParameters.leftColor.toLuminance(), this.opacityFresnelParameters.rightColor.toLuminance(), this.opacityFresnelParameters.bias), this.opacityFresnelParameters.power), this.reflectionFresnelParameters && this.reflectionFresnelParameters.isEnabled && (u.updateColor4("reflectionLeftColor", this.reflectionFresnelParameters.leftColor, this.reflectionFresnelParameters.power), u.updateColor4("reflectionRightColor", this.reflectionFresnelParameters.rightColor, this.reflectionFresnelParameters.bias)), this.refractionFresnelParameters && this.refractionFresnelParameters.isEnabled && (u.updateColor4("refractionLeftColor", this.refractionFresnelParameters.leftColor, this.refractionFresnelParameters.power), u.updateColor4("refractionRightColor", this.refractionFresnelParameters.rightColor, this.refractionFresnelParameters.bias)), this.emissiveFresnelParameters && this.emissiveFresnelParameters.isEnabled && (u.updateColor4("emissiveLeftColor", this.emissiveFresnelParameters.leftColor, this.emissiveFresnelParameters.power), u.updateColor4("emissiveRightColor", this.emissiveFresnelParameters.rightColor, this.emissiveFresnelParameters.bias))), r.texturesEnabled) {
|
|
if (this._diffuseTexture && t.DiffuseTextureEnabled && (u.updateFloat2("vDiffuseInfos", this._diffuseTexture.coordinatesIndex, this._diffuseTexture.level), f.a.BindTextureMatrix(this._diffuseTexture, u, "diffuse"), this._diffuseTexture.hasAlpha && c.setFloat("alphaCutOff", this.alphaCutOff)), this._ambientTexture && t.AmbientTextureEnabled && (u.updateFloat2("vAmbientInfos", this._ambientTexture.coordinatesIndex, this._ambientTexture.level), f.a.BindTextureMatrix(this._ambientTexture, u, "ambient")), this._opacityTexture && t.OpacityTextureEnabled && (u.updateFloat2("vOpacityInfos", this._opacityTexture.coordinatesIndex, this._opacityTexture.level), f.a.BindTextureMatrix(this._opacityTexture, u, "opacity")), this._reflectionTexture && t.ReflectionTextureEnabled && (u.updateFloat2("vReflectionInfos", this._reflectionTexture.level, this.roughness), u.updateMatrix("reflectionMatrix", this._reflectionTexture.getReflectionTextureMatrix()), this._reflectionTexture.boundingBoxSize)) {
|
|
var h = this._reflectionTexture;
|
|
u.updateVector3("vReflectionPosition", h.boundingBoxPosition), u.updateVector3("vReflectionSize", h.boundingBoxSize)
|
|
}
|
|
if (this._emissiveTexture && t.EmissiveTextureEnabled && (u.updateFloat2("vEmissiveInfos", this._emissiveTexture.coordinatesIndex, this._emissiveTexture.level), f.a.BindTextureMatrix(this._emissiveTexture, u, "emissive")), this._lightmapTexture && t.LightmapTextureEnabled && (u.updateFloat2("vLightmapInfos", this._lightmapTexture.coordinatesIndex, this._lightmapTexture.level), f.a.BindTextureMatrix(this._lightmapTexture, u, "lightmap")), this._specularTexture && t.SpecularTextureEnabled && (u.updateFloat2("vSpecularInfos", this._specularTexture.coordinatesIndex, this._specularTexture.level), f.a.BindTextureMatrix(this._specularTexture, u, "specular")), this._bumpTexture && r.getEngine().getCaps().standardDerivatives && t.BumpTextureEnabled && (u.updateFloat3("vBumpInfos", this._bumpTexture.coordinatesIndex, 1 / this._bumpTexture.level, this.parallaxScaleBias), f.a.BindTextureMatrix(this._bumpTexture, u, "bump"), r._mirroredCameraPosition ? u.updateFloat2("vTangentSpaceParams", this._invertNormalMapX ? 1 : -1, this._invertNormalMapY ? 1 : -1) : u.updateFloat2("vTangentSpaceParams", this._invertNormalMapX ? -1 : 1, this._invertNormalMapY ? -1 : 1)), this._refractionTexture && t.RefractionTextureEnabled) {
|
|
var d = 1;
|
|
this._refractionTexture.isCube || (u.updateMatrix("refractionMatrix", this._refractionTexture.getReflectionTextureMatrix()), this._refractionTexture.depth && (d = this._refractionTexture.depth)), u.updateFloat4("vRefractionInfos", this._refractionTexture.level, this.indexOfRefraction, d, this.invertRefractionY ? -1 : 1)
|
|
}
|
|
}
|
|
this.pointsCloud && u.updateFloat("pointSize", this.pointSize), o.SPECULARTERM && u.updateColor4("vSpecularColor", this.specularColor, this.specularPower), u.updateColor3("vEmissiveColor", t.EmissiveTextureEnabled ? this.emissiveColor : a.e.BlackReadOnly), u.updateFloat("visibility", i.visibility), u.updateColor4("vDiffuseColor", this.diffuseColor, this.alpha)
|
|
}
|
|
if (r.texturesEnabled && (this._diffuseTexture && t.DiffuseTextureEnabled && c.setTexture("diffuseSampler", this._diffuseTexture), this._ambientTexture && t.AmbientTextureEnabled && c.setTexture("ambientSampler", this._ambientTexture), this._opacityTexture && t.OpacityTextureEnabled && c.setTexture("opacitySampler", this._opacityTexture), this._reflectionTexture && t.ReflectionTextureEnabled && (this._reflectionTexture.isCube ? c.setTexture("reflectionCubeSampler", this._reflectionTexture) : c.setTexture("reflection2DSampler", this._reflectionTexture)), this._emissiveTexture && t.EmissiveTextureEnabled && c.setTexture("emissiveSampler", this._emissiveTexture), this._lightmapTexture && t.LightmapTextureEnabled && c.setTexture("lightmapSampler", this._lightmapTexture), this._specularTexture && t.SpecularTextureEnabled && c.setTexture("specularSampler", this._specularTexture), this._bumpTexture && r.getEngine().getCaps().standardDerivatives && t.BumpTextureEnabled && c.setTexture("bumpSampler", this._bumpTexture), this._refractionTexture && t.RefractionTextureEnabled)) {
|
|
d = 1;
|
|
this._refractionTexture.isCube ? c.setTexture("refractionCubeSampler", this._refractionTexture) : c.setTexture("refraction2DSampler", this._refractionTexture)
|
|
}
|
|
f.a.BindClipPlane(c, r), r.ambientColor.multiplyToRef(this.ambientColor, this._globalAmbientColor), f.a.BindEyePosition(c, r), c.setColor3("vAmbientColor", this._globalAmbientColor)
|
|
}!l && this.isFrozen || (r.lightsEnabled && !this._disableLighting && f.a.BindLights(r, i, c, o, this._maxSimultaneousLights), (r.fogEnabled && i.applyFog && r.fogMode !== s.a.FOGMODE_NONE || this._reflectionTexture || this._refractionTexture) && this.bindView(c), f.a.BindFogParameters(r, i, c), o.NUM_MORPH_INFLUENCERS && f.a.BindMorphTargetParameters(i, c), f.a.BindLogDepth(o, c, r), this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess && this._imageProcessingConfiguration.bind(this._activeEffect)), u.update(), this._afterBind(i, this._activeEffect)
|
|
}
|
|
}
|
|
}, t.prototype.getAnimatables = function() {
|
|
var e = [];
|
|
return this._diffuseTexture && this._diffuseTexture.animations && this._diffuseTexture.animations.length > 0 && e.push(this._diffuseTexture), this._ambientTexture && this._ambientTexture.animations && this._ambientTexture.animations.length > 0 && e.push(this._ambientTexture), this._opacityTexture && this._opacityTexture.animations && this._opacityTexture.animations.length > 0 && e.push(this._opacityTexture), this._reflectionTexture && this._reflectionTexture.animations && this._reflectionTexture.animations.length > 0 && e.push(this._reflectionTexture), this._emissiveTexture && this._emissiveTexture.animations && this._emissiveTexture.animations.length > 0 && e.push(this._emissiveTexture), this._specularTexture && this._specularTexture.animations && this._specularTexture.animations.length > 0 && e.push(this._specularTexture), this._bumpTexture && this._bumpTexture.animations && this._bumpTexture.animations.length > 0 && e.push(this._bumpTexture), this._lightmapTexture && this._lightmapTexture.animations && this._lightmapTexture.animations.length > 0 && e.push(this._lightmapTexture), this._refractionTexture && this._refractionTexture.animations && this._refractionTexture.animations.length > 0 && e.push(this._refractionTexture), e
|
|
}, t.prototype.getActiveTextures = function() {
|
|
var t = e.prototype.getActiveTextures.call(this);
|
|
return this._diffuseTexture && t.push(this._diffuseTexture), this._ambientTexture && t.push(this._ambientTexture), this._opacityTexture && t.push(this._opacityTexture), this._reflectionTexture && t.push(this._reflectionTexture), this._emissiveTexture && t.push(this._emissiveTexture), this._specularTexture && t.push(this._specularTexture), this._bumpTexture && t.push(this._bumpTexture), this._lightmapTexture && t.push(this._lightmapTexture), this._refractionTexture && t.push(this._refractionTexture), t
|
|
}, t.prototype.hasTexture = function(t) {
|
|
return !!e.prototype.hasTexture.call(this, t) || (this._diffuseTexture === t || (this._ambientTexture === t || (this._opacityTexture === t || (this._reflectionTexture === t || (this._emissiveTexture === t || (this._specularTexture === t || (this._bumpTexture === t || (this._lightmapTexture === t || this._refractionTexture === t))))))))
|
|
}, t.prototype.dispose = function(t, i) {
|
|
i && (this._diffuseTexture && this._diffuseTexture.dispose(), this._ambientTexture && this._ambientTexture.dispose(), this._opacityTexture && this._opacityTexture.dispose(), this._reflectionTexture && this._reflectionTexture.dispose(), this._emissiveTexture && this._emissiveTexture.dispose(), this._specularTexture && this._specularTexture.dispose(), this._bumpTexture && this._bumpTexture.dispose(), this._lightmapTexture && this._lightmapTexture.dispose(), this._refractionTexture && this._refractionTexture.dispose()), this._imageProcessingConfiguration && this._imageProcessingObserver && this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver), e.prototype.dispose.call(this, t, i)
|
|
}, t.prototype.clone = function(e) {
|
|
var i = this,
|
|
n = r.a.Clone(function() {
|
|
return new t(e, i.getScene())
|
|
}, this);
|
|
return n.name = e, n.id = e, n
|
|
}, t.prototype.serialize = function() {
|
|
return r.a.Serialize(this)
|
|
}, t.Parse = function(e, i, n) {
|
|
return r.a.Parse(function() {
|
|
return new t(e.name, i)
|
|
}, e, i, n)
|
|
}, Object.defineProperty(t, "DiffuseTextureEnabled", {
|
|
get: function() {
|
|
return g.a.DiffuseTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.DiffuseTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "AmbientTextureEnabled", {
|
|
get: function() {
|
|
return g.a.AmbientTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.AmbientTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "OpacityTextureEnabled", {
|
|
get: function() {
|
|
return g.a.OpacityTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.OpacityTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "ReflectionTextureEnabled", {
|
|
get: function() {
|
|
return g.a.ReflectionTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.ReflectionTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "EmissiveTextureEnabled", {
|
|
get: function() {
|
|
return g.a.EmissiveTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.EmissiveTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "SpecularTextureEnabled", {
|
|
get: function() {
|
|
return g.a.SpecularTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.SpecularTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "BumpTextureEnabled", {
|
|
get: function() {
|
|
return g.a.BumpTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.BumpTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "LightmapTextureEnabled", {
|
|
get: function() {
|
|
return g.a.LightmapTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.LightmapTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "RefractionTextureEnabled", {
|
|
get: function() {
|
|
return g.a.RefractionTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.RefractionTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "ColorGradingTextureEnabled", {
|
|
get: function() {
|
|
return g.a.ColorGradingTextureEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.ColorGradingTextureEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "FresnelEnabled", {
|
|
get: function() {
|
|
return g.a.FresnelEnabled
|
|
},
|
|
set: function(e) {
|
|
g.a.FresnelEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), n.c([Object(r.m)("diffuseTexture")], t.prototype, "_diffuseTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesAndMiscDirty")], t.prototype, "diffuseTexture", void 0), n.c([Object(r.m)("ambientTexture")], t.prototype, "_ambientTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "ambientTexture", void 0), n.c([Object(r.m)("opacityTexture")], t.prototype, "_opacityTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesAndMiscDirty")], t.prototype, "opacityTexture", void 0), n.c([Object(r.m)("reflectionTexture")], t.prototype, "_reflectionTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionTexture", void 0), n.c([Object(r.m)("emissiveTexture")], t.prototype, "_emissiveTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "emissiveTexture", void 0), n.c([Object(r.m)("specularTexture")], t.prototype, "_specularTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "specularTexture", void 0), n.c([Object(r.m)("bumpTexture")], t.prototype, "_bumpTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "bumpTexture", void 0), n.c([Object(r.m)("lightmapTexture")], t.prototype, "_lightmapTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "lightmapTexture", void 0), n.c([Object(r.m)("refractionTexture")], t.prototype, "_refractionTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "refractionTexture", void 0), n.c([Object(r.e)("ambient")], t.prototype, "ambientColor", void 0), n.c([Object(r.e)("diffuse")], t.prototype, "diffuseColor", void 0), n.c([Object(r.e)("specular")], t.prototype, "specularColor", void 0), n.c([Object(r.e)("emissive")], t.prototype, "emissiveColor", void 0), n.c([Object(r.c)()], t.prototype, "specularPower", void 0), n.c([Object(r.c)("useAlphaFromDiffuseTexture")], t.prototype, "_useAlphaFromDiffuseTexture", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useAlphaFromDiffuseTexture", void 0), n.c([Object(r.c)("useEmissiveAsIllumination")], t.prototype, "_useEmissiveAsIllumination", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useEmissiveAsIllumination", void 0), n.c([Object(r.c)("linkEmissiveWithDiffuse")], t.prototype, "_linkEmissiveWithDiffuse", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "linkEmissiveWithDiffuse", void 0), n.c([Object(r.c)("useSpecularOverAlpha")], t.prototype, "_useSpecularOverAlpha", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useSpecularOverAlpha", void 0), n.c([Object(r.c)("useReflectionOverAlpha")], t.prototype, "_useReflectionOverAlpha", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useReflectionOverAlpha", void 0), n.c([Object(r.c)("disableLighting")], t.prototype, "_disableLighting", void 0), n.c([Object(r.b)("_markAllSubMeshesAsLightsDirty")], t.prototype, "disableLighting", void 0), n.c([Object(r.c)("useObjectSpaceNormalMap")], t.prototype, "_useObjectSpaceNormalMap", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useObjectSpaceNormalMap", void 0), n.c([Object(r.c)("useParallax")], t.prototype, "_useParallax", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useParallax", void 0), n.c([Object(r.c)("useParallaxOcclusion")], t.prototype, "_useParallaxOcclusion", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useParallaxOcclusion", void 0), n.c([Object(r.c)()], t.prototype, "parallaxScaleBias", void 0), n.c([Object(r.c)("roughness")], t.prototype, "_roughness", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "roughness", void 0), n.c([Object(r.c)()], t.prototype, "indexOfRefraction", void 0), n.c([Object(r.c)()], t.prototype, "invertRefractionY", void 0), n.c([Object(r.c)()], t.prototype, "alphaCutOff", void 0), n.c([Object(r.c)("useLightmapAsShadowmap")], t.prototype, "_useLightmapAsShadowmap", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useLightmapAsShadowmap", void 0), n.c([Object(r.h)("diffuseFresnelParameters")], t.prototype, "_diffuseFresnelParameters", void 0), n.c([Object(r.b)("_markAllSubMeshesAsFresnelDirty")], t.prototype, "diffuseFresnelParameters", void 0), n.c([Object(r.h)("opacityFresnelParameters")], t.prototype, "_opacityFresnelParameters", void 0), n.c([Object(r.b)("_markAllSubMeshesAsFresnelAndMiscDirty")], t.prototype, "opacityFresnelParameters", void 0), n.c([Object(r.h)("reflectionFresnelParameters")], t.prototype, "_reflectionFresnelParameters", void 0), n.c([Object(r.b)("_markAllSubMeshesAsFresnelDirty")], t.prototype, "reflectionFresnelParameters", void 0), n.c([Object(r.h)("refractionFresnelParameters")], t.prototype, "_refractionFresnelParameters", void 0), n.c([Object(r.b)("_markAllSubMeshesAsFresnelDirty")], t.prototype, "refractionFresnelParameters", void 0), n.c([Object(r.h)("emissiveFresnelParameters")], t.prototype, "_emissiveFresnelParameters", void 0), n.c([Object(r.b)("_markAllSubMeshesAsFresnelDirty")], t.prototype, "emissiveFresnelParameters", void 0), n.c([Object(r.c)("useReflectionFresnelFromSpecular")], t.prototype, "_useReflectionFresnelFromSpecular", void 0), n.c([Object(r.b)("_markAllSubMeshesAsFresnelDirty")], t.prototype, "useReflectionFresnelFromSpecular", void 0), n.c([Object(r.c)("useGlossinessFromSpecularMapAlpha")], t.prototype, "_useGlossinessFromSpecularMapAlpha", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useGlossinessFromSpecularMapAlpha", void 0), n.c([Object(r.c)("maxSimultaneousLights")], t.prototype, "_maxSimultaneousLights", void 0), n.c([Object(r.b)("_markAllSubMeshesAsLightsDirty")], t.prototype, "maxSimultaneousLights", void 0), n.c([Object(r.c)("invertNormalMapX")], t.prototype, "_invertNormalMapX", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "invertNormalMapX", void 0), n.c([Object(r.c)("invertNormalMapY")], t.prototype, "_invertNormalMapY", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "invertNormalMapY", void 0), n.c([Object(r.c)("twoSidedLighting")], t.prototype, "_twoSidedLighting", void 0), n.c([Object(r.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "twoSidedLighting", void 0), n.c([Object(r.c)()], t.prototype, "useLogarithmicDepth", null), t
|
|
}(d.a);
|
|
_.a.RegisteredTypes["BABYLON.StandardMaterial"] = R, s.a.DefaultMaterialFactory = function(e) {
|
|
return new R("default material", e)
|
|
}
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return e.BuildArray = function(e, t) {
|
|
for (var i = [], n = 0; n < e; ++n) i.push(t());
|
|
return i
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return e.IsWindowObjectExist = function() {
|
|
return "undefined" != typeof window
|
|
}, e.GetDOMTextContent = function(e) {
|
|
for (var t = "", i = e.firstChild; i;) 3 === i.nodeType && (t += i.textContent), i = i.nextSibling;
|
|
return t
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e(e, t, i, n, r, o) {
|
|
this.source = e, this.pointerX = t, this.pointerY = i, this.meshUnderPointer = n, this.sourceEvent = r, this.additionalData = o
|
|
}
|
|
return e.CreateNew = function(t, i, n) {
|
|
var r = t.getScene();
|
|
return new e(t, r.pointerX, r.pointerY, r.meshUnderPointer || t, i, n)
|
|
}, e.CreateNewFromSprite = function(t, i, n, r) {
|
|
return new e(t, i.pointerX, i.pointerY, i.meshUnderPointer, n, r)
|
|
}, e.CreateNewFromScene = function(t, i) {
|
|
return new e(null, t.pointerX, t.pointerY, t.meshUnderPointer, i)
|
|
}, e.CreateNewFromPrimitive = function(t, i, n, r) {
|
|
return new e(t, i.x, i.y, null, n, r)
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "e", function() {
|
|
return r
|
|
}), i.d(t, "a", function() {
|
|
return o
|
|
}), i.d(t, "d", function() {
|
|
return s
|
|
}), i.d(t, "c", function() {
|
|
return a
|
|
}), i.d(t, "b", function() {
|
|
return c
|
|
});
|
|
var n = i(1),
|
|
r = function() {
|
|
function e(e, t) {
|
|
this.type = e, this.jointData = t, t.nativeParams = t.nativeParams || {}
|
|
}
|
|
return Object.defineProperty(e.prototype, "physicsJoint", {
|
|
get: function() {
|
|
return this._physicsJoint
|
|
},
|
|
set: function(e) {
|
|
this._physicsJoint, this._physicsJoint = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "physicsPlugin", {
|
|
set: function(e) {
|
|
this._physicsPlugin = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.executeNativeFunction = function(e) {
|
|
e(this._physicsPlugin.world, this._physicsJoint)
|
|
}, e.DistanceJoint = 0, e.HingeJoint = 1, e.BallAndSocketJoint = 2, e.WheelJoint = 3, e.SliderJoint = 4, e.PrismaticJoint = 5, e.UniversalJoint = 6, e.Hinge2Joint = e.WheelJoint, e.PointToPointJoint = 8, e.SpringJoint = 9, e.LockJoint = 10, e
|
|
}(),
|
|
o = function(e) {
|
|
function t(t) {
|
|
return e.call(this, r.DistanceJoint, t) || this
|
|
}
|
|
return n.d(t, e), t.prototype.updateDistance = function(e, t) {
|
|
this._physicsPlugin.updateDistanceJoint(this, e, t)
|
|
}, t
|
|
}(r),
|
|
s = function(e) {
|
|
function t(t, i) {
|
|
return e.call(this, t, i) || this
|
|
}
|
|
return n.d(t, e), t.prototype.setMotor = function(e, t) {
|
|
this._physicsPlugin.setMotor(this, e || 0, t)
|
|
}, t.prototype.setLimit = function(e, t) {
|
|
this._physicsPlugin.setLimit(this, e, t)
|
|
}, t
|
|
}(r),
|
|
a = function(e) {
|
|
function t(t) {
|
|
return e.call(this, r.HingeJoint, t) || this
|
|
}
|
|
return n.d(t, e), t.prototype.setMotor = function(e, t) {
|
|
this._physicsPlugin.setMotor(this, e || 0, t)
|
|
}, t.prototype.setLimit = function(e, t) {
|
|
this._physicsPlugin.setLimit(this, e, t)
|
|
}, t
|
|
}(s),
|
|
c = function(e) {
|
|
function t(t) {
|
|
return e.call(this, r.Hinge2Joint, t) || this
|
|
}
|
|
return n.d(t, e), t.prototype.setMotor = function(e, t, i) {
|
|
void 0 === i && (i = 0), this._physicsPlugin.setMotor(this, e || 0, t, i)
|
|
}, t.prototype.setLimit = function(e, t, i) {
|
|
void 0 === i && (i = 0), this._physicsPlugin.setLimit(this, e, t, i)
|
|
}, t
|
|
}(s)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return l
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(0),
|
|
s = i(25),
|
|
a = i(63),
|
|
c = i(22),
|
|
l = function(e) {
|
|
function t(i, n) {
|
|
var r = e.call(this, i, n) || this;
|
|
return r.diffuse = new o.e(1, 1, 1), r.specular = new o.e(1, 1, 1), r.falloffType = t.FALLOFF_DEFAULT, r.intensity = 1, r._range = Number.MAX_VALUE, r._inverseSquaredRange = 0, r._photometricScale = 1, r._intensityMode = t.INTENSITYMODE_AUTOMATIC, r._radius = 1e-5, r.renderPriority = 0, r._shadowEnabled = !0, r._excludeWithLayerMask = 0, r._includeOnlyWithLayerMask = 0, r._lightmapMode = 0, r._excludedMeshesIds = new Array, r._includedOnlyMeshesIds = new Array, r._isLight = !0, r.getScene().addLight(r), r._uniformBuffer = new a.a(r.getScene().getEngine()), r._buildUniformLayout(), r.includedOnlyMeshes = new Array, r.excludedMeshes = new Array, r._resyncMeshes(), r
|
|
}
|
|
return n.d(t, e), Object.defineProperty(t.prototype, "range", {
|
|
get: function() {
|
|
return this._range
|
|
},
|
|
set: function(e) {
|
|
this._range = e, this._inverseSquaredRange = 1 / (this.range * this.range)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "intensityMode", {
|
|
get: function() {
|
|
return this._intensityMode
|
|
},
|
|
set: function(e) {
|
|
this._intensityMode = e, this._computePhotometricScale()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "radius", {
|
|
get: function() {
|
|
return this._radius
|
|
},
|
|
set: function(e) {
|
|
this._radius = e, this._computePhotometricScale()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "shadowEnabled", {
|
|
get: function() {
|
|
return this._shadowEnabled
|
|
},
|
|
set: function(e) {
|
|
this._shadowEnabled !== e && (this._shadowEnabled = e, this._markMeshesAsLightDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "includedOnlyMeshes", {
|
|
get: function() {
|
|
return this._includedOnlyMeshes
|
|
},
|
|
set: function(e) {
|
|
this._includedOnlyMeshes = e, this._hookArrayForIncludedOnly(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "excludedMeshes", {
|
|
get: function() {
|
|
return this._excludedMeshes
|
|
},
|
|
set: function(e) {
|
|
this._excludedMeshes = e, this._hookArrayForExcluded(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "excludeWithLayerMask", {
|
|
get: function() {
|
|
return this._excludeWithLayerMask
|
|
},
|
|
set: function(e) {
|
|
this._excludeWithLayerMask = e, this._resyncMeshes()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "includeOnlyWithLayerMask", {
|
|
get: function() {
|
|
return this._includeOnlyWithLayerMask
|
|
},
|
|
set: function(e) {
|
|
this._includeOnlyWithLayerMask = e, this._resyncMeshes()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "lightmapMode", {
|
|
get: function() {
|
|
return this._lightmapMode
|
|
},
|
|
set: function(e) {
|
|
this._lightmapMode !== e && (this._lightmapMode = e, this._markMeshesAsLightDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "Light"
|
|
}, t.prototype.toString = function(e) {
|
|
var t = "Name: " + this.name;
|
|
if (t += ", type: " + ["Point", "Directional", "Spot", "Hemispheric"][this.getTypeID()], this.animations)
|
|
for (var i = 0; i < this.animations.length; i++) t += ", animation[0]: " + this.animations[i].toString(e);
|
|
return t
|
|
}, t.prototype._syncParentEnabledState = function() {
|
|
e.prototype._syncParentEnabledState.call(this), this._resyncMeshes()
|
|
}, t.prototype.setEnabled = function(t) {
|
|
e.prototype.setEnabled.call(this, t), this._resyncMeshes()
|
|
}, t.prototype.getShadowGenerator = function() {
|
|
return this._shadowGenerator
|
|
}, t.prototype.getAbsolutePosition = function() {
|
|
return o.x.Zero()
|
|
}, t.prototype.canAffectMesh = function(e) {
|
|
return !e || !(this.includedOnlyMeshes && this.includedOnlyMeshes.length > 0 && -1 === this.includedOnlyMeshes.indexOf(e)) && (!(this.excludedMeshes && this.excludedMeshes.length > 0 && -1 !== this.excludedMeshes.indexOf(e)) && ((0 === this.includeOnlyWithLayerMask || 0 != (this.includeOnlyWithLayerMask & e.layerMask)) && !(0 !== this.excludeWithLayerMask && this.excludeWithLayerMask & e.layerMask)))
|
|
}, t.CompareLightsPriority = function(e, t) {
|
|
return e.shadowEnabled !== t.shadowEnabled ? (t.shadowEnabled ? 1 : 0) - (e.shadowEnabled ? 1 : 0) : t.renderPriority - e.renderPriority
|
|
}, t.prototype.dispose = function(t, i) {
|
|
void 0 === i && (i = !1), this._shadowGenerator && (this._shadowGenerator.dispose(), this._shadowGenerator = null), this.getScene().stopAnimation(this);
|
|
for (var n = 0, r = this.getScene().meshes; n < r.length; n++) {
|
|
r[n]._removeLightSource(this)
|
|
}
|
|
this._uniformBuffer.dispose(), this.getScene().removeLight(this), e.prototype.dispose.call(this, t, i)
|
|
}, t.prototype.getTypeID = function() {
|
|
return 0
|
|
}, t.prototype.getScaledIntensity = function() {
|
|
return this._photometricScale * this.intensity
|
|
}, t.prototype.clone = function(e) {
|
|
var i = t.GetConstructorFromName(this.getTypeID(), e, this.getScene());
|
|
return i ? r.a.Clone(i, this) : null
|
|
}, t.prototype.serialize = function() {
|
|
var e = r.a.Serialize(this);
|
|
return e.type = this.getTypeID(), this.parent && (e.parentId = this.parent.id), this.excludedMeshes.length > 0 && (e.excludedMeshesIds = [], this.excludedMeshes.forEach(function(t) {
|
|
e.excludedMeshesIds.push(t.id)
|
|
})), this.includedOnlyMeshes.length > 0 && (e.includedOnlyMeshesIds = [], this.includedOnlyMeshes.forEach(function(t) {
|
|
e.includedOnlyMeshesIds.push(t.id)
|
|
})), r.a.AppendSerializedAnimations(this, e), e.ranges = this.serializeAnimationRanges(), e
|
|
}, t.GetConstructorFromName = function(e, t, i) {
|
|
var n = s.a.Construct("Light_Type_" + e, t, i);
|
|
return n || null
|
|
}, t.Parse = function(e, i) {
|
|
var n = t.GetConstructorFromName(e.type, e.name, i);
|
|
if (!n) return null;
|
|
var o = r.a.Parse(n, e, i);
|
|
if (e.excludedMeshesIds && (o._excludedMeshesIds = e.excludedMeshesIds), e.includedOnlyMeshesIds && (o._includedOnlyMeshesIds = e.includedOnlyMeshesIds), e.parentId && (o._waitingParentId = e.parentId), void 0 !== e.falloffType && (o.falloffType = e.falloffType), void 0 !== e.lightmapMode && (o.lightmapMode = e.lightmapMode), e.animations) {
|
|
for (var a = 0; a < e.animations.length; a++) {
|
|
var l = e.animations[a],
|
|
u = c.a.GetClass("BABYLON.Animation");
|
|
u && o.animations.push(u.Parse(l))
|
|
}
|
|
s.a.ParseAnimationRanges(o, e, i)
|
|
}
|
|
return e.autoAnimate && i.beginAnimation(o, e.autoAnimateFrom, e.autoAnimateTo, e.autoAnimateLoop, e.autoAnimateSpeed || 1), o
|
|
}, t.prototype._hookArrayForExcluded = function(e) {
|
|
var t = this,
|
|
i = e.push;
|
|
e.push = function() {
|
|
for (var n = [], r = 0; r < arguments.length; r++) n[r] = arguments[r];
|
|
for (var o = i.apply(e, n), s = 0, a = n; s < a.length; s++) {
|
|
a[s]._resyncLighSource(t)
|
|
}
|
|
return o
|
|
};
|
|
var n = e.splice;
|
|
e.splice = function(i, r) {
|
|
for (var o = n.apply(e, [i, r]), s = 0, a = o; s < a.length; s++) {
|
|
a[s]._resyncLighSource(t)
|
|
}
|
|
return o
|
|
};
|
|
for (var r = 0, o = e; r < o.length; r++) {
|
|
o[r]._resyncLighSource(this)
|
|
}
|
|
}, t.prototype._hookArrayForIncludedOnly = function(e) {
|
|
var t = this,
|
|
i = e.push;
|
|
e.push = function() {
|
|
for (var n = [], r = 0; r < arguments.length; r++) n[r] = arguments[r];
|
|
var o = i.apply(e, n);
|
|
return t._resyncMeshes(), o
|
|
};
|
|
var n = e.splice;
|
|
e.splice = function(i, r) {
|
|
var o = n.apply(e, [i, r]);
|
|
return t._resyncMeshes(), o
|
|
}, this._resyncMeshes()
|
|
}, t.prototype._resyncMeshes = function() {
|
|
for (var e = 0, t = this.getScene().meshes; e < t.length; e++) {
|
|
t[e]._resyncLighSource(this)
|
|
}
|
|
}, t.prototype._markMeshesAsLightDirty = function() {
|
|
for (var e = 0, t = this.getScene().meshes; e < t.length; e++) {
|
|
var i = t[e]; - 1 !== i.lightSources.indexOf(this) && i._markSubMeshesAsLightDirty()
|
|
}
|
|
}, t.prototype._computePhotometricScale = function() {
|
|
this._photometricScale = this._getPhotometricScale(), this.getScene().resetCachedMaterial()
|
|
}, t.prototype._getPhotometricScale = function() {
|
|
var e = 0,
|
|
i = this.getTypeID(),
|
|
n = this.intensityMode;
|
|
switch (n === t.INTENSITYMODE_AUTOMATIC && (n = i === t.LIGHTTYPEID_DIRECTIONALLIGHT ? t.INTENSITYMODE_ILLUMINANCE : t.INTENSITYMODE_LUMINOUSINTENSITY), i) {
|
|
case t.LIGHTTYPEID_POINTLIGHT:
|
|
case t.LIGHTTYPEID_SPOTLIGHT:
|
|
switch (n) {
|
|
case t.INTENSITYMODE_LUMINOUSPOWER:
|
|
e = 1 / (4 * Math.PI);
|
|
break;
|
|
case t.INTENSITYMODE_LUMINOUSINTENSITY:
|
|
e = 1;
|
|
break;
|
|
case t.INTENSITYMODE_LUMINANCE:
|
|
e = this.radius * this.radius
|
|
}
|
|
break;
|
|
case t.LIGHTTYPEID_DIRECTIONALLIGHT:
|
|
switch (n) {
|
|
case t.INTENSITYMODE_ILLUMINANCE:
|
|
e = 1;
|
|
break;
|
|
case t.INTENSITYMODE_LUMINANCE:
|
|
var r = this.radius;
|
|
r = Math.max(r, .001), e = 2 * Math.PI * (1 - Math.cos(r))
|
|
}
|
|
break;
|
|
case t.LIGHTTYPEID_HEMISPHERICLIGHT:
|
|
e = 1
|
|
}
|
|
return e
|
|
}, t.prototype._reorderLightsInScene = function() {
|
|
var e = this.getScene();
|
|
0 != this._renderPriority && (e.requireLightSorting = !0), this.getScene().sortLightsByPriority()
|
|
}, t.FALLOFF_DEFAULT = 0, t.FALLOFF_PHYSICAL = 1, t.FALLOFF_GLTF = 2, t.FALLOFF_STANDARD = 3, t.LIGHTMAP_DEFAULT = 0, t.LIGHTMAP_SPECULAR = 1, t.LIGHTMAP_SHADOWSONLY = 2, t.INTENSITYMODE_AUTOMATIC = 0, t.INTENSITYMODE_LUMINOUSPOWER = 1, t.INTENSITYMODE_LUMINOUSINTENSITY = 2, t.INTENSITYMODE_ILLUMINANCE = 3, t.INTENSITYMODE_LUMINANCE = 4, t.LIGHTTYPEID_POINTLIGHT = 0, t.LIGHTTYPEID_DIRECTIONALLIGHT = 1, t.LIGHTTYPEID_SPOTLIGHT = 2, t.LIGHTTYPEID_HEMISPHERICLIGHT = 3, n.c([Object(r.e)()], t.prototype, "diffuse", void 0), n.c([Object(r.e)()], t.prototype, "specular", void 0), n.c([Object(r.c)()], t.prototype, "falloffType", void 0), n.c([Object(r.c)()], t.prototype, "intensity", void 0), n.c([Object(r.c)()], t.prototype, "range", null), n.c([Object(r.c)()], t.prototype, "intensityMode", null), n.c([Object(r.c)()], t.prototype, "radius", null), n.c([Object(r.c)()], t.prototype, "_renderPriority", void 0), n.c([Object(r.b)("_reorderLightsInScene")], t.prototype, "renderPriority", void 0), n.c([Object(r.c)("shadowEnabled")], t.prototype, "_shadowEnabled", void 0), n.c([Object(r.c)("excludeWithLayerMask")], t.prototype, "_excludeWithLayerMask", void 0), n.c([Object(r.c)("includeOnlyWithLayerMask")], t.prototype, "_includeOnlyWithLayerMask", void 0), n.c([Object(r.c)("lightmapMode")], t.prototype, "_lightmapMode", void 0), t
|
|
}(s.a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return l
|
|
});
|
|
var n = i(34),
|
|
r = i(0),
|
|
o = i(50),
|
|
s = i(81),
|
|
a = i(16),
|
|
c = i(21),
|
|
l = function() {
|
|
function e(e, t, i) {
|
|
void 0 === i && (i = Number.MAX_VALUE), this.origin = e, this.direction = t, this.length = i
|
|
}
|
|
return e.prototype.intersectsBoxMinMax = function(t, i, n) {
|
|
void 0 === n && (n = 0);
|
|
var r, o, s, a, c = e.TmpVector3[0].copyFromFloats(t.x - n, t.y - n, t.z - n),
|
|
l = e.TmpVector3[1].copyFromFloats(i.x + n, i.y + n, i.z + n),
|
|
u = 0,
|
|
h = Number.MAX_VALUE;
|
|
if (Math.abs(this.direction.x) < 1e-7) {
|
|
if (this.origin.x < c.x || this.origin.x > l.x) return !1
|
|
} else if (r = 1 / this.direction.x, o = (c.x - this.origin.x) * r, (s = (l.x - this.origin.x) * r) === -1 / 0 && (s = 1 / 0), o > s && (a = o, o = s, s = a), (u = Math.max(o, u)) > (h = Math.min(s, h))) return !1;
|
|
if (Math.abs(this.direction.y) < 1e-7) {
|
|
if (this.origin.y < c.y || this.origin.y > l.y) return !1
|
|
} else if (r = 1 / this.direction.y, o = (c.y - this.origin.y) * r, (s = (l.y - this.origin.y) * r) === -1 / 0 && (s = 1 / 0), o > s && (a = o, o = s, s = a), (u = Math.max(o, u)) > (h = Math.min(s, h))) return !1;
|
|
if (Math.abs(this.direction.z) < 1e-7) {
|
|
if (this.origin.z < c.z || this.origin.z > l.z) return !1
|
|
} else if (r = 1 / this.direction.z, o = (c.z - this.origin.z) * r, (s = (l.z - this.origin.z) * r) === -1 / 0 && (s = 1 / 0), o > s && (a = o, o = s, s = a), (u = Math.max(o, u)) > (h = Math.min(s, h))) return !1;
|
|
return !0
|
|
}, e.prototype.intersectsBox = function(e, t) {
|
|
return void 0 === t && (t = 0), this.intersectsBoxMinMax(e.minimum, e.maximum, t)
|
|
}, e.prototype.intersectsSphere = function(e, t) {
|
|
void 0 === t && (t = 0);
|
|
var i = e.center.x - this.origin.x,
|
|
n = e.center.y - this.origin.y,
|
|
r = e.center.z - this.origin.z,
|
|
o = i * i + n * n + r * r,
|
|
s = e.radius + t,
|
|
a = s * s;
|
|
if (o <= a) return !0;
|
|
var c = i * this.direction.x + n * this.direction.y + r * this.direction.z;
|
|
return !(c < 0) && o - c * c <= a
|
|
}, e.prototype.intersectsTriangle = function(t, i, n) {
|
|
var o = e.TmpVector3[0],
|
|
a = e.TmpVector3[1],
|
|
c = e.TmpVector3[2],
|
|
l = e.TmpVector3[3],
|
|
u = e.TmpVector3[4];
|
|
i.subtractToRef(t, o), n.subtractToRef(t, a), r.x.CrossToRef(this.direction, a, c);
|
|
var h = r.x.Dot(o, c);
|
|
if (0 === h) return null;
|
|
var d = 1 / h;
|
|
this.origin.subtractToRef(t, l);
|
|
var f = r.x.Dot(l, c) * d;
|
|
if (f < 0 || f > 1) return null;
|
|
r.x.CrossToRef(l, o, u);
|
|
var p = r.x.Dot(this.direction, u) * d;
|
|
if (p < 0 || f + p > 1) return null;
|
|
var _ = r.x.Dot(a, u) * d;
|
|
return _ > this.length ? null : new s.a(f, p, _)
|
|
}, e.prototype.intersectsPlane = function(e) {
|
|
var t, i = r.x.Dot(e.normal, this.direction);
|
|
if (Math.abs(i) < 9.99999997475243e-7) return null;
|
|
var n = r.x.Dot(e.normal, this.origin);
|
|
return (t = (-e.d - n) / i) < 0 ? t < -9.99999997475243e-7 ? null : 0 : t
|
|
}, e.prototype.intersectsMesh = function(t, i) {
|
|
var n = r.t.Matrix[0];
|
|
return t.getWorldMatrix().invertToRef(n), this._tmpRay ? e.TransformToRef(this, n, this._tmpRay) : this._tmpRay = e.Transform(this, n), t.intersects(this._tmpRay, i)
|
|
}, e.prototype.intersectsMeshes = function(e, t, i) {
|
|
i ? i.length = 0 : i = [];
|
|
for (var n = 0; n < e.length; n++) {
|
|
var r = this.intersectsMesh(e[n], t);
|
|
r.hit && i.push(r)
|
|
}
|
|
return i.sort(this._comparePickingInfo), i
|
|
}, e.prototype._comparePickingInfo = function(e, t) {
|
|
return e.distance < t.distance ? -1 : e.distance > t.distance ? 1 : 0
|
|
}, e.prototype.intersectionSegment = function(t, i, n) {
|
|
var o = this.origin,
|
|
s = r.t.Vector3[0],
|
|
a = r.t.Vector3[1],
|
|
c = r.t.Vector3[2],
|
|
l = r.t.Vector3[3];
|
|
i.subtractToRef(t, s), this.direction.scaleToRef(e.rayl, c), o.addToRef(c, a), t.subtractToRef(o, l);
|
|
var u, h, d, f, p = r.x.Dot(s, s),
|
|
_ = r.x.Dot(s, c),
|
|
g = r.x.Dot(c, c),
|
|
m = r.x.Dot(s, l),
|
|
v = r.x.Dot(c, l),
|
|
y = p * g - _ * _,
|
|
b = y,
|
|
T = y;
|
|
y < e.smallnum ? (h = 0, b = 1, f = v, T = g) : (f = p * v - _ * m, (h = _ * v - g * m) < 0 ? (h = 0, f = v, T = g) : h > b && (h = b, f = v + _, T = g)), f < 0 ? (f = 0, -m < 0 ? h = 0 : -m > p ? h = b : (h = -m, b = p)) : f > T && (f = T, -m + _ < 0 ? h = 0 : -m + _ > p ? h = b : (h = -m + _, b = p)), u = Math.abs(h) < e.smallnum ? 0 : h / b, d = Math.abs(f) < e.smallnum ? 0 : f / T;
|
|
var E = r.t.Vector3[4];
|
|
c.scaleToRef(d, E);
|
|
var A = r.t.Vector3[5];
|
|
s.scaleToRef(u, A), A.addInPlace(l);
|
|
var x = r.t.Vector3[6];
|
|
return A.subtractToRef(E, x), d > 0 && d <= this.length && x.lengthSquared() < n * n ? A.length() : -1
|
|
}, e.prototype.update = function(e, t, i, n, r, o, s) {
|
|
return this.unprojectRayToRef(e, t, i, n, r, o, s), this
|
|
}, e.Zero = function() {
|
|
return new e(r.x.Zero(), r.x.Zero())
|
|
}, e.CreateNew = function(t, i, n, r, o, s, a) {
|
|
return e.Zero().update(t, i, n, r, o, s, a)
|
|
}, e.CreateNewFromTo = function(t, i, n) {
|
|
void 0 === n && (n = r.j.IdentityReadOnly);
|
|
var o = i.subtract(t),
|
|
s = Math.sqrt(o.x * o.x + o.y * o.y + o.z * o.z);
|
|
return o.normalize(), e.Transform(new e(t, o, s), n)
|
|
}, e.Transform = function(t, i) {
|
|
var n = new e(new r.x(0, 0, 0), new r.x(0, 0, 0));
|
|
return e.TransformToRef(t, i, n), n
|
|
}, e.TransformToRef = function(e, t, i) {
|
|
r.x.TransformCoordinatesToRef(e.origin, t, i.origin), r.x.TransformNormalToRef(e.direction, t, i.direction), i.length = e.length;
|
|
var n = i.direction,
|
|
o = n.length();
|
|
if (0 !== o && 1 !== o) {
|
|
var s = 1 / o;
|
|
n.x *= s, n.y *= s, n.z *= s, i.length *= o
|
|
}
|
|
}, e.prototype.unprojectRayToRef = function(e, t, i, n, o, s, a) {
|
|
var c = r.t.Matrix[0];
|
|
o.multiplyToRef(s, c), c.multiplyToRef(a, c), c.invert();
|
|
var l = r.t.Vector3[0];
|
|
l.x = e / i * 2 - 1, l.y = -(t / n * 2 - 1), l.z = -1;
|
|
var u = r.t.Vector3[1].copyFromFloats(l.x, l.y, 1),
|
|
h = r.t.Vector3[2],
|
|
d = r.t.Vector3[3];
|
|
r.x._UnprojectFromInvertedMatrixToRef(l, c, h), r.x._UnprojectFromInvertedMatrixToRef(u, c, d), this.origin.copyFrom(h), d.subtractToRef(h, this.direction), this.direction.normalize()
|
|
}, e.TmpVector3 = n.a.BuildArray(6, r.x.Zero), e.smallnum = 1e-8, e.rayl = 1e9, e
|
|
}();
|
|
a.a.prototype.createPickingRay = function(e, t, i, n, r) {
|
|
void 0 === r && (r = !1);
|
|
var o = l.Zero();
|
|
return this.createPickingRayToRef(e, t, i, o, n, r), o
|
|
}, a.a.prototype.createPickingRayToRef = function(e, t, i, n, o, s) {
|
|
void 0 === s && (s = !1);
|
|
var a = this.getEngine();
|
|
if (!o) {
|
|
if (!this.activeCamera) throw new Error("Active camera not set");
|
|
o = this.activeCamera
|
|
}
|
|
var c = o.viewport.toGlobal(a.getRenderWidth(), a.getRenderHeight());
|
|
return e = e / a.getHardwareScalingLevel() - c.x, t = t / a.getHardwareScalingLevel() - (a.getRenderHeight() - c.y - c.height), n.update(e, t, c.width, c.height, i || r.j.IdentityReadOnly, s ? r.j.IdentityReadOnly : o.getViewMatrix(), o.getProjectionMatrix()), this
|
|
}, a.a.prototype.createPickingRayInCameraSpace = function(e, t, i) {
|
|
var n = l.Zero();
|
|
return this.createPickingRayInCameraSpaceToRef(e, t, n, i), n
|
|
}, a.a.prototype.createPickingRayInCameraSpaceToRef = function(e, t, i, n) {
|
|
if (!o.a) return this;
|
|
var s = this.getEngine();
|
|
if (!n) {
|
|
if (!this.activeCamera) throw new Error("Active camera not set");
|
|
n = this.activeCamera
|
|
}
|
|
var a = n.viewport.toGlobal(s.getRenderWidth(), s.getRenderHeight()),
|
|
c = r.j.Identity();
|
|
return e = e / s.getHardwareScalingLevel() - a.x, t = t / s.getHardwareScalingLevel() - (s.getRenderHeight() - a.y - a.height), i.update(e, t, a.width, a.height, c, c, n.getProjectionMatrix()), this
|
|
}, a.a.prototype._internalPick = function(e, t, i, n) {
|
|
if (!o.a) return null;
|
|
for (var r = null, s = 0; s < this.meshes.length; s++) {
|
|
var a = this.meshes[s];
|
|
if (t) {
|
|
if (!t(a)) continue
|
|
} else if (!a.isEnabled() || !a.isVisible || !a.isPickable) continue;
|
|
var c = e(a.getWorldMatrix()),
|
|
l = a.intersects(c, i, n);
|
|
if (l && l.hit && ((i || null == r || !(l.distance >= r.distance)) && (r = l, i))) break
|
|
}
|
|
return r || new o.a
|
|
}, a.a.prototype._internalMultiPick = function(e, t, i) {
|
|
if (!o.a) return null;
|
|
for (var n = new Array, r = 0; r < this.meshes.length; r++) {
|
|
var s = this.meshes[r];
|
|
if (t) {
|
|
if (!t(s)) continue
|
|
} else if (!s.isEnabled() || !s.isVisible || !s.isPickable) continue;
|
|
var a = e(s.getWorldMatrix()),
|
|
c = s.intersects(a, !1, i);
|
|
c && c.hit && n.push(c)
|
|
}
|
|
return n
|
|
}, a.a.prototype.pick = function(e, t, i, n, s, a) {
|
|
var c = this;
|
|
if (!o.a) return null;
|
|
var u = this._internalPick(function(i) {
|
|
return c._tempPickingRay || (c._tempPickingRay = l.Zero()), c.createPickingRayToRef(e, t, i, c._tempPickingRay, s || null), c._tempPickingRay
|
|
}, i, n, a);
|
|
return u && (u.ray = this.createPickingRay(e, t, r.j.Identity(), s || null)), u
|
|
}, a.a.prototype.pickWithRay = function(e, t, i, n) {
|
|
var o = this,
|
|
s = this._internalPick(function(t) {
|
|
return o._pickWithRayInverseMatrix || (o._pickWithRayInverseMatrix = r.j.Identity()), t.invertToRef(o._pickWithRayInverseMatrix), o._cachedRayForTransform || (o._cachedRayForTransform = l.Zero()), l.TransformToRef(e, o._pickWithRayInverseMatrix, o._cachedRayForTransform), o._cachedRayForTransform
|
|
}, t, i, n);
|
|
return s && (s.ray = e), s
|
|
}, a.a.prototype.multiPick = function(e, t, i, n, r) {
|
|
var o = this;
|
|
return this._internalMultiPick(function(i) {
|
|
return o.createPickingRay(e, t, i, n || null)
|
|
}, i, r)
|
|
}, a.a.prototype.multiPickWithRay = function(e, t, i) {
|
|
var n = this;
|
|
return this._internalMultiPick(function(t) {
|
|
return n._pickWithRayInverseMatrix || (n._pickWithRayInverseMatrix = r.j.Identity()), t.invertToRef(n._pickWithRayInverseMatrix), n._cachedRayForTransform || (n._cachedRayForTransform = l.Zero()), l.TransformToRef(e, n._pickWithRayInverseMatrix, n._cachedRayForTransform), n._cachedRayForTransform
|
|
}, t, i)
|
|
}, c.a.prototype.getForwardRay = function(e, t, i) {
|
|
void 0 === e && (e = 100), t || (t = this.getWorldMatrix()), i || (i = this.position);
|
|
var n = this._scene.useRightHandedSystem ? new r.x(0, 0, -1) : new r.x(0, 0, 1),
|
|
o = r.x.TransformNormal(n, t),
|
|
s = r.x.Normalize(o);
|
|
return new l(i, s, e)
|
|
}
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return c
|
|
});
|
|
var n = i(0),
|
|
r = i(11),
|
|
o = i(13),
|
|
s = i(72),
|
|
a = i(4);
|
|
o.a.CreateLineSystem = function(e) {
|
|
for (var t = [], i = [], n = e.lines, r = e.colors, s = [], a = 0, c = 0; c < n.length; c++)
|
|
for (var l = n[c], u = 0; u < l.length; u++) {
|
|
if (i.push(l[u].x, l[u].y, l[u].z), r) {
|
|
var h = r[c];
|
|
s.push(h[u].r, h[u].g, h[u].b, h[u].a)
|
|
}
|
|
u > 0 && (t.push(a - 1), t.push(a)), a++
|
|
}
|
|
var d = new o.a;
|
|
return d.indices = t, d.positions = i, r && (d.colors = s), d
|
|
}, o.a.CreateDashedLines = function(e) {
|
|
var t, i, r = e.dashSize || 3,
|
|
s = e.gapSize || 1,
|
|
a = e.dashNb || 200,
|
|
c = e.points,
|
|
l = new Array,
|
|
u = new Array,
|
|
h = n.x.Zero(),
|
|
d = 0,
|
|
f = 0,
|
|
p = 0,
|
|
_ = 0,
|
|
g = 0;
|
|
for (g = 0; g < c.length - 1; g++) c[g + 1].subtractToRef(c[g], h), d += h.length();
|
|
for (i = r * (t = d / a) / (r + s), g = 0; g < c.length - 1; g++) {
|
|
c[g + 1].subtractToRef(c[g], h), f = Math.floor(h.length() / t), h.normalize();
|
|
for (var m = 0; m < f; m++) p = t * m, l.push(c[g].x + p * h.x, c[g].y + p * h.y, c[g].z + p * h.z), l.push(c[g].x + (p + i) * h.x, c[g].y + (p + i) * h.y, c[g].z + (p + i) * h.z), u.push(_, _ + 1), _ += 2
|
|
}
|
|
var v = new o.a;
|
|
return v.positions = l, v.indices = u, v
|
|
}, r.a.CreateLines = function(e, t, i, n, r) {
|
|
void 0 === i && (i = null), void 0 === n && (n = !1), void 0 === r && (r = null);
|
|
var o = {
|
|
points: t,
|
|
updatable: n,
|
|
instance: r
|
|
};
|
|
return c.CreateLines(e, o, i)
|
|
}, r.a.CreateDashedLines = function(e, t, i, n, r, o, s, a) {
|
|
void 0 === o && (o = null);
|
|
var l = {
|
|
points: t,
|
|
dashSize: i,
|
|
gapSize: n,
|
|
dashNb: r,
|
|
updatable: s,
|
|
instance: a
|
|
};
|
|
return c.CreateDashedLines(e, l, o)
|
|
};
|
|
var c = function() {
|
|
function e() {}
|
|
return e.CreateLineSystem = function(e, t, i) {
|
|
var n = t.instance,
|
|
r = t.lines,
|
|
c = t.colors;
|
|
if (n) {
|
|
var l, u, h = n.getVerticesData(a.b.PositionKind);
|
|
c && (l = n.getVerticesData(a.b.ColorKind));
|
|
for (var d = 0, f = 0, p = 0; p < r.length; p++)
|
|
for (var _ = r[p], g = 0; g < _.length; g++) h[d] = _[g].x, h[d + 1] = _[g].y, h[d + 2] = _[g].z, c && l && (u = c[p], l[f] = u[g].r, l[f + 1] = u[g].g, l[f + 2] = u[g].b, l[f + 3] = u[g].a, f += 4), d += 3;
|
|
return n.updateVerticesData(a.b.PositionKind, h, !1, !1), c && l && n.updateVerticesData(a.b.ColorKind, l, !1, !1), n
|
|
}
|
|
var m = !!c,
|
|
v = new s.b(e, i, null, void 0, void 0, m, t.useVertexAlpha);
|
|
return o.a.CreateLineSystem(t).applyToMesh(v, t.updatable), v
|
|
}, e.CreateLines = function(t, i, n) {
|
|
void 0 === n && (n = null);
|
|
var r = i.colors ? [i.colors] : null;
|
|
return e.CreateLineSystem(t, {
|
|
lines: [i.points],
|
|
updatable: i.updatable,
|
|
instance: i.instance,
|
|
colors: r,
|
|
useVertexAlpha: i.useVertexAlpha
|
|
}, n)
|
|
}, e.CreateDashedLines = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var a = t.points,
|
|
c = t.instance,
|
|
l = t.gapSize || 1,
|
|
u = t.dashSize || 3;
|
|
if (c) {
|
|
return c.updateMeshPositions(function(e) {
|
|
var t, i, r = n.x.Zero(),
|
|
o = e.length / 6,
|
|
s = 0,
|
|
l = 0,
|
|
u = 0,
|
|
h = 0,
|
|
d = 0,
|
|
f = 0;
|
|
for (d = 0; d < a.length - 1; d++) a[d + 1].subtractToRef(a[d], r), s += r.length();
|
|
t = s / o;
|
|
var p = c._creationDataStorage.dashSize;
|
|
for (i = p * t / (p + c._creationDataStorage.gapSize), d = 0; d < a.length - 1; d++)
|
|
for (a[d + 1].subtractToRef(a[d], r), l = Math.floor(r.length() / t), r.normalize(), f = 0; f < l && h < e.length;) u = t * f, e[h] = a[d].x + u * r.x, e[h + 1] = a[d].y + u * r.y, e[h + 2] = a[d].z + u * r.z, e[h + 3] = a[d].x + (u + i) * r.x, e[h + 4] = a[d].y + (u + i) * r.y, e[h + 5] = a[d].z + (u + i) * r.z, h += 6, f++;
|
|
for (; h < e.length;) e[h] = a[d].x, e[h + 1] = a[d].y, e[h + 2] = a[d].z, h += 3
|
|
}, !1), c
|
|
}
|
|
var h = new s.b(e, i);
|
|
return o.a.CreateDashedLines(t).applyToMesh(h, t.updatable), h._creationDataStorage = new r.b, h._creationDataStorage.dashSize = u, h._creationDataStorage.gapSize = l, h
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return l
|
|
});
|
|
var n = i(16),
|
|
r = i(8),
|
|
o = i(17),
|
|
s = i(23),
|
|
a = i(65),
|
|
c = i(0),
|
|
l = function() {
|
|
function e(e, t) {
|
|
var i = this;
|
|
void 0 === t && (t = !0), this.originalScene = e, this._pointerCaptures = {}, this._lastPointerEvents = {}, this._sharedGizmoLight = null, this.pickUtilitySceneFirst = !0, this.shouldRender = !0, this.onlyCheckPointerDownEvents = !0, this.processAllEvents = !1, this.onPointerOutObservable = new r.c, this.utilityLayerScene = new n.a(e.getEngine(), {
|
|
virtual: !0
|
|
}), this.utilityLayerScene.useRightHandedSystem = e.useRightHandedSystem, this.utilityLayerScene._allowPostProcessClearColor = !1, this.utilityLayerScene.detachControl(), t && (this._originalPointerObserver = e.onPrePointerObservable.add(function(t, n) {
|
|
if (i.utilityLayerScene.activeCamera && (i.processAllEvents || t.type === o.a.POINTERMOVE || t.type === o.a.POINTERUP || t.type === o.a.POINTERDOWN)) {
|
|
i.utilityLayerScene.pointerX = e.pointerX, i.utilityLayerScene.pointerY = e.pointerY;
|
|
var r = t.event;
|
|
if (e.isPointerCaptured(r.pointerId)) i._pointerCaptures[r.pointerId] = !1;
|
|
else {
|
|
var s = t.ray ? i.utilityLayerScene.pickWithRay(t.ray) : i.utilityLayerScene.pick(e.pointerX, e.pointerY);
|
|
if (!t.ray && s && (t.ray = s.ray), i.utilityLayerScene.onPrePointerObservable.notifyObservers(t), i.onlyCheckPointerDownEvents && t.type != o.a.POINTERDOWN) return t.skipOnPointerObservable || i.utilityLayerScene.onPointerObservable.notifyObservers(new o.b(t.type, t.event, s)), void(t.type === o.a.POINTERUP && i._pointerCaptures[r.pointerId] && (i._pointerCaptures[r.pointerId] = !1));
|
|
if (i.utilityLayerScene.autoClearDepthAndStencil || i.pickUtilitySceneFirst) s && s.hit && (t.skipOnPointerObservable || i.utilityLayerScene.onPointerObservable.notifyObservers(new o.b(t.type, t.event, s)), t.skipOnPointerObservable = !0);
|
|
else {
|
|
var a = t.ray ? e.pickWithRay(t.ray) : e.pick(e.pointerX, e.pointerY),
|
|
c = t.event;
|
|
a && s && (0 === s.distance && a.pickedMesh ? i.mainSceneTrackerPredicate && i.mainSceneTrackerPredicate(a.pickedMesh) ? (i._notifyObservers(t, a, c), t.skipOnPointerObservable = !0) : t.type === o.a.POINTERDOWN ? i._pointerCaptures[c.pointerId] = !0 : i._lastPointerEvents[c.pointerId] && (i.onPointerOutObservable.notifyObservers(c.pointerId), delete i._lastPointerEvents[c.pointerId]) : !i._pointerCaptures[c.pointerId] && (s.distance < a.distance || 0 === a.distance) ? (i._notifyObservers(t, s, c), t.skipOnPointerObservable || (t.skipOnPointerObservable = s.distance > 0)) : !i._pointerCaptures[c.pointerId] && s.distance > a.distance && (i.mainSceneTrackerPredicate && i.mainSceneTrackerPredicate(a.pickedMesh) ? (i._notifyObservers(t, a, c), t.skipOnPointerObservable = !0) : i._lastPointerEvents[c.pointerId] && (i.onPointerOutObservable.notifyObservers(c.pointerId), delete i._lastPointerEvents[c.pointerId])), t.type === o.a.POINTERUP && i._pointerCaptures[c.pointerId] && (i._pointerCaptures[c.pointerId] = !1))
|
|
}
|
|
}
|
|
}
|
|
}), this._originalPointerObserver && e.onPrePointerObservable.makeObserverTopPriority(this._originalPointerObserver)), this.utilityLayerScene.autoClear = !1, this._afterRenderObserver = this.originalScene.onAfterRenderObservable.add(function() {
|
|
i.shouldRender && i.render()
|
|
}), this._sceneDisposeObserver = this.originalScene.onDisposeObservable.add(function() {
|
|
i.dispose()
|
|
}), this._updateCamera()
|
|
}
|
|
return e.prototype._getSharedGizmoLight = function() {
|
|
return this._sharedGizmoLight || (this._sharedGizmoLight = new a.a("shared gizmo light", new c.x(0, 1, 0), this.utilityLayerScene), this._sharedGizmoLight.intensity = 2, this._sharedGizmoLight.groundColor = c.e.Gray()), this._sharedGizmoLight
|
|
}, Object.defineProperty(e, "DefaultUtilityLayer", {
|
|
get: function() {
|
|
return null == e._DefaultUtilityLayer && (e._DefaultUtilityLayer = new e(s.a.LastCreatedScene), e._DefaultUtilityLayer.originalScene.onDisposeObservable.addOnce(function() {
|
|
e._DefaultUtilityLayer = null
|
|
})), e._DefaultUtilityLayer
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "DefaultKeepDepthUtilityLayer", {
|
|
get: function() {
|
|
return null == e._DefaultKeepDepthUtilityLayer && (e._DefaultKeepDepthUtilityLayer = new e(s.a.LastCreatedScene), e._DefaultKeepDepthUtilityLayer.utilityLayerScene.autoClearDepthAndStencil = !1, e._DefaultKeepDepthUtilityLayer.originalScene.onDisposeObservable.addOnce(function() {
|
|
e._DefaultKeepDepthUtilityLayer = null
|
|
})), e._DefaultKeepDepthUtilityLayer
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._notifyObservers = function(e, t, i) {
|
|
e.skipOnPointerObservable || (this.utilityLayerScene.onPointerObservable.notifyObservers(new o.b(e.type, e.event, t)), this._lastPointerEvents[i.pointerId] = !0)
|
|
}, e.prototype.render = function() {
|
|
if (this._updateCamera(), this.utilityLayerScene.activeCamera) {
|
|
var e = this.utilityLayerScene.activeCamera.getScene(),
|
|
t = this.utilityLayerScene.activeCamera;
|
|
t._scene = this.utilityLayerScene, t.leftCamera && (t.leftCamera._scene = this.utilityLayerScene), t.rightCamera && (t.rightCamera._scene = this.utilityLayerScene), this.utilityLayerScene.render(!1), t._scene = e, t.leftCamera && (t.leftCamera._scene = e), t.rightCamera && (t.rightCamera._scene = e)
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
this.onPointerOutObservable.clear(), this._afterRenderObserver && this.originalScene.onAfterRenderObservable.remove(this._afterRenderObserver), this._sceneDisposeObserver && this.originalScene.onDisposeObservable.remove(this._sceneDisposeObserver), this._originalPointerObserver && this.originalScene.onPrePointerObservable.remove(this._originalPointerObserver), this.utilityLayerScene.dispose()
|
|
}, e.prototype._updateCamera = function() {
|
|
this.originalScene.activeCameras.length > 1 ? this.utilityLayerScene.activeCamera = this.originalScene.activeCameras[this.originalScene.activeCameras.length - 1] : this.utilityLayerScene.activeCamera = this.originalScene.activeCamera
|
|
}, e._DefaultUtilityLayer = null, e._DefaultKeepDepthUtilityLayer = null, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return a
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(8),
|
|
s = i(0),
|
|
a = function(e) {
|
|
function t(i, n, r) {
|
|
void 0 === n && (n = null), void 0 === r && (r = !0);
|
|
var a = e.call(this, i, n) || this;
|
|
return a._forward = new s.x(0, 0, 1), a._forwardInverted = new s.x(0, 0, -1), a._up = new s.x(0, 1, 0), a._right = new s.x(1, 0, 0), a._rightInverted = new s.x(-1, 0, 0), a._position = s.x.Zero(), a._rotation = s.x.Zero(), a._rotationQuaternion = null, a._scaling = s.x.One(), a._isDirty = !1, a._transformToBoneReferal = null, a._billboardMode = t.BILLBOARDMODE_NONE, a._preserveParentRotationForBillboard = !1, a.scalingDeterminant = 1, a._infiniteDistance = !1, a.ignoreNonUniformScaling = !1, a.reIntegrateRotationIntoRotationQuaternion = !1, a._poseMatrix = null, a._localMatrix = s.j.Zero(), a._usePivotMatrix = !1, a._absolutePosition = s.x.Zero(), a._pivotMatrix = s.j.Identity(), a._postMultiplyPivotMatrix = !1, a._isWorldMatrixFrozen = !1, a._indexInSceneTransformNodesArray = -1, a.onAfterWorldMatrixUpdateObservable = new o.c, a._nonUniformScaling = !1, r && a.getScene().addTransformNode(a), a
|
|
}
|
|
return n.d(t, e), Object.defineProperty(t.prototype, "billboardMode", {
|
|
get: function() {
|
|
return this._billboardMode
|
|
},
|
|
set: function(e) {
|
|
this._billboardMode !== e && (this._billboardMode = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "preserveParentRotationForBillboard", {
|
|
get: function() {
|
|
return this._preserveParentRotationForBillboard
|
|
},
|
|
set: function(e) {
|
|
e !== this._preserveParentRotationForBillboard && (this._preserveParentRotationForBillboard = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "infiniteDistance", {
|
|
get: function() {
|
|
return this._infiniteDistance
|
|
},
|
|
set: function(e) {
|
|
this._infiniteDistance !== e && (this._infiniteDistance = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "TransformNode"
|
|
}, Object.defineProperty(t.prototype, "position", {
|
|
get: function() {
|
|
return this._position
|
|
},
|
|
set: function(e) {
|
|
this._position = e, this._isDirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rotation", {
|
|
get: function() {
|
|
return this._rotation
|
|
},
|
|
set: function(e) {
|
|
this._rotation = e, this._rotationQuaternion = null, this._isDirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "scaling", {
|
|
get: function() {
|
|
return this._scaling
|
|
},
|
|
set: function(e) {
|
|
this._scaling = e, this._isDirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rotationQuaternion", {
|
|
get: function() {
|
|
return this._rotationQuaternion
|
|
},
|
|
set: function(e) {
|
|
this._rotationQuaternion = e, e && this._rotation.setAll(0), this._isDirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "forward", {
|
|
get: function() {
|
|
return s.x.Normalize(s.x.TransformNormal(this.getScene().useRightHandedSystem ? this._forwardInverted : this._forward, this.getWorldMatrix()))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "up", {
|
|
get: function() {
|
|
return s.x.Normalize(s.x.TransformNormal(this._up, this.getWorldMatrix()))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "right", {
|
|
get: function() {
|
|
return s.x.Normalize(s.x.TransformNormal(this.getScene().useRightHandedSystem ? this._rightInverted : this._right, this.getWorldMatrix()))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.updatePoseMatrix = function(e) {
|
|
return this._poseMatrix ? (this._poseMatrix.copyFrom(e), this) : (this._poseMatrix = e.clone(), this)
|
|
}, t.prototype.getPoseMatrix = function() {
|
|
return this._poseMatrix || (this._poseMatrix = s.j.Identity()), this._poseMatrix
|
|
}, t.prototype._isSynchronized = function() {
|
|
var e = this._cache;
|
|
if (this.billboardMode !== e.billboardMode || this.billboardMode !== t.BILLBOARDMODE_NONE) return !1;
|
|
if (e.pivotMatrixUpdated) return !1;
|
|
if (this.infiniteDistance) return !1;
|
|
if (!e.position.equals(this._position)) return !1;
|
|
if (this._rotationQuaternion) {
|
|
if (!e.rotationQuaternion.equals(this._rotationQuaternion)) return !1
|
|
} else if (!e.rotation.equals(this._rotation)) return !1;
|
|
return !!e.scaling.equals(this._scaling)
|
|
}, t.prototype._initCache = function() {
|
|
e.prototype._initCache.call(this);
|
|
var t = this._cache;
|
|
t.localMatrixUpdated = !1, t.position = s.x.Zero(), t.scaling = s.x.Zero(), t.rotation = s.x.Zero(), t.rotationQuaternion = new s.q(0, 0, 0, 0), t.billboardMode = -1, t.infiniteDistance = !1
|
|
}, t.prototype.markAsDirty = function(e) {
|
|
return this._currentRenderId = Number.MAX_VALUE, this._isDirty = !0, this
|
|
}, Object.defineProperty(t.prototype, "absolutePosition", {
|
|
get: function() {
|
|
return this._absolutePosition
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.setPreTransformMatrix = function(e) {
|
|
return this.setPivotMatrix(e, !1)
|
|
}, t.prototype.setPivotMatrix = function(e, t) {
|
|
return void 0 === t && (t = !0), this._pivotMatrix.copyFrom(e), this._usePivotMatrix = !this._pivotMatrix.isIdentity(), this._cache.pivotMatrixUpdated = !0, this._postMultiplyPivotMatrix = t, this._postMultiplyPivotMatrix && (this._pivotMatrixInverse ? this._pivotMatrix.invertToRef(this._pivotMatrixInverse) : this._pivotMatrixInverse = s.j.Invert(this._pivotMatrix)), this
|
|
}, t.prototype.getPivotMatrix = function() {
|
|
return this._pivotMatrix
|
|
}, t.prototype.freezeWorldMatrix = function() {
|
|
return this._isWorldMatrixFrozen = !1, this.computeWorldMatrix(!0), this._isWorldMatrixFrozen = !0, this
|
|
}, t.prototype.unfreezeWorldMatrix = function() {
|
|
return this._isWorldMatrixFrozen = !1, this.computeWorldMatrix(!0), this
|
|
}, Object.defineProperty(t.prototype, "isWorldMatrixFrozen", {
|
|
get: function() {
|
|
return this._isWorldMatrixFrozen
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getAbsolutePosition = function() {
|
|
return this.computeWorldMatrix(), this._absolutePosition
|
|
}, t.prototype.setAbsolutePosition = function(e) {
|
|
if (!e) return this;
|
|
var t, i, n;
|
|
if (void 0 === e.x) {
|
|
if (arguments.length < 3) return this;
|
|
t = arguments[0], i = arguments[1], n = arguments[2]
|
|
} else t = e.x, i = e.y, n = e.z;
|
|
if (this.parent) {
|
|
var r = s.t.Matrix[0];
|
|
this.parent.getWorldMatrix().invertToRef(r), s.x.TransformCoordinatesFromFloatsToRef(t, i, n, r, this.position)
|
|
} else this.position.x = t, this.position.y = i, this.position.z = n;
|
|
return this
|
|
}, t.prototype.setPositionWithLocalVector = function(e) {
|
|
return this.computeWorldMatrix(), this.position = s.x.TransformNormal(e, this._localMatrix), this
|
|
}, t.prototype.getPositionExpressedInLocalSpace = function() {
|
|
this.computeWorldMatrix();
|
|
var e = s.t.Matrix[0];
|
|
return this._localMatrix.invertToRef(e), s.x.TransformNormal(this.position, e)
|
|
}, t.prototype.locallyTranslate = function(e) {
|
|
return this.computeWorldMatrix(!0), this.position = s.x.TransformCoordinates(e, this._localMatrix), this
|
|
}, t.prototype.lookAt = function(e, i, n, r, o) {
|
|
void 0 === i && (i = 0), void 0 === n && (n = 0), void 0 === r && (r = 0), void 0 === o && (o = s.s.LOCAL);
|
|
var a = t._lookAtVectorCache,
|
|
c = o === s.s.LOCAL ? this.position : this.getAbsolutePosition();
|
|
if (e.subtractToRef(c, a), this.setDirection(a, i, n, r), o === s.s.WORLD && this.parent)
|
|
if (this.rotationQuaternion) {
|
|
var l = s.t.Matrix[0];
|
|
this.rotationQuaternion.toRotationMatrix(l);
|
|
var u = s.t.Matrix[1];
|
|
this.parent.getWorldMatrix().getRotationMatrixToRef(u), u.invert(), l.multiplyToRef(u, l), this.rotationQuaternion.fromRotationMatrix(l)
|
|
} else {
|
|
var h = s.t.Quaternion[0];
|
|
s.q.FromEulerVectorToRef(this.rotation, h);
|
|
l = s.t.Matrix[0];
|
|
h.toRotationMatrix(l);
|
|
u = s.t.Matrix[1];
|
|
this.parent.getWorldMatrix().getRotationMatrixToRef(u), u.invert(), l.multiplyToRef(u, l), h.fromRotationMatrix(l), h.toEulerAnglesToRef(this.rotation)
|
|
} return this
|
|
}, t.prototype.getDirection = function(e) {
|
|
var t = s.x.Zero();
|
|
return this.getDirectionToRef(e, t), t
|
|
}, t.prototype.getDirectionToRef = function(e, t) {
|
|
return s.x.TransformNormalToRef(e, this.getWorldMatrix(), t), this
|
|
}, t.prototype.setDirection = function(e, t, i, n) {
|
|
void 0 === t && (t = 0), void 0 === i && (i = 0), void 0 === n && (n = 0);
|
|
var r = -Math.atan2(e.z, e.x) + Math.PI / 2,
|
|
o = Math.sqrt(e.x * e.x + e.z * e.z),
|
|
a = -Math.atan2(e.y, o);
|
|
return this.rotationQuaternion ? s.q.RotationYawPitchRollToRef(r + t, a + i, n, this.rotationQuaternion) : (this.rotation.x = a + i, this.rotation.y = r + t, this.rotation.z = n), this
|
|
}, t.prototype.setPivotPoint = function(e, t) {
|
|
void 0 === t && (t = s.s.LOCAL), 0 == this.getScene().getRenderId() && this.computeWorldMatrix(!0);
|
|
var i = this.getWorldMatrix();
|
|
if (t == s.s.WORLD) {
|
|
var n = s.t.Matrix[0];
|
|
i.invertToRef(n), e = s.x.TransformCoordinates(e, n)
|
|
}
|
|
return this.setPivotMatrix(s.j.Translation(-e.x, -e.y, -e.z), !0)
|
|
}, t.prototype.getPivotPoint = function() {
|
|
var e = s.x.Zero();
|
|
return this.getPivotPointToRef(e), e
|
|
}, t.prototype.getPivotPointToRef = function(e) {
|
|
return e.x = -this._pivotMatrix.m[12], e.y = -this._pivotMatrix.m[13], e.z = -this._pivotMatrix.m[14], this
|
|
}, t.prototype.getAbsolutePivotPoint = function() {
|
|
var e = s.x.Zero();
|
|
return this.getAbsolutePivotPointToRef(e), e
|
|
}, t.prototype.getAbsolutePivotPointToRef = function(e) {
|
|
return e.x = this._pivotMatrix.m[12], e.y = this._pivotMatrix.m[13], e.z = this._pivotMatrix.m[14], this.getPivotPointToRef(e), s.x.TransformCoordinatesToRef(e, this.getWorldMatrix(), e), this
|
|
}, t.prototype.setParent = function(e) {
|
|
if (!e && !this.parent) return this;
|
|
var t = s.t.Quaternion[0],
|
|
i = s.t.Vector3[0],
|
|
n = s.t.Vector3[1];
|
|
if (e) {
|
|
var r = s.t.Matrix[0],
|
|
o = s.t.Matrix[1];
|
|
this.computeWorldMatrix(!0), e.computeWorldMatrix(!0), e.getWorldMatrix().invertToRef(o), this.getWorldMatrix().multiplyToRef(o, r), r.decompose(n, t, i)
|
|
} else this.parent && this.parent.computeWorldMatrix && this.parent.computeWorldMatrix(!0), this.computeWorldMatrix(!0), this.getWorldMatrix().decompose(n, t, i);
|
|
return this.rotationQuaternion ? this.rotationQuaternion.copyFrom(t) : t.toEulerAnglesToRef(this.rotation), this.scaling.copyFrom(n), this.position.copyFrom(i), this.parent = e, this
|
|
}, Object.defineProperty(t.prototype, "nonUniformScaling", {
|
|
get: function() {
|
|
return this._nonUniformScaling
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._updateNonUniformScalingState = function(e) {
|
|
return this._nonUniformScaling !== e && (this._nonUniformScaling = e, !0)
|
|
}, t.prototype.attachToBone = function(e, t) {
|
|
return this._transformToBoneReferal = t, this.parent = e, e.getWorldMatrix().determinant() < 0 && (this.scalingDeterminant *= -1), this
|
|
}, t.prototype.detachFromBone = function() {
|
|
return this.parent ? (this.parent.getWorldMatrix().determinant() < 0 && (this.scalingDeterminant *= -1), this._transformToBoneReferal = null, this.parent = null, this) : this
|
|
}, t.prototype.rotate = function(e, i, n) {
|
|
var r;
|
|
if (e.normalize(), this.rotationQuaternion || (this.rotationQuaternion = this.rotation.toQuaternion(), this.rotation.setAll(0)), n && n !== s.s.LOCAL) {
|
|
if (this.parent) {
|
|
var o = s.t.Matrix[0];
|
|
this.parent.getWorldMatrix().invertToRef(o), e = s.x.TransformNormal(e, o)
|
|
}(r = s.q.RotationAxisToRef(e, i, t._rotationAxisCache)).multiplyToRef(this.rotationQuaternion, this.rotationQuaternion)
|
|
} else r = s.q.RotationAxisToRef(e, i, t._rotationAxisCache), this.rotationQuaternion.multiplyToRef(r, this.rotationQuaternion);
|
|
return this
|
|
}, t.prototype.rotateAround = function(e, t, i) {
|
|
t.normalize(), this.rotationQuaternion || (this.rotationQuaternion = s.q.RotationYawPitchRoll(this.rotation.y, this.rotation.x, this.rotation.z), this.rotation.setAll(0));
|
|
var n = s.t.Vector3[0],
|
|
r = s.t.Vector3[1],
|
|
o = s.t.Vector3[2],
|
|
a = s.t.Quaternion[0],
|
|
c = s.t.Matrix[0],
|
|
l = s.t.Matrix[1],
|
|
u = s.t.Matrix[2],
|
|
h = s.t.Matrix[3];
|
|
return e.subtractToRef(this.position, n), s.j.TranslationToRef(n.x, n.y, n.z, c), s.j.TranslationToRef(-n.x, -n.y, -n.z, l), s.j.RotationAxisToRef(t, i, u), l.multiplyToRef(u, h), h.multiplyToRef(c, h), h.decompose(r, a, o), this.position.addInPlace(o), a.multiplyToRef(this.rotationQuaternion, this.rotationQuaternion), this
|
|
}, t.prototype.translate = function(e, t, i) {
|
|
var n = e.scale(t);
|
|
if (i && i !== s.s.LOCAL) this.setAbsolutePosition(this.getAbsolutePosition().add(n));
|
|
else {
|
|
var r = this.getPositionExpressedInLocalSpace().add(n);
|
|
this.setPositionWithLocalVector(r)
|
|
}
|
|
return this
|
|
}, t.prototype.addRotation = function(e, t, i) {
|
|
var n;
|
|
this.rotationQuaternion ? n = this.rotationQuaternion : (n = s.t.Quaternion[1], s.q.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, n));
|
|
var r = s.t.Quaternion[0];
|
|
return s.q.RotationYawPitchRollToRef(t, e, i, r), n.multiplyInPlace(r), this.rotationQuaternion || n.toEulerAnglesToRef(this.rotation), this
|
|
}, t.prototype._getEffectiveParent = function() {
|
|
return this.parent
|
|
}, t.prototype.computeWorldMatrix = function(e) {
|
|
if (this._isWorldMatrixFrozen && !this._isDirty) return this._worldMatrix;
|
|
var i = this.getScene().getRenderId();
|
|
if (!this._isDirty && !e && this.isSynchronized()) return this._currentRenderId = i, this._worldMatrix;
|
|
this._updateCache();
|
|
var n = this._cache;
|
|
n.pivotMatrixUpdated = !1, n.billboardMode = this.billboardMode, n.infiniteDistance = this.infiniteDistance, this._currentRenderId = i, this._childUpdateId++, this._isDirty = !1;
|
|
var r = this._getEffectiveParent(),
|
|
o = this._billboardMode !== t.BILLBOARDMODE_NONE && !this.preserveParentRotationForBillboard,
|
|
a = this.getScene().activeCamera,
|
|
c = n.scaling,
|
|
l = n.position;
|
|
if (this._infiniteDistance)
|
|
if (!this.parent && a) {
|
|
var u = a.getWorldMatrix(),
|
|
h = new s.x(u.m[12], u.m[13], u.m[14]);
|
|
l.copyFromFloats(this._position.x + h.x, this._position.y + h.y, this._position.z + h.z)
|
|
} else l.copyFrom(this._position);
|
|
else l.copyFrom(this._position);
|
|
c.copyFromFloats(this._scaling.x * this.scalingDeterminant, this._scaling.y * this.scalingDeterminant, this._scaling.z * this.scalingDeterminant);
|
|
var d = n.rotationQuaternion;
|
|
if (this._rotationQuaternion) {
|
|
if (this.reIntegrateRotationIntoRotationQuaternion) this.rotation.lengthSquared() && (this._rotationQuaternion.multiplyInPlace(s.q.RotationYawPitchRoll(this._rotation.y, this._rotation.x, this._rotation.z)), this._rotation.copyFromFloats(0, 0, 0));
|
|
d.copyFrom(this._rotationQuaternion)
|
|
} else s.q.RotationYawPitchRollToRef(this._rotation.y, this._rotation.x, this._rotation.z, d), n.rotation.copyFrom(this._rotation);
|
|
if (this._usePivotMatrix) {
|
|
var f = s.t.Matrix[1];
|
|
s.j.ScalingToRef(c.x, c.y, c.z, f);
|
|
var p = s.t.Matrix[0];
|
|
d.toRotationMatrix(p), this._pivotMatrix.multiplyToRef(f, s.t.Matrix[4]), s.t.Matrix[4].multiplyToRef(p, this._localMatrix), this._postMultiplyPivotMatrix && this._localMatrix.multiplyToRef(this._pivotMatrixInverse, this._localMatrix), this._localMatrix.addTranslationFromFloats(l.x, l.y, l.z)
|
|
} else s.j.ComposeToRef(c, d, l, this._localMatrix);
|
|
if (r && r.getWorldMatrix) {
|
|
if (o) {
|
|
this._transformToBoneReferal ? r.getWorldMatrix().multiplyToRef(this._transformToBoneReferal.getWorldMatrix(), s.t.Matrix[7]) : s.t.Matrix[7].copyFrom(r.getWorldMatrix());
|
|
var _ = s.t.Vector3[5],
|
|
g = s.t.Vector3[6];
|
|
s.t.Matrix[7].decompose(g, void 0, _), s.j.ScalingToRef(g.x, g.y, g.z, s.t.Matrix[7]), s.t.Matrix[7].setTranslation(_), this._localMatrix.multiplyToRef(s.t.Matrix[7], this._worldMatrix)
|
|
} else this._transformToBoneReferal ? (this._localMatrix.multiplyToRef(r.getWorldMatrix(), s.t.Matrix[6]), s.t.Matrix[6].multiplyToRef(this._transformToBoneReferal.getWorldMatrix(), this._worldMatrix)) : this._localMatrix.multiplyToRef(r.getWorldMatrix(), this._worldMatrix);
|
|
this._markSyncedWithParent()
|
|
} else this._worldMatrix.copyFrom(this._localMatrix);
|
|
if (o && a) {
|
|
var m = s.t.Vector3[0];
|
|
if (this._worldMatrix.getTranslationToRef(m), s.t.Matrix[1].copyFrom(a.getViewMatrix()), s.t.Matrix[1].setTranslationFromFloats(0, 0, 0), s.t.Matrix[1].invertToRef(s.t.Matrix[0]), (this.billboardMode & t.BILLBOARDMODE_ALL) !== t.BILLBOARDMODE_ALL) {
|
|
s.t.Matrix[0].decompose(void 0, s.t.Quaternion[0], void 0);
|
|
var v = s.t.Vector3[1];
|
|
s.t.Quaternion[0].toEulerAnglesToRef(v), (this.billboardMode & t.BILLBOARDMODE_X) !== t.BILLBOARDMODE_X && (v.x = 0), (this.billboardMode & t.BILLBOARDMODE_Y) !== t.BILLBOARDMODE_Y && (v.y = 0), (this.billboardMode & t.BILLBOARDMODE_Z) !== t.BILLBOARDMODE_Z && (v.z = 0), s.j.RotationYawPitchRollToRef(v.y, v.x, v.z, s.t.Matrix[0])
|
|
}
|
|
this._worldMatrix.setTranslationFromFloats(0, 0, 0), this._worldMatrix.multiplyToRef(s.t.Matrix[0], this._worldMatrix), this._worldMatrix.setTranslation(s.t.Vector3[0])
|
|
}
|
|
return this.ignoreNonUniformScaling ? this._updateNonUniformScalingState(!1) : this._scaling.isNonUniform ? this._updateNonUniformScalingState(!0) : r && r._nonUniformScaling ? this._updateNonUniformScalingState(r._nonUniformScaling) : this._updateNonUniformScalingState(!1), this._afterComputeWorldMatrix(), this._absolutePosition.copyFromFloats(this._worldMatrix.m[12], this._worldMatrix.m[13], this._worldMatrix.m[14]), this.onAfterWorldMatrixUpdateObservable.notifyObservers(this), this._poseMatrix || (this._poseMatrix = s.j.Invert(this._worldMatrix)), this._worldMatrixDeterminantIsDirty = !0, this._worldMatrix
|
|
}, t.prototype._afterComputeWorldMatrix = function() {}, t.prototype.registerAfterWorldMatrixUpdate = function(e) {
|
|
return this.onAfterWorldMatrixUpdateObservable.add(e), this
|
|
}, t.prototype.unregisterAfterWorldMatrixUpdate = function(e) {
|
|
return this.onAfterWorldMatrixUpdateObservable.removeCallback(e), this
|
|
}, t.prototype.getPositionInCameraSpace = function(e) {
|
|
return void 0 === e && (e = null), e || (e = this.getScene().activeCamera), s.x.TransformCoordinates(this.absolutePosition, e.getViewMatrix())
|
|
}, t.prototype.getDistanceToCamera = function(e) {
|
|
return void 0 === e && (e = null), e || (e = this.getScene().activeCamera), this.absolutePosition.subtract(e.globalPosition).length()
|
|
}, t.prototype.clone = function(e, i, n) {
|
|
var o = this,
|
|
s = r.a.Clone(function() {
|
|
return new t(e, o.getScene())
|
|
}, this);
|
|
if (s.name = e, s.id = e, i && (s.parent = i), !n)
|
|
for (var a = this.getDescendants(!0), c = 0; c < a.length; c++) {
|
|
var l = a[c];
|
|
l.clone && l.clone(e + "." + l.name, s)
|
|
}
|
|
return s
|
|
}, t.prototype.serialize = function(e) {
|
|
var t = r.a.Serialize(this, e);
|
|
return t.type = this.getClassName(), this.parent && (t.parentId = this.parent.id), t.localMatrix = this.getPivotMatrix().asArray(), t.isEnabled = this.isEnabled(), this.parent && (t.parentId = this.parent.id), t
|
|
}, t.Parse = function(e, i, n) {
|
|
var o = r.a.Parse(function() {
|
|
return new t(e.name, i)
|
|
}, e, i, n);
|
|
return e.localMatrix ? o.setPreTransformMatrix(s.j.FromArray(e.localMatrix)) : e.pivotMatrix && o.setPivotMatrix(s.j.FromArray(e.pivotMatrix)), o.setEnabled(e.isEnabled), e.parentId && (o._waitingParentId = e.parentId), o
|
|
}, t.prototype.getChildTransformNodes = function(e, i) {
|
|
var n = [];
|
|
return this._getDescendants(n, e, function(e) {
|
|
return (!i || i(e)) && e instanceof t
|
|
}), n
|
|
}, t.prototype.dispose = function(t, i) {
|
|
if (void 0 === i && (i = !1), this.getScene().stopAnimation(this), this.getScene().removeTransformNode(this), this.onAfterWorldMatrixUpdateObservable.clear(), t)
|
|
for (var n = 0, r = this.getChildTransformNodes(!0); n < r.length; n++) {
|
|
var o = r[n];
|
|
o.parent = null, o.computeWorldMatrix(!0)
|
|
}
|
|
e.prototype.dispose.call(this, t, i)
|
|
}, t.BILLBOARDMODE_NONE = 0, t.BILLBOARDMODE_X = 1, t.BILLBOARDMODE_Y = 2, t.BILLBOARDMODE_Z = 4, t.BILLBOARDMODE_ALL = 7, t._lookAtVectorCache = new s.x(0, 0, 0), t._rotationAxisCache = new s.q, n.c([Object(r.o)("position")], t.prototype, "_position", void 0), n.c([Object(r.o)("rotation")], t.prototype, "_rotation", void 0), n.c([Object(r.l)("rotationQuaternion")], t.prototype, "_rotationQuaternion", void 0), n.c([Object(r.o)("scaling")], t.prototype, "_scaling", void 0), n.c([Object(r.c)("billboardMode")], t.prototype, "_billboardMode", void 0), n.c([Object(r.c)()], t.prototype, "scalingDeterminant", void 0), n.c([Object(r.c)("infiniteDistance")], t.prototype, "_infiniteDistance", void 0), n.c([Object(r.c)()], t.prototype, "ignoreNonUniformScaling", void 0), n.c([Object(r.c)()], t.prototype, "reIntegrateRotationIntoRotationQuaternion", void 0), t
|
|
}(i(25).a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return d
|
|
});
|
|
var n = i(34),
|
|
r = i(0),
|
|
o = i(3),
|
|
s = i(77),
|
|
a = i(82),
|
|
c = {
|
|
min: 0,
|
|
max: 0
|
|
},
|
|
l = {
|
|
min: 0,
|
|
max: 0
|
|
},
|
|
u = function(e, t, i) {
|
|
var n = r.x.Dot(t.centerWorld, e),
|
|
o = Math.abs(r.x.Dot(t.directions[0], e)) * t.extendSize.x + Math.abs(r.x.Dot(t.directions[1], e)) * t.extendSize.y + Math.abs(r.x.Dot(t.directions[2], e)) * t.extendSize.z;
|
|
i.min = n - o, i.max = n + o
|
|
},
|
|
h = function(e, t, i) {
|
|
return u(e, t, c), u(e, i, l), !(c.min > l.max || l.min > c.max)
|
|
},
|
|
d = function() {
|
|
function e(e, t, i) {
|
|
this._isLocked = !1, this.boundingBox = new s.a(e, t, i), this.boundingSphere = new a.a(e, t, i)
|
|
}
|
|
return e.prototype.reConstruct = function(e, t, i) {
|
|
this.boundingBox.reConstruct(e, t, i), this.boundingSphere.reConstruct(e, t, i)
|
|
}, Object.defineProperty(e.prototype, "minimum", {
|
|
get: function() {
|
|
return this.boundingBox.minimum
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "maximum", {
|
|
get: function() {
|
|
return this.boundingBox.maximum
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isLocked", {
|
|
get: function() {
|
|
return this._isLocked
|
|
},
|
|
set: function(e) {
|
|
this._isLocked = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.update = function(e) {
|
|
this._isLocked || (this.boundingBox._update(e), this.boundingSphere._update(e))
|
|
}, e.prototype.centerOn = function(t, i) {
|
|
var n = e.TmpVector3[0].copyFrom(t).subtractInPlace(i),
|
|
r = e.TmpVector3[1].copyFrom(t).addInPlace(i);
|
|
return this.boundingBox.reConstruct(n, r, this.boundingBox.getWorldMatrix()), this.boundingSphere.reConstruct(n, r, this.boundingBox.getWorldMatrix()), this
|
|
}, e.prototype.scale = function(e) {
|
|
return this.boundingBox.scale(e), this.boundingSphere.scale(e), this
|
|
}, e.prototype.isInFrustum = function(e, t) {
|
|
return void 0 === t && (t = o.a.MESHES_CULLINGSTRATEGY_STANDARD), !(t !== o.a.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION && t !== o.a.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY || !this.boundingSphere.isCenterInFrustum(e)) || !!this.boundingSphere.isInFrustum(e) && (!(t !== o.a.MESHES_CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY && t !== o.a.MESHES_CULLINGSTRATEGY_OPTIMISTIC_INCLUSION_THEN_BSPHERE_ONLY) || this.boundingBox.isInFrustum(e))
|
|
}, Object.defineProperty(e.prototype, "diagonalLength", {
|
|
get: function() {
|
|
var t = this.boundingBox;
|
|
return t.maximumWorld.subtractToRef(t.minimumWorld, e.TmpVector3[0]).length()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.isCompletelyInFrustum = function(e) {
|
|
return this.boundingBox.isCompletelyInFrustum(e)
|
|
}, e.prototype._checkCollision = function(e) {
|
|
return e._canDoCollision(this.boundingSphere.centerWorld, this.boundingSphere.radiusWorld, this.boundingBox.minimumWorld, this.boundingBox.maximumWorld)
|
|
}, e.prototype.intersectsPoint = function(e) {
|
|
return !!this.boundingSphere.centerWorld && (!!this.boundingSphere.intersectsPoint(e) && !!this.boundingBox.intersectsPoint(e))
|
|
}, e.prototype.intersects = function(e, t) {
|
|
if (!a.a.Intersects(this.boundingSphere, e.boundingSphere)) return !1;
|
|
if (!s.a.Intersects(this.boundingBox, e.boundingBox)) return !1;
|
|
if (!t) return !0;
|
|
var i = this.boundingBox,
|
|
n = e.boundingBox;
|
|
return !!h(i.directions[0], i, n) && (!!h(i.directions[1], i, n) && (!!h(i.directions[2], i, n) && (!!h(n.directions[0], i, n) && (!!h(n.directions[1], i, n) && (!!h(n.directions[2], i, n) && (!!h(r.x.Cross(i.directions[0], n.directions[0]), i, n) && (!!h(r.x.Cross(i.directions[0], n.directions[1]), i, n) && (!!h(r.x.Cross(i.directions[0], n.directions[2]), i, n) && (!!h(r.x.Cross(i.directions[1], n.directions[0]), i, n) && (!!h(r.x.Cross(i.directions[1], n.directions[1]), i, n) && (!!h(r.x.Cross(i.directions[1], n.directions[2]), i, n) && (!!h(r.x.Cross(i.directions[2], n.directions[0]), i, n) && (!!h(r.x.Cross(i.directions[2], n.directions[1]), i, n) && !!h(r.x.Cross(i.directions[2], n.directions[2]), i, n))))))))))))))
|
|
}, e.TmpVector3 = n.a.BuildArray(2, r.x.Zero), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return h
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(8),
|
|
s = i(9),
|
|
a = i(71),
|
|
c = i(0),
|
|
l = i(23),
|
|
u = i(3),
|
|
h = function() {
|
|
function e(t) {
|
|
this.metadata = null, this.reservedDataStore = null, this._hasAlpha = !1, this.getAlphaFromRGB = !1, this.level = 1, this.coordinatesIndex = 0, this._coordinatesMode = u.a.TEXTURE_EXPLICIT_MODE, this.wrapU = u.a.TEXTURE_WRAP_ADDRESSMODE, this.wrapV = u.a.TEXTURE_WRAP_ADDRESSMODE, this.wrapR = u.a.TEXTURE_WRAP_ADDRESSMODE, this.anisotropicFilteringLevel = e.DEFAULT_ANISOTROPIC_FILTERING_LEVEL, this.gammaSpace = !0, this.invertZ = !1, this.lodLevelInAlpha = !1, this.isRenderTarget = !1, this.animations = new Array, this.onDisposeObservable = new o.c, this._onDisposeObserver = null, this.delayLoadState = u.a.DELAYLOADSTATE_NONE, this._scene = null, this._texture = null, this._uid = null, this._cachedSize = c.r.Zero(), this._scene = t || l.a.LastCreatedScene, this._scene && (this.uniqueId = this._scene.getUniqueId(), this._scene.addTexture(this)), this._uid = null
|
|
}
|
|
return Object.defineProperty(e.prototype, "hasAlpha", {
|
|
get: function() {
|
|
return this._hasAlpha
|
|
},
|
|
set: function(e) {
|
|
this._hasAlpha !== e && (this._hasAlpha = e, this._scene && this._scene.markAllMaterialsAsDirty(u.a.MATERIAL_TextureDirtyFlag | u.a.MATERIAL_MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "coordinatesMode", {
|
|
get: function() {
|
|
return this._coordinatesMode
|
|
},
|
|
set: function(e) {
|
|
this._coordinatesMode !== e && (this._coordinatesMode = e, this._scene && this._scene.markAllMaterialsAsDirty(u.a.MATERIAL_TextureDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isCube", {
|
|
get: function() {
|
|
return !!this._texture && this._texture.isCube
|
|
},
|
|
set: function(e) {
|
|
this._texture && (this._texture.isCube = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "is3D", {
|
|
get: function() {
|
|
return !!this._texture && this._texture.is3D
|
|
},
|
|
set: function(e) {
|
|
this._texture && (this._texture.is3D = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isRGBD", {
|
|
get: function() {
|
|
return null != this._texture && this._texture._isRGBD
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "noMipmap", {
|
|
get: function() {
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "lodGenerationOffset", {
|
|
get: function() {
|
|
return this._texture ? this._texture._lodGenerationOffset : 0
|
|
},
|
|
set: function(e) {
|
|
this._texture && (this._texture._lodGenerationOffset = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "lodGenerationScale", {
|
|
get: function() {
|
|
return this._texture ? this._texture._lodGenerationScale : 0
|
|
},
|
|
set: function(e) {
|
|
this._texture && (this._texture._lodGenerationScale = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "uid", {
|
|
get: function() {
|
|
return this._uid || (this._uid = s.h.RandomId()), this._uid
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.toString = function() {
|
|
return this.name
|
|
}, e.prototype.getClassName = function() {
|
|
return "BaseTexture"
|
|
}, Object.defineProperty(e.prototype, "onDispose", {
|
|
set: function(e) {
|
|
this._onDisposeObserver && this.onDisposeObservable.remove(this._onDisposeObserver), this._onDisposeObserver = this.onDisposeObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isBlocking", {
|
|
get: function() {
|
|
return !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getScene = function() {
|
|
return this._scene
|
|
}, e.prototype.getTextureMatrix = function() {
|
|
return c.j.IdentityReadOnly
|
|
}, e.prototype.getReflectionTextureMatrix = function() {
|
|
return c.j.IdentityReadOnly
|
|
}, e.prototype.getInternalTexture = function() {
|
|
return this._texture
|
|
}, e.prototype.isReadyOrNotBlocking = function() {
|
|
return !this.isBlocking || this.isReady()
|
|
}, e.prototype.isReady = function() {
|
|
return this.delayLoadState === u.a.DELAYLOADSTATE_NOTLOADED ? (this.delayLoad(), !1) : !!this._texture && this._texture.isReady
|
|
}, e.prototype.getSize = function() {
|
|
if (this._texture) {
|
|
if (this._texture.width) return this._cachedSize.width = this._texture.width, this._cachedSize.height = this._texture.height, this._cachedSize;
|
|
if (this._texture._size) return this._cachedSize.width = this._texture._size, this._cachedSize.height = this._texture._size, this._cachedSize
|
|
}
|
|
return this._cachedSize
|
|
}, e.prototype.getBaseSize = function() {
|
|
return this.isReady() && this._texture ? this._texture._size ? new c.r(this._texture._size, this._texture._size) : new c.r(this._texture.baseWidth, this._texture.baseHeight) : c.r.Zero()
|
|
}, e.prototype.updateSamplingMode = function(e) {
|
|
if (this._texture) {
|
|
var t = this.getScene();
|
|
t && t.getEngine().updateTextureSamplingMode(e, this._texture)
|
|
}
|
|
}, e.prototype.scale = function(e) {}, Object.defineProperty(e.prototype, "canRescale", {
|
|
get: function() {
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._getFromCache = function(e, t, i, n) {
|
|
if (!this._scene) return null;
|
|
for (var r = this._scene.getEngine().getLoadedTexturesCache(), o = 0; o < r.length; o++) {
|
|
var s = r[o];
|
|
if (!(void 0 !== n && n !== s.invertY || s.url !== e || s.generateMipMaps !== !t || i && i !== s.samplingMode)) return s.incrementReferences(), s
|
|
}
|
|
return null
|
|
}, e.prototype._rebuild = function() {}, e.prototype.delayLoad = function() {}, e.prototype.clone = function() {
|
|
return null
|
|
}, Object.defineProperty(e.prototype, "textureType", {
|
|
get: function() {
|
|
return this._texture && void 0 !== this._texture.type ? this._texture.type : u.a.TEXTURETYPE_UNSIGNED_INT
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "textureFormat", {
|
|
get: function() {
|
|
return this._texture && void 0 !== this._texture.format ? this._texture.format : u.a.TEXTUREFORMAT_RGBA
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.readPixels = function(e, t, i) {
|
|
if (void 0 === e && (e = 0), void 0 === t && (t = 0), void 0 === i && (i = null), !this._texture) return null;
|
|
var n = this.getSize(),
|
|
r = n.width,
|
|
o = n.height,
|
|
s = this.getScene();
|
|
if (!s) return null;
|
|
var a = s.getEngine();
|
|
return 0 != t && (r /= Math.pow(2, t), o /= Math.pow(2, t), r = Math.round(r), o = Math.round(o)), this._texture.isCube ? a._readTexturePixels(this._texture, r, o, e, t, i) : a._readTexturePixels(this._texture, r, o, -1, t, i)
|
|
}, e.prototype.releaseInternalTexture = function() {
|
|
this._texture && (this._texture.dispose(), this._texture = null)
|
|
}, Object.defineProperty(e.prototype, "sphericalPolynomial", {
|
|
get: function() {
|
|
return this._texture && a.a && this.isReady() ? (this._texture._sphericalPolynomial || (this._texture._sphericalPolynomial = a.a.ConvertCubeMapTextureToSphericalPolynomial(this)), this._texture._sphericalPolynomial) : null
|
|
},
|
|
set: function(e) {
|
|
this._texture && (this._texture._sphericalPolynomial = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "_lodTextureHigh", {
|
|
get: function() {
|
|
return this._texture ? this._texture._lodTextureHigh : null
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "_lodTextureMid", {
|
|
get: function() {
|
|
return this._texture ? this._texture._lodTextureMid : null
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "_lodTextureLow", {
|
|
get: function() {
|
|
return this._texture ? this._texture._lodTextureLow : null
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.dispose = function() {
|
|
if (this._scene) {
|
|
this._scene.stopAnimation && this._scene.stopAnimation(this), this._scene._removePendingData(this);
|
|
var e = this._scene.textures.indexOf(this);
|
|
e >= 0 && this._scene.textures.splice(e, 1), this._scene.onTextureRemovedObservable.notifyObservers(this), void 0 !== this._texture && (this.releaseInternalTexture(), this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear())
|
|
}
|
|
}, e.prototype.serialize = function() {
|
|
if (!this.name) return null;
|
|
var e = r.a.Serialize(this);
|
|
return r.a.AppendSerializedAnimations(this, e), e
|
|
}, e.WhenAllReady = function(e, t) {
|
|
var i = e.length;
|
|
if (0 !== i)
|
|
for (var n, r, o = function() {
|
|
if ((n = e[s]).isReady()) 0 == --i && t();
|
|
else {
|
|
r = n.onLoadObservable;
|
|
var o = function() {
|
|
r.removeCallback(o), 0 == --i && t()
|
|
};
|
|
r.add(o)
|
|
}
|
|
}, s = 0; s < e.length; s++) o();
|
|
else t()
|
|
}, e.DEFAULT_ANISOTROPIC_FILTERING_LEVEL = 4, n.c([Object(r.c)()], e.prototype, "uniqueId", void 0), n.c([Object(r.c)()], e.prototype, "name", void 0), n.c([Object(r.c)()], e.prototype, "metadata", void 0), n.c([Object(r.c)("hasAlpha")], e.prototype, "_hasAlpha", void 0), n.c([Object(r.c)()], e.prototype, "getAlphaFromRGB", void 0), n.c([Object(r.c)()], e.prototype, "level", void 0), n.c([Object(r.c)()], e.prototype, "coordinatesIndex", void 0), n.c([Object(r.c)("coordinatesMode")], e.prototype, "_coordinatesMode", void 0), n.c([Object(r.c)()], e.prototype, "wrapU", void 0), n.c([Object(r.c)()], e.prototype, "wrapV", void 0), n.c([Object(r.c)()], e.prototype, "wrapR", void 0), n.c([Object(r.c)()], e.prototype, "anisotropicFilteringLevel", void 0), n.c([Object(r.c)()], e.prototype, "isCube", null), n.c([Object(r.c)()], e.prototype, "is3D", null), n.c([Object(r.c)()], e.prototype, "gammaSpace", void 0), n.c([Object(r.c)()], e.prototype, "invertZ", void 0), n.c([Object(r.c)()], e.prototype, "lodLevelInAlpha", void 0), n.c([Object(r.c)()], e.prototype, "lodGenerationOffset", null), n.c([Object(r.c)()], e.prototype, "lodGenerationScale", null), n.c([Object(r.c)()], e.prototype, "isRenderTarget", void 0), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
});
|
|
var n = i(0),
|
|
r = function() {
|
|
function e() {}
|
|
return e._RemoveAndStorePivotPoint = function(t) {
|
|
t && 0 === e._PivotCached && (t.getPivotPointToRef(e._OldPivotPoint), e._OldPivotPoint.equalsToFloats(0, 0, 0) || (t.setPivotMatrix(n.j.IdentityReadOnly), e._OldPivotPoint.subtractToRef(t.getPivotPoint(), e._PivotTranslation), e._PivotTmpVector.copyFromFloats(1, 1, 1), e._PivotTmpVector.subtractInPlace(t.scaling), e._PivotTmpVector.multiplyInPlace(e._PivotTranslation), t.position.addInPlace(e._PivotTmpVector))), e._PivotCached++
|
|
}, e._RestorePivotPoint = function(t) {
|
|
t && !e._OldPivotPoint.equalsToFloats(0, 0, 0) && 1 === e._PivotCached && (t.setPivotPoint(e._OldPivotPoint), e._PivotTmpVector.copyFromFloats(1, 1, 1), e._PivotTmpVector.subtractInPlace(t.scaling), e._PivotTmpVector.multiplyInPlace(e._PivotTranslation), t.position.subtractInPlace(e._PivotTmpVector)), this._PivotCached--
|
|
}, e._PivotCached = 0, e._OldPivotPoint = new n.x, e._PivotTranslation = new n.x, e._PivotTmpVector = new n.x, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return s
|
|
});
|
|
var n = i(0),
|
|
r = i(11),
|
|
o = i(13);
|
|
o.a.CreateSphere = function(e) {
|
|
for (var t = e.segments || 32, i = e.diameterX || e.diameter || 1, r = e.diameterY || e.diameter || 1, s = e.diameterZ || e.diameter || 1, a = e.arc && (e.arc <= 0 || e.arc > 1) ? 1 : e.arc || 1, c = e.slice && e.slice <= 0 ? 1 : e.slice || 1, l = 0 === e.sideOrientation ? 0 : e.sideOrientation || o.a.DEFAULTSIDE, u = new n.x(i / 2, r / 2, s / 2), h = 2 + t, d = 2 * h, f = [], p = [], _ = [], g = [], m = 0; m <= h; m++) {
|
|
for (var v = m / h, y = v * Math.PI * c, b = 0; b <= d; b++) {
|
|
var T = b / d,
|
|
E = T * Math.PI * 2 * a,
|
|
A = n.j.RotationZ(-y),
|
|
x = n.j.RotationY(E),
|
|
R = n.x.TransformCoordinates(n.x.Up(), A),
|
|
P = n.x.TransformCoordinates(R, x),
|
|
S = P.multiply(u),
|
|
C = P.divide(u).normalize();
|
|
p.push(S.x, S.y, S.z), _.push(C.x, C.y, C.z), g.push(T, v)
|
|
}
|
|
if (m > 0)
|
|
for (var M = p.length / 3, O = M - 2 * (d + 1); O + d + 2 < M; O++) f.push(O), f.push(O + 1), f.push(O + d + 1), f.push(O + d + 1), f.push(O + 1), f.push(O + d + 2)
|
|
}
|
|
o.a._ComputeSides(l, p, f, _, g, e.frontUVs, e.backUVs);
|
|
var I = new o.a;
|
|
return I.indices = f, I.positions = p, I.normals = _, I.uvs = g, I
|
|
}, r.a.CreateSphere = function(e, t, i, n, r, o) {
|
|
var a = {
|
|
segments: t,
|
|
diameterX: i,
|
|
diameterY: i,
|
|
diameterZ: i,
|
|
sideOrientation: o,
|
|
updatable: r
|
|
};
|
|
return s.CreateSphere(e, a, n)
|
|
};
|
|
var s = function() {
|
|
function e() {}
|
|
return e.CreateSphere = function(e, t, i) {
|
|
var n = new r.a(e, i);
|
|
return t.sideOrientation = r.a._GetDefaultSideOrientation(t.sideOrientation), n._originalBuilderSideOrientation = t.sideOrientation, o.a.CreateSphere(t).applyToMesh(n, t.updatable), n
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
});
|
|
var n = i(35),
|
|
r = function() {
|
|
function e() {}
|
|
return Object.defineProperty(e, "Now", {
|
|
get: function() {
|
|
return n.a.IsWindowObjectExist() && window.performance && window.performance.now ? window.performance.now() : Date.now()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return s
|
|
});
|
|
var n = i(0),
|
|
r = i(11),
|
|
o = i(41),
|
|
s = function() {
|
|
function e(e) {
|
|
var t = this;
|
|
void 0 === e && (e = o.a.DefaultUtilityLayer), this.gizmoLayer = e, this._attachedMesh = null, this.scaleRatio = 1, this._customMeshSet = !1, this.updateGizmoRotationToMatchAttachedMesh = !0, this.updateGizmoPositionToMatchAttachedMesh = !0, this._updateScale = !0, this._interactionsEnabled = !0, this._tempVector = new n.x, this._rootMesh = new r.a("gizmoRootNode", e.utilityLayerScene), this._rootMesh.rotationQuaternion = n.q.Identity(), this._beforeRenderObserver = this.gizmoLayer.utilityLayerScene.onBeforeRenderObservable.add(function() {
|
|
t._update()
|
|
})
|
|
}
|
|
return Object.defineProperty(e.prototype, "attachedMesh", {
|
|
get: function() {
|
|
return this._attachedMesh
|
|
},
|
|
set: function(e) {
|
|
this._attachedMesh = e, this._rootMesh.setEnabled(!!e), this._attachedMeshChanged(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.setCustomMesh = function(e) {
|
|
if (e.getScene() != this.gizmoLayer.utilityLayerScene) throw "When setting a custom mesh on a gizmo, the custom meshes scene must be the same as the gizmos (eg. gizmo.gizmoLayer.utilityLayerScene)";
|
|
this._rootMesh.getChildMeshes().forEach(function(e) {
|
|
e.dispose()
|
|
}), e.parent = this._rootMesh, this._customMeshSet = !0
|
|
}, e.prototype._attachedMeshChanged = function(e) {}, e.prototype._update = function() {
|
|
if (this.attachedMesh) {
|
|
var e = this.attachedMesh._effectiveMesh || this.attachedMesh;
|
|
if (this.updateGizmoPositionToMatchAttachedMesh && this._rootMesh.position.copyFrom(e.absolutePosition), this.updateGizmoRotationToMatchAttachedMesh ? e.getWorldMatrix().decompose(void 0, this._rootMesh.rotationQuaternion) : this._rootMesh.rotationQuaternion.set(0, 0, 0, 1), this._updateScale) {
|
|
var t = this.gizmoLayer.utilityLayerScene.activeCamera,
|
|
i = t.globalPosition;
|
|
t.devicePosition && (i = t.devicePosition), this._rootMesh.position.subtractToRef(i, this._tempVector);
|
|
var n = this._tempVector.length() * this.scaleRatio;
|
|
this._rootMesh.scaling.set(n, n, n), e._getWorldMatrixDeterminant() < 0 && (this._rootMesh.scaling.y *= -1)
|
|
}
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
this._rootMesh.dispose(), this._beforeRenderObserver && this.gizmoLayer.utilityLayerScene.onBeforeRenderObservable.remove(this._beforeRenderObserver)
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return l
|
|
}), i.d(t, "b", function() {
|
|
return u
|
|
});
|
|
var n = i(1),
|
|
r = i(9),
|
|
o = i(4),
|
|
s = i(81),
|
|
a = i(43),
|
|
c = i(3),
|
|
l = function() {
|
|
function e() {
|
|
this._materialDefines = null, this._materialEffect = null
|
|
}
|
|
return Object.defineProperty(e.prototype, "effect", {
|
|
get: function() {
|
|
return this._materialEffect
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.setEffect = function(e, t) {
|
|
void 0 === t && (t = null), this._materialEffect !== e ? (this._materialDefines = t, this._materialEffect = e) : e || (this._materialDefines = null)
|
|
}, e
|
|
}(),
|
|
u = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
void 0 === c && (c = !0);
|
|
var l = e.call(this) || this;
|
|
return l.materialIndex = t, l.verticesStart = i, l.verticesCount = n, l.indexStart = r, l.indexCount = o, l._linesIndexCount = 0, l._linesIndexBuffer = null, l._lastColliderWorldVertices = null, l._lastColliderTransformMatrix = null, l._renderId = 0, l._alphaIndex = 0, l._distanceToCamera = 0, l._currentMaterial = null, l._mesh = s, l._renderingMesh = a || s, s.subMeshes.push(l), l._trianglePlanes = [], l._id = s.subMeshes.length - 1, c && (l.refreshBoundingInfo(), s.computeWorldMatrix(!0)), l
|
|
}
|
|
return n.d(t, e), t.AddToMesh = function(e, i, n, r, o, s, a, c) {
|
|
return void 0 === c && (c = !0), new t(e, i, n, r, o, s, a, c)
|
|
}, Object.defineProperty(t.prototype, "IsGlobal", {
|
|
get: function() {
|
|
return 0 === this.verticesStart && this.verticesCount === this._mesh.getTotalVertices()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getBoundingInfo = function() {
|
|
return this.IsGlobal ? this._mesh.getBoundingInfo() : this._boundingInfo
|
|
}, t.prototype.setBoundingInfo = function(e) {
|
|
return this._boundingInfo = e, this
|
|
}, t.prototype.getMesh = function() {
|
|
return this._mesh
|
|
}, t.prototype.getRenderingMesh = function() {
|
|
return this._renderingMesh
|
|
}, t.prototype.getMaterial = function() {
|
|
var e = this._renderingMesh.material;
|
|
if (null == e) return this._mesh.getScene().defaultMaterial;
|
|
if (e.getSubMaterial) {
|
|
var t = e.getSubMaterial(this.materialIndex);
|
|
return this._currentMaterial !== t && (this._currentMaterial = t, this._materialDefines = null), t
|
|
}
|
|
return e
|
|
}, t.prototype.refreshBoundingInfo = function(e) {
|
|
if (void 0 === e && (e = null), this._lastColliderWorldVertices = null, this.IsGlobal || !this._renderingMesh || !this._renderingMesh.geometry) return this;
|
|
if (e || (e = this._renderingMesh.getVerticesData(o.b.PositionKind)), !e) return this._boundingInfo = this._mesh.getBoundingInfo(), this;
|
|
var t, i = this._renderingMesh.getIndices();
|
|
if (0 === this.indexStart && this.indexCount === i.length) {
|
|
var n = this._renderingMesh.getBoundingInfo();
|
|
t = {
|
|
minimum: n.minimum.clone(),
|
|
maximum: n.maximum.clone()
|
|
}
|
|
} else t = r.h.ExtractMinAndMaxIndexed(e, i, this.indexStart, this.indexCount, this._renderingMesh.geometry.boundingBias);
|
|
return this._boundingInfo ? this._boundingInfo.reConstruct(t.minimum, t.maximum) : this._boundingInfo = new a.a(t.minimum, t.maximum), this
|
|
}, t.prototype._checkCollision = function(e) {
|
|
return this.getBoundingInfo()._checkCollision(e)
|
|
}, t.prototype.updateBoundingInfo = function(e) {
|
|
var t = this.getBoundingInfo();
|
|
return t || (this.refreshBoundingInfo(), t = this.getBoundingInfo()), t.update(e), this
|
|
}, t.prototype.isInFrustum = function(e) {
|
|
var t = this.getBoundingInfo();
|
|
return !!t && t.isInFrustum(e, this._mesh.cullingStrategy)
|
|
}, t.prototype.isCompletelyInFrustum = function(e) {
|
|
var t = this.getBoundingInfo();
|
|
return !!t && t.isCompletelyInFrustum(e)
|
|
}, t.prototype.render = function(e) {
|
|
return this._renderingMesh.render(this, e), this
|
|
}, t.prototype._getLinesIndexBuffer = function(e, t) {
|
|
if (!this._linesIndexBuffer) {
|
|
for (var i = [], n = this.indexStart; n < this.indexStart + this.indexCount; n += 3) i.push(e[n], e[n + 1], e[n + 1], e[n + 2], e[n + 2], e[n]);
|
|
this._linesIndexBuffer = t.createIndexBuffer(i), this._linesIndexCount = i.length
|
|
}
|
|
return this._linesIndexBuffer
|
|
}, t.prototype.canIntersects = function(e) {
|
|
var t = this.getBoundingInfo();
|
|
return !!t && e.intersectsBox(t.boundingBox)
|
|
}, t.prototype.intersects = function(e, t, i, n, r) {
|
|
var o = this.getMaterial();
|
|
if (!o) return null;
|
|
switch (o.fillMode) {
|
|
case c.a.MATERIAL_PointListDrawMode:
|
|
case c.a.MATERIAL_LineListDrawMode:
|
|
case c.a.MATERIAL_LineLoopDrawMode:
|
|
case c.a.MATERIAL_LineStripDrawMode:
|
|
case c.a.MATERIAL_TriangleFanDrawMode:
|
|
case c.a.MATERIAL_TriangleStripDrawMode:
|
|
return null
|
|
}
|
|
return "InstancedLinesMesh" === this._mesh.getClassName() || "LinesMesh" === this._mesh.getClassName() ? i.length ? this._intersectLines(e, t, i, this._mesh.intersectionThreshold, n) : this._intersectUnIndexedLines(e, t, i, this._mesh.intersectionThreshold, n) : !i.length && this._mesh._unIndexed ? this._intersectUnIndexedTriangles(e, t, i, n, r) : this._intersectTriangles(e, t, i, n, r)
|
|
}, t.prototype._intersectLines = function(e, t, i, n, r) {
|
|
for (var o = null, a = this.indexStart; a < this.indexStart + this.indexCount; a += 2) {
|
|
var c = t[i[a]],
|
|
l = t[i[a + 1]],
|
|
u = e.intersectionSegment(c, l, n);
|
|
if (!(u < 0) && ((r || !o || u < o.distance) && ((o = new s.a(null, null, u)).faceId = a / 2, r))) break
|
|
}
|
|
return o
|
|
}, t.prototype._intersectUnIndexedLines = function(e, t, i, n, r) {
|
|
for (var o = null, a = this.verticesStart; a < this.verticesStart + this.verticesCount; a += 2) {
|
|
var c = t[a],
|
|
l = t[a + 1],
|
|
u = e.intersectionSegment(c, l, n);
|
|
if (!(u < 0) && ((r || !o || u < o.distance) && ((o = new s.a(null, null, u)).faceId = a / 2, r))) break
|
|
}
|
|
return o
|
|
}, t.prototype._intersectTriangles = function(e, t, i, n, r) {
|
|
for (var o = null, s = this.indexStart; s < this.indexStart + this.indexCount; s += 3) {
|
|
var a = t[i[s]],
|
|
c = t[i[s + 1]],
|
|
l = t[i[s + 2]];
|
|
if (!r || r(a, c, l, e)) {
|
|
var u = e.intersectsTriangle(a, c, l);
|
|
if (u) {
|
|
if (u.distance < 0) continue;
|
|
if ((n || !o || u.distance < o.distance) && ((o = u).faceId = s / 3, n)) break
|
|
}
|
|
}
|
|
}
|
|
return o
|
|
}, t.prototype._intersectUnIndexedTriangles = function(e, t, i, n, r) {
|
|
for (var o = null, s = this.verticesStart; s < this.verticesStart + this.verticesCount; s += 3) {
|
|
var a = t[s],
|
|
c = t[s + 1],
|
|
l = t[s + 2];
|
|
if (!r || r(a, c, l, e)) {
|
|
var u = e.intersectsTriangle(a, c, l);
|
|
if (u) {
|
|
if (u.distance < 0) continue;
|
|
if ((n || !o || u.distance < o.distance) && ((o = u).faceId = s / 3, n)) break
|
|
}
|
|
}
|
|
}
|
|
return o
|
|
}, t.prototype._rebuild = function() {
|
|
this._linesIndexBuffer && (this._linesIndexBuffer = null)
|
|
}, t.prototype.clone = function(e, i) {
|
|
var n = new t(this.materialIndex, this.verticesStart, this.verticesCount, this.indexStart, this.indexCount, e, i, !1);
|
|
if (!this.IsGlobal) {
|
|
var r = this.getBoundingInfo();
|
|
if (!r) return n;
|
|
n._boundingInfo = new a.a(r.minimum, r.maximum)
|
|
}
|
|
return n
|
|
}, t.prototype.dispose = function() {
|
|
this._linesIndexBuffer && (this._mesh.getScene().getEngine()._releaseBuffer(this._linesIndexBuffer), this._linesIndexBuffer = null);
|
|
var e = this._mesh.subMeshes.indexOf(this);
|
|
this._mesh.subMeshes.splice(e, 1)
|
|
}, t.prototype.getClassName = function() {
|
|
return "SubMesh"
|
|
}, t.CreateFromIndices = function(e, i, n, r, o) {
|
|
for (var s = Number.MAX_VALUE, a = -Number.MAX_VALUE, c = (o || r).getIndices(), l = i; l < i + n; l++) {
|
|
var u = c[l];
|
|
u < s && (s = u), u > a && (a = u)
|
|
}
|
|
return new t(e, s, a - s + 1, i, n, r, o)
|
|
}, t
|
|
}(l)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return o
|
|
});
|
|
var n = i(0),
|
|
r = i(4),
|
|
o = function() {
|
|
function e() {
|
|
this._pickingUnavailable = !1, this.hit = !1, this.distance = 0, this.pickedPoint = null, this.pickedMesh = null, this.bu = 0, this.bv = 0, this.faceId = -1, this.subMeshId = 0, this.pickedSprite = null, this.originMesh = null, this.ray = null
|
|
}
|
|
return e.prototype.getNormal = function(e, t) {
|
|
if (void 0 === e && (e = !1), void 0 === t && (t = !0), !this.pickedMesh || !this.pickedMesh.isVerticesDataPresent(r.b.NormalKind)) return null;
|
|
var i, o = this.pickedMesh.getIndices();
|
|
if (!o) return null;
|
|
if (t) {
|
|
var s = this.pickedMesh.getVerticesData(r.b.NormalKind),
|
|
a = n.x.FromArray(s, 3 * o[3 * this.faceId]),
|
|
c = n.x.FromArray(s, 3 * o[3 * this.faceId + 1]),
|
|
l = n.x.FromArray(s, 3 * o[3 * this.faceId + 2]);
|
|
a = a.scale(this.bu), c = c.scale(this.bv), l = l.scale(1 - this.bu - this.bv), i = new n.x(a.x + c.x + l.x, a.y + c.y + l.y, a.z + c.z + l.z)
|
|
} else {
|
|
var u = this.pickedMesh.getVerticesData(r.b.PositionKind),
|
|
h = n.x.FromArray(u, 3 * o[3 * this.faceId]),
|
|
d = n.x.FromArray(u, 3 * o[3 * this.faceId + 1]),
|
|
f = n.x.FromArray(u, 3 * o[3 * this.faceId + 2]),
|
|
p = h.subtract(d),
|
|
_ = f.subtract(d);
|
|
i = n.x.Cross(p, _)
|
|
}
|
|
if (e) {
|
|
var g = this.pickedMesh.getWorldMatrix();
|
|
this.pickedMesh.nonUniformScaling && (n.t.Matrix[0].copyFrom(g), (g = n.t.Matrix[0]).setTranslationFromFloats(0, 0, 0), g.invert(), g.transposeToRef(n.t.Matrix[1]), g = n.t.Matrix[1]), i = n.x.TransformNormal(i, g)
|
|
}
|
|
return i.normalize(), i
|
|
}, e.prototype.getTextureCoordinates = function() {
|
|
if (!this.pickedMesh || !this.pickedMesh.isVerticesDataPresent(r.b.UVKind)) return null;
|
|
var e = this.pickedMesh.getIndices();
|
|
if (!e) return null;
|
|
var t = this.pickedMesh.getVerticesData(r.b.UVKind);
|
|
if (!t) return null;
|
|
var i = n.w.FromArray(t, 2 * e[3 * this.faceId]),
|
|
o = n.w.FromArray(t, 2 * e[3 * this.faceId + 1]),
|
|
s = n.w.FromArray(t, 2 * e[3 * this.faceId + 2]);
|
|
return i = i.scale(1 - this.bu - this.bv), o = o.scale(this.bu), s = s.scale(this.bv), new n.w(i.x + o.x + s.x, i.y + o.y + s.y)
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
}), i.d(t, "b", function() {
|
|
return o
|
|
}), i.d(t, "c", function() {
|
|
return s
|
|
});
|
|
var n = i(1),
|
|
r = function() {
|
|
function e() {}
|
|
return e.KEYDOWN = 1, e.KEYUP = 2, e
|
|
}(),
|
|
o = function() {
|
|
return function(e, t) {
|
|
this.type = e, this.event = t
|
|
}
|
|
}(),
|
|
s = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i) || this;
|
|
return n.type = t, n.event = i, n.skipOnPointerObservable = !1, n
|
|
}
|
|
return n.d(t, e), t
|
|
}(o)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return s
|
|
});
|
|
var n = i(0),
|
|
r = i(11),
|
|
o = i(13);
|
|
o.a.CreateBox = function(e) {
|
|
var t, i = [0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, 8, 10, 11, 12, 13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23],
|
|
r = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0],
|
|
s = [],
|
|
a = e.width || e.size || 1,
|
|
c = e.height || e.size || 1,
|
|
l = e.depth || e.size || 1,
|
|
u = e.wrap || !1,
|
|
h = void 0 === e.topBaseAt ? 1 : e.topBaseAt,
|
|
d = void 0 === e.bottomBaseAt ? 0 : e.bottomBaseAt,
|
|
f = [2, 0, 3, 1][h = (h + 4) % 4],
|
|
p = [2, 0, 1, 3][d = (d + 4) % 4],
|
|
_ = [1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, 1];
|
|
if (u) {
|
|
i = [2, 3, 0, 2, 0, 1, 4, 5, 6, 4, 6, 7, 9, 10, 11, 9, 11, 8, 12, 14, 15, 12, 13, 14], _ = [-1, 1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, 1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, 1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, 1, -1, -1, 1, 1, -1, -1, 1, -1, -1, -1];
|
|
for (var g = [
|
|
[1, 1, 1],
|
|
[-1, 1, 1],
|
|
[-1, 1, -1],
|
|
[1, 1, -1]
|
|
], m = [
|
|
[-1, -1, 1],
|
|
[1, -1, 1],
|
|
[1, -1, -1],
|
|
[-1, -1, -1]
|
|
], v = [17, 18, 19, 16], y = [22, 23, 20, 21]; f > 0;) g.unshift(g.pop()), v.unshift(v.pop()), f--;
|
|
for (; p > 0;) m.unshift(m.pop()), y.unshift(y.pop()), p--;
|
|
g = g.flat(), m = m.flat(), _ = _.concat(g).concat(m), i.push(v[0], v[2], v[3], v[0], v[1], v[2]), i.push(y[0], y[2], y[3], y[0], y[1], y[2])
|
|
}
|
|
var b = [a / 2, c / 2, l / 2];
|
|
t = _.reduce(function(e, t, i) {
|
|
return e.concat(t * b[i % 3])
|
|
}, []);
|
|
for (var T = 0 === e.sideOrientation ? 0 : e.sideOrientation || o.a.DEFAULTSIDE, E = e.faceUV || new Array(6), A = e.faceColors, x = [], R = 0; R < 6; R++) void 0 === E[R] && (E[R] = new n.y(0, 0, 1, 1)), A && void 0 === A[R] && (A[R] = new n.f(1, 1, 1, 1));
|
|
for (var P = 0; P < 6; P++)
|
|
if (s.push(E[P].z, E[P].w), s.push(E[P].x, E[P].w), s.push(E[P].x, E[P].y), s.push(E[P].z, E[P].y), A)
|
|
for (var S = 0; S < 4; S++) x.push(A[P].r, A[P].g, A[P].b, A[P].a);
|
|
o.a._ComputeSides(T, t, i, r, s, e.frontUVs, e.backUVs);
|
|
var C = new o.a;
|
|
if (C.indices = i, C.positions = t, C.normals = r, C.uvs = s, A) {
|
|
var M = T === o.a.DOUBLESIDE ? x.concat(x) : x;
|
|
C.colors = M
|
|
}
|
|
return C
|
|
}, r.a.CreateBox = function(e, t, i, n, r) {
|
|
void 0 === i && (i = null);
|
|
var o = {
|
|
size: t,
|
|
sideOrientation: r,
|
|
updatable: n
|
|
};
|
|
return s.CreateBox(e, o, i)
|
|
};
|
|
var s = function() {
|
|
function e() {}
|
|
return e.CreateBox = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n = new r.a(e, i);
|
|
return t.sideOrientation = r.a._GetDefaultSideOrientation(t.sideOrientation), n._originalBuilderSideOrientation = t.sideOrientation, o.a.CreateBox(t).applyToMesh(n, t.updatable), n
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return a
|
|
});
|
|
var n = i(0),
|
|
r = i(11),
|
|
o = i(13),
|
|
s = i(16);
|
|
o.a.CreateCylinder = function(e) {
|
|
var t, i = e.height || 2,
|
|
r = 0 === e.diameterTop ? 0 : e.diameterTop || e.diameter || 1,
|
|
s = 0 === e.diameterBottom ? 0 : e.diameterBottom || e.diameter || 1,
|
|
a = e.tessellation || 24,
|
|
c = e.subdivisions || 1,
|
|
l = !!e.hasRings,
|
|
u = !!e.enclose,
|
|
h = e.arc && (e.arc <= 0 || e.arc > 1) ? 1 : e.arc || 1,
|
|
d = 0 === e.sideOrientation ? 0 : e.sideOrientation || o.a.DEFAULTSIDE,
|
|
f = e.faceUV || new Array(3),
|
|
p = e.faceColors,
|
|
_ = 2 + (1 + (1 !== h && u ? 2 : 0)) * (l ? c : 1);
|
|
for (t = 0; t < _; t++) p && void 0 === p[t] && (p[t] = new n.f(1, 1, 1, 1));
|
|
for (t = 0; t < _; t++) f && void 0 === f[t] && (f[t] = new n.y(0, 0, 1, 1));
|
|
var g, m, v, y, b, T, E = new Array,
|
|
A = new Array,
|
|
x = new Array,
|
|
R = new Array,
|
|
P = new Array,
|
|
S = 2 * Math.PI * h / a,
|
|
C = (s - r) / 2 / i,
|
|
M = n.x.Zero(),
|
|
O = n.x.Zero(),
|
|
I = n.x.Zero(),
|
|
D = n.x.Zero(),
|
|
L = n.x.Zero(),
|
|
w = n.c.Y,
|
|
F = 1,
|
|
N = 1,
|
|
B = 0,
|
|
U = 0;
|
|
for (y = 0; y <= c; y++)
|
|
for (v = ((m = y / c) * (r - s) + s) / 2, F = l && 0 !== y && y !== c ? 2 : 1, T = 0; T < F; T++) {
|
|
for (l && (N += T), u && (N += 2 * T), b = 0; b <= a; b++) g = b * S, M.x = Math.cos(-g) * v, M.y = -i / 2 + m * i, M.z = Math.sin(-g) * v, 0 === r && y === c ? (O.x = x[x.length - 3 * (a + 1)], O.y = x[x.length - 3 * (a + 1) + 1], O.z = x[x.length - 3 * (a + 1) + 2]) : (O.x = M.x, O.z = M.z, O.y = Math.sqrt(O.x * O.x + O.z * O.z) * C, O.normalize()), 0 === b && (I.copyFrom(M), D.copyFrom(O)), A.push(M.x, M.y, M.z), x.push(O.x, O.y, O.z), U = l ? B !== N ? f[N].y : f[N].w : f[N].y + (f[N].w - f[N].y) * m, R.push(f[N].x + (f[N].z - f[N].x) * b / a, U), p && P.push(p[N].r, p[N].g, p[N].b, p[N].a);
|
|
1 !== h && u && (A.push(M.x, M.y, M.z), A.push(0, M.y, 0), A.push(0, M.y, 0), A.push(I.x, I.y, I.z), n.x.CrossToRef(w, O, L), L.normalize(), x.push(L.x, L.y, L.z, L.x, L.y, L.z), n.x.CrossToRef(D, w, L), L.normalize(), x.push(L.x, L.y, L.z, L.x, L.y, L.z), U = l ? B !== N ? f[N + 1].y : f[N + 1].w : f[N + 1].y + (f[N + 1].w - f[N + 1].y) * m, R.push(f[N + 1].x, U), R.push(f[N + 1].z, U), U = l ? B !== N ? f[N + 2].y : f[N + 2].w : f[N + 2].y + (f[N + 2].w - f[N + 2].y) * m, R.push(f[N + 2].x, U), R.push(f[N + 2].z, U), p && (P.push(p[N + 1].r, p[N + 1].g, p[N + 1].b, p[N + 1].a), P.push(p[N + 1].r, p[N + 1].g, p[N + 1].b, p[N + 1].a), P.push(p[N + 2].r, p[N + 2].g, p[N + 2].b, p[N + 2].a), P.push(p[N + 2].r, p[N + 2].g, p[N + 2].b, p[N + 2].a))), B !== N && (B = N)
|
|
}
|
|
var V = 1 !== h && u ? a + 4 : a;
|
|
for (y = 0, N = 0; N < c; N++) {
|
|
var G = 0,
|
|
k = 0,
|
|
z = 0,
|
|
j = 0;
|
|
for (b = 0; b < a; b++) G = y * (V + 1) + b, k = (y + 1) * (V + 1) + b, z = y * (V + 1) + (b + 1), j = (y + 1) * (V + 1) + (b + 1), E.push(G, k, z), E.push(j, z, k);
|
|
1 !== h && u && (E.push(G + 2, k + 2, z + 2), E.push(j + 2, z + 2, k + 2), E.push(G + 4, k + 4, z + 4), E.push(j + 4, z + 4, k + 4)), y = l ? y + 2 : y + 1
|
|
}
|
|
var H = function(e) {
|
|
var t = e ? r / 2 : s / 2;
|
|
if (0 !== t) {
|
|
var o, c, l, u = e ? f[_ - 1] : f[0],
|
|
d = null;
|
|
p && (d = e ? p[_ - 1] : p[0]);
|
|
var g = A.length / 3,
|
|
m = e ? i / 2 : -i / 2,
|
|
v = new n.x(0, m, 0);
|
|
A.push(v.x, v.y, v.z), x.push(0, e ? 1 : -1, 0), R.push(u.x + .5 * (u.z - u.x), u.y + .5 * (u.w - u.y)), d && P.push(d.r, d.g, d.b, d.a);
|
|
var y = new n.w(.5, .5);
|
|
for (l = 0; l <= a; l++) {
|
|
o = 2 * Math.PI * l * h / a;
|
|
var b = Math.cos(-o),
|
|
T = Math.sin(-o);
|
|
c = new n.x(b * t, m, T * t);
|
|
var S = new n.w(b * y.x + .5, T * y.y + .5);
|
|
A.push(c.x, c.y, c.z), x.push(0, e ? 1 : -1, 0), R.push(u.x + (u.z - u.x) * S.x, u.y + (u.w - u.y) * S.y), d && P.push(d.r, d.g, d.b, d.a)
|
|
}
|
|
for (l = 0; l < a; l++) e ? (E.push(g), E.push(g + (l + 2)), E.push(g + (l + 1))) : (E.push(g), E.push(g + (l + 1)), E.push(g + (l + 2)))
|
|
}
|
|
};
|
|
H(!1), H(!0), o.a._ComputeSides(d, A, E, x, R, e.frontUVs, e.backUVs);
|
|
var W = new o.a;
|
|
return W.indices = E, W.positions = A, W.normals = x, W.uvs = R, p && (W.colors = P), W
|
|
}, r.a.CreateCylinder = function(e, t, i, n, o, c, l, u, h) {
|
|
void 0 !== l && l instanceof s.a || (void 0 !== l && (h = u || r.a.DEFAULTSIDE, u = l), l = c, c = 1);
|
|
var d = {
|
|
height: t,
|
|
diameterTop: i,
|
|
diameterBottom: n,
|
|
tessellation: o,
|
|
subdivisions: c,
|
|
sideOrientation: h,
|
|
updatable: u
|
|
};
|
|
return a.CreateCylinder(e, d, l)
|
|
};
|
|
var a = function() {
|
|
function e() {}
|
|
return e.CreateCylinder = function(e, t, i) {
|
|
var n = new r.a(e, i);
|
|
return t.sideOrientation = r.a._GetDefaultSideOrientation(t.sideOrientation), n._originalBuilderSideOrientation = t.sideOrientation, o.a.CreateCylinder(t).applyToMesh(n, t.updatable), n
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return u
|
|
});
|
|
var n = i(11),
|
|
r = i(16),
|
|
o = i(8),
|
|
s = i(0),
|
|
a = i(17),
|
|
c = i(39),
|
|
l = i(45),
|
|
u = (i(80), function() {
|
|
function e(e) {
|
|
this._useAlternatePickedPointAboveMaxDragAngleDragSpeed = -1.1, this.maxDragAngle = 0, this._useAlternatePickedPointAboveMaxDragAngle = !1, this.currentDraggingPointerID = -1, this.dragging = !1, this.dragDeltaRatio = .2, this.updateDragPlane = !0, this._debugMode = !1, this._moving = !1, this.onDragObservable = new o.c, this.onDragStartObservable = new o.c, this.onDragEndObservable = new o.c, this.moveAttached = !0, this.enabled = !0, this.detachCameraControls = !0, this.useObjectOrienationForDragging = !0, this.validateDrag = function(e) {
|
|
return !0
|
|
}, this._tmpVector = new s.x(0, 0, 0), this._alternatePickedPoint = new s.x(0, 0, 0), this._worldDragAxis = new s.x(0, 0, 0), this._targetPosition = new s.x(0, 0, 0), this._attachedElement = null, this._startDragRay = new c.a(new s.x, new s.x), this._lastPointerRay = {}, this._dragDelta = new s.x, this._pointA = new s.x(0, 0, 0), this._pointB = new s.x(0, 0, 0), this._pointC = new s.x(0, 0, 0), this._lineA = new s.x(0, 0, 0), this._lineB = new s.x(0, 0, 0), this._localAxis = new s.x(0, 0, 0), this._lookAt = new s.x(0, 0, 0), this._options = e || {};
|
|
var t = 0;
|
|
if (this._options.dragAxis && t++, this._options.dragPlaneNormal && t++, t > 1) throw "Multiple drag modes specified in dragBehavior options. Only one expected"
|
|
}
|
|
return Object.defineProperty(e.prototype, "name", {
|
|
get: function() {
|
|
return "PointerDrag"
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.init = function() {}, e.prototype.attach = function(t) {
|
|
var i = this;
|
|
this._scene = t.getScene(), this._attachedNode = t, e._planeScene || (this._debugMode ? e._planeScene = this._scene : (e._planeScene = new r.a(this._scene.getEngine(), {
|
|
virtual: !0
|
|
}), e._planeScene.detachControl(), this._scene.onDisposeObservable.addOnce(function() {
|
|
e._planeScene.dispose(), e._planeScene = null
|
|
}))), this._dragPlane = n.a.CreatePlane("pointerDragPlane", this._debugMode ? 1 : 1e4, e._planeScene, !1, n.a.DOUBLESIDE), this.lastDragPosition = new s.x(0, 0, 0);
|
|
this._pointerObserver = this._scene.onPointerObservable.add(function(t, n) {
|
|
var r;
|
|
if (i.enabled)
|
|
if (t.type == a.a.POINTERDOWN) !i.dragging && t.pickInfo && t.pickInfo.hit && t.pickInfo.pickedMesh && t.pickInfo.pickedPoint && t.pickInfo.ray && (r = t.pickInfo.pickedMesh, i._attachedNode == r || r.isDescendantOf(i._attachedNode)) && i._startDrag(t.event.pointerId, t.pickInfo.ray, t.pickInfo.pickedPoint);
|
|
else if (t.type == a.a.POINTERUP) i.currentDraggingPointerID == t.event.pointerId && i.releaseDrag();
|
|
else if (t.type == a.a.POINTERMOVE) {
|
|
var o = t.event.pointerId;
|
|
i.currentDraggingPointerID === e._AnyMouseID && o !== e._AnyMouseID && "mouse" == t.event.pointerType && (i._lastPointerRay[i.currentDraggingPointerID] && (i._lastPointerRay[o] = i._lastPointerRay[i.currentDraggingPointerID], delete i._lastPointerRay[i.currentDraggingPointerID]), i.currentDraggingPointerID = o), i._lastPointerRay[o] || (i._lastPointerRay[o] = new c.a(new s.x, new s.x)), t.pickInfo && t.pickInfo.ray && (i._lastPointerRay[o].origin.copyFrom(t.pickInfo.ray.origin), i._lastPointerRay[o].direction.copyFrom(t.pickInfo.ray.direction), i.currentDraggingPointerID == o && i.dragging && i._moveDrag(t.pickInfo.ray))
|
|
}
|
|
}), this._beforeRenderObserver = this._scene.onBeforeRenderObservable.add(function() {
|
|
i._moving && i.moveAttached && (l.a._RemoveAndStorePivotPoint(i._attachedNode), i._targetPosition.subtractToRef(i._attachedNode.absolutePosition, i._tmpVector), i._tmpVector.scaleInPlace(i.dragDeltaRatio), i._attachedNode.getAbsolutePosition().addToRef(i._tmpVector, i._tmpVector), i.validateDrag(i._tmpVector) && i._attachedNode.setAbsolutePosition(i._tmpVector), l.a._RestorePivotPoint(i._attachedNode))
|
|
})
|
|
}, e.prototype.releaseDrag = function() {
|
|
this.dragging = !1, this.onDragEndObservable.notifyObservers({
|
|
dragPlanePoint: this.lastDragPosition,
|
|
pointerId: this.currentDraggingPointerID
|
|
}), this.currentDraggingPointerID = -1, this._moving = !1, this.detachCameraControls && this._attachedElement && this._scene.activeCamera && !this._scene.activeCamera.leftCamera && this._scene.activeCamera.attachControl(this._attachedElement, !0)
|
|
}, e.prototype.startDrag = function(t, i, n) {
|
|
void 0 === t && (t = e._AnyMouseID), this._startDrag(t, i, n);
|
|
var r = this._lastPointerRay[t];
|
|
t === e._AnyMouseID && (r = this._lastPointerRay[Object.keys(this._lastPointerRay)[0]]), r && this._moveDrag(r)
|
|
}, e.prototype._startDrag = function(e, t, i) {
|
|
if (this._scene.activeCamera && !this.dragging && this._attachedNode) {
|
|
l.a._RemoveAndStorePivotPoint(this._attachedNode), t ? (this._startDragRay.direction.copyFrom(t.direction), this._startDragRay.origin.copyFrom(t.origin)) : (this._startDragRay.origin.copyFrom(this._scene.activeCamera.position), this._attachedNode.getWorldMatrix().getTranslationToRef(this._tmpVector), this._tmpVector.subtractToRef(this._scene.activeCamera.position, this._startDragRay.direction)), this._updateDragPlanePosition(this._startDragRay, i || this._tmpVector);
|
|
var n = this._pickWithRayOnDragPlane(this._startDragRay);
|
|
n && (this.dragging = !0, this.currentDraggingPointerID = e, this.lastDragPosition.copyFrom(n), this.onDragStartObservable.notifyObservers({
|
|
dragPlanePoint: n,
|
|
pointerId: this.currentDraggingPointerID
|
|
}), this._targetPosition.copyFrom(this._attachedNode.absolutePosition), this.detachCameraControls && this._scene.activeCamera && !this._scene.activeCamera.leftCamera && (this._scene.activeCamera.inputs.attachedElement ? (this._attachedElement = this._scene.activeCamera.inputs.attachedElement, this._scene.activeCamera.detachControl(this._scene.activeCamera.inputs.attachedElement)) : this._attachedElement = null)), l.a._RestorePivotPoint(this._attachedNode)
|
|
}
|
|
}, e.prototype._moveDrag = function(e) {
|
|
this._moving = !0;
|
|
var t = this._pickWithRayOnDragPlane(e);
|
|
if (t) {
|
|
this.updateDragPlane && this._updateDragPlanePosition(e, t);
|
|
var i = 0;
|
|
this._options.dragAxis ? (s.x.TransformCoordinatesToRef(this._options.dragAxis, this._attachedNode.getWorldMatrix().getRotationMatrix(), this._worldDragAxis), t.subtractToRef(this.lastDragPosition, this._tmpVector), i = s.x.Dot(this._tmpVector, this._worldDragAxis), this._worldDragAxis.scaleToRef(i, this._dragDelta)) : (i = this._dragDelta.length(), t.subtractToRef(this.lastDragPosition, this._dragDelta)), this._targetPosition.addInPlace(this._dragDelta), this.onDragObservable.notifyObservers({
|
|
dragDistance: i,
|
|
delta: this._dragDelta,
|
|
dragPlanePoint: t,
|
|
dragPlaneNormal: this._dragPlane.forward,
|
|
pointerId: this.currentDraggingPointerID
|
|
}), this.lastDragPosition.copyFrom(t)
|
|
}
|
|
}, e.prototype._pickWithRayOnDragPlane = function(t) {
|
|
var i = this;
|
|
if (!t) return null;
|
|
var n = Math.acos(s.x.Dot(this._dragPlane.forward, t.direction));
|
|
if (n > Math.PI / 2 && (n = Math.PI - n), this.maxDragAngle > 0 && n > this.maxDragAngle) {
|
|
if (this._useAlternatePickedPointAboveMaxDragAngle) {
|
|
this._tmpVector.copyFrom(t.direction), this._attachedNode.absolutePosition.subtractToRef(t.origin, this._alternatePickedPoint), this._alternatePickedPoint.normalize(), this._alternatePickedPoint.scaleInPlace(this._useAlternatePickedPointAboveMaxDragAngleDragSpeed * s.x.Dot(this._alternatePickedPoint, this._tmpVector)), this._tmpVector.addInPlace(this._alternatePickedPoint);
|
|
var r = s.x.Dot(this._dragPlane.forward, this._tmpVector);
|
|
return this._dragPlane.forward.scaleToRef(-r, this._alternatePickedPoint), this._alternatePickedPoint.addInPlace(this._tmpVector), this._alternatePickedPoint.addInPlace(this._attachedNode.absolutePosition), this._alternatePickedPoint
|
|
}
|
|
return null
|
|
}
|
|
var o = e._planeScene.pickWithRay(t, function(e) {
|
|
return e == i._dragPlane
|
|
});
|
|
return o && o.hit && o.pickedMesh && o.pickedPoint ? o.pickedPoint : null
|
|
}, e.prototype._updateDragPlanePosition = function(e, t) {
|
|
this._pointA.copyFrom(t), this._options.dragAxis ? (this.useObjectOrienationForDragging ? s.x.TransformCoordinatesToRef(this._options.dragAxis, this._attachedNode.getWorldMatrix().getRotationMatrix(), this._localAxis) : this._localAxis.copyFrom(this._options.dragAxis), this._pointA.addToRef(this._localAxis, this._pointB), e.origin.subtractToRef(this._pointA, this._pointC), this._pointA.addToRef(this._pointC.normalize(), this._pointC), this._pointB.subtractToRef(this._pointA, this._lineA), this._pointC.subtractToRef(this._pointA, this._lineB), s.x.CrossToRef(this._lineA, this._lineB, this._lookAt), s.x.CrossToRef(this._lineA, this._lookAt, this._lookAt), this._lookAt.normalize(), this._dragPlane.position.copyFrom(this._pointA), this._pointA.addToRef(this._lookAt, this._lookAt), this._dragPlane.lookAt(this._lookAt)) : this._options.dragPlaneNormal ? (this.useObjectOrienationForDragging ? s.x.TransformCoordinatesToRef(this._options.dragPlaneNormal, this._attachedNode.getWorldMatrix().getRotationMatrix(), this._localAxis) : this._localAxis.copyFrom(this._options.dragPlaneNormal), this._dragPlane.position.copyFrom(this._pointA), this._pointA.addToRef(this._localAxis, this._lookAt), this._dragPlane.lookAt(this._lookAt)) : (this._dragPlane.position.copyFrom(this._pointA), this._dragPlane.lookAt(e.origin)), this._dragPlane.position.copyFrom(this._attachedNode.absolutePosition), this._dragPlane.computeWorldMatrix(!0)
|
|
}, e.prototype.detach = function() {
|
|
this._pointerObserver && this._scene.onPointerObservable.remove(this._pointerObserver), this._beforeRenderObserver && this._scene.onBeforeRenderObservable.remove(this._beforeRenderObserver), this.releaseDrag()
|
|
}, e._AnyMouseID = -2, e
|
|
}())
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
});
|
|
var n = i(3),
|
|
r = function() {
|
|
function e() {}
|
|
return Object.defineProperty(e, "ForceFullSceneLoadingForIncremental", {
|
|
get: function() {
|
|
return e._ForceFullSceneLoadingForIncremental
|
|
},
|
|
set: function(t) {
|
|
e._ForceFullSceneLoadingForIncremental = t
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ShowLoadingScreen", {
|
|
get: function() {
|
|
return e._ShowLoadingScreen
|
|
},
|
|
set: function(t) {
|
|
e._ShowLoadingScreen = t
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "loggingLevel", {
|
|
get: function() {
|
|
return e._loggingLevel
|
|
},
|
|
set: function(t) {
|
|
e._loggingLevel = t
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "CleanBoneMatrixWeights", {
|
|
get: function() {
|
|
return e._CleanBoneMatrixWeights
|
|
},
|
|
set: function(t) {
|
|
e._CleanBoneMatrixWeights = t
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e._ForceFullSceneLoadingForIncremental = !1, e._ShowLoadingScreen = !0, e._CleanBoneMatrixWeights = !1, e._loggingLevel = n.a.SCENELOADER_NO_LOGGING, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "helperFunctions",
|
|
r = "const float PI=3.1415926535897932384626433832795;\nconst float LinearEncodePowerApprox=2.2;\nconst float GammaEncodePowerApprox=1.0/LinearEncodePowerApprox;\nconst vec3 LuminanceEncodeApprox=vec3(0.2126,0.7152,0.0722);\nconst float Epsilon=0.0000001;\n#define saturate(x) clamp(x,0.0,1.0)\n#define absEps(x) abs(x)+Epsilon\n#define maxEps(x) max(x,Epsilon)\n#define saturateEps(x) clamp(x,Epsilon,1.0)\nmat3 transposeMat3(mat3 inMatrix) {\nvec3 i0=inMatrix[0];\nvec3 i1=inMatrix[1];\nvec3 i2=inMatrix[2];\nmat3 outMatrix=mat3(\nvec3(i0.x,i1.x,i2.x),\nvec3(i0.y,i1.y,i2.y),\nvec3(i0.z,i1.z,i2.z)\n);\nreturn outMatrix;\n}\n\nmat3 inverseMat3(mat3 inMatrix) {\nfloat a00=inMatrix[0][0],a01=inMatrix[0][1],a02=inMatrix[0][2];\nfloat a10=inMatrix[1][0],a11=inMatrix[1][1],a12=inMatrix[1][2];\nfloat a20=inMatrix[2][0],a21=inMatrix[2][1],a22=inMatrix[2][2];\nfloat b01=a22*a11-a12*a21;\nfloat b11=-a22*a10+a12*a20;\nfloat b21=a21*a10-a11*a20;\nfloat det=a00*b01+a01*b11+a02*b21;\nreturn mat3(b01,(-a22*a01+a02*a21),(a12*a01-a02*a11),\nb11,(a22*a00-a02*a20),(-a12*a00+a02*a10),\nb21,(-a21*a00+a01*a20),(a11*a00-a01*a10))/det;\n}\nvec3 toLinearSpace(vec3 color)\n{\nreturn pow(color,vec3(LinearEncodePowerApprox));\n}\nvec3 toGammaSpace(vec3 color)\n{\nreturn pow(color,vec3(GammaEncodePowerApprox));\n}\nfloat square(float value)\n{\nreturn value*value;\n}\nfloat pow5(float value) {\nfloat sq=value*value;\nreturn sq*sq*value;\n}\nfloat getLuminance(vec3 color)\n{\nreturn clamp(dot(color,LuminanceEncodeApprox),0.,1.);\n}\n\nfloat getRand(vec2 seed) {\nreturn fract(sin(dot(seed.xy ,vec2(12.9898,78.233)))*43758.5453);\n}\nfloat dither(vec2 seed,float varianceAmount) {\nfloat rand=getRand(seed);\nfloat dither=mix(-varianceAmount/255.0,varianceAmount/255.0,rand);\nreturn dither;\n}\n\nconst float rgbdMaxRange=255.0;\nvec4 toRGBD(vec3 color) {\nfloat maxRGB=maxEps(max(color.r,max(color.g,color.b)));\nfloat D=max(rgbdMaxRange/maxRGB,1.);\nD=clamp(floor(D)/255.0,0.,1.);\n\nvec3 rgb=color.rgb*D;\n\nrgb=toGammaSpace(rgb);\nreturn vec4(rgb,D);\n}\nvec3 fromRGBD(vec4 rgbd) {\n\nrgbd.rgb=toLinearSpace(rgbd.rgb);\n\nreturn rgbd.rgb/rgbd.a;\n}";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return d
|
|
});
|
|
var n = i(0),
|
|
r = i(13),
|
|
o = i(4),
|
|
s = i(49),
|
|
a = i(55),
|
|
c = i(43),
|
|
l = i(3),
|
|
u = i(9),
|
|
h = i(29),
|
|
d = function() {
|
|
function e(e, t, i, n, r) {
|
|
void 0 === n && (n = !1), void 0 === r && (r = null), this.delayLoadState = l.a.DELAYLOADSTATE_NONE, this._totalVertices = 0, this._isDisposed = !1, this._indexBufferIsUpdatable = !1, this.id = e, this.uniqueId = t.getUniqueId(), this._engine = t.getEngine(), this._meshes = [], this._scene = t, this._vertexBuffers = {}, this._indices = [], this._updatable = n, i ? this.setAllVerticesData(i, n) : (this._totalVertices = 0, this._indices = []), this._engine.getCaps().vertexArrayObject && (this._vertexArrayObjects = {}), r && (this.applyToMesh(r), r.computeWorldMatrix(!0))
|
|
}
|
|
return Object.defineProperty(e.prototype, "boundingBias", {
|
|
get: function() {
|
|
return this._boundingBias
|
|
},
|
|
set: function(e) {
|
|
this._boundingBias ? this._boundingBias.copyFrom(e) : this._boundingBias = e.clone(), this._updateBoundingInfo(!0, null)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.CreateGeometryForMesh = function(t) {
|
|
var i = new e(e.RandomId(), t.getScene());
|
|
return i.applyToMesh(t), i
|
|
}, Object.defineProperty(e.prototype, "extend", {
|
|
get: function() {
|
|
return this._extend
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getScene = function() {
|
|
return this._scene
|
|
}, e.prototype.getEngine = function() {
|
|
return this._engine
|
|
}, e.prototype.isReady = function() {
|
|
return this.delayLoadState === l.a.DELAYLOADSTATE_LOADED || this.delayLoadState === l.a.DELAYLOADSTATE_NONE
|
|
}, Object.defineProperty(e.prototype, "doNotSerialize", {
|
|
get: function() {
|
|
for (var e = 0; e < this._meshes.length; e++)
|
|
if (!this._meshes[e].doNotSerialize) return !1;
|
|
return !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._rebuild = function() {
|
|
for (var e in this._vertexArrayObjects && (this._vertexArrayObjects = {}), 0 !== this._meshes.length && this._indices && (this._indexBuffer = this._engine.createIndexBuffer(this._indices)), this._vertexBuffers) {
|
|
this._vertexBuffers[e]._rebuild()
|
|
}
|
|
}, e.prototype.setAllVerticesData = function(e, t) {
|
|
e.applyToGeometry(this, t), this.notifyUpdate()
|
|
}, e.prototype.setVerticesData = function(e, t, i, n) {
|
|
void 0 === i && (i = !1);
|
|
var r = new o.b(this._engine, t, e, i, 0 === this._meshes.length, n);
|
|
this.setVerticesBuffer(r)
|
|
}, e.prototype.removeVerticesData = function(e) {
|
|
this._vertexBuffers[e] && (this._vertexBuffers[e].dispose(), delete this._vertexBuffers[e])
|
|
}, e.prototype.setVerticesBuffer = function(e, t) {
|
|
void 0 === t && (t = null);
|
|
var i = e.getKind();
|
|
if (this._vertexBuffers[i] && this._vertexBuffers[i].dispose(), this._vertexBuffers[i] = e, i === o.b.PositionKind) {
|
|
var n = e.getData();
|
|
null != t ? this._totalVertices = t : null != n && (this._totalVertices = n.length / (e.byteStride / 4)), this._updateExtend(n), this._resetPointsArrayCache();
|
|
for (var r = this._meshes, s = r.length, a = 0; a < s; a++) {
|
|
var l = r[a];
|
|
l._boundingInfo = new c.a(this._extend.minimum, this._extend.maximum), l._createGlobalSubMesh(!1), l.computeWorldMatrix(!0)
|
|
}
|
|
}
|
|
this.notifyUpdate(i), this._vertexArrayObjects && (this._disposeVertexArrayObjects(), this._vertexArrayObjects = {})
|
|
}, e.prototype.updateVerticesDataDirectly = function(e, t, i, n) {
|
|
void 0 === n && (n = !1);
|
|
var r = this.getVertexBuffer(e);
|
|
r && (r.updateDirectly(t, i, n), this.notifyUpdate(e))
|
|
}, e.prototype.updateVerticesData = function(e, t, i) {
|
|
void 0 === i && (i = !1);
|
|
var n = this.getVertexBuffer(e);
|
|
n && (n.update(t), e === o.b.PositionKind && this._updateBoundingInfo(i, t), this.notifyUpdate(e))
|
|
}, e.prototype._updateBoundingInfo = function(e, t) {
|
|
if (e && this._updateExtend(t), this._resetPointsArrayCache(), e)
|
|
for (var i = 0, n = this._meshes; i < n.length; i++) {
|
|
var r = n[i];
|
|
r._boundingInfo ? r._boundingInfo.reConstruct(this._extend.minimum, this._extend.maximum) : r._boundingInfo = new c.a(this._extend.minimum, this._extend.maximum);
|
|
for (var o = 0, s = r.subMeshes; o < s.length; o++) {
|
|
s[o].refreshBoundingInfo()
|
|
}
|
|
}
|
|
}, e.prototype._bind = function(e, t) {
|
|
if (e) {
|
|
void 0 === t && (t = this._indexBuffer);
|
|
var i = this.getVertexBuffers();
|
|
i && (t == this._indexBuffer && this._vertexArrayObjects ? (this._vertexArrayObjects[e.key] || (this._vertexArrayObjects[e.key] = this._engine.recordVertexArrayObject(i, t, e)), this._engine.bindVertexArrayObject(this._vertexArrayObjects[e.key], t)) : this._engine.bindBuffers(i, t, e))
|
|
}
|
|
}, e.prototype.getTotalVertices = function() {
|
|
return this.isReady() ? this._totalVertices : 0
|
|
}, e.prototype.getVerticesData = function(e, t, i) {
|
|
var n = this.getVertexBuffer(e);
|
|
if (!n) return null;
|
|
var r = n.getData();
|
|
if (!r) return null;
|
|
var s = n.getSize() * o.b.GetTypeByteLength(n.type),
|
|
a = this._totalVertices * n.getSize();
|
|
if (n.type !== o.b.FLOAT || n.byteStride !== s) {
|
|
var c = [];
|
|
return n.forEach(a, function(e) {
|
|
return c.push(e)
|
|
}), c
|
|
}
|
|
if (!(r instanceof Array || r instanceof Float32Array) || 0 !== n.byteOffset || r.length !== a) {
|
|
if (r instanceof Array) {
|
|
var l = n.byteOffset / 4;
|
|
return u.h.Slice(r, l, l + a)
|
|
}
|
|
if (r instanceof ArrayBuffer) return new Float32Array(r, n.byteOffset, a);
|
|
l = r.byteOffset + n.byteOffset;
|
|
if (i || t && 1 !== this._meshes.length) {
|
|
var h = new Float32Array(a),
|
|
d = new Float32Array(r.buffer, l, a);
|
|
return h.set(d), h
|
|
}
|
|
return new Float32Array(r.buffer, l, a)
|
|
}
|
|
return i || t && 1 !== this._meshes.length ? u.h.Slice(r) : r
|
|
}, e.prototype.isVertexBufferUpdatable = function(e) {
|
|
var t = this._vertexBuffers[e];
|
|
return !!t && t.isUpdatable()
|
|
}, e.prototype.getVertexBuffer = function(e) {
|
|
return this.isReady() ? this._vertexBuffers[e] : null
|
|
}, e.prototype.getVertexBuffers = function() {
|
|
return this.isReady() ? this._vertexBuffers : null
|
|
}, e.prototype.isVerticesDataPresent = function(e) {
|
|
return this._vertexBuffers ? void 0 !== this._vertexBuffers[e] : !!this._delayInfo && -1 !== this._delayInfo.indexOf(e)
|
|
}, e.prototype.getVerticesDataKinds = function() {
|
|
var e, t = [];
|
|
if (!this._vertexBuffers && this._delayInfo)
|
|
for (e in this._delayInfo) t.push(e);
|
|
else
|
|
for (e in this._vertexBuffers) t.push(e);
|
|
return t
|
|
}, e.prototype.updateIndices = function(e, t, i) {
|
|
if (void 0 === i && (i = !1), this._indexBuffer)
|
|
if (this._indexBufferIsUpdatable) {
|
|
var n = e.length !== this._indices.length;
|
|
if (i || (this._indices = e.slice()), this._engine.updateDynamicIndexBuffer(this._indexBuffer, e, t), n)
|
|
for (var r = 0, o = this._meshes; r < o.length; r++) {
|
|
o[r]._createGlobalSubMesh(!0)
|
|
}
|
|
} else this.setIndices(e, null, !0)
|
|
}, e.prototype.setIndices = function(e, t, i) {
|
|
void 0 === t && (t = null), void 0 === i && (i = !1), this._indexBuffer && this._engine._releaseBuffer(this._indexBuffer), this._disposeVertexArrayObjects(), this._indices = e, this._indexBufferIsUpdatable = i, 0 !== this._meshes.length && this._indices && (this._indexBuffer = this._engine.createIndexBuffer(this._indices, i)), null != t && (this._totalVertices = t);
|
|
for (var n = 0, r = this._meshes; n < r.length; n++) {
|
|
r[n]._createGlobalSubMesh(!0)
|
|
}
|
|
this.notifyUpdate()
|
|
}, e.prototype.getTotalIndices = function() {
|
|
return this.isReady() ? this._indices.length : 0
|
|
}, e.prototype.getIndices = function(e, t) {
|
|
if (!this.isReady()) return null;
|
|
var i = this._indices;
|
|
if (t || e && 1 !== this._meshes.length) {
|
|
for (var n = i.length, r = [], o = 0; o < n; o++) r.push(i[o]);
|
|
return r
|
|
}
|
|
return i
|
|
}, e.prototype.getIndexBuffer = function() {
|
|
return this.isReady() ? this._indexBuffer : null
|
|
}, e.prototype._releaseVertexArrayObject = function(e) {
|
|
void 0 === e && (e = null), e && this._vertexArrayObjects && this._vertexArrayObjects[e.key] && (this._engine.releaseVertexArrayObject(this._vertexArrayObjects[e.key]), delete this._vertexArrayObjects[e.key])
|
|
}, e.prototype.releaseForMesh = function(e, t) {
|
|
var i = this._meshes,
|
|
n = i.indexOf(e); - 1 !== n && (i.splice(n, 1), e._geometry = null, 0 === i.length && t && this.dispose())
|
|
}, e.prototype.applyToMesh = function(e) {
|
|
if (e._geometry !== this) {
|
|
var t = e._geometry;
|
|
t && t.releaseForMesh(e);
|
|
var i = this._meshes;
|
|
e._geometry = this, this._scene.pushGeometry(this), i.push(e), this.isReady() ? this._applyToMesh(e) : e._boundingInfo = this._boundingInfo
|
|
}
|
|
}, e.prototype._updateExtend = function(e) {
|
|
void 0 === e && (e = null), e || (e = this.getVerticesData(o.b.PositionKind)), this._extend = u.h.ExtractMinAndMax(e, 0, this._totalVertices, this.boundingBias, 3)
|
|
}, e.prototype._applyToMesh = function(e) {
|
|
var t = this._meshes.length;
|
|
for (var i in this._vertexBuffers) {
|
|
1 === t && this._vertexBuffers[i].create();
|
|
var n = this._vertexBuffers[i].getBuffer();
|
|
n && (n.references = t), i === o.b.PositionKind && (this._extend || this._updateExtend(), e._boundingInfo = new c.a(this._extend.minimum, this._extend.maximum), e._createGlobalSubMesh(!1), e._updateBoundingInfo())
|
|
}
|
|
1 === t && this._indices && this._indices.length > 0 && (this._indexBuffer = this._engine.createIndexBuffer(this._indices)), this._indexBuffer && (this._indexBuffer.references = t), e._syncGeometryWithMorphTargetManager(), e.synchronizeInstances()
|
|
}, e.prototype.notifyUpdate = function(e) {
|
|
this.onGeometryUpdated && this.onGeometryUpdated(this, e);
|
|
for (var t = 0, i = this._meshes; t < i.length; t++) {
|
|
i[t]._markSubMeshesAsAttributesDirty()
|
|
}
|
|
}, e.prototype.load = function(e, t) {
|
|
this.delayLoadState !== l.a.DELAYLOADSTATE_LOADING && (this.isReady() ? t && t() : (this.delayLoadState = l.a.DELAYLOADSTATE_LOADING, this._queueLoad(e, t)))
|
|
}, e.prototype._queueLoad = function(e, t) {
|
|
var i = this;
|
|
this.delayLoadingFile && (e._addPendingData(this), e._loadFile(this.delayLoadingFile, function(n) {
|
|
if (i._delayLoadingFunction) {
|
|
i._delayLoadingFunction(JSON.parse(n), i), i.delayLoadState = l.a.DELAYLOADSTATE_LOADED, i._delayInfo = [], e._removePendingData(i);
|
|
for (var r = i._meshes, o = r.length, s = 0; s < o; s++) i._applyToMesh(r[s]);
|
|
t && t()
|
|
}
|
|
}, void 0, !0))
|
|
}, e.prototype.toLeftHanded = function() {
|
|
var e = this.getIndices(!1);
|
|
if (null != e && e.length > 0) {
|
|
for (var t = 0; t < e.length; t += 3) {
|
|
var i = e[t + 0];
|
|
e[t + 0] = e[t + 2], e[t + 2] = i
|
|
}
|
|
this.setIndices(e)
|
|
}
|
|
var n = this.getVerticesData(o.b.PositionKind, !1);
|
|
if (null != n && n.length > 0) {
|
|
for (t = 0; t < n.length; t += 3) n[t + 2] = -n[t + 2];
|
|
this.setVerticesData(o.b.PositionKind, n, !1)
|
|
}
|
|
var r = this.getVerticesData(o.b.NormalKind, !1);
|
|
if (null != r && r.length > 0) {
|
|
for (t = 0; t < r.length; t += 3) r[t + 2] = -r[t + 2];
|
|
this.setVerticesData(o.b.NormalKind, r, !1)
|
|
}
|
|
}, e.prototype._resetPointsArrayCache = function() {
|
|
this._positions = null
|
|
}, e.prototype._generatePointsArray = function() {
|
|
if (this._positions) return !0;
|
|
var e = this.getVerticesData(o.b.PositionKind);
|
|
if (!e || 0 === e.length) return !1;
|
|
this._positions = [];
|
|
for (var t = 0; t < e.length; t += 3) this._positions.push(n.x.FromArray(e, t));
|
|
return !0
|
|
}, e.prototype.isDisposed = function() {
|
|
return this._isDisposed
|
|
}, e.prototype._disposeVertexArrayObjects = function() {
|
|
if (this._vertexArrayObjects) {
|
|
for (var e in this._vertexArrayObjects) this._engine.releaseVertexArrayObject(this._vertexArrayObjects[e]);
|
|
this._vertexArrayObjects = {}
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
var e, t = this._meshes,
|
|
i = t.length;
|
|
for (e = 0; e < i; e++) this.releaseForMesh(t[e]);
|
|
for (var n in this._meshes = [], this._disposeVertexArrayObjects(), this._vertexBuffers) this._vertexBuffers[n].dispose();
|
|
this._vertexBuffers = {}, this._totalVertices = 0, this._indexBuffer && this._engine._releaseBuffer(this._indexBuffer), this._indexBuffer = null, this._indices = [], this.delayLoadState = l.a.DELAYLOADSTATE_NONE, this.delayLoadingFile = null, this._delayLoadingFunction = null, this._delayInfo = [], this._boundingInfo = null, this._scene.removeGeometry(this), this._isDisposed = !0
|
|
}, e.prototype.copy = function(t) {
|
|
var i = new r.a;
|
|
i.indices = [];
|
|
var n = this.getIndices();
|
|
if (n)
|
|
for (var o = 0; o < n.length; o++) i.indices.push(n[o]);
|
|
var s, a = !1,
|
|
l = !1;
|
|
for (s in this._vertexBuffers) {
|
|
var u = this.getVerticesData(s);
|
|
if (u && (u instanceof Float32Array ? i.set(new Float32Array(u), s) : i.set(u.slice(0), s), !l)) {
|
|
var h = this.getVertexBuffer(s);
|
|
h && (l = !(a = h.isUpdatable()))
|
|
}
|
|
}
|
|
var d = new e(t, this._scene, i, a);
|
|
for (s in d.delayLoadState = this.delayLoadState, d.delayLoadingFile = this.delayLoadingFile, d._delayLoadingFunction = this._delayLoadingFunction, this._delayInfo) d._delayInfo = d._delayInfo || [], d._delayInfo.push(s);
|
|
return d._boundingInfo = new c.a(this._extend.minimum, this._extend.maximum), d
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.id = this.id, e.updatable = this._updatable, h.a && h.a.HasTags(this) && (e.tags = h.a.GetTags(this)), e
|
|
}, e.prototype.toNumberArray = function(e) {
|
|
return Array.isArray(e) ? e : Array.prototype.slice.call(e)
|
|
}, e.prototype.serializeVerticeData = function() {
|
|
var e = this.serialize();
|
|
return this.isVerticesDataPresent(o.b.PositionKind) && (e.positions = this.toNumberArray(this.getVerticesData(o.b.PositionKind)), this.isVertexBufferUpdatable(o.b.PositionKind) && (e.positions._updatable = !0)), this.isVerticesDataPresent(o.b.NormalKind) && (e.normals = this.toNumberArray(this.getVerticesData(o.b.NormalKind)), this.isVertexBufferUpdatable(o.b.NormalKind) && (e.normals._updatable = !0)), this.isVerticesDataPresent(o.b.TangentKind) && (e.tangets = this.toNumberArray(this.getVerticesData(o.b.TangentKind)), this.isVertexBufferUpdatable(o.b.TangentKind) && (e.tangets._updatable = !0)), this.isVerticesDataPresent(o.b.UVKind) && (e.uvs = this.toNumberArray(this.getVerticesData(o.b.UVKind)), this.isVertexBufferUpdatable(o.b.UVKind) && (e.uvs._updatable = !0)), this.isVerticesDataPresent(o.b.UV2Kind) && (e.uv2s = this.toNumberArray(this.getVerticesData(o.b.UV2Kind)), this.isVertexBufferUpdatable(o.b.UV2Kind) && (e.uv2s._updatable = !0)), this.isVerticesDataPresent(o.b.UV3Kind) && (e.uv3s = this.toNumberArray(this.getVerticesData(o.b.UV3Kind)), this.isVertexBufferUpdatable(o.b.UV3Kind) && (e.uv3s._updatable = !0)), this.isVerticesDataPresent(o.b.UV4Kind) && (e.uv4s = this.toNumberArray(this.getVerticesData(o.b.UV4Kind)), this.isVertexBufferUpdatable(o.b.UV4Kind) && (e.uv4s._updatable = !0)), this.isVerticesDataPresent(o.b.UV5Kind) && (e.uv5s = this.toNumberArray(this.getVerticesData(o.b.UV5Kind)), this.isVertexBufferUpdatable(o.b.UV5Kind) && (e.uv5s._updatable = !0)), this.isVerticesDataPresent(o.b.UV6Kind) && (e.uv6s = this.toNumberArray(this.getVerticesData(o.b.UV6Kind)), this.isVertexBufferUpdatable(o.b.UV6Kind) && (e.uv6s._updatable = !0)), this.isVerticesDataPresent(o.b.ColorKind) && (e.colors = this.toNumberArray(this.getVerticesData(o.b.ColorKind)), this.isVertexBufferUpdatable(o.b.ColorKind) && (e.colors._updatable = !0)), this.isVerticesDataPresent(o.b.MatricesIndicesKind) && (e.matricesIndices = this.toNumberArray(this.getVerticesData(o.b.MatricesIndicesKind)), e.matricesIndices._isExpanded = !0, this.isVertexBufferUpdatable(o.b.MatricesIndicesKind) && (e.matricesIndices._updatable = !0)), this.isVerticesDataPresent(o.b.MatricesWeightsKind) && (e.matricesWeights = this.toNumberArray(this.getVerticesData(o.b.MatricesWeightsKind)), this.isVertexBufferUpdatable(o.b.MatricesWeightsKind) && (e.matricesWeights._updatable = !0)), e.indices = this.toNumberArray(this.getIndices()), e
|
|
}, e.ExtractFromMesh = function(e, t) {
|
|
var i = e._geometry;
|
|
return i ? i.copy(t) : null
|
|
}, e.RandomId = function() {
|
|
return u.h.RandomId()
|
|
}, e._ImportGeometry = function(t, i) {
|
|
var r = i.getScene(),
|
|
a = t.geometryId;
|
|
if (a) {
|
|
var c = r.getGeometryByID(a);
|
|
c && c.applyToMesh(i)
|
|
} else if (t instanceof ArrayBuffer) {
|
|
var l = i._binaryInfo;
|
|
if (l.positionsAttrDesc && l.positionsAttrDesc.count > 0) {
|
|
var u = new Float32Array(t, l.positionsAttrDesc.offset, l.positionsAttrDesc.count);
|
|
i.setVerticesData(o.b.PositionKind, u, !1)
|
|
}
|
|
if (l.normalsAttrDesc && l.normalsAttrDesc.count > 0) {
|
|
var h = new Float32Array(t, l.normalsAttrDesc.offset, l.normalsAttrDesc.count);
|
|
i.setVerticesData(o.b.NormalKind, h, !1)
|
|
}
|
|
if (l.tangetsAttrDesc && l.tangetsAttrDesc.count > 0) {
|
|
var d = new Float32Array(t, l.tangetsAttrDesc.offset, l.tangetsAttrDesc.count);
|
|
i.setVerticesData(o.b.TangentKind, d, !1)
|
|
}
|
|
if (l.uvsAttrDesc && l.uvsAttrDesc.count > 0) {
|
|
var f = new Float32Array(t, l.uvsAttrDesc.offset, l.uvsAttrDesc.count);
|
|
i.setVerticesData(o.b.UVKind, f, !1)
|
|
}
|
|
if (l.uvs2AttrDesc && l.uvs2AttrDesc.count > 0) {
|
|
var p = new Float32Array(t, l.uvs2AttrDesc.offset, l.uvs2AttrDesc.count);
|
|
i.setVerticesData(o.b.UV2Kind, p, !1)
|
|
}
|
|
if (l.uvs3AttrDesc && l.uvs3AttrDesc.count > 0) {
|
|
var _ = new Float32Array(t, l.uvs3AttrDesc.offset, l.uvs3AttrDesc.count);
|
|
i.setVerticesData(o.b.UV3Kind, _, !1)
|
|
}
|
|
if (l.uvs4AttrDesc && l.uvs4AttrDesc.count > 0) {
|
|
var g = new Float32Array(t, l.uvs4AttrDesc.offset, l.uvs4AttrDesc.count);
|
|
i.setVerticesData(o.b.UV4Kind, g, !1)
|
|
}
|
|
if (l.uvs5AttrDesc && l.uvs5AttrDesc.count > 0) {
|
|
var m = new Float32Array(t, l.uvs5AttrDesc.offset, l.uvs5AttrDesc.count);
|
|
i.setVerticesData(o.b.UV5Kind, m, !1)
|
|
}
|
|
if (l.uvs6AttrDesc && l.uvs6AttrDesc.count > 0) {
|
|
var v = new Float32Array(t, l.uvs6AttrDesc.offset, l.uvs6AttrDesc.count);
|
|
i.setVerticesData(o.b.UV6Kind, v, !1)
|
|
}
|
|
if (l.colorsAttrDesc && l.colorsAttrDesc.count > 0) {
|
|
var y = new Float32Array(t, l.colorsAttrDesc.offset, l.colorsAttrDesc.count);
|
|
i.setVerticesData(o.b.ColorKind, y, !1, l.colorsAttrDesc.stride)
|
|
}
|
|
if (l.matricesIndicesAttrDesc && l.matricesIndicesAttrDesc.count > 0) {
|
|
for (var b = new Int32Array(t, l.matricesIndicesAttrDesc.offset, l.matricesIndicesAttrDesc.count), T = [], E = 0; E < b.length; E++) {
|
|
var A = b[E];
|
|
T.push(255 & A), T.push((65280 & A) >> 8), T.push((16711680 & A) >> 16), T.push(A >> 24)
|
|
}
|
|
i.setVerticesData(o.b.MatricesIndicesKind, T, !1)
|
|
}
|
|
if (l.matricesWeightsAttrDesc && l.matricesWeightsAttrDesc.count > 0) {
|
|
var x = new Float32Array(t, l.matricesWeightsAttrDesc.offset, l.matricesWeightsAttrDesc.count);
|
|
i.setVerticesData(o.b.MatricesWeightsKind, x, !1)
|
|
}
|
|
if (l.indicesAttrDesc && l.indicesAttrDesc.count > 0) {
|
|
var R = new Int32Array(t, l.indicesAttrDesc.offset, l.indicesAttrDesc.count);
|
|
i.setIndices(R, null)
|
|
}
|
|
if (l.subMeshesAttrDesc && l.subMeshesAttrDesc.count > 0) {
|
|
var P = new Int32Array(t, l.subMeshesAttrDesc.offset, 5 * l.subMeshesAttrDesc.count);
|
|
i.subMeshes = [];
|
|
for (E = 0; E < l.subMeshesAttrDesc.count; E++) {
|
|
var S = P[5 * E + 0],
|
|
C = P[5 * E + 1],
|
|
M = P[5 * E + 2],
|
|
O = P[5 * E + 3],
|
|
I = P[5 * E + 4];
|
|
s.b.AddToMesh(S, C, M, O, I, i)
|
|
}
|
|
}
|
|
} else if (t.positions && t.normals && t.indices) {
|
|
if (i.setVerticesData(o.b.PositionKind, t.positions, t.positions._updatable), i.setVerticesData(o.b.NormalKind, t.normals, t.normals._updatable), t.tangents && i.setVerticesData(o.b.TangentKind, t.tangents, t.tangents._updatable), t.uvs && i.setVerticesData(o.b.UVKind, t.uvs, t.uvs._updatable), t.uvs2 && i.setVerticesData(o.b.UV2Kind, t.uvs2, t.uvs2._updatable), t.uvs3 && i.setVerticesData(o.b.UV3Kind, t.uvs3, t.uvs3._updatable), t.uvs4 && i.setVerticesData(o.b.UV4Kind, t.uvs4, t.uvs4._updatable), t.uvs5 && i.setVerticesData(o.b.UV5Kind, t.uvs5, t.uvs5._updatable), t.uvs6 && i.setVerticesData(o.b.UV6Kind, t.uvs6, t.uvs6._updatable), t.colors && i.setVerticesData(o.b.ColorKind, n.f.CheckColors4(t.colors, t.positions.length / 3), t.colors._updatable), t.matricesIndices)
|
|
if (t.matricesIndices._isExpanded) delete t.matricesIndices._isExpanded, i.setVerticesData(o.b.MatricesIndicesKind, t.matricesIndices, t.matricesIndices._updatable);
|
|
else {
|
|
for (T = [], E = 0; E < t.matricesIndices.length; E++) {
|
|
var D = t.matricesIndices[E];
|
|
T.push(255 & D), T.push((65280 & D) >> 8), T.push((16711680 & D) >> 16), T.push(D >> 24)
|
|
}
|
|
i.setVerticesData(o.b.MatricesIndicesKind, T, t.matricesIndices._updatable)
|
|
} if (t.matricesIndicesExtra)
|
|
if (t.matricesIndicesExtra._isExpanded) delete t.matricesIndices._isExpanded, i.setVerticesData(o.b.MatricesIndicesExtraKind, t.matricesIndicesExtra, t.matricesIndicesExtra._updatable);
|
|
else {
|
|
for (T = [], E = 0; E < t.matricesIndicesExtra.length; E++) {
|
|
D = t.matricesIndicesExtra[E];
|
|
T.push(255 & D), T.push((65280 & D) >> 8), T.push((16711680 & D) >> 16), T.push(D >> 24)
|
|
}
|
|
i.setVerticesData(o.b.MatricesIndicesExtraKind, T, t.matricesIndicesExtra._updatable)
|
|
} t.matricesWeights && (e._CleanMatricesWeights(t, i), i.setVerticesData(o.b.MatricesWeightsKind, t.matricesWeights, t.matricesWeights._updatable)), t.matricesWeightsExtra && i.setVerticesData(o.b.MatricesWeightsExtraKind, t.matricesWeightsExtra, t.matricesWeights._updatable), i.setIndices(t.indices, null)
|
|
}
|
|
if (t.subMeshes) {
|
|
i.subMeshes = [];
|
|
for (var L = 0; L < t.subMeshes.length; L++) {
|
|
var w = t.subMeshes[L];
|
|
s.b.AddToMesh(w.materialIndex, w.verticesStart, w.verticesCount, w.indexStart, w.indexCount, i)
|
|
}
|
|
}
|
|
i._shouldGenerateFlatShading && (i.convertToFlatShadedMesh(), delete i._shouldGenerateFlatShading), i.computeWorldMatrix(!0), r.onMeshImportedObservable.notifyObservers(i)
|
|
}, e._CleanMatricesWeights = function(e, t) {
|
|
if (a.a.CleanBoneMatrixWeights) {
|
|
var i = 0;
|
|
if (e.skeletonId > -1) {
|
|
var n = t.getScene().getLastSkeletonByID(e.skeletonId);
|
|
if (n) {
|
|
i = n.bones.length;
|
|
for (var r = t.getVerticesData(o.b.MatricesIndicesKind), s = t.getVerticesData(o.b.MatricesIndicesExtraKind), c = e.matricesWeights, l = e.matricesWeightsExtra, u = e.numBoneInfluencer, h = c.length, d = 0; d < h; d += 4) {
|
|
for (var f = 0, p = -1, _ = 0; _ < 4; _++) {
|
|
f += g = c[d + _], g < .001 && p < 0 && (p = _)
|
|
}
|
|
if (l)
|
|
for (_ = 0; _ < 4; _++) {
|
|
var g;
|
|
f += g = l[d + _], g < .001 && p < 0 && (p = _ + 4)
|
|
}
|
|
if ((p < 0 || p > u - 1) && (p = u - 1), f > .001) {
|
|
var m = 1 / f;
|
|
for (_ = 0; _ < 4; _++) c[d + _] *= m;
|
|
if (l)
|
|
for (_ = 0; _ < 4; _++) l[d + _] *= m
|
|
} else p >= 4 ? (l[d + p - 4] = 1 - f, s[d + p - 4] = i) : (c[d + p] = 1 - f, r[d + p] = i)
|
|
}
|
|
t.setVerticesData(o.b.MatricesIndicesKind, r), e.matricesWeightsExtra && t.setVerticesData(o.b.MatricesIndicesExtraKind, s)
|
|
}
|
|
}
|
|
}
|
|
}, e.Parse = function(t, i, s) {
|
|
if (i.getGeometryByID(t.id)) return null;
|
|
var a = new e(t.id, i, void 0, t.updatable);
|
|
return h.a && h.a.AddTagsTo(a, t.tags), t.delayLoadingFile ? (a.delayLoadState = l.a.DELAYLOADSTATE_NOTLOADED, a.delayLoadingFile = s + t.delayLoadingFile, a._boundingInfo = new c.a(n.x.FromArray(t.boundingBoxMinimum), n.x.FromArray(t.boundingBoxMaximum)), a._delayInfo = [], t.hasUVs && a._delayInfo.push(o.b.UVKind), t.hasUVs2 && a._delayInfo.push(o.b.UV2Kind), t.hasUVs3 && a._delayInfo.push(o.b.UV3Kind), t.hasUVs4 && a._delayInfo.push(o.b.UV4Kind), t.hasUVs5 && a._delayInfo.push(o.b.UV5Kind), t.hasUVs6 && a._delayInfo.push(o.b.UV6Kind), t.hasColors && a._delayInfo.push(o.b.ColorKind), t.hasMatricesIndices && a._delayInfo.push(o.b.MatricesIndicesKind), t.hasMatricesWeights && a._delayInfo.push(o.b.MatricesWeightsKind), a._delayLoadingFunction = r.a.ImportVertexData) : r.a.ImportVertexData(t, a), i.pushGeometry(a, !0), a
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return d
|
|
});
|
|
var n = i(1),
|
|
r = i(8),
|
|
o = i(0),
|
|
s = i(42),
|
|
a = i(53),
|
|
c = i(54),
|
|
l = i(48),
|
|
u = i(41),
|
|
h = i(33),
|
|
d = function(e) {
|
|
function t(i, n, s) {
|
|
void 0 === n && (n = o.e.Gray()), void 0 === s && (s = u.a.DefaultUtilityLayer);
|
|
var a = e.call(this, s) || this;
|
|
a._pointerObserver = null, a.snapDistance = 0, a.onSnapObservable = new r.c;
|
|
var l = new h.a("", s.utilityLayerScene);
|
|
l.diffuseColor = n, l.specularColor = n.subtract(new o.e(.1, .1, .1));
|
|
var d = new h.a("", s.utilityLayerScene);
|
|
d.diffuseColor = n.add(new o.e(.3, .3, .3));
|
|
var f = t._CreateArrow(s.utilityLayerScene, l);
|
|
f.lookAt(a._rootMesh.position.add(i)), f.scaling.scaleInPlace(1 / 3), f.parent = a._rootMesh;
|
|
var p = 0,
|
|
_ = new o.x,
|
|
g = {
|
|
snapDistance: 0
|
|
};
|
|
a.dragBehavior = new c.a({
|
|
dragAxis: i
|
|
}), a.dragBehavior.moveAttached = !1, a._rootMesh.addBehavior(a.dragBehavior);
|
|
var m = new o.x,
|
|
v = new o.j;
|
|
a.dragBehavior.onDragObservable.add(function(e) {
|
|
if (a.attachedMesh)
|
|
if (a.attachedMesh.parent ? (a.attachedMesh.parent.computeWorldMatrix().invertToRef(v), v.setTranslationFromFloats(0, 0, 0), o.x.TransformCoordinatesToRef(e.delta, v, m)) : m.copyFrom(e.delta), 0 == a.snapDistance) a.attachedMesh.position.addInPlace(m);
|
|
else if (p += e.dragDistance, Math.abs(p) > a.snapDistance) {
|
|
var t = Math.floor(Math.abs(p) / a.snapDistance);
|
|
p %= a.snapDistance, m.normalizeToRef(_), _.scaleInPlace(a.snapDistance * t), a.attachedMesh.position.addInPlace(_), g.snapDistance = a.snapDistance * t, a.onSnapObservable.notifyObservers(g)
|
|
}
|
|
}), a._pointerObserver = s.utilityLayerScene.onPointerObservable.add(function(e) {
|
|
if (!a._customMeshSet) {
|
|
var t = e.pickInfo && -1 != a._rootMesh.getChildMeshes().indexOf(e.pickInfo.pickedMesh) ? d : l;
|
|
a._rootMesh.getChildMeshes().forEach(function(e) {
|
|
e.material = t, e.color && (e.color = t.diffuseColor)
|
|
})
|
|
}
|
|
});
|
|
var y = s._getSharedGizmoLight();
|
|
return y.includedOnlyMeshes = y.includedOnlyMeshes.concat(a._rootMesh.getChildMeshes(!1)), a
|
|
}
|
|
return n.d(t, e), t._CreateArrow = function(e, t) {
|
|
var i = new s.a("arrow", e),
|
|
n = a.a.CreateCylinder("cylinder", {
|
|
diameterTop: 0,
|
|
height: .075,
|
|
diameterBottom: .0375,
|
|
tessellation: 96
|
|
}, e),
|
|
r = a.a.CreateCylinder("cylinder", {
|
|
diameterTop: .005,
|
|
height: .275,
|
|
diameterBottom: .005,
|
|
tessellation: 96
|
|
}, e);
|
|
return r.material = t, n.parent = i, r.parent = i, n.material = t, n.rotation.x = Math.PI / 2, n.position.z += .3, r.position.z += .1375, r.rotation.x = Math.PI / 2, i
|
|
}, t._CreateArrowInstance = function(e, t) {
|
|
for (var i = new s.a("arrow", e), n = 0, r = t.getChildMeshes(); n < r.length; n++) {
|
|
var o = r[n];
|
|
o.createInstance(o.name).parent = i
|
|
}
|
|
return i
|
|
}, t.prototype._attachedMeshChanged = function(e) {
|
|
this.dragBehavior && (this.dragBehavior.enabled = !!e)
|
|
}, t.prototype.dispose = function() {
|
|
this.onSnapObservable.clear(), this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver), this.dragBehavior.detach(), e.prototype.dispose.call(this)
|
|
}, t
|
|
}(l.a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return e.FilesToLoad = {}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {
|
|
this._xhr = new XMLHttpRequest
|
|
}
|
|
return e.prototype._injectCustomRequestHeaders = function() {
|
|
for (var t in e.CustomRequestHeaders) {
|
|
var i = e.CustomRequestHeaders[t];
|
|
i && this._xhr.setRequestHeader(t, i)
|
|
}
|
|
}, Object.defineProperty(e.prototype, "onprogress", {
|
|
get: function() {
|
|
return this._xhr.onprogress
|
|
},
|
|
set: function(e) {
|
|
this._xhr.onprogress = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "readyState", {
|
|
get: function() {
|
|
return this._xhr.readyState
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "status", {
|
|
get: function() {
|
|
return this._xhr.status
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "statusText", {
|
|
get: function() {
|
|
return this._xhr.statusText
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "response", {
|
|
get: function() {
|
|
return this._xhr.response
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "responseURL", {
|
|
get: function() {
|
|
return this._xhr.responseURL
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "responseText", {
|
|
get: function() {
|
|
return this._xhr.responseText
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "responseType", {
|
|
get: function() {
|
|
return this._xhr.responseType
|
|
},
|
|
set: function(e) {
|
|
this._xhr.responseType = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.addEventListener = function(e, t, i) {
|
|
this._xhr.addEventListener(e, t, i)
|
|
}, e.prototype.removeEventListener = function(e, t, i) {
|
|
this._xhr.removeEventListener(e, t, i)
|
|
}, e.prototype.abort = function() {
|
|
this._xhr.abort()
|
|
}, e.prototype.send = function(t) {
|
|
e.CustomRequestHeaders && this._injectCustomRequestHeaders(), this._xhr.send(t)
|
|
}, e.prototype.open = function(t, i) {
|
|
for (var n = 0, r = e.CustomRequestModifiers; n < r.length; n++) {
|
|
(0, r[n])(this._xhr)
|
|
}
|
|
return this._xhr.open(t, i, !0)
|
|
}, e.CustomRequestHeaders = {}, e.CustomRequestModifiers = new Array, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {
|
|
this._count = 0, this._data = {}
|
|
}
|
|
return e.prototype.copyFrom = function(e) {
|
|
var t = this;
|
|
this.clear(), e.forEach(function(e, i) {
|
|
return t.add(e, i)
|
|
})
|
|
}, e.prototype.get = function(e) {
|
|
var t = this._data[e];
|
|
if (void 0 !== t) return t
|
|
}, e.prototype.getOrAddWithFactory = function(e, t) {
|
|
var i = this.get(e);
|
|
return void 0 !== i ? i : ((i = t(e)) && this.add(e, i), i)
|
|
}, e.prototype.getOrAdd = function(e, t) {
|
|
var i = this.get(e);
|
|
return void 0 !== i ? i : (this.add(e, t), t)
|
|
}, e.prototype.contains = function(e) {
|
|
return void 0 !== this._data[e]
|
|
}, e.prototype.add = function(e, t) {
|
|
return void 0 === this._data[e] && (this._data[e] = t, ++this._count, !0)
|
|
}, e.prototype.set = function(e, t) {
|
|
return void 0 !== this._data[e] && (this._data[e] = t, !0)
|
|
}, e.prototype.getAndRemove = function(e) {
|
|
var t = this.get(e);
|
|
return void 0 !== t ? (delete this._data[e], --this._count, t) : null
|
|
}, e.prototype.remove = function(e) {
|
|
return !!this.contains(e) && (delete this._data[e], --this._count, !0)
|
|
}, e.prototype.clear = function() {
|
|
this._data = {}, this._count = 0
|
|
}, Object.defineProperty(e.prototype, "count", {
|
|
get: function() {
|
|
return this._count
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.forEach = function(e) {
|
|
for (var t in this._data) {
|
|
e(t, this._data[t])
|
|
}
|
|
}, e.prototype.first = function(e) {
|
|
for (var t in this._data) {
|
|
var i = e(t, this._data[t]);
|
|
if (i) return i
|
|
}
|
|
return null
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return c
|
|
}), i.d(t, "b", function() {
|
|
return l
|
|
});
|
|
var n = i(0),
|
|
r = [Math.sqrt(1 / (4 * Math.PI)), -Math.sqrt(3 / (4 * Math.PI)), Math.sqrt(3 / (4 * Math.PI)), -Math.sqrt(3 / (4 * Math.PI)), Math.sqrt(15 / (4 * Math.PI)), -Math.sqrt(15 / (4 * Math.PI)), Math.sqrt(5 / (16 * Math.PI)), -Math.sqrt(15 / (4 * Math.PI)), Math.sqrt(15 / (16 * Math.PI))],
|
|
o = [function(e) {
|
|
return 1
|
|
}, function(e) {
|
|
return e.y
|
|
}, function(e) {
|
|
return e.z
|
|
}, function(e) {
|
|
return e.x
|
|
}, function(e) {
|
|
return e.x * e.y
|
|
}, function(e) {
|
|
return e.y * e.z
|
|
}, function(e) {
|
|
return 3 * e.z * e.z - 1
|
|
}, function(e) {
|
|
return e.x * e.z
|
|
}, function(e) {
|
|
return e.x * e.x - e.y * e.y
|
|
}],
|
|
s = function(e, t) {
|
|
return r[e] * o[e](t)
|
|
},
|
|
a = [Math.PI, 2 * Math.PI / 3, 2 * Math.PI / 3, 2 * Math.PI / 3, Math.PI / 4, Math.PI / 4, Math.PI / 4, Math.PI / 4, Math.PI / 4],
|
|
c = function() {
|
|
function e() {
|
|
this.preScaled = !1, this.l00 = n.x.Zero(), this.l1_1 = n.x.Zero(), this.l10 = n.x.Zero(), this.l11 = n.x.Zero(), this.l2_2 = n.x.Zero(), this.l2_1 = n.x.Zero(), this.l20 = n.x.Zero(), this.l21 = n.x.Zero(), this.l22 = n.x.Zero()
|
|
}
|
|
return e.prototype.addLight = function(e, t, i) {
|
|
var r = new n.x(t.r, t.g, t.b).scale(i);
|
|
this.l00 = this.l00.add(r.scale(s(0, e))), this.l1_1 = this.l1_1.add(r.scale(s(1, e))), this.l10 = this.l10.add(r.scale(s(2, e))), this.l11 = this.l11.add(r.scale(s(3, e))), this.l2_2 = this.l2_2.add(r.scale(s(4, e))), this.l2_1 = this.l2_1.add(r.scale(s(5, e))), this.l20 = this.l20.add(r.scale(s(6, e))), this.l21 = this.l21.add(r.scale(s(7, e))), this.l22 = this.l22.add(r.scale(s(8, e)))
|
|
}, e.prototype.scaleInPlace = function(e) {
|
|
this.l00.scaleInPlace(e), this.l1_1.scaleInPlace(e), this.l10.scaleInPlace(e), this.l11.scaleInPlace(e), this.l2_2.scaleInPlace(e), this.l2_1.scaleInPlace(e), this.l20.scaleInPlace(e), this.l21.scaleInPlace(e), this.l22.scaleInPlace(e)
|
|
}, e.prototype.convertIncidentRadianceToIrradiance = function() {
|
|
this.l00.scaleInPlace(a[0]), this.l1_1.scaleInPlace(a[1]), this.l10.scaleInPlace(a[2]), this.l11.scaleInPlace(a[3]), this.l2_2.scaleInPlace(a[4]), this.l2_1.scaleInPlace(a[5]), this.l20.scaleInPlace(a[6]), this.l21.scaleInPlace(a[7]), this.l22.scaleInPlace(a[8])
|
|
}, e.prototype.convertIrradianceToLambertianRadiance = function() {
|
|
this.scaleInPlace(1 / Math.PI)
|
|
}, e.prototype.preScaleForRendering = function() {
|
|
this.preScaled = !0, this.l00.scaleInPlace(r[0]), this.l1_1.scaleInPlace(r[1]), this.l10.scaleInPlace(r[2]), this.l11.scaleInPlace(r[3]), this.l2_2.scaleInPlace(r[4]), this.l2_1.scaleInPlace(r[5]), this.l20.scaleInPlace(r[6]), this.l21.scaleInPlace(r[7]), this.l22.scaleInPlace(r[8])
|
|
}, e.FromArray = function(t) {
|
|
var i = new e;
|
|
return n.x.FromArrayToRef(t[0], 0, i.l00), n.x.FromArrayToRef(t[1], 0, i.l1_1), n.x.FromArrayToRef(t[2], 0, i.l10), n.x.FromArrayToRef(t[3], 0, i.l11), n.x.FromArrayToRef(t[4], 0, i.l2_2), n.x.FromArrayToRef(t[5], 0, i.l2_1), n.x.FromArrayToRef(t[6], 0, i.l20), n.x.FromArrayToRef(t[7], 0, i.l21), n.x.FromArrayToRef(t[8], 0, i.l22), i
|
|
}, e.FromPolynomial = function(t) {
|
|
var i = new e;
|
|
return i.l00 = t.xx.scale(.376127).add(t.yy.scale(.376127)).add(t.zz.scale(.376126)), i.l1_1 = t.y.scale(.977204), i.l10 = t.z.scale(.977204), i.l11 = t.x.scale(.977204), i.l2_2 = t.xy.scale(1.16538), i.l2_1 = t.yz.scale(1.16538), i.l20 = t.zz.scale(1.34567).subtract(t.xx.scale(.672834)).subtract(t.yy.scale(.672834)), i.l21 = t.zx.scale(1.16538), i.l22 = t.xx.scale(1.16538).subtract(t.yy.scale(1.16538)), i.l1_1.scaleInPlace(-1), i.l11.scaleInPlace(-1), i.l2_1.scaleInPlace(-1), i.l21.scaleInPlace(-1), i.scaleInPlace(Math.PI), i
|
|
}, e
|
|
}(),
|
|
l = function() {
|
|
function e() {
|
|
this.x = n.x.Zero(), this.y = n.x.Zero(), this.z = n.x.Zero(), this.xx = n.x.Zero(), this.yy = n.x.Zero(), this.zz = n.x.Zero(), this.xy = n.x.Zero(), this.yz = n.x.Zero(), this.zx = n.x.Zero()
|
|
}
|
|
return Object.defineProperty(e.prototype, "preScaledHarmonics", {
|
|
get: function() {
|
|
return this._harmonics || (this._harmonics = c.FromPolynomial(this)), this._harmonics.preScaled || this._harmonics.preScaleForRendering(), this._harmonics
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.addAmbient = function(e) {
|
|
var t = new n.x(e.r, e.g, e.b);
|
|
this.xx = this.xx.add(t), this.yy = this.yy.add(t), this.zz = this.zz.add(t)
|
|
}, e.prototype.scaleInPlace = function(e) {
|
|
this.x.scaleInPlace(e), this.y.scaleInPlace(e), this.z.scaleInPlace(e), this.xx.scaleInPlace(e), this.yy.scaleInPlace(e), this.zz.scaleInPlace(e), this.yz.scaleInPlace(e), this.zx.scaleInPlace(e), this.xy.scaleInPlace(e)
|
|
}, e.FromHarmonics = function(t) {
|
|
var i = new e;
|
|
return i._harmonics = t, i.x = t.l11.scale(1.02333).scale(-1), i.y = t.l1_1.scale(1.02333).scale(-1), i.z = t.l10.scale(1.02333), i.xx = t.l00.scale(.886277).subtract(t.l20.scale(.247708)).add(t.l22.scale(.429043)), i.yy = t.l00.scale(.886277).subtract(t.l20.scale(.247708)).subtract(t.l22.scale(.429043)), i.zz = t.l00.scale(.886277).add(t.l20.scale(.495417)), i.yz = t.l2_1.scale(.858086).scale(-1), i.zx = t.l21.scale(.858086).scale(-1), i.xy = t.l2_2.scale(.858086), i.scaleInPlace(1 / Math.PI), i
|
|
}, e.FromArray = function(t) {
|
|
var i = new e;
|
|
return n.x.FromArrayToRef(t[0], 0, i.x), n.x.FromArrayToRef(t[1], 0, i.y), n.x.FromArrayToRef(t[2], 0, i.z), n.x.FromArrayToRef(t[3], 0, i.xx), n.x.FromArrayToRef(t[4], 0, i.yy), n.x.FromArrayToRef(t[5], 0, i.zz), n.x.FromArrayToRef(t[6], 0, i.yz), n.x.FromArrayToRef(t[7], 0, i.zx), n.x.FromArrayToRef(t[8], 0, i.xy), i
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
});
|
|
var n = i(6),
|
|
r = function() {
|
|
function e(e, t, i) {
|
|
this._engine = e, this._noUBO = !e.supportsUniformBuffers, this._dynamic = i, this._data = t || [], this._uniformLocations = {}, this._uniformSizes = {}, this._uniformLocationPointer = 0, this._needSync = !1, this._noUBO ? (this.updateMatrix3x3 = this._updateMatrix3x3ForEffect, this.updateMatrix2x2 = this._updateMatrix2x2ForEffect, this.updateFloat = this._updateFloatForEffect, this.updateFloat2 = this._updateFloat2ForEffect, this.updateFloat3 = this._updateFloat3ForEffect, this.updateFloat4 = this._updateFloat4ForEffect, this.updateMatrix = this._updateMatrixForEffect, this.updateVector3 = this._updateVector3ForEffect, this.updateVector4 = this._updateVector4ForEffect, this.updateColor3 = this._updateColor3ForEffect, this.updateColor4 = this._updateColor4ForEffect) : (this._engine._uniformBuffers.push(this), this.updateMatrix3x3 = this._updateMatrix3x3ForUniform, this.updateMatrix2x2 = this._updateMatrix2x2ForUniform, this.updateFloat = this._updateFloatForUniform, this.updateFloat2 = this._updateFloat2ForUniform, this.updateFloat3 = this._updateFloat3ForUniform, this.updateFloat4 = this._updateFloat4ForUniform, this.updateMatrix = this._updateMatrixForUniform, this.updateVector3 = this._updateVector3ForUniform, this.updateVector4 = this._updateVector4ForUniform, this.updateColor3 = this._updateColor3ForUniform, this.updateColor4 = this._updateColor4ForUniform)
|
|
}
|
|
return Object.defineProperty(e.prototype, "useUbo", {
|
|
get: function() {
|
|
return !this._noUBO
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isSync", {
|
|
get: function() {
|
|
return !this._needSync
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.isDynamic = function() {
|
|
return void 0 !== this._dynamic
|
|
}, e.prototype.getData = function() {
|
|
return this._bufferData
|
|
}, e.prototype.getBuffer = function() {
|
|
return this._buffer
|
|
}, e.prototype._fillAlignment = function(e) {
|
|
var t;
|
|
if (t = e <= 2 ? e : 4, this._uniformLocationPointer % t != 0) {
|
|
var i = this._uniformLocationPointer;
|
|
this._uniformLocationPointer += t - this._uniformLocationPointer % t;
|
|
for (var n = this._uniformLocationPointer - i, r = 0; r < n; r++) this._data.push(0)
|
|
}
|
|
}, e.prototype.addUniform = function(e, t) {
|
|
if (!this._noUBO && void 0 === this._uniformLocations[e]) {
|
|
var i;
|
|
if (t instanceof Array) t = (i = t).length;
|
|
else {
|
|
t = t, i = [];
|
|
for (var n = 0; n < t; n++) i.push(0)
|
|
}
|
|
this._fillAlignment(t), this._uniformSizes[e] = t, this._uniformLocations[e] = this._uniformLocationPointer, this._uniformLocationPointer += t;
|
|
for (n = 0; n < t; n++) this._data.push(i[n]);
|
|
this._needSync = !0
|
|
}
|
|
}, e.prototype.addMatrix = function(e, t) {
|
|
this.addUniform(e, Array.prototype.slice.call(t.toArray()))
|
|
}, e.prototype.addFloat2 = function(e, t, i) {
|
|
var n = [t, i];
|
|
this.addUniform(e, n)
|
|
}, e.prototype.addFloat3 = function(e, t, i, n) {
|
|
var r = [t, i, n];
|
|
this.addUniform(e, r)
|
|
}, e.prototype.addColor3 = function(e, t) {
|
|
var i = new Array;
|
|
t.toArray(i), this.addUniform(e, i)
|
|
}, e.prototype.addColor4 = function(e, t, i) {
|
|
var n = new Array;
|
|
t.toArray(n), n.push(i), this.addUniform(e, n)
|
|
}, e.prototype.addVector3 = function(e, t) {
|
|
var i = new Array;
|
|
t.toArray(i), this.addUniform(e, i)
|
|
}, e.prototype.addMatrix3x3 = function(e) {
|
|
this.addUniform(e, 12)
|
|
}, e.prototype.addMatrix2x2 = function(e) {
|
|
this.addUniform(e, 8)
|
|
}, e.prototype.create = function() {
|
|
this._noUBO || this._buffer || (this._fillAlignment(4), this._bufferData = new Float32Array(this._data), this._rebuild(), this._needSync = !0)
|
|
}, e.prototype._rebuild = function() {
|
|
!this._noUBO && this._bufferData && (this._dynamic ? this._buffer = this._engine.createDynamicUniformBuffer(this._bufferData) : this._buffer = this._engine.createUniformBuffer(this._bufferData))
|
|
}, e.prototype.update = function() {
|
|
this._buffer ? (this._dynamic || this._needSync) && (this._engine.updateUniformBuffer(this._buffer, this._bufferData), this._needSync = !1) : this.create()
|
|
}, e.prototype.updateUniform = function(e, t, i) {
|
|
var r = this._uniformLocations[e];
|
|
if (void 0 === r) {
|
|
if (this._buffer) return void n.a.Error("Cannot add an uniform after UBO has been created.");
|
|
this.addUniform(e, i), r = this._uniformLocations[e]
|
|
}
|
|
if (this._buffer || this.create(), this._dynamic)
|
|
for (s = 0; s < i; s++) this._bufferData[r + s] = t[s];
|
|
else {
|
|
for (var o = !1, s = 0; s < i; s++) this._bufferData[r + s] !== t[s] && (o = !0, this._bufferData[r + s] = t[s]);
|
|
this._needSync = this._needSync || o
|
|
}
|
|
}, e.prototype._updateMatrix3x3ForUniform = function(t, i) {
|
|
for (var n = 0; n < 3; n++) e._tempBuffer[4 * n] = i[3 * n], e._tempBuffer[4 * n + 1] = i[3 * n + 1], e._tempBuffer[4 * n + 2] = i[3 * n + 2], e._tempBuffer[4 * n + 3] = 0;
|
|
this.updateUniform(t, e._tempBuffer, 12)
|
|
}, e.prototype._updateMatrix3x3ForEffect = function(e, t) {
|
|
this._currentEffect.setMatrix3x3(e, t)
|
|
}, e.prototype._updateMatrix2x2ForEffect = function(e, t) {
|
|
this._currentEffect.setMatrix2x2(e, t)
|
|
}, e.prototype._updateMatrix2x2ForUniform = function(t, i) {
|
|
for (var n = 0; n < 2; n++) e._tempBuffer[4 * n] = i[2 * n], e._tempBuffer[4 * n + 1] = i[2 * n + 1], e._tempBuffer[4 * n + 2] = 0, e._tempBuffer[4 * n + 3] = 0;
|
|
this.updateUniform(t, e._tempBuffer, 8)
|
|
}, e.prototype._updateFloatForEffect = function(e, t) {
|
|
this._currentEffect.setFloat(e, t)
|
|
}, e.prototype._updateFloatForUniform = function(t, i) {
|
|
e._tempBuffer[0] = i, this.updateUniform(t, e._tempBuffer, 1)
|
|
}, e.prototype._updateFloat2ForEffect = function(e, t, i, n) {
|
|
void 0 === n && (n = ""), this._currentEffect.setFloat2(e + n, t, i)
|
|
}, e.prototype._updateFloat2ForUniform = function(t, i, n) {
|
|
e._tempBuffer[0] = i, e._tempBuffer[1] = n, this.updateUniform(t, e._tempBuffer, 2)
|
|
}, e.prototype._updateFloat3ForEffect = function(e, t, i, n, r) {
|
|
void 0 === r && (r = ""), this._currentEffect.setFloat3(e + r, t, i, n)
|
|
}, e.prototype._updateFloat3ForUniform = function(t, i, n, r) {
|
|
e._tempBuffer[0] = i, e._tempBuffer[1] = n, e._tempBuffer[2] = r, this.updateUniform(t, e._tempBuffer, 3)
|
|
}, e.prototype._updateFloat4ForEffect = function(e, t, i, n, r, o) {
|
|
void 0 === o && (o = ""), this._currentEffect.setFloat4(e + o, t, i, n, r)
|
|
}, e.prototype._updateFloat4ForUniform = function(t, i, n, r, o) {
|
|
e._tempBuffer[0] = i, e._tempBuffer[1] = n, e._tempBuffer[2] = r, e._tempBuffer[3] = o, this.updateUniform(t, e._tempBuffer, 4)
|
|
}, e.prototype._updateMatrixForEffect = function(e, t) {
|
|
this._currentEffect.setMatrix(e, t)
|
|
}, e.prototype._updateMatrixForUniform = function(e, t) {
|
|
this.updateUniform(e, t.toArray(), 16)
|
|
}, e.prototype._updateVector3ForEffect = function(e, t) {
|
|
this._currentEffect.setVector3(e, t)
|
|
}, e.prototype._updateVector3ForUniform = function(t, i) {
|
|
i.toArray(e._tempBuffer), this.updateUniform(t, e._tempBuffer, 3)
|
|
}, e.prototype._updateVector4ForEffect = function(e, t) {
|
|
this._currentEffect.setVector4(e, t)
|
|
}, e.prototype._updateVector4ForUniform = function(t, i) {
|
|
i.toArray(e._tempBuffer), this.updateUniform(t, e._tempBuffer, 4)
|
|
}, e.prototype._updateColor3ForEffect = function(e, t, i) {
|
|
void 0 === i && (i = ""), this._currentEffect.setColor3(e + i, t)
|
|
}, e.prototype._updateColor3ForUniform = function(t, i) {
|
|
i.toArray(e._tempBuffer), this.updateUniform(t, e._tempBuffer, 3)
|
|
}, e.prototype._updateColor4ForEffect = function(e, t, i, n) {
|
|
void 0 === n && (n = ""), this._currentEffect.setColor4(e + n, t, i)
|
|
}, e.prototype._updateColor4ForUniform = function(t, i, n) {
|
|
i.toArray(e._tempBuffer), e._tempBuffer[3] = n, this.updateUniform(t, e._tempBuffer, 4)
|
|
}, e.prototype.setTexture = function(e, t) {
|
|
this._currentEffect.setTexture(e, t)
|
|
}, e.prototype.updateUniformDirectly = function(e, t) {
|
|
this.updateUniform(e, t, t.length), this.update()
|
|
}, e.prototype.bindToEffect = function(e, t) {
|
|
this._currentEffect = e, !this._noUBO && this._buffer && e.bindUniformBuffer(this._buffer, t)
|
|
}, e.prototype.dispose = function() {
|
|
if (!this._noUBO) {
|
|
var e = this._engine._uniformBuffers,
|
|
t = e.indexOf(this); - 1 !== t && (e[t] = e[e.length - 1], e.pop()), this._buffer && this._engine._releaseBuffer(this._buffer) && (this._buffer = null)
|
|
}
|
|
}, e._MAX_UNIFORM_SIZE = 256, e._tempBuffer = new Float32Array(e._MAX_UNIFORM_SIZE), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {
|
|
this._isDirty = !0, this._areLightsDirty = !0, this._areAttributesDirty = !0, this._areTexturesDirty = !0, this._areFresnelDirty = !0, this._areMiscDirty = !0, this._areImageProcessingDirty = !0, this._normals = !1, this._uvs = !1, this._needNormals = !1, this._needUVs = !1
|
|
}
|
|
return Object.defineProperty(e.prototype, "isDirty", {
|
|
get: function() {
|
|
return this._isDirty
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.markAsProcessed = function() {
|
|
this._isDirty = !1, this._areAttributesDirty = !1, this._areTexturesDirty = !1, this._areFresnelDirty = !1, this._areLightsDirty = !1, this._areMiscDirty = !1, this._areImageProcessingDirty = !1
|
|
}, e.prototype.markAsUnprocessed = function() {
|
|
this._isDirty = !0
|
|
}, e.prototype.markAllAsDirty = function() {
|
|
this._areTexturesDirty = !0, this._areAttributesDirty = !0, this._areLightsDirty = !0, this._areFresnelDirty = !0, this._areMiscDirty = !0, this._areImageProcessingDirty = !0, this._isDirty = !0
|
|
}, e.prototype.markAsImageProcessingDirty = function() {
|
|
this._areImageProcessingDirty = !0, this._isDirty = !0
|
|
}, e.prototype.markAsLightDirty = function() {
|
|
this._areLightsDirty = !0, this._isDirty = !0
|
|
}, e.prototype.markAsAttributesDirty = function() {
|
|
this._areAttributesDirty = !0, this._isDirty = !0
|
|
}, e.prototype.markAsTexturesDirty = function() {
|
|
this._areTexturesDirty = !0, this._isDirty = !0
|
|
}, e.prototype.markAsFresnelDirty = function() {
|
|
this._areFresnelDirty = !0, this._isDirty = !0
|
|
}, e.prototype.markAsMiscDirty = function() {
|
|
this._areMiscDirty = !0, this._isDirty = !0
|
|
}, e.prototype.rebuild = function() {
|
|
this._keys && delete this._keys, this._keys = [];
|
|
for (var e = 0, t = Object.keys(this); e < t.length; e++) {
|
|
var i = t[e];
|
|
"_" !== i[0] && this._keys.push(i)
|
|
}
|
|
}, e.prototype.isEqual = function(e) {
|
|
if (this._keys.length !== e._keys.length) return !1;
|
|
for (var t = 0; t < this._keys.length; t++) {
|
|
var i = this._keys[t];
|
|
if (this[i] !== e[i]) return !1
|
|
}
|
|
return !0
|
|
}, e.prototype.cloneTo = function(e) {
|
|
this._keys.length !== e._keys.length && (e._keys = this._keys.slice(0));
|
|
for (var t = 0; t < this._keys.length; t++) {
|
|
var i = this._keys[t];
|
|
e[i] = this[i]
|
|
}
|
|
}, e.prototype.reset = function() {
|
|
for (var e = 0; e < this._keys.length; e++) {
|
|
var t = this._keys[e];
|
|
switch (typeof this[t]) {
|
|
case "number":
|
|
this[t] = 0;
|
|
break;
|
|
case "string":
|
|
this[t] = "";
|
|
break;
|
|
default:
|
|
this[t] = !1
|
|
}
|
|
}
|
|
}, e.prototype.toString = function() {
|
|
for (var e = "", t = 0; t < this._keys.length; t++) {
|
|
var i = this._keys[t],
|
|
n = this[i];
|
|
switch (typeof n) {
|
|
case "number":
|
|
case "string":
|
|
e += "#define " + i + " " + n + "\n";
|
|
break;
|
|
default:
|
|
n && (e += "#define " + i + "\n")
|
|
}
|
|
}
|
|
return e
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return c
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(0),
|
|
s = i(25),
|
|
a = i(38);
|
|
s.a.AddNodeConstructor("Light_Type_3", function(e, t) {
|
|
return function() {
|
|
return new c(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var c = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, n) || this;
|
|
return r.groundColor = new o.e(0, 0, 0), r.direction = i || o.x.Up(), r
|
|
}
|
|
return n.d(t, e), t.prototype._buildUniformLayout = function() {
|
|
this._uniformBuffer.addUniform("vLightData", 4), this._uniformBuffer.addUniform("vLightDiffuse", 4), this._uniformBuffer.addUniform("vLightSpecular", 3), this._uniformBuffer.addUniform("vLightGround", 3), this._uniformBuffer.addUniform("shadowsInfo", 3), this._uniformBuffer.addUniform("depthValues", 2), this._uniformBuffer.create()
|
|
}, t.prototype.getClassName = function() {
|
|
return "HemisphericLight"
|
|
}, t.prototype.setDirectionToTarget = function(e) {
|
|
return this.direction = o.x.Normalize(e.subtract(o.x.Zero())), this.direction
|
|
}, t.prototype.getShadowGenerator = function() {
|
|
return null
|
|
}, t.prototype.transferToEffect = function(e, t) {
|
|
var i = o.x.Normalize(this.direction);
|
|
return this._uniformBuffer.updateFloat4("vLightData", i.x, i.y, i.z, 0, t), this._uniformBuffer.updateColor3("vLightGround", this.groundColor.scale(this.intensity), t), this
|
|
}, t.prototype.computeWorldMatrix = function() {
|
|
return this._worldMatrix || (this._worldMatrix = o.j.Identity()), this._worldMatrix
|
|
}, t.prototype.getTypeID = function() {
|
|
return a.a.LIGHTTYPEID_HEMISPHERICLIGHT
|
|
}, t.prototype.prepareLightSpecificDefines = function(e, t) {
|
|
e["HEMILIGHT" + t] = !0
|
|
}, n.c([Object(r.e)()], t.prototype, "groundColor", void 0), n.c([Object(r.o)()], t.prototype, "direction", void 0), t
|
|
}(a.a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return a
|
|
});
|
|
var n = i(1),
|
|
r = i(20),
|
|
o = i(29),
|
|
s = i(22),
|
|
a = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i, !0) || this;
|
|
return i.multiMaterials.push(n), n.subMaterials = new Array, n._storeEffectOnSubMeshes = !0, n
|
|
}
|
|
return n.d(t, e), Object.defineProperty(t.prototype, "subMaterials", {
|
|
get: function() {
|
|
return this._subMaterials
|
|
},
|
|
set: function(e) {
|
|
this._subMaterials = e, this._hookArray(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getChildren = function() {
|
|
return this.subMaterials
|
|
}, t.prototype._hookArray = function(e) {
|
|
var t = this,
|
|
i = e.push;
|
|
e.push = function() {
|
|
for (var n = [], r = 0; r < arguments.length; r++) n[r] = arguments[r];
|
|
var o = i.apply(e, n);
|
|
return t._markAllSubMeshesAsTexturesDirty(), o
|
|
};
|
|
var n = e.splice;
|
|
e.splice = function(i, r) {
|
|
var o = n.apply(e, [i, r]);
|
|
return t._markAllSubMeshesAsTexturesDirty(), o
|
|
}
|
|
}, t.prototype.getSubMaterial = function(e) {
|
|
return e < 0 || e >= this.subMaterials.length ? this.getScene().defaultMaterial : this.subMaterials[e]
|
|
}, t.prototype.getActiveTextures = function() {
|
|
var t;
|
|
return (t = e.prototype.getActiveTextures.call(this)).concat.apply(t, this.subMaterials.map(function(e) {
|
|
return e ? e.getActiveTextures() : []
|
|
}))
|
|
}, t.prototype.getClassName = function() {
|
|
return "MultiMaterial"
|
|
}, t.prototype.isReadyForSubMesh = function(e, t, i) {
|
|
for (var n = 0; n < this.subMaterials.length; n++) {
|
|
var r = this.subMaterials[n];
|
|
if (r) {
|
|
if (r._storeEffectOnSubMeshes) {
|
|
if (!r.isReadyForSubMesh(e, t, i)) return !1;
|
|
continue
|
|
}
|
|
if (!r.isReady(e)) return !1
|
|
}
|
|
}
|
|
return !0
|
|
}, t.prototype.clone = function(e, i) {
|
|
for (var n = new t(e, this.getScene()), r = 0; r < this.subMaterials.length; r++) {
|
|
var o = null,
|
|
s = this.subMaterials[r];
|
|
o = i && s ? s.clone(e + "-" + s.name) : this.subMaterials[r], n.subMaterials.push(o)
|
|
}
|
|
return n
|
|
}, t.prototype.serialize = function() {
|
|
var e = {};
|
|
e.name = this.name, e.id = this.id, o.a && (e.tags = o.a.GetTags(this)), e.materials = [];
|
|
for (var t = 0; t < this.subMaterials.length; t++) {
|
|
var i = this.subMaterials[t];
|
|
i ? e.materials.push(i.id) : e.materials.push(null)
|
|
}
|
|
return e
|
|
}, t.prototype.dispose = function(t, i, n) {
|
|
var r = this.getScene();
|
|
if (r) {
|
|
if (n)
|
|
for (var o = 0; o < this.subMaterials.length; o++) {
|
|
var s = this.subMaterials[o];
|
|
s && s.dispose(t, i)
|
|
}(o = r.multiMaterials.indexOf(this)) >= 0 && r.multiMaterials.splice(o, 1), e.prototype.dispose.call(this, t, i)
|
|
}
|
|
}, t.ParseMultiMaterial = function(e, i) {
|
|
var n = new t(e.name, i);
|
|
n.id = e.id, o.a && o.a.AddTagsTo(n, e.tags);
|
|
for (var r = 0; r < e.materials.length; r++) {
|
|
var s = e.materials[r];
|
|
s ? n.subMaterials.push(i.getMaterialByID(s)) : n.subMaterials.push(null)
|
|
}
|
|
return n
|
|
}, t
|
|
}(r.a);
|
|
s.a.RegisteredTypes["BABYLON.MultiMaterial"] = a
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "bonesDeclaration",
|
|
r = "#if NUM_BONE_INFLUENCERS>0\n#ifdef BONETEXTURE\nuniform sampler2D boneSampler;\nuniform float boneTextureWidth;\n#else\nuniform mat4 mBones[BonesPerMesh];\n#endif\nattribute vec4 matricesIndices;\nattribute vec4 matricesWeights;\n#if NUM_BONE_INFLUENCERS>4\nattribute vec4 matricesIndicesExtra;\nattribute vec4 matricesWeightsExtra;\n#endif\n#ifdef BONETEXTURE\nmat4 readMatrixFromRawSampler(sampler2D smp,float index)\n{\nfloat offset=index*4.0;\nfloat dx=1.0/boneTextureWidth;\nvec4 m0=texture2D(smp,vec2(dx*(offset+0.5),0.));\nvec4 m1=texture2D(smp,vec2(dx*(offset+1.5),0.));\nvec4 m2=texture2D(smp,vec2(dx*(offset+2.5),0.));\nvec4 m3=texture2D(smp,vec2(dx*(offset+3.5),0.));\nreturn mat4(m0,m1,m2,m3);\n}\n#endif\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "instancesDeclaration",
|
|
r = "#ifdef INSTANCES\nattribute vec4 world0;\nattribute vec4 world1;\nattribute vec4 world2;\nattribute vec4 world3;\n#else\nuniform mat4 world;\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "instancesVertex",
|
|
r = "#ifdef INSTANCES\nmat4 finalWorld=mat4(world0,world1,world2,world3);\n#else\nmat4 finalWorld=world;\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "#if NUM_BONE_INFLUENCERS>0\nmat4 influence;\n#ifdef BONETEXTURE\ninfluence=readMatrixFromRawSampler(boneSampler,matricesIndices[0])*matricesWeights[0];\n#if NUM_BONE_INFLUENCERS>1\ninfluence+=readMatrixFromRawSampler(boneSampler,matricesIndices[1])*matricesWeights[1];\n#endif\n#if NUM_BONE_INFLUENCERS>2\ninfluence+=readMatrixFromRawSampler(boneSampler,matricesIndices[2])*matricesWeights[2];\n#endif\n#if NUM_BONE_INFLUENCERS>3\ninfluence+=readMatrixFromRawSampler(boneSampler,matricesIndices[3])*matricesWeights[3];\n#endif\n#if NUM_BONE_INFLUENCERS>4\ninfluence+=readMatrixFromRawSampler(boneSampler,matricesIndicesExtra[0])*matricesWeightsExtra[0];\n#endif\n#if NUM_BONE_INFLUENCERS>5\ninfluence+=readMatrixFromRawSampler(boneSampler,matricesIndicesExtra[1])*matricesWeightsExtra[1];\n#endif\n#if NUM_BONE_INFLUENCERS>6\ninfluence+=readMatrixFromRawSampler(boneSampler,matricesIndicesExtra[2])*matricesWeightsExtra[2];\n#endif\n#if NUM_BONE_INFLUENCERS>7\ninfluence+=readMatrixFromRawSampler(boneSampler,matricesIndicesExtra[3])*matricesWeightsExtra[3];\n#endif\n#else\ninfluence=mBones[int(matricesIndices[0])]*matricesWeights[0];\n#if NUM_BONE_INFLUENCERS>1\ninfluence+=mBones[int(matricesIndices[1])]*matricesWeights[1];\n#endif\n#if NUM_BONE_INFLUENCERS>2\ninfluence+=mBones[int(matricesIndices[2])]*matricesWeights[2];\n#endif\n#if NUM_BONE_INFLUENCERS>3\ninfluence+=mBones[int(matricesIndices[3])]*matricesWeights[3];\n#endif\n#if NUM_BONE_INFLUENCERS>4\ninfluence+=mBones[int(matricesIndicesExtra[0])]*matricesWeightsExtra[0];\n#endif\n#if NUM_BONE_INFLUENCERS>5\ninfluence+=mBones[int(matricesIndicesExtra[1])]*matricesWeightsExtra[1];\n#endif\n#if NUM_BONE_INFLUENCERS>6\ninfluence+=mBones[int(matricesIndicesExtra[2])]*matricesWeightsExtra[2];\n#endif\n#if NUM_BONE_INFLUENCERS>7\ninfluence+=mBones[int(matricesIndicesExtra[3])]*matricesWeightsExtra[3];\n#endif\n#endif\nfinalWorld=finalWorld*influence;\n#endif";
|
|
i(5).a.IncludesShadersStore.bonesVertex = n
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return c
|
|
});
|
|
var n = i(0),
|
|
r = i(12),
|
|
o = i(62),
|
|
s = i(3),
|
|
a = function() {
|
|
return function(e, t, i, n) {
|
|
this.name = e, this.worldAxisForNormal = t, this.worldAxisForFileX = i, this.worldAxisForFileY = n
|
|
}
|
|
}(),
|
|
c = function() {
|
|
function e() {}
|
|
return e.ConvertCubeMapTextureToSphericalPolynomial = function(e) {
|
|
if (!e.isCube) return null;
|
|
var t, i, n = e.getSize().width,
|
|
r = e.readPixels(0),
|
|
o = e.readPixels(1);
|
|
e.isRenderTarget ? (t = e.readPixels(3), i = e.readPixels(2)) : (t = e.readPixels(2), i = e.readPixels(3));
|
|
var a = e.readPixels(4),
|
|
c = e.readPixels(5),
|
|
l = e.gammaSpace,
|
|
u = s.a.TEXTUREFORMAT_RGBA,
|
|
h = s.a.TEXTURETYPE_UNSIGNED_INT;
|
|
e.textureType && e.textureType !== s.a.TEXTURETYPE_UNSIGNED_INT && (h = s.a.TEXTURETYPE_FLOAT);
|
|
var d = {
|
|
size: n,
|
|
right: r,
|
|
left: o,
|
|
up: t,
|
|
down: i,
|
|
front: a,
|
|
back: c,
|
|
format: u,
|
|
type: h,
|
|
gammaSpace: l
|
|
};
|
|
return this.ConvertCubeMapToSphericalPolynomial(d)
|
|
}, e.ConvertCubeMapToSphericalPolynomial = function(e) {
|
|
for (var t = new o.a, i = 0, a = 2 / e.size, c = a, l = .5 * a - 1, u = 0; u < 6; u++)
|
|
for (var h = this.FileFaces[u], d = e[h.name], f = l, p = e.format === s.a.TEXTUREFORMAT_RGBA ? 4 : 3, _ = 0; _ < e.size; _++) {
|
|
for (var g = l, m = 0; m < e.size; m++) {
|
|
var v = h.worldAxisForFileX.scale(g).add(h.worldAxisForFileY.scale(f)).add(h.worldAxisForNormal);
|
|
v.normalize();
|
|
var y = Math.pow(1 + g * g + f * f, -1.5),
|
|
b = d[_ * e.size * p + m * p + 0],
|
|
T = d[_ * e.size * p + m * p + 1],
|
|
E = d[_ * e.size * p + m * p + 2];
|
|
e.type === s.a.TEXTURETYPE_UNSIGNED_INT && (b /= 255, T /= 255, E /= 255), e.gammaSpace && (b = Math.pow(r.a.Clamp(b), n.v), T = Math.pow(r.a.Clamp(T), n.v), E = Math.pow(r.a.Clamp(E), n.v));
|
|
var A = new n.e(b, T, E);
|
|
t.addLight(v, A, y), i += y, g += a
|
|
}
|
|
f += c
|
|
}
|
|
var x = 6 * (4 * Math.PI) / 6 / i;
|
|
return t.scaleInPlace(x), t.convertIncidentRadianceToIrradiance(), t.convertIrradianceToLambertianRadiance(), o.b.FromHarmonics(t)
|
|
}, e.FileFaces = [new a("right", new n.x(1, 0, 0), new n.x(0, 0, -1), new n.x(0, -1, 0)), new a("left", new n.x(-1, 0, 0), new n.x(0, 0, 1), new n.x(0, -1, 0)), new a("up", new n.x(0, 1, 0), new n.x(1, 0, 0), new n.x(0, 0, 1)), new a("down", new n.x(0, -1, 0), new n.x(1, 0, 0), new n.x(0, 0, -1)), new a("front", new n.x(0, 0, 1), new n.x(1, 0, 0), new n.x(0, -1, 0)), new a("back", new n.x(0, 0, -1), new n.x(-1, 0, 0), new n.x(0, -1, 0))], e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "b", function() {
|
|
return h
|
|
}), i.d(t, "a", function() {
|
|
return d
|
|
});
|
|
var n = i(1),
|
|
r = i(0),
|
|
o = i(4),
|
|
s = i(11),
|
|
a = i(111),
|
|
c = i(20),
|
|
l = i(76),
|
|
u = (i(126), i(127), i(15)),
|
|
h = function(e) {
|
|
function t(t, i, n, s, a, c, u) {
|
|
void 0 === i && (i = null), void 0 === n && (n = null);
|
|
var h = e.call(this, t, i, n, s, a) || this;
|
|
h.useVertexColor = c, h.useVertexAlpha = u, h.color = new r.e(1, 1, 1), h.alpha = 1, s && (h.color = s.color.clone(), h.alpha = s.alpha, h.useVertexColor = s.useVertexColor, h.useVertexAlpha = s.useVertexAlpha), h.intersectionThreshold = .1;
|
|
var d = {
|
|
attributes: [o.b.PositionKind, "world0", "world1", "world2", "world3"],
|
|
uniforms: ["vClipPlane", "vClipPlane2", "vClipPlane3", "vClipPlane4", "world", "viewProjection"],
|
|
needAlphaBlending: !0,
|
|
defines: []
|
|
};
|
|
return !1 === u && (d.needAlphaBlending = !1), c ? (d.defines.push("#define VERTEXCOLOR"), d.attributes.push(o.b.ColorKind)) : d.uniforms.push("color"), h._colorShader = new l.a("colorShader", h.getScene(), "color", d), h
|
|
}
|
|
return n.d(t, e), t.prototype._addClipPlaneDefine = function(e) {
|
|
var t = "#define " + e; - 1 === this._colorShader.options.defines.indexOf(t) && this._colorShader.options.defines.push(t)
|
|
}, t.prototype._removeClipPlaneDefine = function(e) {
|
|
var t = "#define " + e,
|
|
i = this._colorShader.options.defines.indexOf(t); - 1 !== i && this._colorShader.options.defines.splice(i, 1)
|
|
}, t.prototype.isReady = function() {
|
|
var t = this.getScene();
|
|
return t.clipPlane ? this._addClipPlaneDefine("CLIPPLANE") : this._removeClipPlaneDefine("CLIPPLANE"), t.clipPlane2 ? this._addClipPlaneDefine("CLIPPLANE2") : this._removeClipPlaneDefine("CLIPPLANE2"), t.clipPlane3 ? this._addClipPlaneDefine("CLIPPLANE3") : this._removeClipPlaneDefine("CLIPPLANE3"), t.clipPlane4 ? this._addClipPlaneDefine("CLIPPLANE4") : this._removeClipPlaneDefine("CLIPPLANE4"), !!this._colorShader.isReady() && e.prototype.isReady.call(this)
|
|
}, t.prototype.getClassName = function() {
|
|
return "LinesMesh"
|
|
}, Object.defineProperty(t.prototype, "material", {
|
|
get: function() {
|
|
return this._colorShader
|
|
},
|
|
set: function(e) {},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "checkCollisions", {
|
|
get: function() {
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._bind = function(e, t, i) {
|
|
if (!this._geometry) return this;
|
|
var n = this._colorShader.getEffect(),
|
|
r = this.isUnIndexed ? null : this._geometry.getIndexBuffer();
|
|
return this._geometry._bind(n, r), this.useVertexColor || this._colorShader.setColor4("color", this.color.toColor4(this.alpha)), u.a.BindClipPlane(n, this.getScene()), this
|
|
}, t.prototype._draw = function(e, t, i) {
|
|
if (!this._geometry || !this._geometry.getVertexBuffers() || !this._unIndexed && !this._geometry.getIndexBuffer()) return this;
|
|
var n = this.getScene().getEngine();
|
|
return this._unIndexed ? n.drawArraysType(c.a.LineListDrawMode, e.verticesStart, e.verticesCount, i) : n.drawElementsType(c.a.LineListDrawMode, e.indexStart, e.indexCount, i), this
|
|
}, t.prototype.dispose = function(t) {
|
|
this._colorShader.dispose(!1, !1, !0), e.prototype.dispose.call(this, t)
|
|
}, t.prototype.clone = function(e, i, n) {
|
|
return new t(e, this.getScene(), i, this, n)
|
|
}, t.prototype.createInstance = function(e) {
|
|
return new d(e, this)
|
|
}, t
|
|
}(s.a),
|
|
d = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i) || this;
|
|
return n.intersectionThreshold = i.intersectionThreshold, n
|
|
}
|
|
return n.d(t, e), t.prototype.getClassName = function() {
|
|
return "InstancedLinesMesh"
|
|
}, t
|
|
}(a.a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
});
|
|
var n = i(1),
|
|
r = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this) || this;
|
|
return i._buffer = t, i
|
|
}
|
|
return n.d(t, e), Object.defineProperty(t.prototype, "underlyingResource", {
|
|
get: function() {
|
|
return this._buffer
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t
|
|
}(i(78).a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.r(t);
|
|
var n = i(0),
|
|
r = i(33),
|
|
o = i(58),
|
|
s = function() {
|
|
function e(t, i, s, a, c, l) {
|
|
if (void 0 === i && (i = 1), void 0 === s && (s = 2), this._scaleLinesFactor = 4, this._instanced = !1, this.scaleLines = 1, this.scaleLines = i, !a) {
|
|
var u = new r.a("", t);
|
|
u.disableLighting = !0, u.emissiveColor = n.e.Red().scale(.5), a = o.a._CreateArrow(t, u)
|
|
}
|
|
if (!c) {
|
|
var h = new r.a("", t);
|
|
h.disableLighting = !0, h.emissiveColor = n.e.Green().scale(.5), c = o.a._CreateArrow(t, h)
|
|
}
|
|
if (!l) {
|
|
var d = new r.a("", t);
|
|
d.disableLighting = !0, d.emissiveColor = n.e.Blue().scale(.5), l = o.a._CreateArrow(t, d)
|
|
}
|
|
this._xAxis = a, this._xAxis.scaling.setAll(this.scaleLines * this._scaleLinesFactor), this._yAxis = c, this._yAxis.scaling.setAll(this.scaleLines * this._scaleLinesFactor), this._zAxis = l, this._zAxis.scaling.setAll(this.scaleLines * this._scaleLinesFactor), null != s && (e._SetRenderingGroupId(this._xAxis, s), e._SetRenderingGroupId(this._yAxis, s), e._SetRenderingGroupId(this._zAxis, s)), this.scene = t, this.update(new n.x, n.x.Right(), n.x.Up(), n.x.Forward())
|
|
}
|
|
return Object.defineProperty(e.prototype, "xAxis", {
|
|
get: function() {
|
|
return this._xAxis
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "yAxis", {
|
|
get: function() {
|
|
return this._yAxis
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "zAxis", {
|
|
get: function() {
|
|
return this._zAxis
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.update = function(e, t, i, n) {
|
|
this._xAxis.position.copyFrom(e), this._xAxis.setDirection(t), this._xAxis.scaling.setAll(this.scaleLines * this._scaleLinesFactor), this._yAxis.position.copyFrom(e), this._yAxis.setDirection(i), this._yAxis.scaling.setAll(this.scaleLines * this._scaleLinesFactor), this._zAxis.position.copyFrom(e), this._zAxis.setDirection(n), this._zAxis.scaling.setAll(this.scaleLines * this._scaleLinesFactor)
|
|
}, e.prototype.createInstance = function() {
|
|
var t = o.a._CreateArrowInstance(this.scene, this._xAxis),
|
|
i = o.a._CreateArrowInstance(this.scene, this._yAxis),
|
|
n = o.a._CreateArrowInstance(this.scene, this._zAxis),
|
|
r = new e(this.scene, this.scaleLines, null, t, i, n);
|
|
return r._instanced = !0, r
|
|
}, e.prototype.dispose = function() {
|
|
this._xAxis && (this._xAxis.dispose(!1, !this._instanced), delete this._xAxis), this._yAxis && (this._yAxis.dispose(!1, !this._instanced), delete this._yAxis), this._zAxis && (this._zAxis.dispose(!1, !this._instanced), delete this._zAxis), delete this.scene
|
|
}, e._SetRenderingGroupId = function(e, t) {
|
|
e.getChildMeshes().forEach(function(e) {
|
|
e.renderingGroupId = t
|
|
})
|
|
}, e
|
|
}(),
|
|
a = i(1),
|
|
c = function(e) {
|
|
function t(t, i, r, o) {
|
|
void 0 === o && (o = 1);
|
|
var s = e.call(this, t, o) || this;
|
|
return s.pos = n.x.Zero(), s.xaxis = n.x.Zero(), s.yaxis = n.x.Zero(), s.zaxis = n.x.Zero(), s.mesh = r, s.bone = i, s
|
|
}
|
|
return a.d(t, e), t.prototype.update = function() {
|
|
if (this.mesh && this.bone) {
|
|
var t = this.bone;
|
|
t.getAbsolutePositionToRef(this.mesh, this.pos), t.getDirectionToRef(n.c.X, this.mesh, this.xaxis), t.getDirectionToRef(n.c.Y, this.mesh, this.yaxis), t.getDirectionToRef(n.c.Z, this.mesh, this.zaxis), e.prototype.update.call(this, this.pos, this.xaxis, this.yaxis, this.zaxis)
|
|
}
|
|
}, t.prototype.dispose = function() {
|
|
this.mesh && (this.mesh = null, this.bone = null, e.prototype.dispose.call(this))
|
|
}, t
|
|
}(s),
|
|
l = i(9),
|
|
u = i(8),
|
|
h = i(16),
|
|
d = i(10);
|
|
Object.defineProperty(h.a.prototype, "debugLayer", {
|
|
get: function() {
|
|
return this._debugLayer || (this._debugLayer = new f(this)), this._debugLayer
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
});
|
|
var f = function() {
|
|
function e(e) {
|
|
var t = this;
|
|
this.BJSINSPECTOR = this._getGlobalInspector(), this.onPropertyChangedObservable = new u.c, this._scene = e, this._scene.onDisposeObservable.add(function() {
|
|
t._scene._debugLayer && t._scene._debugLayer.hide()
|
|
})
|
|
}
|
|
return e.prototype._createInspector = function(e) {
|
|
if (!this.isVisible()) {
|
|
var t = a.a({
|
|
overlay: !1,
|
|
showExplorer: !0,
|
|
showInspector: !0,
|
|
embedMode: !1,
|
|
handleResize: !0,
|
|
enablePopup: !0
|
|
}, e);
|
|
this.BJSINSPECTOR = this.BJSINSPECTOR || this._getGlobalInspector(), this.BJSINSPECTOR.Inspector.Show(this._scene, t)
|
|
}
|
|
}, e.prototype.select = function(e, t) {
|
|
this.BJSINSPECTOR && (this.BJSINSPECTOR.Inspector.MarkLineContainerTitleForHighlighting(t), this.BJSINSPECTOR.Inspector.OnSelectionChangeObservable.notifyObservers(e))
|
|
}, e.prototype._getGlobalInspector = function() {
|
|
return "undefined" != typeof INSPECTOR ? INSPECTOR : "undefined" != typeof BABYLON && void 0 !== BABYLON.Inspector ? BABYLON : void 0
|
|
}, e.prototype.isVisible = function() {
|
|
return this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector.IsVisible
|
|
}, e.prototype.hide = function() {
|
|
this.BJSINSPECTOR && this.BJSINSPECTOR.Inspector.Hide()
|
|
}, e.prototype.show = function(t) {
|
|
var i = this;
|
|
return new Promise(function(n, r) {
|
|
if (void 0 === i.BJSINSPECTOR) {
|
|
var o = t && t.inspectorURL ? t.inspectorURL : e.InspectorURL;
|
|
l.h.LoadScript(o, function() {
|
|
i._createInspector(t), n(i)
|
|
})
|
|
} else i._createInspector(t), n(i)
|
|
})
|
|
}, e.InspectorURL = "https://unpkg.com/babylonjs-inspector@" + d.b.Version + "/babylon.inspector.bundle.js", e
|
|
}(),
|
|
p = i(11),
|
|
_ = i(52),
|
|
g = i(46),
|
|
m = i(23),
|
|
v = i(27),
|
|
y = i(41),
|
|
b = i(53),
|
|
T = function() {
|
|
function e(e) {
|
|
this._impostors = [], this._meshes = [], this._numMeshes = 0, this._debugMeshMeshes = new Array, this._scene = e || m.a.LastCreatedScene;
|
|
var t = this._scene.getPhysicsEngine();
|
|
t && (this._physicsEnginePlugin = t.getPhysicsPlugin()), this._utilityLayer = new y.a(this._scene, !1), this._utilityLayer.pickUtilitySceneFirst = !1, this._utilityLayer.utilityLayerScene.autoClearDepthAndStencil = !0
|
|
}
|
|
return e.prototype._updateDebugMeshes = function() {
|
|
for (var e = this._physicsEnginePlugin, t = 0; t < this._numMeshes; t++) {
|
|
var i = this._impostors[t];
|
|
if (i)
|
|
if (i.isDisposed) this.hideImpostor(this._impostors[t--]);
|
|
else {
|
|
if (i.type === v.a.MeshImpostor) continue;
|
|
var n = this._meshes[t];
|
|
n && e && e.syncMeshWithImpostor(n, i)
|
|
}
|
|
}
|
|
}, e.prototype.showImpostor = function(e, t) {
|
|
if (!this._scene) return null;
|
|
for (var i = 0; i < this._numMeshes; i++)
|
|
if (this._impostors[i] == e) return null;
|
|
var n = this._getDebugMesh(e, t);
|
|
return n && (this._impostors[this._numMeshes] = e, this._meshes[this._numMeshes] = n, 0 === this._numMeshes && (this._renderFunction = this._updateDebugMeshes.bind(this), this._scene.registerBeforeRender(this._renderFunction)), this._numMeshes++), n
|
|
}, e.prototype.hideImpostor = function(e) {
|
|
if (e && this._scene && this._utilityLayer) {
|
|
for (var t = !1, i = this._utilityLayer.utilityLayerScene, n = 0; n < this._numMeshes; n++)
|
|
if (this._impostors[n] == e) {
|
|
var r = this._meshes[n];
|
|
if (!r) continue;
|
|
i.removeMesh(r), r.dispose();
|
|
var o = this._debugMeshMeshes.indexOf(r);
|
|
o > -1 && this._debugMeshMeshes.splice(o, 1), this._numMeshes--, this._numMeshes > 0 ? (this._meshes[n] = this._meshes[this._numMeshes], this._impostors[n] = this._impostors[this._numMeshes], this._meshes[this._numMeshes] = null, this._impostors[this._numMeshes] = null) : (this._meshes[0] = null, this._impostors[0] = null), t = !0;
|
|
break
|
|
} t && 0 === this._numMeshes && this._scene.unregisterBeforeRender(this._renderFunction)
|
|
}
|
|
}, e.prototype._getDebugMaterial = function(e) {
|
|
return this._debugMaterial || (this._debugMaterial = new r.a("", e), this._debugMaterial.wireframe = !0, this._debugMaterial.emissiveColor = n.e.White(), this._debugMaterial.disableLighting = !0), this._debugMaterial
|
|
}, e.prototype._getDebugBoxMesh = function(e) {
|
|
return this._debugBoxMesh || (this._debugBoxMesh = _.a.CreateBox("physicsBodyBoxViewMesh", {
|
|
size: 1
|
|
}, e), this._debugBoxMesh.rotationQuaternion = n.q.Identity(), this._debugBoxMesh.material = this._getDebugMaterial(e), this._debugBoxMesh.setEnabled(!1)), this._debugBoxMesh.createInstance("physicsBodyBoxViewInstance")
|
|
}, e.prototype._getDebugSphereMesh = function(e) {
|
|
return this._debugSphereMesh || (this._debugSphereMesh = g.a.CreateSphere("physicsBodySphereViewMesh", {
|
|
diameter: 1
|
|
}, e), this._debugSphereMesh.rotationQuaternion = n.q.Identity(), this._debugSphereMesh.material = this._getDebugMaterial(e), this._debugSphereMesh.setEnabled(!1)), this._debugSphereMesh.createInstance("physicsBodyBoxViewInstance")
|
|
}, e.prototype._getDebugCylinderMesh = function(e) {
|
|
return this._debugCylinderMesh || (this._debugCylinderMesh = b.a.CreateCylinder("physicsBodyCylinderViewMesh", {
|
|
diameterTop: 1,
|
|
diameterBottom: 1,
|
|
height: 1
|
|
}, e), this._debugCylinderMesh.rotationQuaternion = n.q.Identity(), this._debugCylinderMesh.material = this._getDebugMaterial(e), this._debugCylinderMesh.setEnabled(!1)), this._debugCylinderMesh.createInstance("physicsBodyBoxViewInstance")
|
|
}, e.prototype._getDebugMeshMesh = function(e, t) {
|
|
var i = new p.a(e.name, t, null, e);
|
|
return i.position = n.x.Zero(), i.setParent(e), i.material = this._getDebugMaterial(t), this._debugMeshMeshes.push(i), i
|
|
}, e.prototype._getDebugMesh = function(e, t) {
|
|
var i = this;
|
|
if (!this._utilityLayer) return null;
|
|
if (t && t.parent && t.parent.physicsImpostor) return null;
|
|
var n = null,
|
|
r = this._utilityLayer.utilityLayerScene;
|
|
switch (e.type) {
|
|
case v.a.BoxImpostor:
|
|
n = this._getDebugBoxMesh(r), e.getBoxSizeToRef(n.scaling);
|
|
break;
|
|
case v.a.SphereImpostor:
|
|
n = this._getDebugSphereMesh(r);
|
|
var o = e.getRadius();
|
|
n.scaling.x = 2 * o, n.scaling.y = 2 * o, n.scaling.z = 2 * o;
|
|
break;
|
|
case v.a.MeshImpostor:
|
|
t && (n = this._getDebugMeshMesh(t, r));
|
|
break;
|
|
case v.a.NoImpostor:
|
|
if (t) t.getChildMeshes().filter(function(e) {
|
|
return e.physicsImpostor ? 1 : 0
|
|
}).forEach(function(e) {
|
|
i._getDebugBoxMesh(r).parent = e
|
|
});
|
|
break;
|
|
case v.a.CylinderImpostor:
|
|
n = this._getDebugCylinderMesh(r);
|
|
var s = e.object.getBoundingInfo();
|
|
n.scaling.x = s.boundingBox.maximum.x - s.boundingBox.minimum.x, n.scaling.y = s.boundingBox.maximum.y - s.boundingBox.minimum.y, n.scaling.z = s.boundingBox.maximum.z - s.boundingBox.minimum.z
|
|
}
|
|
return n
|
|
}, e.prototype.dispose = function() {
|
|
for (var e = this._numMeshes, t = 0; t < e; t++) this.hideImpostor(this._impostors[0]);
|
|
this._debugBoxMesh && this._debugBoxMesh.dispose(), this._debugSphereMesh && this._debugSphereMesh.dispose(), this._debugCylinderMesh && this._debugCylinderMesh.dispose(), this._debugMaterial && this._debugMaterial.dispose(), this._impostors.length = 0, this._scene = null, this._physicsEnginePlugin = null, this._utilityLayer && (this._utilityLayer.dispose(), this._utilityLayer = null)
|
|
}, e
|
|
}(),
|
|
E = i(40),
|
|
A = function() {
|
|
function e(e) {
|
|
this.ray = e
|
|
}
|
|
return e.CreateAndShow = function(t, i, n) {
|
|
var r = new e(t);
|
|
return r.show(i, n), r
|
|
}, e.prototype.show = function(e, t) {
|
|
if (!this._renderFunction && this.ray) {
|
|
var i = this.ray;
|
|
this._renderFunction = this._render.bind(this), this._scene = e, this._renderPoints = [i.origin, i.origin.add(i.direction.scale(i.length))], this._renderLine = p.a.CreateLines("ray", this._renderPoints, e, !0), this._renderFunction && this._scene.registerBeforeRender(this._renderFunction)
|
|
}
|
|
t && this._renderLine && this._renderLine.color.copyFrom(t)
|
|
}, e.prototype.hide = function() {
|
|
this._renderFunction && this._scene && (this._scene.unregisterBeforeRender(this._renderFunction), this._scene = null, this._renderFunction = null, this._renderLine && (this._renderLine.dispose(), this._renderLine = null), this._renderPoints = [])
|
|
}, e.prototype._render = function() {
|
|
var e = this.ray;
|
|
if (e) {
|
|
var t = this._renderPoints[1],
|
|
i = Math.min(e.length, 1e6);
|
|
t.copyFrom(e.direction), t.scaleInPlace(i), t.addInPlace(e.origin), p.a.CreateLines("ray", this._renderPoints, this._scene, !0, this._renderLine)
|
|
}
|
|
}, e.prototype.attachToMesh = function(e, t, i, r) {
|
|
this._attachedToMesh = e;
|
|
var o = this.ray;
|
|
o && (o.direction || (o.direction = n.x.Zero()), o.origin || (o.origin = n.x.Zero()), r && (o.length = r), i || (i = n.x.Zero()), t || (t = new n.x(0, 0, -1)), this._meshSpaceDirection ? (this._meshSpaceDirection.copyFrom(t), this._meshSpaceOrigin.copyFrom(i)) : (this._meshSpaceDirection = t.clone(), this._meshSpaceOrigin = i.clone()), this._updateToMeshFunction || (this._updateToMeshFunction = this._updateToMesh.bind(this), this._attachedToMesh.getScene().registerBeforeRender(this._updateToMeshFunction)), this._updateToMesh())
|
|
}, e.prototype.detachFromMesh = function() {
|
|
this._attachedToMesh && (this._updateToMeshFunction && this._attachedToMesh.getScene().unregisterBeforeRender(this._updateToMeshFunction), this._attachedToMesh = null, this._updateToMeshFunction = null)
|
|
}, e.prototype._updateToMesh = function() {
|
|
var e = this.ray;
|
|
this._attachedToMesh && e && (this._attachedToMesh._isDisposed ? this.detachFromMesh() : (this._attachedToMesh.getDirectionToRef(this._meshSpaceDirection, e.direction), n.x.TransformCoordinatesToRef(this._meshSpaceOrigin, this._attachedToMesh.getWorldMatrix(), e.origin)))
|
|
}, e.prototype.dispose = function() {
|
|
this.hide(), this.detachFromMesh(), this.ray = null
|
|
}, e
|
|
}(),
|
|
x = function() {
|
|
function e(e, t, i, r, o) {
|
|
void 0 === r && (r = !0), void 0 === o && (o = 1), this.skeleton = e, this.mesh = t, this.autoUpdateBonesMatrices = r, this.renderingGroupId = o, this.color = n.e.White(), this._debugLines = new Array, this._isEnabled = !1, this._scene = i, this._utilityLayer = new y.a(this._scene, !1), this._utilityLayer.pickUtilitySceneFirst = !1, this._utilityLayer.utilityLayerScene.autoClearDepthAndStencil = !0, this.update(), this._renderFunction = this.update.bind(this)
|
|
}
|
|
return Object.defineProperty(e.prototype, "debugMesh", {
|
|
get: function() {
|
|
return this._debugMesh
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isEnabled", {
|
|
get: function() {
|
|
return this._isEnabled
|
|
},
|
|
set: function(e) {
|
|
this._isEnabled !== e && (this._isEnabled = e, e ? this._scene.registerBeforeRender(this._renderFunction) : this._scene.unregisterBeforeRender(this._renderFunction))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._getBonePosition = function(e, t, i, r, o, s) {
|
|
void 0 === r && (r = 0), void 0 === o && (o = 0), void 0 === s && (s = 0);
|
|
var a = n.t.Matrix[0],
|
|
c = t.getParent();
|
|
if (a.copyFrom(t.getLocalMatrix()), 0 !== r || 0 !== o || 0 !== s) {
|
|
var l = n.t.Matrix[1];
|
|
n.j.IdentityToRef(l), l.setTranslationFromFloats(r, o, s), l.multiplyToRef(a, a)
|
|
}
|
|
c && a.multiplyToRef(c.getAbsoluteTransform(), a), a.multiplyToRef(i, a), e.x = a.m[12], e.y = a.m[13], e.z = a.m[14]
|
|
}, e.prototype._getLinesForBonesWithLength = function(e, t) {
|
|
for (var i = e.length, r = this.mesh._effectiveMesh.position, o = 0; o < i; o++) {
|
|
var s = e[o],
|
|
a = this._debugLines[o];
|
|
a || (a = [n.x.Zero(), n.x.Zero()], this._debugLines[o] = a), this._getBonePosition(a[0], s, t), this._getBonePosition(a[1], s, t, 0, s.length, 0), a[0].subtractInPlace(r), a[1].subtractInPlace(r)
|
|
}
|
|
}, e.prototype._getLinesForBonesNoLength = function(e, t) {
|
|
for (var i = e.length, r = 0, o = this.mesh._effectiveMesh, s = o.position, a = i - 1; a >= 0; a--) {
|
|
var c = e[a],
|
|
l = c.getParent();
|
|
if (l) {
|
|
var u = this._debugLines[r];
|
|
u || (u = [n.x.Zero(), n.x.Zero()], this._debugLines[r] = u), c.getAbsolutePositionToRef(o, u[0]), l.getAbsolutePositionToRef(o, u[1]), u[0].subtractInPlace(s), u[1].subtractInPlace(s), r++
|
|
}
|
|
}
|
|
}, e.prototype.update = function() {
|
|
if (this._utilityLayer) {
|
|
this.autoUpdateBonesMatrices && this.skeleton.computeAbsoluteTransforms();
|
|
var e = this.mesh._effectiveMesh;
|
|
void 0 === this.skeleton.bones[0].length ? this._getLinesForBonesNoLength(this.skeleton.bones, e.getWorldMatrix()) : this._getLinesForBonesWithLength(this.skeleton.bones, e.getWorldMatrix());
|
|
var t = this._utilityLayer.utilityLayerScene;
|
|
this._debugMesh ? E.a.CreateLineSystem("", {
|
|
lines: this._debugLines,
|
|
updatable: !0,
|
|
instance: this._debugMesh
|
|
}, t) : (this._debugMesh = E.a.CreateLineSystem("", {
|
|
lines: this._debugLines,
|
|
updatable: !0,
|
|
instance: null
|
|
}, t), this._debugMesh.renderingGroupId = this.renderingGroupId), this._debugMesh.position.copyFrom(this.mesh.position), this._debugMesh.color = this.color
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
this.isEnabled = !1, this._debugMesh && (this.isEnabled = !1, this._debugMesh.dispose(), this._debugMesh = null), this._utilityLayer && (this._utilityLayer.dispose(), this._utilityLayer = null)
|
|
}, e
|
|
}();
|
|
i.d(t, "AxesViewer", function() {
|
|
return s
|
|
}), i.d(t, "BoneAxesViewer", function() {
|
|
return c
|
|
}), i.d(t, "DebugLayer", function() {
|
|
return f
|
|
}), i.d(t, "PhysicsViewer", function() {
|
|
return T
|
|
}), i.d(t, "RayHelper", function() {
|
|
return A
|
|
}), i.d(t, "SkeletonViewer", function() {
|
|
return x
|
|
})
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return o
|
|
});
|
|
var n = i(1),
|
|
r = i(0),
|
|
o = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i) || this;
|
|
return n._normalMatrix = new r.j, n.allowShaderHotSwapping = !0, n._storeEffectOnSubMeshes = !0, n
|
|
}
|
|
return n.d(t, e), t.prototype.getEffect = function() {
|
|
return this._activeEffect
|
|
}, t.prototype.isReady = function(e, t) {
|
|
return !!e && (!e.subMeshes || 0 === e.subMeshes.length || this.isReadyForSubMesh(e, e.subMeshes[0], t))
|
|
}, t.prototype.bindOnlyWorldMatrix = function(e) {
|
|
this._activeEffect.setMatrix("world", e)
|
|
}, t.prototype.bindOnlyNormalMatrix = function(e) {
|
|
this._activeEffect.setMatrix("normalMatrix", e)
|
|
}, t.prototype.bind = function(e, t) {
|
|
t && this.bindForSubMesh(e, t, t.subMeshes[0])
|
|
}, t.prototype._afterBind = function(t, i) {
|
|
void 0 === i && (i = null), e.prototype._afterBind.call(this, t), this.getScene()._cachedEffect = i
|
|
}, t.prototype._mustRebind = function(e, t, i) {
|
|
return void 0 === i && (i = 1), e.isCachedMaterialInvalid(this, t, i)
|
|
}, t
|
|
}(i(20).a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return d
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(0),
|
|
s = i(4),
|
|
a = i(7),
|
|
c = i(15),
|
|
l = i(5),
|
|
u = i(20),
|
|
h = i(22),
|
|
d = function(e) {
|
|
function t(t, i, r, s) {
|
|
void 0 === s && (s = {});
|
|
var a = e.call(this, t, i) || this;
|
|
return a._textures = {}, a._textureArrays = {}, a._floats = {}, a._ints = {}, a._floatsArrays = {}, a._colors3 = {}, a._colors3Arrays = {}, a._colors4 = {}, a._vectors2 = {}, a._vectors3 = {}, a._vectors4 = {}, a._matrices = {}, a._matrices3x3 = {}, a._matrices2x2 = {}, a._vectors2Arrays = {}, a._vectors3Arrays = {}, a._cachedWorldViewMatrix = new o.j, a._shaderPath = r, a._options = n.a({
|
|
needAlphaBlending: !1,
|
|
needAlphaTesting: !1,
|
|
attributes: ["position", "normal", "uv"],
|
|
uniforms: ["worldViewProjection"],
|
|
uniformBuffers: [],
|
|
samplers: [],
|
|
defines: []
|
|
}, s), a
|
|
}
|
|
return n.d(t, e), Object.defineProperty(t.prototype, "options", {
|
|
get: function() {
|
|
return this._options
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "ShaderMaterial"
|
|
}, t.prototype.needAlphaBlending = function() {
|
|
return this.alpha < 1 || this._options.needAlphaBlending
|
|
}, t.prototype.needAlphaTesting = function() {
|
|
return this._options.needAlphaTesting
|
|
}, t.prototype._checkUniform = function(e) {
|
|
-1 === this._options.uniforms.indexOf(e) && this._options.uniforms.push(e)
|
|
}, t.prototype.setTexture = function(e, t) {
|
|
return -1 === this._options.samplers.indexOf(e) && this._options.samplers.push(e), this._textures[e] = t, this
|
|
}, t.prototype.setTextureArray = function(e, t) {
|
|
return -1 === this._options.samplers.indexOf(e) && this._options.samplers.push(e), this._checkUniform(e), this._textureArrays[e] = t, this
|
|
}, t.prototype.setFloat = function(e, t) {
|
|
return this._checkUniform(e), this._floats[e] = t, this
|
|
}, t.prototype.setInt = function(e, t) {
|
|
return this._checkUniform(e), this._ints[e] = t, this
|
|
}, t.prototype.setFloats = function(e, t) {
|
|
return this._checkUniform(e), this._floatsArrays[e] = t, this
|
|
}, t.prototype.setColor3 = function(e, t) {
|
|
return this._checkUniform(e), this._colors3[e] = t, this
|
|
}, t.prototype.setColor3Array = function(e, t) {
|
|
return this._checkUniform(e), this._colors3Arrays[e] = t.reduce(function(e, t) {
|
|
return t.toArray(e, e.length), e
|
|
}, []), this
|
|
}, t.prototype.setColor4 = function(e, t) {
|
|
return this._checkUniform(e), this._colors4[e] = t, this
|
|
}, t.prototype.setVector2 = function(e, t) {
|
|
return this._checkUniform(e), this._vectors2[e] = t, this
|
|
}, t.prototype.setVector3 = function(e, t) {
|
|
return this._checkUniform(e), this._vectors3[e] = t, this
|
|
}, t.prototype.setVector4 = function(e, t) {
|
|
return this._checkUniform(e), this._vectors4[e] = t, this
|
|
}, t.prototype.setMatrix = function(e, t) {
|
|
return this._checkUniform(e), this._matrices[e] = t, this
|
|
}, t.prototype.setMatrix3x3 = function(e, t) {
|
|
return this._checkUniform(e), this._matrices3x3[e] = t, this
|
|
}, t.prototype.setMatrix2x2 = function(e, t) {
|
|
return this._checkUniform(e), this._matrices2x2[e] = t, this
|
|
}, t.prototype.setArray2 = function(e, t) {
|
|
return this._checkUniform(e), this._vectors2Arrays[e] = t, this
|
|
}, t.prototype.setArray3 = function(e, t) {
|
|
return this._checkUniform(e), this._vectors3Arrays[e] = t, this
|
|
}, t.prototype._checkCache = function(e, t) {
|
|
return !e || (this._effect && this._effect.defines.indexOf("#define INSTANCES"), !1)
|
|
}, t.prototype.isReadyForSubMesh = function(e, t, i) {
|
|
return this.isReady(e, i)
|
|
}, t.prototype.isReady = function(e, t) {
|
|
var i = this.getScene(),
|
|
n = i.getEngine();
|
|
if (!this.checkReadyOnEveryCall && this._renderId === i.getRenderId() && this._checkCache(e, t)) return !0;
|
|
for (var r = [], o = [], a = new l.c, u = 0; u < this._options.defines.length; u++) r.push(this._options.defines[u]);
|
|
for (u = 0; u < this._options.attributes.length; u++) o.push(this._options.attributes[u]);
|
|
if (e && e.isVerticesDataPresent(s.b.ColorKind) && (o.push(s.b.ColorKind), r.push("#define VERTEXCOLOR")), t && (r.push("#define INSTANCES"), c.a.PrepareAttributesForInstances(o, r)), e && e.useBones && e.computeBonesUsingShaders && e.skeleton) {
|
|
o.push(s.b.MatricesIndicesKind), o.push(s.b.MatricesWeightsKind), e.numBoneInfluencers > 4 && (o.push(s.b.MatricesIndicesExtraKind), o.push(s.b.MatricesWeightsExtraKind));
|
|
var h = e.skeleton;
|
|
r.push("#define NUM_BONE_INFLUENCERS " + e.numBoneInfluencers), a.addCPUSkinningFallback(0, e), h.isUsingTextureForMatrices ? (r.push("#define BONETEXTURE"), -1 === this._options.uniforms.indexOf("boneTextureWidth") && this._options.uniforms.push("boneTextureWidth"), -1 === this._options.samplers.indexOf("boneSampler") && this._options.samplers.push("boneSampler")) : (r.push("#define BonesPerMesh " + (h.bones.length + 1)), -1 === this._options.uniforms.indexOf("mBones") && this._options.uniforms.push("mBones"))
|
|
} else r.push("#define NUM_BONE_INFLUENCERS 0");
|
|
for (var d in this._textures)
|
|
if (!this._textures[d].isReady()) return !1;
|
|
e && this._shouldTurnAlphaTestOn(e) && r.push("#define ALPHATEST");
|
|
var f = this._effect,
|
|
p = r.join("\n");
|
|
return this._effect = n.createEffect(this._shaderPath, {
|
|
attributes: o,
|
|
uniformsNames: this._options.uniforms,
|
|
uniformBuffersNames: this._options.uniformBuffers,
|
|
samplers: this._options.samplers,
|
|
defines: p,
|
|
fallbacks: a,
|
|
onCompiled: this.onCompiled,
|
|
onError: this.onError
|
|
}, n), !!this._effect.isReady() && (f !== this._effect && i.resetCachedMaterial(), this._renderId = i.getRenderId(), !0)
|
|
}, t.prototype.bindOnlyWorldMatrix = function(e) {
|
|
var t = this.getScene();
|
|
this._effect && (-1 !== this._options.uniforms.indexOf("world") && this._effect.setMatrix("world", e), -1 !== this._options.uniforms.indexOf("worldView") && (e.multiplyToRef(t.getViewMatrix(), this._cachedWorldViewMatrix), this._effect.setMatrix("worldView", this._cachedWorldViewMatrix)), -1 !== this._options.uniforms.indexOf("worldViewProjection") && this._effect.setMatrix("worldViewProjection", e.multiply(t.getTransformMatrix())))
|
|
}, t.prototype.bind = function(e, t) {
|
|
if (this.bindOnlyWorldMatrix(e), this._effect && this.getScene().getCachedMaterial() !== this) {
|
|
var i;
|
|
for (i in -1 !== this._options.uniforms.indexOf("view") && this._effect.setMatrix("view", this.getScene().getViewMatrix()), -1 !== this._options.uniforms.indexOf("projection") && this._effect.setMatrix("projection", this.getScene().getProjectionMatrix()), -1 !== this._options.uniforms.indexOf("viewProjection") && this._effect.setMatrix("viewProjection", this.getScene().getTransformMatrix()), c.a.BindBonesParameters(t, this._effect), this._textures) this._effect.setTexture(i, this._textures[i]);
|
|
for (i in this._textureArrays) this._effect.setTextureArray(i, this._textureArrays[i]);
|
|
for (i in this._ints) this._effect.setInt(i, this._ints[i]);
|
|
for (i in this._floats) this._effect.setFloat(i, this._floats[i]);
|
|
for (i in this._floatsArrays) this._effect.setArray(i, this._floatsArrays[i]);
|
|
for (i in this._colors3) this._effect.setColor3(i, this._colors3[i]);
|
|
for (i in this._colors3Arrays) this._effect.setArray3(i, this._colors3Arrays[i]);
|
|
for (i in this._colors4) {
|
|
var n = this._colors4[i];
|
|
this._effect.setFloat4(i, n.r, n.g, n.b, n.a)
|
|
}
|
|
for (i in this._vectors2) this._effect.setVector2(i, this._vectors2[i]);
|
|
for (i in this._vectors3) this._effect.setVector3(i, this._vectors3[i]);
|
|
for (i in this._vectors4) this._effect.setVector4(i, this._vectors4[i]);
|
|
for (i in this._matrices) this._effect.setMatrix(i, this._matrices[i]);
|
|
for (i in this._matrices3x3) this._effect.setMatrix3x3(i, this._matrices3x3[i]);
|
|
for (i in this._matrices2x2) this._effect.setMatrix2x2(i, this._matrices2x2[i]);
|
|
for (i in this._vectors2Arrays) this._effect.setArray2(i, this._vectors2Arrays[i]);
|
|
for (i in this._vectors3Arrays) this._effect.setArray3(i, this._vectors3Arrays[i])
|
|
}
|
|
this._afterBind(t)
|
|
}, t.prototype.getActiveTextures = function() {
|
|
var t = e.prototype.getActiveTextures.call(this);
|
|
for (var i in this._textures) t.push(this._textures[i]);
|
|
for (var i in this._textureArrays)
|
|
for (var n = this._textureArrays[i], r = 0; r < n.length; r++) t.push(n[r]);
|
|
return t
|
|
}, t.prototype.hasTexture = function(t) {
|
|
if (e.prototype.hasTexture.call(this, t)) return !0;
|
|
for (var i in this._textures)
|
|
if (this._textures[i] === t) return !0;
|
|
for (var i in this._textureArrays)
|
|
for (var n = this._textureArrays[i], r = 0; r < n.length; r++)
|
|
if (n[r] === t) return !0;
|
|
return !1
|
|
}, t.prototype.clone = function(e) {
|
|
return new t(e, this.getScene(), this._shaderPath, this._options)
|
|
}, t.prototype.dispose = function(t, i, n) {
|
|
if (i) {
|
|
var r;
|
|
for (r in this._textures) this._textures[r].dispose();
|
|
for (r in this._textureArrays)
|
|
for (var o = this._textureArrays[r], s = 0; s < o.length; s++) o[s].dispose()
|
|
}
|
|
this._textures = {}, e.prototype.dispose.call(this, t, i, n)
|
|
}, t.prototype.serialize = function() {
|
|
var e, t = r.a.Serialize(this);
|
|
for (e in t.customType = "BABYLON.ShaderMaterial", t.options = this._options, t.shaderPath = this._shaderPath, t.textures = {}, this._textures) t.textures[e] = this._textures[e].serialize();
|
|
for (e in t.textureArrays = {}, this._textureArrays) {
|
|
t.textureArrays[e] = [];
|
|
for (var i = this._textureArrays[e], n = 0; n < i.length; n++) t.textureArrays[e].push(i[n].serialize())
|
|
}
|
|
for (e in t.floats = {}, this._floats) t.floats[e] = this._floats[e];
|
|
for (e in t.FloatArrays = {}, this._floatsArrays) t.FloatArrays[e] = this._floatsArrays[e];
|
|
for (e in t.colors3 = {}, this._colors3) t.colors3[e] = this._colors3[e].asArray();
|
|
for (e in t.colors3Arrays = {}, this._colors3Arrays) t.colors3Arrays[e] = this._colors3Arrays[e];
|
|
for (e in t.colors4 = {}, this._colors4) t.colors4[e] = this._colors4[e].asArray();
|
|
for (e in t.vectors2 = {}, this._vectors2) t.vectors2[e] = this._vectors2[e].asArray();
|
|
for (e in t.vectors3 = {}, this._vectors3) t.vectors3[e] = this._vectors3[e].asArray();
|
|
for (e in t.vectors4 = {}, this._vectors4) t.vectors4[e] = this._vectors4[e].asArray();
|
|
for (e in t.matrices = {}, this._matrices) t.matrices[e] = this._matrices[e].asArray();
|
|
for (e in t.matrices3x3 = {}, this._matrices3x3) t.matrices3x3[e] = this._matrices3x3[e];
|
|
for (e in t.matrices2x2 = {}, this._matrices2x2) t.matrices2x2[e] = this._matrices2x2[e];
|
|
for (e in t.vectors2Arrays = {}, this._vectors2Arrays) t.vectors2Arrays[e] = this._vectors2Arrays[e];
|
|
for (e in t.vectors3Arrays = {}, this._vectors3Arrays) t.vectors3Arrays[e] = this._vectors3Arrays[e];
|
|
return t
|
|
}, t.Parse = function(e, i, n) {
|
|
var s, c = r.a.Parse(function() {
|
|
return new t(e.name, i, e.shaderPath, e.options)
|
|
}, e, i, n);
|
|
for (s in e.textures) c.setTexture(s, a.a.Parse(e.textures[s], i, n));
|
|
for (s in e.textureArrays) {
|
|
for (var l = e.textureArrays[s], u = new Array, h = 0; h < l.length; h++) u.push(a.a.Parse(l[h], i, n));
|
|
c.setTextureArray(s, u)
|
|
}
|
|
for (s in e.floats) c.setFloat(s, e.floats[s]);
|
|
for (s in e.floatsArrays) c.setFloats(s, e.floatsArrays[s]);
|
|
for (s in e.colors3) c.setColor3(s, o.e.FromArray(e.colors3[s]));
|
|
for (s in e.colors3Arrays) {
|
|
var d = e.colors3Arrays[s].reduce(function(e, t, i) {
|
|
return i % 3 == 0 ? e.push([t]) : e[e.length - 1].push(t), e
|
|
}, []).map(function(e) {
|
|
return o.e.FromArray(e)
|
|
});
|
|
c.setColor3Array(s, d)
|
|
}
|
|
for (s in e.colors4) c.setColor4(s, o.f.FromArray(e.colors4[s]));
|
|
for (s in e.vectors2) c.setVector2(s, o.w.FromArray(e.vectors2[s]));
|
|
for (s in e.vectors3) c.setVector3(s, o.x.FromArray(e.vectors3[s]));
|
|
for (s in e.vectors4) c.setVector4(s, o.y.FromArray(e.vectors4[s]));
|
|
for (s in e.matrices) c.setMatrix(s, o.j.FromArray(e.matrices[s]));
|
|
for (s in e.matrices3x3) c.setMatrix3x3(s, e.matrices3x3[s]);
|
|
for (s in e.matrices2x2) c.setMatrix2x2(s, e.matrices2x2[s]);
|
|
for (s in e.vectors2Arrays) c.setArray2(s, e.vectors2Arrays[s]);
|
|
for (s in e.vectors3Arrays) c.setArray3(s, e.vectors3Arrays[s]);
|
|
return c
|
|
}, t
|
|
}(u.a);
|
|
h.a.RegisteredTypes["BABYLON.ShaderMaterial"] = d
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return o
|
|
});
|
|
var n = i(34),
|
|
r = i(0),
|
|
o = function() {
|
|
function e(e, t, i) {
|
|
this.vectors = n.a.BuildArray(8, r.x.Zero), this.center = r.x.Zero(), this.centerWorld = r.x.Zero(), this.extendSize = r.x.Zero(), this.extendSizeWorld = r.x.Zero(), this.directions = n.a.BuildArray(3, r.x.Zero), this.vectorsWorld = n.a.BuildArray(8, r.x.Zero), this.minimumWorld = r.x.Zero(), this.maximumWorld = r.x.Zero(), this.minimum = r.x.Zero(), this.maximum = r.x.Zero(), this.reConstruct(e, t, i)
|
|
}
|
|
return e.prototype.reConstruct = function(e, t, i) {
|
|
var n = e.x,
|
|
o = e.y,
|
|
s = e.z,
|
|
a = t.x,
|
|
c = t.y,
|
|
l = t.z,
|
|
u = this.vectors;
|
|
this.minimum.copyFromFloats(n, o, s), this.maximum.copyFromFloats(a, c, l), u[0].copyFromFloats(n, o, s), u[1].copyFromFloats(a, c, l), u[2].copyFromFloats(a, o, s), u[3].copyFromFloats(n, c, s), u[4].copyFromFloats(n, o, l), u[5].copyFromFloats(a, c, s), u[6].copyFromFloats(n, c, l), u[7].copyFromFloats(a, o, l), t.addToRef(e, this.center).scaleInPlace(.5), t.subtractToRef(e, this.extendSize).scaleInPlace(.5), this._worldMatrix = i || r.j.IdentityReadOnly, this._update(this._worldMatrix)
|
|
}, e.prototype.scale = function(t) {
|
|
var i = e.TmpVector3,
|
|
n = this.maximum.subtractToRef(this.minimum, i[0]),
|
|
r = n.length();
|
|
n.normalizeFromLength(r);
|
|
var o = r * t,
|
|
s = n.scaleInPlace(.5 * o),
|
|
a = this.center.subtractToRef(s, i[1]),
|
|
c = this.center.addToRef(s, i[2]);
|
|
return this.reConstruct(a, c, this._worldMatrix), this
|
|
}, e.prototype.getWorldMatrix = function() {
|
|
return this._worldMatrix
|
|
}, e.prototype._update = function(e) {
|
|
var t = this.minimumWorld,
|
|
i = this.maximumWorld,
|
|
n = this.directions,
|
|
o = this.vectorsWorld,
|
|
s = this.vectors;
|
|
if (e.isIdentity()) {
|
|
t.copyFrom(this.minimum), i.copyFrom(this.maximum);
|
|
for (a = 0; a < 8; ++a) o[a].copyFrom(s[a]);
|
|
this.extendSizeWorld.copyFrom(this.extendSize), this.centerWorld.copyFrom(this.center)
|
|
} else {
|
|
t.setAll(Number.MAX_VALUE), i.setAll(-Number.MAX_VALUE);
|
|
for (var a = 0; a < 8; ++a) {
|
|
var c = o[a];
|
|
r.x.TransformCoordinatesToRef(s[a], e, c), t.minimizeInPlace(c), i.maximizeInPlace(c)
|
|
}
|
|
i.subtractToRef(t, this.extendSizeWorld).scaleInPlace(.5), i.addToRef(t, this.centerWorld).scaleInPlace(.5)
|
|
}
|
|
r.x.FromArrayToRef(e.m, 0, n[0]), r.x.FromArrayToRef(e.m, 4, n[1]), r.x.FromArrayToRef(e.m, 8, n[2]), this._worldMatrix = e
|
|
}, e.prototype.isInFrustum = function(t) {
|
|
return e.IsInFrustum(this.vectorsWorld, t)
|
|
}, e.prototype.isCompletelyInFrustum = function(t) {
|
|
return e.IsCompletelyInFrustum(this.vectorsWorld, t)
|
|
}, e.prototype.intersectsPoint = function(e) {
|
|
var t = this.minimumWorld,
|
|
i = this.maximumWorld,
|
|
n = t.x,
|
|
o = t.y,
|
|
s = t.z,
|
|
a = i.x,
|
|
c = i.y,
|
|
l = i.z,
|
|
u = e.x,
|
|
h = e.y,
|
|
d = e.z,
|
|
f = -r.h;
|
|
return !(a - u < f || f > u - n) && (!(c - h < f || f > h - o) && !(l - d < f || f > d - s))
|
|
}, e.prototype.intersectsSphere = function(t) {
|
|
return e.IntersectsSphere(this.minimumWorld, this.maximumWorld, t.centerWorld, t.radiusWorld)
|
|
}, e.prototype.intersectsMinMax = function(e, t) {
|
|
var i = this.minimumWorld,
|
|
n = this.maximumWorld,
|
|
r = i.x,
|
|
o = i.y,
|
|
s = i.z,
|
|
a = n.x,
|
|
c = n.y,
|
|
l = n.z,
|
|
u = e.x,
|
|
h = e.y,
|
|
d = e.z,
|
|
f = t.x,
|
|
p = t.y,
|
|
_ = t.z;
|
|
return !(a < u || r > f) && (!(c < h || o > p) && !(l < d || s > _))
|
|
}, e.Intersects = function(e, t) {
|
|
return e.intersectsMinMax(t.minimumWorld, t.maximumWorld)
|
|
}, e.IntersectsSphere = function(t, i, n, o) {
|
|
var s = e.TmpVector3[0];
|
|
return r.x.ClampToRef(n, t, i, s), r.x.DistanceSquared(n, s) <= o * o
|
|
}, e.IsCompletelyInFrustum = function(e, t) {
|
|
for (var i = 0; i < 6; ++i)
|
|
for (var n = t[i], r = 0; r < 8; ++r)
|
|
if (n.dotCoordinate(e[r]) < 0) return !1;
|
|
return !0
|
|
}, e.IsInFrustum = function(e, t) {
|
|
for (var i = 0; i < 6; ++i) {
|
|
for (var n = !0, r = t[i], o = 0; o < 8; ++o)
|
|
if (r.dotCoordinate(e[o]) >= 0) {
|
|
n = !1;
|
|
break
|
|
} if (n) return !1
|
|
}
|
|
return !0
|
|
}, e.TmpVector3 = n.a.BuildArray(3, r.x.Zero), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {
|
|
this.references = 0, this.capacity = 0, this.is32Bits = !1
|
|
}
|
|
return Object.defineProperty(e.prototype, "underlyingResource", {
|
|
get: function() {
|
|
return null
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
});
|
|
var n = i(3),
|
|
r = function() {
|
|
function e() {
|
|
this.hoverCursor = "", this.actions = new Array, this.isRecursive = !1
|
|
}
|
|
return Object.defineProperty(e, "HasTriggers", {
|
|
get: function() {
|
|
for (var t in e.Triggers)
|
|
if (e.Triggers.hasOwnProperty(t)) return !0;
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "HasPickTriggers", {
|
|
get: function() {
|
|
for (var t in e.Triggers)
|
|
if (e.Triggers.hasOwnProperty(t)) {
|
|
var i = parseInt(t);
|
|
if (i >= n.a.ACTION_OnPickTrigger && i <= n.a.ACTION_OnPickUpTrigger) return !0
|
|
} return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.HasSpecificTrigger = function(t) {
|
|
for (var i in e.Triggers) {
|
|
if (e.Triggers.hasOwnProperty(i))
|
|
if (parseInt(i) === t) return !0
|
|
}
|
|
return !1
|
|
}, e.Triggers = {}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return o
|
|
});
|
|
var n = i(11),
|
|
r = i(13);
|
|
r.a.CreatePlane = function(e) {
|
|
var t = [],
|
|
i = [],
|
|
n = [],
|
|
o = [],
|
|
s = e.width || e.size || 1,
|
|
a = e.height || e.size || 1,
|
|
c = 0 === e.sideOrientation ? 0 : e.sideOrientation || r.a.DEFAULTSIDE,
|
|
l = s / 2,
|
|
u = a / 2;
|
|
i.push(-l, -u, 0), n.push(0, 0, -1), o.push(0, 0), i.push(l, -u, 0), n.push(0, 0, -1), o.push(1, 0), i.push(l, u, 0), n.push(0, 0, -1), o.push(1, 1), i.push(-l, u, 0), n.push(0, 0, -1), o.push(0, 1), t.push(0), t.push(1), t.push(2), t.push(0), t.push(2), t.push(3), r.a._ComputeSides(c, i, t, n, o, e.frontUVs, e.backUVs);
|
|
var h = new r.a;
|
|
return h.indices = t, h.positions = i, h.normals = n, h.uvs = o, h
|
|
}, n.a.CreatePlane = function(e, t, i, n, r) {
|
|
var s = {
|
|
size: t,
|
|
width: t,
|
|
height: t,
|
|
sideOrientation: r,
|
|
updatable: n
|
|
};
|
|
return o.CreatePlane(e, s, i)
|
|
};
|
|
var o = function() {
|
|
function e() {}
|
|
return e.CreatePlane = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var o = new n.a(e, i);
|
|
return t.sideOrientation = n.a._GetDefaultSideOrientation(t.sideOrientation), o._originalBuilderSideOrientation = t.sideOrientation, r.a.CreatePlane(t).applyToMesh(o, t.updatable), t.sourcePlane && (o.translate(t.sourcePlane.normal, -t.sourcePlane.d), o.setDirection(t.sourcePlane.normal.scale(-1))), o
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
return function(e, t, i) {
|
|
this.bu = e, this.bv = t, this.distance = i, this.faceId = 0, this.subMeshId = 0
|
|
}
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return o
|
|
});
|
|
var n = i(34),
|
|
r = i(0),
|
|
o = function() {
|
|
function e(e, t, i) {
|
|
this.center = r.x.Zero(), this.centerWorld = r.x.Zero(), this.minimum = r.x.Zero(), this.maximum = r.x.Zero(), this.reConstruct(e, t, i)
|
|
}
|
|
return e.prototype.reConstruct = function(e, t, i) {
|
|
this.minimum.copyFrom(e), this.maximum.copyFrom(t);
|
|
var n = r.x.Distance(e, t);
|
|
t.addToRef(e, this.center).scaleInPlace(.5), this.radius = .5 * n, this._update(i || r.j.IdentityReadOnly)
|
|
}, e.prototype.scale = function(t) {
|
|
var i = this.radius * t,
|
|
n = e.TmpVector3,
|
|
r = n[0].setAll(i),
|
|
o = this.center.subtractToRef(r, n[1]),
|
|
s = this.center.addToRef(r, n[2]);
|
|
return this.reConstruct(o, s, this._worldMatrix), this
|
|
}, e.prototype.getWorldMatrix = function() {
|
|
return this._worldMatrix
|
|
}, e.prototype._update = function(t) {
|
|
if (t.isIdentity()) this.centerWorld.copyFrom(this.center), this.radiusWorld = this.radius;
|
|
else {
|
|
r.x.TransformCoordinatesToRef(this.center, t, this.centerWorld);
|
|
var i = e.TmpVector3[0];
|
|
r.x.TransformNormalFromFloatsToRef(1, 1, 1, t, i), this.radiusWorld = Math.max(Math.abs(i.x), Math.abs(i.y), Math.abs(i.z)) * this.radius
|
|
}
|
|
}, e.prototype.isInFrustum = function(e) {
|
|
for (var t = this.centerWorld, i = this.radiusWorld, n = 0; n < 6; n++)
|
|
if (e[n].dotCoordinate(t) <= -i) return !1;
|
|
return !0
|
|
}, e.prototype.isCenterInFrustum = function(e) {
|
|
for (var t = this.centerWorld, i = 0; i < 6; i++)
|
|
if (e[i].dotCoordinate(t) < 0) return !1;
|
|
return !0
|
|
}, e.prototype.intersectsPoint = function(e) {
|
|
var t = r.x.DistanceSquared(this.centerWorld, e);
|
|
return !(this.radiusWorld * this.radiusWorld < t)
|
|
}, e.Intersects = function(e, t) {
|
|
var i = r.x.DistanceSquared(e.centerWorld, t.centerWorld),
|
|
n = e.radiusWorld + t.radiusWorld;
|
|
return !(n * n < i)
|
|
}, e.TmpVector3 = n.a.BuildArray(3, r.x.Zero), e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return s
|
|
});
|
|
var n = i(20),
|
|
r = i(4),
|
|
o = i(3),
|
|
s = function() {
|
|
function e(e) {
|
|
this._vertexBuffers = {}, this._scene = e
|
|
}
|
|
return e.prototype._prepareBuffers = function() {
|
|
if (!this._vertexBuffers[r.b.PositionKind]) {
|
|
var e = [];
|
|
e.push(1, 1), e.push(-1, 1), e.push(-1, -1), e.push(1, -1), this._vertexBuffers[r.b.PositionKind] = new r.b(this._scene.getEngine(), e, r.b.PositionKind, !1, !1, 2), this._buildIndexBuffer()
|
|
}
|
|
}, e.prototype._buildIndexBuffer = function() {
|
|
var e = [];
|
|
e.push(0), e.push(1), e.push(2), e.push(0), e.push(2), e.push(3), this._indexBuffer = this._scene.getEngine().createIndexBuffer(e)
|
|
}, e.prototype._rebuild = function() {
|
|
var e = this._vertexBuffers[r.b.PositionKind];
|
|
e && (e._rebuild(), this._buildIndexBuffer())
|
|
}, e.prototype._prepareFrame = function(e, t) {
|
|
void 0 === e && (e = null), void 0 === t && (t = null);
|
|
var i = this._scene.activeCamera;
|
|
return !!i && (!(!(t = t || i._postProcesses.filter(function(e) {
|
|
return null != e
|
|
})) || 0 === t.length || !this._scene.postProcessesEnabled) && (t[0].activate(i, e, null != t), !0))
|
|
}, e.prototype.directRender = function(e, t, i, r, o) {
|
|
void 0 === t && (t = null), void 0 === i && (i = !1), void 0 === r && (r = 0), void 0 === o && (o = 0);
|
|
for (var s = this._scene.getEngine(), a = 0; a < e.length; a++) {
|
|
a < e.length - 1 ? e[a + 1].activate(this._scene.activeCamera, t) : t ? s.bindFramebuffer(t, r, void 0, void 0, i, void 0, o) : s.restoreDefaultFramebuffer();
|
|
var c = e[a],
|
|
l = c.apply();
|
|
l && (c.onBeforeRenderObservable.notifyObservers(l), this._prepareBuffers(), s.bindBuffers(this._vertexBuffers, this._indexBuffer, l), s.drawElementsType(n.a.TriangleFillMode, 0, 6), c.onAfterRenderObservable.notifyObservers(l))
|
|
}
|
|
s.setDepthBuffer(!0), s.setDepthWrite(!0)
|
|
}, e.prototype._finalizeFrame = function(e, t, i, r, s) {
|
|
void 0 === s && (s = !1);
|
|
var a = this._scene.activeCamera;
|
|
if (a && 0 !== (r = r || a._postProcesses.filter(function(e) {
|
|
return null != e
|
|
})).length && this._scene.postProcessesEnabled) {
|
|
for (var c = this._scene.getEngine(), l = 0, u = r.length; l < u; l++) {
|
|
var h = r[l];
|
|
if (l < u - 1 ? h._outputTexture = r[l + 1].activate(a, t) : t ? (c.bindFramebuffer(t, i, void 0, void 0, s), h._outputTexture = t) : (c.restoreDefaultFramebuffer(), h._outputTexture = null), e) break;
|
|
var d = h.apply();
|
|
d && (h.onBeforeRenderObservable.notifyObservers(d), this._prepareBuffers(), c.bindBuffers(this._vertexBuffers, this._indexBuffer, d), c.drawElementsType(n.a.TriangleFillMode, 0, 6), h.onAfterRenderObservable.notifyObservers(d))
|
|
}
|
|
c.setDepthBuffer(!0), c.setDepthWrite(!0), c.setAlphaMode(o.a.ALPHA_DISABLE)
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
var e = this._vertexBuffers[r.b.PositionKind];
|
|
e && (e.dispose(), this._vertexBuffers[r.b.PositionKind] = null), this._indexBuffer && (this._scene.getEngine()._releaseBuffer(this._indexBuffer), this._indexBuffer = null)
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "lightFragmentDeclaration",
|
|
r = "#ifdef LIGHT{X}\nuniform vec4 vLightData{X};\nuniform vec4 vLightDiffuse{X};\n#ifdef SPECULARTERM\nuniform vec3 vLightSpecular{X};\n#else\nvec3 vLightSpecular{X}=vec3(0.);\n#endif\n#ifdef SHADOW{X}\n#if defined(SHADOWCUBE{X})\nuniform samplerCube shadowSampler{X};\n#else\nvarying vec4 vPositionFromLight{X};\nvarying float vDepthMetric{X};\n#if defined(SHADOWPCSS{X})\nuniform highp sampler2DShadow shadowSampler{X};\nuniform highp sampler2D depthSampler{X};\n#elif defined(SHADOWPCF{X})\nuniform highp sampler2DShadow shadowSampler{X};\n#else\nuniform sampler2D shadowSampler{X};\n#endif\nuniform mat4 lightMatrix{X};\n#endif\nuniform vec4 shadowsInfo{X};\nuniform vec2 depthValues{X};\n#endif\n#ifdef SPOTLIGHT{X}\nuniform vec4 vLightDirection{X};\nuniform vec4 vLightFalloff{X};\n#elif defined(POINTLIGHT{X})\nuniform vec4 vLightFalloff{X};\n#elif defined(HEMILIGHT{X})\nuniform vec3 vLightGround{X};\n#endif\n#ifdef PROJECTEDLIGHTTEXTURE{X}\nuniform mat4 textureProjectionMatrix{X};\nuniform sampler2D projectionLightSampler{X};\n#endif\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "lightUboDeclaration",
|
|
r = "#ifdef LIGHT{X}\nuniform Light{X}\n{\nvec4 vLightData;\nvec4 vLightDiffuse;\nvec3 vLightSpecular;\n#ifdef SPOTLIGHT{X}\nvec4 vLightDirection;\nvec4 vLightFalloff;\n#elif defined(POINTLIGHT{X})\nvec4 vLightFalloff;\n#elif defined(HEMILIGHT{X})\nvec3 vLightGround;\n#endif\nvec4 shadowsInfo;\nvec2 depthValues;\n} light{X};\n#ifdef PROJECTEDLIGHTTEXTURE{X}\nuniform mat4 textureProjectionMatrix{X};\nuniform sampler2D projectionLightSampler{X};\n#endif\n#ifdef SHADOW{X}\n#if defined(SHADOWCUBE{X})\nuniform samplerCube shadowSampler{X};\n#else\nvarying vec4 vPositionFromLight{X};\nvarying float vDepthMetric{X};\n#if defined(SHADOWPCSS{X})\nuniform highp sampler2DShadow shadowSampler{X};\nuniform highp sampler2D depthSampler{X};\n#elif defined(SHADOWPCF{X})\nuniform highp sampler2DShadow shadowSampler{X};\n#else\nuniform sampler2D shadowSampler{X};\n#endif\nuniform mat4 lightMatrix{X};\n#endif\n#endif\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "imageProcessingDeclaration",
|
|
r = "#ifdef EXPOSURE\nuniform float exposureLinear;\n#endif\n#ifdef CONTRAST\nuniform float contrast;\n#endif\n#ifdef VIGNETTE\nuniform vec2 vInverseScreenSize;\nuniform vec4 vignetteSettings1;\nuniform vec4 vignetteSettings2;\n#endif\n#ifdef COLORCURVES\nuniform vec4 vCameraColorCurveNegative;\nuniform vec4 vCameraColorCurveNeutral;\nuniform vec4 vCameraColorCurvePositive;\n#endif\n#ifdef COLORGRADING\n#ifdef COLORGRADING3D\nuniform highp sampler3D txColorTransform;\n#else\nuniform sampler2D txColorTransform;\n#endif\nuniform vec4 colorTransformSettings;\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "imageProcessingFunctions",
|
|
r = "#if defined(COLORGRADING) && !defined(COLORGRADING3D)\n\nvec3 sampleTexture3D(sampler2D colorTransform,vec3 color,vec2 sampler3dSetting)\n{\nfloat sliceSize=2.0*sampler3dSetting.x;\n#ifdef SAMPLER3DGREENDEPTH\nfloat sliceContinuous=(color.g-sampler3dSetting.x)*sampler3dSetting.y;\n#else\nfloat sliceContinuous=(color.b-sampler3dSetting.x)*sampler3dSetting.y;\n#endif\nfloat sliceInteger=floor(sliceContinuous);\n\n\nfloat sliceFraction=sliceContinuous-sliceInteger;\n#ifdef SAMPLER3DGREENDEPTH\nvec2 sliceUV=color.rb;\n#else\nvec2 sliceUV=color.rg;\n#endif\nsliceUV.x*=sliceSize;\nsliceUV.x+=sliceInteger*sliceSize;\nsliceUV=saturate(sliceUV);\nvec4 slice0Color=texture2D(colorTransform,sliceUV);\nsliceUV.x+=sliceSize;\nsliceUV=saturate(sliceUV);\nvec4 slice1Color=texture2D(colorTransform,sliceUV);\nvec3 result=mix(slice0Color.rgb,slice1Color.rgb,sliceFraction);\n#ifdef SAMPLER3DBGRMAP\ncolor.rgb=result.rgb;\n#else\ncolor.rgb=result.bgr;\n#endif\nreturn color;\n}\n#endif\n#ifdef TONEMAPPING_ACES\n\n\n\n\n\nconst mat3 ACESInputMat=mat3(\nvec3(0.59719,0.07600,0.02840),\nvec3(0.35458,0.90834,0.13383),\nvec3(0.04823,0.01566,0.83777)\n);\n\nconst mat3 ACESOutputMat=mat3(\nvec3( 1.60475,-0.10208,-0.00327),\nvec3(-0.53108,1.10813,-0.07276),\nvec3(-0.07367,-0.00605,1.07602)\n);\nvec3 RRTAndODTFit(vec3 v)\n{\nvec3 a=v*(v+0.0245786)-0.000090537;\nvec3 b=v*(0.983729*v+0.4329510)+0.238081;\nreturn a/b;\n}\nvec3 ACESFitted(vec3 color)\n{\ncolor=ACESInputMat*color;\n\ncolor=RRTAndODTFit(color);\ncolor=ACESOutputMat*color;\n\ncolor=saturate(color);\nreturn color;\n}\n#endif\nvec4 applyImageProcessing(vec4 result) {\n#ifdef EXPOSURE\nresult.rgb*=exposureLinear;\n#endif\n#ifdef VIGNETTE\n\nvec2 viewportXY=gl_FragCoord.xy*vInverseScreenSize;\nviewportXY=viewportXY*2.0-1.0;\nvec3 vignetteXY1=vec3(viewportXY*vignetteSettings1.xy+vignetteSettings1.zw,1.0);\nfloat vignetteTerm=dot(vignetteXY1,vignetteXY1);\nfloat vignette=pow(vignetteTerm,vignetteSettings2.w);\n\nvec3 vignetteColor=vignetteSettings2.rgb;\n#ifdef VIGNETTEBLENDMODEMULTIPLY\nvec3 vignetteColorMultiplier=mix(vignetteColor,vec3(1,1,1),vignette);\nresult.rgb*=vignetteColorMultiplier;\n#endif\n#ifdef VIGNETTEBLENDMODEOPAQUE\nresult.rgb=mix(vignetteColor,result.rgb,vignette);\n#endif\n#endif\n#ifdef TONEMAPPING\n#ifdef TONEMAPPING_ACES\nresult.rgb=ACESFitted(result.rgb);\n#else\nconst float tonemappingCalibration=1.590579;\nresult.rgb=1.0-exp2(-tonemappingCalibration*result.rgb);\n#endif\n#endif\n\nresult.rgb=toGammaSpace(result.rgb);\nresult.rgb=saturate(result.rgb);\n#ifdef CONTRAST\n\nvec3 resultHighContrast=result.rgb*result.rgb*(3.0-2.0*result.rgb);\nif (contrast<1.0) {\n\nresult.rgb=mix(vec3(0.5,0.5,0.5),result.rgb,contrast);\n} else {\n\nresult.rgb=mix(result.rgb,resultHighContrast,contrast-1.0);\n}\n#endif\n\n#ifdef COLORGRADING\nvec3 colorTransformInput=result.rgb*colorTransformSettings.xxx+colorTransformSettings.yyy;\n#ifdef COLORGRADING3D\nvec3 colorTransformOutput=texture(txColorTransform,colorTransformInput).rgb;\n#else\nvec3 colorTransformOutput=sampleTexture3D(txColorTransform,colorTransformInput,colorTransformSettings.yz).rgb;\n#endif\nresult.rgb=mix(result.rgb,colorTransformOutput,colorTransformSettings.www);\n#endif\n#ifdef COLORCURVES\n\nfloat luma=getLuminance(result.rgb);\nvec2 curveMix=clamp(vec2(luma*3.0-1.5,luma*-3.0+1.5),vec2(0.0),vec2(1.0));\nvec4 colorCurve=vCameraColorCurveNeutral+curveMix.x*vCameraColorCurvePositive-curveMix.y*vCameraColorCurveNegative;\nresult.rgb*=colorCurve.rgb;\nresult.rgb=mix(vec3(luma),result.rgb,colorCurve.a);\n#endif\nreturn result;\n}";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "logDepthDeclaration",
|
|
r = "#ifdef LOGARITHMICDEPTH\nuniform float logarithmicDepthConstant;\nvarying float vFragmentDepth;\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "clipPlaneFragment",
|
|
r = "#ifdef CLIPPLANE\nif (fClipDistance>0.0)\n{\ndiscard;\n}\n#endif\n#ifdef CLIPPLANE2\nif (fClipDistance2>0.0)\n{\ndiscard;\n}\n#endif\n#ifdef CLIPPLANE3\nif (fClipDistance3>0.0)\n{\ndiscard;\n}\n#endif\n#ifdef CLIPPLANE4\nif (fClipDistance4>0.0)\n{\ndiscard;\n}\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "clipPlaneVertex",
|
|
r = "#ifdef CLIPPLANE\nfClipDistance=dot(worldPos,vClipPlane);\n#endif\n#ifdef CLIPPLANE2\nfClipDistance2=dot(worldPos,vClipPlane2);\n#endif\n#ifdef CLIPPLANE3\nfClipDistance3=dot(worldPos,vClipPlane3);\n#endif\n#ifdef CLIPPLANE4\nfClipDistance4=dot(worldPos,vClipPlane4);\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
}), i.d(t, "b", function() {
|
|
return o
|
|
});
|
|
var n = i(109),
|
|
r = function() {
|
|
return function() {}
|
|
}(),
|
|
o = function() {
|
|
function e(t) {
|
|
this._useSceneAutoClearSetup = !1, this._renderingGroups = new Array, this._autoClearDepthStencil = {}, this._customOpaqueSortCompareFn = {}, this._customAlphaTestSortCompareFn = {}, this._customTransparentSortCompareFn = {}, this._renderingGroupInfo = new r, this._scene = t;
|
|
for (var i = e.MIN_RENDERINGGROUPS; i < e.MAX_RENDERINGGROUPS; i++) this._autoClearDepthStencil[i] = {
|
|
autoClear: !0,
|
|
depth: !0,
|
|
stencil: !0
|
|
}
|
|
}
|
|
return e.prototype._clearDepthStencilBuffer = function(e, t) {
|
|
void 0 === e && (e = !0), void 0 === t && (t = !0), this._depthStencilBufferAlreadyCleaned || (this._scene.getEngine().clear(null, !1, e, t), this._depthStencilBufferAlreadyCleaned = !0)
|
|
}, e.prototype.render = function(t, i, n, r) {
|
|
var o = this._renderingGroupInfo;
|
|
if (o.scene = this._scene, o.camera = this._scene.activeCamera, this._scene.spriteManagers && r)
|
|
for (var s = 0; s < this._scene.spriteManagers.length; s++) {
|
|
var a = this._scene.spriteManagers[s];
|
|
this.dispatchSprites(a)
|
|
}
|
|
for (s = e.MIN_RENDERINGGROUPS; s < e.MAX_RENDERINGGROUPS; s++) {
|
|
this._depthStencilBufferAlreadyCleaned = s === e.MIN_RENDERINGGROUPS;
|
|
var c = this._renderingGroups[s];
|
|
if (c) {
|
|
var l = Math.pow(2, s);
|
|
if (o.renderingGroupId = s, this._scene.onBeforeRenderingGroupObservable.notifyObservers(o, l), e.AUTOCLEAR) {
|
|
var u = this._useSceneAutoClearSetup ? this._scene.getAutoClearDepthStencilSetup(s) : this._autoClearDepthStencil[s];
|
|
u && u.autoClear && this._clearDepthStencilBuffer(u.depth, u.stencil)
|
|
}
|
|
for (var h = 0, d = this._scene._beforeRenderingGroupDrawStage; h < d.length; h++) {
|
|
d[h].action(s)
|
|
}
|
|
c.render(t, r, n, i);
|
|
for (var f = 0, p = this._scene._afterRenderingGroupDrawStage; f < p.length; f++) {
|
|
p[f].action(s)
|
|
}
|
|
this._scene.onAfterRenderingGroupObservable.notifyObservers(o, l)
|
|
}
|
|
}
|
|
}, e.prototype.reset = function() {
|
|
for (var t = e.MIN_RENDERINGGROUPS; t < e.MAX_RENDERINGGROUPS; t++) {
|
|
var i = this._renderingGroups[t];
|
|
i && i.prepare()
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
this.freeRenderingGroups(), this._renderingGroups.length = 0, this._renderingGroupInfo = null
|
|
}, e.prototype.freeRenderingGroups = function() {
|
|
for (var t = e.MIN_RENDERINGGROUPS; t < e.MAX_RENDERINGGROUPS; t++) {
|
|
var i = this._renderingGroups[t];
|
|
i && i.dispose()
|
|
}
|
|
}, e.prototype._prepareRenderingGroup = function(e) {
|
|
void 0 === this._renderingGroups[e] && (this._renderingGroups[e] = new n.a(e, this._scene, this._customOpaqueSortCompareFn[e], this._customAlphaTestSortCompareFn[e], this._customTransparentSortCompareFn[e]))
|
|
}, e.prototype.dispatchSprites = function(e) {
|
|
var t = e.renderingGroupId || 0;
|
|
this._prepareRenderingGroup(t), this._renderingGroups[t].dispatchSprites(e)
|
|
}, e.prototype.dispatchParticles = function(e) {
|
|
var t = e.renderingGroupId || 0;
|
|
this._prepareRenderingGroup(t), this._renderingGroups[t].dispatchParticles(e)
|
|
}, e.prototype.dispatch = function(e, t, i) {
|
|
void 0 === t && (t = e.getMesh());
|
|
var n = t.renderingGroupId || 0;
|
|
this._prepareRenderingGroup(n), this._renderingGroups[n].dispatch(e, t, i)
|
|
}, e.prototype.setRenderingOrder = function(e, t, i, n) {
|
|
if (void 0 === t && (t = null), void 0 === i && (i = null), void 0 === n && (n = null), this._customOpaqueSortCompareFn[e] = t, this._customAlphaTestSortCompareFn[e] = i, this._customTransparentSortCompareFn[e] = n, this._renderingGroups[e]) {
|
|
var r = this._renderingGroups[e];
|
|
r.opaqueSortCompareFn = this._customOpaqueSortCompareFn[e], r.alphaTestSortCompareFn = this._customAlphaTestSortCompareFn[e], r.transparentSortCompareFn = this._customTransparentSortCompareFn[e]
|
|
}
|
|
}, e.prototype.setRenderingAutoClearDepthStencil = function(e, t, i, n) {
|
|
void 0 === i && (i = !0), void 0 === n && (n = !0), this._autoClearDepthStencil[e] = {
|
|
autoClear: t,
|
|
depth: i,
|
|
stencil: n
|
|
}
|
|
}, e.prototype.getAutoClearDepthStencilSetup = function(e) {
|
|
return this._autoClearDepthStencil[e]
|
|
}, e.MAX_RENDERINGGROUPS = 4, e.MIN_RENDERINGGROUPS = 0, e.AUTOCLEAR = !0, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
return function() {}
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return s
|
|
});
|
|
var n = i(1),
|
|
r = i(2),
|
|
o = i(0),
|
|
s = function() {
|
|
function e() {
|
|
this._dirty = !0, this._tempColor = new o.f(0, 0, 0, 0), this._globalCurve = new o.f(0, 0, 0, 0), this._highlightsCurve = new o.f(0, 0, 0, 0), this._midtonesCurve = new o.f(0, 0, 0, 0), this._shadowsCurve = new o.f(0, 0, 0, 0), this._positiveCurve = new o.f(0, 0, 0, 0), this._negativeCurve = new o.f(0, 0, 0, 0), this._globalHue = 30, this._globalDensity = 0, this._globalSaturation = 0, this._globalExposure = 0, this._highlightsHue = 30, this._highlightsDensity = 0, this._highlightsSaturation = 0, this._highlightsExposure = 0, this._midtonesHue = 30, this._midtonesDensity = 0, this._midtonesSaturation = 0, this._midtonesExposure = 0, this._shadowsHue = 30, this._shadowsDensity = 0, this._shadowsSaturation = 0, this._shadowsExposure = 0
|
|
}
|
|
return Object.defineProperty(e.prototype, "globalHue", {
|
|
get: function() {
|
|
return this._globalHue
|
|
},
|
|
set: function(e) {
|
|
this._globalHue = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "globalDensity", {
|
|
get: function() {
|
|
return this._globalDensity
|
|
},
|
|
set: function(e) {
|
|
this._globalDensity = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "globalSaturation", {
|
|
get: function() {
|
|
return this._globalSaturation
|
|
},
|
|
set: function(e) {
|
|
this._globalSaturation = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "globalExposure", {
|
|
get: function() {
|
|
return this._globalExposure
|
|
},
|
|
set: function(e) {
|
|
this._globalExposure = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "highlightsHue", {
|
|
get: function() {
|
|
return this._highlightsHue
|
|
},
|
|
set: function(e) {
|
|
this._highlightsHue = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "highlightsDensity", {
|
|
get: function() {
|
|
return this._highlightsDensity
|
|
},
|
|
set: function(e) {
|
|
this._highlightsDensity = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "highlightsSaturation", {
|
|
get: function() {
|
|
return this._highlightsSaturation
|
|
},
|
|
set: function(e) {
|
|
this._highlightsSaturation = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "highlightsExposure", {
|
|
get: function() {
|
|
return this._highlightsExposure
|
|
},
|
|
set: function(e) {
|
|
this._highlightsExposure = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "midtonesHue", {
|
|
get: function() {
|
|
return this._midtonesHue
|
|
},
|
|
set: function(e) {
|
|
this._midtonesHue = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "midtonesDensity", {
|
|
get: function() {
|
|
return this._midtonesDensity
|
|
},
|
|
set: function(e) {
|
|
this._midtonesDensity = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "midtonesSaturation", {
|
|
get: function() {
|
|
return this._midtonesSaturation
|
|
},
|
|
set: function(e) {
|
|
this._midtonesSaturation = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "midtonesExposure", {
|
|
get: function() {
|
|
return this._midtonesExposure
|
|
},
|
|
set: function(e) {
|
|
this._midtonesExposure = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "shadowsHue", {
|
|
get: function() {
|
|
return this._shadowsHue
|
|
},
|
|
set: function(e) {
|
|
this._shadowsHue = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "shadowsDensity", {
|
|
get: function() {
|
|
return this._shadowsDensity
|
|
},
|
|
set: function(e) {
|
|
this._shadowsDensity = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "shadowsSaturation", {
|
|
get: function() {
|
|
return this._shadowsSaturation
|
|
},
|
|
set: function(e) {
|
|
this._shadowsSaturation = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "shadowsExposure", {
|
|
get: function() {
|
|
return this._shadowsExposure
|
|
},
|
|
set: function(e) {
|
|
this._shadowsExposure = e, this._dirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getClassName = function() {
|
|
return "ColorCurves"
|
|
}, e.Bind = function(e, t, i, n, r) {
|
|
void 0 === i && (i = "vCameraColorCurvePositive"), void 0 === n && (n = "vCameraColorCurveNeutral"), void 0 === r && (r = "vCameraColorCurveNegative"), e._dirty && (e._dirty = !1, e.getColorGradingDataToRef(e._globalHue, e._globalDensity, e._globalSaturation, e._globalExposure, e._globalCurve), e.getColorGradingDataToRef(e._highlightsHue, e._highlightsDensity, e._highlightsSaturation, e._highlightsExposure, e._tempColor), e._tempColor.multiplyToRef(e._globalCurve, e._highlightsCurve), e.getColorGradingDataToRef(e._midtonesHue, e._midtonesDensity, e._midtonesSaturation, e._midtonesExposure, e._tempColor), e._tempColor.multiplyToRef(e._globalCurve, e._midtonesCurve), e.getColorGradingDataToRef(e._shadowsHue, e._shadowsDensity, e._shadowsSaturation, e._shadowsExposure, e._tempColor), e._tempColor.multiplyToRef(e._globalCurve, e._shadowsCurve), e._highlightsCurve.subtractToRef(e._midtonesCurve, e._positiveCurve), e._midtonesCurve.subtractToRef(e._shadowsCurve, e._negativeCurve)), t && (t.setFloat4(i, e._positiveCurve.r, e._positiveCurve.g, e._positiveCurve.b, e._positiveCurve.a), t.setFloat4(n, e._midtonesCurve.r, e._midtonesCurve.g, e._midtonesCurve.b, e._midtonesCurve.a), t.setFloat4(r, e._negativeCurve.r, e._negativeCurve.g, e._negativeCurve.b, e._negativeCurve.a))
|
|
}, e.PrepareUniforms = function(e) {
|
|
e.push("vCameraColorCurveNeutral", "vCameraColorCurvePositive", "vCameraColorCurveNegative")
|
|
}, e.prototype.getColorGradingDataToRef = function(t, i, n, r, o) {
|
|
null != t && (t = e.clamp(t, 0, 360), i = e.clamp(i, -100, 100), n = e.clamp(n, -100, 100), r = e.clamp(r, -100, 100), i = e.applyColorGradingSliderNonlinear(i), i *= .5, r = e.applyColorGradingSliderNonlinear(r), i < 0 && (i *= -1, t = (t + 180) % 360), e.fromHSBToRef(t, i, 50 + .25 * r, o), o.scaleToRef(2, o), o.a = 1 + .01 * n)
|
|
}, e.applyColorGradingSliderNonlinear = function(e) {
|
|
e /= 100;
|
|
var t = Math.abs(e);
|
|
return t = Math.pow(t, 2), e < 0 && (t *= -1), t *= 100
|
|
}, e.fromHSBToRef = function(t, i, n, r) {
|
|
var o = e.clamp(t, 0, 360),
|
|
s = e.clamp(i / 100, 0, 1),
|
|
a = e.clamp(n / 100, 0, 1);
|
|
if (0 === s) r.r = a, r.g = a, r.b = a;
|
|
else {
|
|
o /= 60;
|
|
var c = Math.floor(o),
|
|
l = o - c,
|
|
u = a * (1 - s),
|
|
h = a * (1 - s * l),
|
|
d = a * (1 - s * (1 - l));
|
|
switch (c) {
|
|
case 0:
|
|
r.r = a, r.g = d, r.b = u;
|
|
break;
|
|
case 1:
|
|
r.r = h, r.g = a, r.b = u;
|
|
break;
|
|
case 2:
|
|
r.r = u, r.g = a, r.b = d;
|
|
break;
|
|
case 3:
|
|
r.r = u, r.g = h, r.b = a;
|
|
break;
|
|
case 4:
|
|
r.r = d, r.g = u, r.b = a;
|
|
break;
|
|
default:
|
|
r.r = a, r.g = u, r.b = h
|
|
}
|
|
}
|
|
r.a = 1
|
|
}, e.clamp = function(e, t, i) {
|
|
return Math.min(Math.max(e, t), i)
|
|
}, e.prototype.clone = function() {
|
|
return r.a.Clone(function() {
|
|
return new e
|
|
}, this)
|
|
}, e.prototype.serialize = function() {
|
|
return r.a.Serialize(this)
|
|
}, e.Parse = function(t) {
|
|
return r.a.Parse(function() {
|
|
return new e
|
|
}, t, null, null)
|
|
}, n.c([Object(r.c)()], e.prototype, "_globalHue", void 0), n.c([Object(r.c)()], e.prototype, "_globalDensity", void 0), n.c([Object(r.c)()], e.prototype, "_globalSaturation", void 0), n.c([Object(r.c)()], e.prototype, "_globalExposure", void 0), n.c([Object(r.c)()], e.prototype, "_highlightsHue", void 0), n.c([Object(r.c)()], e.prototype, "_highlightsDensity", void 0), n.c([Object(r.c)()], e.prototype, "_highlightsSaturation", void 0), n.c([Object(r.c)()], e.prototype, "_highlightsExposure", void 0), n.c([Object(r.c)()], e.prototype, "_midtonesHue", void 0), n.c([Object(r.c)()], e.prototype, "_midtonesDensity", void 0), n.c([Object(r.c)()], e.prototype, "_midtonesSaturation", void 0), n.c([Object(r.c)()], e.prototype, "_midtonesExposure", void 0), e
|
|
}();
|
|
r.a._ColorCurvesParser = s.Parse
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = function() {
|
|
function e() {
|
|
this._isAlphaBlendDirty = !1, this._isBlendFunctionParametersDirty = !1, this._isBlendEquationParametersDirty = !1, this._isBlendConstantsDirty = !1, this._alphaBlend = !1, this._blendFunctionParameters = new Array(4), this._blendEquationParameters = new Array(2), this._blendConstants = new Array(4), this.reset()
|
|
}
|
|
return Object.defineProperty(e.prototype, "isDirty", {
|
|
get: function() {
|
|
return this._isAlphaBlendDirty || this._isBlendFunctionParametersDirty
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "alphaBlend", {
|
|
get: function() {
|
|
return this._alphaBlend
|
|
},
|
|
set: function(e) {
|
|
this._alphaBlend !== e && (this._alphaBlend = e, this._isAlphaBlendDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.setAlphaBlendConstants = function(e, t, i, n) {
|
|
this._blendConstants[0] === e && this._blendConstants[1] === t && this._blendConstants[2] === i && this._blendConstants[3] === n || (this._blendConstants[0] = e, this._blendConstants[1] = t, this._blendConstants[2] = i, this._blendConstants[3] = n, this._isBlendConstantsDirty = !0)
|
|
}, e.prototype.setAlphaBlendFunctionParameters = function(e, t, i, n) {
|
|
this._blendFunctionParameters[0] === e && this._blendFunctionParameters[1] === t && this._blendFunctionParameters[2] === i && this._blendFunctionParameters[3] === n || (this._blendFunctionParameters[0] = e, this._blendFunctionParameters[1] = t, this._blendFunctionParameters[2] = i, this._blendFunctionParameters[3] = n, this._isBlendFunctionParametersDirty = !0)
|
|
}, e.prototype.setAlphaEquationParameters = function(e, t) {
|
|
this._blendEquationParameters[0] === e && this._blendEquationParameters[1] === t || (this._blendEquationParameters[0] = e, this._blendEquationParameters[1] = t, this._isBlendEquationParametersDirty = !0)
|
|
}, e.prototype.reset = function() {
|
|
this._alphaBlend = !1, this._blendFunctionParameters[0] = null, this._blendFunctionParameters[1] = null, this._blendFunctionParameters[2] = null, this._blendFunctionParameters[3] = null, this._blendEquationParameters[0] = null, this._blendEquationParameters[1] = null, this._blendConstants[0] = null, this._blendConstants[1] = null, this._blendConstants[2] = null, this._blendConstants[3] = null, this._isAlphaBlendDirty = !0, this._isBlendFunctionParametersDirty = !1, this._isBlendEquationParametersDirty = !1, this._isBlendConstantsDirty = !1
|
|
}, e.prototype.apply = function(e) {
|
|
this.isDirty && (this._isAlphaBlendDirty && (this._alphaBlend ? e.enable(e.BLEND) : e.disable(e.BLEND), this._isAlphaBlendDirty = !1), this._isBlendFunctionParametersDirty && (e.blendFuncSeparate(this._blendFunctionParameters[0], this._blendFunctionParameters[1], this._blendFunctionParameters[2], this._blendFunctionParameters[3]), this._isBlendFunctionParametersDirty = !1), this._isBlendEquationParametersDirty && (e.blendEquationSeparate(this._blendEquationParameters[0], this._blendEquationParameters[1]), this._isBlendEquationParametersDirty = !1), this._isBlendConstantsDirty && (e.blendColor(this._blendConstants[0], this._blendConstants[1], this._blendConstants[2], this._blendConstants[3]), this._isBlendConstantsDirty = !1))
|
|
}, e
|
|
}(),
|
|
r = function() {
|
|
function e() {
|
|
this._isDepthTestDirty = !1, this._isDepthMaskDirty = !1, this._isDepthFuncDirty = !1, this._isCullFaceDirty = !1, this._isCullDirty = !1, this._isZOffsetDirty = !1, this._isFrontFaceDirty = !1, this.reset()
|
|
}
|
|
return Object.defineProperty(e.prototype, "isDirty", {
|
|
get: function() {
|
|
return this._isDepthFuncDirty || this._isDepthTestDirty || this._isDepthMaskDirty || this._isCullFaceDirty || this._isCullDirty || this._isZOffsetDirty || this._isFrontFaceDirty
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "zOffset", {
|
|
get: function() {
|
|
return this._zOffset
|
|
},
|
|
set: function(e) {
|
|
this._zOffset !== e && (this._zOffset = e, this._isZOffsetDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "cullFace", {
|
|
get: function() {
|
|
return this._cullFace
|
|
},
|
|
set: function(e) {
|
|
this._cullFace !== e && (this._cullFace = e, this._isCullFaceDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "cull", {
|
|
get: function() {
|
|
return this._cull
|
|
},
|
|
set: function(e) {
|
|
this._cull !== e && (this._cull = e, this._isCullDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "depthFunc", {
|
|
get: function() {
|
|
return this._depthFunc
|
|
},
|
|
set: function(e) {
|
|
this._depthFunc !== e && (this._depthFunc = e, this._isDepthFuncDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "depthMask", {
|
|
get: function() {
|
|
return this._depthMask
|
|
},
|
|
set: function(e) {
|
|
this._depthMask !== e && (this._depthMask = e, this._isDepthMaskDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "depthTest", {
|
|
get: function() {
|
|
return this._depthTest
|
|
},
|
|
set: function(e) {
|
|
this._depthTest !== e && (this._depthTest = e, this._isDepthTestDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "frontFace", {
|
|
get: function() {
|
|
return this._frontFace
|
|
},
|
|
set: function(e) {
|
|
this._frontFace !== e && (this._frontFace = e, this._isFrontFaceDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.reset = function() {
|
|
this._depthMask = !0, this._depthTest = !0, this._depthFunc = null, this._cullFace = null, this._cull = null, this._zOffset = 0, this._frontFace = null, this._isDepthTestDirty = !0, this._isDepthMaskDirty = !0, this._isDepthFuncDirty = !1, this._isCullFaceDirty = !1, this._isCullDirty = !1, this._isZOffsetDirty = !1, this._isFrontFaceDirty = !1
|
|
}, e.prototype.apply = function(e) {
|
|
this.isDirty && (this._isCullDirty && (this.cull ? e.enable(e.CULL_FACE) : e.disable(e.CULL_FACE), this._isCullDirty = !1), this._isCullFaceDirty && (e.cullFace(this.cullFace), this._isCullFaceDirty = !1), this._isDepthMaskDirty && (e.depthMask(this.depthMask), this._isDepthMaskDirty = !1), this._isDepthTestDirty && (this.depthTest ? e.enable(e.DEPTH_TEST) : e.disable(e.DEPTH_TEST), this._isDepthTestDirty = !1), this._isDepthFuncDirty && (e.depthFunc(this.depthFunc), this._isDepthFuncDirty = !1), this._isZOffsetDirty && (this.zOffset ? (e.enable(e.POLYGON_OFFSET_FILL), e.polygonOffset(this.zOffset, 0)) : e.disable(e.POLYGON_OFFSET_FILL), this._isZOffsetDirty = !1), this._isFrontFaceDirty && (e.frontFace(this.frontFace), this._isFrontFaceDirty = !1))
|
|
}, e
|
|
}(),
|
|
o = i(3),
|
|
s = function() {
|
|
function e() {
|
|
this._isStencilTestDirty = !1, this._isStencilMaskDirty = !1, this._isStencilFuncDirty = !1, this._isStencilOpDirty = !1, this.reset()
|
|
}
|
|
return Object.defineProperty(e.prototype, "isDirty", {
|
|
get: function() {
|
|
return this._isStencilTestDirty || this._isStencilMaskDirty || this._isStencilFuncDirty || this._isStencilOpDirty
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "stencilFunc", {
|
|
get: function() {
|
|
return this._stencilFunc
|
|
},
|
|
set: function(e) {
|
|
this._stencilFunc !== e && (this._stencilFunc = e, this._isStencilFuncDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "stencilFuncRef", {
|
|
get: function() {
|
|
return this._stencilFuncRef
|
|
},
|
|
set: function(e) {
|
|
this._stencilFuncRef !== e && (this._stencilFuncRef = e, this._isStencilFuncDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "stencilFuncMask", {
|
|
get: function() {
|
|
return this._stencilFuncMask
|
|
},
|
|
set: function(e) {
|
|
this._stencilFuncMask !== e && (this._stencilFuncMask = e, this._isStencilFuncDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "stencilOpStencilFail", {
|
|
get: function() {
|
|
return this._stencilOpStencilFail
|
|
},
|
|
set: function(e) {
|
|
this._stencilOpStencilFail !== e && (this._stencilOpStencilFail = e, this._isStencilOpDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "stencilOpDepthFail", {
|
|
get: function() {
|
|
return this._stencilOpDepthFail
|
|
},
|
|
set: function(e) {
|
|
this._stencilOpDepthFail !== e && (this._stencilOpDepthFail = e, this._isStencilOpDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "stencilOpStencilDepthPass", {
|
|
get: function() {
|
|
return this._stencilOpStencilDepthPass
|
|
},
|
|
set: function(e) {
|
|
this._stencilOpStencilDepthPass !== e && (this._stencilOpStencilDepthPass = e, this._isStencilOpDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "stencilMask", {
|
|
get: function() {
|
|
return this._stencilMask
|
|
},
|
|
set: function(e) {
|
|
this._stencilMask !== e && (this._stencilMask = e, this._isStencilMaskDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "stencilTest", {
|
|
get: function() {
|
|
return this._stencilTest
|
|
},
|
|
set: function(e) {
|
|
this._stencilTest !== e && (this._stencilTest = e, this._isStencilTestDirty = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.reset = function() {
|
|
this._stencilTest = !1, this._stencilMask = 255, this._stencilFunc = e.ALWAYS, this._stencilFuncRef = 1, this._stencilFuncMask = 255, this._stencilOpStencilFail = e.KEEP, this._stencilOpDepthFail = e.KEEP, this._stencilOpStencilDepthPass = e.REPLACE, this._isStencilTestDirty = !0, this._isStencilMaskDirty = !0, this._isStencilFuncDirty = !0, this._isStencilOpDirty = !0
|
|
}, e.prototype.apply = function(e) {
|
|
this.isDirty && (this._isStencilTestDirty && (this.stencilTest ? e.enable(e.STENCIL_TEST) : e.disable(e.STENCIL_TEST), this._isStencilTestDirty = !1), this._isStencilMaskDirty && (e.stencilMask(this.stencilMask), this._isStencilMaskDirty = !1), this._isStencilFuncDirty && (e.stencilFunc(this.stencilFunc, this.stencilFuncRef, this.stencilFuncMask), this._isStencilFuncDirty = !1), this._isStencilOpDirty && (e.stencilOp(this.stencilOpStencilFail, this.stencilOpDepthFail, this.stencilOpStencilDepthPass), this._isStencilOpDirty = !1))
|
|
}, e.ALWAYS = o.a.ALWAYS, e.KEEP = o.a.KEEP, e.REPLACE = o.a.REPLACE, e
|
|
}();
|
|
i.d(t, "a", function() {
|
|
return n
|
|
}), i.d(t, "b", function() {
|
|
return r
|
|
}), i.d(t, "c", function() {
|
|
return s
|
|
})
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "clipPlaneFragmentDeclaration",
|
|
r = "#ifdef CLIPPLANE\nvarying float fClipDistance;\n#endif\n#ifdef CLIPPLANE2\nvarying float fClipDistance2;\n#endif\n#ifdef CLIPPLANE3\nvarying float fClipDistance3;\n#endif\n#ifdef CLIPPLANE4\nvarying float fClipDistance4;\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "clipPlaneVertexDeclaration",
|
|
r = "#ifdef CLIPPLANE\nuniform vec4 vClipPlane;\nvarying float fClipDistance;\n#endif\n#ifdef CLIPPLANE2\nuniform vec4 vClipPlane2;\nvarying float fClipDistance2;\n#endif\n#ifdef CLIPPLANE3\nuniform vec4 vClipPlane3;\nvarying float fClipDistance3;\n#endif\n#ifdef CLIPPLANE4\nuniform vec4 vClipPlane4;\nvarying float fClipDistance4;\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.r(t);
|
|
var n = i(30),
|
|
r = i(8),
|
|
o = i(0),
|
|
s = i(22),
|
|
a = function() {
|
|
function e(e, t) {
|
|
this.triggerOptions = e, this.onBeforeExecuteObservable = new r.c, e.parameter ? (this.trigger = e.trigger, this._triggerParameter = e.parameter) : e.trigger ? this.trigger = e.trigger : this.trigger = e, this._nextActiveAction = this, this._condition = t
|
|
}
|
|
return e.prototype._prepare = function() {}, e.prototype.getTriggerParameter = function() {
|
|
return this._triggerParameter
|
|
}, e.prototype._executeCurrent = function(e) {
|
|
if (this._nextActiveAction._condition) {
|
|
var t = this._nextActiveAction._condition,
|
|
i = this._actionManager.getScene().getRenderId();
|
|
if (t._evaluationId === i) {
|
|
if (!t._currentResult) return
|
|
} else {
|
|
if (t._evaluationId = i, !t.isValid()) return void(t._currentResult = !1);
|
|
t._currentResult = !0
|
|
}
|
|
}
|
|
this.onBeforeExecuteObservable.notifyObservers(this), this._nextActiveAction.execute(e), this.skipToNextActiveAction()
|
|
}, e.prototype.execute = function(e) {}, e.prototype.skipToNextActiveAction = function() {
|
|
this._nextActiveAction._child ? (this._nextActiveAction._child._actionManager || (this._nextActiveAction._child._actionManager = this._actionManager), this._nextActiveAction = this._nextActiveAction._child) : this._nextActiveAction = this
|
|
}, e.prototype.then = function(e) {
|
|
return this._child = e, e._actionManager = this._actionManager, e._prepare(), e
|
|
}, e.prototype._getProperty = function(e) {
|
|
return this._actionManager._getProperty(e)
|
|
}, e.prototype._getEffectiveTarget = function(e, t) {
|
|
return this._actionManager._getEffectiveTarget(e, t)
|
|
}, e.prototype.serialize = function(e) {}, e.prototype._serialize = function(e, t) {
|
|
var i = {
|
|
type: 1,
|
|
children: [],
|
|
name: e.name,
|
|
properties: e.properties || []
|
|
};
|
|
if (this._child && this._child.serialize(i), this._condition) {
|
|
var n = this._condition.serialize();
|
|
return n.children.push(i), t && t.children.push(n), n
|
|
}
|
|
return t && t.children.push(i), i
|
|
}, e._SerializeValueAsString = function(e) {
|
|
return "number" == typeof e ? e.toString() : "boolean" == typeof e ? e ? "true" : "false" : e instanceof o.w ? e.x + ", " + e.y : e instanceof o.x ? e.x + ", " + e.y + ", " + e.z : e instanceof o.e ? e.r + ", " + e.g + ", " + e.b : e instanceof o.f ? e.r + ", " + e.g + ", " + e.b + ", " + e.a : e
|
|
}, e._GetTargetProperty = function(e) {
|
|
return {
|
|
name: "target",
|
|
targetType: e._isMesh ? "MeshProperties" : e._isLight ? "LightProperties" : e._isCamera ? "CameraProperties" : "SceneProperties",
|
|
value: e._isScene ? "Scene" : e.name
|
|
}
|
|
}, e
|
|
}();
|
|
s.a.RegisteredTypes["BABYLON.Action"] = a;
|
|
var c = i(36),
|
|
l = i(1),
|
|
u = function() {
|
|
function e(e) {
|
|
this._actionManager = e
|
|
}
|
|
return e.prototype.isValid = function() {
|
|
return !0
|
|
}, e.prototype._getProperty = function(e) {
|
|
return this._actionManager._getProperty(e)
|
|
}, e.prototype._getEffectiveTarget = function(e, t) {
|
|
return this._actionManager._getEffectiveTarget(e, t)
|
|
}, e.prototype.serialize = function() {}, e.prototype._serialize = function(e) {
|
|
return {
|
|
type: 2,
|
|
children: [],
|
|
name: e.name,
|
|
properties: e.properties
|
|
}
|
|
}, e
|
|
}(),
|
|
h = function(e) {
|
|
function t(i, n, r, o, s) {
|
|
void 0 === s && (s = t.IsEqual);
|
|
var a = e.call(this, i) || this;
|
|
return a.propertyPath = r, a.value = o, a.operator = s, a._target = n, a._effectiveTarget = a._getEffectiveTarget(n, a.propertyPath), a._property = a._getProperty(a.propertyPath), a
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t, "IsEqual", {
|
|
get: function() {
|
|
return t._IsEqual
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "IsDifferent", {
|
|
get: function() {
|
|
return t._IsDifferent
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "IsGreater", {
|
|
get: function() {
|
|
return t._IsGreater
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "IsLesser", {
|
|
get: function() {
|
|
return t._IsLesser
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.isValid = function() {
|
|
switch (this.operator) {
|
|
case t.IsGreater:
|
|
return this._effectiveTarget[this._property] > this.value;
|
|
case t.IsLesser:
|
|
return this._effectiveTarget[this._property] < this.value;
|
|
case t.IsEqual:
|
|
case t.IsDifferent:
|
|
var e;
|
|
return e = this.value.equals ? this.value.equals(this._effectiveTarget[this._property]) : this.value === this._effectiveTarget[this._property], this.operator === t.IsEqual ? e : !e
|
|
}
|
|
return !1
|
|
}, t.prototype.serialize = function() {
|
|
return this._serialize({
|
|
name: "ValueCondition",
|
|
properties: [a._GetTargetProperty(this._target), {
|
|
name: "propertyPath",
|
|
value: this.propertyPath
|
|
}, {
|
|
name: "value",
|
|
value: a._SerializeValueAsString(this.value)
|
|
}, {
|
|
name: "operator",
|
|
value: t.GetOperatorName(this.operator)
|
|
}]
|
|
})
|
|
}, t.GetOperatorName = function(e) {
|
|
switch (e) {
|
|
case t._IsEqual:
|
|
return "IsEqual";
|
|
case t._IsDifferent:
|
|
return "IsDifferent";
|
|
case t._IsGreater:
|
|
return "IsGreater";
|
|
case t._IsLesser:
|
|
return "IsLesser";
|
|
default:
|
|
return ""
|
|
}
|
|
}, t._IsEqual = 0, t._IsDifferent = 1, t._IsGreater = 2, t._IsLesser = 3, t
|
|
}(u),
|
|
d = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t) || this;
|
|
return n.predicate = i, n
|
|
}
|
|
return l.d(t, e), t.prototype.isValid = function() {
|
|
return this.predicate()
|
|
}, t
|
|
}(u),
|
|
f = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t) || this;
|
|
return r.value = n, r._target = i, r
|
|
}
|
|
return l.d(t, e), t.prototype.isValid = function() {
|
|
return this._target.state === this.value
|
|
}, t.prototype.serialize = function() {
|
|
return this._serialize({
|
|
name: "StateCondition",
|
|
properties: [a._GetTargetProperty(this._target), {
|
|
name: "value",
|
|
value: this.value
|
|
}]
|
|
})
|
|
}, t
|
|
}(u);
|
|
s.a.RegisteredTypes["BABYLON.ValueCondition"] = h, s.a.RegisteredTypes["BABYLON.PredicateCondition"] = d, s.a.RegisteredTypes["BABYLON.StateCondition"] = f;
|
|
var p = i(6),
|
|
_ = i(3),
|
|
g = function(e) {
|
|
function t(t, i, n, r) {
|
|
var o = e.call(this, t, r) || this;
|
|
return o.propertyPath = n, o._target = o._effectiveTarget = i, o
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {
|
|
this._effectiveTarget = this._getEffectiveTarget(this._effectiveTarget, this.propertyPath), this._property = this._getProperty(this.propertyPath)
|
|
}, t.prototype.execute = function() {
|
|
this._effectiveTarget[this._property] = !this._effectiveTarget[this._property]
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "SwitchBooleanAction",
|
|
properties: [a._GetTargetProperty(this._target), {
|
|
name: "propertyPath",
|
|
value: this.propertyPath
|
|
}]
|
|
}, t)
|
|
}, t
|
|
}(a),
|
|
m = function(e) {
|
|
function t(t, i, n, r) {
|
|
var o = e.call(this, t, r) || this;
|
|
return o.value = n, o._target = i, o
|
|
}
|
|
return l.d(t, e), t.prototype.execute = function() {
|
|
this._target.state = this.value
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "SetStateAction",
|
|
properties: [a._GetTargetProperty(this._target), {
|
|
name: "value",
|
|
value: this.value
|
|
}]
|
|
}, t)
|
|
}, t
|
|
}(a),
|
|
v = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
var s = e.call(this, t, o) || this;
|
|
return s.propertyPath = n, s.value = r, s._target = s._effectiveTarget = i, s
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {
|
|
this._effectiveTarget = this._getEffectiveTarget(this._effectiveTarget, this.propertyPath), this._property = this._getProperty(this.propertyPath)
|
|
}, t.prototype.execute = function() {
|
|
this._effectiveTarget[this._property] = this.value, this._target.markAsDirty && this._target.markAsDirty(this._property)
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "SetValueAction",
|
|
properties: [a._GetTargetProperty(this._target), {
|
|
name: "propertyPath",
|
|
value: this.propertyPath
|
|
}, {
|
|
name: "value",
|
|
value: a._SerializeValueAsString(this.value)
|
|
}]
|
|
}, t)
|
|
}, t
|
|
}(a),
|
|
y = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
var s = e.call(this, t, o) || this;
|
|
return s.propertyPath = n, s.value = r, s._target = s._effectiveTarget = i, s
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {
|
|
this._effectiveTarget = this._getEffectiveTarget(this._effectiveTarget, this.propertyPath), this._property = this._getProperty(this.propertyPath), "number" != typeof this._effectiveTarget[this._property] && p.a.Warn("Warning: IncrementValueAction can only be used with number values")
|
|
}, t.prototype.execute = function() {
|
|
this._effectiveTarget[this._property] += this.value, this._target.markAsDirty && this._target.markAsDirty(this._property)
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "IncrementValueAction",
|
|
properties: [a._GetTargetProperty(this._target), {
|
|
name: "propertyPath",
|
|
value: this.propertyPath
|
|
}, {
|
|
name: "value",
|
|
value: a._SerializeValueAsString(this.value)
|
|
}]
|
|
}, t)
|
|
}, t
|
|
}(a),
|
|
b = function(e) {
|
|
function t(t, i, n, r, o, s) {
|
|
var a = e.call(this, t, s) || this;
|
|
return a.from = n, a.to = r, a.loop = o, a._target = i, a
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {}, t.prototype.execute = function() {
|
|
this._actionManager.getScene().beginAnimation(this._target, this.from, this.to, this.loop)
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "PlayAnimationAction",
|
|
properties: [a._GetTargetProperty(this._target), {
|
|
name: "from",
|
|
value: String(this.from)
|
|
}, {
|
|
name: "to",
|
|
value: String(this.to)
|
|
}, {
|
|
name: "loop",
|
|
value: a._SerializeValueAsString(this.loop) || !1
|
|
}]
|
|
}, t)
|
|
}, t
|
|
}(a),
|
|
T = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, n) || this;
|
|
return r._target = i, r
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {}, t.prototype.execute = function() {
|
|
this._actionManager.getScene().stopAnimation(this._target)
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "StopAnimationAction",
|
|
properties: [a._GetTargetProperty(this._target)]
|
|
}, t)
|
|
}, t
|
|
}(a),
|
|
E = function(e) {
|
|
function t(t, i) {
|
|
return void 0 === t && (t = _.a.ACTION_NothingTrigger), e.call(this, t, i) || this
|
|
}
|
|
return l.d(t, e), t.prototype.execute = function() {}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "DoNothingAction",
|
|
properties: []
|
|
}, t)
|
|
}, t
|
|
}(a),
|
|
A = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, n) || this;
|
|
return r.children = i, r
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {
|
|
for (var e = 0; e < this.children.length; e++) this.children[e]._actionManager = this._actionManager, this.children[e]._prepare()
|
|
}, t.prototype.execute = function(e) {
|
|
for (var t = 0; t < this.children.length; t++) this.children[t].execute(e)
|
|
}, t.prototype.serialize = function(t) {
|
|
for (var i = e.prototype._serialize.call(this, {
|
|
name: "CombineAction",
|
|
properties: [],
|
|
combine: []
|
|
}, t), n = 0; n < this.children.length; n++) i.combine.push(this.children[n].serialize(null));
|
|
return i
|
|
}, t
|
|
}(a),
|
|
x = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, n) || this;
|
|
return r.func = i, r
|
|
}
|
|
return l.d(t, e), t.prototype.execute = function(e) {
|
|
this.func(e)
|
|
}, t
|
|
}(a),
|
|
R = function(e) {
|
|
function t(t, i, n, r) {
|
|
var o = e.call(this, t, r) || this;
|
|
return o._target = i, o._parent = n, o
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {}, t.prototype.execute = function() {
|
|
if (this._target.parent !== this._parent) {
|
|
var e = this._parent.getWorldMatrix().clone();
|
|
e.invert(), this._target.position = o.x.TransformCoordinates(this._target.position, e), this._target.parent = this._parent
|
|
}
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "SetParentAction",
|
|
properties: [a._GetTargetProperty(this._target), a._GetTargetProperty(this._parent)]
|
|
}, t)
|
|
}, t
|
|
}(a);
|
|
s.a.RegisteredTypes["BABYLON.SetParentAction"] = R, s.a.RegisteredTypes["BABYLON.ExecuteCodeAction"] = x, s.a.RegisteredTypes["BABYLON.DoNothingAction"] = E, s.a.RegisteredTypes["BABYLON.StopAnimationAction"] = T, s.a.RegisteredTypes["BABYLON.PlayAnimationAction"] = b, s.a.RegisteredTypes["BABYLON.IncrementValueAction"] = y, s.a.RegisteredTypes["BABYLON.SetValueAction"] = v, s.a.RegisteredTypes["BABYLON.SetStateAction"] = m, s.a.RegisteredTypes["BABYLON.SetParentAction"] = R;
|
|
var P = i(23),
|
|
S = i(32),
|
|
C = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this) || this;
|
|
return i._scene = t || P.a.LastCreatedScene, t.actionManagers.push(i), i
|
|
}
|
|
return l.d(t, e), t.prototype.dispose = function() {
|
|
for (var e = this._scene.actionManagers.indexOf(this), i = 0; i < this.actions.length; i++) {
|
|
var n = this.actions[i];
|
|
t.Triggers[n.trigger]--, 0 === t.Triggers[n.trigger] && delete t.Triggers[n.trigger]
|
|
}
|
|
e > -1 && this._scene.actionManagers.splice(e, 1)
|
|
}, t.prototype.getScene = function() {
|
|
return this._scene
|
|
}, t.prototype.hasSpecificTriggers = function(e) {
|
|
for (var t = 0; t < this.actions.length; t++) {
|
|
var i = this.actions[t];
|
|
if (e.indexOf(i.trigger) > -1) return !0
|
|
}
|
|
return !1
|
|
}, t.prototype.hasSpecificTriggers2 = function(e, t) {
|
|
for (var i = 0; i < this.actions.length; i++) {
|
|
var n = this.actions[i];
|
|
if (e == n.trigger || t == n.trigger) return !0
|
|
}
|
|
return !1
|
|
}, t.prototype.hasSpecificTrigger = function(e, t) {
|
|
for (var i = 0; i < this.actions.length; i++) {
|
|
var n = this.actions[i];
|
|
if (n.trigger === e) {
|
|
if (!t) return !0;
|
|
if (t(n.getTriggerParameter())) return !0
|
|
}
|
|
}
|
|
return !1
|
|
}, Object.defineProperty(t.prototype, "hasPointerTriggers", {
|
|
get: function() {
|
|
for (var e = 0; e < this.actions.length; e++) {
|
|
var i = this.actions[e];
|
|
if (i.trigger >= t.OnPickTrigger && i.trigger <= t.OnPointerOutTrigger) return !0
|
|
}
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "hasPickTriggers", {
|
|
get: function() {
|
|
for (var e = 0; e < this.actions.length; e++) {
|
|
var i = this.actions[e];
|
|
if (i.trigger >= t.OnPickTrigger && i.trigger <= t.OnPickUpTrigger) return !0
|
|
}
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.registerAction = function(e) {
|
|
return e.trigger === t.OnEveryFrameTrigger && this.getScene().actionManager !== this ? (p.a.Warn("OnEveryFrameTrigger can only be used with scene.actionManager"), null) : (this.actions.push(e), t.Triggers[e.trigger] ? t.Triggers[e.trigger]++ : t.Triggers[e.trigger] = 1, e._actionManager = this, e._prepare(), e)
|
|
}, t.prototype.unregisterAction = function(e) {
|
|
var i = this.actions.indexOf(e);
|
|
return -1 !== i && (this.actions.splice(i, 1), t.Triggers[e.trigger] -= 1, 0 === t.Triggers[e.trigger] && delete t.Triggers[e.trigger], delete e._actionManager, !0)
|
|
}, t.prototype.processTrigger = function(e, i) {
|
|
for (var n = 0; n < this.actions.length; n++) {
|
|
var r = this.actions[n];
|
|
if (r.trigger === e) {
|
|
if (i && (e === t.OnKeyUpTrigger || e === t.OnKeyDownTrigger)) {
|
|
var o = r.getTriggerParameter();
|
|
if (o && o !== i.sourceEvent.keyCode) {
|
|
if (!o.toLowerCase) continue;
|
|
var s = o.toLowerCase();
|
|
if (s !== i.sourceEvent.key) {
|
|
var a = i.sourceEvent.charCode ? i.sourceEvent.charCode : i.sourceEvent.keyCode;
|
|
if (String.fromCharCode(a).toLowerCase() !== s) continue
|
|
}
|
|
}
|
|
}
|
|
r._executeCurrent(i)
|
|
}
|
|
}
|
|
}, t.prototype._getEffectiveTarget = function(e, t) {
|
|
for (var i = t.split("."), n = 0; n < i.length - 1; n++) e = e[i[n]];
|
|
return e
|
|
}, t.prototype._getProperty = function(e) {
|
|
var t = e.split(".");
|
|
return t[t.length - 1]
|
|
}, t.prototype.serialize = function(e) {
|
|
for (var i = {
|
|
children: new Array,
|
|
name: e,
|
|
type: 3,
|
|
properties: new Array
|
|
}, n = 0; n < this.actions.length; n++) {
|
|
var r = {
|
|
type: 0,
|
|
children: new Array,
|
|
name: t.GetTriggerName(this.actions[n].trigger),
|
|
properties: new Array
|
|
},
|
|
o = this.actions[n].triggerOptions;
|
|
if (o && "number" != typeof o)
|
|
if (o.parameter instanceof Node) r.properties.push(a._GetTargetProperty(o.parameter));
|
|
else {
|
|
var s = {};
|
|
S.a.DeepCopy(o.parameter, s, ["mesh"]), o.parameter && o.parameter.mesh && (s._meshId = o.parameter.mesh.id), r.properties.push({
|
|
name: "parameter",
|
|
targetType: null,
|
|
value: s
|
|
})
|
|
} this.actions[n].serialize(r), i.children.push(r)
|
|
}
|
|
return i
|
|
}, t.Parse = function(e, i, n) {
|
|
var r = new t(n);
|
|
null === i ? n.actionManager = r : i.actionManager = r;
|
|
for (var a = function(e, t, i, n) {
|
|
if (null === n) {
|
|
var r = parseFloat(t);
|
|
return "true" === t || "false" === t ? "true" === t : isNaN(r) ? t : r
|
|
}
|
|
for (var s = n.split("."), a = t.split(","), c = 0; c < s.length; c++) i = i[s[c]];
|
|
if ("boolean" == typeof i) return "true" === a[0];
|
|
if ("string" == typeof i) return a[0];
|
|
var l = new Array;
|
|
for (c = 0; c < a.length; c++) l.push(parseFloat(a[c]));
|
|
return i instanceof o.x ? o.x.FromArray(l) : i instanceof o.y ? o.y.FromArray(l) : i instanceof o.e ? o.e.FromArray(l) : i instanceof o.f ? o.f.FromArray(l) : parseFloat(a[0])
|
|
}, c = function(e, i, o, l, d) {
|
|
if (void 0 === d && (d = null), !e.detached) {
|
|
var f = new Array,
|
|
p = null,
|
|
_ = null,
|
|
g = e.combine && e.combine.length > 0;
|
|
if (2 === e.type ? f.push(r) : f.push(i), g) {
|
|
for (var m = new Array, v = 0; v < e.combine.length; v++) c(e.combine[v], t.NothingTrigger, o, l, m);
|
|
f.push(m)
|
|
} else
|
|
for (var y = 0; y < e.properties.length; y++) {
|
|
var b = e.properties[y].value,
|
|
T = e.properties[y].name,
|
|
A = e.properties[y].targetType;
|
|
"target" === T ? b = p = null !== A && "SceneProperties" === A ? n : n.getNodeByName(b) : "parent" === T ? b = n.getNodeByName(b) : "sound" === T ? n.getSoundByName && (b = n.getSoundByName(b)) : "propertyPath" !== T ? b = 2 === e.type && "operator" === T ? h[b] : a(0, b, p, "value" === T ? _ : null) : _ = b, f.push(b)
|
|
}
|
|
if (null === d ? f.push(o) : f.push(null), "InterpolateValueAction" === e.name) {
|
|
var x = f[f.length - 2];
|
|
f[f.length - 1] = x, f[f.length - 2] = o
|
|
}
|
|
var R = function(e, t) {
|
|
var i = s.a.GetClass("BABYLON." + e);
|
|
if (i) {
|
|
var n = Object.create(i.prototype);
|
|
return n.constructor.apply(n, t), n
|
|
}
|
|
}(e.name, f);
|
|
if (R instanceof u && null !== o) {
|
|
var P = new E(i, o);
|
|
l ? l.then(P) : r.registerAction(P), l = P
|
|
}
|
|
null === d ? R instanceof u ? (o = R, R = l) : (o = null, l ? l.then(R) : r.registerAction(R)) : d.push(R);
|
|
for (y = 0; y < e.children.length; y++) c(e.children[y], i, o, R, null)
|
|
}
|
|
}, l = 0; l < e.children.length; l++) {
|
|
var d, f = e.children[l];
|
|
if (f.properties.length > 0) {
|
|
var p = f.properties[0].value,
|
|
_ = null === f.properties[0].targetType ? p : n.getMeshByName(p);
|
|
_._meshId && (_.mesh = n.getMeshByID(_._meshId)), d = {
|
|
trigger: t[f.name],
|
|
parameter: _
|
|
}
|
|
} else d = t[f.name];
|
|
for (var g = 0; g < f.children.length; g++) f.detached || c(f.children[g], d, null, null)
|
|
}
|
|
}, t.GetTriggerName = function(e) {
|
|
switch (e) {
|
|
case 0:
|
|
return "NothingTrigger";
|
|
case 1:
|
|
return "OnPickTrigger";
|
|
case 2:
|
|
return "OnLeftPickTrigger";
|
|
case 3:
|
|
return "OnRightPickTrigger";
|
|
case 4:
|
|
return "OnCenterPickTrigger";
|
|
case 5:
|
|
return "OnPickDownTrigger";
|
|
case 6:
|
|
return "OnPickUpTrigger";
|
|
case 7:
|
|
return "OnLongPressTrigger";
|
|
case 8:
|
|
return "OnPointerOverTrigger";
|
|
case 9:
|
|
return "OnPointerOutTrigger";
|
|
case 10:
|
|
return "OnEveryFrameTrigger";
|
|
case 11:
|
|
return "OnIntersectionEnterTrigger";
|
|
case 12:
|
|
return "OnIntersectionExitTrigger";
|
|
case 13:
|
|
return "OnKeyDownTrigger";
|
|
case 14:
|
|
return "OnKeyUpTrigger";
|
|
case 15:
|
|
return "OnPickOutTrigger";
|
|
default:
|
|
return ""
|
|
}
|
|
}, t.NothingTrigger = _.a.ACTION_NothingTrigger, t.OnPickTrigger = _.a.ACTION_OnPickTrigger, t.OnLeftPickTrigger = _.a.ACTION_OnLeftPickTrigger, t.OnRightPickTrigger = _.a.ACTION_OnRightPickTrigger, t.OnCenterPickTrigger = _.a.ACTION_OnCenterPickTrigger, t.OnPickDownTrigger = _.a.ACTION_OnPickDownTrigger, t.OnDoublePickTrigger = _.a.ACTION_OnDoublePickTrigger, t.OnPickUpTrigger = _.a.ACTION_OnPickUpTrigger, t.OnPickOutTrigger = _.a.ACTION_OnPickOutTrigger, t.OnLongPressTrigger = _.a.ACTION_OnLongPressTrigger, t.OnPointerOverTrigger = _.a.ACTION_OnPointerOverTrigger, t.OnPointerOutTrigger = _.a.ACTION_OnPointerOutTrigger, t.OnEveryFrameTrigger = _.a.ACTION_OnEveryFrameTrigger, t.OnIntersectionEnterTrigger = _.a.ACTION_OnIntersectionEnterTrigger, t.OnIntersectionExitTrigger = _.a.ACTION_OnIntersectionExitTrigger, t.OnKeyDownTrigger = _.a.ACTION_OnKeyDownTrigger, t.OnKeyUpTrigger = 15, t
|
|
}(i(79).a),
|
|
M = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, n) || this;
|
|
return r._sound = i, r
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {}, t.prototype.execute = function() {
|
|
void 0 !== this._sound && this._sound.play()
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "PlaySoundAction",
|
|
properties: [{
|
|
name: "sound",
|
|
value: this._sound.name
|
|
}]
|
|
}, t)
|
|
}, t
|
|
}(a),
|
|
O = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, n) || this;
|
|
return r._sound = i, r
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {}, t.prototype.execute = function() {
|
|
void 0 !== this._sound && this._sound.stop()
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "StopSoundAction",
|
|
properties: [{
|
|
name: "sound",
|
|
value: this._sound.name
|
|
}]
|
|
}, t)
|
|
}, t
|
|
}(a);
|
|
s.a.RegisteredTypes["BABYLON.PlaySoundAction"] = O, s.a.RegisteredTypes["BABYLON.StopSoundAction"] = O;
|
|
var I, D = i(12),
|
|
L = i(2);
|
|
! function(e) {
|
|
e[e.STEP = 1] = "STEP"
|
|
}(I || (I = {}));
|
|
var w = function() {
|
|
function e(e, t, i) {
|
|
this.name = e, this.from = t, this.to = i
|
|
}
|
|
return e.prototype.clone = function() {
|
|
return new e(this.name, this.from, this.to)
|
|
}, e
|
|
}(),
|
|
F = i(25),
|
|
N = function() {
|
|
return function() {}
|
|
}(),
|
|
B = function() {
|
|
function e(t, i, n, r, o, s) {
|
|
this.name = t, this.targetProperty = i, this.framePerSecond = n, this.dataType = r, this.loopMode = o, this.enableBlending = s, this._runtimeAnimations = new Array, this._events = new Array, this.blendingSpeed = .01, this._ranges = {}, this.targetPropertyPath = i.split("."), this.dataType = r, this.loopMode = void 0 === o ? e.ANIMATIONLOOPMODE_CYCLE : o
|
|
}
|
|
return e._PrepareAnimation = function(t, i, n, r, s, a, c, l) {
|
|
var u = void 0;
|
|
if (!isNaN(parseFloat(s)) && isFinite(s) ? u = e.ANIMATIONTYPE_FLOAT : s instanceof o.q ? u = e.ANIMATIONTYPE_QUATERNION : s instanceof o.x ? u = e.ANIMATIONTYPE_VECTOR3 : s instanceof o.w ? u = e.ANIMATIONTYPE_VECTOR2 : s instanceof o.e ? u = e.ANIMATIONTYPE_COLOR3 : s instanceof o.r && (u = e.ANIMATIONTYPE_SIZE), null == u) return null;
|
|
var h = new e(t, i, n, u, c),
|
|
d = [{
|
|
frame: 0,
|
|
value: s
|
|
}, {
|
|
frame: r,
|
|
value: a
|
|
}];
|
|
return h.setKeys(d), void 0 !== l && h.setEasingFunction(l), h
|
|
}, e.CreateAnimation = function(t, i, n, r) {
|
|
var o = new e(t + "Animation", t, n, i, e.ANIMATIONLOOPMODE_CONSTANT);
|
|
return o.setEasingFunction(r), o
|
|
}, e.CreateAndStartAnimation = function(t, i, n, r, o, s, a, c, l, u) {
|
|
var h = e._PrepareAnimation(t, n, r, o, s, a, c, l);
|
|
return h ? i.getScene().beginDirectAnimation(i, [h], 0, o, 1 === h.loopMode, 1, u) : null
|
|
}, e.CreateAndStartHierarchyAnimation = function(t, i, n, r, o, s, a, c, l, u, h) {
|
|
var d = e._PrepareAnimation(t, r, o, s, a, c, l, u);
|
|
return d ? i.getScene().beginDirectHierarchyAnimation(i, n, [d], 0, s, 1 === d.loopMode, 1, h) : null
|
|
}, e.CreateMergeAndStartAnimation = function(t, i, n, r, o, s, a, c, l, u) {
|
|
var h = e._PrepareAnimation(t, n, r, o, s, a, c, l);
|
|
return h ? (i.animations.push(h), i.getScene().beginAnimation(i, 0, o, 1 === h.loopMode, 1, u)) : null
|
|
}, e.TransitionTo = function(e, t, i, n, r, o, s, a) {
|
|
if (void 0 === a && (a = null), s <= 0) return i[e] = t, a && a(), null;
|
|
var c = r * (s / 1e3);
|
|
o.setKeys([{
|
|
frame: 0,
|
|
value: i[e].clone ? i[e].clone() : i[e]
|
|
}, {
|
|
frame: c,
|
|
value: t
|
|
}]), i.animations || (i.animations = []), i.animations.push(o);
|
|
var l = n.beginAnimation(i, 0, c, !1);
|
|
return l.onAnimationEnd = a, l
|
|
}, Object.defineProperty(e.prototype, "runtimeAnimations", {
|
|
get: function() {
|
|
return this._runtimeAnimations
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "hasRunningRuntimeAnimations", {
|
|
get: function() {
|
|
for (var e = 0, t = this._runtimeAnimations; e < t.length; e++) {
|
|
if (!t[e].isStopped) return !0
|
|
}
|
|
return !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.toString = function(e) {
|
|
var t = "Name: " + this.name + ", property: " + this.targetProperty;
|
|
if (t += ", datatype: " + ["Float", "Vector3", "Quaternion", "Matrix", "Color3", "Vector2"][this.dataType], t += ", nKeys: " + (this._keys ? this._keys.length : "none"), t += ", nRanges: " + (this._ranges ? Object.keys(this._ranges).length : "none"), e) {
|
|
t += ", Ranges: {";
|
|
var i = !0;
|
|
for (var n in this._ranges) i && (t += ", ", i = !1), t += n;
|
|
t += "}"
|
|
}
|
|
return t
|
|
}, e.prototype.addEvent = function(e) {
|
|
this._events.push(e)
|
|
}, e.prototype.removeEvents = function(e) {
|
|
for (var t = 0; t < this._events.length; t++) this._events[t].frame === e && (this._events.splice(t, 1), t--)
|
|
}, e.prototype.getEvents = function() {
|
|
return this._events
|
|
}, e.prototype.createRange = function(e, t, i) {
|
|
this._ranges[e] || (this._ranges[e] = new w(e, t, i))
|
|
}, e.prototype.deleteRange = function(e, t) {
|
|
void 0 === t && (t = !0);
|
|
var i = this._ranges[e];
|
|
if (i) {
|
|
if (t)
|
|
for (var n = i.from, r = i.to, o = this._keys.length - 1; o >= 0; o--) this._keys[o].frame >= n && this._keys[o].frame <= r && this._keys.splice(o, 1);
|
|
this._ranges[e] = null
|
|
}
|
|
}, e.prototype.getRange = function(e) {
|
|
return this._ranges[e]
|
|
}, e.prototype.getKeys = function() {
|
|
return this._keys
|
|
}, e.prototype.getHighestFrame = function() {
|
|
for (var e = 0, t = 0, i = this._keys.length; t < i; t++) e < this._keys[t].frame && (e = this._keys[t].frame);
|
|
return e
|
|
}, e.prototype.getEasingFunction = function() {
|
|
return this._easingFunction
|
|
}, e.prototype.setEasingFunction = function(e) {
|
|
this._easingFunction = e
|
|
}, e.prototype.floatInterpolateFunction = function(e, t, i) {
|
|
return D.a.Lerp(e, t, i)
|
|
}, e.prototype.floatInterpolateFunctionWithTangents = function(e, t, i, n, r) {
|
|
return D.a.Hermite(e, t, i, n, r)
|
|
}, e.prototype.quaternionInterpolateFunction = function(e, t, i) {
|
|
return o.q.Slerp(e, t, i)
|
|
}, e.prototype.quaternionInterpolateFunctionWithTangents = function(e, t, i, n, r) {
|
|
return o.q.Hermite(e, t, i, n, r).normalize()
|
|
}, e.prototype.vector3InterpolateFunction = function(e, t, i) {
|
|
return o.x.Lerp(e, t, i)
|
|
}, e.prototype.vector3InterpolateFunctionWithTangents = function(e, t, i, n, r) {
|
|
return o.x.Hermite(e, t, i, n, r)
|
|
}, e.prototype.vector2InterpolateFunction = function(e, t, i) {
|
|
return o.w.Lerp(e, t, i)
|
|
}, e.prototype.vector2InterpolateFunctionWithTangents = function(e, t, i, n, r) {
|
|
return o.w.Hermite(e, t, i, n, r)
|
|
}, e.prototype.sizeInterpolateFunction = function(e, t, i) {
|
|
return o.r.Lerp(e, t, i)
|
|
}, e.prototype.color3InterpolateFunction = function(e, t, i) {
|
|
return o.e.Lerp(e, t, i)
|
|
}, e.prototype._getKeyValue = function(e) {
|
|
return "function" == typeof e ? e() : e
|
|
}, e.prototype._interpolate = function(t, i) {
|
|
if (i.loopMode === e.ANIMATIONLOOPMODE_CONSTANT && i.repeatCount > 0) return i.highLimitValue.clone ? i.highLimitValue.clone() : i.highLimitValue;
|
|
var n = this._keys;
|
|
if (1 === n.length) return this._getKeyValue(n[0].value);
|
|
var r = i.key;
|
|
if (n[r].frame >= t)
|
|
for (; r - 1 >= 0 && n[r].frame >= t;) r--;
|
|
for (var o = r; o < n.length; o++) {
|
|
var s = n[o + 1];
|
|
if (s.frame >= t) {
|
|
i.key = o;
|
|
var a = n[o],
|
|
c = this._getKeyValue(a.value);
|
|
if (a.interpolation === I.STEP) return c;
|
|
var l = this._getKeyValue(s.value),
|
|
u = void 0 !== a.outTangent && void 0 !== s.inTangent,
|
|
h = s.frame - a.frame,
|
|
d = (t - a.frame) / h,
|
|
f = this.getEasingFunction();
|
|
switch (null != f && (d = f.ease(d)), this.dataType) {
|
|
case e.ANIMATIONTYPE_FLOAT:
|
|
var p = u ? this.floatInterpolateFunctionWithTangents(c, a.outTangent * h, l, s.inTangent * h, d) : this.floatInterpolateFunction(c, l, d);
|
|
switch (i.loopMode) {
|
|
case e.ANIMATIONLOOPMODE_CYCLE:
|
|
case e.ANIMATIONLOOPMODE_CONSTANT:
|
|
return p;
|
|
case e.ANIMATIONLOOPMODE_RELATIVE:
|
|
return i.offsetValue * i.repeatCount + p
|
|
}
|
|
break;
|
|
case e.ANIMATIONTYPE_QUATERNION:
|
|
var _ = u ? this.quaternionInterpolateFunctionWithTangents(c, a.outTangent.scale(h), l, s.inTangent.scale(h), d) : this.quaternionInterpolateFunction(c, l, d);
|
|
switch (i.loopMode) {
|
|
case e.ANIMATIONLOOPMODE_CYCLE:
|
|
case e.ANIMATIONLOOPMODE_CONSTANT:
|
|
return _;
|
|
case e.ANIMATIONLOOPMODE_RELATIVE:
|
|
return _.addInPlace(i.offsetValue.scale(i.repeatCount))
|
|
}
|
|
return _;
|
|
case e.ANIMATIONTYPE_VECTOR3:
|
|
var g = u ? this.vector3InterpolateFunctionWithTangents(c, a.outTangent.scale(h), l, s.inTangent.scale(h), d) : this.vector3InterpolateFunction(c, l, d);
|
|
switch (i.loopMode) {
|
|
case e.ANIMATIONLOOPMODE_CYCLE:
|
|
case e.ANIMATIONLOOPMODE_CONSTANT:
|
|
return g;
|
|
case e.ANIMATIONLOOPMODE_RELATIVE:
|
|
return g.add(i.offsetValue.scale(i.repeatCount))
|
|
}
|
|
case e.ANIMATIONTYPE_VECTOR2:
|
|
var m = u ? this.vector2InterpolateFunctionWithTangents(c, a.outTangent.scale(h), l, s.inTangent.scale(h), d) : this.vector2InterpolateFunction(c, l, d);
|
|
switch (i.loopMode) {
|
|
case e.ANIMATIONLOOPMODE_CYCLE:
|
|
case e.ANIMATIONLOOPMODE_CONSTANT:
|
|
return m;
|
|
case e.ANIMATIONLOOPMODE_RELATIVE:
|
|
return m.add(i.offsetValue.scale(i.repeatCount))
|
|
}
|
|
case e.ANIMATIONTYPE_SIZE:
|
|
switch (i.loopMode) {
|
|
case e.ANIMATIONLOOPMODE_CYCLE:
|
|
case e.ANIMATIONLOOPMODE_CONSTANT:
|
|
return this.sizeInterpolateFunction(c, l, d);
|
|
case e.ANIMATIONLOOPMODE_RELATIVE:
|
|
return this.sizeInterpolateFunction(c, l, d).add(i.offsetValue.scale(i.repeatCount))
|
|
}
|
|
case e.ANIMATIONTYPE_COLOR3:
|
|
switch (i.loopMode) {
|
|
case e.ANIMATIONLOOPMODE_CYCLE:
|
|
case e.ANIMATIONLOOPMODE_CONSTANT:
|
|
return this.color3InterpolateFunction(c, l, d);
|
|
case e.ANIMATIONLOOPMODE_RELATIVE:
|
|
return this.color3InterpolateFunction(c, l, d).add(i.offsetValue.scale(i.repeatCount))
|
|
}
|
|
case e.ANIMATIONTYPE_MATRIX:
|
|
switch (i.loopMode) {
|
|
case e.ANIMATIONLOOPMODE_CYCLE:
|
|
case e.ANIMATIONLOOPMODE_CONSTANT:
|
|
if (e.AllowMatricesInterpolation) return this.matrixInterpolateFunction(c, l, d, i.workValue);
|
|
case e.ANIMATIONLOOPMODE_RELATIVE:
|
|
return c
|
|
}
|
|
}
|
|
break
|
|
}
|
|
}
|
|
return this._getKeyValue(n[n.length - 1].value)
|
|
}, e.prototype.matrixInterpolateFunction = function(t, i, n, r) {
|
|
return e.AllowMatrixDecomposeForInterpolation ? r ? (o.j.DecomposeLerpToRef(t, i, n, r), r) : o.j.DecomposeLerp(t, i, n) : r ? (o.j.LerpToRef(t, i, n, r), r) : o.j.Lerp(t, i, n)
|
|
}, e.prototype.clone = function() {
|
|
var t = new e(this.name, this.targetPropertyPath.join("."), this.framePerSecond, this.dataType, this.loopMode);
|
|
if (t.enableBlending = this.enableBlending, t.blendingSpeed = this.blendingSpeed, this._keys && t.setKeys(this._keys), this._ranges)
|
|
for (var i in t._ranges = {}, this._ranges) {
|
|
var n = this._ranges[i];
|
|
n && (t._ranges[i] = n.clone())
|
|
}
|
|
return t
|
|
}, e.prototype.setKeys = function(e) {
|
|
this._keys = e.slice(0)
|
|
}, e.prototype.serialize = function() {
|
|
var t = {};
|
|
t.name = this.name, t.property = this.targetProperty, t.framePerSecond = this.framePerSecond, t.dataType = this.dataType, t.loopBehavior = this.loopMode, t.enableBlending = this.enableBlending, t.blendingSpeed = this.blendingSpeed;
|
|
var i = this.dataType;
|
|
t.keys = [];
|
|
for (var n = this.getKeys(), r = 0; r < n.length; r++) {
|
|
var o = n[r],
|
|
s = {};
|
|
switch (s.frame = o.frame, i) {
|
|
case e.ANIMATIONTYPE_FLOAT:
|
|
s.values = [o.value];
|
|
break;
|
|
case e.ANIMATIONTYPE_QUATERNION:
|
|
case e.ANIMATIONTYPE_MATRIX:
|
|
case e.ANIMATIONTYPE_VECTOR3:
|
|
case e.ANIMATIONTYPE_COLOR3:
|
|
s.values = o.value.asArray()
|
|
}
|
|
t.keys.push(s)
|
|
}
|
|
for (var a in t.ranges = [], this._ranges) {
|
|
var c = this._ranges[a];
|
|
if (c) {
|
|
var l = {};
|
|
l.name = a, l.from = c.from, l.to = c.to, t.ranges.push(l)
|
|
}
|
|
}
|
|
return t
|
|
}, Object.defineProperty(e, "ANIMATIONTYPE_FLOAT", {
|
|
get: function() {
|
|
return e._ANIMATIONTYPE_FLOAT
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ANIMATIONTYPE_VECTOR3", {
|
|
get: function() {
|
|
return e._ANIMATIONTYPE_VECTOR3
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ANIMATIONTYPE_VECTOR2", {
|
|
get: function() {
|
|
return e._ANIMATIONTYPE_VECTOR2
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ANIMATIONTYPE_SIZE", {
|
|
get: function() {
|
|
return e._ANIMATIONTYPE_SIZE
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ANIMATIONTYPE_QUATERNION", {
|
|
get: function() {
|
|
return e._ANIMATIONTYPE_QUATERNION
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ANIMATIONTYPE_MATRIX", {
|
|
get: function() {
|
|
return e._ANIMATIONTYPE_MATRIX
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ANIMATIONTYPE_COLOR3", {
|
|
get: function() {
|
|
return e._ANIMATIONTYPE_COLOR3
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ANIMATIONLOOPMODE_RELATIVE", {
|
|
get: function() {
|
|
return e._ANIMATIONLOOPMODE_RELATIVE
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ANIMATIONLOOPMODE_CYCLE", {
|
|
get: function() {
|
|
return e._ANIMATIONLOOPMODE_CYCLE
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ANIMATIONLOOPMODE_CONSTANT", {
|
|
get: function() {
|
|
return e._ANIMATIONLOOPMODE_CONSTANT
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e._UniversalLerp = function(e, t, i) {
|
|
var n = e.constructor;
|
|
return n.Lerp ? n.Lerp(e, t, i) : n.Slerp ? n.Slerp(e, t, i) : e.toFixed ? e * (1 - i) + i * t : t
|
|
}, e.Parse = function(t) {
|
|
var i, n, r = new e(t.name, t.property, t.framePerSecond, t.dataType, t.loopBehavior),
|
|
s = t.dataType,
|
|
a = [];
|
|
for (t.enableBlending && (r.enableBlending = t.enableBlending), t.blendingSpeed && (r.blendingSpeed = t.blendingSpeed), n = 0; n < t.keys.length; n++) {
|
|
var c, l, u = t.keys[n];
|
|
switch (s) {
|
|
case e.ANIMATIONTYPE_FLOAT:
|
|
i = u.values[0], u.values.length >= 1 && (c = u.values[1]), u.values.length >= 2 && (l = u.values[2]);
|
|
break;
|
|
case e.ANIMATIONTYPE_QUATERNION:
|
|
if (i = o.q.FromArray(u.values), u.values.length >= 8) {
|
|
var h = o.q.FromArray(u.values.slice(4, 8));
|
|
h.equals(o.q.Zero()) || (c = h)
|
|
}
|
|
if (u.values.length >= 12) {
|
|
var d = o.q.FromArray(u.values.slice(8, 12));
|
|
d.equals(o.q.Zero()) || (l = d)
|
|
}
|
|
break;
|
|
case e.ANIMATIONTYPE_MATRIX:
|
|
i = o.j.FromArray(u.values);
|
|
break;
|
|
case e.ANIMATIONTYPE_COLOR3:
|
|
i = o.e.FromArray(u.values);
|
|
break;
|
|
case e.ANIMATIONTYPE_VECTOR3:
|
|
default:
|
|
i = o.x.FromArray(u.values)
|
|
}
|
|
var f = {};
|
|
f.frame = u.frame, f.value = i, null != c && (f.inTangent = c), null != l && (f.outTangent = l), a.push(f)
|
|
}
|
|
if (r.setKeys(a), t.ranges)
|
|
for (n = 0; n < t.ranges.length; n++) i = t.ranges[n], r.createRange(i.name, i.from, i.to);
|
|
return r
|
|
}, e.AppendSerializedAnimations = function(e, t) {
|
|
L.a.AppendSerializedAnimations(e, t)
|
|
}, e.AllowMatricesInterpolation = !1, e.AllowMatrixDecomposeForInterpolation = !0, e._ANIMATIONTYPE_FLOAT = 0, e._ANIMATIONTYPE_VECTOR3 = 1, e._ANIMATIONTYPE_QUATERNION = 2, e._ANIMATIONTYPE_MATRIX = 3, e._ANIMATIONTYPE_COLOR3 = 4, e._ANIMATIONTYPE_VECTOR2 = 5, e._ANIMATIONTYPE_SIZE = 6, e._ANIMATIONLOOPMODE_RELATIVE = 0, e._ANIMATIONLOOPMODE_CYCLE = 1, e._ANIMATIONLOOPMODE_CONSTANT = 2, e
|
|
}();
|
|
s.a.RegisteredTypes["BABYLON.Animation"] = B, F.a._AnimationRangeFactory = function(e, t, i) {
|
|
return new w(e, t, i)
|
|
};
|
|
var U = function(e) {
|
|
function t(t, i, n, o, s, a, c, l) {
|
|
void 0 === s && (s = 1e3);
|
|
var u = e.call(this, t, a) || this;
|
|
return u.duration = 1e3, u.onInterpolationDoneObservable = new r.c, u.propertyPath = n, u.value = o, u.duration = s, u.stopOtherAnimations = c, u.onInterpolationDone = l, u._target = u._effectiveTarget = i, u
|
|
}
|
|
return l.d(t, e), t.prototype._prepare = function() {
|
|
this._effectiveTarget = this._getEffectiveTarget(this._effectiveTarget, this.propertyPath), this._property = this._getProperty(this.propertyPath)
|
|
}, t.prototype.execute = function() {
|
|
var e, t = this,
|
|
i = this._actionManager.getScene(),
|
|
n = [{
|
|
frame: 0,
|
|
value: this._effectiveTarget[this._property]
|
|
}, {
|
|
frame: 100,
|
|
value: this.value
|
|
}];
|
|
if ("number" == typeof this.value) e = B.ANIMATIONTYPE_FLOAT;
|
|
else if (this.value instanceof o.e) e = B.ANIMATIONTYPE_COLOR3;
|
|
else if (this.value instanceof o.x) e = B.ANIMATIONTYPE_VECTOR3;
|
|
else if (this.value instanceof o.j) e = B.ANIMATIONTYPE_MATRIX;
|
|
else {
|
|
if (!(this.value instanceof o.q)) return void p.a.Warn("InterpolateValueAction: Unsupported type (" + typeof this.value + ")");
|
|
e = B.ANIMATIONTYPE_QUATERNION
|
|
}
|
|
var r = new B("InterpolateValueAction", this._property, 1e3 / this.duration * 100, e, B.ANIMATIONLOOPMODE_CONSTANT);
|
|
r.setKeys(n), this.stopOtherAnimations && i.stopAnimation(this._effectiveTarget);
|
|
i.beginDirectAnimation(this._effectiveTarget, [r], 0, 100, !1, 1, function() {
|
|
t.onInterpolationDoneObservable.notifyObservers(t), t.onInterpolationDone && t.onInterpolationDone()
|
|
})
|
|
}, t.prototype.serialize = function(t) {
|
|
return e.prototype._serialize.call(this, {
|
|
name: "InterpolateValueAction",
|
|
properties: [a._GetTargetProperty(this._target), {
|
|
name: "propertyPath",
|
|
value: this.propertyPath
|
|
}, {
|
|
name: "value",
|
|
value: a._SerializeValueAsString(this.value)
|
|
}, {
|
|
name: "duration",
|
|
value: a._SerializeValueAsString(this.duration)
|
|
}, {
|
|
name: "stopOtherAnimations",
|
|
value: a._SerializeValueAsString(this.stopOtherAnimations) || !1
|
|
}]
|
|
}, t)
|
|
}, t
|
|
}(a);
|
|
s.a.RegisteredTypes["BABYLON.InterpolateValueAction"] = U;
|
|
var V = Object.freeze(new o.q(0, 0, 0, 0)),
|
|
G = Object.freeze(o.x.Zero()),
|
|
k = Object.freeze(o.w.Zero()),
|
|
z = Object.freeze(o.r.Zero()),
|
|
j = Object.freeze(o.e.Black()),
|
|
H = function() {
|
|
function e(e, t, i, n) {
|
|
var r = this;
|
|
if (this._events = new Array, this._currentFrame = 0, this._originalValue = new Array, this._originalBlendValue = null, this._offsetsCache = {}, this._highLimitsCache = {}, this._stopped = !1, this._blendingFactor = 0, this._currentValue = null, this._currentActiveTarget = null, this._directTarget = null, this._targetPath = "", this._weight = 1, this._ratioOffset = 0, this._previousDelay = 0, this._previousRatio = 0, this._targetIsArray = !1, this._animation = t, this._target = e, this._scene = i, this._host = n, this._activeTargets = [], t._runtimeAnimations.push(this), this._animationState = {
|
|
key: 0,
|
|
repeatCount: 0,
|
|
loopMode: this._getCorrectLoopMode()
|
|
}, this._animation.dataType === B.ANIMATIONTYPE_MATRIX && (this._animationState.workValue = o.j.Zero()), this._keys = this._animation.getKeys(), this._minFrame = this._keys[0].frame, this._maxFrame = this._keys[this._keys.length - 1].frame, this._minValue = this._keys[0].value, this._maxValue = this._keys[this._keys.length - 1].value, 0 !== this._minFrame) {
|
|
var s = {
|
|
frame: 0,
|
|
value: this._minValue
|
|
};
|
|
this._keys.splice(0, 0, s)
|
|
}
|
|
if (this._target instanceof Array) {
|
|
for (var a = 0, c = 0, l = this._target; c < l.length; c++) {
|
|
var u = l[c];
|
|
this._preparePath(u, a), this._getOriginalValues(a), a++
|
|
}
|
|
this._targetIsArray = !0
|
|
} else this._preparePath(this._target), this._getOriginalValues(), this._targetIsArray = !1, this._directTarget = this._activeTargets[0];
|
|
var h = t.getEvents();
|
|
h && h.length > 0 && h.forEach(function(e) {
|
|
r._events.push(e._clone())
|
|
}), this._enableBlending = e && e.animationPropertiesOverride ? e.animationPropertiesOverride.enableBlending : this._animation.enableBlending
|
|
}
|
|
return Object.defineProperty(e.prototype, "currentFrame", {
|
|
get: function() {
|
|
return this._currentFrame
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "weight", {
|
|
get: function() {
|
|
return this._weight
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "currentValue", {
|
|
get: function() {
|
|
return this._currentValue
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "targetPath", {
|
|
get: function() {
|
|
return this._targetPath
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "target", {
|
|
get: function() {
|
|
return this._currentActiveTarget
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._preparePath = function(e, t) {
|
|
void 0 === t && (t = 0);
|
|
var i = this._animation.targetPropertyPath;
|
|
if (i.length > 1) {
|
|
for (var n = e[i[0]], r = 1; r < i.length - 1; r++) n = n[i[r]];
|
|
this._targetPath = i[i.length - 1], this._activeTargets[t] = n
|
|
} else this._targetPath = i[0], this._activeTargets[t] = e
|
|
}, Object.defineProperty(e.prototype, "animation", {
|
|
get: function() {
|
|
return this._animation
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.reset = function(e) {
|
|
if (void 0 === e && (e = !1), e)
|
|
if (this._target instanceof Array)
|
|
for (var t = 0, i = 0, n = this._target; i < n.length; i++) {
|
|
var r = n[i];
|
|
void 0 !== this._originalValue[t] && this._setValue(r, this._activeTargets[t], this._originalValue[t], -1, t), t++
|
|
} else void 0 !== this._originalValue[0] && this._setValue(this._target, this._directTarget, this._originalValue[0], -1, 0);
|
|
this._offsetsCache = {}, this._highLimitsCache = {}, this._currentFrame = 0, this._blendingFactor = 0;
|
|
for (t = 0; t < this._events.length; t++) this._events[t].isDone = !1
|
|
}, e.prototype.isStopped = function() {
|
|
return this._stopped
|
|
}, e.prototype.dispose = function() {
|
|
var e = this._animation.runtimeAnimations.indexOf(this);
|
|
e > -1 && this._animation.runtimeAnimations.splice(e, 1)
|
|
}, e.prototype.setValue = function(e, t) {
|
|
if (this._targetIsArray)
|
|
for (var i = 0; i < this._target.length; i++) {
|
|
var n = this._target[i];
|
|
this._setValue(n, this._activeTargets[i], e, t, i)
|
|
} else this._setValue(this._target, this._directTarget, e, t, 0)
|
|
}, e.prototype._getOriginalValues = function(e) {
|
|
var t;
|
|
void 0 === e && (e = 0);
|
|
var i = this._activeTargets[e];
|
|
(t = i.getRestPose && "_matrix" === this._targetPath ? i.getRestPose() : i[this._targetPath]) && t.clone ? this._originalValue[e] = t.clone() : this._originalValue[e] = t
|
|
}, e.prototype._setValue = function(e, t, i, n, r) {
|
|
if (this._currentActiveTarget = t, this._weight = n, this._enableBlending && this._blendingFactor <= 1) {
|
|
if (!this._originalBlendValue) {
|
|
var s = t[this._targetPath];
|
|
s.clone ? this._originalBlendValue = s.clone() : this._originalBlendValue = s
|
|
}
|
|
this._originalBlendValue.m ? B.AllowMatrixDecomposeForInterpolation ? this._currentValue ? o.j.DecomposeLerpToRef(this._originalBlendValue, i, this._blendingFactor, this._currentValue) : this._currentValue = o.j.DecomposeLerp(this._originalBlendValue, i, this._blendingFactor) : this._currentValue ? o.j.LerpToRef(this._originalBlendValue, i, this._blendingFactor, this._currentValue) : this._currentValue = o.j.Lerp(this._originalBlendValue, i, this._blendingFactor) : this._currentValue = B._UniversalLerp(this._originalBlendValue, i, this._blendingFactor);
|
|
var a = e && e.animationPropertiesOverride ? e.animationPropertiesOverride.blendingSpeed : this._animation.blendingSpeed;
|
|
this._blendingFactor += a
|
|
} else this._currentValue = i; - 1 !== n ? this._scene._registerTargetForLateAnimationBinding(this, this._originalValue[r]) : t[this._targetPath] = this._currentValue, e.markAsDirty && e.markAsDirty(this._animation.targetProperty)
|
|
}, e.prototype._getCorrectLoopMode = function() {
|
|
return this._target && this._target.animationPropertiesOverride ? this._target.animationPropertiesOverride.loopMode : this._animation.loopMode
|
|
}, e.prototype.goToFrame = function(e) {
|
|
var t = this._animation.getKeys();
|
|
e < t[0].frame ? e = t[0].frame : e > t[t.length - 1].frame && (e = t[t.length - 1].frame), this._currentFrame = e;
|
|
var i = this._animation._interpolate(e, this._animationState);
|
|
this.setValue(i, -1)
|
|
}, e.prototype._prepareForSpeedRatioChange = function(e) {
|
|
var t = this._previousDelay * (this._animation.framePerSecond * e) / 1e3;
|
|
this._ratioOffset = this._previousRatio - t
|
|
}, e.prototype.animate = function(e, t, i, n, r, o) {
|
|
void 0 === o && (o = -1);
|
|
var s = this._animation,
|
|
a = s.targetPropertyPath;
|
|
if (!a || a.length < 1) return this._stopped = !0, !1;
|
|
var c = !0;
|
|
(t < this._minFrame || t > this._maxFrame) && (t = this._minFrame), (i < this._minFrame || i > this._maxFrame) && (i = this._maxFrame);
|
|
var l, u, h = i - t,
|
|
d = e * (s.framePerSecond * r) / 1e3 + this._ratioOffset,
|
|
f = 0;
|
|
if (this._previousDelay = e, this._previousRatio = d, !n && i >= t && d >= h) c = !1, f = s._getKeyValue(this._maxValue);
|
|
else if (!n && t >= i && d <= h) c = !1, f = s._getKeyValue(this._minValue);
|
|
else if (this._animationState.loopMode !== B.ANIMATIONLOOPMODE_CYCLE) {
|
|
var p = i.toString() + t.toString();
|
|
if (!this._offsetsCache[p]) {
|
|
this._animationState.repeatCount = 0, this._animationState.loopMode = B.ANIMATIONLOOPMODE_CYCLE;
|
|
var _ = s._interpolate(t, this._animationState),
|
|
g = s._interpolate(i, this._animationState);
|
|
switch (this._animationState.loopMode = this._getCorrectLoopMode(), s.dataType) {
|
|
case B.ANIMATIONTYPE_FLOAT:
|
|
this._offsetsCache[p] = g - _;
|
|
break;
|
|
case B.ANIMATIONTYPE_QUATERNION:
|
|
this._offsetsCache[p] = g.subtract(_);
|
|
break;
|
|
case B.ANIMATIONTYPE_VECTOR3:
|
|
this._offsetsCache[p] = g.subtract(_);
|
|
case B.ANIMATIONTYPE_VECTOR2:
|
|
this._offsetsCache[p] = g.subtract(_);
|
|
case B.ANIMATIONTYPE_SIZE:
|
|
this._offsetsCache[p] = g.subtract(_);
|
|
case B.ANIMATIONTYPE_COLOR3:
|
|
this._offsetsCache[p] = g.subtract(_)
|
|
}
|
|
this._highLimitsCache[p] = g
|
|
}
|
|
f = this._highLimitsCache[p], l = this._offsetsCache[p]
|
|
}
|
|
if (void 0 === l) switch (s.dataType) {
|
|
case B.ANIMATIONTYPE_FLOAT:
|
|
l = 0;
|
|
break;
|
|
case B.ANIMATIONTYPE_QUATERNION:
|
|
l = V;
|
|
break;
|
|
case B.ANIMATIONTYPE_VECTOR3:
|
|
l = G;
|
|
break;
|
|
case B.ANIMATIONTYPE_VECTOR2:
|
|
l = k;
|
|
break;
|
|
case B.ANIMATIONTYPE_SIZE:
|
|
l = z;
|
|
break;
|
|
case B.ANIMATIONTYPE_COLOR3:
|
|
l = j
|
|
}
|
|
if (this._host && this._host.syncRoot) {
|
|
var m = this._host.syncRoot;
|
|
u = t + (i - t) * ((m.masterFrame - m.fromFrame) / (m.toFrame - m.fromFrame))
|
|
} else u = c && 0 !== h ? t + d % h : i;
|
|
var v = this._events;
|
|
if ((h > 0 && this.currentFrame > u || h < 0 && this.currentFrame < u) && (this._onLoop(), v.length))
|
|
for (var y = 0; y < v.length; y++) v[y].onlyOnce || (v[y].isDone = !1);
|
|
this._currentFrame = u, this._animationState.repeatCount = 0 === h ? 0 : d / h >> 0, this._animationState.highLimitValue = f, this._animationState.offsetValue = l;
|
|
var b = s._interpolate(u, this._animationState);
|
|
if (this.setValue(b, o), v.length)
|
|
for (y = 0; y < v.length; y++)
|
|
if (h > 0 && u >= v[y].frame && v[y].frame >= t || h < 0 && u <= v[y].frame && v[y].frame <= t) {
|
|
var T = v[y];
|
|
T.isDone || (T.onlyOnce && (v.splice(y, 1), y--), T.isDone = !0, T.action(u))
|
|
} return c || (this._stopped = !0), c
|
|
}, e
|
|
}(),
|
|
W = i(16),
|
|
X = i(47),
|
|
Y = i(34),
|
|
K = function(e) {
|
|
function t(t, i, n, r, s, a, c) {
|
|
void 0 === n && (n = null), void 0 === r && (r = null), void 0 === s && (s = null), void 0 === a && (a = null), void 0 === c && (c = null);
|
|
var l = e.call(this, t, i.getScene(), !1) || this;
|
|
return l.name = t, l.children = new Array, l.animations = new Array, l._index = null, l._absoluteTransform = new o.j, l._invertedAbsoluteTransform = new o.j, l._scalingDeterminant = 1, l._worldTransform = new o.j, l._needToDecompose = !0, l._needToCompose = !1, l._linkedTransformNode = null, l._waitingTransformNodeId = null, l._skeleton = i, l._localMatrix = r ? r.clone() : o.j.Identity(), l._restPose = s || l._localMatrix.clone(), l._baseMatrix = a || l._localMatrix.clone(), l._index = c, i.bones.push(l), l.setParent(n, !1), (a || r) && l._updateDifferenceMatrix(), l
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "_matrix", {
|
|
get: function() {
|
|
return this._compose(), this._localMatrix
|
|
},
|
|
set: function(e) {
|
|
this._localMatrix.copyFrom(e), this._needToDecompose = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "Bone"
|
|
}, t.prototype.getSkeleton = function() {
|
|
return this._skeleton
|
|
}, t.prototype.getParent = function() {
|
|
return this._parent
|
|
}, t.prototype.getChildren = function() {
|
|
return this.children
|
|
}, t.prototype.setParent = function(e, t) {
|
|
if (void 0 === t && (t = !0), this._parent !== e) {
|
|
if (this._parent) {
|
|
var i = this._parent.children.indexOf(this); - 1 !== i && this._parent.children.splice(i, 1)
|
|
}
|
|
this._parent = e, this._parent && this._parent.children.push(this), t && this._updateDifferenceMatrix(), this.markAsDirty()
|
|
}
|
|
}, t.prototype.getLocalMatrix = function() {
|
|
return this._compose(), this._localMatrix
|
|
}, t.prototype.getBaseMatrix = function() {
|
|
return this._baseMatrix
|
|
}, t.prototype.getRestPose = function() {
|
|
return this._restPose
|
|
}, t.prototype.getWorldMatrix = function() {
|
|
return this._worldTransform
|
|
}, t.prototype.returnToRest = function() {
|
|
this.updateMatrix(this._restPose.clone())
|
|
}, t.prototype.getInvertedAbsoluteTransform = function() {
|
|
return this._invertedAbsoluteTransform
|
|
}, t.prototype.getAbsoluteTransform = function() {
|
|
return this._absoluteTransform
|
|
}, t.prototype.linkTransformNode = function(e) {
|
|
this._linkedTransformNode && this._skeleton._numBonesWithLinkedTransformNode--, this._linkedTransformNode = e, this._linkedTransformNode && this._skeleton._numBonesWithLinkedTransformNode++
|
|
}, Object.defineProperty(t.prototype, "position", {
|
|
get: function() {
|
|
return this._decompose(), this._localPosition
|
|
},
|
|
set: function(e) {
|
|
this._decompose(), this._localPosition.copyFrom(e), this._markAsDirtyAndCompose()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rotation", {
|
|
get: function() {
|
|
return this.getRotation()
|
|
},
|
|
set: function(e) {
|
|
this.setRotation(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rotationQuaternion", {
|
|
get: function() {
|
|
return this._decompose(), this._localRotation
|
|
},
|
|
set: function(e) {
|
|
this.setRotationQuaternion(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "scaling", {
|
|
get: function() {
|
|
return this.getScale()
|
|
},
|
|
set: function(e) {
|
|
this.setScale(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "animationPropertiesOverride", {
|
|
get: function() {
|
|
return this._skeleton.animationPropertiesOverride
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._decompose = function() {
|
|
this._needToDecompose && (this._needToDecompose = !1, this._localScaling || (this._localScaling = o.x.Zero(), this._localRotation = o.q.Zero(), this._localPosition = o.x.Zero()), this._localMatrix.decompose(this._localScaling, this._localRotation, this._localPosition))
|
|
}, t.prototype._compose = function() {
|
|
this._needToCompose && (this._needToCompose = !1, o.j.ComposeToRef(this._localScaling, this._localRotation, this._localPosition, this._localMatrix))
|
|
}, t.prototype.updateMatrix = function(e, t, i) {
|
|
void 0 === t && (t = !0), void 0 === i && (i = !0), this._baseMatrix.copyFrom(e), t && this._updateDifferenceMatrix(), i ? (this._localMatrix.copyFrom(e), this._markAsDirtyAndDecompose()) : this.markAsDirty()
|
|
}, t.prototype._updateDifferenceMatrix = function(e, t) {
|
|
if (void 0 === t && (t = !0), e || (e = this._baseMatrix), this._parent ? e.multiplyToRef(this._parent._absoluteTransform, this._absoluteTransform) : this._absoluteTransform.copyFrom(e), this._absoluteTransform.invertToRef(this._invertedAbsoluteTransform), t)
|
|
for (var i = 0; i < this.children.length; i++) this.children[i]._updateDifferenceMatrix();
|
|
this._scalingDeterminant = this._absoluteTransform.determinant() < 0 ? -1 : 1
|
|
}, t.prototype.markAsDirty = function() {
|
|
this._currentRenderId++, this._childUpdateId++, this._skeleton._markAsDirty()
|
|
}, t.prototype._markAsDirtyAndCompose = function() {
|
|
this.markAsDirty(), this._needToCompose = !0
|
|
}, t.prototype._markAsDirtyAndDecompose = function() {
|
|
this.markAsDirty(), this._needToDecompose = !0
|
|
}, t.prototype.translate = function(e, i, n) {
|
|
void 0 === i && (i = o.s.LOCAL);
|
|
var r = this.getLocalMatrix();
|
|
if (i == o.s.LOCAL) r.addAtIndex(12, e.x), r.addAtIndex(13, e.y), r.addAtIndex(14, e.z);
|
|
else {
|
|
var s = null;
|
|
n && (s = n.getWorldMatrix()), this._skeleton.computeAbsoluteTransforms();
|
|
var a = t._tmpMats[0],
|
|
c = t._tmpVecs[0];
|
|
this._parent && (n && s ? (a.copyFrom(this._parent.getAbsoluteTransform()), a.multiplyToRef(s, a)) : a.copyFrom(this._parent.getAbsoluteTransform())), a.setTranslationFromFloats(0, 0, 0), a.invert(), o.x.TransformCoordinatesToRef(e, a, c), r.addAtIndex(12, c.x), r.addAtIndex(13, c.y), r.addAtIndex(14, c.z)
|
|
}
|
|
this._markAsDirtyAndDecompose()
|
|
}, t.prototype.setPosition = function(e, i, n) {
|
|
void 0 === i && (i = o.s.LOCAL);
|
|
var r = this.getLocalMatrix();
|
|
if (i == o.s.LOCAL) r.setTranslationFromFloats(e.x, e.y, e.z);
|
|
else {
|
|
var s = null;
|
|
n && (s = n.getWorldMatrix()), this._skeleton.computeAbsoluteTransforms();
|
|
var a = t._tmpMats[0],
|
|
c = t._tmpVecs[0];
|
|
this._parent && (n && s ? (a.copyFrom(this._parent.getAbsoluteTransform()), a.multiplyToRef(s, a)) : a.copyFrom(this._parent.getAbsoluteTransform())), a.invert(), o.x.TransformCoordinatesToRef(e, a, c), r.setTranslationFromFloats(c.x, c.y, c.z)
|
|
}
|
|
this._markAsDirtyAndDecompose()
|
|
}, t.prototype.setAbsolutePosition = function(e, t) {
|
|
this.setPosition(e, o.s.WORLD, t)
|
|
}, t.prototype.scale = function(e, i, n, r) {
|
|
void 0 === r && (r = !1);
|
|
var s = this.getLocalMatrix(),
|
|
a = t._tmpMats[0];
|
|
o.j.ScalingToRef(e, i, n, a), a.multiplyToRef(s, s), a.invert();
|
|
for (var c = 0, l = this.children; c < l.length; c++) {
|
|
var u = (f = l[c]).getLocalMatrix();
|
|
u.multiplyToRef(a, u), u.multiplyAtIndex(12, e), u.multiplyAtIndex(13, i), u.multiplyAtIndex(14, n), f._markAsDirtyAndDecompose()
|
|
}
|
|
if (this._markAsDirtyAndDecompose(), r)
|
|
for (var h = 0, d = this.children; h < d.length; h++) {
|
|
var f;
|
|
(f = d[h]).scale(e, i, n, r)
|
|
}
|
|
}, t.prototype.setScale = function(e) {
|
|
this._decompose(), this._localScaling.copyFrom(e), this._markAsDirtyAndCompose()
|
|
}, t.prototype.getScale = function() {
|
|
return this._decompose(), this._localScaling
|
|
}, t.prototype.getScaleToRef = function(e) {
|
|
this._decompose(), e.copyFrom(this._localScaling)
|
|
}, t.prototype.setYawPitchRoll = function(e, i, n, r, s) {
|
|
if (void 0 === r && (r = o.s.LOCAL), r === o.s.LOCAL) {
|
|
var a = t._tmpQuat;
|
|
return o.q.RotationYawPitchRollToRef(e, i, n, a), void this.setRotationQuaternion(a, r, s)
|
|
}
|
|
var c = t._tmpMats[0];
|
|
if (this._getNegativeRotationToRef(c, s)) {
|
|
var l = t._tmpMats[1];
|
|
o.j.RotationYawPitchRollToRef(e, i, n, l), c.multiplyToRef(l, l), this._rotateWithMatrix(l, r, s)
|
|
}
|
|
}, t.prototype.rotate = function(e, i, n, r) {
|
|
void 0 === n && (n = o.s.LOCAL);
|
|
var s = t._tmpMats[0];
|
|
s.setTranslationFromFloats(0, 0, 0), o.j.RotationAxisToRef(e, i, s), this._rotateWithMatrix(s, n, r)
|
|
}, t.prototype.setAxisAngle = function(e, i, n, r) {
|
|
if (void 0 === n && (n = o.s.LOCAL), n === o.s.LOCAL) {
|
|
var s = t._tmpQuat;
|
|
return o.q.RotationAxisToRef(e, i, s), void this.setRotationQuaternion(s, n, r)
|
|
}
|
|
var a = t._tmpMats[0];
|
|
if (this._getNegativeRotationToRef(a, r)) {
|
|
var c = t._tmpMats[1];
|
|
o.j.RotationAxisToRef(e, i, c), a.multiplyToRef(c, c), this._rotateWithMatrix(c, n, r)
|
|
}
|
|
}, t.prototype.setRotation = function(e, t, i) {
|
|
void 0 === t && (t = o.s.LOCAL), this.setYawPitchRoll(e.y, e.x, e.z, t, i)
|
|
}, t.prototype.setRotationQuaternion = function(e, i, n) {
|
|
if (void 0 === i && (i = o.s.LOCAL), i === o.s.LOCAL) return this._decompose(), this._localRotation.copyFrom(e), void this._markAsDirtyAndCompose();
|
|
var r = t._tmpMats[0];
|
|
if (this._getNegativeRotationToRef(r, n)) {
|
|
var s = t._tmpMats[1];
|
|
o.j.FromQuaternionToRef(e, s), r.multiplyToRef(s, s), this._rotateWithMatrix(s, i, n)
|
|
}
|
|
}, t.prototype.setRotationMatrix = function(e, i, n) {
|
|
if (void 0 === i && (i = o.s.LOCAL), i === o.s.LOCAL) {
|
|
var r = t._tmpQuat;
|
|
return o.q.FromRotationMatrixToRef(e, r), void this.setRotationQuaternion(r, i, n)
|
|
}
|
|
var s = t._tmpMats[0];
|
|
if (this._getNegativeRotationToRef(s, n)) {
|
|
var a = t._tmpMats[1];
|
|
a.copyFrom(e), s.multiplyToRef(e, a), this._rotateWithMatrix(a, i, n)
|
|
}
|
|
}, t.prototype._rotateWithMatrix = function(e, i, n) {
|
|
void 0 === i && (i = o.s.LOCAL);
|
|
var r = this.getLocalMatrix(),
|
|
s = r.m[12],
|
|
a = r.m[13],
|
|
c = r.m[14],
|
|
l = this.getParent(),
|
|
u = t._tmpMats[3],
|
|
h = t._tmpMats[4];
|
|
l && i == o.s.WORLD ? (n ? (u.copyFrom(n.getWorldMatrix()), l.getAbsoluteTransform().multiplyToRef(u, u)) : u.copyFrom(l.getAbsoluteTransform()), h.copyFrom(u), h.invert(), r.multiplyToRef(u, r), r.multiplyToRef(e, r), r.multiplyToRef(h, r)) : i == o.s.WORLD && n ? (u.copyFrom(n.getWorldMatrix()), h.copyFrom(u), h.invert(), r.multiplyToRef(u, r), r.multiplyToRef(e, r), r.multiplyToRef(h, r)) : r.multiplyToRef(e, r), r.setTranslationFromFloats(s, a, c), this.computeAbsoluteTransforms(), this._markAsDirtyAndDecompose()
|
|
}, t.prototype._getNegativeRotationToRef = function(e, i) {
|
|
var n = t._tmpMats[2];
|
|
return e.copyFrom(this.getAbsoluteTransform()), i && (e.multiplyToRef(i.getWorldMatrix(), e), o.j.ScalingToRef(i.scaling.x, i.scaling.y, i.scaling.z, n)), e.invert(), !isNaN(e.m[0]) && (n.multiplyAtIndex(0, this._scalingDeterminant), e.multiplyToRef(n, e), !0)
|
|
}, t.prototype.getPosition = function(e, t) {
|
|
void 0 === e && (e = o.s.LOCAL), void 0 === t && (t = null);
|
|
var i = o.x.Zero();
|
|
return this.getPositionToRef(e, t, i), i
|
|
}, t.prototype.getPositionToRef = function(e, i, n) {
|
|
if (void 0 === e && (e = o.s.LOCAL), e == o.s.LOCAL) {
|
|
var r = this.getLocalMatrix();
|
|
n.x = r.m[12], n.y = r.m[13], n.z = r.m[14]
|
|
} else {
|
|
var s = null;
|
|
i && (s = i.getWorldMatrix()), this._skeleton.computeAbsoluteTransforms();
|
|
var a = t._tmpMats[0];
|
|
i && s ? (a.copyFrom(this.getAbsoluteTransform()), a.multiplyToRef(s, a)) : a = this.getAbsoluteTransform(), n.x = a.m[12], n.y = a.m[13], n.z = a.m[14]
|
|
}
|
|
}, t.prototype.getAbsolutePosition = function(e) {
|
|
void 0 === e && (e = null);
|
|
var t = o.x.Zero();
|
|
return this.getPositionToRef(o.s.WORLD, e, t), t
|
|
}, t.prototype.getAbsolutePositionToRef = function(e, t) {
|
|
this.getPositionToRef(o.s.WORLD, e, t)
|
|
}, t.prototype.computeAbsoluteTransforms = function() {
|
|
if (this._compose(), this._parent) this._localMatrix.multiplyToRef(this._parent._absoluteTransform, this._absoluteTransform);
|
|
else {
|
|
this._absoluteTransform.copyFrom(this._localMatrix);
|
|
var e = this._skeleton.getPoseMatrix();
|
|
e && this._absoluteTransform.multiplyToRef(e, this._absoluteTransform)
|
|
}
|
|
for (var t = this.children, i = t.length, n = 0; n < i; n++) t[n].computeAbsoluteTransforms()
|
|
}, t.prototype.getDirection = function(e, t) {
|
|
void 0 === t && (t = null);
|
|
var i = o.x.Zero();
|
|
return this.getDirectionToRef(e, t, i), i
|
|
}, t.prototype.getDirectionToRef = function(e, i, n) {
|
|
void 0 === i && (i = null);
|
|
var r = null;
|
|
i && (r = i.getWorldMatrix()), this._skeleton.computeAbsoluteTransforms();
|
|
var s = t._tmpMats[0];
|
|
s.copyFrom(this.getAbsoluteTransform()), i && r && s.multiplyToRef(r, s), o.x.TransformNormalToRef(e, s, n), n.normalize()
|
|
}, t.prototype.getRotation = function(e, t) {
|
|
void 0 === e && (e = o.s.LOCAL), void 0 === t && (t = null);
|
|
var i = o.x.Zero();
|
|
return this.getRotationToRef(e, t, i), i
|
|
}, t.prototype.getRotationToRef = function(e, i, n) {
|
|
void 0 === e && (e = o.s.LOCAL), void 0 === i && (i = null);
|
|
var r = t._tmpQuat;
|
|
this.getRotationQuaternionToRef(e, i, r), r.toEulerAnglesToRef(n)
|
|
}, t.prototype.getRotationQuaternion = function(e, t) {
|
|
void 0 === e && (e = o.s.LOCAL), void 0 === t && (t = null);
|
|
var i = o.q.Identity();
|
|
return this.getRotationQuaternionToRef(e, t, i), i
|
|
}, t.prototype.getRotationQuaternionToRef = function(e, i, n) {
|
|
if (void 0 === e && (e = o.s.LOCAL), void 0 === i && (i = null), e == o.s.LOCAL) this._decompose(), n.copyFrom(this._localRotation);
|
|
else {
|
|
var r = t._tmpMats[0],
|
|
s = this.getAbsoluteTransform();
|
|
i ? s.multiplyToRef(i.getWorldMatrix(), r) : r.copyFrom(s), r.multiplyAtIndex(0, this._scalingDeterminant), r.multiplyAtIndex(1, this._scalingDeterminant), r.multiplyAtIndex(2, this._scalingDeterminant), r.decompose(void 0, n, void 0)
|
|
}
|
|
}, t.prototype.getRotationMatrix = function(e, t) {
|
|
void 0 === e && (e = o.s.LOCAL);
|
|
var i = o.j.Identity();
|
|
return this.getRotationMatrixToRef(e, t, i), i
|
|
}, t.prototype.getRotationMatrixToRef = function(e, i, n) {
|
|
if (void 0 === e && (e = o.s.LOCAL), e == o.s.LOCAL) this.getLocalMatrix().getRotationMatrixToRef(n);
|
|
else {
|
|
var r = t._tmpMats[0],
|
|
s = this.getAbsoluteTransform();
|
|
i ? s.multiplyToRef(i.getWorldMatrix(), r) : r.copyFrom(s), r.multiplyAtIndex(0, this._scalingDeterminant), r.multiplyAtIndex(1, this._scalingDeterminant), r.multiplyAtIndex(2, this._scalingDeterminant), r.getRotationMatrixToRef(n)
|
|
}
|
|
}, t.prototype.getAbsolutePositionFromLocal = function(e, t) {
|
|
void 0 === t && (t = null);
|
|
var i = o.x.Zero();
|
|
return this.getAbsolutePositionFromLocalToRef(e, t, i), i
|
|
}, t.prototype.getAbsolutePositionFromLocalToRef = function(e, i, n) {
|
|
void 0 === i && (i = null);
|
|
var r = null;
|
|
i && (r = i.getWorldMatrix()), this._skeleton.computeAbsoluteTransforms();
|
|
var s = t._tmpMats[0];
|
|
i && r ? (s.copyFrom(this.getAbsoluteTransform()), s.multiplyToRef(r, s)) : s = this.getAbsoluteTransform(), o.x.TransformCoordinatesToRef(e, s, n)
|
|
}, t.prototype.getLocalPositionFromAbsolute = function(e, t) {
|
|
void 0 === t && (t = null);
|
|
var i = o.x.Zero();
|
|
return this.getLocalPositionFromAbsoluteToRef(e, t, i), i
|
|
}, t.prototype.getLocalPositionFromAbsoluteToRef = function(e, i, n) {
|
|
void 0 === i && (i = null);
|
|
var r = null;
|
|
i && (r = i.getWorldMatrix()), this._skeleton.computeAbsoluteTransforms();
|
|
var s = t._tmpMats[0];
|
|
s.copyFrom(this.getAbsoluteTransform()), i && r && s.multiplyToRef(r, s), s.invert(), o.x.TransformCoordinatesToRef(e, s, n)
|
|
}, t._tmpVecs = Y.a.BuildArray(2, o.x.Zero), t._tmpQuat = o.q.Identity(), t._tmpMats = Y.a.BuildArray(5, o.j.Identity), t
|
|
}(F.a),
|
|
Q = function() {
|
|
function e(e, t, i, n, o, s, a, c, l) {
|
|
void 0 === i && (i = 0), void 0 === n && (n = 100), void 0 === o && (o = !1), void 0 === s && (s = 1), this.target = t, this.fromFrame = i, this.toFrame = n, this.loopAnimation = o, this.onAnimationEnd = a, this.onAnimationLoop = l, this._localDelayOffset = null, this._pausedDelay = null, this._runtimeAnimations = new Array, this._paused = !1, this._speedRatio = 1, this._weight = -1, this._syncRoot = null, this.disposeOnEnd = !0, this.animationStarted = !1, this.onAnimationEndObservable = new r.c, this.onAnimationLoopObservable = new r.c, this._scene = e, c && this.appendAnimations(t, c), this._speedRatio = s, e._activeAnimatables.push(this)
|
|
}
|
|
return Object.defineProperty(e.prototype, "syncRoot", {
|
|
get: function() {
|
|
return this._syncRoot
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "masterFrame", {
|
|
get: function() {
|
|
return 0 === this._runtimeAnimations.length ? 0 : this._runtimeAnimations[0].currentFrame
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "weight", {
|
|
get: function() {
|
|
return this._weight
|
|
},
|
|
set: function(e) {
|
|
this._weight = -1 !== e ? Math.min(Math.max(e, 0), 1) : -1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "speedRatio", {
|
|
get: function() {
|
|
return this._speedRatio
|
|
},
|
|
set: function(e) {
|
|
for (var t = 0; t < this._runtimeAnimations.length; t++) {
|
|
this._runtimeAnimations[t]._prepareForSpeedRatioChange(e)
|
|
}
|
|
this._speedRatio = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.syncWith = function(e) {
|
|
if (this._syncRoot = e, e) {
|
|
var t = this._scene._activeAnimatables.indexOf(this);
|
|
t > -1 && (this._scene._activeAnimatables.splice(t, 1), this._scene._activeAnimatables.push(this))
|
|
}
|
|
return this
|
|
}, e.prototype.getAnimations = function() {
|
|
return this._runtimeAnimations
|
|
}, e.prototype.appendAnimations = function(e, t) {
|
|
for (var i = this, n = 0; n < t.length; n++) {
|
|
var r = t[n],
|
|
o = new H(e, r, this._scene, this);
|
|
o._onLoop = function() {
|
|
i.onAnimationLoopObservable.notifyObservers(i), i.onAnimationLoop && i.onAnimationLoop()
|
|
}, this._runtimeAnimations.push(o)
|
|
}
|
|
}, e.prototype.getAnimationByTargetProperty = function(e) {
|
|
for (var t = this._runtimeAnimations, i = 0; i < t.length; i++)
|
|
if (t[i].animation.targetProperty === e) return t[i].animation;
|
|
return null
|
|
}, e.prototype.getRuntimeAnimationByTargetProperty = function(e) {
|
|
for (var t = this._runtimeAnimations, i = 0; i < t.length; i++)
|
|
if (t[i].animation.targetProperty === e) return t[i];
|
|
return null
|
|
}, e.prototype.reset = function() {
|
|
for (var e = this._runtimeAnimations, t = 0; t < e.length; t++) e[t].reset(!0);
|
|
this._localDelayOffset = null, this._pausedDelay = null
|
|
}, e.prototype.enableBlending = function(e) {
|
|
for (var t = this._runtimeAnimations, i = 0; i < t.length; i++) t[i].animation.enableBlending = !0, t[i].animation.blendingSpeed = e
|
|
}, e.prototype.disableBlending = function() {
|
|
for (var e = this._runtimeAnimations, t = 0; t < e.length; t++) e[t].animation.enableBlending = !1
|
|
}, e.prototype.goToFrame = function(e) {
|
|
var t = this._runtimeAnimations;
|
|
if (t[0]) {
|
|
var i = t[0].animation.framePerSecond,
|
|
n = e - t[0].currentFrame,
|
|
r = 0 !== this.speedRatio ? 1e3 * n / (i * this.speedRatio) : 0;
|
|
null === this._localDelayOffset && (this._localDelayOffset = 0), this._localDelayOffset -= r
|
|
}
|
|
for (var o = 0; o < t.length; o++) t[o].goToFrame(e)
|
|
}, e.prototype.pause = function() {
|
|
this._paused || (this._paused = !0)
|
|
}, e.prototype.restart = function() {
|
|
this._paused = !1
|
|
}, e.prototype._raiseOnAnimationEnd = function() {
|
|
this.onAnimationEnd && this.onAnimationEnd(), this.onAnimationEndObservable.notifyObservers(this)
|
|
}, e.prototype.stop = function(e, t) {
|
|
if (e || t) {
|
|
var i = this._scene._activeAnimatables.indexOf(this);
|
|
if (i > -1) {
|
|
for (var n = (o = this._runtimeAnimations).length - 1; n >= 0; n--) {
|
|
var r = o[n];
|
|
e && r.animation.name != e || (t && !t(r.target) || (r.dispose(), o.splice(n, 1)))
|
|
}
|
|
0 == o.length && (this._scene._activeAnimatables.splice(i, 1), this._raiseOnAnimationEnd())
|
|
}
|
|
} else {
|
|
if ((n = this._scene._activeAnimatables.indexOf(this)) > -1) {
|
|
this._scene._activeAnimatables.splice(n, 1);
|
|
var o = this._runtimeAnimations;
|
|
for (n = 0; n < o.length; n++) o[n].dispose();
|
|
this._raiseOnAnimationEnd()
|
|
}
|
|
}
|
|
}, e.prototype.waitAsync = function() {
|
|
var e = this;
|
|
return new Promise(function(t, i) {
|
|
e.onAnimationEndObservable.add(function() {
|
|
t(e)
|
|
}, void 0, void 0, e, !0)
|
|
})
|
|
}, e.prototype._animate = function(e) {
|
|
if (this._paused) return this.animationStarted = !1, null === this._pausedDelay && (this._pausedDelay = e), !0;
|
|
if (null === this._localDelayOffset ? (this._localDelayOffset = e, this._pausedDelay = null) : null !== this._pausedDelay && (this._localDelayOffset += e - this._pausedDelay, this._pausedDelay = null), 0 === this._weight) return !0;
|
|
var t, i = !1,
|
|
n = this._runtimeAnimations;
|
|
for (t = 0; t < n.length; t++) {
|
|
var r = n[t].animate(e - this._localDelayOffset, this.fromFrame, this.toFrame, this.loopAnimation, this._speedRatio, this._weight);
|
|
i = i || r
|
|
}
|
|
if (this.animationStarted = i, !i) {
|
|
if (this.disposeOnEnd)
|
|
for (t = this._scene._activeAnimatables.indexOf(this), this._scene._activeAnimatables.splice(t, 1), t = 0; t < n.length; t++) n[t].dispose();
|
|
this._raiseOnAnimationEnd(), this.disposeOnEnd && (this.onAnimationEnd = null, this.onAnimationLoop = null, this.onAnimationLoopObservable.clear(), this.onAnimationEndObservable.clear())
|
|
}
|
|
return i
|
|
}, e
|
|
}();
|
|
W.a.prototype._animate = function() {
|
|
if (this.animationsEnabled) {
|
|
var e = this._activeAnimatables;
|
|
if (0 !== e.length) {
|
|
var t = X.a.Now;
|
|
if (!this._animationTimeLast) {
|
|
if (this._pendingData.length > 0) return;
|
|
this._animationTimeLast = t
|
|
}
|
|
var i = this.useConstantAnimationDeltaTime ? 16 : (t - this._animationTimeLast) * this.animationTimeScale;
|
|
this._animationTime += i;
|
|
var n = this._animationTime;
|
|
this._animationTimeLast = t;
|
|
for (var r = 0; r < e.length; r++) e[r]._animate(n);
|
|
this._processLateAnimationBindings()
|
|
}
|
|
}
|
|
}, W.a.prototype.beginWeightedAnimation = function(e, t, i, n, r, o, s, a, c, l) {
|
|
void 0 === n && (n = 1), void 0 === o && (o = 1);
|
|
var u = this.beginAnimation(e, t, i, r, o, s, a, !1, c, l);
|
|
return u.weight = n, u
|
|
}, W.a.prototype.beginAnimation = function(e, t, i, n, r, o, s, a, c, l) {
|
|
void 0 === r && (r = 1), void 0 === a && (a = !0), t > i && r > 0 && (r *= -1), a && this.stopAnimation(e, void 0, c), s || (s = new Q(this, e, t, i, n, r, o, void 0, l));
|
|
var u = !c || c(e);
|
|
if (e.animations && u && s.appendAnimations(e, e.animations), e.getAnimatables)
|
|
for (var h = e.getAnimatables(), d = 0; d < h.length; d++) this.beginAnimation(h[d], t, i, n, r, o, s, a, c, l);
|
|
return s.reset(), s
|
|
}, W.a.prototype.beginHierarchyAnimation = function(e, t, i, n, r, o, s, a, c, l, u) {
|
|
void 0 === o && (o = 1), void 0 === c && (c = !0);
|
|
var h = e.getDescendants(t),
|
|
d = [];
|
|
d.push(this.beginAnimation(e, i, n, r, o, s, a, c, l));
|
|
for (var f = 0, p = h; f < p.length; f++) {
|
|
var _ = p[f];
|
|
d.push(this.beginAnimation(_, i, n, r, o, s, a, c, l))
|
|
}
|
|
return d
|
|
}, W.a.prototype.beginDirectAnimation = function(e, t, i, n, r, o, s, a) {
|
|
return void 0 === o && (o = 1), new Q(this, e, i, n, r, o, s, t, a)
|
|
}, W.a.prototype.beginDirectHierarchyAnimation = function(e, t, i, n, r, o, s, a, c) {
|
|
var l = e.getDescendants(t),
|
|
u = [];
|
|
u.push(this.beginDirectAnimation(e, i, n, r, o, s, a, c));
|
|
for (var h = 0, d = l; h < d.length; h++) {
|
|
var f = d[h];
|
|
u.push(this.beginDirectAnimation(f, i, n, r, o, s, a, c))
|
|
}
|
|
return u
|
|
}, W.a.prototype.getAnimatableByTarget = function(e) {
|
|
for (var t = 0; t < this._activeAnimatables.length; t++)
|
|
if (this._activeAnimatables[t].target === e) return this._activeAnimatables[t];
|
|
return null
|
|
}, W.a.prototype.getAllAnimatablesByTarget = function(e) {
|
|
for (var t = [], i = 0; i < this._activeAnimatables.length; i++) this._activeAnimatables[i].target === e && t.push(this._activeAnimatables[i]);
|
|
return t
|
|
}, W.a.prototype.stopAnimation = function(e, t, i) {
|
|
for (var n = 0, r = this.getAllAnimatablesByTarget(e); n < r.length; n++) {
|
|
r[n].stop(t, i)
|
|
}
|
|
}, W.a.prototype.stopAllAnimations = function() {
|
|
if (this._activeAnimatables) {
|
|
for (var e = 0; e < this._activeAnimatables.length; e++) this._activeAnimatables[e].stop();
|
|
this._activeAnimatables = []
|
|
}
|
|
for (var t = 0, i = this.animationGroups; t < i.length; t++) {
|
|
i[t].stop()
|
|
}
|
|
}, W.a.prototype._registerTargetForLateAnimationBinding = function(e, t) {
|
|
var i = e.target;
|
|
this._registeredForLateAnimationBindings.pushNoDuplicate(i), i._lateAnimationHolders || (i._lateAnimationHolders = {}), i._lateAnimationHolders[e.targetPath] || (i._lateAnimationHolders[e.targetPath] = {
|
|
totalWeight: 0,
|
|
animations: [],
|
|
originalValue: t
|
|
}), i._lateAnimationHolders[e.targetPath].animations.push(e), i._lateAnimationHolders[e.targetPath].totalWeight += e.weight
|
|
}, W.a.prototype._processLateAnimationBindingsForMatrices = function(e) {
|
|
var t = 1,
|
|
i = o.t.Vector3[0],
|
|
n = o.t.Vector3[1],
|
|
r = o.t.Quaternion[0],
|
|
s = 0,
|
|
a = e.animations[0],
|
|
c = e.originalValue,
|
|
l = 1;
|
|
if (e.totalWeight < 1) c.decompose(n, r, i), l = 1 - e.totalWeight;
|
|
else if (s = 1, t = e.totalWeight, a.currentValue.decompose(n, r, i), 1 == (l = a.weight / t)) return a.currentValue;
|
|
n.scaleInPlace(l), i.scaleInPlace(l), r.scaleInPlace(l);
|
|
for (var u = s; u < e.animations.length; u++) {
|
|
var h = e.animations[u],
|
|
d = (l = h.weight / t, o.t.Vector3[2]),
|
|
f = o.t.Vector3[3],
|
|
p = o.t.Quaternion[1];
|
|
h.currentValue.decompose(f, p, d), f.scaleAndAddToRef(l, n), p.scaleAndAddToRef(l, r), d.scaleAndAddToRef(l, i)
|
|
}
|
|
var _ = a._animationState.workValue;
|
|
return o.j.ComposeToRef(n, r, i, _), _
|
|
}, W.a.prototype._processLateAnimationBindingsForQuaternions = function(e, t) {
|
|
var i = e.animations[0],
|
|
n = e.originalValue;
|
|
if (1 === e.animations.length) return o.q.SlerpToRef(n, i.currentValue, Math.min(1, e.totalWeight), t), t;
|
|
var r, s, a = 1;
|
|
if (e.totalWeight < 1) {
|
|
var c = 1 - e.totalWeight;
|
|
s = [], (r = []).push(n), s.push(c)
|
|
} else {
|
|
if (2 === e.animations.length) return o.q.SlerpToRef(e.animations[0].currentValue, e.animations[1].currentValue, e.animations[1].weight / e.totalWeight, t), t;
|
|
r = [], s = [], a = e.totalWeight
|
|
}
|
|
for (var l = 0; l < e.animations.length; l++) {
|
|
var u = e.animations[l];
|
|
r.push(u.currentValue), s.push(u.weight / a)
|
|
}
|
|
for (var h = 0, d = null, f = 0; f < r.length;) d ? (h += s[f], o.q.SlerpToRef(d, r[f], s[f] / h, d), f++) : (o.q.SlerpToRef(r[f], r[f + 1], s[f + 1] / (s[f] + s[f + 1]), t), d = t, h = s[f] + s[f + 1], f += 2);
|
|
return d
|
|
}, W.a.prototype._processLateAnimationBindings = function() {
|
|
if (this._registeredForLateAnimationBindings.length) {
|
|
for (var e = 0; e < this._registeredForLateAnimationBindings.length; e++) {
|
|
var t = this._registeredForLateAnimationBindings.data[e];
|
|
for (var i in t._lateAnimationHolders) {
|
|
var n = t._lateAnimationHolders[i],
|
|
r = n.animations[0],
|
|
s = n.originalValue,
|
|
a = B.AllowMatrixDecomposeForInterpolation && s.m,
|
|
c = t[i];
|
|
if (a) c = this._processLateAnimationBindingsForMatrices(n);
|
|
else if (void 0 !== s.w) c = this._processLateAnimationBindingsForQuaternions(n, c || o.q.Identity());
|
|
else {
|
|
var l = 0,
|
|
u = 1;
|
|
if (n.totalWeight < 1) c = s.scale ? s.scale(1 - n.totalWeight) : s * (1 - n.totalWeight);
|
|
else {
|
|
u = n.totalWeight;
|
|
var h = r.weight / u;
|
|
c = 1 !== h ? r.currentValue.scale ? r.currentValue.scale(h) : r.currentValue * h : r.currentValue, l = 1
|
|
}
|
|
for (var d = l; d < n.animations.length; d++) {
|
|
var f = n.animations[d],
|
|
p = f.weight / u;
|
|
f.currentValue.scaleAndAddToRef ? f.currentValue.scaleAndAddToRef(p, c) : c += f.currentValue * p
|
|
}
|
|
}
|
|
t[i] = c
|
|
}
|
|
t._lateAnimationHolders = {}
|
|
}
|
|
this._registeredForLateAnimationBindings.reset()
|
|
}
|
|
}, K.prototype.copyAnimationRange = function(e, t, i, n, r) {
|
|
void 0 === n && (n = !1), void 0 === r && (r = null), 0 === this.animations.length && (this.animations.push(new B(this.name, "_matrix", e.animations[0].framePerSecond, B.ANIMATIONTYPE_MATRIX, 0)), this.animations[0].setKeys([]));
|
|
var o = e.animations[0].getRange(t);
|
|
if (!o) return !1;
|
|
for (var s, a, c, l = o.from, u = o.to, h = e.animations[0].getKeys(), d = e.length, f = e.getParent(), p = this.getParent(), _ = n && f && d && this.length && d !== this.length, g = _ && p && f ? p.length / f.length : 1, m = n && !p && r && (1 !== r.x || 1 !== r.y || 1 !== r.z), v = this.animations[0].getKeys(), y = 0, b = h.length; y < b; y++)(s = h[y]).frame >= l && s.frame <= u && (n ? (c = s.value.clone(), _ ? (a = c.getTranslation(), c.setTranslation(a.scaleInPlace(g))) : m && r ? (a = c.getTranslation(), c.setTranslation(a.multiplyInPlace(r))) : c = s.value) : c = s.value, v.push({
|
|
frame: s.frame + i,
|
|
value: c
|
|
}));
|
|
return this.animations[0].createRange(t, l + i, u + i), !0
|
|
};
|
|
var q = function() {
|
|
return function() {}
|
|
}(),
|
|
Z = function() {
|
|
function e(e, t) {
|
|
void 0 === t && (t = null), this.name = e, this._targetedAnimations = new Array, this._animatables = new Array, this._from = Number.MAX_VALUE, this._to = -Number.MAX_VALUE, this._speedRatio = 1, this._loopAnimation = !1, this.onAnimationEndObservable = new r.c, this.onAnimationLoopObservable = new r.c, this.onAnimationGroupEndObservable = new r.c, this.onAnimationGroupPauseObservable = new r.c, this.onAnimationGroupPlayObservable = new r.c, this._scene = t || P.a.LastCreatedScene, this.uniqueId = this._scene.getUniqueId(), this._scene.animationGroups.push(this)
|
|
}
|
|
return Object.defineProperty(e.prototype, "from", {
|
|
get: function() {
|
|
return this._from
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "to", {
|
|
get: function() {
|
|
return this._to
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isStarted", {
|
|
get: function() {
|
|
return this._isStarted
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isPlaying", {
|
|
get: function() {
|
|
return this._isStarted && !this._isPaused
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "speedRatio", {
|
|
get: function() {
|
|
return this._speedRatio
|
|
},
|
|
set: function(e) {
|
|
if (this._speedRatio !== e) {
|
|
this._speedRatio = e;
|
|
for (var t = 0; t < this._animatables.length; t++) {
|
|
this._animatables[t].speedRatio = this._speedRatio
|
|
}
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "loopAnimation", {
|
|
get: function() {
|
|
return this._loopAnimation
|
|
},
|
|
set: function(e) {
|
|
if (this._loopAnimation !== e) {
|
|
this._loopAnimation = e;
|
|
for (var t = 0; t < this._animatables.length; t++) {
|
|
this._animatables[t].loopAnimation = this._loopAnimation
|
|
}
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "targetedAnimations", {
|
|
get: function() {
|
|
return this._targetedAnimations
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "animatables", {
|
|
get: function() {
|
|
return this._animatables
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.addTargetedAnimation = function(e, t) {
|
|
var i = {
|
|
animation: e,
|
|
target: t
|
|
},
|
|
n = e.getKeys();
|
|
return this._from > n[0].frame && (this._from = n[0].frame), this._to < n[n.length - 1].frame && (this._to = n[n.length - 1].frame), this._targetedAnimations.push(i), i
|
|
}, e.prototype.normalize = function(e, t) {
|
|
void 0 === e && (e = null), void 0 === t && (t = null), null == e && (e = this._from), null == t && (t = this._to);
|
|
for (var i = 0; i < this._targetedAnimations.length; i++) {
|
|
var n = this._targetedAnimations[i].animation.getKeys(),
|
|
r = n[0],
|
|
o = n[n.length - 1];
|
|
if (r.frame > e) {
|
|
var s = {
|
|
frame: e,
|
|
value: r.value,
|
|
inTangent: r.inTangent,
|
|
outTangent: r.outTangent,
|
|
interpolation: r.interpolation
|
|
};
|
|
n.splice(0, 0, s)
|
|
}
|
|
if (o.frame < t) {
|
|
s = {
|
|
frame: t,
|
|
value: o.value,
|
|
inTangent: o.outTangent,
|
|
outTangent: o.outTangent,
|
|
interpolation: o.interpolation
|
|
};
|
|
n.push(s)
|
|
}
|
|
}
|
|
return this._from = e, this._to = t, this
|
|
}, e.prototype.start = function(e, t, i, n) {
|
|
var r = this;
|
|
if (void 0 === e && (e = !1), void 0 === t && (t = 1), this._isStarted || 0 === this._targetedAnimations.length) return this;
|
|
this._loopAnimation = e;
|
|
for (var o = function(o) {
|
|
var a = s._scene.beginDirectAnimation(o.target, [o.animation], void 0 !== i ? i : s._from, void 0 !== n ? n : s._to, e, t);
|
|
a.onAnimationEnd = function() {
|
|
r.onAnimationEndObservable.notifyObservers(o), r._checkAnimationGroupEnded(a)
|
|
}, a.onAnimationLoop = function() {
|
|
r.onAnimationLoopObservable.notifyObservers(o)
|
|
}, s._animatables.push(a)
|
|
}, s = this, a = 0, c = this._targetedAnimations; a < c.length; a++) {
|
|
o(c[a])
|
|
}
|
|
if (this._speedRatio = t, void 0 !== i && void 0 !== n)
|
|
if (i < n && this._speedRatio < 0) {
|
|
var l = n;
|
|
n = i, i = l
|
|
} else i > n && this._speedRatio > 0 && (this._speedRatio = -t);
|
|
return this._isStarted = !0, this._isPaused = !1, this.onAnimationGroupPlayObservable.notifyObservers(this), this
|
|
}, e.prototype.pause = function() {
|
|
if (!this._isStarted) return this;
|
|
this._isPaused = !0;
|
|
for (var e = 0; e < this._animatables.length; e++) {
|
|
this._animatables[e].pause()
|
|
}
|
|
return this.onAnimationGroupPauseObservable.notifyObservers(this), this
|
|
}, e.prototype.play = function(e) {
|
|
return this.isStarted && this._animatables.length === this._targetedAnimations.length ? (void 0 !== e && (this.loopAnimation = e), this.restart()) : (this.stop(), this.start(e, this._speedRatio)), this._isPaused = !1, this
|
|
}, e.prototype.reset = function() {
|
|
if (!this._isStarted) return this;
|
|
for (var e = 0; e < this._animatables.length; e++) {
|
|
this._animatables[e].reset()
|
|
}
|
|
return this
|
|
}, e.prototype.restart = function() {
|
|
if (!this._isStarted) return this;
|
|
for (var e = 0; e < this._animatables.length; e++) {
|
|
this._animatables[e].restart()
|
|
}
|
|
return this.onAnimationGroupPlayObservable.notifyObservers(this), this
|
|
}, e.prototype.stop = function() {
|
|
if (!this._isStarted) return this;
|
|
for (var e = this._animatables.slice(), t = 0; t < e.length; t++) e[t].stop();
|
|
return this._isStarted = !1, this
|
|
}, e.prototype.setWeightForAllAnimatables = function(e) {
|
|
for (var t = 0; t < this._animatables.length; t++) {
|
|
this._animatables[t].weight = e
|
|
}
|
|
return this
|
|
}, e.prototype.syncAllAnimationsWith = function(e) {
|
|
for (var t = 0; t < this._animatables.length; t++) {
|
|
this._animatables[t].syncWith(e)
|
|
}
|
|
return this
|
|
}, e.prototype.goToFrame = function(e) {
|
|
if (!this._isStarted) return this;
|
|
for (var t = 0; t < this._animatables.length; t++) {
|
|
this._animatables[t].goToFrame(e)
|
|
}
|
|
return this
|
|
}, e.prototype.dispose = function() {
|
|
this._targetedAnimations = [], this._animatables = [];
|
|
var e = this._scene.animationGroups.indexOf(this);
|
|
e > -1 && this._scene.animationGroups.splice(e, 1), this.onAnimationEndObservable.clear(), this.onAnimationGroupEndObservable.clear(), this.onAnimationGroupPauseObservable.clear(), this.onAnimationGroupPlayObservable.clear(), this.onAnimationLoopObservable.clear()
|
|
}, e.prototype._checkAnimationGroupEnded = function(e) {
|
|
var t = this._animatables.indexOf(e);
|
|
t > -1 && this._animatables.splice(t, 1), 0 === this._animatables.length && (this._isStarted = !1, this.onAnimationGroupEndObservable.notifyObservers(this))
|
|
}, e.prototype.clone = function(t, i) {
|
|
for (var n = new e(t || this.name, this._scene), r = 0, o = this._targetedAnimations; r < o.length; r++) {
|
|
var s = o[r];
|
|
n.addTargetedAnimation(s.animation.clone(), i ? i(s.target) : s.target)
|
|
}
|
|
return n
|
|
}, e.Parse = function(t, i) {
|
|
for (var n = new e(t.name, i), r = 0; r < t.targetedAnimations.length; r++) {
|
|
var o = t.targetedAnimations[r],
|
|
s = B.Parse(o.animation),
|
|
a = o.targetId;
|
|
if ("influence" === o.animation.property) {
|
|
var c = i.getMorphTargetById(a);
|
|
c && n.addTargetedAnimation(s, c)
|
|
} else {
|
|
var l = i.getNodeByID(a);
|
|
null != l && n.addTargetedAnimation(s, l)
|
|
}
|
|
}
|
|
return null !== t.from && null !== t.from && n.normalize(t.from, t.to), n
|
|
}, e.prototype.getClassName = function() {
|
|
return "AnimationGroup"
|
|
}, e.prototype.toString = function(e) {
|
|
var t = "Name: " + this.name;
|
|
return t += ", type: " + this.getClassName(), e && (t += ", from: " + this._from, t += ", to: " + this._to, t += ", isStarted: " + this._isStarted, t += ", speedRatio: " + this._speedRatio, t += ", targetedAnimations length: " + this._targetedAnimations.length, t += ", animatables length: " + this._animatables), t
|
|
}, e
|
|
}(),
|
|
J = function() {
|
|
return function() {
|
|
this.enableBlending = !1, this.blendingSpeed = .01, this.loopMode = B.ANIMATIONLOOPMODE_CYCLE
|
|
}
|
|
}(),
|
|
$ = function() {
|
|
function e() {
|
|
this._easingMode = e.EASINGMODE_EASEIN
|
|
}
|
|
return e.prototype.setEasingMode = function(e) {
|
|
var t = Math.min(Math.max(e, 0), 2);
|
|
this._easingMode = t
|
|
}, e.prototype.getEasingMode = function() {
|
|
return this._easingMode
|
|
}, e.prototype.easeInCore = function(e) {
|
|
throw new Error("You must implement this method")
|
|
}, e.prototype.ease = function(t) {
|
|
switch (this._easingMode) {
|
|
case e.EASINGMODE_EASEIN:
|
|
return this.easeInCore(t);
|
|
case e.EASINGMODE_EASEOUT:
|
|
return 1 - this.easeInCore(1 - t)
|
|
}
|
|
return t >= .5 ? .5 * (1 - this.easeInCore(2 * (1 - t))) + .5 : .5 * this.easeInCore(2 * t)
|
|
}, e.EASINGMODE_EASEIN = 0, e.EASINGMODE_EASEOUT = 1, e.EASINGMODE_EASEINOUT = 2, e
|
|
}(),
|
|
ee = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
return e = Math.max(0, Math.min(1, e)), 1 - Math.sqrt(1 - e * e)
|
|
}, t
|
|
}($),
|
|
te = function(e) {
|
|
function t(t) {
|
|
void 0 === t && (t = 1);
|
|
var i = e.call(this) || this;
|
|
return i.amplitude = t, i
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
var t = Math.max(0, this.amplitude);
|
|
return Math.pow(e, 3) - e * t * Math.sin(3.141592653589793 * e)
|
|
}, t
|
|
}($),
|
|
ie = function(e) {
|
|
function t(t, i) {
|
|
void 0 === t && (t = 3), void 0 === i && (i = 2);
|
|
var n = e.call(this) || this;
|
|
return n.bounces = t, n.bounciness = i, n
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
var t = Math.max(0, this.bounces),
|
|
i = this.bounciness;
|
|
i <= 1 && (i = 1.001);
|
|
var n = Math.pow(i, t),
|
|
r = 1 - i,
|
|
o = (1 - n) / r + .5 * n,
|
|
s = e * o,
|
|
a = Math.log(-s * (1 - i) + 1) / Math.log(i),
|
|
c = Math.floor(a),
|
|
l = c + 1,
|
|
u = (1 - Math.pow(i, c)) / (r * o),
|
|
h = .5 * (u + (1 - Math.pow(i, l)) / (r * o)),
|
|
d = e - h,
|
|
f = h - u;
|
|
return -Math.pow(1 / i, t - c) / (f * f) * (d - f) * (d + f)
|
|
}, t
|
|
}($),
|
|
ne = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
return e * e * e
|
|
}, t
|
|
}($),
|
|
re = function(e) {
|
|
function t(t, i) {
|
|
void 0 === t && (t = 3), void 0 === i && (i = 3);
|
|
var n = e.call(this) || this;
|
|
return n.oscillations = t, n.springiness = i, n
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
var t = Math.max(0, this.oscillations),
|
|
i = Math.max(0, this.springiness);
|
|
return (0 == i ? e : (Math.exp(i * e) - 1) / (Math.exp(i) - 1)) * Math.sin((6.283185307179586 * t + 1.5707963267948966) * e)
|
|
}, t
|
|
}($),
|
|
oe = function(e) {
|
|
function t(t) {
|
|
void 0 === t && (t = 2);
|
|
var i = e.call(this) || this;
|
|
return i.exponent = t, i
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
return this.exponent <= 0 ? e : (Math.exp(this.exponent * e) - 1) / (Math.exp(this.exponent) - 1)
|
|
}, t
|
|
}($),
|
|
se = function(e) {
|
|
function t(t) {
|
|
void 0 === t && (t = 2);
|
|
var i = e.call(this) || this;
|
|
return i.power = t, i
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
var t = Math.max(0, this.power);
|
|
return Math.pow(e, t)
|
|
}, t
|
|
}($),
|
|
ae = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
return e * e
|
|
}, t
|
|
}($),
|
|
ce = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
return e * e * e * e
|
|
}, t
|
|
}($),
|
|
le = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
return e * e * e * e * e
|
|
}, t
|
|
}($),
|
|
ue = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
return 1 - Math.sin(1.5707963267948966 * (1 - e))
|
|
}, t
|
|
}($),
|
|
he = function(e) {
|
|
function t(t, i, n, r) {
|
|
void 0 === t && (t = 0), void 0 === i && (i = 0), void 0 === n && (n = 1), void 0 === r && (r = 1);
|
|
var o = e.call(this) || this;
|
|
return o.x1 = t, o.y1 = i, o.x2 = n, o.y2 = r, o
|
|
}
|
|
return l.d(t, e), t.prototype.easeInCore = function(e) {
|
|
return o.d.Interpolate(e, this.x1, this.y1, this.x2, this.y2)
|
|
}, t
|
|
}($),
|
|
de = function() {
|
|
function e(e, t, i) {
|
|
this.frame = e, this.action = t, this.onlyOnce = i, this.isDone = !1
|
|
}
|
|
return e.prototype._clone = function() {
|
|
return new e(this.frame, this.action, this.onlyOnce)
|
|
}, e
|
|
}(),
|
|
fe = i(11),
|
|
pe = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t
|
|
}(n.a),
|
|
_e = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this) || this;
|
|
return i.scene = t, i.sounds = [], i.effectLayers = [], i.layers = [], i.lensFlareSystems = [], i.proceduralTextures = [], i.reflectionProbes = [], i
|
|
}
|
|
return l.d(t, e), t.prototype.addAllToScene = function() {
|
|
var e = this;
|
|
this.cameras.forEach(function(t) {
|
|
e.scene.addCamera(t)
|
|
}), this.lights.forEach(function(t) {
|
|
e.scene.addLight(t)
|
|
}), this.meshes.forEach(function(t) {
|
|
e.scene.addMesh(t)
|
|
}), this.skeletons.forEach(function(t) {
|
|
e.scene.addSkeleton(t)
|
|
}), this.animations.forEach(function(t) {
|
|
e.scene.addAnimation(t)
|
|
}), this.animationGroups.forEach(function(t) {
|
|
e.scene.addAnimationGroup(t)
|
|
}), this.multiMaterials.forEach(function(t) {
|
|
e.scene.addMultiMaterial(t)
|
|
}), this.materials.forEach(function(t) {
|
|
e.scene.addMaterial(t)
|
|
}), this.morphTargetManagers.forEach(function(t) {
|
|
e.scene.addMorphTargetManager(t)
|
|
}), this.geometries.forEach(function(t) {
|
|
e.scene.addGeometry(t)
|
|
}), this.transformNodes.forEach(function(t) {
|
|
e.scene.addTransformNode(t)
|
|
}), this.actionManagers.forEach(function(t) {
|
|
e.scene.addActionManager(t)
|
|
}), this.textures.forEach(function(t) {
|
|
e.scene.addTexture(t)
|
|
}), this.reflectionProbes.forEach(function(t) {
|
|
e.scene.addReflectionProbe(t)
|
|
}), this.environmentTexture && (this.scene.environmentTexture = this.environmentTexture);
|
|
for (var t = 0, i = this.scene._serializableComponents; t < i.length; t++) {
|
|
i[t].addFromContainer(this)
|
|
}
|
|
}, t.prototype.removeAllFromScene = function() {
|
|
var e = this;
|
|
this.cameras.forEach(function(t) {
|
|
e.scene.removeCamera(t)
|
|
}), this.lights.forEach(function(t) {
|
|
e.scene.removeLight(t)
|
|
}), this.meshes.forEach(function(t) {
|
|
e.scene.removeMesh(t)
|
|
}), this.skeletons.forEach(function(t) {
|
|
e.scene.removeSkeleton(t)
|
|
}), this.animations.forEach(function(t) {
|
|
e.scene.removeAnimation(t)
|
|
}), this.animationGroups.forEach(function(t) {
|
|
e.scene.removeAnimationGroup(t)
|
|
}), this.multiMaterials.forEach(function(t) {
|
|
e.scene.removeMultiMaterial(t)
|
|
}), this.materials.forEach(function(t) {
|
|
e.scene.removeMaterial(t)
|
|
}), this.morphTargetManagers.forEach(function(t) {
|
|
e.scene.removeMorphTargetManager(t)
|
|
}), this.geometries.forEach(function(t) {
|
|
e.scene.removeGeometry(t)
|
|
}), this.transformNodes.forEach(function(t) {
|
|
e.scene.removeTransformNode(t)
|
|
}), this.actionManagers.forEach(function(t) {
|
|
e.scene.removeActionManager(t)
|
|
}), this.textures.forEach(function(t) {
|
|
e.scene.removeTexture(t)
|
|
}), this.reflectionProbes.forEach(function(t) {
|
|
e.scene.removeReflectionProbe(t)
|
|
}), this.environmentTexture === this.scene.environmentTexture && (this.scene.environmentTexture = null);
|
|
for (var t = 0, i = this.scene._serializableComponents; t < i.length; t++) {
|
|
i[t].removeFromContainer(this)
|
|
}
|
|
}, t.prototype.dispose = function() {
|
|
this.cameras.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.cameras = [], this.lights.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.lights = [], this.meshes.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.meshes = [], this.skeletons.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.skeletons = [], this.animationGroups.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.animationGroups = [], this.multiMaterials.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.multiMaterials = [], this.materials.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.materials = [], this.geometries.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.geometries = [], this.transformNodes.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.transformNodes = [], this.actionManagers.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.actionManagers = [], this.textures.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.textures = [], this.reflectionProbes.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.reflectionProbes = [], this.environmentTexture && (this.environmentTexture.dispose(), this.environmentTexture = null);
|
|
for (var e = 0, t = this.scene._serializableComponents; e < t.length; e++) {
|
|
t[e].removeFromContainer(this, !0)
|
|
}
|
|
}, t.prototype._moveAssets = function(e, t, i) {
|
|
if (e)
|
|
for (var n = 0, r = e; n < r.length; n++) {
|
|
var o = r[n],
|
|
s = !0;
|
|
if (i)
|
|
for (var a = 0, c = i; a < c.length; a++) {
|
|
if (o === c[a]) {
|
|
s = !1;
|
|
break
|
|
}
|
|
}
|
|
s && t.push(o)
|
|
}
|
|
}, t.prototype.moveAllFromScene = function(e) {
|
|
for (var t in void 0 === e && (e = new pe), this) this.hasOwnProperty(t) && (this[t] = this[t] || [], this._moveAssets(this.scene[t], this[t], e[t]));
|
|
this.removeAllFromScene()
|
|
}, t.prototype.createRootMesh = function() {
|
|
var e = new fe.a("assetContainerRootMesh", this.scene);
|
|
return this.meshes.forEach(function(t) {
|
|
t.parent || e.addChild(t)
|
|
}), this.meshes.unshift(e), e
|
|
}, t
|
|
}(n.a),
|
|
ge = i(10),
|
|
me = function() {
|
|
function e(e) {
|
|
this.SMOOTHING = .75, this.FFT_SIZE = 512, this.BARGRAPHAMPLITUDE = 256, this.DEBUGCANVASPOS = {
|
|
x: 20,
|
|
y: 20
|
|
}, this.DEBUGCANVASSIZE = {
|
|
width: 320,
|
|
height: 200
|
|
}, this._scene = e, this._audioEngine = ge.b.audioEngine, this._audioEngine.canUseWebAudio && this._audioEngine.audioContext && (this._webAudioAnalyser = this._audioEngine.audioContext.createAnalyser(), this._webAudioAnalyser.minDecibels = -140, this._webAudioAnalyser.maxDecibels = 0, this._byteFreqs = new Uint8Array(this._webAudioAnalyser.frequencyBinCount), this._byteTime = new Uint8Array(this._webAudioAnalyser.frequencyBinCount), this._floatFreqs = new Float32Array(this._webAudioAnalyser.frequencyBinCount))
|
|
}
|
|
return e.prototype.getFrequencyBinCount = function() {
|
|
return this._audioEngine.canUseWebAudio ? this._webAudioAnalyser.frequencyBinCount : 0
|
|
}, e.prototype.getByteFrequencyData = function() {
|
|
return this._audioEngine.canUseWebAudio && (this._webAudioAnalyser.smoothingTimeConstant = this.SMOOTHING, this._webAudioAnalyser.fftSize = this.FFT_SIZE, this._webAudioAnalyser.getByteFrequencyData(this._byteFreqs)), this._byteFreqs
|
|
}, e.prototype.getByteTimeDomainData = function() {
|
|
return this._audioEngine.canUseWebAudio && (this._webAudioAnalyser.smoothingTimeConstant = this.SMOOTHING, this._webAudioAnalyser.fftSize = this.FFT_SIZE, this._webAudioAnalyser.getByteTimeDomainData(this._byteTime)), this._byteTime
|
|
}, e.prototype.getFloatFrequencyData = function() {
|
|
return this._audioEngine.canUseWebAudio && (this._webAudioAnalyser.smoothingTimeConstant = this.SMOOTHING, this._webAudioAnalyser.fftSize = this.FFT_SIZE, this._webAudioAnalyser.getFloatFrequencyData(this._floatFreqs)), this._floatFreqs
|
|
}, e.prototype.drawDebugCanvas = function() {
|
|
var e = this;
|
|
if (this._audioEngine.canUseWebAudio && (this._debugCanvas || (this._debugCanvas = document.createElement("canvas"), this._debugCanvas.width = this.DEBUGCANVASSIZE.width, this._debugCanvas.height = this.DEBUGCANVASSIZE.height, this._debugCanvas.style.position = "absolute", this._debugCanvas.style.top = this.DEBUGCANVASPOS.y + "px", this._debugCanvas.style.left = this.DEBUGCANVASPOS.x + "px", this._debugCanvasContext = this._debugCanvas.getContext("2d"), document.body.appendChild(this._debugCanvas), this._registerFunc = function() {
|
|
e.drawDebugCanvas()
|
|
}, this._scene.registerBeforeRender(this._registerFunc)), this._registerFunc && this._debugCanvasContext)) {
|
|
var t = this.getByteFrequencyData();
|
|
this._debugCanvasContext.fillStyle = "rgb(0, 0, 0)", this._debugCanvasContext.fillRect(0, 0, this.DEBUGCANVASSIZE.width, this.DEBUGCANVASSIZE.height);
|
|
for (var i = 0; i < this.getFrequencyBinCount(); i++) {
|
|
var n = t[i] / this.BARGRAPHAMPLITUDE,
|
|
r = this.DEBUGCANVASSIZE.height * n,
|
|
o = this.DEBUGCANVASSIZE.height - r - 1,
|
|
s = this.DEBUGCANVASSIZE.width / this.getFrequencyBinCount(),
|
|
a = i / this.getFrequencyBinCount() * 360;
|
|
this._debugCanvasContext.fillStyle = "hsl(" + a + ", 100%, 50%)", this._debugCanvasContext.fillRect(i * s, o, s, r)
|
|
}
|
|
}
|
|
}, e.prototype.stopDebugCanvas = function() {
|
|
this._debugCanvas && (this._registerFunc && (this._scene.unregisterBeforeRender(this._registerFunc), this._registerFunc = null), document.body.removeChild(this._debugCanvas), this._debugCanvas = null, this._debugCanvasContext = null)
|
|
}, e.prototype.connectAudioNodes = function(e, t) {
|
|
this._audioEngine.canUseWebAudio && (e.connect(this._webAudioAnalyser), this._webAudioAnalyser.connect(t))
|
|
}, e.prototype.dispose = function() {
|
|
this._audioEngine.canUseWebAudio && this._webAudioAnalyser.disconnect()
|
|
}, e
|
|
}();
|
|
ge.b.AudioEngineFactory = function(e) {
|
|
return new ve(e)
|
|
};
|
|
var ve = function() {
|
|
function e(e) {
|
|
var t = this;
|
|
void 0 === e && (e = null), this._audioContext = null, this._audioContextInitialized = !1, this._muteButton = null, this.canUseWebAudio = !1, this.WarnedWebAudioUnsupported = !1, this.isMP3supported = !1, this.isOGGsupported = !1, this.unlocked = !0, this.useCustomUnlockedButton = !1, this.onAudioUnlockedObservable = new r.c, this.onAudioLockedObservable = new r.c, this._tryToRun = !1, this._onResize = function() {
|
|
t._moveButtonToTopLeft()
|
|
}, void 0 === window.AudioContext && void 0 === window.webkitAudioContext || (window.AudioContext = window.AudioContext || window.webkitAudioContext, this.canUseWebAudio = !0);
|
|
var i = document.createElement("audio");
|
|
this._hostElement = e;
|
|
try {
|
|
i && i.canPlayType && i.canPlayType('audio/mpeg; codecs="mp3"').replace(/^no$/, "") && (this.isMP3supported = !0)
|
|
} catch (e) {}
|
|
try {
|
|
i && i.canPlayType && i.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, "") && (this.isOGGsupported = !0)
|
|
} catch (e) {}
|
|
}
|
|
return Object.defineProperty(e.prototype, "audioContext", {
|
|
get: function() {
|
|
return this._audioContextInitialized ? this.unlocked || this._muteButton || this._displayMuteButton() : this._initializeAudioContext(), this._audioContext
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.lock = function() {
|
|
this._triggerSuspendedState()
|
|
}, e.prototype.unlock = function() {
|
|
this._triggerRunningState()
|
|
}, e.prototype._resumeAudioContext = function() {
|
|
var e;
|
|
return this._audioContext.resume && (e = this._audioContext.resume()), e || Promise.resolve()
|
|
}, e.prototype._initializeAudioContext = function() {
|
|
try {
|
|
this.canUseWebAudio && (this._audioContext = new AudioContext, this.masterGain = this._audioContext.createGain(), this.masterGain.gain.value = 1, this.masterGain.connect(this._audioContext.destination), this._audioContextInitialized = !0, "running" === this._audioContext.state && this._triggerRunningState())
|
|
} catch (e) {
|
|
this.canUseWebAudio = !1, p.a.Error("Web Audio: " + e.message)
|
|
}
|
|
}, e.prototype._triggerRunningState = function() {
|
|
var e = this;
|
|
this._tryToRun || (this._tryToRun = !0, this._resumeAudioContext().then(function() {
|
|
e._tryToRun = !1, e._muteButton && e._hideMuteButton()
|
|
}).catch(function() {
|
|
e._tryToRun = !1, e.unlocked = !1
|
|
}), this.unlocked = !0, this.onAudioUnlockedObservable.notifyObservers(this))
|
|
}, e.prototype._triggerSuspendedState = function() {
|
|
this.unlocked = !1, this.onAudioLockedObservable.notifyObservers(this), this._displayMuteButton()
|
|
}, e.prototype._displayMuteButton = function() {
|
|
var e = this;
|
|
if (!this.useCustomUnlockedButton && !this._muteButton) {
|
|
this._muteButton = document.createElement("BUTTON"), this._muteButton.className = "babylonUnmuteIcon", this._muteButton.id = "babylonUnmuteIconBtn", this._muteButton.title = "Unmute";
|
|
var t = document.createElement("style");
|
|
t.appendChild(document.createTextNode(".babylonUnmuteIcon { position: absolute; left: 20px; top: 20px; height: 40px; width: 60px; background-color: rgba(51,51,51,0.7); background-image: url(data:image/svg+xml;charset=UTF-8,%3Csvg%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2239%22%20height%3D%2232%22%20viewBox%3D%220%200%2039%2032%22%3E%3Cpath%20fill%3D%22white%22%20d%3D%22M9.625%2018.938l-0.031%200.016h-4.953q-0.016%200-0.031-0.016v-12.453q0-0.016%200.031-0.016h4.953q0.031%200%200.031%200.016v12.453zM12.125%207.688l8.719-8.703v27.453l-8.719-8.719-0.016-0.047v-9.938zM23.359%207.875l1.406-1.406%204.219%204.203%204.203-4.203%201.422%201.406-4.219%204.219%204.219%204.203-1.484%201.359-4.141-4.156-4.219%204.219-1.406-1.422%204.219-4.203z%22%3E%3C%2Fpath%3E%3C%2Fsvg%3E); background-size: 80%; background-repeat:no-repeat; background-position: center; background-position-y: 4px; border: none; outline: none; transition: transform 0.125s ease-out; cursor: pointer; z-index: 9999; } .babylonUnmuteIcon:hover { transform: scale(1.05) } .babylonUnmuteIcon:active { background-color: rgba(51,51,51,1) }")), document.getElementsByTagName("head")[0].appendChild(t), document.body.appendChild(this._muteButton), this._moveButtonToTopLeft(), this._muteButton.addEventListener("touchend", function() {
|
|
e._triggerRunningState()
|
|
}, !0), this._muteButton.addEventListener("click", function() {
|
|
e._triggerRunningState()
|
|
}, !0), window.addEventListener("resize", this._onResize)
|
|
}
|
|
}, e.prototype._moveButtonToTopLeft = function() {
|
|
this._hostElement && this._muteButton && (this._muteButton.style.top = this._hostElement.offsetTop + 20 + "px", this._muteButton.style.left = this._hostElement.offsetLeft + 20 + "px")
|
|
}, e.prototype._hideMuteButton = function() {
|
|
this._muteButton && (document.body.removeChild(this._muteButton), this._muteButton = null)
|
|
}, e.prototype.dispose = function() {
|
|
this.canUseWebAudio && this._audioContextInitialized && (this._connectedAnalyser && this._audioContext && (this._connectedAnalyser.stopDebugCanvas(), this._connectedAnalyser.dispose(), this.masterGain.disconnect(), this.masterGain.connect(this._audioContext.destination), this._connectedAnalyser = null), this.masterGain.gain.value = 1), this.WarnedWebAudioUnsupported = !1, this._hideMuteButton(), window.removeEventListener("resize", this._onResize), this.onAudioUnlockedObservable.clear(), this.onAudioLockedObservable.clear()
|
|
}, e.prototype.getGlobalVolume = function() {
|
|
return this.canUseWebAudio && this._audioContextInitialized ? this.masterGain.gain.value : -1
|
|
}, e.prototype.setGlobalVolume = function(e) {
|
|
this.canUseWebAudio && this._audioContextInitialized && (this.masterGain.gain.value = e)
|
|
}, e.prototype.connectToAnalyser = function(e) {
|
|
this._connectedAnalyser && this._connectedAnalyser.stopDebugCanvas(), this.canUseWebAudio && this._audioContextInitialized && this._audioContext && (this._connectedAnalyser = e, this.masterGain.disconnect(), this._connectedAnalyser.connectAudioNodes(this.masterGain, this._audioContext.destination))
|
|
}, e
|
|
}(),
|
|
ye = i(9),
|
|
be = i(19),
|
|
Te = function() {
|
|
function e(t, i, n, s, a) {
|
|
var c = this;
|
|
if (void 0 === s && (s = null), this.autoplay = !1, this.loop = !1, this.useCustomAttenuation = !1, this.isPlaying = !1, this.isPaused = !1, this.spatialSound = !1, this.refDistance = 1, this.rolloffFactor = 1, this.maxDistance = 100, this.distanceModel = "linear", this.onEndedObservable = new r.c, this._panningModel = "equalpower", this._playbackRate = 1, this._streaming = !1, this._startTime = 0, this._startOffset = 0, this._position = o.x.Zero(), this._positionInEmitterSpace = !1, this._localDirection = new o.x(1, 0, 0), this._volume = 1, this._isReadyToPlay = !1, this._isDirectional = !1, this._coneInnerAngle = 360, this._coneOuterAngle = 360, this._coneOuterGain = 0, this._isOutputConnected = !1, this._urlType = "Unknown", this.name = t, this._scene = n, e._SceneComponentInitialization(n), this._readyToPlayCallback = s, this._customAttenuationFunction = function(e, t, i, n, r) {
|
|
return t < i ? e * (1 - t / i) : 0
|
|
}, a && (this.autoplay = a.autoplay || !1, this.loop = a.loop || !1, void 0 !== a.volume && (this._volume = a.volume), this.spatialSound = a.spatialSound || !1, this.maxDistance = a.maxDistance || 100, this.useCustomAttenuation = a.useCustomAttenuation || !1, this.rolloffFactor = a.rolloffFactor || 1, this.refDistance = a.refDistance || 1, this.distanceModel = a.distanceModel || "linear", this._playbackRate = a.playbackRate || 1, this._streaming = a.streaming || !1), ge.b.audioEngine.canUseWebAudio && ge.b.audioEngine.audioContext) {
|
|
this._soundGain = ge.b.audioEngine.audioContext.createGain(), this._soundGain.gain.value = this._volume, this._inputAudioNode = this._soundGain, this._outputAudioNode = this._soundGain, this.spatialSound && this._createSpatialParameters(), this._scene.mainSoundTrack.AddSound(this);
|
|
var l = !0;
|
|
if (i) try {
|
|
"string" == typeof i ? this._urlType = "String" : i instanceof ArrayBuffer ? this._urlType = "ArrayBuffer" : i instanceof MediaStream ? this._urlType = "MediaStream" : Array.isArray(i) && (this._urlType = "Array");
|
|
var u = [],
|
|
h = !1;
|
|
switch (this._urlType) {
|
|
case "MediaStream":
|
|
this._streaming = !0, this._isReadyToPlay = !0, this._streamingSource = ge.b.audioEngine.audioContext.createMediaStreamSource(i), this.autoplay && this.play(), this._readyToPlayCallback && this._readyToPlayCallback();
|
|
break;
|
|
case "ArrayBuffer":
|
|
i.byteLength > 0 && (h = !0, this._soundLoaded(i));
|
|
break;
|
|
case "String":
|
|
u.push(i);
|
|
case "Array":
|
|
0 === u.length && (u = i);
|
|
for (var d = 0; d < u.length; d++) {
|
|
var f = u[d];
|
|
if (-1 !== f.indexOf(".mp3", f.length - 4) && ge.b.audioEngine.isMP3supported && (h = !0), -1 !== f.indexOf(".ogg", f.length - 4) && ge.b.audioEngine.isOGGsupported && (h = !0), -1 !== f.indexOf(".wav", f.length - 4) && (h = !0), -1 !== f.indexOf("blob:") && (h = !0), h) {
|
|
this._streaming ? (this._htmlAudioElement = new Audio(f), this._htmlAudioElement.controls = !1, this._htmlAudioElement.loop = this.loop, ye.h.SetCorsBehavior(f, this._htmlAudioElement), this._htmlAudioElement.preload = "auto", this._htmlAudioElement.addEventListener("canplaythrough", function() {
|
|
c._isReadyToPlay = !0, c.autoplay && c.play(), c._readyToPlayCallback && c._readyToPlayCallback()
|
|
}), document.body.appendChild(this._htmlAudioElement), this._htmlAudioElement.load()) : this._scene._loadFile(f, function(e) {
|
|
c._soundLoaded(e)
|
|
}, void 0, !0, !0, function(e) {
|
|
e && p.a.Error("XHR " + e.status + " error on: " + f + "."), p.a.Error("Sound creation aborted."), c._scene.mainSoundTrack.RemoveSound(c)
|
|
});
|
|
break
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
l = !1
|
|
}
|
|
l ? h || (this._isReadyToPlay = !0, this._readyToPlayCallback && window.setTimeout(function() {
|
|
c._readyToPlayCallback && c._readyToPlayCallback()
|
|
}, 1e3)) : p.a.Error("Parameter must be a URL to the sound, an Array of URLs (.mp3 & .ogg) or an ArrayBuffer of the sound.")
|
|
} catch (e) {
|
|
p.a.Error("Unexpected error. Sound creation aborted."), this._scene.mainSoundTrack.RemoveSound(this)
|
|
}
|
|
} else this._scene.mainSoundTrack.AddSound(this), ge.b.audioEngine.WarnedWebAudioUnsupported || (p.a.Error("Web Audio is not supported by your browser."), ge.b.audioEngine.WarnedWebAudioUnsupported = !0), this._readyToPlayCallback && window.setTimeout(function() {
|
|
c._readyToPlayCallback && c._readyToPlayCallback()
|
|
}, 1e3)
|
|
}
|
|
return e.prototype.dispose = function() {
|
|
ge.b.audioEngine.canUseWebAudio && (this.isPlaying && this.stop(), this._isReadyToPlay = !1, -1 === this.soundTrackId ? this._scene.mainSoundTrack.RemoveSound(this) : this._scene.soundTracks && this._scene.soundTracks[this.soundTrackId].RemoveSound(this), this._soundGain && (this._soundGain.disconnect(), this._soundGain = null), this._soundPanner && (this._soundPanner.disconnect(), this._soundPanner = null), this._soundSource && (this._soundSource.disconnect(), this._soundSource = null), this._audioBuffer = null, this._htmlAudioElement && (this._htmlAudioElement.pause(), this._htmlAudioElement.src = "", document.body.removeChild(this._htmlAudioElement)), this._streamingSource && this._streamingSource.disconnect(), this._connectedTransformNode && this._registerFunc && (this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc), this._connectedTransformNode = null))
|
|
}, e.prototype.isReady = function() {
|
|
return this._isReadyToPlay
|
|
}, e.prototype._soundLoaded = function(e) {
|
|
var t = this;
|
|
ge.b.audioEngine.audioContext && ge.b.audioEngine.audioContext.decodeAudioData(e, function(e) {
|
|
t._audioBuffer = e, t._isReadyToPlay = !0, t.autoplay && t.play(), t._readyToPlayCallback && t._readyToPlayCallback()
|
|
}, function(e) {
|
|
p.a.Error("Error while decoding audio data for: " + t.name + " / Error: " + e)
|
|
})
|
|
}, e.prototype.setAudioBuffer = function(e) {
|
|
ge.b.audioEngine.canUseWebAudio && (this._audioBuffer = e, this._isReadyToPlay = !0)
|
|
}, e.prototype.updateOptions = function(e) {
|
|
e && (this.loop = e.loop || this.loop, this.maxDistance = e.maxDistance || this.maxDistance, this.useCustomAttenuation = e.useCustomAttenuation || this.useCustomAttenuation, this.rolloffFactor = e.rolloffFactor || this.rolloffFactor, this.refDistance = e.refDistance || this.refDistance, this.distanceModel = e.distanceModel || this.distanceModel, this._playbackRate = e.playbackRate || this._playbackRate, this._updateSpatialParameters(), this.isPlaying && (this._streaming && this._htmlAudioElement ? this._htmlAudioElement.playbackRate = this._playbackRate : this._soundSource && (this._soundSource.playbackRate.value = this._playbackRate)))
|
|
}, e.prototype._createSpatialParameters = function() {
|
|
ge.b.audioEngine.canUseWebAudio && ge.b.audioEngine.audioContext && (this._scene.headphone && (this._panningModel = "HRTF"), this._soundPanner = ge.b.audioEngine.audioContext.createPanner(), this._updateSpatialParameters(), this._soundPanner.connect(this._outputAudioNode), this._inputAudioNode = this._soundPanner)
|
|
}, e.prototype._updateSpatialParameters = function() {
|
|
this.spatialSound && this._soundPanner && (this.useCustomAttenuation ? (this._soundPanner.distanceModel = "linear", this._soundPanner.maxDistance = Number.MAX_VALUE, this._soundPanner.refDistance = 1, this._soundPanner.rolloffFactor = 1, this._soundPanner.panningModel = this._panningModel) : (this._soundPanner.distanceModel = this.distanceModel, this._soundPanner.maxDistance = this.maxDistance, this._soundPanner.refDistance = this.refDistance, this._soundPanner.rolloffFactor = this.rolloffFactor, this._soundPanner.panningModel = this._panningModel))
|
|
}, e.prototype.switchPanningModelToHRTF = function() {
|
|
this._panningModel = "HRTF", this._switchPanningModel()
|
|
}, e.prototype.switchPanningModelToEqualPower = function() {
|
|
this._panningModel = "equalpower", this._switchPanningModel()
|
|
}, e.prototype._switchPanningModel = function() {
|
|
ge.b.audioEngine.canUseWebAudio && this.spatialSound && this._soundPanner && (this._soundPanner.panningModel = this._panningModel)
|
|
}, e.prototype.connectToSoundTrackAudioNode = function(e) {
|
|
ge.b.audioEngine.canUseWebAudio && (this._isOutputConnected && this._outputAudioNode.disconnect(), this._outputAudioNode.connect(e), this._isOutputConnected = !0)
|
|
}, e.prototype.setDirectionalCone = function(e, t, i) {
|
|
t < e ? p.a.Error("setDirectionalCone(): outer angle of the cone must be superior or equal to the inner angle.") : (this._coneInnerAngle = e, this._coneOuterAngle = t, this._coneOuterGain = i, this._isDirectional = !0, this.isPlaying && this.loop && (this.stop(), this.play()))
|
|
}, Object.defineProperty(e.prototype, "directionalConeInnerAngle", {
|
|
get: function() {
|
|
return this._coneInnerAngle
|
|
},
|
|
set: function(e) {
|
|
if (e != this._coneInnerAngle) {
|
|
if (this._coneOuterAngle < e) return void p.a.Error("directionalConeInnerAngle: outer angle of the cone must be superior or equal to the inner angle.");
|
|
this._coneInnerAngle = e, ge.b.audioEngine.canUseWebAudio && this.spatialSound && this._soundPanner && (this._soundPanner.coneInnerAngle = this._coneInnerAngle)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "directionalConeOuterAngle", {
|
|
get: function() {
|
|
return this._coneOuterAngle
|
|
},
|
|
set: function(e) {
|
|
if (e != this._coneOuterAngle) {
|
|
if (e < this._coneInnerAngle) return void p.a.Error("directionalConeOuterAngle: outer angle of the cone must be superior or equal to the inner angle.");
|
|
this._coneOuterAngle = e, ge.b.audioEngine.canUseWebAudio && this.spatialSound && this._soundPanner && (this._soundPanner.coneOuterAngle = this._coneOuterAngle)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.setPosition = function(e) {
|
|
this._position = e, ge.b.audioEngine.canUseWebAudio && this.spatialSound && this._soundPanner && !isNaN(this._position.x) && !isNaN(this._position.y) && !isNaN(this._position.z) && this._soundPanner.setPosition(this._position.x, this._position.y, this._position.z)
|
|
}, e.prototype.setLocalDirectionToMesh = function(e) {
|
|
this._localDirection = e, ge.b.audioEngine.canUseWebAudio && this._connectedTransformNode && this.isPlaying && this._updateDirection()
|
|
}, e.prototype._updateDirection = function() {
|
|
if (this._connectedTransformNode && this._soundPanner) {
|
|
var e = this._connectedTransformNode.getWorldMatrix(),
|
|
t = o.x.TransformNormal(this._localDirection, e);
|
|
t.normalize(), this._soundPanner.setOrientation(t.x, t.y, t.z)
|
|
}
|
|
}, e.prototype.updateDistanceFromListener = function() {
|
|
if (ge.b.audioEngine.canUseWebAudio && this._connectedTransformNode && this.useCustomAttenuation && this._soundGain && this._scene.activeCamera) {
|
|
var e = this._connectedTransformNode.getDistanceToCamera(this._scene.activeCamera);
|
|
this._soundGain.gain.value = this._customAttenuationFunction(this._volume, e, this.maxDistance, this.refDistance, this.rolloffFactor)
|
|
}
|
|
}, e.prototype.setAttenuationFunction = function(e) {
|
|
this._customAttenuationFunction = e
|
|
}, e.prototype.play = function(e, t) {
|
|
var i = this;
|
|
if (this._isReadyToPlay && this._scene.audioEnabled && ge.b.audioEngine.audioContext) try {
|
|
this._startOffset < 0 && (e = -this._startOffset, this._startOffset = 0);
|
|
var n = e ? ge.b.audioEngine.audioContext.currentTime + e : ge.b.audioEngine.audioContext.currentTime;
|
|
if (this._soundSource && this._streamingSource || this.spatialSound && this._soundPanner && (isNaN(this._position.x) || isNaN(this._position.y) || isNaN(this._position.z) || this._soundPanner.setPosition(this._position.x, this._position.y, this._position.z), this._isDirectional && (this._soundPanner.coneInnerAngle = this._coneInnerAngle, this._soundPanner.coneOuterAngle = this._coneOuterAngle, this._soundPanner.coneOuterGain = this._coneOuterGain, this._connectedTransformNode ? this._updateDirection() : this._soundPanner.setOrientation(this._localDirection.x, this._localDirection.y, this._localDirection.z))), this._streaming) {
|
|
if (this._streamingSource || (this._streamingSource = ge.b.audioEngine.audioContext.createMediaElementSource(this._htmlAudioElement), this._htmlAudioElement.onended = function() {
|
|
i._onended()
|
|
}, this._htmlAudioElement.playbackRate = this._playbackRate), this._streamingSource.disconnect(), this._streamingSource.connect(this._inputAudioNode), this._htmlAudioElement)(r = function() {
|
|
if (ge.b.audioEngine.unlocked) {
|
|
var e = i._htmlAudioElement.play();
|
|
void 0 !== e && e.catch(function(e) {
|
|
ge.b.audioEngine.lock(), (i.loop || i.autoplay) && ge.b.audioEngine.onAudioUnlockedObservable.addOnce(function() {
|
|
r()
|
|
})
|
|
})
|
|
} else(i.loop || i.autoplay) && ge.b.audioEngine.onAudioUnlockedObservable.addOnce(function() {
|
|
r()
|
|
})
|
|
})()
|
|
} else {
|
|
var r = function() {
|
|
ge.b.audioEngine.audioContext && (i._soundSource = ge.b.audioEngine.audioContext.createBufferSource(), i._soundSource.buffer = i._audioBuffer, i._soundSource.connect(i._inputAudioNode), i._soundSource.loop = i.loop, i._soundSource.playbackRate.value = i._playbackRate, i._soundSource.onended = function() {
|
|
i._onended()
|
|
}, n = e ? ge.b.audioEngine.audioContext.currentTime + e : ge.b.audioEngine.audioContext.currentTime, i._soundSource.start(n, i.isPaused ? i._startOffset % i._soundSource.buffer.duration : t || 0))
|
|
};
|
|
"suspended" === ge.b.audioEngine.audioContext.state ? setTimeout(function() {
|
|
"suspended" === ge.b.audioEngine.audioContext.state ? (ge.b.audioEngine.lock(), (i.loop || i.autoplay) && ge.b.audioEngine.onAudioUnlockedObservable.addOnce(function() {
|
|
r()
|
|
})) : r()
|
|
}, 500) : r()
|
|
}
|
|
this._startTime = n, this.isPlaying = !0, this.isPaused = !1
|
|
} catch (e) {
|
|
p.a.Error("Error while trying to play audio: " + this.name + ", " + e.message)
|
|
}
|
|
}, e.prototype._onended = function() {
|
|
this.isPlaying = !1, this.onended && this.onended(), this.onEndedObservable.notifyObservers(this)
|
|
}, e.prototype.stop = function(e) {
|
|
var t = this;
|
|
if (this.isPlaying)
|
|
if (this._streaming) this._htmlAudioElement ? (this._htmlAudioElement.pause(), this._htmlAudioElement.currentTime > 0 && (this._htmlAudioElement.currentTime = 0)) : this._streamingSource.disconnect(), this.isPlaying = !1;
|
|
else if (ge.b.audioEngine.audioContext && this._soundSource) {
|
|
var i = e ? ge.b.audioEngine.audioContext.currentTime + e : ge.b.audioEngine.audioContext.currentTime;
|
|
this._soundSource.stop(i), this._soundSource.onended = function() {
|
|
t.isPlaying = !1
|
|
}, this.isPaused || (this._startOffset = 0)
|
|
}
|
|
}, e.prototype.pause = function() {
|
|
this.isPlaying && (this.isPaused = !0, this._streaming ? this._htmlAudioElement ? this._htmlAudioElement.pause() : this._streamingSource.disconnect() : ge.b.audioEngine.audioContext && (this.stop(0), this._startOffset += ge.b.audioEngine.audioContext.currentTime - this._startTime))
|
|
}, e.prototype.setVolume = function(e, t) {
|
|
ge.b.audioEngine.canUseWebAudio && this._soundGain && (t && ge.b.audioEngine.audioContext ? (this._soundGain.gain.cancelScheduledValues(ge.b.audioEngine.audioContext.currentTime), this._soundGain.gain.setValueAtTime(this._soundGain.gain.value, ge.b.audioEngine.audioContext.currentTime), this._soundGain.gain.linearRampToValueAtTime(e, ge.b.audioEngine.audioContext.currentTime + t)) : this._soundGain.gain.value = e), this._volume = e
|
|
}, e.prototype.setPlaybackRate = function(e) {
|
|
this._playbackRate = e, this.isPlaying && (this._streaming && this._htmlAudioElement ? this._htmlAudioElement.playbackRate = this._playbackRate : this._soundSource && (this._soundSource.playbackRate.value = this._playbackRate))
|
|
}, e.prototype.getVolume = function() {
|
|
return this._volume
|
|
}, e.prototype.attachToMesh = function(e) {
|
|
var t = this;
|
|
this._connectedTransformNode && this._registerFunc && (this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc), this._registerFunc = null), this._connectedTransformNode = e, this.spatialSound || (this.spatialSound = !0, this._createSpatialParameters(), this.isPlaying && this.loop && (this.stop(), this.play())), this._onRegisterAfterWorldMatrixUpdate(this._connectedTransformNode), this._registerFunc = function(e) {
|
|
return t._onRegisterAfterWorldMatrixUpdate(e)
|
|
}, this._connectedTransformNode.registerAfterWorldMatrixUpdate(this._registerFunc)
|
|
}, e.prototype.detachFromMesh = function() {
|
|
this._connectedTransformNode && this._registerFunc && (this._connectedTransformNode.unregisterAfterWorldMatrixUpdate(this._registerFunc), this._registerFunc = null, this._connectedTransformNode = null)
|
|
}, e.prototype._onRegisterAfterWorldMatrixUpdate = function(e) {
|
|
if (e.getBoundingInfo) {
|
|
var t = e;
|
|
if (this._positionInEmitterSpace) t.worldMatrixFromCache.invertToRef(o.t.Matrix[0]), this.setPosition(o.t.Matrix[0].getTranslation());
|
|
else {
|
|
var i = t.getBoundingInfo();
|
|
this.setPosition(i.boundingSphere.centerWorld)
|
|
}
|
|
ge.b.audioEngine.canUseWebAudio && this._isDirectional && this.isPlaying && this._updateDirection()
|
|
}
|
|
}, e.prototype.clone = function() {
|
|
var t = this;
|
|
if (this._streaming) return null;
|
|
var i = function() {
|
|
t._isReadyToPlay ? (r._audioBuffer = t.getAudioBuffer(), r._isReadyToPlay = !0, r.autoplay && r.play()) : window.setTimeout(i, 300)
|
|
},
|
|
n = {
|
|
autoplay: this.autoplay,
|
|
loop: this.loop,
|
|
volume: this._volume,
|
|
spatialSound: this.spatialSound,
|
|
maxDistance: this.maxDistance,
|
|
useCustomAttenuation: this.useCustomAttenuation,
|
|
rolloffFactor: this.rolloffFactor,
|
|
refDistance: this.refDistance,
|
|
distanceModel: this.distanceModel
|
|
},
|
|
r = new e(this.name + "_cloned", new ArrayBuffer(0), this._scene, null, n);
|
|
return this.useCustomAttenuation && r.setAttenuationFunction(this._customAttenuationFunction), r.setPosition(this._position), r.setPlaybackRate(this._playbackRate), i(), r
|
|
}, e.prototype.getAudioBuffer = function() {
|
|
return this._audioBuffer
|
|
}, e.prototype.serialize = function() {
|
|
var e = {
|
|
name: this.name,
|
|
url: this.name,
|
|
autoplay: this.autoplay,
|
|
loop: this.loop,
|
|
volume: this._volume,
|
|
spatialSound: this.spatialSound,
|
|
maxDistance: this.maxDistance,
|
|
rolloffFactor: this.rolloffFactor,
|
|
refDistance: this.refDistance,
|
|
distanceModel: this.distanceModel,
|
|
playbackRate: this._playbackRate,
|
|
panningModel: this._panningModel,
|
|
soundTrackId: this.soundTrackId
|
|
};
|
|
return this.spatialSound && (this._connectedTransformNode && (e.connectedMeshId = this._connectedTransformNode.id), e.position = this._position.asArray(), e.refDistance = this.refDistance, e.distanceModel = this.distanceModel, e.isDirectional = this._isDirectional, e.localDirectionToMesh = this._localDirection.asArray(), e.coneInnerAngle = this._coneInnerAngle, e.coneOuterAngle = this._coneOuterAngle, e.coneOuterGain = this._coneOuterGain), e
|
|
}, e.Parse = function(t, i, n, r) {
|
|
var s, a = t.name;
|
|
s = t.url ? n + t.url : n + a;
|
|
var c, l = {
|
|
autoplay: t.autoplay,
|
|
loop: t.loop,
|
|
volume: t.volume,
|
|
spatialSound: t.spatialSound,
|
|
maxDistance: t.maxDistance,
|
|
rolloffFactor: t.rolloffFactor,
|
|
refDistance: t.refDistance,
|
|
distanceModel: t.distanceModel,
|
|
playbackRate: t.playbackRate
|
|
};
|
|
if (r) {
|
|
var u = function() {
|
|
r._isReadyToPlay ? (c._audioBuffer = r.getAudioBuffer(), c._isReadyToPlay = !0, c.autoplay && c.play()) : window.setTimeout(u, 300)
|
|
};
|
|
c = new e(a, new ArrayBuffer(0), i, null, l), u()
|
|
} else c = new e(a, s, i, function() {
|
|
i._removePendingData(c)
|
|
}, l), i._addPendingData(c);
|
|
if (t.position) {
|
|
var h = o.x.FromArray(t.position);
|
|
c.setPosition(h)
|
|
}
|
|
if (t.isDirectional && (c.setDirectionalCone(t.coneInnerAngle || 360, t.coneOuterAngle || 360, t.coneOuterGain || 0), t.localDirectionToMesh)) {
|
|
var d = o.x.FromArray(t.localDirectionToMesh);
|
|
c.setLocalDirectionToMesh(d)
|
|
}
|
|
if (t.connectedMeshId) {
|
|
var f = i.getMeshByID(t.connectedMeshId);
|
|
f && c.attachToMesh(f)
|
|
}
|
|
return c
|
|
}, e._SceneComponentInitialization = function(e) {
|
|
throw be.a.WarnImport("AudioSceneComponent")
|
|
}, e
|
|
}(),
|
|
Ee = function() {
|
|
function e(e, t) {
|
|
void 0 === t && (t = {}), this.id = -1, this._isMainTrack = !1, this._isInitialized = !1, this._scene = e, this.soundCollection = new Array, this._options = t, !this._isMainTrack && this._scene.soundTracks && (this._scene.soundTracks.push(this), this.id = this._scene.soundTracks.length - 1)
|
|
}
|
|
return e.prototype._initializeSoundTrackAudioGraph = function() {
|
|
ge.b.audioEngine.canUseWebAudio && ge.b.audioEngine.audioContext && (this._outputAudioNode = ge.b.audioEngine.audioContext.createGain(), this._outputAudioNode.connect(ge.b.audioEngine.masterGain), this._options && (this._options.volume && (this._outputAudioNode.gain.value = this._options.volume), this._options.mainTrack && (this._isMainTrack = this._options.mainTrack)), this._isInitialized = !0)
|
|
}, e.prototype.dispose = function() {
|
|
if (ge.b.audioEngine && ge.b.audioEngine.canUseWebAudio) {
|
|
for (this._connectedAnalyser && this._connectedAnalyser.stopDebugCanvas(); this.soundCollection.length;) this.soundCollection[0].dispose();
|
|
this._outputAudioNode && this._outputAudioNode.disconnect(), this._outputAudioNode = null
|
|
}
|
|
}, e.prototype.AddSound = function(e) {
|
|
this._isInitialized || this._initializeSoundTrackAudioGraph(), ge.b.audioEngine.canUseWebAudio && this._outputAudioNode && e.connectToSoundTrackAudioNode(this._outputAudioNode), e.soundTrackId && (-1 === e.soundTrackId ? this._scene.mainSoundTrack.RemoveSound(e) : this._scene.soundTracks && this._scene.soundTracks[e.soundTrackId].RemoveSound(e)), this.soundCollection.push(e), e.soundTrackId = this.id
|
|
}, e.prototype.RemoveSound = function(e) {
|
|
var t = this.soundCollection.indexOf(e); - 1 !== t && this.soundCollection.splice(t, 1)
|
|
}, e.prototype.setVolume = function(e) {
|
|
ge.b.audioEngine.canUseWebAudio && this._outputAudioNode && (this._outputAudioNode.gain.value = e)
|
|
}, e.prototype.switchPanningModelToHRTF = function() {
|
|
if (ge.b.audioEngine.canUseWebAudio)
|
|
for (var e = 0; e < this.soundCollection.length; e++) this.soundCollection[e].switchPanningModelToHRTF()
|
|
}, e.prototype.switchPanningModelToEqualPower = function() {
|
|
if (ge.b.audioEngine.canUseWebAudio)
|
|
for (var e = 0; e < this.soundCollection.length; e++) this.soundCollection[e].switchPanningModelToEqualPower()
|
|
}, e.prototype.connectToAnalyser = function(e) {
|
|
this._connectedAnalyser && this._connectedAnalyser.stopDebugCanvas(), this._connectedAnalyser = e, ge.b.audioEngine.canUseWebAudio && this._outputAudioNode && (this._outputAudioNode.disconnect(), this._connectedAnalyser.connectAudioNodes(this._outputAudioNode, ge.b.audioEngine.masterGain))
|
|
}, e
|
|
}(),
|
|
Ae = i(14);
|
|
n.a.AddParser(Ae.a.NAME_AUDIO, function(e, t, i, n) {
|
|
var r, o = [];
|
|
if (i.sounds = i.sounds || [], void 0 !== e.sounds && null !== e.sounds)
|
|
for (var s = 0, a = e.sounds.length; s < a; s++) {
|
|
var c = e.sounds[s];
|
|
ge.b.audioEngine.canUseWebAudio ? (c.url || (c.url = c.name), o[c.url] ? i.sounds.push(Te.Parse(c, t, n, o[c.url])) : (r = Te.Parse(c, t, n), o[c.url] = r, i.sounds.push(r))) : i.sounds.push(new Te(c.name, null, t))
|
|
}
|
|
o = []
|
|
}), Object.defineProperty(W.a.prototype, "mainSoundTrack", {
|
|
get: function() {
|
|
var e = this._getComponent(Ae.a.NAME_AUDIO);
|
|
return e || (e = new xe(this), this._addComponent(e)), this._mainSoundTrack || (this._mainSoundTrack = new Ee(this, {
|
|
mainTrack: !0
|
|
})), this._mainSoundTrack
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), W.a.prototype.getSoundByName = function(e) {
|
|
var t;
|
|
for (t = 0; t < this.mainSoundTrack.soundCollection.length; t++)
|
|
if (this.mainSoundTrack.soundCollection[t].name === e) return this.mainSoundTrack.soundCollection[t];
|
|
if (this.soundTracks)
|
|
for (var i = 0; i < this.soundTracks.length; i++)
|
|
for (t = 0; t < this.soundTracks[i].soundCollection.length; t++)
|
|
if (this.soundTracks[i].soundCollection[t].name === e) return this.soundTracks[i].soundCollection[t];
|
|
return null
|
|
}, Object.defineProperty(W.a.prototype, "audioEnabled", {
|
|
get: function() {
|
|
var e = this._getComponent(Ae.a.NAME_AUDIO);
|
|
return e || (e = new xe(this), this._addComponent(e)), e.audioEnabled
|
|
},
|
|
set: function(e) {
|
|
var t = this._getComponent(Ae.a.NAME_AUDIO);
|
|
t || (t = new xe(this), this._addComponent(t)), e ? t.enableAudio() : t.disableAudio()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(W.a.prototype, "headphone", {
|
|
get: function() {
|
|
var e = this._getComponent(Ae.a.NAME_AUDIO);
|
|
return e || (e = new xe(this), this._addComponent(e)), e.headphone
|
|
},
|
|
set: function(e) {
|
|
var t = this._getComponent(Ae.a.NAME_AUDIO);
|
|
t || (t = new xe(this), this._addComponent(t)), e ? t.switchAudioModeForHeadphones() : t.switchAudioModeForNormalSpeakers()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
});
|
|
var xe = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_AUDIO, this._audioEnabled = !0, this._headphone = !1, this.scene = e, e.soundTracks = new Array, e.sounds = new Array
|
|
}
|
|
return Object.defineProperty(e.prototype, "audioEnabled", {
|
|
get: function() {
|
|
return this._audioEnabled
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "headphone", {
|
|
get: function() {
|
|
return this._headphone
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.register = function() {
|
|
this.scene._afterRenderStage.registerStep(Ae.a.STEP_AFTERRENDER_AUDIO, this, this._afterRender)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.serialize = function(e) {
|
|
if (e.sounds = [], this.scene.soundTracks)
|
|
for (var t = 0; t < this.scene.soundTracks.length; t++)
|
|
for (var i = this.scene.soundTracks[t], n = 0; n < i.soundCollection.length; n++) e.sounds.push(i.soundCollection[n].serialize())
|
|
}, e.prototype.addFromContainer = function(e) {
|
|
var t = this;
|
|
e.sounds && e.sounds.forEach(function(e) {
|
|
e.play(), e.autoplay = !0, t.scene.mainSoundTrack.AddSound(e)
|
|
})
|
|
}, e.prototype.removeFromContainer = function(e, t) {
|
|
var i = this;
|
|
void 0 === t && (t = !1), e.sounds && e.sounds.forEach(function(e) {
|
|
e.stop(), e.autoplay = !1, i.scene.mainSoundTrack.RemoveSound(e), t && e.dispose()
|
|
})
|
|
}, e.prototype.dispose = function() {
|
|
var e = this.scene;
|
|
if (e._mainSoundTrack && e.mainSoundTrack.dispose(), e.soundTracks)
|
|
for (var t = 0; t < e.soundTracks.length; t++) e.soundTracks[t].dispose()
|
|
}, e.prototype.disableAudio = function() {
|
|
var e, t = this.scene;
|
|
for (this._audioEnabled = !1, e = 0; e < t.mainSoundTrack.soundCollection.length; e++) t.mainSoundTrack.soundCollection[e].pause();
|
|
if (t.soundTracks)
|
|
for (e = 0; e < t.soundTracks.length; e++)
|
|
for (var i = 0; i < t.soundTracks[e].soundCollection.length; i++) t.soundTracks[e].soundCollection[i].pause()
|
|
}, e.prototype.enableAudio = function() {
|
|
var e, t = this.scene;
|
|
for (this._audioEnabled = !0, e = 0; e < t.mainSoundTrack.soundCollection.length; e++) t.mainSoundTrack.soundCollection[e].isPaused && t.mainSoundTrack.soundCollection[e].play();
|
|
if (t.soundTracks)
|
|
for (e = 0; e < t.soundTracks.length; e++)
|
|
for (var i = 0; i < t.soundTracks[e].soundCollection.length; i++) t.soundTracks[e].soundCollection[i].isPaused && t.soundTracks[e].soundCollection[i].play()
|
|
}, e.prototype.switchAudioModeForHeadphones = function() {
|
|
var e = this.scene;
|
|
if (this._headphone = !0, e.mainSoundTrack.switchPanningModelToHRTF(), e.soundTracks)
|
|
for (var t = 0; t < e.soundTracks.length; t++) e.soundTracks[t].switchPanningModelToHRTF()
|
|
}, e.prototype.switchAudioModeForNormalSpeakers = function() {
|
|
var e = this.scene;
|
|
if (this._headphone = !1, e.mainSoundTrack.switchPanningModelToEqualPower(), e.soundTracks)
|
|
for (var t = 0; t < e.soundTracks.length; t++) e.soundTracks[t].switchPanningModelToEqualPower()
|
|
}, e.prototype._afterRender = function() {
|
|
var e = this.scene;
|
|
if (this._audioEnabled && e._mainSoundTrack && e.soundTracks && (0 !== e._mainSoundTrack.soundCollection.length || 1 !== e.soundTracks.length)) {
|
|
var t, i = ge.b.audioEngine;
|
|
if ((t = e.activeCameras.length > 0 ? e.activeCameras[0] : e.activeCamera) && i.audioContext) {
|
|
i.audioContext.listener.setPosition(t.position.x, t.position.y, t.position.z), t.rigCameras && t.rigCameras.length > 0 && (t = t.rigCameras[0]);
|
|
var n, r = o.j.Invert(t.getViewMatrix()),
|
|
s = o.x.TransformNormal(new o.x(0, 0, -1), r);
|
|
for (s.normalize(), isNaN(s.x) || isNaN(s.y) || isNaN(s.z) || i.audioContext.listener.setOrientation(s.x, s.y, s.z, 0, 1, 0), n = 0; n < e.mainSoundTrack.soundCollection.length; n++) {
|
|
var a = e.mainSoundTrack.soundCollection[n];
|
|
a.useCustomAttenuation && a.updateDistanceFromListener()
|
|
}
|
|
if (e.soundTracks)
|
|
for (n = 0; n < e.soundTracks.length; n++)
|
|
for (var c = 0; c < e.soundTracks[n].soundCollection.length; c++)(a = e.soundTracks[n].soundCollection[c]).useCustomAttenuation && a.updateDistanceFromListener()
|
|
}
|
|
}
|
|
}, e
|
|
}();
|
|
Te._SceneComponentInitialization = function(e) {
|
|
var t = e._getComponent(Ae.a.NAME_AUDIO);
|
|
t || (t = new xe(e), e._addComponent(t))
|
|
};
|
|
var Re = function() {
|
|
function e(e, t, i) {
|
|
var n = this;
|
|
if (this.loop = !1, this._coneInnerAngle = 360, this._coneOuterAngle = 360, this._volume = 1, this.isPlaying = !1, this.isPaused = !1, this._sounds = [], this._weights = [], t.length !== i.length) throw new Error("Sounds length does not equal weights length");
|
|
this.loop = e, this._weights = i;
|
|
for (var r = 0, o = 0, s = i; o < s.length; o++) {
|
|
r += s[o]
|
|
}
|
|
for (var a = r > 0 ? 1 / r : 0, c = 0; c < this._weights.length; c++) this._weights[c] *= a;
|
|
this._sounds = t;
|
|
for (var l = 0, u = this._sounds; l < u.length; l++) {
|
|
u[l].onEndedObservable.add(function() {
|
|
n._onended()
|
|
})
|
|
}
|
|
}
|
|
return Object.defineProperty(e.prototype, "directionalConeInnerAngle", {
|
|
get: function() {
|
|
return this._coneInnerAngle
|
|
},
|
|
set: function(e) {
|
|
if (e !== this._coneInnerAngle) {
|
|
if (this._coneOuterAngle < e) return void p.a.Error("directionalConeInnerAngle: outer angle of the cone must be superior or equal to the inner angle.");
|
|
this._coneInnerAngle = e;
|
|
for (var t = 0, i = this._sounds; t < i.length; t++) {
|
|
i[t].directionalConeInnerAngle = e
|
|
}
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "directionalConeOuterAngle", {
|
|
get: function() {
|
|
return this._coneOuterAngle
|
|
},
|
|
set: function(e) {
|
|
if (e !== this._coneOuterAngle) {
|
|
if (e < this._coneInnerAngle) return void p.a.Error("directionalConeOuterAngle: outer angle of the cone must be superior or equal to the inner angle.");
|
|
this._coneOuterAngle = e;
|
|
for (var t = 0, i = this._sounds; t < i.length; t++) {
|
|
i[t].directionalConeOuterAngle = e
|
|
}
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "volume", {
|
|
get: function() {
|
|
return this._volume
|
|
},
|
|
set: function(e) {
|
|
if (e !== this._volume)
|
|
for (var t = 0, i = this._sounds; t < i.length; t++) {
|
|
i[t].setVolume(e)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._onended = function() {
|
|
void 0 !== this._currentIndex && (this._sounds[this._currentIndex].autoplay = !1), this.loop && this.isPlaying ? this.play() : this.isPlaying = !1
|
|
}, e.prototype.pause = function() {
|
|
this.isPaused = !0, void 0 !== this._currentIndex && this._sounds[this._currentIndex].pause()
|
|
}, e.prototype.stop = function() {
|
|
this.isPlaying = !1, void 0 !== this._currentIndex && this._sounds[this._currentIndex].stop()
|
|
}, e.prototype.play = function(e) {
|
|
if (!this.isPaused) {
|
|
this.stop();
|
|
for (var t = Math.random(), i = 0, n = 0; n < this._weights.length; n++)
|
|
if (t <= (i += this._weights[n])) {
|
|
this._currentIndex = n;
|
|
break
|
|
}
|
|
}
|
|
var r = this._sounds[this._currentIndex];
|
|
r.isReady() ? r.play(0, this.isPaused ? void 0 : e) : r.autoplay = !0, this.isPlaying = !0, this.isPaused = !1
|
|
}, e
|
|
}(),
|
|
Pe = i(17),
|
|
Se = function() {
|
|
function e() {
|
|
this._zoomStopsAnimation = !1, this._idleRotationSpeed = .05, this._idleRotationWaitTime = 2e3, this._idleRotationSpinupTime = 2e3, this._isPointerDown = !1, this._lastFrameTime = null, this._lastInteractionTime = -1 / 0, this._cameraRotationSpeed = 0, this._lastFrameRadius = 0
|
|
}
|
|
return Object.defineProperty(e.prototype, "name", {
|
|
get: function() {
|
|
return "AutoRotation"
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "zoomStopsAnimation", {
|
|
get: function() {
|
|
return this._zoomStopsAnimation
|
|
},
|
|
set: function(e) {
|
|
this._zoomStopsAnimation = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "idleRotationSpeed", {
|
|
get: function() {
|
|
return this._idleRotationSpeed
|
|
},
|
|
set: function(e) {
|
|
this._idleRotationSpeed = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "idleRotationWaitTime", {
|
|
get: function() {
|
|
return this._idleRotationWaitTime
|
|
},
|
|
set: function(e) {
|
|
this._idleRotationWaitTime = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "idleRotationSpinupTime", {
|
|
get: function() {
|
|
return this._idleRotationSpinupTime
|
|
},
|
|
set: function(e) {
|
|
this._idleRotationSpinupTime = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "rotationInProgress", {
|
|
get: function() {
|
|
return Math.abs(this._cameraRotationSpeed) > 0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.init = function() {}, e.prototype.attach = function(e) {
|
|
var t = this;
|
|
this._attachedCamera = e;
|
|
var i = this._attachedCamera.getScene();
|
|
this._onPrePointerObservableObserver = i.onPrePointerObservable.add(function(e) {
|
|
e.type !== Pe.a.POINTERDOWN ? e.type === Pe.a.POINTERUP && (t._isPointerDown = !1) : t._isPointerDown = !0
|
|
}), this._onAfterCheckInputsObserver = e.onAfterCheckInputsObservable.add(function() {
|
|
var e = X.a.Now,
|
|
i = 0;
|
|
null != t._lastFrameTime && (i = e - t._lastFrameTime), t._lastFrameTime = e, t._applyUserInteraction();
|
|
var n = e - t._lastInteractionTime - t._idleRotationWaitTime,
|
|
r = Math.max(Math.min(n / t._idleRotationSpinupTime, 1), 0);
|
|
t._cameraRotationSpeed = t._idleRotationSpeed * r, t._attachedCamera && (t._attachedCamera.alpha -= t._cameraRotationSpeed * (i / 1e3))
|
|
})
|
|
}, e.prototype.detach = function() {
|
|
if (this._attachedCamera) {
|
|
var e = this._attachedCamera.getScene();
|
|
this._onPrePointerObservableObserver && e.onPrePointerObservable.remove(this._onPrePointerObservableObserver), this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver), this._attachedCamera = null
|
|
}
|
|
}, e.prototype._userIsZooming = function() {
|
|
return !!this._attachedCamera && 0 !== this._attachedCamera.inertialRadiusOffset
|
|
}, e.prototype._shouldAnimationStopForInteraction = function() {
|
|
if (!this._attachedCamera) return !1;
|
|
var e = !1;
|
|
return this._lastFrameRadius === this._attachedCamera.radius && 0 !== this._attachedCamera.inertialRadiusOffset && (e = !0), this._lastFrameRadius = this._attachedCamera.radius, this._zoomStopsAnimation ? e : this._userIsZooming()
|
|
}, e.prototype._applyUserInteraction = function() {
|
|
this._userIsMoving() && !this._shouldAnimationStopForInteraction() && (this._lastInteractionTime = X.a.Now)
|
|
}, e.prototype._userIsMoving = function() {
|
|
return !!this._attachedCamera && (0 !== this._attachedCamera.inertialAlphaOffset || 0 !== this._attachedCamera.inertialBetaOffset || 0 !== this._attachedCamera.inertialRadiusOffset || 0 !== this._attachedCamera.inertialPanningX || 0 !== this._attachedCamera.inertialPanningY || this._isPointerDown)
|
|
}, e
|
|
}(),
|
|
Ce = function() {
|
|
function e() {
|
|
this.transitionDuration = 450, this.lowerRadiusTransitionRange = 2, this.upperRadiusTransitionRange = -2, this._autoTransitionRange = !1, this._radiusIsAnimating = !1, this._radiusBounceTransition = null, this._animatables = new Array
|
|
}
|
|
return Object.defineProperty(e.prototype, "name", {
|
|
get: function() {
|
|
return "Bouncing"
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "autoTransitionRange", {
|
|
get: function() {
|
|
return this._autoTransitionRange
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
if (this._autoTransitionRange !== e) {
|
|
this._autoTransitionRange = e;
|
|
var i = this._attachedCamera;
|
|
i && (e ? this._onMeshTargetChangedObserver = i.onMeshTargetChangedObservable.add(function(e) {
|
|
if (e) {
|
|
e.computeWorldMatrix(!0);
|
|
var i = e.getBoundingInfo().diagonalLength;
|
|
t.lowerRadiusTransitionRange = .05 * i, t.upperRadiusTransitionRange = .05 * i
|
|
}
|
|
}) : this._onMeshTargetChangedObserver && i.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver))
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.init = function() {}, e.prototype.attach = function(e) {
|
|
var t = this;
|
|
this._attachedCamera = e, this._onAfterCheckInputsObserver = e.onAfterCheckInputsObservable.add(function() {
|
|
t._attachedCamera && (t._isRadiusAtLimit(t._attachedCamera.lowerRadiusLimit) && t._applyBoundRadiusAnimation(t.lowerRadiusTransitionRange), t._isRadiusAtLimit(t._attachedCamera.upperRadiusLimit) && t._applyBoundRadiusAnimation(t.upperRadiusTransitionRange))
|
|
})
|
|
}, e.prototype.detach = function() {
|
|
this._attachedCamera && (this._onAfterCheckInputsObserver && this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver), this._onMeshTargetChangedObserver && this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver), this._attachedCamera = null)
|
|
}, e.prototype._isRadiusAtLimit = function(e) {
|
|
return !!this._attachedCamera && (this._attachedCamera.radius === e && !this._radiusIsAnimating)
|
|
}, e.prototype._applyBoundRadiusAnimation = function(t) {
|
|
var i = this;
|
|
if (this._attachedCamera) {
|
|
this._radiusBounceTransition || (e.EasingFunction.setEasingMode(e.EasingMode), this._radiusBounceTransition = B.CreateAnimation("radius", B.ANIMATIONTYPE_FLOAT, 60, e.EasingFunction)), this._cachedWheelPrecision = this._attachedCamera.wheelPrecision, this._attachedCamera.wheelPrecision = 1 / 0, this._attachedCamera.inertialRadiusOffset = 0, this.stopAllAnimations(), this._radiusIsAnimating = !0;
|
|
var n = B.TransitionTo("radius", this._attachedCamera.radius + t, this._attachedCamera, this._attachedCamera.getScene(), 60, this._radiusBounceTransition, this.transitionDuration, function() {
|
|
return i._clearAnimationLocks()
|
|
});
|
|
n && this._animatables.push(n)
|
|
}
|
|
}, e.prototype._clearAnimationLocks = function() {
|
|
this._radiusIsAnimating = !1, this._attachedCamera && (this._attachedCamera.wheelPrecision = this._cachedWheelPrecision)
|
|
}, e.prototype.stopAllAnimations = function() {
|
|
for (this._attachedCamera && (this._attachedCamera.animations = []); this._animatables.length;) this._animatables[0].onAnimationEnd = null, this._animatables[0].stop(), this._animatables.shift()
|
|
}, e.EasingFunction = new te(.3), e.EasingMode = $.EASINGMODE_EASEOUT, e
|
|
}(),
|
|
Me = function() {
|
|
function e() {
|
|
this._mode = e.FitFrustumSidesMode, this._radiusScale = 1, this._positionScale = .5, this._defaultElevation = .3, this._elevationReturnTime = 1500, this._elevationReturnWaitTime = 1e3, this._zoomStopsAnimation = !1, this._framingTime = 1500, this.autoCorrectCameraLimitsAndSensibility = !0, this._isPointerDown = !1, this._lastInteractionTime = -1 / 0, this._animatables = new Array, this._betaIsAnimating = !1
|
|
}
|
|
return Object.defineProperty(e.prototype, "name", {
|
|
get: function() {
|
|
return "Framing"
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "mode", {
|
|
get: function() {
|
|
return this._mode
|
|
},
|
|
set: function(e) {
|
|
this._mode = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "radiusScale", {
|
|
get: function() {
|
|
return this._radiusScale
|
|
},
|
|
set: function(e) {
|
|
this._radiusScale = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "positionScale", {
|
|
get: function() {
|
|
return this._positionScale
|
|
},
|
|
set: function(e) {
|
|
this._positionScale = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "defaultElevation", {
|
|
get: function() {
|
|
return this._defaultElevation
|
|
},
|
|
set: function(e) {
|
|
this._defaultElevation = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "elevationReturnTime", {
|
|
get: function() {
|
|
return this._elevationReturnTime
|
|
},
|
|
set: function(e) {
|
|
this._elevationReturnTime = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "elevationReturnWaitTime", {
|
|
get: function() {
|
|
return this._elevationReturnWaitTime
|
|
},
|
|
set: function(e) {
|
|
this._elevationReturnWaitTime = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "zoomStopsAnimation", {
|
|
get: function() {
|
|
return this._zoomStopsAnimation
|
|
},
|
|
set: function(e) {
|
|
this._zoomStopsAnimation = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "framingTime", {
|
|
get: function() {
|
|
return this._framingTime
|
|
},
|
|
set: function(e) {
|
|
this._framingTime = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.init = function() {}, e.prototype.attach = function(t) {
|
|
var i = this;
|
|
this._attachedCamera = t;
|
|
var n = this._attachedCamera.getScene();
|
|
e.EasingFunction.setEasingMode(e.EasingMode), this._onPrePointerObservableObserver = n.onPrePointerObservable.add(function(e) {
|
|
e.type !== Pe.a.POINTERDOWN ? e.type === Pe.a.POINTERUP && (i._isPointerDown = !1) : i._isPointerDown = !0
|
|
}), this._onMeshTargetChangedObserver = t.onMeshTargetChangedObservable.add(function(e) {
|
|
e && i.zoomOnMesh(e)
|
|
}), this._onAfterCheckInputsObserver = t.onAfterCheckInputsObservable.add(function() {
|
|
i._applyUserInteraction(), i._maintainCameraAboveGround()
|
|
})
|
|
}, e.prototype.detach = function() {
|
|
if (this._attachedCamera) {
|
|
var e = this._attachedCamera.getScene();
|
|
this._onPrePointerObservableObserver && e.onPrePointerObservable.remove(this._onPrePointerObservableObserver), this._onAfterCheckInputsObserver && this._attachedCamera.onAfterCheckInputsObservable.remove(this._onAfterCheckInputsObserver), this._onMeshTargetChangedObserver && this._attachedCamera.onMeshTargetChangedObservable.remove(this._onMeshTargetChangedObserver), this._attachedCamera = null
|
|
}
|
|
}, e.prototype.zoomOnMesh = function(e, t, i) {
|
|
void 0 === t && (t = !1), void 0 === i && (i = null), e.computeWorldMatrix(!0);
|
|
var n = e.getBoundingInfo().boundingBox;
|
|
this.zoomOnBoundingInfo(n.minimumWorld, n.maximumWorld, t, i)
|
|
}, e.prototype.zoomOnMeshHierarchy = function(e, t, i) {
|
|
void 0 === t && (t = !1), void 0 === i && (i = null), e.computeWorldMatrix(!0);
|
|
var n = e.getHierarchyBoundingVectors(!0);
|
|
this.zoomOnBoundingInfo(n.min, n.max, t, i)
|
|
}, e.prototype.zoomOnMeshesHierarchy = function(e, t, i) {
|
|
void 0 === t && (t = !1), void 0 === i && (i = null);
|
|
for (var n = new o.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), r = new o.x(-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE), s = 0; s < e.length; s++) {
|
|
var a = e[s].getHierarchyBoundingVectors(!0);
|
|
ye.h.CheckExtends(a.min, n, r), ye.h.CheckExtends(a.max, n, r)
|
|
}
|
|
this.zoomOnBoundingInfo(n, r, t, i)
|
|
}, e.prototype.zoomOnBoundingInfo = function(t, i, n, r) {
|
|
var s, a = this;
|
|
if (void 0 === n && (n = !1), void 0 === r && (r = null), this._attachedCamera) {
|
|
var c = t.y,
|
|
l = c + (i.y - c) * this._positionScale,
|
|
u = i.subtract(t).scale(.5);
|
|
if (n) s = new o.x(0, l, 0);
|
|
else {
|
|
var h = t.add(u);
|
|
s = new o.x(h.x, l, h.z)
|
|
}
|
|
this._vectorTransition || (this._vectorTransition = B.CreateAnimation("target", B.ANIMATIONTYPE_VECTOR3, 60, e.EasingFunction)), this._betaIsAnimating = !0;
|
|
var d = B.TransitionTo("target", s, this._attachedCamera, this._attachedCamera.getScene(), 60, this._vectorTransition, this._framingTime);
|
|
d && this._animatables.push(d);
|
|
var f = 0;
|
|
if (this._mode === e.FitFrustumSidesMode) {
|
|
var p = this._calculateLowerRadiusFromModelBoundingSphere(t, i);
|
|
this.autoCorrectCameraLimitsAndSensibility && (this._attachedCamera.lowerRadiusLimit = u.length() + this._attachedCamera.minZ), f = p
|
|
} else this._mode === e.IgnoreBoundsSizeMode && (f = this._calculateLowerRadiusFromModelBoundingSphere(t, i), this.autoCorrectCameraLimitsAndSensibility && null === this._attachedCamera.lowerRadiusLimit && (this._attachedCamera.lowerRadiusLimit = this._attachedCamera.minZ));
|
|
if (this.autoCorrectCameraLimitsAndSensibility) {
|
|
var _ = i.subtract(t).length();
|
|
this._attachedCamera.panningSensibility = 5e3 / _, this._attachedCamera.wheelPrecision = 100 / f
|
|
}
|
|
this._radiusTransition || (this._radiusTransition = B.CreateAnimation("radius", B.ANIMATIONTYPE_FLOAT, 60, e.EasingFunction)), (d = B.TransitionTo("radius", f, this._attachedCamera, this._attachedCamera.getScene(), 60, this._radiusTransition, this._framingTime, function() {
|
|
a.stopAllAnimations(), r && r(), a._attachedCamera && a._attachedCamera.useInputToRestoreState && a._attachedCamera.storeState()
|
|
})) && this._animatables.push(d)
|
|
}
|
|
}, e.prototype._calculateLowerRadiusFromModelBoundingSphere = function(t, i) {
|
|
var n = i.subtract(t).length(),
|
|
r = this._getFrustumSlope(),
|
|
o = .5 * n * this._radiusScale,
|
|
s = o * Math.sqrt(1 + 1 / (r.x * r.x)),
|
|
a = o * Math.sqrt(1 + 1 / (r.y * r.y)),
|
|
c = Math.max(s, a),
|
|
l = this._attachedCamera;
|
|
return l ? (l.lowerRadiusLimit && this._mode === e.IgnoreBoundsSizeMode && (c = c < l.lowerRadiusLimit ? l.lowerRadiusLimit : c), l.upperRadiusLimit && (c = c > l.upperRadiusLimit ? l.upperRadiusLimit : c), c) : 0
|
|
}, e.prototype._maintainCameraAboveGround = function() {
|
|
var t = this;
|
|
if (!(this._elevationReturnTime < 0)) {
|
|
var i = X.a.Now - this._lastInteractionTime,
|
|
n = .5 * Math.PI - this._defaultElevation,
|
|
r = .5 * Math.PI;
|
|
if (this._attachedCamera && !this._betaIsAnimating && this._attachedCamera.beta > r && i >= this._elevationReturnWaitTime) {
|
|
this._betaIsAnimating = !0, this.stopAllAnimations(), this._betaTransition || (this._betaTransition = B.CreateAnimation("beta", B.ANIMATIONTYPE_FLOAT, 60, e.EasingFunction));
|
|
var o = B.TransitionTo("beta", n, this._attachedCamera, this._attachedCamera.getScene(), 60, this._betaTransition, this._elevationReturnTime, function() {
|
|
t._clearAnimationLocks(), t.stopAllAnimations()
|
|
});
|
|
o && this._animatables.push(o)
|
|
}
|
|
}
|
|
}, e.prototype._getFrustumSlope = function() {
|
|
var e = this._attachedCamera;
|
|
if (!e) return o.w.Zero();
|
|
var t = e.getScene().getEngine().getAspectRatio(e),
|
|
i = Math.tan(e.fov / 2),
|
|
n = i * t;
|
|
return new o.w(n, i)
|
|
}, e.prototype._clearAnimationLocks = function() {
|
|
this._betaIsAnimating = !1
|
|
}, e.prototype._applyUserInteraction = function() {
|
|
this.isUserIsMoving && (this._lastInteractionTime = X.a.Now, this.stopAllAnimations(), this._clearAnimationLocks())
|
|
}, e.prototype.stopAllAnimations = function() {
|
|
for (this._attachedCamera && (this._attachedCamera.animations = []); this._animatables.length;) this._animatables[0] && (this._animatables[0].onAnimationEnd = null, this._animatables[0].stop()), this._animatables.shift()
|
|
}, Object.defineProperty(e.prototype, "isUserIsMoving", {
|
|
get: function() {
|
|
return !!this._attachedCamera && (0 !== this._attachedCamera.inertialAlphaOffset || 0 !== this._attachedCamera.inertialBetaOffset || 0 !== this._attachedCamera.inertialRadiusOffset || 0 !== this._attachedCamera.inertialPanningX || 0 !== this._attachedCamera.inertialPanningY || this._isPointerDown)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.EasingFunction = new oe, e.EasingMode = $.EASINGMODE_EASEINOUT, e.IgnoreBoundsSizeMode = 0, e.FitFrustumSidesMode = 1, e
|
|
}(),
|
|
Oe = function() {
|
|
return function(e, t, i, n) {
|
|
void 0 === t && (t = new o.x), void 0 === i && (i = 0), void 0 === n && (n = !1), this.direction = e, this.rotatedDirection = t, this.diff = i, this.ignore = n
|
|
}
|
|
}(),
|
|
Ie = function() {
|
|
function e(e) {
|
|
this.ui = e, this.name = "AttachToBoxBehavior", this.distanceAwayFromFace = .15, this.distanceAwayFromBottomOfFace = .15, this._faceVectors = [new Oe(o.x.Up()), new Oe(o.x.Down()), new Oe(o.x.Left()), new Oe(o.x.Right()), new Oe(o.x.Forward()), new Oe(o.x.Forward().scaleInPlace(-1))], this._tmpMatrix = new o.j, this._tmpVector = new o.x, this._zeroVector = o.x.Zero(), this._lookAtTmpMatrix = new o.j
|
|
}
|
|
return e.prototype.init = function() {}, e.prototype._closestFace = function(e) {
|
|
var t = this;
|
|
return this._faceVectors.forEach(function(i) {
|
|
t._target.rotationQuaternion || (t._target.rotationQuaternion = o.q.RotationYawPitchRoll(t._target.rotation.y, t._target.rotation.x, t._target.rotation.z)), t._target.rotationQuaternion.toRotationMatrix(t._tmpMatrix), o.x.TransformCoordinatesToRef(i.direction, t._tmpMatrix, i.rotatedDirection), i.diff = o.x.GetAngleBetweenVectors(i.rotatedDirection, e, o.x.Cross(i.rotatedDirection, e))
|
|
}), this._faceVectors.reduce(function(e, t) {
|
|
return e.ignore ? t : t.ignore ? e : e.diff < t.diff ? e : t
|
|
}, this._faceVectors[0])
|
|
}, e.prototype._lookAtToRef = function(e, t, i) {
|
|
void 0 === t && (t = new o.x(0, 1, 0)), o.j.LookAtLHToRef(this._zeroVector, e, t, this._lookAtTmpMatrix), this._lookAtTmpMatrix.invert(), o.q.FromRotationMatrixToRef(this._lookAtTmpMatrix, i)
|
|
}, e.prototype.attach = function(e) {
|
|
var t = this;
|
|
this._target = e, this._scene = this._target.getScene(), this._onRenderObserver = this._scene.onBeforeRenderObservable.add(function() {
|
|
if (t._scene.activeCamera) {
|
|
var i = t._scene.activeCamera.position;
|
|
t._scene.activeCamera.devicePosition && (i = t._scene.activeCamera.devicePosition);
|
|
var n = t._closestFace(i.subtract(e.position));
|
|
t._scene.activeCamera.leftCamera ? t._scene.activeCamera.leftCamera.computeWorldMatrix().getRotationMatrixToRef(t._tmpMatrix) : t._scene.activeCamera.computeWorldMatrix().getRotationMatrixToRef(t._tmpMatrix), o.x.TransformCoordinatesToRef(o.x.Up(), t._tmpMatrix, t._tmpVector), t._faceVectors.forEach(function(e) {
|
|
n.direction.x && e.direction.x && (e.ignore = !0), n.direction.y && e.direction.y && (e.ignore = !0), n.direction.z && e.direction.z && (e.ignore = !0)
|
|
});
|
|
var r = t._closestFace(t._tmpVector);
|
|
t._faceVectors.forEach(function(e) {
|
|
e.ignore = !1
|
|
}), t.ui.position.copyFrom(e.position), n.direction.x && (n.rotatedDirection.scaleToRef(e.scaling.x / 2 + t.distanceAwayFromFace, t._tmpVector), t.ui.position.addInPlace(t._tmpVector)), n.direction.y && (n.rotatedDirection.scaleToRef(e.scaling.y / 2 + t.distanceAwayFromFace, t._tmpVector), t.ui.position.addInPlace(t._tmpVector)), n.direction.z && (n.rotatedDirection.scaleToRef(e.scaling.z / 2 + t.distanceAwayFromFace, t._tmpVector), t.ui.position.addInPlace(t._tmpVector)), t.ui.rotationQuaternion || (t.ui.rotationQuaternion = o.q.RotationYawPitchRoll(t.ui.rotation.y, t.ui.rotation.x, t.ui.rotation.z)), n.rotatedDirection.scaleToRef(-1, t._tmpVector), t._lookAtToRef(t._tmpVector, r.rotatedDirection, t.ui.rotationQuaternion), r.direction.x && t.ui.up.scaleToRef(t.distanceAwayFromBottomOfFace - e.scaling.x / 2, t._tmpVector), r.direction.y && t.ui.up.scaleToRef(t.distanceAwayFromBottomOfFace - e.scaling.y / 2, t._tmpVector), r.direction.z && t.ui.up.scaleToRef(t.distanceAwayFromBottomOfFace - e.scaling.z / 2, t._tmpVector), t.ui.position.addInPlace(t._tmpVector)
|
|
}
|
|
})
|
|
}, e.prototype.detach = function() {
|
|
this._scene.onBeforeRenderObservable.remove(this._onRenderObserver)
|
|
}, e
|
|
}(),
|
|
De = function() {
|
|
function e() {
|
|
var e = this;
|
|
this.delay = 0, this.fadeInTime = 300, this._millisecondsPerFrame = 1e3 / 60, this._hovered = !1, this._hoverValue = 0, this._ownerNode = null, this._update = function() {
|
|
if (e._ownerNode) {
|
|
if (e._hoverValue += e._hovered ? e._millisecondsPerFrame : -e._millisecondsPerFrame, e._setAllVisibility(e._ownerNode, (e._hoverValue - e.delay) / e.fadeInTime), e._ownerNode.visibility > 1) return e._setAllVisibility(e._ownerNode, 1), void(e._hoverValue = e.fadeInTime + e.delay);
|
|
if (e._ownerNode.visibility < 0 && (e._setAllVisibility(e._ownerNode, 0), e._hoverValue < 0)) return void(e._hoverValue = 0);
|
|
setTimeout(e._update, e._millisecondsPerFrame)
|
|
}
|
|
}
|
|
}
|
|
return Object.defineProperty(e.prototype, "name", {
|
|
get: function() {
|
|
return "FadeInOut"
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.init = function() {}, e.prototype.attach = function(e) {
|
|
this._ownerNode = e, this._setAllVisibility(this._ownerNode, 0)
|
|
}, e.prototype.detach = function() {
|
|
this._ownerNode = null
|
|
}, e.prototype.fadeIn = function(e) {
|
|
this._hovered = e, this._update()
|
|
}, e.prototype._setAllVisibility = function(e, t) {
|
|
var i = this;
|
|
e.visibility = t, e.getChildMeshes().forEach(function(e) {
|
|
i._setAllVisibility(e, t)
|
|
})
|
|
}, e
|
|
}(),
|
|
Le = i(54),
|
|
we = function() {
|
|
function e() {
|
|
this._startDistance = 0, this._initialScale = new o.x(0, 0, 0), this._targetScale = new o.x(0, 0, 0), this._sceneRenderObserver = null, this._dragBehaviorA = new Le.a({}), this._dragBehaviorA.moveAttached = !1, this._dragBehaviorB = new Le.a({}), this._dragBehaviorB.moveAttached = !1
|
|
}
|
|
return Object.defineProperty(e.prototype, "name", {
|
|
get: function() {
|
|
return "MultiPointerScale"
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.init = function() {}, e.prototype._getCurrentDistance = function() {
|
|
return this._dragBehaviorA.lastDragPosition.subtract(this._dragBehaviorB.lastDragPosition).length()
|
|
}, e.prototype.attach = function(e) {
|
|
var t = this;
|
|
this._ownerNode = e, this._dragBehaviorA.onDragStartObservable.add(function(i) {
|
|
t._dragBehaviorA.dragging && t._dragBehaviorB.dragging && (t._dragBehaviorA.currentDraggingPointerID == t._dragBehaviorB.currentDraggingPointerID ? t._dragBehaviorA.releaseDrag() : (t._initialScale.copyFrom(e.scaling), t._startDistance = t._getCurrentDistance()))
|
|
}), this._dragBehaviorB.onDragStartObservable.add(function(i) {
|
|
t._dragBehaviorA.dragging && t._dragBehaviorB.dragging && (t._dragBehaviorA.currentDraggingPointerID == t._dragBehaviorB.currentDraggingPointerID ? t._dragBehaviorB.releaseDrag() : (t._initialScale.copyFrom(e.scaling), t._startDistance = t._getCurrentDistance()))
|
|
}), [this._dragBehaviorA, this._dragBehaviorB].forEach(function(e) {
|
|
e.onDragObservable.add(function() {
|
|
if (t._dragBehaviorA.dragging && t._dragBehaviorB.dragging) {
|
|
var e = t._getCurrentDistance() / t._startDistance;
|
|
t._initialScale.scaleToRef(e, t._targetScale)
|
|
}
|
|
})
|
|
}), e.addBehavior(this._dragBehaviorA), e.addBehavior(this._dragBehaviorB), this._sceneRenderObserver = e.getScene().onBeforeRenderObservable.add(function() {
|
|
if (t._dragBehaviorA.dragging && t._dragBehaviorB.dragging) {
|
|
var i = t._targetScale.subtract(e.scaling).scaleInPlace(.1);
|
|
i.length() > .01 && e.scaling.addInPlace(i)
|
|
}
|
|
})
|
|
}, e.prototype.detach = function() {
|
|
var e = this;
|
|
this._ownerNode.getScene().onBeforeRenderObservable.remove(this._sceneRenderObserver), [this._dragBehaviorA, this._dragBehaviorB].forEach(function(t) {
|
|
t.onDragStartObservable.clear(), t.onDragObservable.clear(), e._ownerNode.removeBehavior(t)
|
|
})
|
|
}, e
|
|
}(),
|
|
Fe = i(24),
|
|
Ne = i(21),
|
|
Be = i(45),
|
|
Ue = function() {
|
|
function e() {
|
|
this._sceneRenderObserver = null, this._targetPosition = new o.x(0, 0, 0), this._moving = !1, this._startingOrientation = new o.q, this.zDragFactor = 3, this.rotateDraggedObject = !0, this.dragging = !1, this.dragDeltaRatio = .2, this.currentDraggingPointerID = -1, this.detachCameraControls = !0, this.onDragStartObservable = new r.c, this.onDragEndObservable = new r.c
|
|
}
|
|
return Object.defineProperty(e.prototype, "name", {
|
|
get: function() {
|
|
return "SixDofDrag"
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.init = function() {}, e.prototype.attach = function(t) {
|
|
var i = this;
|
|
this._ownerNode = t, this._scene = this._ownerNode.getScene(), e._virtualScene || (e._virtualScene = new W.a(this._scene.getEngine()), e._virtualScene.detachControl(), this._scene.getEngine().scenes.pop());
|
|
var n = null,
|
|
r = new o.x(0, 0, 0);
|
|
this._virtualOriginMesh = new Fe.a("", e._virtualScene), this._virtualOriginMesh.rotationQuaternion = new o.q, this._virtualDragMesh = new Fe.a("", e._virtualScene), this._virtualDragMesh.rotationQuaternion = new o.q;
|
|
var s = null;
|
|
this._pointerObserver = this._scene.onPointerObservable.add(function(e, t) {
|
|
if (e.type == Pe.a.POINTERDOWN) {
|
|
if (!i.dragging && e.pickInfo && e.pickInfo.hit && e.pickInfo.pickedMesh && e.pickInfo.ray && (h = e.pickInfo.pickedMesh, i._ownerNode == h || h.isDescendantOf(i._ownerNode))) {
|
|
i._scene.activeCamera && i._scene.activeCamera.cameraRigMode == Ne.a.RIG_MODE_NONE && e.pickInfo.ray.origin.copyFrom(i._scene.activeCamera.globalPosition), n = i._ownerNode, Be.a._RemoveAndStorePivotPoint(n), r.copyFrom(e.pickInfo.ray.origin), i._virtualOriginMesh.position.copyFrom(e.pickInfo.ray.origin), i._virtualOriginMesh.lookAt(e.pickInfo.ray.origin.add(e.pickInfo.ray.direction)), i._virtualOriginMesh.removeChild(i._virtualDragMesh), n.computeWorldMatrix(), i._virtualDragMesh.position.copyFrom(n.absolutePosition), n.rotationQuaternion || (n.rotationQuaternion = o.q.RotationYawPitchRoll(n.rotation.y, n.rotation.x, n.rotation.z));
|
|
var a = n.parent;
|
|
n.setParent(null), i._virtualDragMesh.rotationQuaternion.copyFrom(n.rotationQuaternion), n.setParent(a), i._virtualOriginMesh.addChild(i._virtualDragMesh), i._targetPosition.copyFrom(i._virtualDragMesh.absolutePosition), i.dragging = !0, i.currentDraggingPointerID = e.event.pointerId, i.detachCameraControls && i._scene.activeCamera && !i._scene.activeCamera.leftCamera && (i._scene.activeCamera.inputs.attachedElement ? (s = i._scene.activeCamera.inputs.attachedElement, i._scene.activeCamera.detachControl(i._scene.activeCamera.inputs.attachedElement)) : s = null), Be.a._RestorePivotPoint(n), i.onDragStartObservable.notifyObservers({})
|
|
}
|
|
} else if (e.type == Pe.a.POINTERUP) i.currentDraggingPointerID == e.event.pointerId && (i.dragging = !1, i._moving = !1, i.currentDraggingPointerID = -1, n = null, i._virtualOriginMesh.removeChild(i._virtualDragMesh), i.detachCameraControls && s && i._scene.activeCamera && !i._scene.activeCamera.leftCamera && i._scene.activeCamera.attachControl(s, !0), i.onDragEndObservable.notifyObservers({}));
|
|
else if (e.type == Pe.a.POINTERMOVE && i.currentDraggingPointerID == e.event.pointerId && i.dragging && e.pickInfo && e.pickInfo.ray && n) {
|
|
var c = i.zDragFactor;
|
|
i._scene.activeCamera && i._scene.activeCamera.cameraRigMode == Ne.a.RIG_MODE_NONE && (e.pickInfo.ray.origin.copyFrom(i._scene.activeCamera.globalPosition), c = 0);
|
|
var l = e.pickInfo.ray.origin.subtract(r);
|
|
r.copyFrom(e.pickInfo.ray.origin);
|
|
var u = -o.x.Dot(l, e.pickInfo.ray.direction);
|
|
i._virtualOriginMesh.addChild(i._virtualDragMesh), i._virtualDragMesh.position.z -= i._virtualDragMesh.position.z < 1 ? u * i.zDragFactor : u * c * i._virtualDragMesh.position.z, i._virtualDragMesh.position.z < 0 && (i._virtualDragMesh.position.z = 0), i._virtualOriginMesh.position.copyFrom(e.pickInfo.ray.origin), i._virtualOriginMesh.lookAt(e.pickInfo.ray.origin.add(e.pickInfo.ray.direction)), i._virtualOriginMesh.removeChild(i._virtualDragMesh), i._targetPosition.copyFrom(i._virtualDragMesh.absolutePosition), n.parent && o.x.TransformCoordinatesToRef(i._targetPosition, o.j.Invert(n.parent.getWorldMatrix()), i._targetPosition), i._moving || i._startingOrientation.copyFrom(i._virtualDragMesh.rotationQuaternion), i._moving = !0
|
|
}
|
|
var h
|
|
});
|
|
var a = new o.q;
|
|
this._sceneRenderObserver = t.getScene().onBeforeRenderObservable.add(function() {
|
|
if (i.dragging && i._moving && n) {
|
|
if (Be.a._RemoveAndStorePivotPoint(n), n.position.addInPlace(i._targetPosition.subtract(n.position).scale(i.dragDeltaRatio)), i.rotateDraggedObject) {
|
|
a.copyFrom(i._startingOrientation), a.x = -a.x, a.y = -a.y, a.z = -a.z, i._virtualDragMesh.rotationQuaternion.multiplyToRef(a, a), o.q.RotationYawPitchRollToRef(a.toEulerAngles("xyz").y, 0, 0, a), a.multiplyToRef(i._startingOrientation, a);
|
|
var e = n.parent;
|
|
(!e || e.scaling && !e.scaling.isNonUniformWithinEpsilon(.001)) && (n.setParent(null), o.q.SlerpToRef(n.rotationQuaternion, a, i.dragDeltaRatio, n.rotationQuaternion), n.setParent(e))
|
|
}
|
|
Be.a._RestorePivotPoint(n)
|
|
}
|
|
})
|
|
}, e.prototype.detach = function() {
|
|
this._scene && this._scene.onPointerObservable.remove(this._pointerObserver), this._ownerNode && this._ownerNode.getScene().onBeforeRenderObservable.remove(this._sceneRenderObserver), this._virtualOriginMesh && this._virtualOriginMesh.dispose(), this._virtualDragMesh && this._virtualDragMesh.dispose(), this.onDragEndObservable.clear(), this.onDragStartObservable.clear()
|
|
}, e
|
|
}(),
|
|
Ve = function() {
|
|
function e(e, t, i) {
|
|
if (this.targetPosition = o.x.Zero(), this.poleTargetPosition = o.x.Zero(), this.poleTargetLocalOffset = o.x.Zero(), this.poleAngle = 0, this.slerpAmount = 1, this._bone1Quat = o.q.Identity(), this._bone1Mat = o.j.Identity(), this._bone2Ang = Math.PI, this._maxAngle = Math.PI, this._rightHandedSystem = !1, this._bendAxis = o.x.Right(), this._slerping = !1, this._adjustRoll = 0, this._bone2 = t, this._bone1 = t.getParent(), this._bone1) {
|
|
this.mesh = e;
|
|
var n = t.getPosition();
|
|
if (t.getAbsoluteTransform().determinant() > 0 && (this._rightHandedSystem = !0, this._bendAxis.x = 0, this._bendAxis.y = 0, this._bendAxis.z = -1, n.x > n.y && n.x > n.z && (this._adjustRoll = .5 * Math.PI, this._bendAxis.z = 1)), this._bone1.length) {
|
|
var r = this._bone1.getScale(),
|
|
s = this._bone2.getScale();
|
|
this._bone1Length = this._bone1.length * r.y * this.mesh.scaling.y, this._bone2Length = this._bone2.length * s.y * this.mesh.scaling.y
|
|
} else if (this._bone1.children[0]) {
|
|
e.computeWorldMatrix(!0);
|
|
var a = this._bone2.children[0].getAbsolutePosition(e),
|
|
c = this._bone2.getAbsolutePosition(e),
|
|
l = this._bone1.getAbsolutePosition(e);
|
|
this._bone1Length = o.x.Distance(a, c), this._bone2Length = o.x.Distance(c, l)
|
|
}
|
|
this._bone1.getRotationMatrixToRef(o.s.WORLD, e, this._bone1Mat), this.maxAngle = Math.PI, i && (i.targetMesh && (this.targetMesh = i.targetMesh, this.targetMesh.computeWorldMatrix(!0)), i.poleTargetMesh ? (this.poleTargetMesh = i.poleTargetMesh, this.poleTargetMesh.computeWorldMatrix(!0)) : i.poleTargetBone ? this.poleTargetBone = i.poleTargetBone : this._bone1.getParent() && (this.poleTargetBone = this._bone1.getParent()), i.poleTargetLocalOffset && this.poleTargetLocalOffset.copyFrom(i.poleTargetLocalOffset), i.poleAngle && (this.poleAngle = i.poleAngle), i.bendAxis && this._bendAxis.copyFrom(i.bendAxis), i.maxAngle && (this.maxAngle = i.maxAngle), i.slerpAmount && (this.slerpAmount = i.slerpAmount))
|
|
}
|
|
}
|
|
return Object.defineProperty(e.prototype, "maxAngle", {
|
|
get: function() {
|
|
return this._maxAngle
|
|
},
|
|
set: function(e) {
|
|
this._setMaxAngle(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._setMaxAngle = function(e) {
|
|
e < 0 && (e = 0), (e > Math.PI || null == e) && (e = Math.PI), this._maxAngle = e;
|
|
var t = this._bone1Length,
|
|
i = this._bone2Length;
|
|
this._maxReach = Math.sqrt(t * t + i * i - 2 * t * i * Math.cos(e))
|
|
}, e.prototype.update = function() {
|
|
var t = this._bone1;
|
|
if (t) {
|
|
var i = this.targetPosition,
|
|
n = this.poleTargetPosition,
|
|
r = e._tmpMats[0],
|
|
s = e._tmpMats[1];
|
|
this.targetMesh && i.copyFrom(this.targetMesh.getAbsolutePosition()), this.poleTargetBone ? this.poleTargetBone.getAbsolutePositionFromLocalToRef(this.poleTargetLocalOffset, this.mesh, n) : this.poleTargetMesh && o.x.TransformCoordinatesToRef(this.poleTargetLocalOffset, this.poleTargetMesh.getWorldMatrix(), n);
|
|
var a = e._tmpVecs[0],
|
|
c = e._tmpVecs[1],
|
|
l = e._tmpVecs[2],
|
|
u = e._tmpVecs[3],
|
|
h = e._tmpVecs[4],
|
|
d = e._tmpQuat;
|
|
t.getAbsolutePositionToRef(this.mesh, a), n.subtractToRef(a, h), 0 == h.x && 0 == h.y && 0 == h.z ? h.y = 1 : h.normalize(), i.subtractToRef(a, u), u.normalize(), o.x.CrossToRef(u, h, c), c.normalize(), o.x.CrossToRef(u, c, l), l.normalize(), o.j.FromXYZAxesToRef(l, u, c, r);
|
|
var f = this._bone1Length,
|
|
p = this._bone2Length,
|
|
_ = o.x.Distance(a, i);
|
|
this._maxReach > 0 && (_ = Math.min(this._maxReach, _));
|
|
var g = (p * p + _ * _ - f * f) / (2 * p * _),
|
|
m = (_ * _ + f * f - p * p) / (2 * _ * f);
|
|
g > 1 && (g = 1), m > 1 && (m = 1), g < -1 && (g = -1), m < -1 && (m = -1);
|
|
var v = Math.acos(g),
|
|
y = Math.acos(m),
|
|
b = -v - y;
|
|
if (this._rightHandedSystem) o.j.RotationYawPitchRollToRef(0, 0, this._adjustRoll, s), s.multiplyToRef(r, r), o.j.RotationAxisToRef(this._bendAxis, y, s), s.multiplyToRef(r, r);
|
|
else {
|
|
var T = e._tmpVecs[5];
|
|
T.copyFrom(this._bendAxis), T.x *= -1, o.j.RotationAxisToRef(T, -y, s), s.multiplyToRef(r, r)
|
|
}
|
|
this.poleAngle && (o.j.RotationAxisToRef(u, this.poleAngle, s), r.multiplyToRef(s, r)), this._bone1 && (this.slerpAmount < 1 ? (this._slerping || o.q.FromRotationMatrixToRef(this._bone1Mat, this._bone1Quat), o.q.FromRotationMatrixToRef(r, d), o.q.SlerpToRef(this._bone1Quat, d, this.slerpAmount, this._bone1Quat), b = this._bone2Ang * (1 - this.slerpAmount) + b * this.slerpAmount, this._bone1.setRotationQuaternion(this._bone1Quat, o.s.WORLD, this.mesh), this._slerping = !0) : (this._bone1.setRotationMatrix(r, o.s.WORLD, this.mesh), this._bone1Mat.copyFrom(r), this._slerping = !1)), this._bone2.setAxisAngle(this._bendAxis, b, o.s.LOCAL), this._bone2Ang = b
|
|
}
|
|
}, e._tmpVecs = [o.x.Zero(), o.x.Zero(), o.x.Zero(), o.x.Zero(), o.x.Zero(), o.x.Zero()], e._tmpQuat = o.q.Identity(), e._tmpMats = [o.j.Identity(), o.j.Identity()], e
|
|
}(),
|
|
Ge = function() {
|
|
function e(e, t, i, n) {
|
|
if (this.upAxis = o.x.Up(), this.upAxisSpace = o.s.LOCAL, this.adjustYaw = 0, this.adjustPitch = 0, this.adjustRoll = 0, this.slerpAmount = 1, this._boneQuat = o.q.Identity(), this._slerping = !1, this._firstFrameSkipped = !1, this._fowardAxis = o.x.Forward(), this.mesh = e, this.bone = t, this.target = i, n && (n.adjustYaw && (this.adjustYaw = n.adjustYaw), n.adjustPitch && (this.adjustPitch = n.adjustPitch), n.adjustRoll && (this.adjustRoll = n.adjustRoll), null != n.maxYaw ? this.maxYaw = n.maxYaw : this.maxYaw = Math.PI, null != n.minYaw ? this.minYaw = n.minYaw : this.minYaw = -Math.PI, null != n.maxPitch ? this.maxPitch = n.maxPitch : this.maxPitch = Math.PI, null != n.minPitch ? this.minPitch = n.minPitch : this.minPitch = -Math.PI, null != n.slerpAmount && (this.slerpAmount = n.slerpAmount), null != n.upAxis && (this.upAxis = n.upAxis), null != n.upAxisSpace && (this.upAxisSpace = n.upAxisSpace), null != n.yawAxis || null != n.pitchAxis)) {
|
|
var r = o.c.Y,
|
|
s = o.c.X;
|
|
null != n.yawAxis && (r = n.yawAxis.clone()).normalize(), null != n.pitchAxis && (s = n.pitchAxis.clone()).normalize();
|
|
var a = o.x.Cross(s, r);
|
|
this._transformYawPitch = o.j.Identity(), o.j.FromXYZAxesToRef(s, r, a, this._transformYawPitch), this._transformYawPitchInv = this._transformYawPitch.clone(), this._transformYawPitch.invert()
|
|
}
|
|
t.getParent() || this.upAxisSpace != o.s.BONE || (this.upAxisSpace = o.s.LOCAL)
|
|
}
|
|
return Object.defineProperty(e.prototype, "minYaw", {
|
|
get: function() {
|
|
return this._minYaw
|
|
},
|
|
set: function(e) {
|
|
this._minYaw = e, this._minYawSin = Math.sin(e), this._minYawCos = Math.cos(e), null != this._maxYaw && (this._midYawConstraint = .5 * this._getAngleDiff(this._minYaw, this._maxYaw) + this._minYaw, this._yawRange = this._maxYaw - this._minYaw)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "maxYaw", {
|
|
get: function() {
|
|
return this._maxYaw
|
|
},
|
|
set: function(e) {
|
|
this._maxYaw = e, this._maxYawSin = Math.sin(e), this._maxYawCos = Math.cos(e), null != this._minYaw && (this._midYawConstraint = .5 * this._getAngleDiff(this._minYaw, this._maxYaw) + this._minYaw, this._yawRange = this._maxYaw - this._minYaw)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "minPitch", {
|
|
get: function() {
|
|
return this._minPitch
|
|
},
|
|
set: function(e) {
|
|
this._minPitch = e, this._minPitchTan = Math.tan(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "maxPitch", {
|
|
get: function() {
|
|
return this._maxPitch
|
|
},
|
|
set: function(e) {
|
|
this._maxPitch = e, this._maxPitchTan = Math.tan(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.update = function() {
|
|
if (this.slerpAmount < 1 && !this._firstFrameSkipped) this._firstFrameSkipped = !0;
|
|
else {
|
|
var t = this.bone,
|
|
i = e._tmpVecs[0];
|
|
t.getAbsolutePositionToRef(this.mesh, i);
|
|
var n = this.target,
|
|
r = e._tmpMats[0],
|
|
s = e._tmpMats[1],
|
|
a = this.mesh,
|
|
c = t.getParent(),
|
|
l = e._tmpVecs[1];
|
|
l.copyFrom(this.upAxis), this.upAxisSpace == o.s.BONE && c ? (this._transformYawPitch && o.x.TransformCoordinatesToRef(l, this._transformYawPitchInv, l), c.getDirectionToRef(l, this.mesh, l)) : this.upAxisSpace == o.s.LOCAL && (a.getDirectionToRef(l, l), 1 == a.scaling.x && 1 == a.scaling.y && 1 == a.scaling.z || l.normalize());
|
|
var u = !1,
|
|
h = !1;
|
|
if (this._maxYaw == Math.PI && this._minYaw == -Math.PI || (u = !0), this._maxPitch == Math.PI && this._minPitch == -Math.PI || (h = !0), u || h) {
|
|
var d = e._tmpMats[2],
|
|
f = e._tmpMats[3];
|
|
if (this.upAxisSpace == o.s.BONE && 1 == l.y && c) c.getRotationMatrixToRef(o.s.WORLD, this.mesh, d);
|
|
else if (this.upAxisSpace != o.s.LOCAL || 1 != l.y || c) {
|
|
(_ = e._tmpVecs[2]).copyFrom(this._fowardAxis), this._transformYawPitch && o.x.TransformCoordinatesToRef(_, this._transformYawPitchInv, _), c ? c.getDirectionToRef(_, this.mesh, _) : a.getDirectionToRef(_, _);
|
|
var p = o.x.Cross(l, _);
|
|
p.normalize();
|
|
var _ = o.x.Cross(p, l);
|
|
o.j.FromXYZAxesToRef(p, l, _, d)
|
|
} else d.copyFrom(a.getWorldMatrix());
|
|
d.invertToRef(f);
|
|
var g = null;
|
|
if (h) {
|
|
var m = e._tmpVecs[3];
|
|
n.subtractToRef(i, m), o.x.TransformCoordinatesToRef(m, f, m), g = Math.sqrt(m.x * m.x + m.z * m.z);
|
|
var v = Math.atan2(m.y, g),
|
|
y = v;
|
|
v > this._maxPitch ? (m.y = this._maxPitchTan * g, y = this._maxPitch) : v < this._minPitch && (m.y = this._minPitchTan * g, y = this._minPitch), v != y && (o.x.TransformCoordinatesToRef(m, d, m), m.addInPlace(i), n = m)
|
|
}
|
|
if (u) {
|
|
m = e._tmpVecs[4];
|
|
n.subtractToRef(i, m), o.x.TransformCoordinatesToRef(m, f, m);
|
|
var b = Math.atan2(m.x, m.z),
|
|
T = b;
|
|
if ((b > this._maxYaw || b < this._minYaw) && (null == g && (g = Math.sqrt(m.x * m.x + m.z * m.z)), this._yawRange > Math.PI ? this._isAngleBetween(b, this._maxYaw, this._midYawConstraint) ? (m.z = this._maxYawCos * g, m.x = this._maxYawSin * g, T = this._maxYaw) : this._isAngleBetween(b, this._midYawConstraint, this._minYaw) && (m.z = this._minYawCos * g, m.x = this._minYawSin * g, T = this._minYaw) : b > this._maxYaw ? (m.z = this._maxYawCos * g, m.x = this._maxYawSin * g, T = this._maxYaw) : b < this._minYaw && (m.z = this._minYawCos * g, m.x = this._minYawSin * g, T = this._minYaw)), this._slerping && this._yawRange > Math.PI) {
|
|
var E = e._tmpVecs[8];
|
|
E.copyFrom(o.c.Z), this._transformYawPitch && o.x.TransformCoordinatesToRef(E, this._transformYawPitchInv, E);
|
|
var A = e._tmpMats[4];
|
|
this._boneQuat.toRotationMatrix(A), this.mesh.getWorldMatrix().multiplyToRef(A, A), o.x.TransformCoordinatesToRef(E, A, E), o.x.TransformCoordinatesToRef(E, f, E);
|
|
var x = Math.atan2(E.x, E.z);
|
|
if (this._getAngleBetween(x, b) > this._getAngleBetween(x, this._midYawConstraint)) {
|
|
null == g && (g = Math.sqrt(m.x * m.x + m.z * m.z));
|
|
var R = this._getAngleBetween(x, this._maxYaw);
|
|
this._getAngleBetween(x, this._minYaw) < R ? (T = x + .75 * Math.PI, m.z = Math.cos(T) * g, m.x = Math.sin(T) * g) : (T = x - .75 * Math.PI, m.z = Math.cos(T) * g, m.x = Math.sin(T) * g)
|
|
}
|
|
}
|
|
b != T && (o.x.TransformCoordinatesToRef(m, d, m), m.addInPlace(i), n = m)
|
|
}
|
|
}
|
|
var P = e._tmpVecs[5],
|
|
S = e._tmpVecs[6],
|
|
C = e._tmpVecs[7],
|
|
M = e._tmpQuat;
|
|
n.subtractToRef(i, P), P.normalize(), o.x.CrossToRef(l, P, S), S.normalize(), o.x.CrossToRef(P, S, C), C.normalize(), o.j.FromXYZAxesToRef(S, C, P, r), 0 === S.x && 0 === S.y && 0 === S.z || 0 === C.x && 0 === C.y && 0 === C.z || 0 === P.x && 0 === P.y && 0 === P.z || ((this.adjustYaw || this.adjustPitch || this.adjustRoll) && (o.j.RotationYawPitchRollToRef(this.adjustYaw, this.adjustPitch, this.adjustRoll, s), s.multiplyToRef(r, r)), this.slerpAmount < 1 ? (this._slerping || this.bone.getRotationQuaternionToRef(o.s.WORLD, this.mesh, this._boneQuat), this._transformYawPitch && this._transformYawPitch.multiplyToRef(r, r), o.q.FromRotationMatrixToRef(r, M), o.q.SlerpToRef(this._boneQuat, M, this.slerpAmount, this._boneQuat), this.bone.setRotationQuaternion(this._boneQuat, o.s.WORLD, this.mesh), this._slerping = !0) : (this._transformYawPitch && this._transformYawPitch.multiplyToRef(r, r), this.bone.setRotationMatrix(r, o.s.WORLD, this.mesh), this._slerping = !1))
|
|
}
|
|
}, e.prototype._getAngleDiff = function(e, t) {
|
|
var i = t - e;
|
|
return (i %= 2 * Math.PI) > Math.PI ? i -= 2 * Math.PI : i < -Math.PI && (i += 2 * Math.PI), i
|
|
}, e.prototype._getAngleBetween = function(e, t) {
|
|
var i = 0;
|
|
return (i = (e = (e %= 2 * Math.PI) < 0 ? e + 2 * Math.PI : e) < (t = (t %= 2 * Math.PI) < 0 ? t + 2 * Math.PI : t) ? t - e : e - t) > Math.PI && (i = 2 * Math.PI - i), i
|
|
}, e.prototype._isAngleBetween = function(e, t, i) {
|
|
if (e = (e %= 2 * Math.PI) < 0 ? e + 2 * Math.PI : e, (t = (t %= 2 * Math.PI) < 0 ? t + 2 * Math.PI : t) < (i = (i %= 2 * Math.PI) < 0 ? i + 2 * Math.PI : i)) {
|
|
if (e > t && e < i) return !0
|
|
} else if (e > i && e < t) return !0;
|
|
return !1
|
|
}, e._tmpVecs = Y.a.BuildArray(10, o.x.Zero), e._tmpQuat = o.q.Identity(), e._tmpMats = Y.a.BuildArray(5, o.j.Identity), e
|
|
}(),
|
|
ke = i(7),
|
|
ze = i(26);
|
|
ge.b.prototype.updateRawTexture = function(e, t, i, n, r, o) {
|
|
if (void 0 === r && (r = null), void 0 === o && (o = ge.b.TEXTURETYPE_UNSIGNED_INT), e) {
|
|
var s = this._getRGBABufferInternalSizedFormat(o, i),
|
|
a = this._getInternalFormat(i),
|
|
c = this._getWebGLTextureType(o);
|
|
this._bindTextureDirectly(this._gl.TEXTURE_2D, e, !0), this._unpackFlipY(void 0 === n || !!n), this._doNotHandleContextLost || (e._bufferView = t, e.format = i, e.type = o, e.invertY = n, e._compression = r), e.width % 4 != 0 && this._gl.pixelStorei(this._gl.UNPACK_ALIGNMENT, 1), r && t ? this._gl.compressedTexImage2D(this._gl.TEXTURE_2D, 0, this.getCaps().s3tc[r], e.width, e.height, 0, t) : this._gl.texImage2D(this._gl.TEXTURE_2D, 0, s, e.width, e.height, 0, a, c, t), e.generateMipMaps && this._gl.generateMipmap(this._gl.TEXTURE_2D), this._bindTextureDirectly(this._gl.TEXTURE_2D, null), e.isReady = !0
|
|
}
|
|
}, ge.b.prototype.createRawTexture = function(e, t, i, n, r, o, s, a, c) {
|
|
void 0 === a && (a = null), void 0 === c && (c = ge.b.TEXTURETYPE_UNSIGNED_INT);
|
|
var l = new ze.a(this, ze.a.DATASOURCE_RAW);
|
|
l.baseWidth = t, l.baseHeight = i, l.width = t, l.height = i, l.format = n, l.generateMipMaps = r, l.samplingMode = s, l.invertY = o, l._compression = a, l.type = c, this._doNotHandleContextLost || (l._bufferView = e), this.updateRawTexture(l, e, n, o, a, c), this._bindTextureDirectly(this._gl.TEXTURE_2D, l, !0);
|
|
var u = this._getSamplingParameters(s, r);
|
|
return this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MAG_FILTER, u.mag), this._gl.texParameteri(this._gl.TEXTURE_2D, this._gl.TEXTURE_MIN_FILTER, u.min), r && this._gl.generateMipmap(this._gl.TEXTURE_2D), this._bindTextureDirectly(this._gl.TEXTURE_2D, null), this._internalTexturesCache.push(l), l
|
|
}, ge.b.prototype.createRawCubeTexture = function(e, t, i, n, r, o, s, a) {
|
|
void 0 === a && (a = null);
|
|
var c = this._gl,
|
|
l = new ze.a(this, ze.a.DATASOURCE_CUBERAW);
|
|
l.isCube = !0, l.format = i, l.type = n, this._doNotHandleContextLost || (l._bufferViewArray = e);
|
|
var u = this._getWebGLTextureType(n),
|
|
h = this._getInternalFormat(i);
|
|
h === c.RGB && (h = c.RGBA), u !== c.FLOAT || this._caps.textureFloatLinearFiltering ? u !== this._gl.HALF_FLOAT_OES || this._caps.textureHalfFloatLinearFiltering ? u !== c.FLOAT || this._caps.textureFloatRender ? u !== c.HALF_FLOAT || this._caps.colorBufferFloat || (r = !1, p.a.Warn("Render to half float textures is not supported. Mipmap generation forced to false.")) : (r = !1, p.a.Warn("Render to float textures is not supported. Mipmap generation forced to false.")) : (r = !1, s = ge.b.TEXTURE_NEAREST_SAMPLINGMODE, p.a.Warn("Half float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively.")) : (r = !1, s = ge.b.TEXTURE_NEAREST_SAMPLINGMODE, p.a.Warn("Float texture filtering is not supported. Mipmap generation and sampling mode are forced to false and TEXTURE_NEAREST_SAMPLINGMODE, respectively."));
|
|
var d = t,
|
|
f = d;
|
|
l.width = d, l.height = f, !this.needPOTTextures || ye.h.IsExponentOfTwo(l.width) && ye.h.IsExponentOfTwo(l.height) || (r = !1), e && this.updateRawCubeTexture(l, e, i, n, o, a), this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, l, !0), e && r && this._gl.generateMipmap(this._gl.TEXTURE_CUBE_MAP);
|
|
var _ = this._getSamplingParameters(s, r);
|
|
return c.texParameteri(c.TEXTURE_CUBE_MAP, c.TEXTURE_MAG_FILTER, _.mag), c.texParameteri(c.TEXTURE_CUBE_MAP, c.TEXTURE_MIN_FILTER, _.min), c.texParameteri(c.TEXTURE_CUBE_MAP, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE), c.texParameteri(c.TEXTURE_CUBE_MAP, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE), this._bindTextureDirectly(c.TEXTURE_CUBE_MAP, null), l.generateMipMaps = r, l
|
|
}, ge.b.prototype.updateRawCubeTexture = function(e, t, i, n, r, o, s) {
|
|
void 0 === o && (o = null), void 0 === s && (s = 0), e._bufferViewArray = t, e.format = i, e.type = n, e.invertY = r, e._compression = o;
|
|
var a = this._gl,
|
|
c = this._getWebGLTextureType(n),
|
|
l = this._getInternalFormat(i),
|
|
u = this._getRGBABufferInternalSizedFormat(n),
|
|
h = !1;
|
|
l === a.RGB && (l = a.RGBA, h = !0), this._bindTextureDirectly(a.TEXTURE_CUBE_MAP, e, !0), this._unpackFlipY(void 0 === r || !!r), e.width % 4 != 0 && a.pixelStorei(a.UNPACK_ALIGNMENT, 1);
|
|
for (var d = 0; d < 6; d++) {
|
|
var f = t[d];
|
|
o ? a.compressedTexImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X + d, s, this.getCaps().s3tc[o], e.width, e.height, 0, f) : (h && (f = this._convertRGBtoRGBATextureData(f, e.width, e.height, n)), a.texImage2D(a.TEXTURE_CUBE_MAP_POSITIVE_X + d, s, u, e.width, e.height, 0, l, c, f))
|
|
}(!this.needPOTTextures || ye.h.IsExponentOfTwo(e.width) && ye.h.IsExponentOfTwo(e.height)) && e.generateMipMaps && 0 === s && this._gl.generateMipmap(this._gl.TEXTURE_CUBE_MAP), this._bindTextureDirectly(this._gl.TEXTURE_CUBE_MAP, null), e.isReady = !0
|
|
}, ge.b.prototype.createRawCubeTextureFromUrl = function(e, t, i, n, r, o, s, a, c, l, u, h) {
|
|
var d = this;
|
|
void 0 === c && (c = null), void 0 === l && (l = null), void 0 === u && (u = ge.b.TEXTURE_TRILINEAR_SAMPLINGMODE), void 0 === h && (h = !1);
|
|
var f = this._gl,
|
|
p = this.createRawCubeTexture(null, i, n, r, !o, h, u);
|
|
t._addPendingData(p), p.url = e, this._internalTexturesCache.push(p);
|
|
return this._loadFile(e, function(e) {
|
|
! function(e) {
|
|
var i = p.width,
|
|
o = s(e);
|
|
if (o) {
|
|
if (a) {
|
|
var l = d._getWebGLTextureType(r),
|
|
u = d._getInternalFormat(n),
|
|
_ = d._getRGBABufferInternalSizedFormat(r),
|
|
g = !1;
|
|
u === f.RGB && (u = f.RGBA, g = !0), d._bindTextureDirectly(f.TEXTURE_CUBE_MAP, p, !0), d._unpackFlipY(!1);
|
|
for (var m = a(o), v = 0; v < m.length; v++)
|
|
for (var y = i >> v, b = 0; b < 6; b++) {
|
|
var T = m[v][b];
|
|
g && (T = d._convertRGBtoRGBATextureData(T, y, y, r)), f.texImage2D(b, v, _, y, y, 0, u, l, T)
|
|
}
|
|
d._bindTextureDirectly(f.TEXTURE_CUBE_MAP, null)
|
|
} else d.updateRawCubeTexture(p, o, n, r, h);
|
|
p.isReady = !0, t._removePendingData(p), c && c()
|
|
}
|
|
}(e)
|
|
}, void 0, t.offlineProvider, !0, function(e, i) {
|
|
t._removePendingData(p), l && e && l(e.status + " " + e.statusText, i)
|
|
}), p
|
|
}, ge.b.prototype.createRawTexture3D = function(e, t, i, n, r, o, s, a, c, l) {
|
|
void 0 === c && (c = null), void 0 === l && (l = ge.b.TEXTURETYPE_UNSIGNED_INT);
|
|
var u = new ze.a(this, ze.a.DATASOURCE_RAW3D);
|
|
u.baseWidth = t, u.baseHeight = i, u.baseDepth = n, u.width = t, u.height = i, u.depth = n, u.format = r, u.type = l, u.generateMipMaps = o, u.samplingMode = a, u.is3D = !0, this._doNotHandleContextLost || (u._bufferView = e), this.updateRawTexture3D(u, e, r, s, c, l), this._bindTextureDirectly(this._gl.TEXTURE_3D, u, !0);
|
|
var h = this._getSamplingParameters(a, o);
|
|
return this._gl.texParameteri(this._gl.TEXTURE_3D, this._gl.TEXTURE_MAG_FILTER, h.mag), this._gl.texParameteri(this._gl.TEXTURE_3D, this._gl.TEXTURE_MIN_FILTER, h.min), o && this._gl.generateMipmap(this._gl.TEXTURE_3D), this._bindTextureDirectly(this._gl.TEXTURE_3D, null), this._internalTexturesCache.push(u), u
|
|
}, ge.b.prototype.updateRawTexture3D = function(e, t, i, n, r, o) {
|
|
void 0 === r && (r = null), void 0 === o && (o = ge.b.TEXTURETYPE_UNSIGNED_INT);
|
|
var s = this._getWebGLTextureType(o),
|
|
a = this._getInternalFormat(i),
|
|
c = this._getRGBABufferInternalSizedFormat(o, i);
|
|
this._bindTextureDirectly(this._gl.TEXTURE_3D, e, !0), this._unpackFlipY(void 0 === n || !!n), this._doNotHandleContextLost || (e._bufferView = t, e.format = i, e.invertY = n, e._compression = r), e.width % 4 != 0 && this._gl.pixelStorei(this._gl.UNPACK_ALIGNMENT, 1), r && t ? this._gl.compressedTexImage3D(this._gl.TEXTURE_3D, 0, this.getCaps().s3tc[r], e.width, e.height, e.depth, 0, t) : this._gl.texImage3D(this._gl.TEXTURE_3D, 0, c, e.width, e.height, e.depth, 0, a, s, t), e.generateMipMaps && this._gl.generateMipmap(this._gl.TEXTURE_3D), this._bindTextureDirectly(this._gl.TEXTURE_3D, null), e.isReady = !0
|
|
};
|
|
var je = function(e) {
|
|
function t(t, i, n, r, o, s, a, c, l) {
|
|
void 0 === s && (s = !0), void 0 === a && (a = !1), void 0 === c && (c = _.a.TEXTURE_TRILINEAR_SAMPLINGMODE), void 0 === l && (l = _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
var u = e.call(this, null, o, !s, a) || this;
|
|
return u.format = r, u._engine = o.getEngine(), u._texture = o.getEngine().createRawTexture(t, i, n, r, s, a, c, null, l), u.wrapU = ke.a.CLAMP_ADDRESSMODE, u.wrapV = ke.a.CLAMP_ADDRESSMODE, u
|
|
}
|
|
return l.d(t, e), t.prototype.update = function(e) {
|
|
this._engine.updateRawTexture(this._texture, e, this._texture.format, this._texture.invertY, null, this._texture.type)
|
|
}, t.CreateLuminanceTexture = function(e, i, n, r, o, s, a) {
|
|
return void 0 === o && (o = !0), void 0 === s && (s = !1), void 0 === a && (a = _.a.TEXTURE_TRILINEAR_SAMPLINGMODE), new t(e, i, n, _.a.TEXTUREFORMAT_LUMINANCE, r, o, s, a)
|
|
}, t.CreateLuminanceAlphaTexture = function(e, i, n, r, o, s, a) {
|
|
return void 0 === o && (o = !0), void 0 === s && (s = !1), void 0 === a && (a = _.a.TEXTURE_TRILINEAR_SAMPLINGMODE), new t(e, i, n, _.a.TEXTUREFORMAT_LUMINANCE_ALPHA, r, o, s, a)
|
|
}, t.CreateAlphaTexture = function(e, i, n, r, o, s, a) {
|
|
return void 0 === o && (o = !0), void 0 === s && (s = !1), void 0 === a && (a = _.a.TEXTURE_TRILINEAR_SAMPLINGMODE), new t(e, i, n, _.a.TEXTUREFORMAT_ALPHA, r, o, s, a)
|
|
}, t.CreateRGBTexture = function(e, i, n, r, o, s, a, c) {
|
|
return void 0 === o && (o = !0), void 0 === s && (s = !1), void 0 === a && (a = _.a.TEXTURE_TRILINEAR_SAMPLINGMODE), void 0 === c && (c = _.a.TEXTURETYPE_UNSIGNED_INT), new t(e, i, n, _.a.TEXTUREFORMAT_RGB, r, o, s, a, c)
|
|
}, t.CreateRGBATexture = function(e, i, n, r, o, s, a, c) {
|
|
return void 0 === o && (o = !0), void 0 === s && (s = !1), void 0 === a && (a = _.a.TEXTURE_TRILINEAR_SAMPLINGMODE), void 0 === c && (c = _.a.TEXTURETYPE_UNSIGNED_INT), new t(e, i, n, _.a.TEXTUREFORMAT_RGBA, r, o, s, a, c)
|
|
}, t.CreateRTexture = function(e, i, n, r, o, s, a, c) {
|
|
return void 0 === o && (o = !0), void 0 === s && (s = !1), void 0 === a && (a = ke.a.TRILINEAR_SAMPLINGMODE), void 0 === c && (c = _.a.TEXTURETYPE_FLOAT), new t(e, i, n, _.a.TEXTUREFORMAT_R, r, o, s, a, c)
|
|
}, t
|
|
}(ke.a),
|
|
He = function() {
|
|
function e(e, t, i) {
|
|
this.name = e, this.id = t, this.bones = new Array, this.needInitialSkinMatrix = !1, this.overrideMesh = null, this._isDirty = !0, this._meshesWithPoseMatrix = new Array, this._identity = o.j.Identity(), this._ranges = {}, this._lastAbsoluteTransformsUpdateId = -1, this._canUseTextureForBones = !1, this._uniqueId = 0, this._numBonesWithLinkedTransformNode = 0, this._hasWaitingData = null, this.doNotSerialize = !1, this._useTextureToStoreBoneMatrices = !0, this._animationPropertiesOverride = null, this.onBeforeComputeObservable = new r.c, this.bones = [], this._scene = i || P.a.LastCreatedScene, this._uniqueId = this._scene.getUniqueId(), this._scene.addSkeleton(this), this._isDirty = !0;
|
|
var n = this._scene.getEngine().getCaps();
|
|
this._canUseTextureForBones = n.textureFloat && n.maxVertexTextureImageUnits > 0
|
|
}
|
|
return Object.defineProperty(e.prototype, "useTextureToStoreBoneMatrices", {
|
|
get: function() {
|
|
return this._useTextureToStoreBoneMatrices
|
|
},
|
|
set: function(e) {
|
|
this._useTextureToStoreBoneMatrices = e, this._markAsDirty()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "animationPropertiesOverride", {
|
|
get: function() {
|
|
return this._animationPropertiesOverride ? this._animationPropertiesOverride : this._scene.animationPropertiesOverride
|
|
},
|
|
set: function(e) {
|
|
this._animationPropertiesOverride = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isUsingTextureForMatrices", {
|
|
get: function() {
|
|
return this.useTextureToStoreBoneMatrices && this._canUseTextureForBones && !this.needInitialSkinMatrix
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "uniqueId", {
|
|
get: function() {
|
|
return this._uniqueId
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getClassName = function() {
|
|
return "Skeleton"
|
|
}, e.prototype.getChildren = function() {
|
|
return this.bones.filter(function(e) {
|
|
return !e.getParent()
|
|
})
|
|
}, e.prototype.getTransformMatrices = function(e) {
|
|
return this.needInitialSkinMatrix && e._bonesTransformMatrices ? e._bonesTransformMatrices : (this._transformMatrices || this.prepare(), this._transformMatrices)
|
|
}, e.prototype.getTransformMatrixTexture = function() {
|
|
return this._transformMatrixTexture
|
|
}, e.prototype.getScene = function() {
|
|
return this._scene
|
|
}, e.prototype.toString = function(e) {
|
|
var t = "Name: " + this.name + ", nBones: " + this.bones.length;
|
|
if (t += ", nAnimationRanges: " + (this._ranges ? Object.keys(this._ranges).length : "none"), e) {
|
|
t += ", Ranges: {";
|
|
var i = !0;
|
|
for (var n in this._ranges) i && (t += ", ", i = !1), t += n;
|
|
t += "}"
|
|
}
|
|
return t
|
|
}, e.prototype.getBoneIndexByName = function(e) {
|
|
for (var t = 0, i = this.bones.length; t < i; t++)
|
|
if (this.bones[t].name === e) return t;
|
|
return -1
|
|
}, e.prototype.createAnimationRange = function(e, t, i) {
|
|
if (!this._ranges[e]) {
|
|
this._ranges[e] = new w(e, t, i);
|
|
for (var n = 0, r = this.bones.length; n < r; n++) this.bones[n].animations[0] && this.bones[n].animations[0].createRange(e, t, i)
|
|
}
|
|
}, e.prototype.deleteAnimationRange = function(e, t) {
|
|
void 0 === t && (t = !0);
|
|
for (var i = 0, n = this.bones.length; i < n; i++) this.bones[i].animations[0] && this.bones[i].animations[0].deleteRange(e, t);
|
|
this._ranges[e] = null
|
|
}, e.prototype.getAnimationRange = function(e) {
|
|
return this._ranges[e]
|
|
}, e.prototype.getAnimationRanges = function() {
|
|
var e, t = [];
|
|
for (e in this._ranges) t.push(this._ranges[e]);
|
|
return t
|
|
}, e.prototype.copyAnimationRange = function(e, t, i) {
|
|
if (void 0 === i && (i = !1), this._ranges[t] || !e.getAnimationRange(t)) return !1;
|
|
var n, r, o = !0,
|
|
s = this._getHighestAnimationFrame() + 1,
|
|
a = {},
|
|
c = e.bones;
|
|
for (r = 0, n = c.length; r < n; r++) a[c[r].name] = c[r];
|
|
this.bones.length !== c.length && (p.a.Warn("copyAnimationRange: this rig has " + this.bones.length + " bones, while source as " + c.length), o = !1);
|
|
var l = i && this.dimensionsAtRest && e.dimensionsAtRest ? this.dimensionsAtRest.divide(e.dimensionsAtRest) : null;
|
|
for (r = 0, n = this.bones.length; r < n; r++) {
|
|
var u = this.bones[r].name,
|
|
h = a[u];
|
|
h ? o = o && this.bones[r].copyAnimationRange(h, t, s, i, l) : (p.a.Warn("copyAnimationRange: not same rig, missing source bone " + u), o = !1)
|
|
}
|
|
var d = e.getAnimationRange(t);
|
|
return d && (this._ranges[t] = new w(t, d.from + s, d.to + s)), o
|
|
}, e.prototype.returnToRest = function() {
|
|
for (var e = 0; e < this.bones.length; e++) this.bones[e].returnToRest()
|
|
}, e.prototype._getHighestAnimationFrame = function() {
|
|
for (var e = 0, t = 0, i = this.bones.length; t < i; t++)
|
|
if (this.bones[t].animations[0]) {
|
|
var n = this.bones[t].animations[0].getHighestFrame();
|
|
e < n && (e = n)
|
|
} return e
|
|
}, e.prototype.beginAnimation = function(e, t, i, n) {
|
|
var r = this.getAnimationRange(e);
|
|
return r ? this._scene.beginAnimation(this, r.from, r.to, t, i, n) : null
|
|
}, e.prototype._markAsDirty = function() {
|
|
this._isDirty = !0
|
|
}, e.prototype._registerMeshWithPoseMatrix = function(e) {
|
|
this._meshesWithPoseMatrix.push(e)
|
|
}, e.prototype._unregisterMeshWithPoseMatrix = function(e) {
|
|
var t = this._meshesWithPoseMatrix.indexOf(e);
|
|
t > -1 && this._meshesWithPoseMatrix.splice(t, 1)
|
|
}, e.prototype._computeTransformMatrices = function(e, t) {
|
|
this.onBeforeComputeObservable.notifyObservers(this);
|
|
for (var i = 0; i < this.bones.length; i++) {
|
|
var n = this.bones[i];
|
|
n._childUpdateId++;
|
|
var r = n.getParent();
|
|
if (r ? n.getLocalMatrix().multiplyToRef(r.getWorldMatrix(), n.getWorldMatrix()) : t ? n.getLocalMatrix().multiplyToRef(t, n.getWorldMatrix()) : n.getWorldMatrix().copyFrom(n.getLocalMatrix()), -1 !== n._index) {
|
|
var o = null === n._index ? i : n._index;
|
|
n.getInvertedAbsoluteTransform().multiplyToArray(n.getWorldMatrix(), e, 16 * o)
|
|
}
|
|
}
|
|
this._identity.copyToArray(e, 16 * this.bones.length)
|
|
}, e.prototype.prepare = function() {
|
|
if (this._numBonesWithLinkedTransformNode > 0)
|
|
for (var e = 0, t = this.bones; e < t.length; e++) {
|
|
var i = t[e];
|
|
i._linkedTransformNode && (i._linkedTransformNode.computeWorldMatrix(), i._matrix = i._linkedTransformNode._localMatrix, i.markAsDirty())
|
|
}
|
|
if (this._isDirty) {
|
|
if (this.needInitialSkinMatrix)
|
|
for (var n = 0; n < this._meshesWithPoseMatrix.length; n++) {
|
|
var r = this._meshesWithPoseMatrix[n],
|
|
s = r.getPoseMatrix();
|
|
if (r._bonesTransformMatrices && r._bonesTransformMatrices.length === 16 * (this.bones.length + 1) || (r._bonesTransformMatrices = new Float32Array(16 * (this.bones.length + 1))), this._synchronizedWithMesh !== r) {
|
|
this._synchronizedWithMesh = r;
|
|
for (var a = 0; a < this.bones.length; a++) {
|
|
var c = this.bones[a];
|
|
if (!c.getParent()) c.getBaseMatrix().multiplyToRef(s, o.t.Matrix[1]), c._updateDifferenceMatrix(o.t.Matrix[1])
|
|
}
|
|
}
|
|
this._computeTransformMatrices(r._bonesTransformMatrices, s)
|
|
} else this._transformMatrices && this._transformMatrices.length === 16 * (this.bones.length + 1) || (this._transformMatrices = new Float32Array(16 * (this.bones.length + 1)), this.isUsingTextureForMatrices && (this._transformMatrixTexture && this._transformMatrixTexture.dispose(), this._transformMatrixTexture = je.CreateRGBATexture(this._transformMatrices, 4 * (this.bones.length + 1), 1, this._scene, !1, !1, _.a.TEXTURE_NEAREST_SAMPLINGMODE, _.a.TEXTURETYPE_FLOAT))), this._computeTransformMatrices(this._transformMatrices, null), this.isUsingTextureForMatrices && this._transformMatrixTexture && this._transformMatrixTexture.update(this._transformMatrices);
|
|
this._isDirty = !1, this._scene._activeBones.addCount(this.bones.length, !1)
|
|
}
|
|
}, e.prototype.getAnimatables = function() {
|
|
if (!this._animatables || this._animatables.length !== this.bones.length) {
|
|
this._animatables = [];
|
|
for (var e = 0; e < this.bones.length; e++) this._animatables.push(this.bones[e])
|
|
}
|
|
return this._animatables
|
|
}, e.prototype.clone = function(t, i) {
|
|
var n = new e(t, i || t, this._scene);
|
|
n.needInitialSkinMatrix = this.needInitialSkinMatrix;
|
|
for (var r = 0; r < this.bones.length; r++) {
|
|
var o = this.bones[r],
|
|
s = null,
|
|
a = o.getParent();
|
|
if (a) {
|
|
var c = this.bones.indexOf(a);
|
|
s = n.bones[c]
|
|
}
|
|
var l = new K(o.name, n, s, o.getBaseMatrix().clone(), o.getRestPose().clone());
|
|
S.a.DeepCopy(o.animations, l.animations)
|
|
}
|
|
if (this._ranges)
|
|
for (var u in n._ranges = {}, this._ranges) {
|
|
var h = this._ranges[u];
|
|
h && (n._ranges[u] = h.clone())
|
|
}
|
|
return this._isDirty = !0, n
|
|
}, e.prototype.enableBlending = function(e) {
|
|
void 0 === e && (e = .01), this.bones.forEach(function(t) {
|
|
t.animations.forEach(function(t) {
|
|
t.enableBlending = !0, t.blendingSpeed = e
|
|
})
|
|
})
|
|
}, e.prototype.dispose = function() {
|
|
this._meshesWithPoseMatrix = [], this.getScene().stopAnimation(this), this.getScene().removeSkeleton(this), this._transformMatrixTexture && (this._transformMatrixTexture.dispose(), this._transformMatrixTexture = null)
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
e.name = this.name, e.id = this.id, this.dimensionsAtRest && (e.dimensionsAtRest = this.dimensionsAtRest.asArray()), e.bones = [], e.needInitialSkinMatrix = this.needInitialSkinMatrix;
|
|
for (var t = 0; t < this.bones.length; t++) {
|
|
var i = this.bones[t],
|
|
n = i.getParent(),
|
|
r = {
|
|
parentBoneIndex: n ? this.bones.indexOf(n) : -1,
|
|
name: i.name,
|
|
matrix: i.getBaseMatrix().toArray(),
|
|
rest: i.getRestPose().toArray()
|
|
};
|
|
for (var o in e.bones.push(r), i.length && (r.length = i.length), i.metadata && (r.metadata = i.metadata), i.animations && i.animations.length > 0 && (r.animation = i.animations[0].serialize()), e.ranges = [], this._ranges) {
|
|
var s = this._ranges[o];
|
|
if (s) {
|
|
var a = {};
|
|
a.name = o, a.from = s.from, a.to = s.to, e.ranges.push(a)
|
|
}
|
|
}
|
|
}
|
|
return e
|
|
}, e.Parse = function(t, i) {
|
|
var n, r = new e(t.name, t.id, i);
|
|
for (t.dimensionsAtRest && (r.dimensionsAtRest = o.x.FromArray(t.dimensionsAtRest)), r.needInitialSkinMatrix = t.needInitialSkinMatrix, n = 0; n < t.bones.length; n++) {
|
|
var s = t.bones[n],
|
|
a = null;
|
|
s.parentBoneIndex > -1 && (a = r.bones[s.parentBoneIndex]);
|
|
var c = s.rest ? o.j.FromArray(s.rest) : null,
|
|
l = new K(s.name, r, a, o.j.FromArray(s.matrix), c);
|
|
void 0 !== s.id && null !== s.id && (l.id = s.id), s.length && (l.length = s.length), s.metadata && (l.metadata = s.metadata), s.animation && l.animations.push(B.Parse(s.animation)), void 0 !== s.linkedTransformNodeId && null !== s.linkedTransformNodeId && (r._hasWaitingData = !0, l._waitingTransformNodeId = s.linkedTransformNodeId)
|
|
}
|
|
if (t.ranges)
|
|
for (n = 0; n < t.ranges.length; n++) {
|
|
var u = t.ranges[n];
|
|
r.createAnimationRange(u.name, u.from, u.to)
|
|
}
|
|
return r
|
|
}, e.prototype.computeAbsoluteTransforms = function(e) {
|
|
void 0 === e && (e = !1);
|
|
var t = this._scene.getRenderId();
|
|
(this._lastAbsoluteTransformsUpdateId != t || e) && (this.bones[0].computeAbsoluteTransforms(), this._lastAbsoluteTransformsUpdateId = t)
|
|
}, e.prototype.getPoseMatrix = function() {
|
|
var e = null;
|
|
return this._meshesWithPoseMatrix.length > 0 && (e = this._meshesWithPoseMatrix[0].getPoseMatrix()), e
|
|
}, e.prototype.sortBones = function() {
|
|
for (var e = new Array, t = new Array(this.bones.length), i = 0; i < this.bones.length; i++) this._sortBones(i, e, t);
|
|
this.bones = e
|
|
}, e.prototype._sortBones = function(e, t, i) {
|
|
if (!i[e]) {
|
|
i[e] = !0;
|
|
var n = this.bones[e];
|
|
void 0 === n._index && (n._index = e);
|
|
var r = n.getParent();
|
|
r && this._sortBones(this.bones.indexOf(r), t, i), t.push(n)
|
|
}
|
|
}, e
|
|
}(),
|
|
We = {},
|
|
Xe = function() {
|
|
function e(e) {
|
|
this.attached = {}, this.camera = e, this.checkInputs = function() {}
|
|
}
|
|
return e.prototype.add = function(e) {
|
|
var t = e.getSimpleName();
|
|
this.attached[t] ? p.a.Warn("camera input of type " + t + " already exists on camera") : (this.attached[t] = e, e.camera = this.camera, e.checkInputs && (this.checkInputs = this._addCheckInputs(e.checkInputs.bind(e))), this.attachedElement && e.attachControl(this.attachedElement))
|
|
}, e.prototype.remove = function(e) {
|
|
for (var t in this.attached) {
|
|
var i = this.attached[t];
|
|
i === e && (i.detachControl(this.attachedElement), i.camera = null, delete this.attached[t], this.rebuildInputCheck())
|
|
}
|
|
}, e.prototype.removeByType = function(e) {
|
|
for (var t in this.attached) {
|
|
var i = this.attached[t];
|
|
i.getClassName() === e && (i.detachControl(this.attachedElement), i.camera = null, delete this.attached[t], this.rebuildInputCheck())
|
|
}
|
|
}, e.prototype._addCheckInputs = function(e) {
|
|
var t = this.checkInputs;
|
|
return function() {
|
|
t(), e()
|
|
}
|
|
}, e.prototype.attachInput = function(e) {
|
|
this.attachedElement && e.attachControl(this.attachedElement, this.noPreventDefault)
|
|
}, e.prototype.attachElement = function(e, t) {
|
|
if (void 0 === t && (t = !1), !this.attachedElement)
|
|
for (var i in t = !Ne.a.ForceAttachControlToAlwaysPreventDefault && t, this.attachedElement = e, this.noPreventDefault = t, this.attached) this.attached[i].attachControl(e, t)
|
|
}, e.prototype.detachElement = function(e, t) {
|
|
if (void 0 === t && (t = !1), this.attachedElement === e) {
|
|
for (var i in this.attached) this.attached[i].detachControl(e), t && (this.attached[i].camera = null);
|
|
this.attachedElement = null
|
|
}
|
|
}, e.prototype.rebuildInputCheck = function() {
|
|
for (var e in this.checkInputs = function() {}, this.attached) {
|
|
var t = this.attached[e];
|
|
t.checkInputs && (this.checkInputs = this._addCheckInputs(t.checkInputs.bind(t)))
|
|
}
|
|
}, e.prototype.clear = function() {
|
|
this.attachedElement && this.detachElement(this.attachedElement, !0), this.attached = {}, this.attachedElement = null, this.checkInputs = function() {}
|
|
}, e.prototype.serialize = function(e) {
|
|
var t = {};
|
|
for (var i in this.attached) {
|
|
var n = this.attached[i],
|
|
r = L.a.Serialize(n);
|
|
t[n.getClassName()] = r
|
|
}
|
|
e.inputsmgr = t
|
|
}, e.prototype.parse = function(e) {
|
|
var t = e.inputsmgr;
|
|
if (t)
|
|
for (var i in this.clear(), t) {
|
|
if (o = We[i]) {
|
|
var n = t[i],
|
|
r = L.a.Parse(function() {
|
|
return new o
|
|
}, n, null);
|
|
this.add(r)
|
|
}
|
|
} else
|
|
for (var i in this.attached) {
|
|
var o;
|
|
if (o = We[this.attached[i].getClassName()]) {
|
|
r = L.a.Parse(function() {
|
|
return new o
|
|
}, e, null);
|
|
this.remove(this.attached[i]), this.add(r)
|
|
}
|
|
}
|
|
}, e
|
|
}(),
|
|
Ye = function() {
|
|
return function(e, t) {
|
|
this.x = e, this.y = t
|
|
}
|
|
}(),
|
|
Ke = function() {
|
|
function e(t, i, n, r, o, s, a) {
|
|
void 0 === r && (r = 0), void 0 === o && (o = 1), void 0 === s && (s = 2), void 0 === a && (a = 3), this.id = t, this.index = i, this.browserGamepad = n, this._leftStick = {
|
|
x: 0,
|
|
y: 0
|
|
}, this._rightStick = {
|
|
x: 0,
|
|
y: 0
|
|
}, this._isConnected = !0, this._invertLeftStickY = !1, this.type = e.GAMEPAD, this._leftStickAxisX = r, this._leftStickAxisY = o, this._rightStickAxisX = s, this._rightStickAxisY = a, this.browserGamepad.axes.length >= 2 && (this._leftStick = {
|
|
x: this.browserGamepad.axes[this._leftStickAxisX],
|
|
y: this.browserGamepad.axes[this._leftStickAxisY]
|
|
}), this.browserGamepad.axes.length >= 4 && (this._rightStick = {
|
|
x: this.browserGamepad.axes[this._rightStickAxisX],
|
|
y: this.browserGamepad.axes[this._rightStickAxisY]
|
|
})
|
|
}
|
|
return Object.defineProperty(e.prototype, "isConnected", {
|
|
get: function() {
|
|
return this._isConnected
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.onleftstickchanged = function(e) {
|
|
this._onleftstickchanged = e
|
|
}, e.prototype.onrightstickchanged = function(e) {
|
|
this._onrightstickchanged = e
|
|
}, Object.defineProperty(e.prototype, "leftStick", {
|
|
get: function() {
|
|
return this._leftStick
|
|
},
|
|
set: function(e) {
|
|
!this._onleftstickchanged || this._leftStick.x === e.x && this._leftStick.y === e.y || this._onleftstickchanged(e), this._leftStick = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "rightStick", {
|
|
get: function() {
|
|
return this._rightStick
|
|
},
|
|
set: function(e) {
|
|
!this._onrightstickchanged || this._rightStick.x === e.x && this._rightStick.y === e.y || this._onrightstickchanged(e), this._rightStick = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.update = function() {
|
|
this._leftStick && (this.leftStick = {
|
|
x: this.browserGamepad.axes[this._leftStickAxisX],
|
|
y: this.browserGamepad.axes[this._leftStickAxisY]
|
|
}, this._invertLeftStickY && (this.leftStick.y *= -1)), this._rightStick && (this.rightStick = {
|
|
x: this.browserGamepad.axes[this._rightStickAxisX],
|
|
y: this.browserGamepad.axes[this._rightStickAxisY]
|
|
})
|
|
}, e.prototype.dispose = function() {}, e.GAMEPAD = 0, e.GENERIC = 1, e.XBOX = 2, e.POSE_ENABLED = 3, e
|
|
}(),
|
|
Qe = function(e) {
|
|
function t(t, i, n) {
|
|
var o = e.call(this, t, i, n) || this;
|
|
return o.onButtonDownObservable = new r.c, o.onButtonUpObservable = new r.c, o.type = Ke.GENERIC, o._buttons = new Array(n.buttons.length), o
|
|
}
|
|
return l.d(t, e), t.prototype.onbuttondown = function(e) {
|
|
this._onbuttondown = e
|
|
}, t.prototype.onbuttonup = function(e) {
|
|
this._onbuttonup = e
|
|
}, t.prototype._setButtonValue = function(e, t, i) {
|
|
return e !== t && (1 === e && (this._onbuttondown && this._onbuttondown(i), this.onButtonDownObservable.notifyObservers(i)), 0 === e && (this._onbuttonup && this._onbuttonup(i), this.onButtonUpObservable.notifyObservers(i))), e
|
|
}, t.prototype.update = function() {
|
|
e.prototype.update.call(this);
|
|
for (var t = 0; t < this._buttons.length; t++) this._buttons[t] = this._setButtonValue(this.browserGamepad.buttons[t].value, this._buttons[t], t)
|
|
}, t.prototype.dispose = function() {
|
|
e.prototype.dispose.call(this), this.onButtonDownObservable.clear(), this.onButtonUpObservable.clear()
|
|
}, t
|
|
}(Ke),
|
|
qe = function() {
|
|
function e() {
|
|
this.gamepadRotationSensibility = 80, this.gamepadMoveSensibility = 40
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this,
|
|
n = this.camera.getScene().gamepadManager;
|
|
this._onGamepadConnectedObserver = n.onGamepadConnectedObservable.add(function(e) {
|
|
e.type !== Ke.POSE_ENABLED && (i.gamepad && e.type !== Ke.XBOX || (i.gamepad = e))
|
|
}), this._onGamepadDisconnectedObserver = n.onGamepadDisconnectedObservable.add(function(e) {
|
|
i.gamepad === e && (i.gamepad = null)
|
|
}), this.gamepad = n.getGamepadByType(Ke.XBOX)
|
|
}, e.prototype.detachControl = function(e) {
|
|
this.camera.getScene().gamepadManager.onGamepadConnectedObservable.remove(this._onGamepadConnectedObserver), this.camera.getScene().gamepadManager.onGamepadDisconnectedObservable.remove(this._onGamepadDisconnectedObserver), this.gamepad = null
|
|
}, e.prototype.checkInputs = function() {
|
|
if (this.gamepad) {
|
|
var e = this.camera,
|
|
t = this.gamepad.rightStick;
|
|
if (t) {
|
|
if (0 != t.x) {
|
|
var i = t.x / this.gamepadRotationSensibility;
|
|
0 != i && Math.abs(i) > .005 && (e.inertialAlphaOffset += i)
|
|
}
|
|
if (0 != t.y) {
|
|
var n = t.y / this.gamepadRotationSensibility;
|
|
0 != n && Math.abs(n) > .005 && (e.inertialBetaOffset += n)
|
|
}
|
|
}
|
|
var r = this.gamepad.leftStick;
|
|
if (r && 0 != r.y) {
|
|
var o = r.y / this.gamepadMoveSensibility;
|
|
0 != o && Math.abs(o) > .005 && (this.camera.inertialRadiusOffset -= o)
|
|
}
|
|
}
|
|
}, e.prototype.getClassName = function() {
|
|
return "ArcRotateCameraGamepadInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "gamepad"
|
|
}, l.c([Object(L.c)()], e.prototype, "gamepadRotationSensibility", void 0), l.c([Object(L.c)()], e.prototype, "gamepadMoveSensibility", void 0), e
|
|
}();
|
|
We.ArcRotateCameraGamepadInput = qe;
|
|
var Ze = i(51),
|
|
Je = function() {
|
|
function e() {
|
|
this.keysUp = [38], this.keysDown = [40], this.keysLeft = [37], this.keysRight = [39], this.keysReset = [220], this.panningSensibility = 50, this.zoomingSensibility = 25, this.useAltToZoom = !0, this.angularSpeed = .01, this._keys = new Array
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this;
|
|
this._onCanvasBlurObserver || (this._scene = this.camera.getScene(), this._engine = this._scene.getEngine(), this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(function() {
|
|
i._keys = []
|
|
}), this._onKeyboardObserver = this._scene.onKeyboardObservable.add(function(e) {
|
|
var n, r = e.event;
|
|
r.metaKey || (e.type === Ze.a.KEYDOWN ? (i._ctrlPressed = r.ctrlKey, i._altPressed = r.altKey, (-1 !== i.keysUp.indexOf(r.keyCode) || -1 !== i.keysDown.indexOf(r.keyCode) || -1 !== i.keysLeft.indexOf(r.keyCode) || -1 !== i.keysRight.indexOf(r.keyCode) || -1 !== i.keysReset.indexOf(r.keyCode)) && (-1 === (n = i._keys.indexOf(r.keyCode)) && i._keys.push(r.keyCode), r.preventDefault && (t || r.preventDefault()))) : -1 === i.keysUp.indexOf(r.keyCode) && -1 === i.keysDown.indexOf(r.keyCode) && -1 === i.keysLeft.indexOf(r.keyCode) && -1 === i.keysRight.indexOf(r.keyCode) && -1 === i.keysReset.indexOf(r.keyCode) || ((n = i._keys.indexOf(r.keyCode)) >= 0 && i._keys.splice(n, 1), r.preventDefault && (t || r.preventDefault())))
|
|
}))
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._scene && (this._onKeyboardObserver && this._scene.onKeyboardObservable.remove(this._onKeyboardObserver), this._onCanvasBlurObserver && this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver), this._onKeyboardObserver = null, this._onCanvasBlurObserver = null), this._keys = []
|
|
}, e.prototype.checkInputs = function() {
|
|
if (this._onKeyboardObserver)
|
|
for (var e = this.camera, t = 0; t < this._keys.length; t++) {
|
|
var i = this._keys[t]; - 1 !== this.keysLeft.indexOf(i) ? this._ctrlPressed && this.camera._useCtrlForPanning ? e.inertialPanningX -= 1 / this.panningSensibility : e.inertialAlphaOffset -= this.angularSpeed : -1 !== this.keysUp.indexOf(i) ? this._ctrlPressed && this.camera._useCtrlForPanning ? e.inertialPanningY += 1 / this.panningSensibility : this._altPressed && this.useAltToZoom ? e.inertialRadiusOffset += 1 / this.zoomingSensibility : e.inertialBetaOffset -= this.angularSpeed : -1 !== this.keysRight.indexOf(i) ? this._ctrlPressed && this.camera._useCtrlForPanning ? e.inertialPanningX += 1 / this.panningSensibility : e.inertialAlphaOffset += this.angularSpeed : -1 !== this.keysDown.indexOf(i) ? this._ctrlPressed && this.camera._useCtrlForPanning ? e.inertialPanningY -= 1 / this.panningSensibility : this._altPressed && this.useAltToZoom ? e.inertialRadiusOffset -= 1 / this.zoomingSensibility : e.inertialBetaOffset += this.angularSpeed : -1 !== this.keysReset.indexOf(i) && e.useInputToRestoreState && e.restoreState()
|
|
}
|
|
}, e.prototype.getClassName = function() {
|
|
return "ArcRotateCameraKeyboardMoveInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "keyboard"
|
|
}, l.c([Object(L.c)()], e.prototype, "keysUp", void 0), l.c([Object(L.c)()], e.prototype, "keysDown", void 0), l.c([Object(L.c)()], e.prototype, "keysLeft", void 0), l.c([Object(L.c)()], e.prototype, "keysRight", void 0), l.c([Object(L.c)()], e.prototype, "keysReset", void 0), l.c([Object(L.c)()], e.prototype, "panningSensibility", void 0), l.c([Object(L.c)()], e.prototype, "zoomingSensibility", void 0), l.c([Object(L.c)()], e.prototype, "useAltToZoom", void 0), l.c([Object(L.c)()], e.prototype, "angularSpeed", void 0), e
|
|
}();
|
|
We.ArcRotateCameraKeyboardMoveInput = Je;
|
|
var $e = function() {
|
|
function e() {
|
|
this.wheelPrecision = 3, this.wheelDeltaPercentage = 0
|
|
}
|
|
return e.prototype.computeDeltaFromMouseWheelLegacyEvent = function(e, t) {
|
|
var i = .01 * e.wheelDelta * this.wheelDeltaPercentage * t;
|
|
return e.wheelDelta > 0 ? i / (1 + this.wheelDeltaPercentage) : i * (1 + this.wheelDeltaPercentage)
|
|
}, e.prototype.attachControl = function(e, t) {
|
|
var i = this;
|
|
this._wheel = function(e, n) {
|
|
if (e.type === Pe.a.POINTERWHEEL) {
|
|
var r = e.event,
|
|
o = 0,
|
|
s = r;
|
|
if (s.wheelDelta)
|
|
if (i.wheelDeltaPercentage) {
|
|
if ((o = i.computeDeltaFromMouseWheelLegacyEvent(s, i.camera.radius)) > 0) {
|
|
for (var a = i.camera.radius, c = i.camera.inertialRadiusOffset + o, l = 0; l < 20 && Math.abs(c) > .001; l++) a -= c, c *= i.camera.inertia;
|
|
a = D.a.Clamp(a, 0, Number.MAX_VALUE), o = i.computeDeltaFromMouseWheelLegacyEvent(s, a)
|
|
}
|
|
} else o = s.wheelDelta / (40 * i.wheelPrecision);
|
|
else o = -(r.deltaY || r.detail) / i.wheelPrecision;
|
|
o && (i.camera.inertialRadiusOffset += o), r.preventDefault && (t || r.preventDefault())
|
|
}
|
|
}, this._observer = this.camera.getScene().onPointerObservable.add(this._wheel, Pe.a.POINTERWHEEL)
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._observer && e && (this.camera.getScene().onPointerObservable.remove(this._observer), this._observer = null, this._wheel = null)
|
|
}, e.prototype.getClassName = function() {
|
|
return "ArcRotateCameraMouseWheelInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "mousewheel"
|
|
}, l.c([Object(L.c)()], e.prototype, "wheelPrecision", void 0), l.c([Object(L.c)()], e.prototype, "wheelDeltaPercentage", void 0), e
|
|
}();
|
|
We.ArcRotateCameraMouseWheelInput = $e;
|
|
var et = function() {
|
|
function e() {
|
|
this.buttons = [0, 1, 2]
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this,
|
|
n = this.camera.getEngine(),
|
|
r = 0,
|
|
o = null;
|
|
this.pointA = null, this.pointB = null, this._altKey = !1, this._ctrlKey = !1, this._metaKey = !1, this._shiftKey = !1, this._buttonsPressed = 0, this._pointerInput = function(s, a) {
|
|
var c = s.event,
|
|
l = "touch" === c.pointerType;
|
|
if (!n.isInVRExclusivePointerMode && (s.type === Pe.a.POINTERMOVE || -1 !== i.buttons.indexOf(c.button))) {
|
|
var u = c.srcElement || c.target;
|
|
if (i._altKey = c.altKey, i._ctrlKey = c.ctrlKey, i._metaKey = c.metaKey, i._shiftKey = c.shiftKey, i._buttonsPressed = c.buttons, n.isPointerLock) {
|
|
var h = c.movementX || c.mozMovementX || c.webkitMovementX || c.msMovementX || 0,
|
|
d = c.movementY || c.mozMovementY || c.webkitMovementY || c.msMovementY || 0;
|
|
i.onTouch(null, h, d), i.pointA = null, i.pointB = null
|
|
} else if (s.type === Pe.a.POINTERDOWN && u) {
|
|
try {
|
|
u.setPointerCapture(c.pointerId)
|
|
} catch (e) {}
|
|
null === i.pointA ? i.pointA = {
|
|
x: c.clientX,
|
|
y: c.clientY,
|
|
pointerId: c.pointerId,
|
|
type: c.pointerType
|
|
} : null === i.pointB && (i.pointB = {
|
|
x: c.clientX,
|
|
y: c.clientY,
|
|
pointerId: c.pointerId,
|
|
type: c.pointerType
|
|
}), i.onButtonDown(c), t || (c.preventDefault(), e.focus())
|
|
} else if (s.type === Pe.a.POINTERDOUBLETAP) i.onDoubleTap(c.pointerType);
|
|
else if (s.type === Pe.a.POINTERUP && u) {
|
|
try {
|
|
u.releasePointerCapture(c.pointerId)
|
|
} catch (e) {}
|
|
l || (i.pointB = null), n._badOS ? i.pointA = i.pointB = null : i.pointB && i.pointA && i.pointA.pointerId == c.pointerId ? (i.pointA = i.pointB, i.pointB = null) : i.pointA && i.pointB && i.pointB.pointerId == c.pointerId ? i.pointB = null : i.pointA = i.pointB = null, (0 !== r || o) && (i.onMultiTouch(i.pointA, i.pointB, r, 0, o, null), r = 0, o = null), i.onButtonUp(c), t || c.preventDefault()
|
|
} else if (s.type === Pe.a.POINTERMOVE)
|
|
if (t || c.preventDefault(), i.pointA && null === i.pointB) {
|
|
h = c.clientX - i.pointA.x, d = c.clientY - i.pointA.y;
|
|
i.onTouch(i.pointA, h, d), i.pointA.x = c.clientX, i.pointA.y = c.clientY
|
|
} else if (i.pointA && i.pointB) {
|
|
var f = i.pointA.pointerId === c.pointerId ? i.pointA : i.pointB;
|
|
f.x = c.clientX, f.y = c.clientY;
|
|
var p = i.pointA.x - i.pointB.x,
|
|
_ = i.pointA.y - i.pointB.y,
|
|
g = p * p + _ * _,
|
|
m = {
|
|
x: (i.pointA.x + i.pointB.x) / 2,
|
|
y: (i.pointA.y + i.pointB.y) / 2,
|
|
pointerId: c.pointerId,
|
|
type: s.type
|
|
};
|
|
i.onMultiTouch(i.pointA, i.pointB, r, g, o, m), o = m, r = g
|
|
}
|
|
}
|
|
}, this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, Pe.a.POINTERDOWN | Pe.a.POINTERUP | Pe.a.POINTERMOVE), this._onLostFocus = function() {
|
|
i.pointA = i.pointB = null, r = 0, o = null, i.onLostFocus()
|
|
}, e.addEventListener("contextmenu", this.onContextMenu.bind(this), !1), ye.h.RegisterTopRootEvents([{
|
|
name: "blur",
|
|
handler: this._onLostFocus
|
|
}])
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._onLostFocus && ye.h.UnregisterTopRootEvents([{
|
|
name: "blur",
|
|
handler: this._onLostFocus
|
|
}]), e && this._observer && (this.camera.getScene().onPointerObservable.remove(this._observer), this._observer = null, this.onContextMenu && e.removeEventListener("contextmenu", this.onContextMenu), this._onLostFocus = null), this._altKey = !1, this._ctrlKey = !1, this._metaKey = !1, this._shiftKey = !1, this._buttonsPressed = 0
|
|
}, e.prototype.getClassName = function() {
|
|
return "BaseCameraPointersInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "pointers"
|
|
}, e.prototype.onDoubleTap = function(e) {}, e.prototype.onTouch = function(e, t, i) {}, e.prototype.onMultiTouch = function(e, t, i, n, r, o) {}, e.prototype.onContextMenu = function(e) {
|
|
e.preventDefault()
|
|
}, e.prototype.onButtonDown = function(e) {}, e.prototype.onButtonUp = function(e) {}, e.prototype.onLostFocus = function() {}, l.c([Object(L.c)()], e.prototype, "buttons", void 0), e
|
|
}(),
|
|
tt = function(e) {
|
|
function t() {
|
|
var t = null !== e && e.apply(this, arguments) || this;
|
|
return t.buttons = [0, 1, 2], t.angularSensibilityX = 1e3, t.angularSensibilityY = 1e3, t.pinchPrecision = 12, t.pinchDeltaPercentage = 0, t.panningSensibility = 1e3, t.multiTouchPanning = !0, t.multiTouchPanAndZoom = !0, t.pinchInwards = !0, t._isPanClick = !1, t._twoFingerActivityCount = 0, t._isPinching = !1, t
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "ArcRotateCameraPointersInput"
|
|
}, t.prototype.onTouch = function(e, t, i) {
|
|
0 !== this.panningSensibility && (this._ctrlKey && this.camera._useCtrlForPanning || this._isPanClick) ? (this.camera.inertialPanningX += -t / this.panningSensibility, this.camera.inertialPanningY += i / this.panningSensibility) : (this.camera.inertialAlphaOffset -= t / this.angularSensibilityX, this.camera.inertialBetaOffset -= i / this.angularSensibilityY)
|
|
}, t.prototype.onDoubleTap = function(e) {
|
|
this.camera.useInputToRestoreState && this.camera.restoreState()
|
|
}, t.prototype.onMultiTouch = function(e, t, i, n, r, o) {
|
|
if (!(0 === i && null === r || 0 === n && null === o)) {
|
|
var s = this.pinchInwards ? 1 : -1;
|
|
if (this.multiTouchPanAndZoom) {
|
|
if (this.pinchDeltaPercentage ? this.camera.inertialRadiusOffset += .001 * (n - i) * this.camera.radius * this.pinchDeltaPercentage : this.camera.inertialRadiusOffset += (n - i) / (this.pinchPrecision * s * (this.angularSensibilityX + this.angularSensibilityY) / 2), 0 !== this.panningSensibility && r && o) {
|
|
var a = o.x - r.x,
|
|
c = o.y - r.y;
|
|
this.camera.inertialPanningX += -a / this.panningSensibility, this.camera.inertialPanningY += c / this.panningSensibility
|
|
}
|
|
} else {
|
|
this._twoFingerActivityCount++;
|
|
var l = Math.sqrt(i),
|
|
u = Math.sqrt(n);
|
|
if (this._isPinching || this._twoFingerActivityCount < 20 && Math.abs(u - l) > this.camera.pinchToPanMaxDistance) this.pinchDeltaPercentage ? this.camera.inertialRadiusOffset += .001 * (n - i) * this.camera.radius * this.pinchDeltaPercentage : this.camera.inertialRadiusOffset += (n - i) / (this.pinchPrecision * s * (this.angularSensibilityX + this.angularSensibilityY) / 2), this._isPinching = !0;
|
|
else if (0 !== this.panningSensibility && this.multiTouchPanning && o && r) {
|
|
a = o.x - r.x, c = o.y - r.y;
|
|
this.camera.inertialPanningX += -a / this.panningSensibility, this.camera.inertialPanningY += c / this.panningSensibility
|
|
}
|
|
}
|
|
}
|
|
}, t.prototype.onButtonDown = function(e) {
|
|
this._isPanClick = e.button === this.camera._panningMouseButton
|
|
}, t.prototype.onButtonUp = function(e) {
|
|
this._twoFingerActivityCount = 0, this._isPinching = !1
|
|
}, t.prototype.onLostFocus = function() {
|
|
this._isPanClick = !1, this._twoFingerActivityCount = 0, this._isPinching = !1
|
|
}, l.c([Object(L.c)()], t.prototype, "buttons", void 0), l.c([Object(L.c)()], t.prototype, "angularSensibilityX", void 0), l.c([Object(L.c)()], t.prototype, "angularSensibilityY", void 0), l.c([Object(L.c)()], t.prototype, "pinchPrecision", void 0), l.c([Object(L.c)()], t.prototype, "pinchDeltaPercentage", void 0), l.c([Object(L.c)()], t.prototype, "panningSensibility", void 0), l.c([Object(L.c)()], t.prototype, "multiTouchPanning", void 0), l.c([Object(L.c)()], t.prototype, "multiTouchPanAndZoom", void 0), t
|
|
}(et);
|
|
We.ArcRotateCameraPointersInput = tt;
|
|
var it = function(e) {
|
|
function t(t) {
|
|
return e.call(this, t) || this
|
|
}
|
|
return l.d(t, e), t.prototype.addMouseWheel = function() {
|
|
return this.add(new $e), this
|
|
}, t.prototype.addPointers = function() {
|
|
return this.add(new tt), this
|
|
}, t.prototype.addKeyboard = function() {
|
|
return this.add(new Je), this
|
|
}, t
|
|
}(Xe);
|
|
it.prototype.addVRDeviceOrientation = function() {
|
|
return this.add(new nt), this
|
|
};
|
|
var nt = function() {
|
|
function e() {
|
|
this.alphaCorrection = 1, this.gammaCorrection = 1, this._alpha = 0, this._gamma = 0, this._dirty = !1, this._deviceOrientationHandler = this._onOrientationEvent.bind(this)
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
this.camera.attachControl(e, t), window.addEventListener("deviceorientation", this._deviceOrientationHandler)
|
|
}, e.prototype._onOrientationEvent = function(e) {
|
|
null !== e.alpha && (this._alpha = (0 | +e.alpha) * this.alphaCorrection), null !== e.gamma && (this._gamma = (0 | +e.gamma) * this.gammaCorrection), this._dirty = !0
|
|
}, e.prototype.checkInputs = function() {
|
|
this._dirty && (this._dirty = !1, this._gamma < 0 && (this._gamma = 180 + this._gamma), this.camera.alpha = -this._alpha / 180 * Math.PI % Math.PI * 2, this.camera.beta = this._gamma / 180 * Math.PI)
|
|
}, e.prototype.detachControl = function(e) {
|
|
window.removeEventListener("deviceorientation", this._deviceOrientationHandler)
|
|
}, e.prototype.getClassName = function() {
|
|
return "ArcRotateCameraVRDeviceOrientationInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "VRDeviceOrientation"
|
|
}, e
|
|
}();
|
|
We.ArcRotateCameraVRDeviceOrientationInput = nt;
|
|
var rt = function() {
|
|
function e() {
|
|
this.keysForward = [87], this.keysBackward = [83], this.keysUp = [69], this.keysDown = [81], this.keysRight = [68], this.keysLeft = [65], this._keys = new Array
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this;
|
|
this._onCanvasBlurObserver || (this._scene = this.camera.getScene(), this._engine = this._scene.getEngine(), this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(function() {
|
|
i._keys = []
|
|
}), this._onKeyboardObserver = this._scene.onKeyboardObservable.add(function(e) {
|
|
var n, r = e.event;
|
|
e.type === Ze.a.KEYDOWN ? -1 === i.keysForward.indexOf(r.keyCode) && -1 === i.keysBackward.indexOf(r.keyCode) && -1 === i.keysUp.indexOf(r.keyCode) && -1 === i.keysDown.indexOf(r.keyCode) && -1 === i.keysLeft.indexOf(r.keyCode) && -1 === i.keysRight.indexOf(r.keyCode) || (-1 === (n = i._keys.indexOf(r.keyCode)) && i._keys.push(r.keyCode), t || r.preventDefault()) : -1 === i.keysForward.indexOf(r.keyCode) && -1 === i.keysBackward.indexOf(r.keyCode) && -1 === i.keysUp.indexOf(r.keyCode) && -1 === i.keysDown.indexOf(r.keyCode) && -1 === i.keysLeft.indexOf(r.keyCode) && -1 === i.keysRight.indexOf(r.keyCode) || ((n = i._keys.indexOf(r.keyCode)) >= 0 && i._keys.splice(n, 1), t || r.preventDefault())
|
|
}))
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._scene && (this._onKeyboardObserver && this._scene.onKeyboardObservable.remove(this._onKeyboardObserver), this._onCanvasBlurObserver && this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver), this._onKeyboardObserver = null, this._onCanvasBlurObserver = null), this._keys = []
|
|
}, e.prototype.getClassName = function() {
|
|
return "FlyCameraKeyboardInput"
|
|
}, e.prototype._onLostFocus = function(e) {
|
|
this._keys = []
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "keyboard"
|
|
}, e.prototype.checkInputs = function() {
|
|
if (this._onKeyboardObserver)
|
|
for (var e = this.camera, t = 0; t < this._keys.length; t++) {
|
|
var i = this._keys[t],
|
|
n = e._computeLocalCameraSpeed(); - 1 !== this.keysForward.indexOf(i) ? e._localDirection.copyFromFloats(0, 0, n) : -1 !== this.keysBackward.indexOf(i) ? e._localDirection.copyFromFloats(0, 0, -n) : -1 !== this.keysUp.indexOf(i) ? e._localDirection.copyFromFloats(0, n, 0) : -1 !== this.keysDown.indexOf(i) ? e._localDirection.copyFromFloats(0, -n, 0) : -1 !== this.keysRight.indexOf(i) ? e._localDirection.copyFromFloats(n, 0, 0) : -1 !== this.keysLeft.indexOf(i) && e._localDirection.copyFromFloats(-n, 0, 0), e.getScene().useRightHandedSystem && (e._localDirection.z *= -1), e.getViewMatrix().invertToRef(e._cameraTransformMatrix), o.x.TransformNormalToRef(e._localDirection, e._cameraTransformMatrix, e._transformedDirection), e.cameraDirection.addInPlace(e._transformedDirection)
|
|
}
|
|
}, l.c([Object(L.c)()], e.prototype, "keysForward", void 0), l.c([Object(L.c)()], e.prototype, "keysBackward", void 0), l.c([Object(L.c)()], e.prototype, "keysUp", void 0), l.c([Object(L.c)()], e.prototype, "keysDown", void 0), l.c([Object(L.c)()], e.prototype, "keysRight", void 0), l.c([Object(L.c)()], e.prototype, "keysLeft", void 0), e
|
|
}();
|
|
We.FlyCameraKeyboardInput = rt;
|
|
var ot = function() {
|
|
function e(e) {
|
|
void 0 === e && (e = !0), this.buttons = [0, 1, 2], this.buttonsYaw = [-1, 0, 1], this.buttonsPitch = [-1, 0, 1], this.buttonsRoll = [2], this.activeButton = -1, this.angularSensibility = 1e3, this.previousPosition = null
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this;
|
|
this.element = e, this.noPreventDefault = t, this._observer = this.camera.getScene().onPointerObservable.add(function(e, t) {
|
|
i._pointerInput(e, t)
|
|
}, Pe.a.POINTERDOWN | Pe.a.POINTERUP | Pe.a.POINTERMOVE), this._rollObserver = this.camera.getScene().onBeforeRenderObservable.add(function() {
|
|
i.camera.rollCorrect && i.camera.restoreRoll(i.camera.rollCorrect)
|
|
}), this._mousemoveCallback = function(e) {
|
|
i._onMouseMove(e)
|
|
}, e.addEventListener("mousemove", this._mousemoveCallback, !1)
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._observer && e && (this.camera.getScene().onPointerObservable.remove(this._observer), this.camera.getScene().onBeforeRenderObservable.remove(this._rollObserver), this._mousemoveCallback && e.removeEventListener("mousemove", this._mousemoveCallback), this._observer = null, this._rollObserver = null, this.previousPosition = null, this.noPreventDefault = void 0)
|
|
}, e.prototype.getClassName = function() {
|
|
return "FlyCameraMouseInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "mouse"
|
|
}, e.prototype._pointerInput = function(e, t) {
|
|
var i = e.event,
|
|
n = this.camera.getEngine();
|
|
if (!n.isInVRExclusivePointerMode && (this.touchEnabled || "touch" !== i.pointerType) && (e.type === Pe.a.POINTERMOVE || -1 !== this.buttons.indexOf(i.button))) {
|
|
var r = i.srcElement || i.target;
|
|
if (e.type === Pe.a.POINTERDOWN && r) {
|
|
try {
|
|
r.setPointerCapture(i.pointerId)
|
|
} catch (i) {}
|
|
this.previousPosition = {
|
|
x: i.clientX,
|
|
y: i.clientY
|
|
}, this.activeButton = i.button, this.noPreventDefault || (i.preventDefault(), this.element.focus())
|
|
} else if (e.type === Pe.a.POINTERUP && r) {
|
|
try {
|
|
r.releasePointerCapture(i.pointerId)
|
|
} catch (i) {}
|
|
this.activeButton = -1, this.previousPosition = null, this.noPreventDefault || i.preventDefault()
|
|
} else if (e.type === Pe.a.POINTERMOVE) {
|
|
if (!this.previousPosition || n.isPointerLock) return;
|
|
var o = i.clientX - this.previousPosition.x,
|
|
s = i.clientY - this.previousPosition.y;
|
|
this.rotateCamera(o, s), this.previousPosition = {
|
|
x: i.clientX,
|
|
y: i.clientY
|
|
}, this.noPreventDefault || i.preventDefault()
|
|
}
|
|
}
|
|
}, e.prototype._onMouseMove = function(e) {
|
|
var t = this.camera.getEngine();
|
|
if (t.isPointerLock && !t.isInVRExclusivePointerMode) {
|
|
var i = e.movementX || e.mozMovementX || e.webkitMovementX || e.msMovementX || 0,
|
|
n = e.movementY || e.mozMovementY || e.webkitMovementY || e.msMovementY || 0;
|
|
this.rotateCamera(i, n), this.previousPosition = null, this.noPreventDefault || e.preventDefault()
|
|
}
|
|
}, e.prototype.rotateCamera = function(e, t) {
|
|
var i = this,
|
|
n = this.camera;
|
|
this.camera.getScene().useRightHandedSystem && (e *= -1), n.parent && n.parent._getWorldMatrixDeterminant() < 0 && (e *= -1);
|
|
var r, s = e / this.angularSensibility,
|
|
a = t / this.angularSensibility,
|
|
c = o.q.RotationYawPitchRoll(n.rotation.y, n.rotation.x, n.rotation.z);
|
|
if (this.buttonsPitch.some(function(e) {
|
|
return e === i.activeButton
|
|
}) && (r = o.q.RotationAxis(o.c.X, a), c.multiplyInPlace(r)), this.buttonsYaw.some(function(e) {
|
|
return e === i.activeButton
|
|
})) {
|
|
r = o.q.RotationAxis(o.c.Y, s), c.multiplyInPlace(r);
|
|
var l = n.bankedTurnLimit + n._trackRoll;
|
|
if (n.bankedTurn && -l < n.rotation.z && n.rotation.z < l) {
|
|
var u = n.bankedTurnMultiplier * -s;
|
|
r = o.q.RotationAxis(o.c.Z, u), c.multiplyInPlace(r)
|
|
}
|
|
}
|
|
this.buttonsRoll.some(function(e) {
|
|
return e === i.activeButton
|
|
}) && (r = o.q.RotationAxis(o.c.Z, -s), n._trackRoll -= s, c.multiplyInPlace(r)), c.toEulerAnglesToRef(n.rotation)
|
|
}, l.c([Object(L.c)()], e.prototype, "buttons", void 0), l.c([Object(L.c)()], e.prototype, "angularSensibility", void 0), e
|
|
}();
|
|
We.FlyCameraMouseInput = ot;
|
|
var st = function() {
|
|
function e() {
|
|
this.keysHeightOffsetIncr = [38], this.keysHeightOffsetDecr = [40], this.keysHeightOffsetModifierAlt = !1, this.keysHeightOffsetModifierCtrl = !1, this.keysHeightOffsetModifierShift = !1, this.keysRotationOffsetIncr = [37], this.keysRotationOffsetDecr = [39], this.keysRotationOffsetModifierAlt = !1, this.keysRotationOffsetModifierCtrl = !1, this.keysRotationOffsetModifierShift = !1, this.keysRadiusIncr = [40], this.keysRadiusDecr = [38], this.keysRadiusModifierAlt = !0, this.keysRadiusModifierCtrl = !1, this.keysRadiusModifierShift = !1, this.heightSensibility = 1, this.rotationSensibility = 1, this.radiusSensibility = 1, this._keys = new Array
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this;
|
|
this._onCanvasBlurObserver || (this._scene = this.camera.getScene(), this._engine = this._scene.getEngine(), this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(function() {
|
|
i._keys = []
|
|
}), this._onKeyboardObserver = this._scene.onKeyboardObservable.add(function(e) {
|
|
var n, r = e.event;
|
|
r.metaKey || (e.type === Ze.a.KEYDOWN ? (i._ctrlPressed = r.ctrlKey, i._altPressed = r.altKey, i._shiftPressed = r.shiftKey, (-1 !== i.keysHeightOffsetIncr.indexOf(r.keyCode) || -1 !== i.keysHeightOffsetDecr.indexOf(r.keyCode) || -1 !== i.keysRotationOffsetIncr.indexOf(r.keyCode) || -1 !== i.keysRotationOffsetDecr.indexOf(r.keyCode) || -1 !== i.keysRadiusIncr.indexOf(r.keyCode) || -1 !== i.keysRadiusDecr.indexOf(r.keyCode)) && (-1 === (n = i._keys.indexOf(r.keyCode)) && i._keys.push(r.keyCode), r.preventDefault && (t || r.preventDefault()))) : -1 === i.keysHeightOffsetIncr.indexOf(r.keyCode) && -1 === i.keysHeightOffsetDecr.indexOf(r.keyCode) && -1 === i.keysRotationOffsetIncr.indexOf(r.keyCode) && -1 === i.keysRotationOffsetDecr.indexOf(r.keyCode) && -1 === i.keysRadiusIncr.indexOf(r.keyCode) && -1 === i.keysRadiusDecr.indexOf(r.keyCode) || ((n = i._keys.indexOf(r.keyCode)) >= 0 && i._keys.splice(n, 1), r.preventDefault && (t || r.preventDefault())))
|
|
}))
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._scene && (this._onKeyboardObserver && this._scene.onKeyboardObservable.remove(this._onKeyboardObserver), this._onCanvasBlurObserver && this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver), this._onKeyboardObserver = null, this._onCanvasBlurObserver = null), this._keys = []
|
|
}, e.prototype.checkInputs = function() {
|
|
var e = this;
|
|
this._onKeyboardObserver && this._keys.forEach(function(t) {
|
|
-1 !== e.keysHeightOffsetIncr.indexOf(t) && e._modifierHeightOffset() ? e.camera.heightOffset += e.heightSensibility : -1 !== e.keysHeightOffsetDecr.indexOf(t) && e._modifierHeightOffset() ? e.camera.heightOffset -= e.heightSensibility : -1 !== e.keysRotationOffsetIncr.indexOf(t) && e._modifierRotationOffset() ? (e.camera.rotationOffset += e.rotationSensibility, e.camera.rotationOffset %= 360) : -1 !== e.keysRotationOffsetDecr.indexOf(t) && e._modifierRotationOffset() ? (e.camera.rotationOffset -= e.rotationSensibility, e.camera.rotationOffset %= 360) : -1 !== e.keysRadiusIncr.indexOf(t) && e._modifierRadius() ? e.camera.radius += e.radiusSensibility : -1 !== e.keysRadiusDecr.indexOf(t) && e._modifierRadius() && (e.camera.radius -= e.radiusSensibility)
|
|
})
|
|
}, e.prototype.getClassName = function() {
|
|
return "FollowCameraKeyboardMoveInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "keyboard"
|
|
}, e.prototype._modifierHeightOffset = function() {
|
|
return this.keysHeightOffsetModifierAlt === this._altPressed && this.keysHeightOffsetModifierCtrl === this._ctrlPressed && this.keysHeightOffsetModifierShift === this._shiftPressed
|
|
}, e.prototype._modifierRotationOffset = function() {
|
|
return this.keysRotationOffsetModifierAlt === this._altPressed && this.keysRotationOffsetModifierCtrl === this._ctrlPressed && this.keysRotationOffsetModifierShift === this._shiftPressed
|
|
}, e.prototype._modifierRadius = function() {
|
|
return this.keysRadiusModifierAlt === this._altPressed && this.keysRadiusModifierCtrl === this._ctrlPressed && this.keysRadiusModifierShift === this._shiftPressed
|
|
}, l.c([Object(L.c)()], e.prototype, "keysHeightOffsetIncr", void 0), l.c([Object(L.c)()], e.prototype, "keysHeightOffsetDecr", void 0), l.c([Object(L.c)()], e.prototype, "keysHeightOffsetModifierAlt", void 0), l.c([Object(L.c)()], e.prototype, "keysHeightOffsetModifierCtrl", void 0), l.c([Object(L.c)()], e.prototype, "keysHeightOffsetModifierShift", void 0), l.c([Object(L.c)()], e.prototype, "keysRotationOffsetIncr", void 0), l.c([Object(L.c)()], e.prototype, "keysRotationOffsetDecr", void 0), l.c([Object(L.c)()], e.prototype, "keysRotationOffsetModifierAlt", void 0), l.c([Object(L.c)()], e.prototype, "keysRotationOffsetModifierCtrl", void 0), l.c([Object(L.c)()], e.prototype, "keysRotationOffsetModifierShift", void 0), l.c([Object(L.c)()], e.prototype, "keysRadiusIncr", void 0), l.c([Object(L.c)()], e.prototype, "keysRadiusDecr", void 0), l.c([Object(L.c)()], e.prototype, "keysRadiusModifierAlt", void 0), l.c([Object(L.c)()], e.prototype, "keysRadiusModifierCtrl", void 0), l.c([Object(L.c)()], e.prototype, "keysRadiusModifierShift", void 0), l.c([Object(L.c)()], e.prototype, "heightSensibility", void 0), l.c([Object(L.c)()], e.prototype, "rotationSensibility", void 0), l.c([Object(L.c)()], e.prototype, "radiusSensibility", void 0), e
|
|
}();
|
|
We.FollowCameraKeyboardMoveInput = st;
|
|
var at = function() {
|
|
function e() {
|
|
this.axisControlRadius = !0, this.axisControlHeight = !1, this.axisControlRotation = !1, this.wheelPrecision = 3, this.wheelDeltaPercentage = 0
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this;
|
|
this._wheel = function(e, n) {
|
|
if (e.type === Pe.a.POINTERWHEEL) {
|
|
var r = e.event,
|
|
o = 0,
|
|
s = Math.max(-1, Math.min(1, r.deltaY || r.wheelDelta || -r.detail));
|
|
i.wheelDeltaPercentage ? (console.assert(i.axisControlRadius + i.axisControlHeight + i.axisControlRotation <= 1, "wheelDeltaPercentage only usable when mouse wheel controlls ONE axis. Currently enabled: axisControlRadius: " + i.axisControlRadius + ", axisControlHeightOffset: " + i.axisControlHeight + ", axisControlRotationOffset: " + i.axisControlRotation), i.axisControlRadius ? o = .01 * s * i.wheelDeltaPercentage * i.camera.radius : i.axisControlHeight ? o = .01 * s * i.wheelDeltaPercentage * i.camera.heightOffset : i.axisControlRotation && (o = .01 * s * i.wheelDeltaPercentage * i.camera.rotationOffset)) : o = s * i.wheelPrecision, o && (i.axisControlRadius ? i.camera.radius += o : i.axisControlHeight ? i.camera.heightOffset -= o : i.axisControlRotation && (i.camera.rotationOffset -= o)), r.preventDefault && (t || r.preventDefault())
|
|
}
|
|
}, this._observer = this.camera.getScene().onPointerObservable.add(this._wheel, Pe.a.POINTERWHEEL)
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._observer && e && (this.camera.getScene().onPointerObservable.remove(this._observer), this._observer = null, this._wheel = null)
|
|
}, e.prototype.getClassName = function() {
|
|
return "ArcRotateCameraMouseWheelInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "mousewheel"
|
|
}, l.c([Object(L.c)()], e.prototype, "axisControlRadius", void 0), l.c([Object(L.c)()], e.prototype, "axisControlHeight", void 0), l.c([Object(L.c)()], e.prototype, "axisControlRotation", void 0), l.c([Object(L.c)()], e.prototype, "wheelPrecision", void 0), l.c([Object(L.c)()], e.prototype, "wheelDeltaPercentage", void 0), e
|
|
}();
|
|
We.FollowCameraMouseWheelInput = at;
|
|
var ct = function(e) {
|
|
function t() {
|
|
var t = null !== e && e.apply(this, arguments) || this;
|
|
return t.angularSensibilityX = 1, t.angularSensibilityY = 1, t.pinchPrecision = 1e4, t.pinchDeltaPercentage = 0, t.axisXControlRadius = !1, t.axisXControlHeight = !1, t.axisXControlRotation = !0, t.axisYControlRadius = !1, t.axisYControlHeight = !0, t.axisYControlRotation = !1, t.axisPinchControlRadius = !0, t.axisPinchControlHeight = !1, t.axisPinchControlRotation = !1, t.warningEnable = !0, t._warningCounter = 0, t
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "FollowCameraPointersInput"
|
|
}, t.prototype.onTouch = function(e, t, i) {
|
|
this._warning(), this.axisXControlRotation ? this.camera.rotationOffset += t / this.angularSensibilityX : this.axisYControlRotation && (this.camera.rotationOffset += i / this.angularSensibilityX), this.axisXControlHeight ? this.camera.heightOffset += t / this.angularSensibilityY : this.axisYControlHeight && (this.camera.heightOffset += i / this.angularSensibilityY), this.axisXControlRadius ? this.camera.radius -= t / this.angularSensibilityY : this.axisYControlRadius && (this.camera.radius -= i / this.angularSensibilityY)
|
|
}, t.prototype.onMultiTouch = function(e, t, i, n, r, o) {
|
|
if (!(0 === i && null === r || 0 === n && null === o)) {
|
|
var s = (n - i) / (this.pinchPrecision * (this.angularSensibilityX + this.angularSensibilityY) / 2);
|
|
this.pinchDeltaPercentage ? (s *= .01 * this.pinchDeltaPercentage, this.axisPinchControlRotation && (this.camera.rotationOffset += s * this.camera.rotationOffset), this.axisPinchControlHeight && (this.camera.heightOffset += s * this.camera.heightOffset), this.axisPinchControlRadius && (this.camera.radius -= s * this.camera.radius)) : (this.axisPinchControlRotation && (this.camera.rotationOffset += s), this.axisPinchControlHeight && (this.camera.heightOffset += s), this.axisPinchControlRadius && (this.camera.radius -= s))
|
|
}
|
|
}, t.prototype._warning = function() {
|
|
if (this.warningEnable && this._warningCounter++ % 100 == 0) {
|
|
var e = "It probably only makes sense to control ONE camera property with each pointer axis. Set 'warningEnable = false' if you are sure. Currently enabled: ";
|
|
console.assert(this.axisXControlRotation + this.axisXControlHeight + this.axisXControlRadius <= 1, e + "axisXControlRotation: " + this.axisXControlRotation + ", axisXControlHeight: " + this.axisXControlHeight + ", axisXControlRadius: " + this.axisXControlRadius), console.assert(this.axisYControlRotation + this.axisYControlHeight + this.axisYControlRadius <= 1, e + "axisYControlRotation: " + this.axisYControlRotation + ", axisYControlHeight: " + this.axisYControlHeight + ", axisYControlRadius: " + this.axisYControlRadius), console.assert(this.axisPinchControlRotation + this.axisPinchControlHeight + this.axisPinchControlRadius <= 1, e + "axisPinchControlRotation: " + this.axisPinchControlRotation + ", axisPinchControlHeight: " + this.axisPinchControlHeight + ", axisPinchControlRadius: " + this.axisPinchControlRadius)
|
|
}
|
|
}, l.c([Object(L.c)()], t.prototype, "angularSensibilityX", void 0), l.c([Object(L.c)()], t.prototype, "angularSensibilityY", void 0), l.c([Object(L.c)()], t.prototype, "pinchPrecision", void 0), l.c([Object(L.c)()], t.prototype, "pinchDeltaPercentage", void 0), l.c([Object(L.c)()], t.prototype, "axisXControlRadius", void 0), l.c([Object(L.c)()], t.prototype, "axisXControlHeight", void 0), l.c([Object(L.c)()], t.prototype, "axisXControlRotation", void 0), l.c([Object(L.c)()], t.prototype, "axisYControlRadius", void 0), l.c([Object(L.c)()], t.prototype, "axisYControlHeight", void 0), l.c([Object(L.c)()], t.prototype, "axisYControlRotation", void 0), l.c([Object(L.c)()], t.prototype, "axisPinchControlRadius", void 0), l.c([Object(L.c)()], t.prototype, "axisPinchControlHeight", void 0), l.c([Object(L.c)()], t.prototype, "axisPinchControlRotation", void 0), t
|
|
}(et);
|
|
We.FollowCameraPointersInput = ct;
|
|
var lt = function() {
|
|
function e() {
|
|
this.keysUp = [38], this.keysDown = [40], this.keysLeft = [37], this.keysRight = [39], this._keys = new Array
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this;
|
|
this._onCanvasBlurObserver || (this._scene = this.camera.getScene(), this._engine = this._scene.getEngine(), this._onCanvasBlurObserver = this._engine.onCanvasBlurObservable.add(function() {
|
|
i._keys = []
|
|
}), this._onKeyboardObserver = this._scene.onKeyboardObservable.add(function(e) {
|
|
var n, r = e.event;
|
|
r.metaKey || (e.type === Ze.a.KEYDOWN ? -1 === i.keysUp.indexOf(r.keyCode) && -1 === i.keysDown.indexOf(r.keyCode) && -1 === i.keysLeft.indexOf(r.keyCode) && -1 === i.keysRight.indexOf(r.keyCode) || (-1 === (n = i._keys.indexOf(r.keyCode)) && i._keys.push(r.keyCode), t || r.preventDefault()) : -1 === i.keysUp.indexOf(r.keyCode) && -1 === i.keysDown.indexOf(r.keyCode) && -1 === i.keysLeft.indexOf(r.keyCode) && -1 === i.keysRight.indexOf(r.keyCode) || ((n = i._keys.indexOf(r.keyCode)) >= 0 && i._keys.splice(n, 1), t || r.preventDefault()))
|
|
}))
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._scene && (this._onKeyboardObserver && this._scene.onKeyboardObservable.remove(this._onKeyboardObserver), this._onCanvasBlurObserver && this._engine.onCanvasBlurObservable.remove(this._onCanvasBlurObserver), this._onKeyboardObserver = null, this._onCanvasBlurObserver = null), this._keys = []
|
|
}, e.prototype.checkInputs = function() {
|
|
if (this._onKeyboardObserver)
|
|
for (var e = this.camera, t = 0; t < this._keys.length; t++) {
|
|
var i = this._keys[t],
|
|
n = e._computeLocalCameraSpeed(); - 1 !== this.keysLeft.indexOf(i) ? e._localDirection.copyFromFloats(-n, 0, 0) : -1 !== this.keysUp.indexOf(i) ? e._localDirection.copyFromFloats(0, 0, n) : -1 !== this.keysRight.indexOf(i) ? e._localDirection.copyFromFloats(n, 0, 0) : -1 !== this.keysDown.indexOf(i) && e._localDirection.copyFromFloats(0, 0, -n), e.getScene().useRightHandedSystem && (e._localDirection.z *= -1), e.getViewMatrix().invertToRef(e._cameraTransformMatrix), o.x.TransformNormalToRef(e._localDirection, e._cameraTransformMatrix, e._transformedDirection), e.cameraDirection.addInPlace(e._transformedDirection)
|
|
}
|
|
}, e.prototype.getClassName = function() {
|
|
return "FreeCameraKeyboardMoveInput"
|
|
}, e.prototype._onLostFocus = function() {
|
|
this._keys = []
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "keyboard"
|
|
}, l.c([Object(L.c)()], e.prototype, "keysUp", void 0), l.c([Object(L.c)()], e.prototype, "keysDown", void 0), l.c([Object(L.c)()], e.prototype, "keysLeft", void 0), l.c([Object(L.c)()], e.prototype, "keysRight", void 0), e
|
|
}();
|
|
We.FreeCameraKeyboardMoveInput = lt;
|
|
var ut = function() {
|
|
function e(e) {
|
|
void 0 === e && (e = !0), this.touchEnabled = e, this.buttons = [0, 1, 2], this.angularSensibility = 2e3, this.previousPosition = null, this.onPointerMovedObservable = new r.c, this._allowCameraRotation = !0
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this,
|
|
n = this.camera.getEngine();
|
|
this._pointerInput || (this._pointerInput = function(r) {
|
|
var o = r.event;
|
|
if (!n.isInVRExclusivePointerMode && (i.touchEnabled || "touch" !== o.pointerType) && (r.type === Pe.a.POINTERMOVE || -1 !== i.buttons.indexOf(o.button))) {
|
|
var s = o.srcElement || o.target;
|
|
if (r.type === Pe.a.POINTERDOWN && s) {
|
|
try {
|
|
s.setPointerCapture(o.pointerId)
|
|
} catch (e) {}
|
|
i.previousPosition = {
|
|
x: o.clientX,
|
|
y: o.clientY
|
|
}, t || (o.preventDefault(), e.focus())
|
|
} else if (r.type === Pe.a.POINTERUP && s) {
|
|
try {
|
|
s.releasePointerCapture(o.pointerId)
|
|
} catch (e) {}
|
|
i.previousPosition = null, t || o.preventDefault()
|
|
} else if (r.type === Pe.a.POINTERMOVE) {
|
|
if (!i.previousPosition || n.isPointerLock) return;
|
|
var a = o.clientX - i.previousPosition.x,
|
|
c = o.clientY - i.previousPosition.y;
|
|
i.camera.getScene().useRightHandedSystem && (a *= -1), i.camera.parent && i.camera.parent._getWorldMatrixDeterminant() < 0 && (a *= -1), i._allowCameraRotation && (i.camera.cameraRotation.y += a / i.angularSensibility, i.camera.cameraRotation.x += c / i.angularSensibility), i.onPointerMovedObservable.notifyObservers({
|
|
offsetX: a,
|
|
offsetY: c
|
|
}), i.previousPosition = {
|
|
x: o.clientX,
|
|
y: o.clientY
|
|
}, t || o.preventDefault()
|
|
}
|
|
}
|
|
}), this._onMouseMove = function(e) {
|
|
if (n.isPointerLock && !n.isInVRExclusivePointerMode) {
|
|
var r = e.movementX || e.mozMovementX || e.webkitMovementX || e.msMovementX || 0;
|
|
i.camera.getScene().useRightHandedSystem && (r *= -1), i.camera.parent && i.camera.parent._getWorldMatrixDeterminant() < 0 && (r *= -1), i.camera.cameraRotation.y += r / i.angularSensibility;
|
|
var o = e.movementY || e.mozMovementY || e.webkitMovementY || e.msMovementY || 0;
|
|
i.camera.cameraRotation.x += o / i.angularSensibility, i.previousPosition = null, t || e.preventDefault()
|
|
}
|
|
}, this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, Pe.a.POINTERDOWN | Pe.a.POINTERUP | Pe.a.POINTERMOVE), e.addEventListener("mousemove", this._onMouseMove, !1), e.addEventListener("contextmenu", this.onContextMenu.bind(this), !1)
|
|
}, e.prototype.onContextMenu = function(e) {
|
|
e.preventDefault()
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._observer && e && (this.camera.getScene().onPointerObservable.remove(this._observer), this._onMouseMove && e.removeEventListener("mousemove", this._onMouseMove), this.onContextMenu && e.removeEventListener("contextmenu", this.onContextMenu), this.onPointerMovedObservable && this.onPointerMovedObservable.clear(), this._observer = null, this._onMouseMove = null, this.previousPosition = null)
|
|
}, e.prototype.getClassName = function() {
|
|
return "FreeCameraMouseInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "mouse"
|
|
}, l.c([Object(L.c)()], e.prototype, "buttons", void 0), l.c([Object(L.c)()], e.prototype, "angularSensibility", void 0), e
|
|
}();
|
|
We.FreeCameraMouseInput = ut;
|
|
var ht = function() {
|
|
function e() {
|
|
this.touchAngularSensibility = 2e5, this.touchMoveSensibility = 250, this._offsetX = null, this._offsetY = null, this._pointerPressed = new Array
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this,
|
|
n = null;
|
|
void 0 === this._pointerInput && (this._onLostFocus = function() {
|
|
i._offsetX = null, i._offsetY = null
|
|
}, this._pointerInput = function(e) {
|
|
var r = e.event;
|
|
if ("mouse" !== r.pointerType)
|
|
if (e.type === Pe.a.POINTERDOWN) {
|
|
if (t || r.preventDefault(), i._pointerPressed.push(r.pointerId), 1 !== i._pointerPressed.length) return;
|
|
n = {
|
|
x: r.clientX,
|
|
y: r.clientY
|
|
}
|
|
} else if (e.type === Pe.a.POINTERUP) {
|
|
if (t || r.preventDefault(), -1 === (o = i._pointerPressed.indexOf(r.pointerId))) return;
|
|
if (i._pointerPressed.splice(o, 1), 0 != o) return;
|
|
n = null, i._offsetX = null, i._offsetY = null
|
|
} else if (e.type === Pe.a.POINTERMOVE) {
|
|
if (t || r.preventDefault(), !n) return;
|
|
var o;
|
|
if (0 != (o = i._pointerPressed.indexOf(r.pointerId))) return;
|
|
i._offsetX = r.clientX - n.x, i._offsetY = -(r.clientY - n.y)
|
|
}
|
|
}), this._observer = this.camera.getScene().onPointerObservable.add(this._pointerInput, Pe.a.POINTERDOWN | Pe.a.POINTERUP | Pe.a.POINTERMOVE), this._onLostFocus && e.addEventListener("blur", this._onLostFocus)
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._pointerInput && e && (this._observer && (this.camera.getScene().onPointerObservable.remove(this._observer), this._observer = null), this._onLostFocus && (e.removeEventListener("blur", this._onLostFocus), this._onLostFocus = null), this._pointerPressed = [], this._offsetX = null, this._offsetY = null)
|
|
}, e.prototype.checkInputs = function() {
|
|
if (this._offsetX && this._offsetY) {
|
|
var e = this.camera;
|
|
if (e.cameraRotation.y += this._offsetX / this.touchAngularSensibility, this._pointerPressed.length > 1) e.cameraRotation.x += -this._offsetY / this.touchAngularSensibility;
|
|
else {
|
|
var t = e._computeLocalCameraSpeed(),
|
|
i = new o.x(0, 0, t * this._offsetY / this.touchMoveSensibility);
|
|
o.j.RotationYawPitchRollToRef(e.rotation.y, e.rotation.x, 0, e._cameraRotationMatrix), e.cameraDirection.addInPlace(o.x.TransformCoordinates(i, e._cameraRotationMatrix))
|
|
}
|
|
}
|
|
}, e.prototype.getClassName = function() {
|
|
return "FreeCameraTouchInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "touch"
|
|
}, l.c([Object(L.c)()], e.prototype, "touchAngularSensibility", void 0), l.c([Object(L.c)()], e.prototype, "touchMoveSensibility", void 0), e
|
|
}();
|
|
We.FreeCameraTouchInput = ht;
|
|
var dt = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this, t) || this;
|
|
return i._mouseInput = null, i
|
|
}
|
|
return l.d(t, e), t.prototype.addKeyboard = function() {
|
|
return this.add(new lt), this
|
|
}, t.prototype.addMouse = function(e) {
|
|
return void 0 === e && (e = !0), this._mouseInput || (this._mouseInput = new ut(e), this.add(this._mouseInput)), this
|
|
}, t.prototype.removeMouse = function() {
|
|
return this._mouseInput && this.remove(this._mouseInput), this
|
|
}, t.prototype.addTouch = function() {
|
|
return this.add(new ht), this
|
|
}, t.prototype.clear = function() {
|
|
e.prototype.clear.call(this), this._mouseInput = null
|
|
}, t
|
|
}(Xe);
|
|
dt.prototype.addDeviceOrientation = function() {
|
|
return this._deviceOrientationInput || (this._deviceOrientationInput = new ft, this.add(this._deviceOrientationInput)), this
|
|
};
|
|
var ft = function() {
|
|
function e() {
|
|
var e = this;
|
|
this._screenOrientationAngle = 0, this._screenQuaternion = new o.q, this._alpha = 0, this._beta = 0, this._gamma = 0, this._onDeviceOrientationChangedObservable = new r.c, this._orientationChanged = function() {
|
|
e._screenOrientationAngle = void 0 !== window.orientation ? +window.orientation : window.screen.orientation && window.screen.orientation.angle ? window.screen.orientation.angle : 0, e._screenOrientationAngle = -ye.h.ToRadians(e._screenOrientationAngle / 2), e._screenQuaternion.copyFromFloats(0, Math.sin(e._screenOrientationAngle), 0, Math.cos(e._screenOrientationAngle))
|
|
}, this._deviceOrientation = function(t) {
|
|
e._alpha = null !== t.alpha ? t.alpha : 0, e._beta = null !== t.beta ? t.beta : 0, e._gamma = null !== t.gamma ? t.gamma : 0, null !== t.alpha && e._onDeviceOrientationChangedObservable.notifyObservers()
|
|
}, this._constantTranform = new o.q(-Math.sqrt(.5), 0, 0, Math.sqrt(.5)), this._orientationChanged()
|
|
}
|
|
return Object.defineProperty(e.prototype, "camera", {
|
|
get: function() {
|
|
return this._camera
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
this._camera = e, null == this._camera || this._camera.rotationQuaternion || (this._camera.rotationQuaternion = new o.q), this._camera && this._camera.onDisposeObservable.add(function() {
|
|
t._onDeviceOrientationChangedObservable.clear()
|
|
})
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.attachControl = function(e, t) {
|
|
window.addEventListener("orientationchange", this._orientationChanged), window.addEventListener("deviceorientation", this._deviceOrientation), this._orientationChanged()
|
|
}, e.prototype.detachControl = function(e) {
|
|
window.removeEventListener("orientationchange", this._orientationChanged), window.removeEventListener("deviceorientation", this._deviceOrientation), this._alpha = 0
|
|
}, e.prototype.checkInputs = function() {
|
|
this._alpha && (o.q.RotationYawPitchRollToRef(ye.h.ToRadians(this._alpha), ye.h.ToRadians(this._beta), -ye.h.ToRadians(this._gamma), this.camera.rotationQuaternion), this._camera.rotationQuaternion.multiplyInPlace(this._screenQuaternion), this._camera.rotationQuaternion.multiplyInPlace(this._constantTranform), this._camera.rotationQuaternion.z *= -1, this._camera.rotationQuaternion.w *= -1)
|
|
}, e.prototype.getClassName = function() {
|
|
return "FreeCameraDeviceOrientationInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "deviceOrientation"
|
|
}, e
|
|
}();
|
|
We.FreeCameraDeviceOrientationInput = ft;
|
|
var pt = function() {
|
|
function e() {
|
|
this.gamepadAngularSensibility = 200, this.gamepadMoveSensibility = 40, this._cameraTransform = o.j.Identity(), this._deltaTransform = o.x.Zero(), this._vector3 = o.x.Zero(), this._vector2 = o.w.Zero()
|
|
}
|
|
return e.prototype.attachControl = function(e, t) {
|
|
var i = this,
|
|
n = this.camera.getScene().gamepadManager;
|
|
this._onGamepadConnectedObserver = n.onGamepadConnectedObservable.add(function(e) {
|
|
e.type !== Ke.POSE_ENABLED && (i.gamepad && e.type !== Ke.XBOX || (i.gamepad = e))
|
|
}), this._onGamepadDisconnectedObserver = n.onGamepadDisconnectedObservable.add(function(e) {
|
|
i.gamepad === e && (i.gamepad = null)
|
|
}), this.gamepad = n.getGamepadByType(Ke.XBOX)
|
|
}, e.prototype.detachControl = function(e) {
|
|
this.camera.getScene().gamepadManager.onGamepadConnectedObservable.remove(this._onGamepadConnectedObserver), this.camera.getScene().gamepadManager.onGamepadDisconnectedObservable.remove(this._onGamepadDisconnectedObserver), this.gamepad = null
|
|
}, e.prototype.checkInputs = function() {
|
|
if (this.gamepad && this.gamepad.leftStick) {
|
|
var e = this.camera,
|
|
t = this.gamepad.leftStick,
|
|
i = t.x / this.gamepadMoveSensibility,
|
|
n = t.y / this.gamepadMoveSensibility;
|
|
t.x = Math.abs(i) > .005 ? 0 + i : 0, t.y = Math.abs(n) > .005 ? 0 + n : 0;
|
|
var r = this.gamepad.rightStick;
|
|
if (r) {
|
|
var s = r.x / this.gamepadAngularSensibility,
|
|
a = r.y / this.gamepadAngularSensibility;
|
|
r.x = Math.abs(s) > .001 ? 0 + s : 0, r.y = Math.abs(a) > .001 ? 0 + a : 0
|
|
} else r = {
|
|
x: 0,
|
|
y: 0
|
|
};
|
|
e.rotationQuaternion ? e.rotationQuaternion.toRotationMatrix(this._cameraTransform) : o.j.RotationYawPitchRollToRef(e.rotation.y, e.rotation.x, 0, this._cameraTransform);
|
|
var c = 50 * e._computeLocalCameraSpeed();
|
|
this._vector3.copyFromFloats(t.x * c, 0, -t.y * c), o.x.TransformCoordinatesToRef(this._vector3, this._cameraTransform, this._deltaTransform), e.cameraDirection.addInPlace(this._deltaTransform), this._vector2.copyFromFloats(r.y, r.x), e.cameraRotation.addInPlace(this._vector2)
|
|
}
|
|
}, e.prototype.getClassName = function() {
|
|
return "FreeCameraGamepadInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "gamepad"
|
|
}, l.c([Object(L.c)()], e.prototype, "gamepadAngularSensibility", void 0), l.c([Object(L.c)()], e.prototype, "gamepadMoveSensibility", void 0), e
|
|
}();
|
|
We.FreeCameraGamepadInput = pt;
|
|
var _t, gt = i(61);
|
|
! function(e) {
|
|
e[e.X = 0] = "X", e[e.Y = 1] = "Y", e[e.Z = 2] = "Z"
|
|
}(_t || (_t = {}));
|
|
var mt = function() {
|
|
function e(t) {
|
|
var i = this;
|
|
if (this._leftJoystick = !!t, e._globalJoystickIndex++, this._axisTargetedByLeftAndRight = _t.X, this._axisTargetedByUpAndDown = _t.Y, this.reverseLeftRight = !1, this.reverseUpDown = !1, this._touches = new gt.a, this.deltaPosition = o.x.Zero(), this._joystickSensibility = 25, this._inversedSensibility = 1 / (this._joystickSensibility / 1e3), this._onResize = function(t) {
|
|
e.vjCanvasWidth = window.innerWidth, e.vjCanvasHeight = window.innerHeight, e.Canvas && (e.Canvas.width = e.vjCanvasWidth, e.Canvas.height = e.vjCanvasHeight), e.halfWidth = e.vjCanvasWidth / 2
|
|
}, !e.Canvas) {
|
|
window.addEventListener("resize", this._onResize, !1), e.Canvas = document.createElement("canvas"), e.vjCanvasWidth = window.innerWidth, e.vjCanvasHeight = window.innerHeight, e.Canvas.width = window.innerWidth, e.Canvas.height = window.innerHeight, e.Canvas.style.width = "100%", e.Canvas.style.height = "100%", e.Canvas.style.position = "absolute", e.Canvas.style.backgroundColor = "transparent", e.Canvas.style.top = "0px", e.Canvas.style.left = "0px", e.Canvas.style.zIndex = "5", e.Canvas.style.msTouchAction = "none", e.Canvas.setAttribute("touch-action", "none");
|
|
var n = e.Canvas.getContext("2d");
|
|
if (!n) throw new Error("Unable to create canvas for virtual joystick");
|
|
e.vjCanvasContext = n, e.vjCanvasContext.strokeStyle = "#ffffff", e.vjCanvasContext.lineWidth = 2, document.body.appendChild(e.Canvas)
|
|
}
|
|
e.halfWidth = e.Canvas.width / 2, this.pressed = !1, this._joystickColor = "cyan", this._joystickPointerID = -1, this._joystickPointerPos = new o.w(0, 0), this._joystickPreviousPointerPos = new o.w(0, 0), this._joystickPointerStartPos = new o.w(0, 0), this._deltaJoystickVector = new o.w(0, 0), this._onPointerDownHandlerRef = function(e) {
|
|
i._onPointerDown(e)
|
|
}, this._onPointerMoveHandlerRef = function(e) {
|
|
i._onPointerMove(e)
|
|
}, this._onPointerUpHandlerRef = function(e) {
|
|
i._onPointerUp(e)
|
|
}, e.Canvas.addEventListener("pointerdown", this._onPointerDownHandlerRef, !1), e.Canvas.addEventListener("pointermove", this._onPointerMoveHandlerRef, !1), e.Canvas.addEventListener("pointerup", this._onPointerUpHandlerRef, !1), e.Canvas.addEventListener("pointerout", this._onPointerUpHandlerRef, !1), e.Canvas.addEventListener("contextmenu", function(e) {
|
|
e.preventDefault()
|
|
}, !1), requestAnimationFrame(function() {
|
|
i._drawVirtualJoystick()
|
|
})
|
|
}
|
|
return e.prototype.setJoystickSensibility = function(e) {
|
|
this._joystickSensibility = e, this._inversedSensibility = 1 / (this._joystickSensibility / 1e3)
|
|
}, e.prototype._onPointerDown = function(t) {
|
|
t.preventDefault(), (!0 === this._leftJoystick ? t.clientX < e.halfWidth : t.clientX > e.halfWidth) && this._joystickPointerID < 0 ? (this._joystickPointerID = t.pointerId, this._joystickPointerStartPos.x = t.clientX, this._joystickPointerStartPos.y = t.clientY, this._joystickPointerPos = this._joystickPointerStartPos.clone(), this._joystickPreviousPointerPos = this._joystickPointerStartPos.clone(), this._deltaJoystickVector.x = 0, this._deltaJoystickVector.y = 0, this.pressed = !0, this._touches.add(t.pointerId.toString(), t)) : e._globalJoystickIndex < 2 && this._action && (this._action(), this._touches.add(t.pointerId.toString(), {
|
|
x: t.clientX,
|
|
y: t.clientY,
|
|
prevX: t.clientX,
|
|
prevY: t.clientY
|
|
}))
|
|
}, e.prototype._onPointerMove = function(e) {
|
|
if (this._joystickPointerID == e.pointerId) {
|
|
this._joystickPointerPos.x = e.clientX, this._joystickPointerPos.y = e.clientY, this._deltaJoystickVector = this._joystickPointerPos.clone(), this._deltaJoystickVector = this._deltaJoystickVector.subtract(this._joystickPointerStartPos);
|
|
var t = (this.reverseLeftRight ? -1 : 1) * this._deltaJoystickVector.x / this._inversedSensibility;
|
|
switch (this._axisTargetedByLeftAndRight) {
|
|
case _t.X:
|
|
this.deltaPosition.x = Math.min(1, Math.max(-1, t));
|
|
break;
|
|
case _t.Y:
|
|
this.deltaPosition.y = Math.min(1, Math.max(-1, t));
|
|
break;
|
|
case _t.Z:
|
|
this.deltaPosition.z = Math.min(1, Math.max(-1, t))
|
|
}
|
|
var i = (this.reverseUpDown ? 1 : -1) * this._deltaJoystickVector.y / this._inversedSensibility;
|
|
switch (this._axisTargetedByUpAndDown) {
|
|
case _t.X:
|
|
this.deltaPosition.x = Math.min(1, Math.max(-1, i));
|
|
break;
|
|
case _t.Y:
|
|
this.deltaPosition.y = Math.min(1, Math.max(-1, i));
|
|
break;
|
|
case _t.Z:
|
|
this.deltaPosition.z = Math.min(1, Math.max(-1, i))
|
|
}
|
|
} else {
|
|
var n = this._touches.get(e.pointerId.toString());
|
|
n && (n.x = e.clientX, n.y = e.clientY)
|
|
}
|
|
}, e.prototype._onPointerUp = function(t) {
|
|
if (this._joystickPointerID == t.pointerId) e.vjCanvasContext.clearRect(this._joystickPointerStartPos.x - 64, this._joystickPointerStartPos.y - 64, 128, 128), e.vjCanvasContext.clearRect(this._joystickPreviousPointerPos.x - 42, this._joystickPreviousPointerPos.y - 42, 84, 84), this._joystickPointerID = -1, this.pressed = !1;
|
|
else {
|
|
var i = this._touches.get(t.pointerId.toString());
|
|
i && e.vjCanvasContext.clearRect(i.prevX - 44, i.prevY - 44, 88, 88)
|
|
}
|
|
this._deltaJoystickVector.x = 0, this._deltaJoystickVector.y = 0, this._touches.remove(t.pointerId.toString())
|
|
}, e.prototype.setJoystickColor = function(e) {
|
|
this._joystickColor = e
|
|
}, e.prototype.setActionOnTouch = function(e) {
|
|
this._action = e
|
|
}, e.prototype.setAxisForLeftRight = function(e) {
|
|
switch (e) {
|
|
case _t.X:
|
|
case _t.Y:
|
|
case _t.Z:
|
|
this._axisTargetedByLeftAndRight = e;
|
|
break;
|
|
default:
|
|
this._axisTargetedByLeftAndRight = _t.X
|
|
}
|
|
}, e.prototype.setAxisForUpDown = function(e) {
|
|
switch (e) {
|
|
case _t.X:
|
|
case _t.Y:
|
|
case _t.Z:
|
|
this._axisTargetedByUpAndDown = e;
|
|
break;
|
|
default:
|
|
this._axisTargetedByUpAndDown = _t.Y
|
|
}
|
|
}, e.prototype._drawVirtualJoystick = function() {
|
|
var t = this;
|
|
this.pressed && this._touches.forEach(function(i, n) {
|
|
n.pointerId === t._joystickPointerID ? (e.vjCanvasContext.clearRect(t._joystickPointerStartPos.x - 64, t._joystickPointerStartPos.y - 64, 128, 128), e.vjCanvasContext.clearRect(t._joystickPreviousPointerPos.x - 42, t._joystickPreviousPointerPos.y - 42, 84, 84), e.vjCanvasContext.beginPath(), e.vjCanvasContext.lineWidth = 6, e.vjCanvasContext.strokeStyle = t._joystickColor, e.vjCanvasContext.arc(t._joystickPointerStartPos.x, t._joystickPointerStartPos.y, 40, 0, 2 * Math.PI, !0), e.vjCanvasContext.stroke(), e.vjCanvasContext.closePath(), e.vjCanvasContext.beginPath(), e.vjCanvasContext.strokeStyle = t._joystickColor, e.vjCanvasContext.lineWidth = 2, e.vjCanvasContext.arc(t._joystickPointerStartPos.x, t._joystickPointerStartPos.y, 60, 0, 2 * Math.PI, !0), e.vjCanvasContext.stroke(), e.vjCanvasContext.closePath(), e.vjCanvasContext.beginPath(), e.vjCanvasContext.strokeStyle = t._joystickColor, e.vjCanvasContext.arc(t._joystickPointerPos.x, t._joystickPointerPos.y, 40, 0, 2 * Math.PI, !0), e.vjCanvasContext.stroke(), e.vjCanvasContext.closePath(), t._joystickPreviousPointerPos = t._joystickPointerPos.clone()) : (e.vjCanvasContext.clearRect(n.prevX - 44, n.prevY - 44, 88, 88), e.vjCanvasContext.beginPath(), e.vjCanvasContext.fillStyle = "white", e.vjCanvasContext.beginPath(), e.vjCanvasContext.strokeStyle = "red", e.vjCanvasContext.lineWidth = 6, e.vjCanvasContext.arc(n.x, n.y, 40, 0, 2 * Math.PI, !0), e.vjCanvasContext.stroke(), e.vjCanvasContext.closePath(), n.prevX = n.x, n.prevY = n.y)
|
|
}), requestAnimationFrame(function() {
|
|
t._drawVirtualJoystick()
|
|
})
|
|
}, e.prototype.releaseCanvas = function() {
|
|
e.Canvas && (e.Canvas.removeEventListener("pointerdown", this._onPointerDownHandlerRef), e.Canvas.removeEventListener("pointermove", this._onPointerMoveHandlerRef), e.Canvas.removeEventListener("pointerup", this._onPointerUpHandlerRef), e.Canvas.removeEventListener("pointerout", this._onPointerUpHandlerRef), window.removeEventListener("resize", this._onResize), document.body.removeChild(e.Canvas), e.Canvas = null)
|
|
}, e._globalJoystickIndex = 0, e
|
|
}();
|
|
dt.prototype.addVirtualJoystick = function() {
|
|
return this.add(new vt), this
|
|
};
|
|
var vt = function() {
|
|
function e() {}
|
|
return e.prototype.getLeftJoystick = function() {
|
|
return this._leftjoystick
|
|
}, e.prototype.getRightJoystick = function() {
|
|
return this._rightjoystick
|
|
}, e.prototype.checkInputs = function() {
|
|
if (this._leftjoystick) {
|
|
var e = this.camera,
|
|
t = 50 * e._computeLocalCameraSpeed(),
|
|
i = o.j.RotationYawPitchRoll(e.rotation.y, e.rotation.x, 0),
|
|
n = o.x.TransformCoordinates(new o.x(this._leftjoystick.deltaPosition.x * t, this._leftjoystick.deltaPosition.y * t, this._leftjoystick.deltaPosition.z * t), i);
|
|
e.cameraDirection = e.cameraDirection.add(n), e.cameraRotation = e.cameraRotation.addVector3(this._rightjoystick.deltaPosition), this._leftjoystick.pressed || (this._leftjoystick.deltaPosition = this._leftjoystick.deltaPosition.scale(.9)), this._rightjoystick.pressed || (this._rightjoystick.deltaPosition = this._rightjoystick.deltaPosition.scale(.9))
|
|
}
|
|
}, e.prototype.attachControl = function(e, t) {
|
|
this._leftjoystick = new mt(!0), this._leftjoystick.setAxisForUpDown(_t.Z), this._leftjoystick.setAxisForLeftRight(_t.X), this._leftjoystick.setJoystickSensibility(.15), this._rightjoystick = new mt(!1), this._rightjoystick.setAxisForUpDown(_t.X), this._rightjoystick.setAxisForLeftRight(_t.Y), this._rightjoystick.reverseUpDown = !0, this._rightjoystick.setJoystickSensibility(.05), this._rightjoystick.setJoystickColor("yellow")
|
|
}, e.prototype.detachControl = function(e) {
|
|
this._leftjoystick.releaseCanvas(), this._rightjoystick.releaseCanvas()
|
|
}, e.prototype.getClassName = function() {
|
|
return "FreeCameraVirtualJoystickInput"
|
|
}, e.prototype.getSimpleName = function() {
|
|
return "virtualJoystick"
|
|
}, e
|
|
}();
|
|
We.FreeCameraVirtualJoystickInput = vt;
|
|
var yt = function(e) {
|
|
function t(t, i, n, r) {
|
|
void 0 === r && (r = !0);
|
|
var s = e.call(this, t, i, n, r) || this;
|
|
return s.cameraDirection = new o.x(0, 0, 0), s.cameraRotation = new o.w(0, 0), s.updateUpVectorFromRotation = !1, s._tmpQuaternion = new o.q, s.rotation = new o.x(0, 0, 0), s.speed = 2, s.noRotationConstraint = !1, s.lockedTarget = null, s._currentTarget = o.x.Zero(), s._initialFocalDistance = 1, s._viewMatrix = o.j.Zero(), s._camMatrix = o.j.Zero(), s._cameraTransformMatrix = o.j.Zero(), s._cameraRotationMatrix = o.j.Zero(), s._referencePoint = new o.x(0, 0, 1), s._transformedReferencePoint = o.x.Zero(), s._globalCurrentTarget = o.x.Zero(), s._globalCurrentUpVector = o.x.Zero(), s._defaultUp = o.x.Up(), s._cachedRotationZ = 0, s._cachedQuaternionRotationZ = 0, s
|
|
}
|
|
return l.d(t, e), t.prototype.getFrontPosition = function(e) {
|
|
this.getWorldMatrix();
|
|
var t = this.getTarget().subtract(this.position);
|
|
return t.normalize(), t.scaleInPlace(e), this.globalPosition.add(t)
|
|
}, t.prototype._getLockedTargetPosition = function() {
|
|
return this.lockedTarget ? (this.lockedTarget.absolutePosition && this.lockedTarget.computeWorldMatrix(), this.lockedTarget.absolutePosition || this.lockedTarget) : null
|
|
}, t.prototype.storeState = function() {
|
|
return this._storedPosition = this.position.clone(), this._storedRotation = this.rotation.clone(), this.rotationQuaternion && (this._storedRotationQuaternion = this.rotationQuaternion.clone()), e.prototype.storeState.call(this)
|
|
}, t.prototype._restoreStateValues = function() {
|
|
return !!e.prototype._restoreStateValues.call(this) && (this.position = this._storedPosition.clone(), this.rotation = this._storedRotation.clone(), this.rotationQuaternion && (this.rotationQuaternion = this._storedRotationQuaternion.clone()), this.cameraDirection.copyFromFloats(0, 0, 0), this.cameraRotation.copyFromFloats(0, 0), !0)
|
|
}, t.prototype._initCache = function() {
|
|
e.prototype._initCache.call(this), this._cache.lockedTarget = new o.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), this._cache.rotation = new o.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), this._cache.rotationQuaternion = new o.q(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE)
|
|
}, t.prototype._updateCache = function(t) {
|
|
t || e.prototype._updateCache.call(this);
|
|
var i = this._getLockedTargetPosition();
|
|
i ? this._cache.lockedTarget ? this._cache.lockedTarget.copyFrom(i) : this._cache.lockedTarget = i.clone() : this._cache.lockedTarget = null, this._cache.rotation.copyFrom(this.rotation), this.rotationQuaternion && this._cache.rotationQuaternion.copyFrom(this.rotationQuaternion)
|
|
}, t.prototype._isSynchronizedViewMatrix = function() {
|
|
if (!e.prototype._isSynchronizedViewMatrix.call(this)) return !1;
|
|
var t = this._getLockedTargetPosition();
|
|
return (this._cache.lockedTarget ? this._cache.lockedTarget.equals(t) : !t) && (this.rotationQuaternion ? this.rotationQuaternion.equals(this._cache.rotationQuaternion) : this._cache.rotation.equals(this.rotation))
|
|
}, t.prototype._computeLocalCameraSpeed = function() {
|
|
var e = this.getEngine();
|
|
return this.speed * Math.sqrt(e.getDeltaTime() / (100 * e.getFps()))
|
|
}, t.prototype.setTarget = function(e) {
|
|
this.upVector.normalize(), this._initialFocalDistance = e.subtract(this.position).length(), this.position.z === e.z && (this.position.z += o.h), o.j.LookAtLHToRef(this.position, e, this._defaultUp, this._camMatrix), this._camMatrix.invert(), this.rotation.x = Math.atan(this._camMatrix.m[6] / this._camMatrix.m[10]);
|
|
var t = e.subtract(this.position);
|
|
t.x >= 0 ? this.rotation.y = -Math.atan(t.z / t.x) + Math.PI / 2 : this.rotation.y = -Math.atan(t.z / t.x) - Math.PI / 2, this.rotation.z = 0, isNaN(this.rotation.x) && (this.rotation.x = 0), isNaN(this.rotation.y) && (this.rotation.y = 0), isNaN(this.rotation.z) && (this.rotation.z = 0), this.rotationQuaternion && o.q.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this.rotationQuaternion)
|
|
}, t.prototype.getTarget = function() {
|
|
return this._currentTarget
|
|
}, t.prototype._decideIfNeedsToMove = function() {
|
|
return Math.abs(this.cameraDirection.x) > 0 || Math.abs(this.cameraDirection.y) > 0 || Math.abs(this.cameraDirection.z) > 0
|
|
}, t.prototype._updatePosition = function() {
|
|
if (this.parent) return this.parent.getWorldMatrix().invertToRef(o.t.Matrix[0]), o.x.TransformNormalToRef(this.cameraDirection, o.t.Matrix[0], o.t.Vector3[0]), void this.position.addInPlace(o.t.Vector3[0]);
|
|
this.position.addInPlace(this.cameraDirection)
|
|
}, t.prototype._checkInputs = function() {
|
|
var t = this._decideIfNeedsToMove(),
|
|
i = Math.abs(this.cameraRotation.x) > 0 || Math.abs(this.cameraRotation.y) > 0;
|
|
if (t && this._updatePosition(), i) {
|
|
if (this.rotation.x += this.cameraRotation.x, this.rotation.y += this.cameraRotation.y, this.rotationQuaternion) this.rotation.lengthSquared() && o.q.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this.rotationQuaternion);
|
|
if (!this.noRotationConstraint) {
|
|
var n = Math.PI / 2 * .95;
|
|
this.rotation.x > n && (this.rotation.x = n), this.rotation.x < -n && (this.rotation.x = -n)
|
|
}
|
|
}
|
|
t && (Math.abs(this.cameraDirection.x) < this.speed * o.h && (this.cameraDirection.x = 0), Math.abs(this.cameraDirection.y) < this.speed * o.h && (this.cameraDirection.y = 0), Math.abs(this.cameraDirection.z) < this.speed * o.h && (this.cameraDirection.z = 0), this.cameraDirection.scaleInPlace(this.inertia)), i && (Math.abs(this.cameraRotation.x) < this.speed * o.h && (this.cameraRotation.x = 0), Math.abs(this.cameraRotation.y) < this.speed * o.h && (this.cameraRotation.y = 0), this.cameraRotation.scaleInPlace(this.inertia)), e.prototype._checkInputs.call(this)
|
|
}, t.prototype._updateCameraRotationMatrix = function() {
|
|
this.rotationQuaternion ? this.rotationQuaternion.toRotationMatrix(this._cameraRotationMatrix) : o.j.RotationYawPitchRollToRef(this.rotation.y, this.rotation.x, this.rotation.z, this._cameraRotationMatrix)
|
|
}, t.prototype._rotateUpVectorWithCameraRotationMatrix = function() {
|
|
return o.x.TransformNormalToRef(this._defaultUp, this._cameraRotationMatrix, this.upVector), this
|
|
}, t.prototype._getViewMatrix = function() {
|
|
return this.lockedTarget && this.setTarget(this._getLockedTargetPosition()), this._updateCameraRotationMatrix(), this.rotationQuaternion && this._cachedQuaternionRotationZ != this.rotationQuaternion.z ? (this._rotateUpVectorWithCameraRotationMatrix(), this._cachedQuaternionRotationZ = this.rotationQuaternion.z) : this._cachedRotationZ != this.rotation.z && (this._rotateUpVectorWithCameraRotationMatrix(), this._cachedRotationZ = this.rotation.z), o.x.TransformCoordinatesToRef(this._referencePoint, this._cameraRotationMatrix, this._transformedReferencePoint), this.position.addToRef(this._transformedReferencePoint, this._currentTarget), this.updateUpVectorFromRotation && (this.rotationQuaternion ? o.c.Y.rotateByQuaternionToRef(this.rotationQuaternion, this.upVector) : (o.q.FromEulerVectorToRef(this.rotation, this._tmpQuaternion), o.c.Y.rotateByQuaternionToRef(this._tmpQuaternion, this.upVector))), this._computeViewMatrix(this.position, this._currentTarget, this.upVector), this._viewMatrix
|
|
}, t.prototype._computeViewMatrix = function(e, t, i) {
|
|
if (this.parent) {
|
|
var n = this.parent.getWorldMatrix();
|
|
o.x.TransformCoordinatesToRef(e, n, this._globalPosition), o.x.TransformCoordinatesToRef(t, n, this._globalCurrentTarget), o.x.TransformNormalToRef(i, n, this._globalCurrentUpVector), this._markSyncedWithParent()
|
|
} else this._globalPosition.copyFrom(e), this._globalCurrentTarget.copyFrom(t), this._globalCurrentUpVector.copyFrom(i);
|
|
this.getScene().useRightHandedSystem ? o.j.LookAtRHToRef(this._globalPosition, this._globalCurrentTarget, this._globalCurrentUpVector, this._viewMatrix) : o.j.LookAtLHToRef(this._globalPosition, this._globalCurrentTarget, this._globalCurrentUpVector, this._viewMatrix)
|
|
}, t.prototype.createRigCamera = function(e, i) {
|
|
if (this.cameraRigMode !== Ne.a.RIG_MODE_NONE) {
|
|
var n = new t(e, this.position.clone(), this.getScene());
|
|
return this.cameraRigMode !== Ne.a.RIG_MODE_VR && this.cameraRigMode !== Ne.a.RIG_MODE_WEBVR || (this.rotationQuaternion || (this.rotationQuaternion = new o.q), n._cameraRigParams = {}, n.rotationQuaternion = new o.q), n
|
|
}
|
|
return null
|
|
}, t.prototype._updateRigCameras = function() {
|
|
var t = this._rigCameras[0],
|
|
i = this._rigCameras[1];
|
|
switch (this.computeWorldMatrix(), this.cameraRigMode) {
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_ANAGLYPH:
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_OVERUNDER:
|
|
var n = this.cameraRigMode === Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED ? 1 : -1,
|
|
r = this.cameraRigMode === Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED ? -1 : 1;
|
|
this._getRigCamPositionAndTarget(this._cameraRigParams.stereoHalfAngle * n, t), this._getRigCamPositionAndTarget(this._cameraRigParams.stereoHalfAngle * r, i);
|
|
break;
|
|
case Ne.a.RIG_MODE_VR:
|
|
t.rotationQuaternion ? (t.rotationQuaternion.copyFrom(this.rotationQuaternion), i.rotationQuaternion.copyFrom(this.rotationQuaternion)) : (t.rotation.copyFrom(this.rotation), i.rotation.copyFrom(this.rotation)), t.position.copyFrom(this.position), i.position.copyFrom(this.position)
|
|
}
|
|
e.prototype._updateRigCameras.call(this)
|
|
}, t.prototype._getRigCamPositionAndTarget = function(e, i) {
|
|
this.getTarget().subtractToRef(this.position, t._TargetFocalPoint), t._TargetFocalPoint.normalize().scaleInPlace(this._initialFocalDistance);
|
|
var n = t._TargetFocalPoint.addInPlace(this.position);
|
|
o.j.TranslationToRef(-n.x, -n.y, -n.z, t._TargetTransformMatrix), t._TargetTransformMatrix.multiplyToRef(o.j.RotationY(e), t._RigCamTransformMatrix), o.j.TranslationToRef(n.x, n.y, n.z, t._TargetTransformMatrix), t._RigCamTransformMatrix.multiplyToRef(t._TargetTransformMatrix, t._RigCamTransformMatrix), o.x.TransformCoordinatesToRef(this.position, t._RigCamTransformMatrix, i.position), i.setTarget(n)
|
|
}, t.prototype.getClassName = function() {
|
|
return "TargetCamera"
|
|
}, t._RigCamTransformMatrix = new o.j, t._TargetTransformMatrix = new o.j, t._TargetFocalPoint = new o.x, l.c([Object(L.o)()], t.prototype, "rotation", void 0), l.c([Object(L.c)()], t.prototype, "speed", void 0), l.c([Object(L.k)("lockedTargetId")], t.prototype, "lockedTarget", void 0), t
|
|
}(Ne.a),
|
|
bt = function(e) {
|
|
function t(t, i, n, r) {
|
|
void 0 === r && (r = !0);
|
|
var s = e.call(this, t, i, n, r) || this;
|
|
return s.ellipsoid = new o.x(.5, 1, .5), s.ellipsoidOffset = new o.x(0, 0, 0), s.checkCollisions = !1, s.applyGravity = !1, s._needMoveForGravity = !1, s._oldPosition = o.x.Zero(), s._diffPosition = o.x.Zero(), s._newPosition = o.x.Zero(), s._collisionMask = -1, s._onCollisionPositionChange = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n;
|
|
n = t, s._newPosition.copyFrom(n), s._newPosition.subtractToRef(s._oldPosition, s._diffPosition), s._diffPosition.length() > ge.b.CollisionsEpsilon && (s.position.addInPlace(s._diffPosition), s.onCollide && i && s.onCollide(i))
|
|
}, s.inputs = new dt(s), s.inputs.addKeyboard().addMouse(), s
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "angularSensibility", {
|
|
get: function() {
|
|
var e = this.inputs.attached.mouse;
|
|
return e ? e.angularSensibility : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.mouse;
|
|
t && (t.angularSensibility = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysUp", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysUp : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysUp = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysDown", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysDown : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysDown = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysLeft", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysLeft : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysLeft = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysRight", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysRight : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysRight = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.attachControl = function(e, t) {
|
|
this.inputs.attachElement(e, t)
|
|
}, t.prototype.detachControl = function(e) {
|
|
this.inputs.detachElement(e), this.cameraDirection = new o.x(0, 0, 0), this.cameraRotation = new o.w(0, 0)
|
|
}, Object.defineProperty(t.prototype, "collisionMask", {
|
|
get: function() {
|
|
return this._collisionMask
|
|
},
|
|
set: function(e) {
|
|
this._collisionMask = isNaN(e) ? -1 : e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._collideWithWorld = function(e) {
|
|
(this.parent ? o.x.TransformCoordinates(this.position, this.parent.getWorldMatrix()) : this.position).subtractFromFloatsToRef(0, this.ellipsoid.y, 0, this._oldPosition), this._oldPosition.addInPlace(this.ellipsoidOffset);
|
|
var t = this.getScene().collisionCoordinator;
|
|
this._collider || (this._collider = t.createCollider()), this._collider._radius = this.ellipsoid, this._collider.collisionMask = this._collisionMask;
|
|
var i = e;
|
|
this.applyGravity && (i = e.add(this.getScene().gravity)), t.getNewPosition(this._oldPosition, i, this._collider, 3, null, this._onCollisionPositionChange, this.uniqueId)
|
|
}, t.prototype._checkInputs = function() {
|
|
this._localDirection || (this._localDirection = o.x.Zero(), this._transformedDirection = o.x.Zero()), this.inputs.checkInputs(), e.prototype._checkInputs.call(this)
|
|
}, t.prototype._decideIfNeedsToMove = function() {
|
|
return this._needMoveForGravity || Math.abs(this.cameraDirection.x) > 0 || Math.abs(this.cameraDirection.y) > 0 || Math.abs(this.cameraDirection.z) > 0
|
|
}, t.prototype._updatePosition = function() {
|
|
this.checkCollisions && this.getScene().collisionsEnabled ? this._collideWithWorld(this.cameraDirection) : e.prototype._updatePosition.call(this)
|
|
}, t.prototype.dispose = function() {
|
|
this.inputs.clear(), e.prototype.dispose.call(this)
|
|
}, t.prototype.getClassName = function() {
|
|
return "FreeCamera"
|
|
}, l.c([Object(L.o)()], t.prototype, "ellipsoid", void 0), l.c([Object(L.o)()], t.prototype, "ellipsoidOffset", void 0), l.c([Object(L.c)()], t.prototype, "checkCollisions", void 0), l.c([Object(L.c)()], t.prototype, "applyGravity", void 0), t
|
|
}(yt);
|
|
F.a.AddNodeConstructor("TouchCamera", function(e, t) {
|
|
return function() {
|
|
return new Tt(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var Tt = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, i, n) || this;
|
|
return r.inputs.addTouch(), r._setupInputs(), r
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "touchAngularSensibility", {
|
|
get: function() {
|
|
var e = this.inputs.attached.touch;
|
|
return e ? e.touchAngularSensibility : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.touch;
|
|
t && (t.touchAngularSensibility = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "touchMoveSensibility", {
|
|
get: function() {
|
|
var e = this.inputs.attached.touch;
|
|
return e ? e.touchMoveSensibility : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.touch;
|
|
t && (t.touchMoveSensibility = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "TouchCamera"
|
|
}, t.prototype._setupInputs = function() {
|
|
var e = this.inputs.attached.mouse;
|
|
e && (e.touchEnabled = !1)
|
|
}, t
|
|
}(bt);
|
|
F.a.AddNodeConstructor("ArcRotateCamera", function(e, t) {
|
|
return function() {
|
|
return new Et(e, 0, 0, 1, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var Et = function(e) {
|
|
function t(t, i, n, s, a, c, l) {
|
|
void 0 === l && (l = !0);
|
|
var u = e.call(this, t, o.x.Zero(), c, l) || this;
|
|
return u._upVector = o.x.Up(), u.inertialAlphaOffset = 0, u.inertialBetaOffset = 0, u.inertialRadiusOffset = 0, u.lowerAlphaLimit = null, u.upperAlphaLimit = null, u.lowerBetaLimit = .01, u.upperBetaLimit = Math.PI - .01, u.lowerRadiusLimit = null, u.upperRadiusLimit = null, u.inertialPanningX = 0, u.inertialPanningY = 0, u.pinchToPanMaxDistance = 20, u.panningDistanceLimit = null, u.panningOriginTarget = o.x.Zero(), u.panningInertia = .9, u.zoomOnFactor = 1, u.targetScreenOffset = o.w.Zero(), u.allowUpsideDown = !0, u.useInputToRestoreState = !0, u._viewMatrix = new o.j, u.panningAxis = new o.x(1, 1, 0), u.onMeshTargetChangedObservable = new r.c, u.checkCollisions = !1, u.collisionRadius = new o.x(.5, .5, .5), u._previousPosition = o.x.Zero(), u._collisionVelocity = o.x.Zero(), u._newPosition = o.x.Zero(), u._computationVector = o.x.Zero(), u._onCollisionPositionChange = function(e, t, i) {
|
|
void 0 === i && (i = null), i ? (u.setPosition(t), u.onCollide && u.onCollide(i)) : u._previousPosition.copyFrom(u._position);
|
|
var n = Math.cos(u.alpha),
|
|
r = Math.sin(u.alpha),
|
|
o = Math.cos(u.beta),
|
|
s = Math.sin(u.beta);
|
|
0 === s && (s = 1e-4);
|
|
var a = u._getTargetPosition();
|
|
u._computationVector.copyFromFloats(u.radius * n * s, u.radius * o, u.radius * r * s), a.addToRef(u._computationVector, u._newPosition), u._position.copyFrom(u._newPosition);
|
|
var c = u.upVector;
|
|
u.allowUpsideDown && u.beta < 0 && (c = (c = c.clone()).negate()), u._computeViewMatrix(u._position, a, c), u._viewMatrix.addAtIndex(12, u.targetScreenOffset.x), u._viewMatrix.addAtIndex(13, u.targetScreenOffset.y), u._collisionTriggered = !1
|
|
}, u._target = o.x.Zero(), a && u.setTarget(a), u.alpha = i, u.beta = n, u.radius = s, u.getViewMatrix(), u.inputs = new it(u), u.inputs.addKeyboard().addMouseWheel().addPointers(), u
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "target", {
|
|
get: function() {
|
|
return this._target
|
|
},
|
|
set: function(e) {
|
|
this.setTarget(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "position", {
|
|
get: function() {
|
|
return this._position
|
|
},
|
|
set: function(e) {
|
|
this.setPosition(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "upVector", {
|
|
get: function() {
|
|
return this._upVector
|
|
},
|
|
set: function(e) {
|
|
this._upToYMatrix || (this._YToUpMatrix = new o.j, this._upToYMatrix = new o.j, this._upVector = o.x.Zero()), e.normalize(), this._upVector.copyFrom(e), this.setMatUp()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.setMatUp = function() {
|
|
o.j.RotationAlignToRef(o.x.UpReadOnly, this._upVector, this._YToUpMatrix), o.j.RotationAlignToRef(this._upVector, o.x.UpReadOnly, this._upToYMatrix)
|
|
}, Object.defineProperty(t.prototype, "angularSensibilityX", {
|
|
get: function() {
|
|
var e = this.inputs.attached.pointers;
|
|
return e ? e.angularSensibilityX : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.pointers;
|
|
t && (t.angularSensibilityX = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "angularSensibilityY", {
|
|
get: function() {
|
|
var e = this.inputs.attached.pointers;
|
|
return e ? e.angularSensibilityY : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.pointers;
|
|
t && (t.angularSensibilityY = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "pinchPrecision", {
|
|
get: function() {
|
|
var e = this.inputs.attached.pointers;
|
|
return e ? e.pinchPrecision : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.pointers;
|
|
t && (t.pinchPrecision = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "pinchDeltaPercentage", {
|
|
get: function() {
|
|
var e = this.inputs.attached.pointers;
|
|
return e ? e.pinchDeltaPercentage : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.pointers;
|
|
t && (t.pinchDeltaPercentage = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "panningSensibility", {
|
|
get: function() {
|
|
var e = this.inputs.attached.pointers;
|
|
return e ? e.panningSensibility : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.pointers;
|
|
t && (t.panningSensibility = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysUp", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysUp : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysUp = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysDown", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysDown : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysDown = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysLeft", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysLeft : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysLeft = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysRight", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysRight : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysRight = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "wheelPrecision", {
|
|
get: function() {
|
|
var e = this.inputs.attached.mousewheel;
|
|
return e ? e.wheelPrecision : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.mousewheel;
|
|
t && (t.wheelPrecision = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "wheelDeltaPercentage", {
|
|
get: function() {
|
|
var e = this.inputs.attached.mousewheel;
|
|
return e ? e.wheelDeltaPercentage : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.mousewheel;
|
|
t && (t.wheelDeltaPercentage = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "bouncingBehavior", {
|
|
get: function() {
|
|
return this._bouncingBehavior
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "useBouncingBehavior", {
|
|
get: function() {
|
|
return null != this._bouncingBehavior
|
|
},
|
|
set: function(e) {
|
|
e !== this.useBouncingBehavior && (e ? (this._bouncingBehavior = new Ce, this.addBehavior(this._bouncingBehavior)) : this._bouncingBehavior && (this.removeBehavior(this._bouncingBehavior), this._bouncingBehavior = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "framingBehavior", {
|
|
get: function() {
|
|
return this._framingBehavior
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "useFramingBehavior", {
|
|
get: function() {
|
|
return null != this._framingBehavior
|
|
},
|
|
set: function(e) {
|
|
e !== this.useFramingBehavior && (e ? (this._framingBehavior = new Me, this.addBehavior(this._framingBehavior)) : this._framingBehavior && (this.removeBehavior(this._framingBehavior), this._framingBehavior = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "autoRotationBehavior", {
|
|
get: function() {
|
|
return this._autoRotationBehavior
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "useAutoRotationBehavior", {
|
|
get: function() {
|
|
return null != this._autoRotationBehavior
|
|
},
|
|
set: function(e) {
|
|
e !== this.useAutoRotationBehavior && (e ? (this._autoRotationBehavior = new Se, this.addBehavior(this._autoRotationBehavior)) : this._autoRotationBehavior && (this.removeBehavior(this._autoRotationBehavior), this._autoRotationBehavior = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._initCache = function() {
|
|
e.prototype._initCache.call(this), this._cache._target = new o.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), this._cache.alpha = void 0, this._cache.beta = void 0, this._cache.radius = void 0, this._cache.targetScreenOffset = o.w.Zero()
|
|
}, t.prototype._updateCache = function(t) {
|
|
t || e.prototype._updateCache.call(this), this._cache._target.copyFrom(this._getTargetPosition()), this._cache.alpha = this.alpha, this._cache.beta = this.beta, this._cache.radius = this.radius, this._cache.targetScreenOffset.copyFrom(this.targetScreenOffset)
|
|
}, t.prototype._getTargetPosition = function() {
|
|
if (this._targetHost && this._targetHost.getAbsolutePosition) {
|
|
var e = this._targetHost.absolutePosition;
|
|
this._targetBoundingCenter ? e.addToRef(this._targetBoundingCenter, this._target) : this._target.copyFrom(e)
|
|
}
|
|
var t = this._getLockedTargetPosition();
|
|
return t || this._target
|
|
}, t.prototype.storeState = function() {
|
|
return this._storedAlpha = this.alpha, this._storedBeta = this.beta, this._storedRadius = this.radius, this._storedTarget = this._getTargetPosition().clone(), e.prototype.storeState.call(this)
|
|
}, t.prototype._restoreStateValues = function() {
|
|
return !!e.prototype._restoreStateValues.call(this) && (this.alpha = this._storedAlpha, this.beta = this._storedBeta, this.radius = this._storedRadius, this.setTarget(this._storedTarget.clone()), this.inertialAlphaOffset = 0, this.inertialBetaOffset = 0, this.inertialRadiusOffset = 0, this.inertialPanningX = 0, this.inertialPanningY = 0, !0)
|
|
}, t.prototype._isSynchronizedViewMatrix = function() {
|
|
return !!e.prototype._isSynchronizedViewMatrix.call(this) && (this._cache._target.equals(this._getTargetPosition()) && this._cache.alpha === this.alpha && this._cache.beta === this.beta && this._cache.radius === this.radius && this._cache.targetScreenOffset.equals(this.targetScreenOffset))
|
|
}, t.prototype.attachControl = function(e, t, i, n) {
|
|
var r = this;
|
|
void 0 === i && (i = !0), void 0 === n && (n = 2), this._useCtrlForPanning = i, this._panningMouseButton = n, this.inputs.attachElement(e, t), this._reset = function() {
|
|
r.inertialAlphaOffset = 0, r.inertialBetaOffset = 0, r.inertialRadiusOffset = 0, r.inertialPanningX = 0, r.inertialPanningY = 0
|
|
}
|
|
}, t.prototype.detachControl = function(e) {
|
|
this.inputs.detachElement(e), this._reset && this._reset()
|
|
}, t.prototype._checkInputs = function() {
|
|
if (!this._collisionTriggered) {
|
|
if (this.inputs.checkInputs(), 0 !== this.inertialAlphaOffset || 0 !== this.inertialBetaOffset || 0 !== this.inertialRadiusOffset) {
|
|
var t = this.inertialAlphaOffset;
|
|
this.beta <= 0 && (t *= -1), this.getScene().useRightHandedSystem && (t *= -1), this.parent && this.parent._getWorldMatrixDeterminant() < 0 && (t *= -1), this.alpha += t, this.beta += this.inertialBetaOffset, this.radius -= this.inertialRadiusOffset, this.inertialAlphaOffset *= this.inertia, this.inertialBetaOffset *= this.inertia, this.inertialRadiusOffset *= this.inertia, Math.abs(this.inertialAlphaOffset) < o.h && (this.inertialAlphaOffset = 0), Math.abs(this.inertialBetaOffset) < o.h && (this.inertialBetaOffset = 0), Math.abs(this.inertialRadiusOffset) < this.speed * o.h && (this.inertialRadiusOffset = 0)
|
|
}
|
|
if (0 !== this.inertialPanningX || 0 !== this.inertialPanningY) {
|
|
if (this._localDirection || (this._localDirection = o.x.Zero(), this._transformedDirection = o.x.Zero()), this._localDirection.copyFromFloats(this.inertialPanningX, this.inertialPanningY, this.inertialPanningY), this._localDirection.multiplyInPlace(this.panningAxis), this._viewMatrix.invertToRef(this._cameraTransformMatrix), o.x.TransformNormalToRef(this._localDirection, this._cameraTransformMatrix, this._transformedDirection), this.panningAxis.y || (this._transformedDirection.y = 0), !this._targetHost)
|
|
if (this.panningDistanceLimit) this._transformedDirection.addInPlace(this._target), o.x.DistanceSquared(this._transformedDirection, this.panningOriginTarget) <= this.panningDistanceLimit * this.panningDistanceLimit && this._target.copyFrom(this._transformedDirection);
|
|
else this._target.addInPlace(this._transformedDirection);
|
|
this.inertialPanningX *= this.panningInertia, this.inertialPanningY *= this.panningInertia, Math.abs(this.inertialPanningX) < this.speed * o.h && (this.inertialPanningX = 0), Math.abs(this.inertialPanningY) < this.speed * o.h && (this.inertialPanningY = 0)
|
|
}
|
|
this._checkLimits(), e.prototype._checkInputs.call(this)
|
|
}
|
|
}, t.prototype._checkLimits = function() {
|
|
null === this.lowerBetaLimit || void 0 === this.lowerBetaLimit ? this.allowUpsideDown && this.beta > Math.PI && (this.beta = this.beta - 2 * Math.PI) : this.beta < this.lowerBetaLimit && (this.beta = this.lowerBetaLimit), null === this.upperBetaLimit || void 0 === this.upperBetaLimit ? this.allowUpsideDown && this.beta < -Math.PI && (this.beta = this.beta + 2 * Math.PI) : this.beta > this.upperBetaLimit && (this.beta = this.upperBetaLimit), null !== this.lowerAlphaLimit && this.alpha < this.lowerAlphaLimit && (this.alpha = this.lowerAlphaLimit), null !== this.upperAlphaLimit && this.alpha > this.upperAlphaLimit && (this.alpha = this.upperAlphaLimit), null !== this.lowerRadiusLimit && this.radius < this.lowerRadiusLimit && (this.radius = this.lowerRadiusLimit, this.inertialRadiusOffset = 0), null !== this.upperRadiusLimit && this.radius > this.upperRadiusLimit && (this.radius = this.upperRadiusLimit, this.inertialRadiusOffset = 0)
|
|
}, t.prototype.rebuildAnglesAndRadius = function() {
|
|
this._position.subtractToRef(this._getTargetPosition(), this._computationVector), 0 === this._upVector.x && 1 === this._upVector.y && 0 === this._upVector.z || o.x.TransformCoordinatesToRef(this._computationVector, this._upToYMatrix, this._computationVector), this.radius = this._computationVector.length(), 0 === this.radius && (this.radius = 1e-4), 0 === this._computationVector.x && 0 === this._computationVector.z ? this.alpha = Math.PI / 2 : this.alpha = Math.acos(this._computationVector.x / Math.sqrt(Math.pow(this._computationVector.x, 2) + Math.pow(this._computationVector.z, 2))), this._computationVector.z < 0 && (this.alpha = 2 * Math.PI - this.alpha), this.beta = Math.acos(this._computationVector.y / this.radius), this._checkLimits()
|
|
}, t.prototype.setPosition = function(e) {
|
|
this._position.equals(e) || (this._position.copyFrom(e), this.rebuildAnglesAndRadius())
|
|
}, t.prototype.setTarget = function(e, t, i) {
|
|
if (void 0 === t && (t = !1), void 0 === i && (i = !1), e.getBoundingInfo) this._targetBoundingCenter = t ? e.getBoundingInfo().boundingBox.centerWorld.clone() : null, e.computeWorldMatrix(), this._targetHost = e, this._target = this._getTargetPosition(), this.onMeshTargetChangedObservable.notifyObservers(this._targetHost);
|
|
else {
|
|
var n = e,
|
|
r = this._getTargetPosition();
|
|
if (r && !i && r.equals(n)) return;
|
|
this._targetHost = null, this._target = n, this._targetBoundingCenter = null, this.onMeshTargetChangedObservable.notifyObservers(null)
|
|
}
|
|
this.rebuildAnglesAndRadius()
|
|
}, t.prototype._getViewMatrix = function() {
|
|
var e = Math.cos(this.alpha),
|
|
t = Math.sin(this.alpha),
|
|
i = Math.cos(this.beta),
|
|
n = Math.sin(this.beta);
|
|
0 === n && (n = 1e-4);
|
|
var r = this._getTargetPosition();
|
|
if (this._computationVector.copyFromFloats(this.radius * e * n, this.radius * i, this.radius * t * n), 0 === this._upVector.x && 1 === this._upVector.y && 0 === this._upVector.z || o.x.TransformCoordinatesToRef(this._computationVector, this._YToUpMatrix, this._computationVector), r.addToRef(this._computationVector, this._newPosition), this.getScene().collisionsEnabled && this.checkCollisions) {
|
|
var s = this.getScene().collisionCoordinator;
|
|
this._collider || (this._collider = s.createCollider()), this._collider._radius = this.collisionRadius, this._newPosition.subtractToRef(this._position, this._collisionVelocity), this._collisionTriggered = !0, s.getNewPosition(this._position, this._collisionVelocity, this._collider, 3, null, this._onCollisionPositionChange, this.uniqueId)
|
|
} else {
|
|
this._position.copyFrom(this._newPosition);
|
|
var a = this.upVector;
|
|
this.allowUpsideDown && n < 0 && (a = (a = a.clone()).negate()), this._computeViewMatrix(this._position, r, a), this._viewMatrix.addAtIndex(12, this.targetScreenOffset.x), this._viewMatrix.addAtIndex(13, this.targetScreenOffset.y)
|
|
}
|
|
return this._currentTarget = r, this._viewMatrix
|
|
}, t.prototype.zoomOn = function(e, t) {
|
|
void 0 === t && (t = !1), e = e || this.getScene().meshes;
|
|
var i = fe.a.MinMax(e),
|
|
n = o.x.Distance(i.min, i.max);
|
|
this.radius = n * this.zoomOnFactor, this.focusOn({
|
|
min: i.min,
|
|
max: i.max,
|
|
distance: n
|
|
}, t)
|
|
}, t.prototype.focusOn = function(e, t) {
|
|
var i, n;
|
|
if (void 0 === t && (t = !1), void 0 === e.min) {
|
|
var r = e || this.getScene().meshes;
|
|
i = fe.a.MinMax(r), n = o.x.Distance(i.min, i.max)
|
|
} else {
|
|
i = e, n = e.distance
|
|
}
|
|
this._target = fe.a.Center(i), t || (this.maxZ = 2 * n)
|
|
}, t.prototype.createRigCamera = function(e, i) {
|
|
var n = 0;
|
|
switch (this.cameraRigMode) {
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_ANAGLYPH:
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_OVERUNDER:
|
|
case Ne.a.RIG_MODE_VR:
|
|
n = this._cameraRigParams.stereoHalfAngle * (0 === i ? 1 : -1);
|
|
break;
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:
|
|
n = this._cameraRigParams.stereoHalfAngle * (0 === i ? -1 : 1)
|
|
}
|
|
var r = new t(e, this.alpha + n, this.beta, this.radius, this._target, this.getScene());
|
|
return r._cameraRigParams = {}, r
|
|
}, t.prototype._updateRigCameras = function() {
|
|
var t = this._rigCameras[0],
|
|
i = this._rigCameras[1];
|
|
switch (t.beta = i.beta = this.beta, this.cameraRigMode) {
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_ANAGLYPH:
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL:
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_OVERUNDER:
|
|
case Ne.a.RIG_MODE_VR:
|
|
t.alpha = this.alpha - this._cameraRigParams.stereoHalfAngle, i.alpha = this.alpha + this._cameraRigParams.stereoHalfAngle;
|
|
break;
|
|
case Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED:
|
|
t.alpha = this.alpha + this._cameraRigParams.stereoHalfAngle, i.alpha = this.alpha - this._cameraRigParams.stereoHalfAngle
|
|
}
|
|
e.prototype._updateRigCameras.call(this)
|
|
}, t.prototype.dispose = function() {
|
|
this.inputs.clear(), e.prototype.dispose.call(this)
|
|
}, t.prototype.getClassName = function() {
|
|
return "ArcRotateCamera"
|
|
}, l.c([Object(L.c)()], t.prototype, "alpha", void 0), l.c([Object(L.c)()], t.prototype, "beta", void 0), l.c([Object(L.c)()], t.prototype, "radius", void 0), l.c([Object(L.o)("target")], t.prototype, "_target", void 0), l.c([Object(L.o)("upVector")], t.prototype, "_upVector", void 0), l.c([Object(L.c)()], t.prototype, "inertialAlphaOffset", void 0), l.c([Object(L.c)()], t.prototype, "inertialBetaOffset", void 0), l.c([Object(L.c)()], t.prototype, "inertialRadiusOffset", void 0), l.c([Object(L.c)()], t.prototype, "lowerAlphaLimit", void 0), l.c([Object(L.c)()], t.prototype, "upperAlphaLimit", void 0), l.c([Object(L.c)()], t.prototype, "lowerBetaLimit", void 0), l.c([Object(L.c)()], t.prototype, "upperBetaLimit", void 0), l.c([Object(L.c)()], t.prototype, "lowerRadiusLimit", void 0), l.c([Object(L.c)()], t.prototype, "upperRadiusLimit", void 0), l.c([Object(L.c)()], t.prototype, "inertialPanningX", void 0), l.c([Object(L.c)()], t.prototype, "inertialPanningY", void 0), l.c([Object(L.c)()], t.prototype, "pinchToPanMaxDistance", void 0), l.c([Object(L.c)()], t.prototype, "panningDistanceLimit", void 0), l.c([Object(L.o)()], t.prototype, "panningOriginTarget", void 0), l.c([Object(L.c)()], t.prototype, "panningInertia", void 0), l.c([Object(L.c)()], t.prototype, "zoomOnFactor", void 0), l.c([Object(L.c)()], t.prototype, "targetScreenOffset", void 0), l.c([Object(L.c)()], t.prototype, "allowUpsideDown", void 0), l.c([Object(L.c)()], t.prototype, "useInputToRestoreState", void 0), t
|
|
}(yt);
|
|
F.a.AddNodeConstructor("DeviceOrientationCamera", function(e, t) {
|
|
return function() {
|
|
return new At(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var At = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, i, n) || this;
|
|
return r._tmpDragQuaternion = new o.q, r._disablePointerInputWhenUsingDeviceOrientation = !0, r._dragFactor = 0, r._quaternionCache = new o.q, r.inputs.addDeviceOrientation(), r.inputs._deviceOrientationInput && r.inputs._deviceOrientationInput._onDeviceOrientationChangedObservable.addOnce(function() {
|
|
r._disablePointerInputWhenUsingDeviceOrientation && r.inputs._mouseInput && (r.inputs._mouseInput._allowCameraRotation = !1, r.inputs._mouseInput.onPointerMovedObservable.add(function(e) {
|
|
0 != r._dragFactor && (r._initialQuaternion || (r._initialQuaternion = new o.q), o.q.FromEulerAnglesToRef(0, e.offsetX * r._dragFactor, 0, r._tmpDragQuaternion), r._initialQuaternion.multiplyToRef(r._tmpDragQuaternion, r._initialQuaternion))
|
|
}))
|
|
}), r
|
|
}
|
|
return l.d(t, e), t.prototype.enableHorizontalDragging = function(e) {
|
|
void 0 === e && (e = 1 / 300), this._dragFactor = e
|
|
}, t.prototype.getClassName = function() {
|
|
return "DeviceOrientationCamera"
|
|
}, t.prototype._checkInputs = function() {
|
|
e.prototype._checkInputs.call(this), this._quaternionCache.copyFrom(this.rotationQuaternion), this._initialQuaternion && this._initialQuaternion.multiplyToRef(this.rotationQuaternion, this.rotationQuaternion)
|
|
}, t.prototype.resetToCurrentRotation = function(e) {
|
|
var t = this;
|
|
void 0 === e && (e = o.c.Y), this.rotationQuaternion && (this._initialQuaternion || (this._initialQuaternion = new o.q), this._initialQuaternion.copyFrom(this._quaternionCache || this.rotationQuaternion), ["x", "y", "z"].forEach(function(i) {
|
|
e[i] ? t._initialQuaternion[i] *= -1 : t._initialQuaternion[i] = 0
|
|
}), this._initialQuaternion.normalize(), this._initialQuaternion.multiplyToRef(this.rotationQuaternion, this.rotationQuaternion))
|
|
}, t
|
|
}(bt),
|
|
xt = function(e) {
|
|
function t(t) {
|
|
return e.call(this, t) || this
|
|
}
|
|
return l.d(t, e), t.prototype.addKeyboard = function() {
|
|
return this.add(new rt), this
|
|
}, t.prototype.addMouse = function(e) {
|
|
return void 0 === e && (e = !0), this.add(new ot(e)), this
|
|
}, t
|
|
}(Xe),
|
|
Rt = function(e) {
|
|
function t(t, i, n, r) {
|
|
void 0 === r && (r = !0);
|
|
var s = e.call(this, t, i, n, r) || this;
|
|
return s.ellipsoid = new o.x(1, 1, 1), s.ellipsoidOffset = new o.x(0, 0, 0), s.checkCollisions = !1, s.applyGravity = !1, s.cameraDirection = o.x.Zero(), s._trackRoll = 0, s.rollCorrect = 100, s.bankedTurn = !1, s.bankedTurnLimit = Math.PI / 2, s.bankedTurnMultiplier = 1, s._needMoveForGravity = !1, s._oldPosition = o.x.Zero(), s._diffPosition = o.x.Zero(), s._newPosition = o.x.Zero(), s._collisionMask = -1, s._onCollisionPositionChange = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n;
|
|
n = t, s._newPosition.copyFrom(n), s._newPosition.subtractToRef(s._oldPosition, s._diffPosition), s._diffPosition.length() > ge.b.CollisionsEpsilon && (s.position.addInPlace(s._diffPosition), s.onCollide && i && s.onCollide(i))
|
|
}, s.inputs = new xt(s), s.inputs.addKeyboard().addMouse(), s
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "angularSensibility", {
|
|
get: function() {
|
|
var e = this.inputs.attached.mouse;
|
|
return e ? e.angularSensibility : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.mouse;
|
|
t && (t.angularSensibility = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysForward", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysForward : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysForward = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysBackward", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysBackward : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysBackward = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysUp", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysUp : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysUp = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysDown", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysDown : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysDown = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysLeft", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysLeft : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysLeft = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "keysRight", {
|
|
get: function() {
|
|
var e = this.inputs.attached.keyboard;
|
|
return e ? e.keysRight : []
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.keyboard;
|
|
t && (t.keysRight = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.attachControl = function(e, t) {
|
|
this.inputs.attachElement(e, t)
|
|
}, t.prototype.detachControl = function(e) {
|
|
this.inputs.detachElement(e), this.cameraDirection = new o.x(0, 0, 0)
|
|
}, Object.defineProperty(t.prototype, "collisionMask", {
|
|
get: function() {
|
|
return this._collisionMask
|
|
},
|
|
set: function(e) {
|
|
this._collisionMask = isNaN(e) ? -1 : e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._collideWithWorld = function(e) {
|
|
(this.parent ? o.x.TransformCoordinates(this.position, this.parent.getWorldMatrix()) : this.position).subtractFromFloatsToRef(0, this.ellipsoid.y, 0, this._oldPosition), this._oldPosition.addInPlace(this.ellipsoidOffset);
|
|
var t = this.getScene().collisionCoordinator;
|
|
this._collider || (this._collider = t.createCollider()), this._collider._radius = this.ellipsoid, this._collider.collisionMask = this._collisionMask;
|
|
var i = e;
|
|
this.applyGravity && (i = e.add(this.getScene().gravity)), t.getNewPosition(this._oldPosition, i, this._collider, 3, null, this._onCollisionPositionChange, this.uniqueId)
|
|
}, t.prototype._checkInputs = function() {
|
|
this._localDirection || (this._localDirection = o.x.Zero(), this._transformedDirection = o.x.Zero()), this.inputs.checkInputs(), e.prototype._checkInputs.call(this)
|
|
}, t.prototype._decideIfNeedsToMove = function() {
|
|
return this._needMoveForGravity || Math.abs(this.cameraDirection.x) > 0 || Math.abs(this.cameraDirection.y) > 0 || Math.abs(this.cameraDirection.z) > 0
|
|
}, t.prototype._updatePosition = function() {
|
|
this.checkCollisions && this.getScene().collisionsEnabled ? this._collideWithWorld(this.cameraDirection) : e.prototype._updatePosition.call(this)
|
|
}, t.prototype.restoreRoll = function(e) {
|
|
var t = this._trackRoll,
|
|
i = t - this.rotation.z;
|
|
Math.abs(i) >= .001 && (this.rotation.z += i / e, Math.abs(t - this.rotation.z) <= .001 && (this.rotation.z = t))
|
|
}, t.prototype.dispose = function() {
|
|
this.inputs.clear(), e.prototype.dispose.call(this)
|
|
}, t.prototype.getClassName = function() {
|
|
return "FlyCamera"
|
|
}, l.c([Object(L.o)()], t.prototype, "ellipsoid", void 0), l.c([Object(L.o)()], t.prototype, "ellipsoidOffset", void 0), l.c([Object(L.c)()], t.prototype, "checkCollisions", void 0), l.c([Object(L.c)()], t.prototype, "applyGravity", void 0), t
|
|
}(yt),
|
|
Pt = function(e) {
|
|
function t(t) {
|
|
return e.call(this, t) || this
|
|
}
|
|
return l.d(t, e), t.prototype.addKeyboard = function() {
|
|
return this.add(new st), this
|
|
}, t.prototype.addMouseWheel = function() {
|
|
return this.add(new at), this
|
|
}, t.prototype.addPointers = function() {
|
|
return this.add(new ct), this
|
|
}, t.prototype.addVRDeviceOrientation = function() {
|
|
return console.warn("DeviceOrientation support not yet implemented for FollowCamera."), this
|
|
}, t
|
|
}(Xe);
|
|
F.a.AddNodeConstructor("FollowCamera", function(e, t) {
|
|
return function() {
|
|
return new Ct(e, o.x.Zero(), t)
|
|
}
|
|
}), F.a.AddNodeConstructor("ArcFollowCamera", function(e, t) {
|
|
return function() {
|
|
return new Mt(e, 0, 0, 1, null, t)
|
|
}
|
|
});
|
|
var St, Ct = function(e) {
|
|
function t(t, i, n, r) {
|
|
void 0 === r && (r = null);
|
|
var o = e.call(this, t, i, n) || this;
|
|
return o.radius = 12, o.lowerRadiusLimit = null, o.upperRadiusLimit = null, o.rotationOffset = 0, o.lowerRotationOffsetLimit = null, o.upperRotationOffsetLimit = null, o.heightOffset = 4, o.lowerHeightOffsetLimit = null, o.upperHeightOffsetLimit = null, o.cameraAcceleration = .05, o.maxCameraSpeed = 20, o.lockedTarget = r, o.inputs = new Pt(o), o.inputs.addKeyboard().addMouseWheel().addPointers(), o
|
|
}
|
|
return l.d(t, e), t.prototype._follow = function(e) {
|
|
if (e) {
|
|
var t;
|
|
if (e.rotationQuaternion) {
|
|
var i = new o.j;
|
|
e.rotationQuaternion.toRotationMatrix(i), t = Math.atan2(i.m[8], i.m[10])
|
|
} else t = e.rotation.y;
|
|
var n = ye.h.ToRadians(this.rotationOffset) + t,
|
|
r = e.getAbsolutePosition(),
|
|
s = r.x + Math.sin(n) * this.radius,
|
|
a = r.z + Math.cos(n) * this.radius,
|
|
c = s - this.position.x,
|
|
l = r.y + this.heightOffset - this.position.y,
|
|
u = a - this.position.z,
|
|
h = c * this.cameraAcceleration * 2,
|
|
d = l * this.cameraAcceleration,
|
|
f = u * this.cameraAcceleration * 2;
|
|
(h > this.maxCameraSpeed || h < -this.maxCameraSpeed) && (h = h < 1 ? -this.maxCameraSpeed : this.maxCameraSpeed), (d > this.maxCameraSpeed || d < -this.maxCameraSpeed) && (d = d < 1 ? -this.maxCameraSpeed : this.maxCameraSpeed), (f > this.maxCameraSpeed || f < -this.maxCameraSpeed) && (f = f < 1 ? -this.maxCameraSpeed : this.maxCameraSpeed), this.position = new o.x(this.position.x + h, this.position.y + d, this.position.z + f), this.setTarget(r)
|
|
}
|
|
}, t.prototype.attachControl = function(e, t) {
|
|
this.inputs.attachElement(e, t), this._reset = function() {}
|
|
}, t.prototype.detachControl = function(e) {
|
|
this.inputs.detachElement(e), this._reset && this._reset()
|
|
}, t.prototype._checkInputs = function() {
|
|
this.inputs.checkInputs(), this._checkLimits(), e.prototype._checkInputs.call(this), this.lockedTarget && this._follow(this.lockedTarget)
|
|
}, t.prototype._checkLimits = function() {
|
|
null !== this.lowerRadiusLimit && this.radius < this.lowerRadiusLimit && (this.radius = this.lowerRadiusLimit), null !== this.upperRadiusLimit && this.radius > this.upperRadiusLimit && (this.radius = this.upperRadiusLimit), null !== this.lowerHeightOffsetLimit && this.heightOffset < this.lowerHeightOffsetLimit && (this.heightOffset = this.lowerHeightOffsetLimit), null !== this.upperHeightOffsetLimit && this.heightOffset > this.upperHeightOffsetLimit && (this.heightOffset = this.upperHeightOffsetLimit), null !== this.lowerRotationOffsetLimit && this.rotationOffset < this.lowerRotationOffsetLimit && (this.rotationOffset = this.lowerRotationOffsetLimit), null !== this.upperRotationOffsetLimit && this.rotationOffset > this.upperRotationOffsetLimit && (this.rotationOffset = this.upperRotationOffsetLimit)
|
|
}, t.prototype.getClassName = function() {
|
|
return "FollowCamera"
|
|
}, l.c([Object(L.c)()], t.prototype, "radius", void 0), l.c([Object(L.c)()], t.prototype, "lowerRadiusLimit", void 0), l.c([Object(L.c)()], t.prototype, "upperRadiusLimit", void 0), l.c([Object(L.c)()], t.prototype, "rotationOffset", void 0), l.c([Object(L.c)()], t.prototype, "lowerRotationOffsetLimit", void 0), l.c([Object(L.c)()], t.prototype, "upperRotationOffsetLimit", void 0), l.c([Object(L.c)()], t.prototype, "heightOffset", void 0), l.c([Object(L.c)()], t.prototype, "lowerHeightOffsetLimit", void 0), l.c([Object(L.c)()], t.prototype, "upperHeightOffsetLimit", void 0), l.c([Object(L.c)()], t.prototype, "cameraAcceleration", void 0), l.c([Object(L.c)()], t.prototype, "maxCameraSpeed", void 0), l.c([Object(L.k)("lockedTargetId")], t.prototype, "lockedTarget", void 0), t
|
|
}(yt),
|
|
Mt = function(e) {
|
|
function t(t, i, n, r, s, a) {
|
|
var c = e.call(this, t, o.x.Zero(), a) || this;
|
|
return c.alpha = i, c.beta = n, c.radius = r, c.target = s, c._cartesianCoordinates = o.x.Zero(), c._follow(), c
|
|
}
|
|
return l.d(t, e), t.prototype._follow = function() {
|
|
if (this.target) {
|
|
this._cartesianCoordinates.x = this.radius * Math.cos(this.alpha) * Math.cos(this.beta), this._cartesianCoordinates.y = this.radius * Math.sin(this.beta), this._cartesianCoordinates.z = this.radius * Math.sin(this.alpha) * Math.cos(this.beta);
|
|
var e = this.target.getAbsolutePosition();
|
|
this.position = e.add(this._cartesianCoordinates), this.setTarget(e)
|
|
}
|
|
}, t.prototype._checkInputs = function() {
|
|
e.prototype._checkInputs.call(this), this._follow()
|
|
}, t.prototype.getClassName = function() {
|
|
return "ArcFollowCamera"
|
|
}, t
|
|
}(yt),
|
|
Ot = i(35),
|
|
It = i(39);
|
|
! function(e) {
|
|
e[e.VIVE = 0] = "VIVE", e[e.OCULUS = 1] = "OCULUS", e[e.WINDOWS = 2] = "WINDOWS", e[e.GEAR_VR = 3] = "GEAR_VR", e[e.DAYDREAM = 4] = "DAYDREAM", e[e.GENERIC = 5] = "GENERIC"
|
|
}(St || (St = {}));
|
|
var Dt, Lt, wt = function() {
|
|
function e() {}
|
|
return e.InitiateController = function(e) {
|
|
for (var t = 0, i = this._ControllerFactories; t < i.length; t++) {
|
|
var n = i[t];
|
|
if (n.canCreate(e)) return n.create(e)
|
|
}
|
|
if (this._DefaultControllerFactory) return this._DefaultControllerFactory(e);
|
|
throw "The type of gamepad you are trying to load needs to be imported first or is not supported."
|
|
}, e._ControllerFactories = [], e._DefaultControllerFactory = null, e
|
|
}(),
|
|
Ft = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this, t.id, t.index, t) || this;
|
|
return i._deviceRoomPosition = o.x.Zero(), i._deviceRoomRotationQuaternion = new o.q, i.devicePosition = o.x.Zero(), i.deviceRotationQuaternion = new o.q, i.deviceScaleFactor = 1, i._trackPosition = !0, i._maxRotationDistFromHeadset = Math.PI / 5, i._draggedRoomRotation = 0, i._leftHandSystemQuaternion = new o.q, i._deviceToWorld = o.j.Identity(), i._pointingPoseNode = null, i._workingMatrix = o.j.Identity(), i._meshAttachedObservable = new r.c, i.type = Ke.POSE_ENABLED, i.controllerType = St.GENERIC, i.position = o.x.Zero(), i.rotationQuaternion = new o.q, i._calculatedPosition = o.x.Zero(), i._calculatedRotation = new o.q, o.q.RotationYawPitchRollToRef(Math.PI, 0, 0, i._leftHandSystemQuaternion), i
|
|
}
|
|
return l.d(t, e), t.prototype._disableTrackPosition = function(e) {
|
|
this._trackPosition && (this._calculatedPosition.copyFrom(e), this._trackPosition = !1)
|
|
}, t.prototype.update = function() {
|
|
e.prototype.update.call(this), this._updatePoseAndMesh()
|
|
}, t.prototype._updatePoseAndMesh = function() {
|
|
var e = this.browserGamepad.pose;
|
|
if ((this.updateFromDevice(e), !this._trackPosition && P.a.LastCreatedScene && P.a.LastCreatedScene.activeCamera && P.a.LastCreatedScene.activeCamera.devicePosition) && ((t = P.a.LastCreatedScene.activeCamera)._computeDevicePosition(), this._deviceToWorld.setTranslation(t.devicePosition), t.deviceRotationQuaternion)) {
|
|
var t;
|
|
(t = t)._deviceRoomRotationQuaternion.toEulerAnglesToRef(o.t.Vector3[0]);
|
|
var i = Math.atan2(Math.sin(o.t.Vector3[0].y - this._draggedRoomRotation), Math.cos(o.t.Vector3[0].y - this._draggedRoomRotation));
|
|
if (Math.abs(i) > this._maxRotationDistFromHeadset) {
|
|
var n = i - (i < 0 ? -this._maxRotationDistFromHeadset : this._maxRotationDistFromHeadset);
|
|
this._draggedRoomRotation += n;
|
|
var r = Math.sin(-n),
|
|
s = Math.cos(-n);
|
|
this._calculatedPosition.x = this._calculatedPosition.x * s - this._calculatedPosition.z * r, this._calculatedPosition.z = this._calculatedPosition.x * r + this._calculatedPosition.z * s
|
|
}
|
|
}
|
|
o.x.TransformCoordinatesToRef(this._calculatedPosition, this._deviceToWorld, this.devicePosition), this._deviceToWorld.getRotationMatrixToRef(this._workingMatrix), o.q.FromRotationMatrixToRef(this._workingMatrix, this.deviceRotationQuaternion), this.deviceRotationQuaternion.multiplyInPlace(this._calculatedRotation), this._mesh && (this._mesh.position.copyFrom(this.devicePosition), this._mesh.rotationQuaternion && this._mesh.rotationQuaternion.copyFrom(this.deviceRotationQuaternion))
|
|
}, t.prototype.updateFromDevice = function(e) {
|
|
if (e) {
|
|
this.rawPose = e, e.position && (this._deviceRoomPosition.copyFromFloats(e.position[0], e.position[1], -e.position[2]), this._mesh && this._mesh.getScene().useRightHandedSystem && (this._deviceRoomPosition.z *= -1), this._trackPosition && this._deviceRoomPosition.scaleToRef(this.deviceScaleFactor, this._calculatedPosition), this._calculatedPosition.addInPlace(this.position));
|
|
var t = this.rawPose;
|
|
e.orientation && t.orientation && (this._deviceRoomRotationQuaternion.copyFromFloats(t.orientation[0], t.orientation[1], -t.orientation[2], -t.orientation[3]), this._mesh && (this._mesh.getScene().useRightHandedSystem ? (this._deviceRoomRotationQuaternion.z *= -1, this._deviceRoomRotationQuaternion.w *= -1) : this._deviceRoomRotationQuaternion.multiplyToRef(this._leftHandSystemQuaternion, this._deviceRoomRotationQuaternion)), this._deviceRoomRotationQuaternion.multiplyToRef(this.rotationQuaternion, this._calculatedRotation))
|
|
}
|
|
}, t.prototype.attachToMesh = function(e) {
|
|
if (this._mesh && (this._mesh.parent = null), this._mesh = e, this._poseControlledCamera && (this._mesh.parent = this._poseControlledCamera), this._mesh.rotationQuaternion || (this._mesh.rotationQuaternion = new o.q), this._updatePoseAndMesh(), this._pointingPoseNode) {
|
|
for (var t = [], i = this._pointingPoseNode; i.parent;) t.push(i.parent), i = i.parent;
|
|
t.reverse().forEach(function(e) {
|
|
e.computeWorldMatrix(!0)
|
|
})
|
|
}
|
|
this._meshAttachedObservable.notifyObservers(e)
|
|
}, t.prototype.attachToPoseControlledCamera = function(e) {
|
|
this._poseControlledCamera = e, this._mesh && (this._mesh.parent = this._poseControlledCamera)
|
|
}, t.prototype.dispose = function() {
|
|
this._mesh && this._mesh.dispose(), this._mesh = null, e.prototype.dispose.call(this)
|
|
}, Object.defineProperty(t.prototype, "mesh", {
|
|
get: function() {
|
|
return this._mesh
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getForwardRay = function(e) {
|
|
if (void 0 === e && (e = 100), !this.mesh) return new It.a(o.x.Zero(), new o.x(0, 0, 1), e);
|
|
var t = this._pointingPoseNode ? this._pointingPoseNode.getWorldMatrix() : this.mesh.getWorldMatrix(),
|
|
i = t.getTranslation(),
|
|
n = new o.x(0, 0, -1),
|
|
r = o.x.TransformNormal(n, t),
|
|
s = o.x.Normalize(r);
|
|
return new It.a(i, s, e)
|
|
}, t.POINTING_POSE = "POINTING_POSE", t
|
|
}(Ke);
|
|
! function(e) {
|
|
e[e.A = 0] = "A", e[e.B = 1] = "B", e[e.X = 2] = "X", e[e.Y = 3] = "Y", e[e.Start = 4] = "Start", e[e.Back = 5] = "Back", e[e.LB = 6] = "LB", e[e.RB = 7] = "RB", e[e.LeftStick = 8] = "LeftStick", e[e.RightStick = 9] = "RightStick"
|
|
}(Dt || (Dt = {})),
|
|
function(e) {
|
|
e[e.Up = 0] = "Up", e[e.Down = 1] = "Down", e[e.Left = 2] = "Left", e[e.Right = 3] = "Right"
|
|
}(Lt || (Lt = {}));
|
|
var Nt = function(e) {
|
|
function t(t, i, n, o) {
|
|
void 0 === o && (o = !1);
|
|
var s = e.call(this, t, i, n, 0, 1, 2, 3) || this;
|
|
return s._leftTrigger = 0, s._rightTrigger = 0, s.onButtonDownObservable = new r.c, s.onButtonUpObservable = new r.c, s.onPadDownObservable = new r.c, s.onPadUpObservable = new r.c, s._buttonA = 0, s._buttonB = 0, s._buttonX = 0, s._buttonY = 0, s._buttonBack = 0, s._buttonStart = 0, s._buttonLB = 0, s._buttonRB = 0, s._buttonLeftStick = 0, s._buttonRightStick = 0, s._dPadUp = 0, s._dPadDown = 0, s._dPadLeft = 0, s._dPadRight = 0, s._isXboxOnePad = !1, s.type = Ke.XBOX, s._isXboxOnePad = o, s
|
|
}
|
|
return l.d(t, e), t.prototype.onlefttriggerchanged = function(e) {
|
|
this._onlefttriggerchanged = e
|
|
}, t.prototype.onrighttriggerchanged = function(e) {
|
|
this._onrighttriggerchanged = e
|
|
}, Object.defineProperty(t.prototype, "leftTrigger", {
|
|
get: function() {
|
|
return this._leftTrigger
|
|
},
|
|
set: function(e) {
|
|
this._onlefttriggerchanged && this._leftTrigger !== e && this._onlefttriggerchanged(e), this._leftTrigger = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rightTrigger", {
|
|
get: function() {
|
|
return this._rightTrigger
|
|
},
|
|
set: function(e) {
|
|
this._onrighttriggerchanged && this._rightTrigger !== e && this._onrighttriggerchanged(e), this._rightTrigger = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.onbuttondown = function(e) {
|
|
this._onbuttondown = e
|
|
}, t.prototype.onbuttonup = function(e) {
|
|
this._onbuttonup = e
|
|
}, t.prototype.ondpaddown = function(e) {
|
|
this._ondpaddown = e
|
|
}, t.prototype.ondpadup = function(e) {
|
|
this._ondpadup = e
|
|
}, t.prototype._setButtonValue = function(e, t, i) {
|
|
return e !== t && (1 === e && (this._onbuttondown && this._onbuttondown(i), this.onButtonDownObservable.notifyObservers(i)), 0 === e && (this._onbuttonup && this._onbuttonup(i), this.onButtonUpObservable.notifyObservers(i))), e
|
|
}, t.prototype._setDPadValue = function(e, t, i) {
|
|
return e !== t && (1 === e && (this._ondpaddown && this._ondpaddown(i), this.onPadDownObservable.notifyObservers(i)), 0 === e && (this._ondpadup && this._ondpadup(i), this.onPadUpObservable.notifyObservers(i))), e
|
|
}, Object.defineProperty(t.prototype, "buttonA", {
|
|
get: function() {
|
|
return this._buttonA
|
|
},
|
|
set: function(e) {
|
|
this._buttonA = this._setButtonValue(e, this._buttonA, Dt.A)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "buttonB", {
|
|
get: function() {
|
|
return this._buttonB
|
|
},
|
|
set: function(e) {
|
|
this._buttonB = this._setButtonValue(e, this._buttonB, Dt.B)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "buttonX", {
|
|
get: function() {
|
|
return this._buttonX
|
|
},
|
|
set: function(e) {
|
|
this._buttonX = this._setButtonValue(e, this._buttonX, Dt.X)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "buttonY", {
|
|
get: function() {
|
|
return this._buttonY
|
|
},
|
|
set: function(e) {
|
|
this._buttonY = this._setButtonValue(e, this._buttonY, Dt.Y)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "buttonStart", {
|
|
get: function() {
|
|
return this._buttonStart
|
|
},
|
|
set: function(e) {
|
|
this._buttonStart = this._setButtonValue(e, this._buttonStart, Dt.Start)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "buttonBack", {
|
|
get: function() {
|
|
return this._buttonBack
|
|
},
|
|
set: function(e) {
|
|
this._buttonBack = this._setButtonValue(e, this._buttonBack, Dt.Back)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "buttonLB", {
|
|
get: function() {
|
|
return this._buttonLB
|
|
},
|
|
set: function(e) {
|
|
this._buttonLB = this._setButtonValue(e, this._buttonLB, Dt.LB)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "buttonRB", {
|
|
get: function() {
|
|
return this._buttonRB
|
|
},
|
|
set: function(e) {
|
|
this._buttonRB = this._setButtonValue(e, this._buttonRB, Dt.RB)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "buttonLeftStick", {
|
|
get: function() {
|
|
return this._buttonLeftStick
|
|
},
|
|
set: function(e) {
|
|
this._buttonLeftStick = this._setButtonValue(e, this._buttonLeftStick, Dt.LeftStick)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "buttonRightStick", {
|
|
get: function() {
|
|
return this._buttonRightStick
|
|
},
|
|
set: function(e) {
|
|
this._buttonRightStick = this._setButtonValue(e, this._buttonRightStick, Dt.RightStick)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "dPadUp", {
|
|
get: function() {
|
|
return this._dPadUp
|
|
},
|
|
set: function(e) {
|
|
this._dPadUp = this._setDPadValue(e, this._dPadUp, Lt.Up)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "dPadDown", {
|
|
get: function() {
|
|
return this._dPadDown
|
|
},
|
|
set: function(e) {
|
|
this._dPadDown = this._setDPadValue(e, this._dPadDown, Lt.Down)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "dPadLeft", {
|
|
get: function() {
|
|
return this._dPadLeft
|
|
},
|
|
set: function(e) {
|
|
this._dPadLeft = this._setDPadValue(e, this._dPadLeft, Lt.Left)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "dPadRight", {
|
|
get: function() {
|
|
return this._dPadRight
|
|
},
|
|
set: function(e) {
|
|
this._dPadRight = this._setDPadValue(e, this._dPadRight, Lt.Right)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.update = function() {
|
|
e.prototype.update.call(this), this._isXboxOnePad ? (this.buttonA = this.browserGamepad.buttons[0].value, this.buttonB = this.browserGamepad.buttons[1].value, this.buttonX = this.browserGamepad.buttons[2].value, this.buttonY = this.browserGamepad.buttons[3].value, this.buttonLB = this.browserGamepad.buttons[4].value, this.buttonRB = this.browserGamepad.buttons[5].value, this.leftTrigger = this.browserGamepad.axes[2], this.rightTrigger = this.browserGamepad.axes[5], this.buttonBack = this.browserGamepad.buttons[9].value, this.buttonStart = this.browserGamepad.buttons[8].value, this.buttonLeftStick = this.browserGamepad.buttons[6].value, this.buttonRightStick = this.browserGamepad.buttons[7].value, this.dPadUp = this.browserGamepad.buttons[11].value, this.dPadDown = this.browserGamepad.buttons[12].value, this.dPadLeft = this.browserGamepad.buttons[13].value, this.dPadRight = this.browserGamepad.buttons[14].value) : (this.buttonA = this.browserGamepad.buttons[0].value, this.buttonB = this.browserGamepad.buttons[1].value, this.buttonX = this.browserGamepad.buttons[2].value, this.buttonY = this.browserGamepad.buttons[3].value, this.buttonLB = this.browserGamepad.buttons[4].value, this.buttonRB = this.browserGamepad.buttons[5].value, this.leftTrigger = this.browserGamepad.buttons[6].value, this.rightTrigger = this.browserGamepad.buttons[7].value, this.buttonBack = this.browserGamepad.buttons[8].value, this.buttonStart = this.browserGamepad.buttons[9].value, this.buttonLeftStick = this.browserGamepad.buttons[10].value, this.buttonRightStick = this.browserGamepad.buttons[11].value, this.dPadUp = this.browserGamepad.buttons[12].value, this.dPadDown = this.browserGamepad.buttons[13].value, this.dPadLeft = this.browserGamepad.buttons[14].value, this.dPadRight = this.browserGamepad.buttons[15].value)
|
|
}, t.prototype.dispose = function() {
|
|
e.prototype.dispose.call(this), this.onButtonDownObservable.clear(), this.onButtonUpObservable.clear(), this.onPadDownObservable.clear(), this.onPadUpObservable.clear()
|
|
}, t
|
|
}(Ke),
|
|
Bt = function() {
|
|
function e(e) {
|
|
var t = this;
|
|
this._scene = e, this._babylonGamepads = [], this._oneGamepadConnected = !1, this._isMonitoring = !1, this.onGamepadDisconnectedObservable = new r.c, Ot.a.IsWindowObjectExist() ? (this._gamepadEventSupported = "GamepadEvent" in window, this._gamepadSupport = navigator.getGamepads || navigator.webkitGetGamepads || navigator.msGetGamepads || navigator.webkitGamepads) : this._gamepadEventSupported = !1, this.onGamepadConnectedObservable = new r.c(function(e) {
|
|
for (var i in t._babylonGamepads) {
|
|
var n = t._babylonGamepads[i];
|
|
n && n._isConnected && t.onGamepadConnectedObservable.notifyObserver(e, n)
|
|
}
|
|
}), this._onGamepadConnectedEvent = function(e) {
|
|
var i, n = e.gamepad;
|
|
n.index in t._babylonGamepads && t._babylonGamepads[n.index].isConnected || (t._babylonGamepads[n.index] ? ((i = t._babylonGamepads[n.index]).browserGamepad = n, i._isConnected = !0) : i = t._addNewGamepad(n), t.onGamepadConnectedObservable.notifyObservers(i), t._startMonitoringGamepads())
|
|
}, this._onGamepadDisconnectedEvent = function(e) {
|
|
var i = e.gamepad;
|
|
for (var n in t._babylonGamepads)
|
|
if (t._babylonGamepads[n].index === i.index) {
|
|
var r = t._babylonGamepads[n];
|
|
r._isConnected = !1, t.onGamepadDisconnectedObservable.notifyObservers(r);
|
|
break
|
|
}
|
|
}, this._gamepadSupport && (this._updateGamepadObjects(), this._babylonGamepads.length && this._startMonitoringGamepads(), this._gamepadEventSupported ? (window.addEventListener("gamepadconnected", this._onGamepadConnectedEvent, !1), window.addEventListener("gamepaddisconnected", this._onGamepadDisconnectedEvent, !1)) : this._startMonitoringGamepads())
|
|
}
|
|
return Object.defineProperty(e.prototype, "gamepads", {
|
|
get: function() {
|
|
return this._babylonGamepads
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getGamepadByType = function(e) {
|
|
void 0 === e && (e = Ke.XBOX);
|
|
for (var t = 0, i = this._babylonGamepads; t < i.length; t++) {
|
|
var n = i[t];
|
|
if (n && n.type === e) return n
|
|
}
|
|
return null
|
|
}, e.prototype.dispose = function() {
|
|
this._gamepadEventSupported && (this._onGamepadConnectedEvent && window.removeEventListener("gamepadconnected", this._onGamepadConnectedEvent), this._onGamepadDisconnectedEvent && window.removeEventListener("gamepaddisconnected", this._onGamepadDisconnectedEvent), this._onGamepadConnectedEvent = null, this._onGamepadDisconnectedEvent = null), this._babylonGamepads.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.onGamepadConnectedObservable.clear(), this.onGamepadDisconnectedObservable.clear(), this._oneGamepadConnected = !1, this._stopMonitoringGamepads(), this._babylonGamepads = []
|
|
}, e.prototype._addNewGamepad = function(e) {
|
|
var t;
|
|
this._oneGamepadConnected || (this._oneGamepadConnected = !0);
|
|
var i = -1 !== e.id.search("Xbox One");
|
|
return t = i || -1 !== e.id.search("Xbox 360") || -1 !== e.id.search("xinput") ? new Nt(e.id, e.index, e, i) : e.pose ? wt.InitiateController(e) : new Qe(e.id, e.index, e), this._babylonGamepads[t.index] = t, t
|
|
}, e.prototype._startMonitoringGamepads = function() {
|
|
this._isMonitoring || (this._isMonitoring = !0, this._scene || this._checkGamepadsStatus())
|
|
}, e.prototype._stopMonitoringGamepads = function() {
|
|
this._isMonitoring = !1
|
|
}, e.prototype._checkGamepadsStatus = function() {
|
|
var e = this;
|
|
for (var t in this._updateGamepadObjects(), this._babylonGamepads) {
|
|
var i = this._babylonGamepads[t];
|
|
i && i.isConnected && i.update()
|
|
}
|
|
this._isMonitoring && !this._scene && ye.h.QueueNewFrame(function() {
|
|
e._checkGamepadsStatus()
|
|
})
|
|
}, e.prototype._updateGamepadObjects = function() {
|
|
for (var e = navigator.getGamepads ? navigator.getGamepads() : navigator.webkitGetGamepads ? navigator.webkitGetGamepads() : [], t = 0; t < e.length; t++) {
|
|
var i = e[t];
|
|
if (i)
|
|
if (this._babylonGamepads[i.index]) this._babylonGamepads[t].browserGamepad = i, this._babylonGamepads[t].isConnected || (this._babylonGamepads[t]._isConnected = !0, this.onGamepadConnectedObservable.notifyObservers(this._babylonGamepads[t]));
|
|
else {
|
|
var n = this._addNewGamepad(i);
|
|
this.onGamepadConnectedObservable.notifyObservers(n)
|
|
}
|
|
}
|
|
}, e
|
|
}();
|
|
Object.defineProperty(W.a.prototype, "gamepadManager", {
|
|
get: function() {
|
|
if (!this._gamepadManager) {
|
|
this._gamepadManager = new Bt(this);
|
|
var e = this._getComponent(Ae.a.NAME_GAMEPAD);
|
|
e || (e = new Ut(this), this._addComponent(e))
|
|
}
|
|
return this._gamepadManager
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), dt.prototype.addGamepad = function() {
|
|
return this.add(new pt), this
|
|
}, it.prototype.addGamepad = function() {
|
|
return this.add(new qe), this
|
|
};
|
|
var Ut = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_GAMEPAD, this.scene = e
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._beforeCameraUpdateStage.registerStep(Ae.a.STEP_BEFORECAMERAUPDATE_GAMEPAD, this, this._beforeCameraUpdate)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.dispose = function() {
|
|
var e = this.scene._gamepadManager;
|
|
e && (e.dispose(), this.scene._gamepadManager = null)
|
|
}, e.prototype._beforeCameraUpdate = function() {
|
|
var e = this.scene._gamepadManager;
|
|
e && e._isMonitoring && e._checkGamepadsStatus()
|
|
}, e
|
|
}();
|
|
F.a.AddNodeConstructor("FreeCamera", function(e, t) {
|
|
return function() {
|
|
return new Vt(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var Vt = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, i, n) || this;
|
|
return r.inputs.addGamepad(), r
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "gamepadAngularSensibility", {
|
|
get: function() {
|
|
var e = this.inputs.attached.gamepad;
|
|
return e ? e.gamepadAngularSensibility : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.gamepad;
|
|
t && (t.gamepadAngularSensibility = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "gamepadMoveSensibility", {
|
|
get: function() {
|
|
var e = this.inputs.attached.gamepad;
|
|
return e ? e.gamepadMoveSensibility : 0
|
|
},
|
|
set: function(e) {
|
|
var t = this.inputs.attached.gamepad;
|
|
t && (t.gamepadMoveSensibility = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "UniversalCamera"
|
|
}, t
|
|
}(Tt);
|
|
Ne.a._createDefaultParsedCamera = function(e, t) {
|
|
return new Vt(e, o.x.Zero(), t)
|
|
}, F.a.AddNodeConstructor("GamepadCamera", function(e, t) {
|
|
return function() {
|
|
return new Gt(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var Gt = function(e) {
|
|
function t(t, i, n) {
|
|
return e.call(this, t, i, n) || this
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "GamepadCamera"
|
|
}, t
|
|
}(Vt),
|
|
kt = i(28),
|
|
zt = i(5),
|
|
jt = "\nattribute vec2 position;\nuniform vec2 scale;\n\nvarying vec2 vUV;\nconst vec2 madd=vec2(0.5,0.5);\nvoid main(void) {\nvUV=(position*madd+madd)*scale;\ngl_Position=vec4(position,0.0,1.0);\n}";
|
|
zt.a.ShadersStore.postprocessVertexShader = jt;
|
|
var Ht = function() {
|
|
function e(e, t, i, n, s, a, c, l, u, h, d, f, p, g) {
|
|
void 0 === c && (c = _.a.TEXTURE_NEAREST_SAMPLINGMODE), void 0 === h && (h = null), void 0 === d && (d = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === f && (f = "postprocess"), void 0 === g && (g = !1), this.name = e, this.width = -1, this.height = -1, this._outputTexture = null, this.autoClear = !0, this.alphaMode = _.a.ALPHA_DISABLE, this.animations = new Array, this.enablePixelPerfectMode = !1, this.forceFullscreenViewport = !0, this.scaleMode = _.a.SCALEMODE_FLOOR, this.alwaysForcePOT = !1, this._samples = 1, this.adaptScaleToCurrentViewport = !1, this._reusable = !1, this._textures = new kt.a(2), this._currentRenderTextureInd = 0, this._scaleRatio = new o.w(1, 1), this._texelSize = o.w.Zero(), this.onActivateObservable = new r.c, this.onSizeChangedObservable = new r.c, this.onApplyObservable = new r.c, this.onBeforeRenderObservable = new r.c, this.onAfterRenderObservable = new r.c, null != a ? (this._camera = a, this._scene = a.getScene(), a.attachPostProcess(this), this._engine = this._scene.getEngine(), this._scene.postProcesses.push(this), this.uniqueId = this._scene.getUniqueId()) : l && (this._engine = l, this._engine.postProcesses.push(this)), this._options = s, this.renderTargetSamplingMode = c || _.a.TEXTURE_NEAREST_SAMPLINGMODE, this._reusable = u || !1, this._textureType = d, this._samplers = n || [], this._samplers.push("textureSampler"), this._fragmentUrl = t, this._vertexUrl = f, this._parameters = i || [], this._parameters.push("scale"), this._indexParameters = p, g || this.updateEffect(h)
|
|
}
|
|
return Object.defineProperty(e.prototype, "samples", {
|
|
get: function() {
|
|
return this._samples
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
this._samples = e, this._textures.forEach(function(e) {
|
|
e.samples !== t._samples && t._engine.updateRenderTargetTextureSampleCount(e, t._samples)
|
|
})
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getEffectName = function() {
|
|
return this._fragmentUrl
|
|
}, Object.defineProperty(e.prototype, "onActivate", {
|
|
set: function(e) {
|
|
this._onActivateObserver && this.onActivateObservable.remove(this._onActivateObserver), e && (this._onActivateObserver = this.onActivateObservable.add(e))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onSizeChanged", {
|
|
set: function(e) {
|
|
this._onSizeChangedObserver && this.onSizeChangedObservable.remove(this._onSizeChangedObserver), this._onSizeChangedObserver = this.onSizeChangedObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onApply", {
|
|
set: function(e) {
|
|
this._onApplyObserver && this.onApplyObservable.remove(this._onApplyObserver), this._onApplyObserver = this.onApplyObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onBeforeRender", {
|
|
set: function(e) {
|
|
this._onBeforeRenderObserver && this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver), this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onAfterRender", {
|
|
set: function(e) {
|
|
this._onAfterRenderObserver && this.onAfterRenderObservable.remove(this._onAfterRenderObserver), this._onAfterRenderObserver = this.onAfterRenderObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "inputTexture", {
|
|
get: function() {
|
|
return this._textures.data[this._currentRenderTextureInd]
|
|
},
|
|
set: function(e) {
|
|
this._forcedOutputTexture = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getCamera = function() {
|
|
return this._camera
|
|
}, Object.defineProperty(e.prototype, "texelSize", {
|
|
get: function() {
|
|
return this._shareOutputWithPostProcess ? this._shareOutputWithPostProcess.texelSize : (this._forcedOutputTexture && this._texelSize.copyFromFloats(1 / this._forcedOutputTexture.width, 1 / this._forcedOutputTexture.height), this._texelSize)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getClassName = function() {
|
|
return "PostProcess"
|
|
}, e.prototype.getEngine = function() {
|
|
return this._engine
|
|
}, e.prototype.getEffect = function() {
|
|
return this._effect
|
|
}, e.prototype.shareOutputWith = function(e) {
|
|
return this._disposeTextures(), this._shareOutputWithPostProcess = e, this
|
|
}, e.prototype.useOwnOutput = function() {
|
|
0 == this._textures.length && (this._textures = new kt.a(2)), this._shareOutputWithPostProcess = null
|
|
}, e.prototype.updateEffect = function(e, t, i, n, r, o) {
|
|
void 0 === e && (e = null), void 0 === t && (t = null), void 0 === i && (i = null), this._effect = this._engine.createEffect({
|
|
vertex: this._vertexUrl,
|
|
fragment: this._fragmentUrl
|
|
}, ["position"], t || this._parameters, i || this._samplers, null !== e ? e : "", void 0, r, o, n || this._indexParameters)
|
|
}, e.prototype.isReusable = function() {
|
|
return this._reusable
|
|
}, e.prototype.markTextureDirty = function() {
|
|
this.width = -1
|
|
}, e.prototype.activate = function(e, t, i) {
|
|
var n = this;
|
|
void 0 === t && (t = null);
|
|
var r = (e = e || this._camera).getScene(),
|
|
o = r.getEngine(),
|
|
s = o.getCaps().maxTextureSize,
|
|
a = (t ? t.width : this._engine.getRenderWidth(!0)) * this._options | 0,
|
|
c = (t ? t.height : this._engine.getRenderHeight(!0)) * this._options | 0,
|
|
l = e.parent;
|
|
!l || l.leftCamera != e && l.rightCamera != e || (a /= 2);
|
|
var u, h = this._options.width || a,
|
|
d = this._options.height || c;
|
|
if (!this._shareOutputWithPostProcess && !this._forcedOutputTexture) {
|
|
if (this.adaptScaleToCurrentViewport) {
|
|
var f = o.currentViewport;
|
|
f && (h *= f.width, d *= f.height)
|
|
}
|
|
if ((this.renderTargetSamplingMode === _.a.TEXTURE_TRILINEAR_SAMPLINGMODE || this.alwaysForcePOT) && (this._options.width || (h = o.needPOTTextures ? ye.h.GetExponentOfTwo(h, s, this.scaleMode) : h), this._options.height || (d = o.needPOTTextures ? ye.h.GetExponentOfTwo(d, s, this.scaleMode) : d)), this.width !== h || this.height !== d) {
|
|
if (this._textures.length > 0) {
|
|
for (var p = 0; p < this._textures.length; p++) this._engine._releaseTexture(this._textures.data[p]);
|
|
this._textures.reset()
|
|
}
|
|
this.width = h, this.height = d;
|
|
var g = {
|
|
width: this.width,
|
|
height: this.height
|
|
},
|
|
m = {
|
|
generateMipMaps: !1,
|
|
generateDepthBuffer: i || 0 === e._postProcesses.indexOf(this),
|
|
generateStencilBuffer: (i || 0 === e._postProcesses.indexOf(this)) && this._engine.isStencilEnable,
|
|
samplingMode: this.renderTargetSamplingMode,
|
|
type: this._textureType
|
|
};
|
|
this._textures.push(this._engine.createRenderTargetTexture(g, m)), this._reusable && this._textures.push(this._engine.createRenderTargetTexture(g, m)), this._texelSize.copyFromFloats(1 / this.width, 1 / this.height), this.onSizeChangedObservable.notifyObservers(this)
|
|
}
|
|
this._textures.forEach(function(e) {
|
|
e.samples !== n.samples && n._engine.updateRenderTargetTextureSampleCount(e, n.samples)
|
|
})
|
|
}
|
|
return this._shareOutputWithPostProcess ? u = this._shareOutputWithPostProcess.inputTexture : this._forcedOutputTexture ? (u = this._forcedOutputTexture, this.width = this._forcedOutputTexture.width, this.height = this._forcedOutputTexture.height) : u = this.inputTexture, this.enablePixelPerfectMode ? (this._scaleRatio.copyFromFloats(a / h, c / d), this._engine.bindFramebuffer(u, 0, a, c, this.forceFullscreenViewport)) : (this._scaleRatio.copyFromFloats(1, 1), this._engine.bindFramebuffer(u, 0, void 0, void 0, this.forceFullscreenViewport)), this.onActivateObservable.notifyObservers(e), this.autoClear && this.alphaMode === _.a.ALPHA_DISABLE && this._engine.clear(this.clearColor ? this.clearColor : r.clearColor, r._allowPostProcessClearColor, !0, !0), this._reusable && (this._currentRenderTextureInd = (this._currentRenderTextureInd + 1) % 2), u
|
|
}, Object.defineProperty(e.prototype, "isSupported", {
|
|
get: function() {
|
|
return this._effect.isSupported
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "aspectRatio", {
|
|
get: function() {
|
|
return this._shareOutputWithPostProcess ? this._shareOutputWithPostProcess.aspectRatio : this._forcedOutputTexture ? this._forcedOutputTexture.width / this._forcedOutputTexture.height : this.width / this.height
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.isReady = function() {
|
|
return this._effect && this._effect.isReady()
|
|
}, e.prototype.apply = function() {
|
|
return this._effect && this._effect.isReady() ? (this._engine.enableEffect(this._effect), this._engine.setState(!1), this._engine.setDepthBuffer(!1), this._engine.setDepthWrite(!1), this._engine.setAlphaMode(this.alphaMode), this.alphaConstants && this.getEngine().setAlphaConstants(this.alphaConstants.r, this.alphaConstants.g, this.alphaConstants.b, this.alphaConstants.a), e = this._shareOutputWithPostProcess ? this._shareOutputWithPostProcess.inputTexture : this._forcedOutputTexture ? this._forcedOutputTexture : this.inputTexture, this._effect._bindTexture("textureSampler", e), this._effect.setVector2("scale", this._scaleRatio), this.onApplyObservable.notifyObservers(this._effect), this._effect) : null;
|
|
var e
|
|
}, e.prototype._disposeTextures = function() {
|
|
if (!this._shareOutputWithPostProcess && !this._forcedOutputTexture) {
|
|
if (this._textures.length > 0)
|
|
for (var e = 0; e < this._textures.length; e++) this._engine._releaseTexture(this._textures.data[e]);
|
|
this._textures.dispose()
|
|
}
|
|
}, e.prototype.dispose = function(e) {
|
|
if (e = e || this._camera, this._disposeTextures(), this._scene) {
|
|
var t = this._scene.postProcesses.indexOf(this); - 1 !== t && this._scene.postProcesses.splice(t, 1)
|
|
} else {
|
|
var i = this._engine.postProcesses.indexOf(this); - 1 !== i && this._engine.postProcesses.splice(i, 1)
|
|
}
|
|
if (e) {
|
|
if (e.detachPostProcess(this), 0 === e._postProcesses.indexOf(this) && e._postProcesses.length > 0) {
|
|
var n = this._camera._getFirstPostProcess();
|
|
n && n.markTextureDirty()
|
|
}
|
|
this.onActivateObservable.clear(), this.onAfterRenderObservable.clear(), this.onApplyObservable.clear(), this.onBeforeRenderObservable.clear(), this.onSizeChangedObservable.clear()
|
|
}
|
|
}, e
|
|
}(),
|
|
Wt = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nvoid main(void)\n{\ngl_FragColor=texture2D(textureSampler,vUV);\n}";
|
|
zt.a.ShadersStore.passPixelShader = Wt;
|
|
var Xt = "\nvarying vec2 vUV;\nuniform samplerCube textureSampler;\nvoid main(void)\n{\nvec2 uv=vUV*2.0-1.0;\n#ifdef POSITIVEX\ngl_FragColor=textureCube(textureSampler,vec3(1.001,uv.y,uv.x));\n#endif\n#ifdef NEGATIVEX\ngl_FragColor=textureCube(textureSampler,vec3(-1.001,uv.y,uv.x));\n#endif\n#ifdef POSITIVEY\ngl_FragColor=textureCube(textureSampler,vec3(uv.y,1.001,uv.x));\n#endif\n#ifdef NEGATIVEY\ngl_FragColor=textureCube(textureSampler,vec3(uv.y,-1.001,uv.x));\n#endif\n#ifdef POSITIVEZ\ngl_FragColor=textureCube(textureSampler,vec3(uv,1.001));\n#endif\n#ifdef NEGATIVEZ\ngl_FragColor=textureCube(textureSampler,vec3(uv,-1.001));\n#endif\n}";
|
|
zt.a.ShadersStore.passCubePixelShader = Xt;
|
|
var Yt = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
return void 0 === n && (n = null), void 0 === a && (a = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === c && (c = !1), e.call(this, t, "pass", null, null, i, n, r, o, s, void 0, a, void 0, null, c) || this
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
Kt = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
void 0 === n && (n = null), void 0 === a && (a = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === c && (c = !1);
|
|
var l = e.call(this, t, "passCube", null, null, i, n, r, o, s, "#define POSITIVEX", a, void 0, null, c) || this;
|
|
return l._face = 0, l
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "face", {
|
|
get: function() {
|
|
return this._face
|
|
},
|
|
set: function(e) {
|
|
if (!(e < 0 || e > 5)) switch (this._face = e, this._face) {
|
|
case 0:
|
|
this.updateEffect("#define POSITIVEX");
|
|
break;
|
|
case 1:
|
|
this.updateEffect("#define NEGATIVEX");
|
|
break;
|
|
case 2:
|
|
this.updateEffect("#define POSITIVEY");
|
|
break;
|
|
case 3:
|
|
this.updateEffect("#define NEGATIVEY");
|
|
break;
|
|
case 4:
|
|
this.updateEffect("#define POSITIVEZ");
|
|
break;
|
|
case 5:
|
|
this.updateEffect("#define NEGATIVEZ")
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t
|
|
}(Ht);
|
|
ge.b._RescalePostProcessFactory = function(e) {
|
|
return new Yt("rescale", 1, null, ge.b.TEXTURE_BILINEAR_SAMPLINGMODE, e, !1, ge.b.TEXTURETYPE_UNSIGNED_INT)
|
|
};
|
|
var Qt = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform sampler2D leftSampler;\nvoid main(void)\n{\nvec4 leftFrag=texture2D(leftSampler,vUV);\nleftFrag=vec4(1.0,leftFrag.g,leftFrag.b,1.0);\nvec4 rightFrag=texture2D(textureSampler,vUV);\nrightFrag=vec4(rightFrag.r,1.0,1.0,1.0);\ngl_FragColor=vec4(rightFrag.rgb*leftFrag.rgb,1.0);\n}";
|
|
zt.a.ShadersStore.anaglyphPixelShader = Qt;
|
|
var qt = function(e) {
|
|
function t(t, i, n, r, o, s) {
|
|
var a = e.call(this, t, "anaglyph", null, ["leftSampler"], i, n[1], r, o, s) || this;
|
|
return a._passedProcess = n[0]._rigPostProcess, a.onApplyObservable.add(function(e) {
|
|
e.setTextureFromPostProcess("leftSampler", a._passedProcess)
|
|
}), a
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht);
|
|
Ne.a._setStereoscopicAnaglyphRigMode = function(e) {
|
|
e._rigCameras[0]._rigPostProcess = new Yt(e.name + "_passthru", 1, e._rigCameras[0]), e._rigCameras[1]._rigPostProcess = new qt(e.name + "_anaglyph", 1, e._rigCameras)
|
|
}, F.a.AddNodeConstructor("AnaglyphArcRotateCamera", function(e, t, i) {
|
|
return function() {
|
|
return new Zt(e, 0, 0, 1, o.x.Zero(), i.interaxial_distance, t)
|
|
}
|
|
});
|
|
var Zt = function(e) {
|
|
function t(t, i, n, r, o, s, a) {
|
|
var c = e.call(this, t, i, n, r, o, a) || this;
|
|
return c.interaxialDistance = s, c.setCameraRigMode(Ne.a.RIG_MODE_STEREOSCOPIC_ANAGLYPH, {
|
|
interaxialDistance: s
|
|
}), c
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "AnaglyphArcRotateCamera"
|
|
}, t
|
|
}(Et);
|
|
F.a.AddNodeConstructor("AnaglyphFreeCamera", function(e, t, i) {
|
|
return function() {
|
|
return new Jt(e, o.x.Zero(), i.interaxial_distance, t)
|
|
}
|
|
});
|
|
var Jt = function(e) {
|
|
function t(t, i, n, r) {
|
|
var o = e.call(this, t, i, r) || this;
|
|
return o.interaxialDistance = n, o.setCameraRigMode(Ne.a.RIG_MODE_STEREOSCOPIC_ANAGLYPH, {
|
|
interaxialDistance: n
|
|
}), o
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "AnaglyphFreeCamera"
|
|
}, t
|
|
}(bt);
|
|
F.a.AddNodeConstructor("AnaglyphGamepadCamera", function(e, t, i) {
|
|
return function() {
|
|
return new $t(e, o.x.Zero(), i.interaxial_distance, t)
|
|
}
|
|
});
|
|
var $t = function(e) {
|
|
function t(t, i, n, r) {
|
|
var o = e.call(this, t, i, r) || this;
|
|
return o.interaxialDistance = n, o.setCameraRigMode(Ne.a.RIG_MODE_STEREOSCOPIC_ANAGLYPH, {
|
|
interaxialDistance: n
|
|
}), o
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "AnaglyphGamepadCamera"
|
|
}, t
|
|
}(Gt);
|
|
F.a.AddNodeConstructor("AnaglyphUniversalCamera", function(e, t, i) {
|
|
return function() {
|
|
return new ei(e, o.x.Zero(), i.interaxial_distance, t)
|
|
}
|
|
});
|
|
var ei = function(e) {
|
|
function t(t, i, n, r) {
|
|
var o = e.call(this, t, i, r) || this;
|
|
return o.interaxialDistance = n, o.setCameraRigMode(Ne.a.RIG_MODE_STEREOSCOPIC_ANAGLYPH, {
|
|
interaxialDistance: n
|
|
}), o
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "AnaglyphUniversalCamera"
|
|
}, t
|
|
}(Vt),
|
|
ti = "const vec3 TWO=vec3(2.0,2.0,2.0);\nvarying vec2 vUV;\nuniform sampler2D camASampler;\nuniform sampler2D textureSampler;\nuniform vec2 stepSize;\nvoid main(void)\n{\nbool useCamB;\nvec2 texCoord1;\nvec2 texCoord2;\nvec3 frag1;\nvec3 frag2;\n#ifdef IS_STEREOSCOPIC_HORIZ\nuseCamB=vUV.x>0.5;\ntexCoord1=vec2(useCamB ? (vUV.x-0.5)*2.0 : vUV.x*2.0,vUV.y);\ntexCoord2=vec2(texCoord1.x+stepSize.x,vUV.y);\n#else\nuseCamB=vUV.y>0.5;\ntexCoord1=vec2(vUV.x,useCamB ? (vUV.y-0.5)*2.0 : vUV.y*2.0);\ntexCoord2=vec2(vUV.x,texCoord1.y+stepSize.y);\n#endif\n\nif (useCamB){\nfrag1=texture2D(textureSampler,texCoord1).rgb;\nfrag2=texture2D(textureSampler,texCoord2).rgb;\n}else{\nfrag1=texture2D(camASampler ,texCoord1).rgb;\nfrag2=texture2D(camASampler ,texCoord2).rgb;\n}\ngl_FragColor=vec4((frag1+frag2)/TWO,1.0);\n}";
|
|
zt.a.ShadersStore.stereoscopicInterlacePixelShader = ti;
|
|
var ii = function(e) {
|
|
function t(t, i, n, r, s, a) {
|
|
var c = e.call(this, t, "stereoscopicInterlace", ["stepSize"], ["camASampler"], 1, i[1], r, s, a, n ? "#define IS_STEREOSCOPIC_HORIZ 1" : void 0) || this;
|
|
return c._passedProcess = i[0]._rigPostProcess, c._stepSize = new o.w(1 / c.width, 1 / c.height), c.onSizeChangedObservable.add(function() {
|
|
c._stepSize = new o.w(1 / c.width, 1 / c.height)
|
|
}), c.onApplyObservable.add(function(e) {
|
|
e.setTextureFromPostProcess("camASampler", c._passedProcess), e.setFloat2("stepSize", c._stepSize.x, c._stepSize.y)
|
|
}), c
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht);
|
|
Ne.a._setStereoscopicRigMode = function(e) {
|
|
var t = e.cameraRigMode === Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL || e.cameraRigMode === Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_CROSSEYED;
|
|
e._rigCameras[0]._rigPostProcess = new Yt(e.name + "_passthru", 1, e._rigCameras[0]), e._rigCameras[1]._rigPostProcess = new ii(e.name + "_stereoInterlace", e._rigCameras, t)
|
|
}, F.a.AddNodeConstructor("StereoscopicArcRotateCamera", function(e, t, i) {
|
|
return function() {
|
|
return new ni(e, 0, 0, 1, o.x.Zero(), i.interaxial_distance, i.isStereoscopicSideBySide, t)
|
|
}
|
|
});
|
|
var ni = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
var l = e.call(this, t, i, n, r, o, c) || this;
|
|
return l.interaxialDistance = s, l.isStereoscopicSideBySide = a, l.setCameraRigMode(a ? Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL : Ne.a.RIG_MODE_STEREOSCOPIC_OVERUNDER, {
|
|
interaxialDistance: s
|
|
}), l
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "StereoscopicArcRotateCamera"
|
|
}, t
|
|
}(Et);
|
|
F.a.AddNodeConstructor("StereoscopicFreeCamera", function(e, t, i) {
|
|
return function() {
|
|
return new ri(e, o.x.Zero(), i.interaxial_distance, i.isStereoscopicSideBySide, t)
|
|
}
|
|
});
|
|
var ri = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
var s = e.call(this, t, i, o) || this;
|
|
return s.interaxialDistance = n, s.isStereoscopicSideBySide = r, s.setCameraRigMode(r ? Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL : Ne.a.RIG_MODE_STEREOSCOPIC_OVERUNDER, {
|
|
interaxialDistance: n
|
|
}), s
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "StereoscopicFreeCamera"
|
|
}, t
|
|
}(bt);
|
|
F.a.AddNodeConstructor("StereoscopicGamepadCamera", function(e, t, i) {
|
|
return function() {
|
|
return new oi(e, o.x.Zero(), i.interaxial_distance, i.isStereoscopicSideBySide, t)
|
|
}
|
|
});
|
|
var oi = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
var s = e.call(this, t, i, o) || this;
|
|
return s.interaxialDistance = n, s.isStereoscopicSideBySide = r, s.setCameraRigMode(r ? Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL : Ne.a.RIG_MODE_STEREOSCOPIC_OVERUNDER, {
|
|
interaxialDistance: n
|
|
}), s
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "StereoscopicGamepadCamera"
|
|
}, t
|
|
}(Gt);
|
|
F.a.AddNodeConstructor("StereoscopicFreeCamera", function(e, t, i) {
|
|
return function() {
|
|
return new si(e, o.x.Zero(), i.interaxial_distance, i.isStereoscopicSideBySide, t)
|
|
}
|
|
});
|
|
var si = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
var s = e.call(this, t, i, o) || this;
|
|
return s.interaxialDistance = n, s.isStereoscopicSideBySide = r, s.setCameraRigMode(r ? Ne.a.RIG_MODE_STEREOSCOPIC_SIDEBYSIDE_PARALLEL : Ne.a.RIG_MODE_STEREOSCOPIC_OVERUNDER, {
|
|
interaxialDistance: n
|
|
}), s
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "StereoscopicUniversalCamera"
|
|
}, t
|
|
}(Vt);
|
|
F.a.AddNodeConstructor("VirtualJoysticksCamera", function(e, t) {
|
|
return function() {
|
|
return new ai(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var ai = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, i, n) || this;
|
|
return r.inputs.addVirtualJoystick(), r
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "VirtualJoysticksCamera"
|
|
}, t
|
|
}(bt),
|
|
ci = function() {
|
|
function e() {
|
|
this.compensateDistortion = !0, this.multiviewEnabled = !1
|
|
}
|
|
return Object.defineProperty(e.prototype, "aspectRatio", {
|
|
get: function() {
|
|
return this.hResolution / (2 * this.vResolution)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "aspectRatioFov", {
|
|
get: function() {
|
|
return 2 * Math.atan(this.postProcessScaleFactor * this.vScreenSize / (2 * this.eyeToScreenDistance))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "leftHMatrix", {
|
|
get: function() {
|
|
var e = 4 * (this.hScreenSize / 4 - this.lensSeparationDistance / 2) / this.hScreenSize;
|
|
return o.j.Translation(e, 0, 0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "rightHMatrix", {
|
|
get: function() {
|
|
var e = 4 * (this.hScreenSize / 4 - this.lensSeparationDistance / 2) / this.hScreenSize;
|
|
return o.j.Translation(-e, 0, 0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "leftPreViewMatrix", {
|
|
get: function() {
|
|
return o.j.Translation(.5 * this.interpupillaryDistance, 0, 0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "rightPreViewMatrix", {
|
|
get: function() {
|
|
return o.j.Translation(-.5 * this.interpupillaryDistance, 0, 0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.GetDefault = function() {
|
|
var t = new e;
|
|
return t.hResolution = 1280, t.vResolution = 800, t.hScreenSize = .149759993, t.vScreenSize = .0935999975, t.vScreenCenter = .0467999987, t.eyeToScreenDistance = .0410000011, t.lensSeparationDistance = .063500002, t.interpupillaryDistance = .064000003, t.distortionK = [1, .219999999, .239999995, 0], t.chromaAbCorrection = [.995999992, -.00400000019, 1.01400006, 0], t.postProcessScaleFactor = 1.714605507808412, t.lensCenterOffset = .151976421, t
|
|
}, e
|
|
}(),
|
|
li = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform vec2 LensCenter;\nuniform vec2 Scale;\nuniform vec2 ScaleIn;\nuniform vec4 HmdWarpParam;\nvec2 HmdWarp(vec2 in01) {\nvec2 theta=(in01-LensCenter)*ScaleIn;\nfloat rSq=theta.x*theta.x+theta.y*theta.y;\nvec2 rvector=theta*(HmdWarpParam.x+HmdWarpParam.y*rSq+HmdWarpParam.z*rSq*rSq+HmdWarpParam.w*rSq*rSq*rSq);\nreturn LensCenter+Scale*rvector;\n}\nvoid main(void)\n{\nvec2 tc=HmdWarp(vUV);\nif (tc.x <0.0 || tc.x>1.0 || tc.y<0.0 || tc.y>1.0)\ngl_FragColor=vec4(0.0,0.0,0.0,0.0);\nelse{\ngl_FragColor=texture2D(textureSampler,tc);\n}\n}";
|
|
zt.a.ShadersStore.vrDistortionCorrectionPixelShader = li;
|
|
var ui = function(e) {
|
|
function t(t, i, n, r) {
|
|
var s = e.call(this, t, "vrDistortionCorrection", ["LensCenter", "Scale", "ScaleIn", "HmdWarpParam"], null, r.postProcessScaleFactor, i, ke.a.BILINEAR_SAMPLINGMODE) || this;
|
|
return s._isRightEye = n, s._distortionFactors = r.distortionK, s._postProcessScaleFactor = r.postProcessScaleFactor, s._lensCenterOffset = r.lensCenterOffset, s.adaptScaleToCurrentViewport = !0, s.onSizeChangedObservable.add(function() {
|
|
s._scaleIn = new o.w(2, 2 / s.aspectRatio), s._scaleFactor = new o.w(1 / s._postProcessScaleFactor * .5, 1 / s._postProcessScaleFactor * .5 * s.aspectRatio), s._lensCenter = new o.w(s._isRightEye ? .5 - .5 * s._lensCenterOffset : .5 + .5 * s._lensCenterOffset, .5)
|
|
}), s.onApplyObservable.add(function(e) {
|
|
e.setFloat2("LensCenter", s._lensCenter.x, s._lensCenter.y), e.setFloat2("Scale", s._scaleFactor.x, s._scaleFactor.y), e.setFloat2("ScaleIn", s._scaleIn.x, s._scaleIn.y), e.setFloat4("HmdWarpParam", s._distortionFactors[0], s._distortionFactors[1], s._distortionFactors[2], s._distortionFactors[3])
|
|
}), s
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
hi = "#ifdef GL_ES\nprecision mediump sampler2DArray;\n#endif\nvarying vec2 vUV;\nuniform sampler2DArray multiviewSampler;\nuniform int imageIndex;\nvoid main(void)\n{\ngl_FragColor=texture(multiviewSampler,vec3(vUV,imageIndex));\n}";
|
|
zt.a.ShadersStore.vrMultiviewToSingleviewPixelShader = hi;
|
|
var di = i(63),
|
|
fi = i(83),
|
|
pi = i(91);
|
|
ge.b.prototype.createRenderTargetCubeTexture = function(e, t) {
|
|
var i = l.a({
|
|
generateMipMaps: !0,
|
|
generateDepthBuffer: !0,
|
|
generateStencilBuffer: !1,
|
|
type: ge.b.TEXTURETYPE_UNSIGNED_INT,
|
|
samplingMode: ge.b.TEXTURE_TRILINEAR_SAMPLINGMODE,
|
|
format: ge.b.TEXTUREFORMAT_RGBA
|
|
}, t);
|
|
i.generateStencilBuffer = i.generateDepthBuffer && i.generateStencilBuffer, (i.type !== ge.b.TEXTURETYPE_FLOAT || this._caps.textureFloatLinearFiltering) && (i.type !== ge.b.TEXTURETYPE_HALF_FLOAT || this._caps.textureHalfFloatLinearFiltering) || (i.samplingMode = ge.b.TEXTURE_NEAREST_SAMPLINGMODE);
|
|
var n = this._gl,
|
|
r = new ze.a(this, ze.a.DATASOURCE_RENDERTARGET);
|
|
this._bindTextureDirectly(n.TEXTURE_CUBE_MAP, r, !0);
|
|
var o = this._getSamplingParameters(i.samplingMode, i.generateMipMaps);
|
|
i.type !== ge.b.TEXTURETYPE_FLOAT || this._caps.textureFloat || (i.type = ge.b.TEXTURETYPE_UNSIGNED_INT, p.a.Warn("Float textures are not supported. Cube render target forced to TEXTURETYPE_UNESIGNED_BYTE type")), n.texParameteri(n.TEXTURE_CUBE_MAP, n.TEXTURE_MAG_FILTER, o.mag), n.texParameteri(n.TEXTURE_CUBE_MAP, n.TEXTURE_MIN_FILTER, o.min), n.texParameteri(n.TEXTURE_CUBE_MAP, n.TEXTURE_WRAP_S, n.CLAMP_TO_EDGE), n.texParameteri(n.TEXTURE_CUBE_MAP, n.TEXTURE_WRAP_T, n.CLAMP_TO_EDGE);
|
|
for (var s = 0; s < 6; s++) n.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X + s, 0, this._getRGBABufferInternalSizedFormat(i.type, i.format), e, e, 0, this._getInternalFormat(i.format), this._getWebGLTextureType(i.type), null);
|
|
var a = n.createFramebuffer();
|
|
return this._bindUnboundFramebuffer(a), r._depthStencilBuffer = this._setupFramebufferDepthAttachments(i.generateStencilBuffer, i.generateDepthBuffer, e, e), i.generateMipMaps && n.generateMipmap(n.TEXTURE_CUBE_MAP), this._bindTextureDirectly(n.TEXTURE_CUBE_MAP, null), n.bindRenderbuffer(n.RENDERBUFFER, null), this._bindUnboundFramebuffer(null), r._framebuffer = a, r.width = e, r.height = e, r.isReady = !0, r.isCube = !0, r.samples = 1, r.generateMipMaps = i.generateMipMaps, r.samplingMode = i.samplingMode, r.type = i.type, r.format = i.format, r._generateDepthBuffer = i.generateDepthBuffer, r._generateStencilBuffer = i.generateStencilBuffer, this._internalTexturesCache.push(r), r
|
|
};
|
|
var _i = function(e) {
|
|
function t(t, i, n, s, a, c, l, u, h, d, f, p, g) {
|
|
void 0 === a && (a = !0), void 0 === c && (c = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === l && (l = !1), void 0 === u && (u = ke.a.TRILINEAR_SAMPLINGMODE), void 0 === h && (h = !0), void 0 === d && (d = !1), void 0 === f && (f = !1), void 0 === p && (p = _.a.TEXTUREFORMAT_RGBA), void 0 === g && (g = !1);
|
|
var m = e.call(this, null, n, !s) || this;
|
|
return m.isCube = l, m.renderParticles = !0, m.renderSprites = !1, m.coordinatesMode = ke.a.PROJECTION_MODE, m.ignoreCameraViewport = !1, m.onBeforeBindObservable = new r.c, m.onAfterUnbindObservable = new r.c, m.onBeforeRenderObservable = new r.c, m.onAfterRenderObservable = new r.c, m.onClearObservable = new r.c, m._currentRefreshId = -1, m._refreshRate = 1, m._samples = 1, m.boundingBoxPosition = o.x.Zero(), (n = m.getScene()) ? (m.renderList = new Array, m._engine = n.getEngine(), m.name = t, m.isRenderTarget = !0, m._initialSizeParameter = i, m._processSizeParameter(i), m._resizeObserver = m.getScene().getEngine().onResizeObservable.add(function() {}), m._generateMipMaps = !!s, m._doNotChangeAspectRatio = a, m._renderingManager = new pi.b(n), m._renderingManager._useSceneAutoClearSetup = !0, f ? m : (m._renderTargetOptions = {
|
|
generateMipMaps: s,
|
|
type: c,
|
|
format: p,
|
|
samplingMode: u,
|
|
generateDepthBuffer: h,
|
|
generateStencilBuffer: d
|
|
}, u === ke.a.NEAREST_SAMPLINGMODE && (m.wrapU = ke.a.CLAMP_ADDRESSMODE, m.wrapV = ke.a.CLAMP_ADDRESSMODE), g || (l ? (m._texture = n.getEngine().createRenderTargetCubeTexture(m.getRenderSize(), m._renderTargetOptions), m.coordinatesMode = ke.a.INVCUBIC_MODE, m._textureMatrix = o.j.Identity()) : m._texture = n.getEngine().createRenderTargetTexture(m._size, m._renderTargetOptions)), m)) : m
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "renderList", {
|
|
get: function() {
|
|
return this._renderList
|
|
},
|
|
set: function(e) {
|
|
this._renderList = e, this._renderList && this._hookArray(this._renderList)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._hookArray = function(e) {
|
|
var t = this,
|
|
i = e.push;
|
|
e.push = function() {
|
|
for (var n = [], r = 0; r < arguments.length; r++) n[r] = arguments[r];
|
|
var o = 0 === e.length,
|
|
s = i.apply(e, n);
|
|
return o && t.getScene().meshes.forEach(function(e) {
|
|
e._markSubMeshesAsLightDirty()
|
|
}), s
|
|
};
|
|
var n = e.splice;
|
|
e.splice = function(i, r) {
|
|
var o = n.apply(e, [i, r]);
|
|
return 0 === e.length && t.getScene().meshes.forEach(function(e) {
|
|
e._markSubMeshesAsLightDirty()
|
|
}), o
|
|
}
|
|
}, Object.defineProperty(t.prototype, "onAfterUnbind", {
|
|
set: function(e) {
|
|
this._onAfterUnbindObserver && this.onAfterUnbindObservable.remove(this._onAfterUnbindObserver), this._onAfterUnbindObserver = this.onAfterUnbindObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onBeforeRender", {
|
|
set: function(e) {
|
|
this._onBeforeRenderObserver && this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver), this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onAfterRender", {
|
|
set: function(e) {
|
|
this._onAfterRenderObserver && this.onAfterRenderObservable.remove(this._onAfterRenderObserver), this._onAfterRenderObserver = this.onAfterRenderObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onClear", {
|
|
set: function(e) {
|
|
this._onClearObserver && this.onClearObservable.remove(this._onClearObserver), this._onClearObserver = this.onClearObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "renderTargetOptions", {
|
|
get: function() {
|
|
return this._renderTargetOptions
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._onRatioRescale = function() {
|
|
this._sizeRatio && this.resize(this._initialSizeParameter)
|
|
}, Object.defineProperty(t.prototype, "boundingBoxSize", {
|
|
get: function() {
|
|
return this._boundingBoxSize
|
|
},
|
|
set: function(e) {
|
|
if (!this._boundingBoxSize || !this._boundingBoxSize.equals(e)) {
|
|
this._boundingBoxSize = e;
|
|
var t = this.getScene();
|
|
t && t.markAllMaterialsAsDirty(_.a.MATERIAL_TextureDirtyFlag)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.createDepthStencilTexture = function(e, t, i) {
|
|
if (void 0 === e && (e = 0), void 0 === t && (t = !0), void 0 === i && (i = !1), this.getScene()) {
|
|
var n = this.getScene().getEngine();
|
|
this.depthStencilTexture = n.createDepthStencilTexture(this._size, {
|
|
bilinearFiltering: t,
|
|
comparisonFunction: e,
|
|
generateStencil: i,
|
|
isCube: this.isCube
|
|
}), n.setFrameBufferDepthStencilTexture(this)
|
|
}
|
|
}, t.prototype._processSizeParameter = function(e) {
|
|
e.ratio ? (this._sizeRatio = e.ratio, this._size = {
|
|
width: this._bestReflectionRenderTargetDimension(this._engine.getRenderWidth(), this._sizeRatio),
|
|
height: this._bestReflectionRenderTargetDimension(this._engine.getRenderHeight(), this._sizeRatio)
|
|
}) : this._size = e
|
|
}, Object.defineProperty(t.prototype, "samples", {
|
|
get: function() {
|
|
return this._samples
|
|
},
|
|
set: function(e) {
|
|
if (this._samples !== e) {
|
|
var t = this.getScene();
|
|
t && (this._samples = t.getEngine().updateRenderTargetTextureSampleCount(this._texture, e))
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.resetRefreshCounter = function() {
|
|
this._currentRefreshId = -1
|
|
}, Object.defineProperty(t.prototype, "refreshRate", {
|
|
get: function() {
|
|
return this._refreshRate
|
|
},
|
|
set: function(e) {
|
|
this._refreshRate = e, this.resetRefreshCounter()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.addPostProcess = function(e) {
|
|
if (!this._postProcessManager) {
|
|
var t = this.getScene();
|
|
if (!t) return;
|
|
this._postProcessManager = new fi.a(t), this._postProcesses = new Array
|
|
}
|
|
this._postProcesses.push(e), this._postProcesses[0].autoClear = !1
|
|
}, t.prototype.clearPostProcesses = function(e) {
|
|
if (void 0 === e && (e = !1), this._postProcesses) {
|
|
if (e)
|
|
for (var t = 0, i = this._postProcesses; t < i.length; t++) {
|
|
i[t].dispose()
|
|
}
|
|
this._postProcesses = []
|
|
}
|
|
}, t.prototype.removePostProcess = function(e) {
|
|
if (this._postProcesses) {
|
|
var t = this._postProcesses.indexOf(e); - 1 !== t && (this._postProcesses.splice(t, 1), this._postProcesses.length > 0 && (this._postProcesses[0].autoClear = !1))
|
|
}
|
|
}, t.prototype._shouldRender = function() {
|
|
return -1 === this._currentRefreshId ? (this._currentRefreshId = 1, !0) : this.refreshRate === this._currentRefreshId ? (this._currentRefreshId = 1, !0) : (this._currentRefreshId++, !1)
|
|
}, t.prototype.getRenderSize = function() {
|
|
return this.getRenderWidth()
|
|
}, t.prototype.getRenderWidth = function() {
|
|
return this._size.width ? this._size.width : this._size
|
|
}, t.prototype.getRenderHeight = function() {
|
|
return this._size.width ? this._size.height : this._size
|
|
}, Object.defineProperty(t.prototype, "canRescale", {
|
|
get: function() {
|
|
return !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.scale = function(e) {
|
|
var t = this.getRenderSize() * e;
|
|
this.resize(t)
|
|
}, t.prototype.getReflectionTextureMatrix = function() {
|
|
return this.isCube ? this._textureMatrix : e.prototype.getReflectionTextureMatrix.call(this)
|
|
}, t.prototype.resize = function(e) {
|
|
var t = this.isCube;
|
|
this.releaseInternalTexture();
|
|
var i = this.getScene();
|
|
i && (this._processSizeParameter(e), this._texture = t ? i.getEngine().createRenderTargetCubeTexture(this.getRenderSize(), this._renderTargetOptions) : i.getEngine().createRenderTargetTexture(this._size, this._renderTargetOptions))
|
|
}, t.prototype.render = function(e, t) {
|
|
if (void 0 === e && (e = !1), void 0 === t && (t = !1), a = this.getScene()) {
|
|
var i, n = a.getEngine();
|
|
if (void 0 !== this.useCameraPostProcesses && (e = this.useCameraPostProcesses), this._waitingRenderList) {
|
|
this.renderList = [];
|
|
for (var r = 0; r < this._waitingRenderList.length; r++) {
|
|
var o = this._waitingRenderList[r],
|
|
s = a.getMeshByID(o);
|
|
s && this.renderList.push(s)
|
|
}
|
|
delete this._waitingRenderList
|
|
}
|
|
if (this.renderListPredicate) {
|
|
var a;
|
|
if (this.renderList ? this.renderList.length = 0 : this.renderList = [], !(a = this.getScene())) return;
|
|
var c = a.meshes;
|
|
for (r = 0; r < c.length; r++) {
|
|
var l = c[r];
|
|
this.renderListPredicate(l) && this.renderList.push(l)
|
|
}
|
|
}
|
|
this.onBeforeBindObservable.notifyObservers(this), this.activeCamera ? (i = this.activeCamera, n.setViewport(this.activeCamera.viewport, this.getRenderWidth(), this.getRenderHeight()), this.activeCamera !== a.activeCamera && a.setTransformMatrix(this.activeCamera.getViewMatrix(), this.activeCamera.getProjectionMatrix(!0))) : (i = a.activeCamera) && n.setViewport(i.viewport, this.getRenderWidth(), this.getRenderHeight()), this._renderingManager.reset();
|
|
for (var u = this.renderList ? this.renderList : a.getActiveMeshes().data, h = this.renderList ? this.renderList.length : a.getActiveMeshes().length, d = a.getRenderId(), f = 0; f < h; f++) {
|
|
if (l = u[f]) {
|
|
if (!l.isReady(0 === this.refreshRate)) {
|
|
this.resetRefreshCounter();
|
|
continue
|
|
}
|
|
l._preActivateForIntermediateRendering(d);
|
|
var p = void 0;
|
|
if (p = !(this.renderList || !i) && 0 == (l.layerMask & i.layerMask), l.isEnabled() && l.isVisible && l.subMeshes && !p && l._activate(d, !0)) {
|
|
l.isAnInstance ? l = l.sourceMesh : l._internalAbstractMeshDataInfo._onlyForInstancesIntermediate = !1, l._internalAbstractMeshDataInfo._isActiveIntermediate = !0;
|
|
for (var _ = 0; _ < l.subMeshes.length; _++) {
|
|
var g = l.subMeshes[_];
|
|
a._activeIndices.addCount(g.indexCount, !1), this._renderingManager.dispatch(g, l)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (var m = 0; m < a.particleSystems.length; m++) {
|
|
var v = a.particleSystems[m],
|
|
y = v.emitter;
|
|
v.isStarted() && y && y.position && y.isEnabled() && (u.indexOf(y) >= 0 && this._renderingManager.dispatchParticles(v))
|
|
}
|
|
if (this.isCube)
|
|
for (var b = 0; b < 6; b++) this.renderToTarget(b, u, e, t), a.incrementRenderId(), a.resetCachedMaterial();
|
|
else this.renderToTarget(0, u, e, t);
|
|
this.onAfterUnbindObservable.notifyObservers(this), a.activeCamera && (this.activeCamera && this.activeCamera !== a.activeCamera && a.setTransformMatrix(a.activeCamera.getViewMatrix(), a.activeCamera.getProjectionMatrix(!0)), n.setViewport(a.activeCamera.viewport)), a.resetCachedMaterial()
|
|
}
|
|
}, t.prototype._bestReflectionRenderTargetDimension = function(e, t) {
|
|
var i = e * t,
|
|
n = ye.h.NearestPOT(i + 16384 / (128 + i));
|
|
return Math.min(ye.h.FloorPOT(e), n)
|
|
}, t.prototype._bindFrameBuffer = function(e) {
|
|
void 0 === e && (e = 0);
|
|
var t = this.getScene();
|
|
if (t) {
|
|
var i = t.getEngine();
|
|
this._texture && i.bindFramebuffer(this._texture, this.isCube ? e : void 0, void 0, void 0, this.ignoreCameraViewport, this.depthStencilTexture ? this.depthStencilTexture : void 0)
|
|
}
|
|
}, t.prototype.unbindFrameBuffer = function(e, t) {
|
|
var i = this;
|
|
this._texture && e.unBindFramebuffer(this._texture, this.isCube, function() {
|
|
i.onAfterRenderObservable.notifyObservers(t)
|
|
})
|
|
}, t.prototype.renderToTarget = function(e, t, i, n) {
|
|
var r = this.getScene();
|
|
if (r) {
|
|
var o = r.getEngine();
|
|
if (this._texture) {
|
|
this._postProcessManager ? this._postProcessManager._prepareFrame(this._texture, this._postProcesses) : i && r.postProcessManager._prepareFrame(this._texture) || this._bindFrameBuffer(e), this.onBeforeRenderObservable.notifyObservers(e), this.onClearObservable.hasObservers() ? this.onClearObservable.notifyObservers(o) : o.clear(this.clearColor || r.clearColor, !0, !0, !0), this._doNotChangeAspectRatio || r.updateTransformMatrix(!0);
|
|
for (var s = 0, a = r._beforeRenderTargetDrawStage; s < a.length; s++) {
|
|
a[s].action(this)
|
|
}
|
|
this._renderingManager.render(this.customRenderFunction, t, this.renderParticles, this.renderSprites);
|
|
for (var c = 0, l = r._afterRenderTargetDrawStage; c < l.length; c++) {
|
|
l[c].action(this)
|
|
}
|
|
this._postProcessManager ? this._postProcessManager._finalizeFrame(!1, this._texture, e, this._postProcesses, this.ignoreCameraViewport) : i && r.postProcessManager._finalizeFrame(!1, this._texture, e), this._doNotChangeAspectRatio || r.updateTransformMatrix(!0), n && ye.h.DumpFramebuffer(this.getRenderWidth(), this.getRenderHeight(), o), this.isCube && 5 !== e ? this.onAfterRenderObservable.notifyObservers(e) : (this.isCube && 5 === e && o.generateMipMapsForCubemap(this._texture), this.unbindFrameBuffer(o, e))
|
|
}
|
|
}
|
|
}, t.prototype.setRenderingOrder = function(e, t, i, n) {
|
|
void 0 === t && (t = null), void 0 === i && (i = null), void 0 === n && (n = null), this._renderingManager.setRenderingOrder(e, t, i, n)
|
|
}, t.prototype.setRenderingAutoClearDepthStencil = function(e, t) {
|
|
this._renderingManager.setRenderingAutoClearDepthStencil(e, t), this._renderingManager._useSceneAutoClearSetup = !1
|
|
}, t.prototype.clone = function() {
|
|
var e = this.getSize(),
|
|
i = new t(this.name, e, this.getScene(), this._renderTargetOptions.generateMipMaps, this._doNotChangeAspectRatio, this._renderTargetOptions.type, this.isCube, this._renderTargetOptions.samplingMode, this._renderTargetOptions.generateDepthBuffer, this._renderTargetOptions.generateStencilBuffer);
|
|
return i.hasAlpha = this.hasAlpha, i.level = this.level, i.coordinatesMode = this.coordinatesMode, this.renderList && (i.renderList = this.renderList.slice(0)), i
|
|
}, t.prototype.serialize = function() {
|
|
if (!this.name) return null;
|
|
var t = e.prototype.serialize.call(this);
|
|
if (t.renderTargetSize = this.getRenderSize(), t.renderList = [], this.renderList)
|
|
for (var i = 0; i < this.renderList.length; i++) t.renderList.push(this.renderList[i].id);
|
|
return t
|
|
}, t.prototype.disposeFramebufferObjects = function() {
|
|
var e = this.getInternalTexture(),
|
|
t = this.getScene();
|
|
e && t && t.getEngine()._releaseFramebufferObjects(e)
|
|
}, t.prototype.dispose = function() {
|
|
this._postProcessManager && (this._postProcessManager.dispose(), this._postProcessManager = null), this.clearPostProcesses(!0), this._resizeObserver && (this.getScene().getEngine().onResizeObservable.remove(this._resizeObserver), this._resizeObserver = null), this.renderList = null;
|
|
var t = this.getScene();
|
|
if (t) {
|
|
var i = t.customRenderTargets.indexOf(this);
|
|
i >= 0 && t.customRenderTargets.splice(i, 1);
|
|
for (var n = 0, r = t.cameras; n < r.length; n++) {
|
|
var o = r[n];
|
|
(i = o.customRenderTargets.indexOf(this)) >= 0 && o.customRenderTargets.splice(i, 1)
|
|
}
|
|
e.prototype.dispose.call(this)
|
|
}
|
|
}, t.prototype._rebuild = function() {
|
|
this.refreshRate === t.REFRESHRATE_RENDER_ONCE && (this.refreshRate = t.REFRESHRATE_RENDER_ONCE), this._postProcessManager && this._postProcessManager._rebuild()
|
|
}, t.prototype.freeRenderingGroups = function() {
|
|
this._renderingManager && this._renderingManager.freeRenderingGroups()
|
|
}, t.prototype.getViewCount = function() {
|
|
return 1
|
|
}, t.REFRESHRATE_RENDER_ONCE = 0, t.REFRESHRATE_RENDER_ONEVERYFRAME = 1, t.REFRESHRATE_RENDER_ONEVERYTWOFRAMES = 2, t
|
|
}(ke.a);
|
|
ke.a._CreateRenderTargetTexture = function(e, t, i, n) {
|
|
return new _i(e, t, i, n)
|
|
};
|
|
var gi = function(e) {
|
|
function t(t, i) {
|
|
void 0 === i && (i = 512);
|
|
var n = e.call(this, "multiview rtt", i, t, !1, !0, ze.a.DATASOURCE_UNKNOWN, !1, void 0, !1, !1, !0, void 0, !0) || this,
|
|
r = t.getEngine().createMultiviewRenderTargetTexture(n.getRenderWidth(), n.getRenderHeight());
|
|
return r.isMultiview = !0, n._texture = r, n
|
|
}
|
|
return l.d(t, e), t.prototype._bindFrameBuffer = function(e) {
|
|
void 0 === e && (e = 0), this._texture && this.getScene().getEngine().bindMultiviewFramebuffer(this._texture)
|
|
}, t.prototype.getViewCount = function() {
|
|
return 2
|
|
}, t
|
|
}(_i);
|
|
ge.b.prototype.createMultiviewRenderTargetTexture = function(e, t) {
|
|
var i = this._gl;
|
|
if (!this.getCaps().multiview) throw "Multiview is not supported";
|
|
var n = new ze.a(this, ze.a.DATASOURCE_UNKNOWN, !0);
|
|
return n.width = e, n.height = t, n._framebuffer = i.createFramebuffer(), n._colorTextureArray = i.createTexture(), i.bindTexture(i.TEXTURE_2D_ARRAY, n._colorTextureArray), i.texStorage3D(i.TEXTURE_2D_ARRAY, 1, i.RGBA8, e, t, 2), n._depthStencilTextureArray = i.createTexture(), i.bindTexture(i.TEXTURE_2D_ARRAY, n._depthStencilTextureArray), i.texStorage3D(i.TEXTURE_2D_ARRAY, 1, i.DEPTH32F_STENCIL8, e, t, 2), n.isReady = !0, n
|
|
}, ge.b.prototype.bindMultiviewFramebuffer = function(e) {
|
|
var t = this._gl,
|
|
i = this.getCaps().multiview;
|
|
if (this.bindFramebuffer(e, void 0, void 0, void 0, !0), t.bindFramebuffer(t.DRAW_FRAMEBUFFER, e._framebuffer), !e._colorTextureArray || !e._depthStencilTextureArray) throw "Invalid multiview frame buffer";
|
|
i.framebufferTextureMultiviewOVR(t.DRAW_FRAMEBUFFER, t.COLOR_ATTACHMENT0, e._colorTextureArray, 0, 0, 2), i.framebufferTextureMultiviewOVR(t.DRAW_FRAMEBUFFER, t.DEPTH_STENCIL_ATTACHMENT, e._depthStencilTextureArray, 0, 0, 2)
|
|
}, Ne.a.prototype._useMultiviewToSingleView = !1, Ne.a.prototype._multiviewTexture = null, Ne.a.prototype._resizeOrCreateMultiviewTexture = function(e, t) {
|
|
this._multiviewTexture ? this._multiviewTexture.getRenderWidth() == e && this._multiviewTexture.getRenderHeight() == t || (this._multiviewTexture.dispose(), this._multiviewTexture = new gi(this.getScene(), {
|
|
width: e,
|
|
height: t
|
|
})) : this._multiviewTexture = new gi(this.getScene(), {
|
|
width: e,
|
|
height: t
|
|
})
|
|
}, W.a.prototype._transformMatrixR = o.j.Zero(), W.a.prototype._multiviewSceneUbo = null, W.a.prototype._createMultiviewUbo = function() {
|
|
this._multiviewSceneUbo = new di.a(this.getEngine(), void 0, !0), this._multiviewSceneUbo.addUniform("viewProjection", 16), this._multiviewSceneUbo.addUniform("viewProjectionR", 16), this._multiviewSceneUbo.addUniform("view", 16)
|
|
}, W.a.prototype._updateMultiviewUbo = function(e, t) {
|
|
e && t && e.multiplyToRef(t, this._transformMatrixR), e && t && (e.multiplyToRef(t, o.t.Matrix[0]), o.i.GetRightPlaneToRef(o.t.Matrix[0], this._frustumPlanes[3])), this._multiviewSceneUbo && (this._multiviewSceneUbo.updateMatrix("viewProjection", this.getTransformMatrix()), this._multiviewSceneUbo.updateMatrix("viewProjectionR", this._transformMatrixR), this._multiviewSceneUbo.updateMatrix("view", this._viewMatrix), this._multiviewSceneUbo.update())
|
|
}, W.a.prototype._renderMultiviewToSingleView = function(e) {
|
|
e._resizeOrCreateMultiviewTexture(e._rigPostProcess && e._rigPostProcess && e._rigPostProcess.width > 0 ? e._rigPostProcess.width / 2 : this.getEngine().getRenderWidth(!0) / 2, e._rigPostProcess && e._rigPostProcess && e._rigPostProcess.height > 0 ? e._rigPostProcess.height : this.getEngine().getRenderHeight(!0)), this._multiviewSceneUbo || this._createMultiviewUbo(), e.outputRenderTarget = e._multiviewTexture, this._renderForCamera(e), e.outputRenderTarget = null;
|
|
for (var t = 0; t < e._rigCameras.length; t++) {
|
|
var i = this.getEngine();
|
|
this._activeCamera = e._rigCameras[t], i.setViewport(this._activeCamera.viewport), this.postProcessManager && (this.postProcessManager._prepareFrame(), this.postProcessManager._finalizeFrame(this._activeCamera.isIntermediate))
|
|
}
|
|
};
|
|
var mi = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, "vrMultiviewToSingleview", ["imageIndex"], ["multiviewSampler"], n, i, ke.a.BILINEAR_SAMPLINGMODE) || this;
|
|
return r.onSizeChangedObservable.add(function() {}), r.onApplyObservable.add(function(e) {
|
|
i._scene.activeCamera && i._scene.activeCamera.isLeftCamera ? e.setInt("imageIndex", 0) : e.setInt("imageIndex", 1), e.setTexture("multiviewSampler", i._multiviewTexture)
|
|
}), r
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht);
|
|
Ne.a._setVRRigMode = function(e, t) {
|
|
var i = t.vrCameraMetrics || ci.GetDefault();
|
|
e._rigCameras[0]._cameraRigParams.vrMetrics = i, e._rigCameras[0].viewport = new o.z(0, 0, .5, 1), e._rigCameras[0]._cameraRigParams.vrWorkMatrix = new o.j, e._rigCameras[0]._cameraRigParams.vrHMatrix = i.leftHMatrix, e._rigCameras[0]._cameraRigParams.vrPreViewMatrix = i.leftPreViewMatrix, e._rigCameras[0].getProjectionMatrix = e._rigCameras[0]._getVRProjectionMatrix, e._rigCameras[1]._cameraRigParams.vrMetrics = i, e._rigCameras[1].viewport = new o.z(.5, 0, .5, 1), e._rigCameras[1]._cameraRigParams.vrWorkMatrix = new o.j, e._rigCameras[1]._cameraRigParams.vrHMatrix = i.rightHMatrix, e._rigCameras[1]._cameraRigParams.vrPreViewMatrix = i.rightPreViewMatrix, e._rigCameras[1].getProjectionMatrix = e._rigCameras[1]._getVRProjectionMatrix, i.multiviewEnabled && (e.getScene().getEngine().getCaps().multiview ? (e._useMultiviewToSingleView = !0, e._rigPostProcess = new mi("VRMultiviewToSingleview", e, i.postProcessScaleFactor)) : (p.a.Warn("Multiview is not supported, falling back to standard rendering"), i.multiviewEnabled = !1)), i.compensateDistortion && (e._rigCameras[0]._rigPostProcess = new ui("VR_Distort_Compensation_Left", e._rigCameras[0], !1, i), e._rigCameras[1]._rigPostProcess = new ui("VR_Distort_Compensation_Right", e._rigCameras[1], !0, i))
|
|
}, F.a.AddNodeConstructor("VRDeviceOrientationFreeCamera", function(e, t) {
|
|
return function() {
|
|
return new vi(e, 0, 0, 1, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var vi = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
void 0 === a && (a = !0), void 0 === c && (c = ci.GetDefault());
|
|
var l = e.call(this, t, i, n, r, o, s) || this;
|
|
return c.compensateDistortion = a, l.setCameraRigMode(Ne.a.RIG_MODE_VR, {
|
|
vrCameraMetrics: c
|
|
}), l.inputs.addVRDeviceOrientation(), l
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "VRDeviceOrientationArcRotateCamera"
|
|
}, t
|
|
}(Et);
|
|
F.a.AddNodeConstructor("VRDeviceOrientationFreeCamera", function(e, t) {
|
|
return function() {
|
|
return new yi(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var yi = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
void 0 === r && (r = !0), void 0 === o && (o = ci.GetDefault());
|
|
var s = e.call(this, t, i, n) || this;
|
|
return o.compensateDistortion = r, s.setCameraRigMode(Ne.a.RIG_MODE_VR, {
|
|
vrCameraMetrics: o
|
|
}), s
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "VRDeviceOrientationFreeCamera"
|
|
}, t
|
|
}(At);
|
|
F.a.AddNodeConstructor("VRDeviceOrientationGamepadCamera", function(e, t) {
|
|
return function() {
|
|
return new bi(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var bi = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
void 0 === r && (r = !0), void 0 === o && (o = ci.GetDefault());
|
|
var s = e.call(this, t, i, n, r, o) || this;
|
|
return s.inputs.addGamepad(), s
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "VRDeviceOrientationGamepadCamera"
|
|
}, t
|
|
}(yi),
|
|
Ti = i(65);
|
|
Ne.a._setWebVRRigMode = function(e, t) {
|
|
if (t.vrDisplay) {
|
|
var i = t.vrDisplay.getEyeParameters("left"),
|
|
n = t.vrDisplay.getEyeParameters("right");
|
|
e._rigCameras[0].viewport = new o.z(0, 0, .5, 1), e._rigCameras[0].setCameraRigParameter("left", !0), e._rigCameras[0].setCameraRigParameter("specs", t.specs), e._rigCameras[0].setCameraRigParameter("eyeParameters", i), e._rigCameras[0].setCameraRigParameter("frameData", t.frameData), e._rigCameras[0].setCameraRigParameter("parentCamera", t.parentCamera), e._rigCameras[0]._cameraRigParams.vrWorkMatrix = new o.j, e._rigCameras[0].getProjectionMatrix = e._getWebVRProjectionMatrix, e._rigCameras[0].parent = e, e._rigCameras[0]._getViewMatrix = e._getWebVRViewMatrix, e._rigCameras[1].viewport = new o.z(.5, 0, .5, 1), e._rigCameras[1].setCameraRigParameter("eyeParameters", n), e._rigCameras[1].setCameraRigParameter("specs", t.specs), e._rigCameras[1].setCameraRigParameter("frameData", t.frameData), e._rigCameras[1].setCameraRigParameter("parentCamera", t.parentCamera), e._rigCameras[1]._cameraRigParams.vrWorkMatrix = new o.j, e._rigCameras[1].getProjectionMatrix = e._getWebVRProjectionMatrix, e._rigCameras[1].parent = e, e._rigCameras[1]._getViewMatrix = e._getWebVRViewMatrix
|
|
}
|
|
}, Object.defineProperty(ge.b.prototype, "isInVRExclusivePointerMode", {
|
|
get: function() {
|
|
return this._vrExclusivePointerMode
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), ge.b.prototype._prepareVRComponent = function() {
|
|
this._vrSupported = !1, this._vrExclusivePointerMode = !1, this.onVRDisplayChangedObservable = new r.c, this.onVRRequestPresentComplete = new r.c, this.onVRRequestPresentStart = new r.c
|
|
}, ge.b.prototype.isVRDevicePresent = function() {
|
|
return !!this._vrDisplay
|
|
}, ge.b.prototype.getVRDevice = function() {
|
|
return this._vrDisplay
|
|
}, ge.b.prototype.initWebVR = function() {
|
|
return this.initWebVRAsync(), this.onVRDisplayChangedObservable
|
|
}, ge.b.prototype.initWebVRAsync = function() {
|
|
var e = this,
|
|
t = function() {
|
|
var t = {
|
|
vrDisplay: e._vrDisplay,
|
|
vrSupported: e._vrSupported
|
|
};
|
|
e.onVRDisplayChangedObservable.notifyObservers(t), e._webVRInitPromise = new Promise(function(e) {
|
|
e(t)
|
|
})
|
|
};
|
|
return this._onVrDisplayConnect || (this._onVrDisplayConnect = function(i) {
|
|
e._vrDisplay = i.display, t()
|
|
}, this._onVrDisplayDisconnect = function() {
|
|
e._vrDisplay.cancelAnimationFrame(e._frameHandler), e._vrDisplay = void 0, e._frameHandler = ye.h.QueueNewFrame(e._bindedRenderFunction), t()
|
|
}, this._onVrDisplayPresentChange = function() {
|
|
e._vrExclusivePointerMode = e._vrDisplay && e._vrDisplay.isPresenting
|
|
}, window.addEventListener("vrdisplayconnect", this._onVrDisplayConnect), window.addEventListener("vrdisplaydisconnect", this._onVrDisplayDisconnect), window.addEventListener("vrdisplaypresentchange", this._onVrDisplayPresentChange)), this._webVRInitPromise = this._webVRInitPromise || this._getVRDisplaysAsync(), this._webVRInitPromise.then(t), this._webVRInitPromise
|
|
}, ge.b.prototype._getVRDisplaysAsync = function() {
|
|
var e = this;
|
|
return new Promise(function(t) {
|
|
navigator.getVRDisplays ? navigator.getVRDisplays().then(function(i) {
|
|
e._vrSupported = !0, e._vrDisplay = i[0], t({
|
|
vrDisplay: e._vrDisplay,
|
|
vrSupported: e._vrSupported
|
|
})
|
|
}) : (e._vrDisplay = void 0, e._vrSupported = !1, t({
|
|
vrDisplay: e._vrDisplay,
|
|
vrSupported: e._vrSupported
|
|
}))
|
|
})
|
|
}, ge.b.prototype.enableVR = function() {
|
|
var e = this;
|
|
if (this._vrDisplay && !this._vrDisplay.isPresenting) {
|
|
this.onVRRequestPresentStart.notifyObservers(this), this._vrDisplay.requestPresent([{
|
|
source: this.getRenderingCanvas()
|
|
}]).then(function() {
|
|
e.onVRRequestPresentComplete.notifyObservers(!0), e._onVRFullScreenTriggered()
|
|
}).catch(function() {
|
|
e.onVRRequestPresentComplete.notifyObservers(!1)
|
|
})
|
|
}
|
|
}, ge.b.prototype._onVRFullScreenTriggered = function() {
|
|
if (this._vrDisplay && this._vrDisplay.isPresenting) {
|
|
this._oldSize = new o.r(this.getRenderWidth(), this.getRenderHeight()), this._oldHardwareScaleFactor = this.getHardwareScalingLevel();
|
|
var e = this._vrDisplay.getEyeParameters("left");
|
|
this.setHardwareScalingLevel(1), this.setSize(2 * e.renderWidth, e.renderHeight)
|
|
} else this.setHardwareScalingLevel(this._oldHardwareScaleFactor), this.setSize(this._oldSize.width, this._oldSize.height)
|
|
}, ge.b.prototype.disableVR = function() {
|
|
var e = this;
|
|
this._vrDisplay && this._vrDisplay.isPresenting && this._vrDisplay.exitPresent().then(function() {
|
|
return e._onVRFullScreenTriggered()
|
|
}).catch(function() {
|
|
return e._onVRFullScreenTriggered()
|
|
}), Ot.a.IsWindowObjectExist() && (window.removeEventListener("vrdisplaypointerrestricted", this._onVRDisplayPointerRestricted), window.removeEventListener("vrdisplaypointerunrestricted", this._onVRDisplayPointerUnrestricted), this._onVrDisplayConnect && (window.removeEventListener("vrdisplayconnect", this._onVrDisplayConnect), this._onVrDisplayDisconnect && window.removeEventListener("vrdisplaydisconnect", this._onVrDisplayDisconnect), this._onVrDisplayPresentChange && window.removeEventListener("vrdisplaypresentchange", this._onVrDisplayPresentChange), this._onVrDisplayConnect = null, this._onVrDisplayDisconnect = null))
|
|
}, ge.b.prototype._connectVREvents = function(e, t) {
|
|
this._onVRDisplayPointerRestricted = function() {
|
|
e && e.requestPointerLock()
|
|
}, this._onVRDisplayPointerUnrestricted = function() {
|
|
t.exitPointerLock && t.exitPointerLock()
|
|
}, Ot.a.IsWindowObjectExist() && (window.addEventListener("vrdisplaypointerrestricted", this._onVRDisplayPointerRestricted, !1), window.addEventListener("vrdisplaypointerunrestricted", this._onVRDisplayPointerUnrestricted, !1))
|
|
}, ge.b.prototype._submitVRFrame = function() {
|
|
if (this._vrDisplay && this._vrDisplay.isPresenting) try {
|
|
this._vrDisplay.submitFrame()
|
|
} catch (e) {
|
|
ye.h.Warn("webVR submitFrame has had an unexpected failure: " + e)
|
|
}
|
|
}, ge.b.prototype.isVRPresenting = function() {
|
|
return this._vrDisplay && this._vrDisplay.isPresenting
|
|
}, ge.b.prototype._requestVRFrame = function() {
|
|
this._frameHandler = ye.h.QueueNewFrame(this._bindedRenderFunction, this._vrDisplay)
|
|
}, F.a.AddNodeConstructor("WebVRFreeCamera", function(e, t) {
|
|
return function() {
|
|
return new Ei(e, o.x.Zero(), t)
|
|
}
|
|
}), F.a.AddNodeConstructor("WebVRGamepadCamera", function(e, t) {
|
|
return function() {
|
|
return new Ei(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var Ei = function(e) {
|
|
function t(t, i, n, s) {
|
|
void 0 === s && (s = {});
|
|
var a = e.call(this, t, i, n) || this;
|
|
a.webVROptions = s, a._vrDevice = null, a.rawPose = null, a._specsVersion = "1.1", a._attached = !1, a._descendants = [], a._deviceRoomPosition = o.x.Zero(), a._deviceRoomRotationQuaternion = o.q.Identity(), a._standingMatrix = null, a.devicePosition = o.x.Zero(), a.deviceRotationQuaternion = o.q.Identity(), a.deviceScaleFactor = 1, a._deviceToWorld = o.j.Identity(), a._worldToDevice = o.j.Identity(), a.controllers = [], a.onControllersAttachedObservable = new r.c, a.onControllerMeshLoadedObservable = new r.c, a.onPoseUpdatedFromDeviceObservable = new r.c, a._poseSet = !1, a.rigParenting = !0, a._defaultHeight = void 0, a._htmlElementAttached = null, a._detachIfAttached = function() {
|
|
var e = a.getEngine().getVRDevice();
|
|
e && !e.isPresenting && a._htmlElementAttached && a.detachControl(a._htmlElementAttached)
|
|
}, a._workingVector = o.x.Zero(), a._oneVector = o.x.One(), a._workingMatrix = o.j.Identity(), a._tmpMatrix = new o.j, a._cache.position = o.x.Zero(), s.defaultHeight && (a._defaultHeight = s.defaultHeight, a.position.y = a._defaultHeight), a.minZ = .1, 5 === arguments.length && (a.webVROptions = arguments[4]), null == a.webVROptions.trackPosition && (a.webVROptions.trackPosition = !0), null == a.webVROptions.controllerMeshes && (a.webVROptions.controllerMeshes = !0), null == a.webVROptions.defaultLightingOnControllers && (a.webVROptions.defaultLightingOnControllers = !0), a.rotationQuaternion = new o.q, a.webVROptions && a.webVROptions.positionScale && (a.deviceScaleFactor = a.webVROptions.positionScale);
|
|
var c = a.getEngine();
|
|
return a._onVREnabled = function(e) {
|
|
e && a.initControllers()
|
|
}, c.onVRRequestPresentComplete.add(a._onVREnabled), c.initWebVR().add(function(e) {
|
|
e.vrDisplay && a._vrDevice !== e.vrDisplay && (a._vrDevice = e.vrDisplay, a.setCameraRigMode(Ne.a.RIG_MODE_WEBVR, {
|
|
parentCamera: a,
|
|
vrDisplay: a._vrDevice,
|
|
frameData: a._frameData,
|
|
specs: a._specsVersion
|
|
}), a._attached && a.getEngine().enableVR())
|
|
}), "undefined" != typeof VRFrameData && (a._frameData = new VRFrameData), s.useMultiview && (a.getScene().getEngine().getCaps().multiview ? (a._useMultiviewToSingleView = !0, a._rigPostProcess = new mi("VRMultiviewToSingleview", a, 1)) : (p.a.Warn("Multiview is not supported, falling back to standard rendering"), a._useMultiviewToSingleView = !1)), n.onBeforeCameraRenderObservable.add(function(e) {
|
|
e.parent === a && a.rigParenting && (a._descendants = a.getDescendants(!0, function(e) {
|
|
var t = a.controllers.some(function(t) {
|
|
return t._mesh === e
|
|
}),
|
|
i = -1 !== a._rigCameras.indexOf(e);
|
|
return !t && !i
|
|
}), a._descendants.forEach(function(t) {
|
|
t.parent = e
|
|
}))
|
|
}), n.onAfterCameraRenderObservable.add(function(e) {
|
|
e.parent === a && a.rigParenting && a._descendants.forEach(function(e) {
|
|
e.parent = a
|
|
})
|
|
}), a
|
|
}
|
|
return l.d(t, e), t.prototype.deviceDistanceToRoomGround = function() {
|
|
return this._standingMatrix ? (this._standingMatrix.getTranslationToRef(this._workingVector), this._deviceRoomPosition.y + this._workingVector.y) : this._defaultHeight || 0
|
|
}, t.prototype.useStandingMatrix = function(e) {
|
|
var t = this;
|
|
void 0 === e && (e = function(e) {}), this.getEngine().initWebVRAsync().then(function(i) {
|
|
i.vrDisplay && i.vrDisplay.stageParameters && i.vrDisplay.stageParameters.sittingToStandingTransform && t.webVROptions.trackPosition ? (t._standingMatrix = new o.j, o.j.FromFloat32ArrayToRefScaled(i.vrDisplay.stageParameters.sittingToStandingTransform, 0, 1, t._standingMatrix), t.getScene().useRightHandedSystem || t._standingMatrix && t._standingMatrix.toggleModelMatrixHandInPlace(), e(!0)) : e(!1)
|
|
})
|
|
}, t.prototype.useStandingMatrixAsync = function() {
|
|
var e = this;
|
|
return new Promise(function(t) {
|
|
e.useStandingMatrix(function(e) {
|
|
t(e)
|
|
})
|
|
})
|
|
}, t.prototype.dispose = function() {
|
|
this._detachIfAttached(), this.getEngine().onVRRequestPresentComplete.removeCallback(this._onVREnabled), this._updateCacheWhenTrackingDisabledObserver && this._scene.onBeforeRenderObservable.remove(this._updateCacheWhenTrackingDisabledObserver), e.prototype.dispose.call(this)
|
|
}, t.prototype.getControllerByName = function(e) {
|
|
for (var t = 0, i = this.controllers; t < i.length; t++) {
|
|
var n = i[t];
|
|
if (n.hand === e) return n
|
|
}
|
|
return null
|
|
}, Object.defineProperty(t.prototype, "leftController", {
|
|
get: function() {
|
|
return this._leftController || (this._leftController = this.getControllerByName("left")), this._leftController
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rightController", {
|
|
get: function() {
|
|
return this._rightController || (this._rightController = this.getControllerByName("right")), this._rightController
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getForwardRay = function(t) {
|
|
return void 0 === t && (t = 100), this.leftCamera ? e.prototype.getForwardRay.call(this, t, this.leftCamera.getWorldMatrix(), this.leftCamera.globalPosition) : e.prototype.getForwardRay.call(this, t)
|
|
}, t.prototype._checkInputs = function() {
|
|
this._vrDevice && this._vrDevice.isPresenting && (this._vrDevice.getFrameData(this._frameData), this.updateFromDevice(this._frameData.pose)), e.prototype._checkInputs.call(this)
|
|
}, t.prototype.updateFromDevice = function(e) {
|
|
e && e.orientation && (this.rawPose = e, this._deviceRoomRotationQuaternion.copyFromFloats(e.orientation[0], e.orientation[1], -e.orientation[2], -e.orientation[3]), this.getScene().useRightHandedSystem && (this._deviceRoomRotationQuaternion.z *= -1, this._deviceRoomRotationQuaternion.w *= -1), this.webVROptions.trackPosition && this.rawPose.position && (this._deviceRoomPosition.copyFromFloats(this.rawPose.position[0], this.rawPose.position[1], -this.rawPose.position[2]), this.getScene().useRightHandedSystem && (this._deviceRoomPosition.z *= -1)), this._poseSet = !0)
|
|
}, t.prototype.attachControl = function(t, i) {
|
|
e.prototype.attachControl.call(this, t, i), this._attached = !0, this._htmlElementAttached = t, i = !Ne.a.ForceAttachControlToAlwaysPreventDefault && i, this._vrDevice && this.getEngine().enableVR(), window.addEventListener("vrdisplaypresentchange", this._detachIfAttached)
|
|
}, t.prototype.detachControl = function(t) {
|
|
this.getScene().gamepadManager.onGamepadConnectedObservable.remove(this._onGamepadConnectedObserver), this.getScene().gamepadManager.onGamepadDisconnectedObservable.remove(this._onGamepadDisconnectedObserver), e.prototype.detachControl.call(this, t), this._attached = !1, this.getEngine().disableVR(), window.removeEventListener("vrdisplaypresentchange", this._detachIfAttached)
|
|
}, t.prototype.getClassName = function() {
|
|
return "WebVRFreeCamera"
|
|
}, t.prototype.resetToCurrentRotation = function() {
|
|
this._vrDevice.resetPose()
|
|
}, t.prototype._updateRigCameras = function() {
|
|
var e = this._rigCameras[0],
|
|
t = this._rigCameras[1];
|
|
e.rotationQuaternion.copyFrom(this._deviceRoomRotationQuaternion), t.rotationQuaternion.copyFrom(this._deviceRoomRotationQuaternion), e.position.copyFrom(this._deviceRoomPosition), t.position.copyFrom(this._deviceRoomPosition)
|
|
}, t.prototype._correctPositionIfNotTrackPosition = function(e, t) {
|
|
void 0 === t && (t = !1), this.rawPose && this.rawPose.position && !this.webVROptions.trackPosition && (o.j.TranslationToRef(this.rawPose.position[0], this.rawPose.position[1], -this.rawPose.position[2], this._tmpMatrix), t || this._tmpMatrix.invert(), this._tmpMatrix.multiplyToRef(e, e))
|
|
}, t.prototype._updateCache = function(t) {
|
|
var i = this;
|
|
this.rotationQuaternion.equals(this._cache.rotationQuaternion) && this.position.equals(this._cache.position) || (this.updateCacheCalled || (this.updateCacheCalled = !0, this.update()), this.rotationQuaternion.toRotationMatrix(this._workingMatrix), o.x.TransformCoordinatesToRef(this._deviceRoomPosition, this._workingMatrix, this._workingVector), this.devicePosition.subtractToRef(this._workingVector, this._workingVector), o.j.ComposeToRef(this._oneVector, this.rotationQuaternion, this._workingVector, this._deviceToWorld), this._deviceToWorld.getTranslationToRef(this._workingVector), this._workingVector.addInPlace(this.position), this._workingVector.subtractInPlace(this._cache.position), this._deviceToWorld.setTranslation(this._workingVector), this._deviceToWorld.invertToRef(this._worldToDevice), this.controllers.forEach(function(e) {
|
|
e._deviceToWorld.copyFrom(i._deviceToWorld), i._correctPositionIfNotTrackPosition(e._deviceToWorld), e.update()
|
|
})), t || e.prototype._updateCache.call(this), this.updateCacheCalled = !1
|
|
}, t.prototype._computeDevicePosition = function() {
|
|
o.x.TransformCoordinatesToRef(this._deviceRoomPosition, this._deviceToWorld, this.devicePosition)
|
|
}, t.prototype.update = function() {
|
|
this._computeDevicePosition(), o.j.FromQuaternionToRef(this._deviceRoomRotationQuaternion, this._workingMatrix), this._workingMatrix.multiplyToRef(this._deviceToWorld, this._workingMatrix), o.q.FromRotationMatrixToRef(this._workingMatrix, this.deviceRotationQuaternion), this._poseSet && this.onPoseUpdatedFromDeviceObservable.notifyObservers(null), e.prototype.update.call(this)
|
|
}, t.prototype._getViewMatrix = function() {
|
|
return o.j.Identity()
|
|
}, t.prototype._getWebVRViewMatrix = function() {
|
|
var e = this._cameraRigParams.parentCamera;
|
|
e._updateCache();
|
|
var t = this._cameraRigParams.left ? this._cameraRigParams.frameData.leftViewMatrix : this._cameraRigParams.frameData.rightViewMatrix;
|
|
return o.j.FromArrayToRef(t, 0, this._webvrViewMatrix), this.getScene().useRightHandedSystem || this._webvrViewMatrix.toggleModelMatrixHandInPlace(), this._webvrViewMatrix.getRotationMatrixToRef(this._cameraRotationMatrix), o.x.TransformCoordinatesToRef(this._referencePoint, this._cameraRotationMatrix, this._transformedReferencePoint), this.position.addToRef(this._transformedReferencePoint, this._currentTarget), 1 !== e.deviceScaleFactor && (this._webvrViewMatrix.invert(), e.deviceScaleFactor && (this._webvrViewMatrix.multiplyAtIndex(12, e.deviceScaleFactor), this._webvrViewMatrix.multiplyAtIndex(13, e.deviceScaleFactor), this._webvrViewMatrix.multiplyAtIndex(14, e.deviceScaleFactor)), this._webvrViewMatrix.invert()), e._correctPositionIfNotTrackPosition(this._webvrViewMatrix, !0), e._worldToDevice.multiplyToRef(this._webvrViewMatrix, this._webvrViewMatrix), this._workingMatrix = this._workingMatrix || o.j.Identity(), this._webvrViewMatrix.invertToRef(this._workingMatrix), this._workingMatrix.multiplyToRef(e.getWorldMatrix(), this._workingMatrix), this._workingMatrix.getTranslationToRef(this._globalPosition), this._markSyncedWithParent(), this._webvrViewMatrix
|
|
}, t.prototype._getWebVRProjectionMatrix = function() {
|
|
var e = this.parent;
|
|
e._vrDevice.depthNear = e.minZ, e._vrDevice.depthFar = e.maxZ;
|
|
var t = this._cameraRigParams.left ? this._cameraRigParams.frameData.leftProjectionMatrix : this._cameraRigParams.frameData.rightProjectionMatrix;
|
|
return o.j.FromArrayToRef(t, 0, this._projectionMatrix), this.getScene().useRightHandedSystem || this._projectionMatrix.toggleProjectionMatrixHandInPlace(), this._projectionMatrix
|
|
}, t.prototype.initControllers = function() {
|
|
var e = this;
|
|
this.controllers = [];
|
|
var t = this.getScene().gamepadManager;
|
|
this._onGamepadDisconnectedObserver = t.onGamepadDisconnectedObservable.add(function(t) {
|
|
if (t.type === Ke.POSE_ENABLED) {
|
|
var i = t;
|
|
i.defaultModel && i.defaultModel.setEnabled(!1), "right" === i.hand && (e._rightController = null), "left" === i.hand && (e._leftController = null);
|
|
var n = e.controllers.indexOf(i); - 1 !== n && e.controllers.splice(n, 1)
|
|
}
|
|
}), this._onGamepadConnectedObserver = t.onGamepadConnectedObservable.add(function(t) {
|
|
if (t.type === Ke.POSE_ENABLED) {
|
|
var i = t;
|
|
if (e.webVROptions.trackPosition || (i._disableTrackPosition(new o.x("left" == i.hand ? -.15 : .15, -.5, .25)), e._updateCacheWhenTrackingDisabledObserver || (e._updateCacheWhenTrackingDisabledObserver = e._scene.onBeforeRenderObservable.add(function() {
|
|
e._updateCache()
|
|
}))), i.deviceScaleFactor = e.deviceScaleFactor, i._deviceToWorld.copyFrom(e._deviceToWorld), e._correctPositionIfNotTrackPosition(i._deviceToWorld), e.webVROptions.controllerMeshes && (i.defaultModel ? i.defaultModel.setEnabled(!0) : i.initControllerMesh(e.getScene(), function(t) {
|
|
if (t.scaling.scaleInPlace(e.deviceScaleFactor), e.onControllerMeshLoadedObservable.notifyObservers(i), e.webVROptions.defaultLightingOnControllers) {
|
|
e._lightOnControllers || (e._lightOnControllers = new Ti.a("vrControllersLight", new o.x(0, 1, 0), e.getScene()));
|
|
var n = function(e, t) {
|
|
var i = e.getChildren();
|
|
i && 0 !== i.length && i.forEach(function(e) {
|
|
t.includedOnlyMeshes.push(e), n(e, t)
|
|
})
|
|
};
|
|
e._lightOnControllers.includedOnlyMeshes.push(t), n(t, e._lightOnControllers)
|
|
}
|
|
})), i.attachToPoseControlledCamera(e), -1 === e.controllers.indexOf(i)) {
|
|
e.controllers.push(i);
|
|
for (var n = !1, r = 0; r < e.controllers.length; r++) e.controllers[r].controllerType === St.VIVE && (n ? e.controllers[r].hand = "right" : (n = !0, e.controllers[r].hand = "left"));
|
|
e.controllers.length >= 2 && e.onControllersAttachedObservable.notifyObservers(e.controllers)
|
|
}
|
|
}
|
|
})
|
|
}, t
|
|
}(bt),
|
|
Ai = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this, t) || this;
|
|
return i.onTriggerStateChangedObservable = new r.c, i.onMainButtonStateChangedObservable = new r.c, i.onSecondaryButtonStateChangedObservable = new r.c, i.onPadStateChangedObservable = new r.c, i.onPadValuesChangedObservable = new r.c, i.pad = {
|
|
x: 0,
|
|
y: 0
|
|
}, i._changes = {
|
|
pressChanged: !1,
|
|
touchChanged: !1,
|
|
valueChanged: !1,
|
|
changed: !1
|
|
}, i._buttons = new Array(t.buttons.length), i.hand = t.hand, i
|
|
}
|
|
return l.d(t, e), t.prototype.onButtonStateChange = function(e) {
|
|
this._onButtonStateChange = e
|
|
}, Object.defineProperty(t.prototype, "defaultModel", {
|
|
get: function() {
|
|
return this._defaultModel
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.update = function() {
|
|
e.prototype.update.call(this);
|
|
for (var t = 0; t < this._buttons.length; t++) this._setButtonValue(this.browserGamepad.buttons[t], this._buttons[t], t);
|
|
this.leftStick.x === this.pad.x && this.leftStick.y === this.pad.y || (this.pad.x = this.leftStick.x, this.pad.y = this.leftStick.y, this.onPadValuesChangedObservable.notifyObservers(this.pad))
|
|
}, t.prototype._setButtonValue = function(e, t, i) {
|
|
e || (e = {
|
|
pressed: !1,
|
|
touched: !1,
|
|
value: 0
|
|
}), t ? (this._checkChanges(e, t), this._changes.changed && (this._onButtonStateChange && this._onButtonStateChange(this.index, i, e), this._handleButtonChange(i, e, this._changes)), this._buttons[i].pressed = e.pressed, this._buttons[i].touched = e.touched, this._buttons[i].value = e.value < 1e-8 ? 0 : e.value) : this._buttons[i] = {
|
|
pressed: e.pressed,
|
|
touched: e.touched,
|
|
value: e.value
|
|
}
|
|
}, t.prototype._checkChanges = function(e, t) {
|
|
return this._changes.pressChanged = e.pressed !== t.pressed, this._changes.touchChanged = e.touched !== t.touched, this._changes.valueChanged = e.value !== t.value, this._changes.changed = this._changes.pressChanged || this._changes.touchChanged || this._changes.valueChanged, this._changes
|
|
}, t.prototype.dispose = function() {
|
|
e.prototype.dispose.call(this), this.onTriggerStateChangedObservable.clear(), this.onMainButtonStateChangedObservable.clear(), this.onSecondaryButtonStateChangedObservable.clear(), this.onPadStateChangedObservable.clear(), this.onPadValuesChangedObservable.clear()
|
|
}, t
|
|
}(Ft),
|
|
xi = i(31),
|
|
Ri = i(33),
|
|
Pi = function(e) {
|
|
function t(t, i, n, r, o, s) {
|
|
void 0 === n && (n = null), void 0 === o && (o = _.a.TEXTURE_TRILINEAR_SAMPLINGMODE), void 0 === s && (s = _.a.TEXTUREFORMAT_RGBA);
|
|
var a = e.call(this, null, n, !r, void 0, o, void 0, void 0, void 0, void 0, s) || this;
|
|
a.name = t, a._engine = a.getScene().getEngine(), a.wrapU = ke.a.CLAMP_ADDRESSMODE, a.wrapV = ke.a.CLAMP_ADDRESSMODE, a._generateMipMaps = r, i.getContext ? (a._canvas = i, a._texture = a._engine.createDynamicTexture(i.width, i.height, r, o)) : (a._canvas = document.createElement("canvas"), i.width || 0 === i.width ? a._texture = a._engine.createDynamicTexture(i.width, i.height, r, o) : a._texture = a._engine.createDynamicTexture(i, i, r, o));
|
|
var c = a.getSize();
|
|
return a._canvas.width = c.width, a._canvas.height = c.height, a._context = a._canvas.getContext("2d"), a
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "DynamicTexture"
|
|
}, Object.defineProperty(t.prototype, "canRescale", {
|
|
get: function() {
|
|
return !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._recreate = function(e) {
|
|
this._canvas.width = e.width, this._canvas.height = e.height, this.releaseInternalTexture(), this._texture = this._engine.createDynamicTexture(e.width, e.height, this._generateMipMaps, this.samplingMode)
|
|
}, t.prototype.scale = function(e) {
|
|
var t = this.getSize();
|
|
t.width *= e, t.height *= e, this._recreate(t)
|
|
}, t.prototype.scaleTo = function(e, t) {
|
|
var i = this.getSize();
|
|
i.width = e, i.height = t, this._recreate(i)
|
|
}, t.prototype.getContext = function() {
|
|
return this._context
|
|
}, t.prototype.clear = function() {
|
|
var e = this.getSize();
|
|
this._context.fillRect(0, 0, e.width, e.height)
|
|
}, t.prototype.update = function(e, t) {
|
|
void 0 === t && (t = !1), this._engine.updateDynamicTexture(this._texture, this._canvas, void 0 === e || e, t, this._format || void 0)
|
|
}, t.prototype.drawText = function(e, t, i, n, r, o, s, a) {
|
|
void 0 === a && (a = !0);
|
|
var c = this.getSize();
|
|
if (o && (this._context.fillStyle = o, this._context.fillRect(0, 0, c.width, c.height)), this._context.font = n, null == t) {
|
|
var l = this._context.measureText(e);
|
|
t = (c.width - l.width) / 2
|
|
}
|
|
if (null == i) {
|
|
var u = parseInt(n.replace(/\D/g, ""));
|
|
i = c.height / 2 + u / 3.65
|
|
}
|
|
this._context.fillStyle = r, this._context.fillText(e, t, i), a && this.update(s)
|
|
}, t.prototype.clone = function() {
|
|
var e = this.getScene();
|
|
if (!e) return this;
|
|
var i = this.getSize(),
|
|
n = new t(this.name, i, e, this._generateMipMaps);
|
|
return n.hasAlpha = this.hasAlpha, n.level = this.level, n.wrapU = this.wrapU, n.wrapV = this.wrapV, n
|
|
}, t.prototype.serialize = function() {
|
|
var t = this.getScene();
|
|
t && !t.isReady() && p.a.Warn("The scene must be ready before serializing the dynamic texture");
|
|
var i = e.prototype.serialize.call(this);
|
|
return i.base64String = this._canvas.toDataURL(), i.invertY = this._invertY, i.samplingMode = this.samplingMode, i
|
|
}, t.prototype._rebuild = function() {
|
|
this.update()
|
|
}, t
|
|
}(ke.a),
|
|
Si = (i(86), i(56), i(87), "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\n#include<imageProcessingDeclaration>\n#include<helperFunctions>\n#include<imageProcessingFunctions>\nvoid main(void)\n{\nvec4 result=texture2D(textureSampler,vUV);\n#ifdef IMAGEPROCESSING\n#ifndef FROMLINEARSPACE\n\nresult.rgb=toLinearSpace(result.rgb);\n#endif\nresult=applyImageProcessing(result);\n#else\n\n#ifdef FROMLINEARSPACE\nresult=applyImageProcessing(result);\n#endif\n#endif\ngl_FragColor=result;\n}");
|
|
zt.a.ShadersStore.imageProcessingPixelShader = Si;
|
|
var Ci = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
void 0 === n && (n = null), void 0 === a && (a = _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
var l = e.call(this, t, "imageProcessing", [], [], i, n, r, o, s, null, a, "postprocess", null, !0) || this;
|
|
return l._fromLinearSpace = !0, l._defines = {
|
|
IMAGEPROCESSING: !1,
|
|
VIGNETTE: !1,
|
|
VIGNETTEBLENDMODEMULTIPLY: !1,
|
|
VIGNETTEBLENDMODEOPAQUE: !1,
|
|
TONEMAPPING: !1,
|
|
TONEMAPPING_ACES: !1,
|
|
CONTRAST: !1,
|
|
COLORCURVES: !1,
|
|
COLORGRADING: !1,
|
|
COLORGRADING3D: !1,
|
|
FROMLINEARSPACE: !1,
|
|
SAMPLER3DGREENDEPTH: !1,
|
|
SAMPLER3DBGRMAP: !1,
|
|
IMAGEPROCESSINGPOSTPROCESS: !1,
|
|
EXPOSURE: !1
|
|
}, c ? (c.applyByPostProcess = !0, l._attachImageProcessingConfiguration(c, !0), l.fromLinearSpace = !1) : (l._attachImageProcessingConfiguration(null, !0), l.imageProcessingConfiguration.applyByPostProcess = !0), l.onApply = function(e) {
|
|
l.imageProcessingConfiguration.bind(e, l.aspectRatio)
|
|
}, l
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "imageProcessingConfiguration", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration
|
|
},
|
|
set: function(e) {
|
|
this._attachImageProcessingConfiguration(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._attachImageProcessingConfiguration = function(e, t) {
|
|
var i = this;
|
|
if (void 0 === t && (t = !1), e !== this._imageProcessingConfiguration) {
|
|
if (this._imageProcessingConfiguration && this._imageProcessingObserver && this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver), e) this._imageProcessingConfiguration = e;
|
|
else {
|
|
var n = null,
|
|
r = this.getEngine(),
|
|
o = this.getCamera();
|
|
if (o) n = o.getScene();
|
|
else if (r && r.scenes) {
|
|
var s = r.scenes;
|
|
n = s[s.length - 1]
|
|
} else n = P.a.LastCreatedScene;
|
|
this._imageProcessingConfiguration = n.imageProcessingConfiguration
|
|
}
|
|
this._imageProcessingConfiguration && (this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(function() {
|
|
i._updateParameters()
|
|
})), t || this._updateParameters()
|
|
}
|
|
}, Object.defineProperty(t.prototype, "colorCurves", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorCurves
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorCurves = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "colorCurvesEnabled", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorCurvesEnabled
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorCurvesEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "colorGradingTexture", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorGradingTexture
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorGradingTexture = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "colorGradingEnabled", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorGradingEnabled
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorGradingEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "exposure", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.exposure
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.exposure = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "toneMappingEnabled", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.toneMappingEnabled
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.toneMappingEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "toneMappingType", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.toneMappingType
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.toneMappingType = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "contrast", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.contrast
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.contrast = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "vignetteStretch", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.vignetteStretch
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.vignetteStretch = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "vignetteCentreX", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.vignetteCentreX
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.vignetteCentreX = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "vignetteCentreY", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.vignetteCentreY
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.vignetteCentreY = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "vignetteWeight", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.vignetteWeight
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.vignetteWeight = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "vignetteColor", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.vignetteColor
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.vignetteColor = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "vignetteCameraFov", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.vignetteCameraFov
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.vignetteCameraFov = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "vignetteBlendMode", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.vignetteBlendMode
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.vignetteBlendMode = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "vignetteEnabled", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.vignetteEnabled
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.vignetteEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "fromLinearSpace", {
|
|
get: function() {
|
|
return this._fromLinearSpace
|
|
},
|
|
set: function(e) {
|
|
this._fromLinearSpace !== e && (this._fromLinearSpace = e, this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "ImageProcessingPostProcess"
|
|
}, t.prototype._updateParameters = function() {
|
|
this._defines.FROMLINEARSPACE = this._fromLinearSpace, this.imageProcessingConfiguration.prepareDefines(this._defines, !0);
|
|
var e = "";
|
|
for (var t in this._defines) this._defines[t] && (e += "#define " + t + ";\r\n");
|
|
var i = ["textureSampler"],
|
|
n = ["scale"];
|
|
xi.a && (xi.a.PrepareSamplers(i, this._defines), xi.a.PrepareUniforms(n, this._defines)), this.updateEffect(e, n, i)
|
|
}, t.prototype.dispose = function(t) {
|
|
e.prototype.dispose.call(this, t), this._imageProcessingConfiguration && this._imageProcessingObserver && this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver), this._imageProcessingConfiguration && (this.imageProcessingConfiguration.applyByPostProcess = !1)
|
|
}, l.c([Object(L.c)()], t.prototype, "_fromLinearSpace", void 0), t
|
|
}(Ht),
|
|
Mi = i(13),
|
|
Oi = i(4);
|
|
fe.a._GroundMeshParser = function(e, t) {
|
|
return Ii.Parse(e, t)
|
|
};
|
|
var Ii = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i) || this;
|
|
return n.generateOctree = !1, n
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "GroundMesh"
|
|
}, Object.defineProperty(t.prototype, "subdivisions", {
|
|
get: function() {
|
|
return Math.min(this._subdivisionsX, this._subdivisionsY)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "subdivisionsX", {
|
|
get: function() {
|
|
return this._subdivisionsX
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "subdivisionsY", {
|
|
get: function() {
|
|
return this._subdivisionsY
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.optimize = function(e, t) {
|
|
void 0 === t && (t = 32), this._subdivisionsX = e, this._subdivisionsY = e, this.subdivide(e);
|
|
this.createOrUpdateSubmeshesOctree && this.createOrUpdateSubmeshesOctree(t)
|
|
}, t.prototype.getHeightAtCoordinates = function(e, t) {
|
|
var i = this.getWorldMatrix(),
|
|
n = o.t.Matrix[5];
|
|
i.invertToRef(n);
|
|
var r = o.t.Vector3[8];
|
|
if (o.x.TransformCoordinatesFromFloatsToRef(e, 0, t, n, r), e = r.x, t = r.z, e < this._minX || e > this._maxX || t < this._minZ || t > this._maxZ) return this.position.y;
|
|
this._heightQuads && 0 != this._heightQuads.length || (this._initHeightQuads(), this._computeHeightQuads());
|
|
var s = this._getFacetAt(e, t),
|
|
a = -(s.x * e + s.z * t + s.w) / s.y;
|
|
return o.x.TransformCoordinatesFromFloatsToRef(0, a, 0, i, r), r.y
|
|
}, t.prototype.getNormalAtCoordinates = function(e, t) {
|
|
var i = new o.x(0, 1, 0);
|
|
return this.getNormalAtCoordinatesToRef(e, t, i), i
|
|
}, t.prototype.getNormalAtCoordinatesToRef = function(e, t, i) {
|
|
var n = this.getWorldMatrix(),
|
|
r = o.t.Matrix[5];
|
|
n.invertToRef(r);
|
|
var s = o.t.Vector3[8];
|
|
if (o.x.TransformCoordinatesFromFloatsToRef(e, 0, t, r, s), e = s.x, t = s.z, e < this._minX || e > this._maxX || t < this._minZ || t > this._maxZ) return this;
|
|
this._heightQuads && 0 != this._heightQuads.length || (this._initHeightQuads(), this._computeHeightQuads());
|
|
var a = this._getFacetAt(e, t);
|
|
return o.x.TransformNormalFromFloatsToRef(a.x, a.y, a.z, n, i), this
|
|
}, t.prototype.updateCoordinateHeights = function() {
|
|
return this._heightQuads && 0 != this._heightQuads.length || this._initHeightQuads(), this._computeHeightQuads(), this
|
|
}, t.prototype._getFacetAt = function(e, t) {
|
|
var i = Math.floor((e + this._maxX) * this._subdivisionsX / this._width),
|
|
n = Math.floor(-(t + this._maxZ) * this._subdivisionsY / this._height + this._subdivisionsY),
|
|
r = this._heightQuads[n * this._subdivisionsX + i];
|
|
return t < r.slope.x * e + r.slope.y ? r.facet1 : r.facet2
|
|
}, t.prototype._initHeightQuads = function() {
|
|
var e = this._subdivisionsX,
|
|
t = this._subdivisionsY;
|
|
this._heightQuads = new Array;
|
|
for (var i = 0; i < t; i++)
|
|
for (var n = 0; n < e; n++) {
|
|
var r = {
|
|
slope: o.w.Zero(),
|
|
facet1: new o.y(0, 0, 0, 0),
|
|
facet2: new o.y(0, 0, 0, 0)
|
|
};
|
|
this._heightQuads[i * e + n] = r
|
|
}
|
|
return this
|
|
}, t.prototype._computeHeightQuads = function() {
|
|
var e = this.getVerticesData(Oi.b.PositionKind);
|
|
if (!e) return this;
|
|
for (var t = o.t.Vector3[3], i = o.t.Vector3[2], n = o.t.Vector3[1], r = o.t.Vector3[0], s = o.t.Vector3[4], a = o.t.Vector3[5], c = o.t.Vector3[6], l = o.t.Vector3[7], u = o.t.Vector3[8], h = 0, d = 0, f = 0, p = 0, _ = 0, g = 0, m = 0, v = this._subdivisionsX, y = this._subdivisionsY, b = 0; b < y; b++)
|
|
for (var T = 0; T < v; T++) {
|
|
h = 3 * T, d = b * (v + 1) * 3, f = (b + 1) * (v + 1) * 3, t.x = e[d + h], t.y = e[d + h + 1], t.z = e[d + h + 2], i.x = e[d + h + 3], i.y = e[d + h + 4], i.z = e[d + h + 5], n.x = e[f + h], n.y = e[f + h + 1], n.z = e[f + h + 2], r.x = e[f + h + 3], r.y = e[f + h + 4], r.z = e[f + h + 5], p = (r.z - t.z) / (r.x - t.x), _ = t.z - p * t.x, i.subtractToRef(t, s), n.subtractToRef(t, a), r.subtractToRef(t, c), o.x.CrossToRef(c, a, l), o.x.CrossToRef(s, c, u), l.normalize(), u.normalize(), g = -(l.x * t.x + l.y * t.y + l.z * t.z), m = -(u.x * i.x + u.y * i.y + u.z * i.z);
|
|
var E = this._heightQuads[b * v + T];
|
|
E.slope.copyFromFloats(p, _), E.facet1.copyFromFloats(l.x, l.y, l.z, g), E.facet2.copyFromFloats(u.x, u.y, u.z, m)
|
|
}
|
|
return this
|
|
}, t.prototype.serialize = function(t) {
|
|
e.prototype.serialize.call(this, t), t.subdivisionsX = this._subdivisionsX, t.subdivisionsY = this._subdivisionsY, t.minX = this._minX, t.maxX = this._maxX, t.minZ = this._minZ, t.maxZ = this._maxZ, t.width = this._width, t.height = this._height
|
|
}, t.Parse = function(e, i) {
|
|
var n = new t(e.name, i);
|
|
return n._subdivisionsX = e.subdivisionsX || 1, n._subdivisionsY = e.subdivisionsY || 1, n._minX = e.minX, n._maxX = e.maxX, n._minZ = e.minZ, n._maxZ = e.maxZ, n._width = e.width, n._height = e.height, n
|
|
}, t
|
|
}(fe.a);
|
|
Mi.a.CreateGround = function(e) {
|
|
var t, i, n = [],
|
|
r = [],
|
|
s = [],
|
|
a = [],
|
|
c = e.width || 1,
|
|
l = e.height || 1,
|
|
u = e.subdivisionsX || e.subdivisions || 1,
|
|
h = e.subdivisionsY || e.subdivisions || 1;
|
|
for (t = 0; t <= h; t++)
|
|
for (i = 0; i <= u; i++) {
|
|
var d = new o.x(i * c / u - c / 2, 0, (h - t) * l / h - l / 2),
|
|
f = new o.x(0, 1, 0);
|
|
r.push(d.x, d.y, d.z), s.push(f.x, f.y, f.z), a.push(i / u, 1 - t / h)
|
|
}
|
|
for (t = 0; t < h; t++)
|
|
for (i = 0; i < u; i++) n.push(i + 1 + (t + 1) * (u + 1)), n.push(i + 1 + t * (u + 1)), n.push(i + t * (u + 1)), n.push(i + (t + 1) * (u + 1)), n.push(i + 1 + (t + 1) * (u + 1)), n.push(i + t * (u + 1));
|
|
var p = new Mi.a;
|
|
return p.indices = n, p.positions = r, p.normals = s, p.uvs = a, p
|
|
}, Mi.a.CreateTiledGround = function(e) {
|
|
var t, i, n, r, s = void 0 !== e.xmin && null !== e.xmin ? e.xmin : -1,
|
|
a = void 0 !== e.zmin && null !== e.zmin ? e.zmin : -1,
|
|
c = void 0 !== e.xmax && null !== e.xmax ? e.xmax : 1,
|
|
l = void 0 !== e.zmax && null !== e.zmax ? e.zmax : 1,
|
|
u = e.subdivisions || {
|
|
w: 1,
|
|
h: 1
|
|
},
|
|
h = e.precision || {
|
|
w: 1,
|
|
h: 1
|
|
},
|
|
d = new Array,
|
|
f = new Array,
|
|
p = new Array,
|
|
_ = new Array;
|
|
u.h = u.h < 1 ? 1 : u.h, u.w = u.w < 1 ? 1 : u.w, h.w = h.w < 1 ? 1 : h.w, h.h = h.h < 1 ? 1 : h.h;
|
|
var g = (c - s) / u.w,
|
|
m = (l - a) / u.h;
|
|
|
|
function v(e, n, r, s) {
|
|
var a = f.length / 3,
|
|
c = h.w + 1;
|
|
for (t = 0; t < h.h; t++)
|
|
for (i = 0; i < h.w; i++) {
|
|
var l = [a + i + t * c, a + (i + 1) + t * c, a + (i + 1) + (t + 1) * c, a + i + (t + 1) * c];
|
|
d.push(l[1]), d.push(l[2]), d.push(l[3]), d.push(l[0]), d.push(l[1]), d.push(l[3])
|
|
}
|
|
var u = o.x.Zero(),
|
|
g = new o.x(0, 1, 0);
|
|
for (t = 0; t <= h.h; t++)
|
|
for (u.z = t * (s - n) / h.h + n, i = 0; i <= h.w; i++) u.x = i * (r - e) / h.w + e, u.y = 0, f.push(u.x, u.y, u.z), p.push(g.x, g.y, g.z), _.push(i / h.w, t / h.h)
|
|
}
|
|
for (n = 0; n < u.h; n++)
|
|
for (r = 0; r < u.w; r++) v(s + r * g, a + n * m, s + (r + 1) * g, a + (n + 1) * m);
|
|
var y = new Mi.a;
|
|
return y.indices = d, y.positions = f, y.normals = p, y.uvs = _, y
|
|
}, Mi.a.CreateGroundFromHeightMap = function(e) {
|
|
var t, i, n = [],
|
|
r = [],
|
|
s = [],
|
|
a = [],
|
|
c = e.colorFilter || new o.e(.3, .59, .11),
|
|
l = e.alphaFilter || 0,
|
|
u = !1;
|
|
if (e.minHeight > e.maxHeight) {
|
|
u = !0;
|
|
var h = e.maxHeight;
|
|
e.maxHeight = e.minHeight, e.minHeight = h
|
|
}
|
|
for (t = 0; t <= e.subdivisions; t++)
|
|
for (i = 0; i <= e.subdivisions; i++) {
|
|
var d = new o.x(i * e.width / e.subdivisions - e.width / 2, 0, (e.subdivisions - t) * e.height / e.subdivisions - e.height / 2),
|
|
f = 4 * (((d.x + e.width / 2) / e.width * (e.bufferWidth - 1) | 0) + ((1 - (d.z + e.height / 2) / e.height) * (e.bufferHeight - 1) | 0) * e.bufferWidth),
|
|
p = e.buffer[f] / 255,
|
|
_ = e.buffer[f + 1] / 255,
|
|
g = e.buffer[f + 2] / 255,
|
|
m = e.buffer[f + 3] / 255;
|
|
u && (p = 1 - p, _ = 1 - _, g = 1 - g);
|
|
var v = p * c.r + _ * c.g + g * c.b;
|
|
d.y = m >= l ? e.minHeight + (e.maxHeight - e.minHeight) * v : e.minHeight - o.h, r.push(d.x, d.y, d.z), s.push(0, 0, 0), a.push(i / e.subdivisions, 1 - t / e.subdivisions)
|
|
}
|
|
for (t = 0; t < e.subdivisions; t++)
|
|
for (i = 0; i < e.subdivisions; i++) {
|
|
var y = i + 1 + (t + 1) * (e.subdivisions + 1),
|
|
b = i + 1 + t * (e.subdivisions + 1),
|
|
T = i + t * (e.subdivisions + 1),
|
|
E = i + (t + 1) * (e.subdivisions + 1),
|
|
A = r[3 * y + 1] >= e.minHeight,
|
|
x = r[3 * b + 1] >= e.minHeight,
|
|
R = r[3 * T + 1] >= e.minHeight;
|
|
A && x && R && (n.push(y), n.push(b), n.push(T)), r[3 * E + 1] >= e.minHeight && A && R && (n.push(E), n.push(y), n.push(T))
|
|
}
|
|
Mi.a.ComputeNormals(r, n, s);
|
|
var P = new Mi.a;
|
|
return P.indices = n, P.positions = r, P.normals = s, P.uvs = a, P
|
|
}, fe.a.CreateGround = function(e, t, i, n, r, o) {
|
|
var s = {
|
|
width: t,
|
|
height: i,
|
|
subdivisions: n,
|
|
updatable: o
|
|
};
|
|
return Di.CreateGround(e, s, r)
|
|
}, fe.a.CreateTiledGround = function(e, t, i, n, r, o, s, a, c) {
|
|
var l = {
|
|
xmin: t,
|
|
zmin: i,
|
|
xmax: n,
|
|
zmax: r,
|
|
subdivisions: o,
|
|
precision: s,
|
|
updatable: c
|
|
};
|
|
return Di.CreateTiledGround(e, l, a)
|
|
}, fe.a.CreateGroundFromHeightMap = function(e, t, i, n, r, o, s, a, c, l, u) {
|
|
var h = {
|
|
width: i,
|
|
height: n,
|
|
subdivisions: r,
|
|
minHeight: o,
|
|
maxHeight: s,
|
|
updatable: c,
|
|
onReady: l,
|
|
alphaFilter: u
|
|
};
|
|
return Di.CreateGroundFromHeightMap(e, t, h, a)
|
|
};
|
|
var Di = function() {
|
|
function e() {}
|
|
return e.CreateGround = function(e, t, i) {
|
|
var n = new Ii(e, i);
|
|
return n._setReady(!1), n._subdivisionsX = t.subdivisionsX || t.subdivisions || 1, n._subdivisionsY = t.subdivisionsY || t.subdivisions || 1, n._width = t.width || 1, n._height = t.height || 1, n._maxX = n._width / 2, n._maxZ = n._height / 2, n._minX = -n._maxX, n._minZ = -n._maxZ, Mi.a.CreateGround(t).applyToMesh(n, t.updatable), n._setReady(!0), n
|
|
}, e.CreateTiledGround = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n = new fe.a(e, i);
|
|
return Mi.a.CreateTiledGround(t).applyToMesh(n, t.updatable), n
|
|
}, e.CreateGroundFromHeightMap = function(e, t, i, n) {
|
|
void 0 === n && (n = null);
|
|
var r = i.width || 10,
|
|
s = i.height || 10,
|
|
a = i.subdivisions || 1,
|
|
c = i.minHeight || 0,
|
|
l = i.maxHeight || 1,
|
|
u = i.colorFilter || new o.e(.3, .59, .11),
|
|
h = i.alphaFilter || 0,
|
|
d = i.updatable,
|
|
f = i.onReady;
|
|
n = n || P.a.LastCreatedScene;
|
|
var p = new Ii(e, n);
|
|
p._subdivisionsX = a, p._subdivisionsY = a, p._width = r, p._height = s, p._maxX = p._width / 2, p._maxZ = p._height / 2, p._minX = -p._maxX, p._minZ = -p._maxZ, p._setReady(!1);
|
|
return ye.h.LoadImage(t, function(e) {
|
|
var t = document.createElement("canvas"),
|
|
i = t.getContext("2d");
|
|
if (!i) throw new Error("Unable to get 2d context for CreateGroundFromHeightMap");
|
|
if (!n.isDisposed) {
|
|
var o = e.width,
|
|
_ = e.height;
|
|
t.width = o, t.height = _, i.drawImage(e, 0, 0);
|
|
var g = i.getImageData(0, 0, o, _).data;
|
|
Mi.a.CreateGroundFromHeightMap({
|
|
width: r,
|
|
height: s,
|
|
subdivisions: a,
|
|
minHeight: c,
|
|
maxHeight: l,
|
|
colorFilter: u,
|
|
buffer: g,
|
|
bufferWidth: o,
|
|
bufferHeight: _,
|
|
alphaFilter: h
|
|
}).applyToMesh(p, d), f && f(p), p._setReady(!0)
|
|
}
|
|
}, function() {}, n.offlineProvider), p
|
|
}, e
|
|
}();
|
|
Mi.a.CreateTorus = function(e) {
|
|
for (var t = [], i = [], n = [], r = [], s = e.diameter || 1, a = e.thickness || .5, c = e.tessellation || 16, l = 0 === e.sideOrientation ? 0 : e.sideOrientation || Mi.a.DEFAULTSIDE, u = c + 1, h = 0; h <= c; h++)
|
|
for (var d = h / c, f = h * Math.PI * 2 / c - Math.PI / 2, p = o.j.Translation(s / 2, 0, 0).multiply(o.j.RotationY(f)), _ = 0; _ <= c; _++) {
|
|
var g = 1 - _ / c,
|
|
m = _ * Math.PI * 2 / c + Math.PI,
|
|
v = Math.cos(m),
|
|
y = Math.sin(m),
|
|
b = new o.x(v, y, 0),
|
|
T = b.scale(a / 2),
|
|
E = new o.w(d, g);
|
|
T = o.x.TransformCoordinates(T, p), b = o.x.TransformNormal(b, p), i.push(T.x, T.y, T.z), n.push(b.x, b.y, b.z), r.push(E.x, E.y);
|
|
var A = (h + 1) % u,
|
|
x = (_ + 1) % u;
|
|
t.push(h * u + _), t.push(h * u + x), t.push(A * u + _), t.push(h * u + x), t.push(A * u + x), t.push(A * u + _)
|
|
}
|
|
Mi.a._ComputeSides(l, i, t, n, r, e.frontUVs, e.backUVs);
|
|
var R = new Mi.a;
|
|
return R.indices = t, R.positions = i, R.normals = n, R.uvs = r, R
|
|
}, fe.a.CreateTorus = function(e, t, i, n, r, o, s) {
|
|
var a = {
|
|
diameter: t,
|
|
thickness: i,
|
|
tessellation: n,
|
|
sideOrientation: s,
|
|
updatable: o
|
|
};
|
|
return wi.CreateTorus(e, a, r)
|
|
};
|
|
var Li, wi = function() {
|
|
function e() {}
|
|
return e.CreateTorus = function(e, t, i) {
|
|
var n = new fe.a(e, i);
|
|
return t.sideOrientation = fe.a._GetDefaultSideOrientation(t.sideOrientation), n._originalBuilderSideOrientation = t.sideOrientation, Mi.a.CreateTorus(t).applyToMesh(n, t.updatable), n
|
|
}, e
|
|
}(),
|
|
Fi = i(53),
|
|
Ni = function() {
|
|
function e(t, i) {
|
|
if (void 0 === i && (i = null), this.scene = t, this._pointerDownOnMeshAsked = !1, this._isActionableMesh = !1, this._teleportationRequestInitiated = !1, this._teleportationBackRequestInitiated = !1, this._rotationRightAsked = !1, this._rotationLeftAsked = !1, this._dpadPressed = !0, this._activePointer = !1, this._id = e._idCounter++, i) this._gazeTracker = i.clone("gazeTracker");
|
|
else {
|
|
this._gazeTracker = fe.a.CreateTorus("gazeTracker", .0035, .0025, 20, t, !1), this._gazeTracker.bakeCurrentTransformIntoVertices(), this._gazeTracker.isPickable = !1, this._gazeTracker.isVisible = !1;
|
|
var n = new Ri.a("targetMat", t);
|
|
n.specularColor = o.e.Black(), n.emissiveColor = new o.e(.7, .7, .7), n.backFaceCulling = !1, this._gazeTracker.material = n
|
|
}
|
|
}
|
|
return e.prototype._getForwardRay = function(e) {
|
|
return new It.a(o.x.Zero(), new o.x(0, 0, e))
|
|
}, e.prototype._selectionPointerDown = function() {
|
|
this._pointerDownOnMeshAsked = !0, this._currentHit && this.scene.simulatePointerDown(this._currentHit, {
|
|
pointerId: this._id
|
|
})
|
|
}, e.prototype._selectionPointerUp = function() {
|
|
this._currentHit && this.scene.simulatePointerUp(this._currentHit, {
|
|
pointerId: this._id
|
|
}), this._pointerDownOnMeshAsked = !1
|
|
}, e.prototype._activatePointer = function() {
|
|
this._activePointer = !0
|
|
}, e.prototype._deactivatePointer = function() {
|
|
this._activePointer = !1
|
|
}, e.prototype._updatePointerDistance = function(e) {
|
|
void 0 === e && (e = 100)
|
|
}, e.prototype.dispose = function() {
|
|
this._interactionsEnabled = !1, this._teleportationEnabled = !1, this._gazeTracker && this._gazeTracker.dispose()
|
|
}, e._idCounter = 0, e
|
|
}(),
|
|
Bi = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, i, n) || this;
|
|
r.webVRController = t, r._laserPointer = fe.a.CreateCylinder("laserPointer", 1, .004, 2e-4, 20, 1, i, !1);
|
|
var s = new Ri.a("laserPointerMat", i);
|
|
if (s.emissiveColor = new o.e(.7, .7, .7), s.alpha = .6, r._laserPointer.material = s, r._laserPointer.rotation.x = Math.PI / 2, r._laserPointer.position.z = -.5, r._laserPointer.isVisible = !1, r._laserPointer.isPickable = !1, !t.mesh) {
|
|
var a = new fe.a("preloadControllerMesh", i),
|
|
c = new fe.a(Ft.POINTING_POSE, i);
|
|
c.rotation.x = -.7, a.addChild(c), t.attachToMesh(a)
|
|
}
|
|
return r._setLaserPointerParent(t.mesh), r._meshAttachedObserver = t._meshAttachedObservable.add(function(e) {
|
|
r._setLaserPointerParent(e)
|
|
}), r
|
|
}
|
|
return l.d(t, e), t.prototype._getForwardRay = function(e) {
|
|
return this.webVRController.getForwardRay(e)
|
|
}, t.prototype._activatePointer = function() {
|
|
e.prototype._activatePointer.call(this), this._laserPointer.isVisible = !0
|
|
}, t.prototype._deactivatePointer = function() {
|
|
e.prototype._deactivatePointer.call(this), this._laserPointer.isVisible = !1
|
|
}, t.prototype._setLaserPointerColor = function(e) {
|
|
this._laserPointer.material.emissiveColor = e
|
|
}, t.prototype._setLaserPointerParent = function(e) {
|
|
var t = function(e) {
|
|
e.isPickable = !1, e.getChildMeshes().forEach(function(e) {
|
|
t(e)
|
|
})
|
|
};
|
|
t(e);
|
|
var i = e.getChildren(void 0, !1),
|
|
n = e;
|
|
this.webVRController._pointingPoseNode = null;
|
|
for (var r = 0; r < i.length; r++)
|
|
if (i[r].name && i[r].name.indexOf(Ft.POINTING_POSE) >= 0) {
|
|
n = i[r], this.webVRController._pointingPoseNode = n;
|
|
break
|
|
} this._laserPointer.parent = n
|
|
}, t.prototype._updatePointerDistance = function(e) {
|
|
void 0 === e && (e = 100), this._laserPointer.scaling.y = e, this._laserPointer.position.z = -e / 2
|
|
}, t.prototype.dispose = function() {
|
|
e.prototype.dispose.call(this), this._laserPointer.dispose(), this._meshAttachedObserver && this.webVRController._meshAttachedObservable.remove(this._meshAttachedObserver)
|
|
}, t
|
|
}(Ni),
|
|
Ui = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, i) || this;
|
|
return n.getCamera = t, n
|
|
}
|
|
return l.d(t, e), t.prototype._getForwardRay = function(e) {
|
|
var t = this.getCamera();
|
|
return t ? t.getForwardRay(e) : new It.a(o.x.Zero(), o.x.Forward())
|
|
}, t
|
|
}(Ni),
|
|
Vi = function() {
|
|
return function() {}
|
|
}(),
|
|
Gi = function() {
|
|
function e(e, t) {
|
|
var i = this;
|
|
if (void 0 === t && (t = {}), this.webVROptions = t, this._webVRsupported = !1, this._webVRready = !1, this._webVRrequesting = !1, this._webVRpresenting = !1, this._fullscreenVRpresenting = !1, this.onEnteringVRObservable = new r.c, this.onAfterEnteringVRObservable = new r.c, this.onExitingVRObservable = new r.c, this.onControllerMeshLoadedObservable = new r.c, this._useCustomVRButton = !1, this._teleportationRequested = !1, this._teleportActive = !1, this._floorMeshesCollection = [], this._rotationAllowed = !0, this._teleportBackwardsVector = new o.x(0, -1, -1), this._isDefaultTeleportationTarget = !0, this._teleportationFillColor = "#444444", this._teleportationBorderColor = "#FFFFFF", this._rotationAngle = 0, this._haloCenter = new o.x(0, 0, 0), this._padSensibilityUp = .65, this._padSensibilityDown = .35, this._leftController = null, this._rightController = null, this.onNewMeshSelected = new r.c, this.onNewMeshPicked = new r.c, this.onBeforeCameraTeleport = new r.c, this.onAfterCameraTeleport = new r.c, this.onSelectedMeshUnselected = new r.c, this.teleportationEnabled = !0, this._teleportationInitialized = !1, this._interactionsEnabled = !1, this._interactionsRequested = !1, this._displayGaze = !0, this._displayLaserPointer = !0, this.updateGazeTrackerScale = !0, this.updateGazeTrackerColor = !0, this.requestPointerLockOnFullScreen = !0, this._onResize = function() {
|
|
i.moveButtonToBottomRight(), i._fullscreenVRpresenting && i._webVRready && i.exitVR()
|
|
}, this._onFullscreenChange = function() {
|
|
var e = document;
|
|
void 0 !== e.fullscreen ? i._fullscreenVRpresenting = document.fullscreen : void 0 !== e.mozFullScreen ? i._fullscreenVRpresenting = e.mozFullScreen : void 0 !== e.webkitIsFullScreen ? i._fullscreenVRpresenting = e.webkitIsFullScreen : void 0 !== e.msIsFullScreen ? i._fullscreenVRpresenting = e.msIsFullScreen : void 0 !== document.msFullscreenElement && (i._fullscreenVRpresenting = document.msFullscreenElement), !i._fullscreenVRpresenting && i._canvas && (i.exitVR(), i._useCustomVRButton || (i._btnVR.style.top = i._canvas.offsetTop + i._canvas.offsetHeight - 70 + "px", i._btnVR.style.left = i._canvas.offsetLeft + i._canvas.offsetWidth - 100 + "px"))
|
|
}, this._cachedAngularSensibility = {
|
|
angularSensibilityX: null,
|
|
angularSensibilityY: null,
|
|
angularSensibility: null
|
|
}, this.beforeRender = function() {
|
|
i._leftController && i._leftController._activePointer && i._castRayAndSelectObject(i._leftController), i._rightController && i._rightController._activePointer && i._castRayAndSelectObject(i._rightController), i._noControllerIsActive ? i._castRayAndSelectObject(i._cameraGazer) : i._cameraGazer._gazeTracker.isVisible = !1
|
|
}, this._onNewGamepadConnected = function(e) {
|
|
if (e.type !== Ke.POSE_ENABLED) e.leftStick && e.onleftstickchanged(function(e) {
|
|
i._teleportationInitialized && i.teleportationEnabled && (!i._leftController && !i._rightController || i._leftController && !i._leftController._activePointer && i._rightController && !i._rightController._activePointer) && (i._checkTeleportWithRay(e, i._cameraGazer), i._checkTeleportBackwards(e, i._cameraGazer))
|
|
}), e.rightStick && e.onrightstickchanged(function(e) {
|
|
i._teleportationInitialized && i._checkRotate(e, i._cameraGazer)
|
|
}), e.type === Ke.XBOX && (e.onbuttondown(function(e) {
|
|
i._interactionsEnabled && e === Dt.A && i._cameraGazer._selectionPointerDown()
|
|
}), e.onbuttonup(function(e) {
|
|
i._interactionsEnabled && e === Dt.A && i._cameraGazer._selectionPointerUp()
|
|
}));
|
|
else {
|
|
var t = e,
|
|
n = new Bi(t, i._scene, i._cameraGazer._gazeTracker);
|
|
"right" === t.hand || i._leftController && i._leftController.webVRController != t ? i._rightController = n : i._leftController = n, i._tryEnableInteractionOnController(n)
|
|
}
|
|
}, this._tryEnableInteractionOnController = function(e) {
|
|
i._interactionsRequested && !e._interactionsEnabled && i._enableInteractionOnController(e), i._teleportationRequested && !e._teleportationEnabled && i._enableTeleportationOnController(e)
|
|
}, this._onNewGamepadDisconnected = function(e) {
|
|
e instanceof Ai && ("left" === e.hand && null != i._leftController && (i._leftController.dispose(), i._leftController = null), "right" === e.hand && null != i._rightController && (i._rightController.dispose(), i._rightController = null))
|
|
}, this._workingVector = o.x.Zero(), this._workingQuaternion = o.q.Identity(), this._workingMatrix = o.j.Identity(), this._scene = e, this._canvas = e.getEngine().getRenderingCanvas(), void 0 === t.createFallbackVRDeviceOrientationFreeCamera && (t.createFallbackVRDeviceOrientationFreeCamera = !0), void 0 === t.createDeviceOrientationCamera && (t.createDeviceOrientationCamera = !0), void 0 === t.laserToggle && (t.laserToggle = !0), void 0 === t.defaultHeight && (t.defaultHeight = 1.7), t.useCustomVRButton && (this._useCustomVRButton = !0, t.customVRButton && (this._btnVR = t.customVRButton)), t.rayLength && (this._rayLength = t.rayLength), this._defaultHeight = t.defaultHeight, t.positionScale && (this._rayLength *= t.positionScale, this._defaultHeight *= t.positionScale), this._hasEnteredVR = !1, this._scene.activeCamera ? this._position = this._scene.activeCamera.position.clone() : this._position = new o.x(0, this._defaultHeight, 0), t.createDeviceOrientationCamera || !this._scene.activeCamera) {
|
|
if (this._deviceOrientationCamera = new At("deviceOrientationVRHelper", this._position.clone(), e), this._scene.activeCamera && (this._deviceOrientationCamera.minZ = this._scene.activeCamera.minZ, this._deviceOrientationCamera.maxZ = this._scene.activeCamera.maxZ, this._scene.activeCamera instanceof yt && this._scene.activeCamera.rotation)) {
|
|
var n = this._scene.activeCamera;
|
|
n.rotationQuaternion ? this._deviceOrientationCamera.rotationQuaternion.copyFrom(n.rotationQuaternion) : this._deviceOrientationCamera.rotationQuaternion.copyFrom(o.q.RotationYawPitchRoll(n.rotation.y, n.rotation.x, n.rotation.z)), this._deviceOrientationCamera.rotation = n.rotation.clone()
|
|
}
|
|
this._scene.activeCamera = this._deviceOrientationCamera, this._canvas && this._scene.activeCamera.attachControl(this._canvas)
|
|
} else this._existingCamera = this._scene.activeCamera;
|
|
if (t.createFallbackVRDeviceOrientationFreeCamera && (t.useMultiview && (t.vrDeviceOrientationCameraMetrics || (t.vrDeviceOrientationCameraMetrics = ci.GetDefault()), t.vrDeviceOrientationCameraMetrics.multiviewEnabled = !0), this._vrDeviceOrientationCamera = new yi("VRDeviceOrientationVRHelper", this._position, this._scene, !0, t.vrDeviceOrientationCameraMetrics), this._vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE), this._webVRCamera = new Ei("WebVRHelper", this._position, this._scene, t), this._webVRCamera.useStandingMatrix(), this._cameraGazer = new Ui(function() {
|
|
return i.currentVRCamera
|
|
}, e), !this._useCustomVRButton) {
|
|
this._btnVR = document.createElement("BUTTON"), this._btnVR.className = "babylonVRicon", this._btnVR.id = "babylonVRiconbtn", this._btnVR.title = "Click to switch to VR";
|
|
".babylonVRicon.vrdisplaypresenting { display: none; }";
|
|
var s = document.createElement("style");
|
|
s.appendChild(document.createTextNode(".babylonVRicon { position: absolute; right: 20px; height: 50px; width: 80px; background-color: rgba(51,51,51,0.7); background-image: url(data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%222048%22%20height%3D%221152%22%20viewBox%3D%220%200%202048%201152%22%20version%3D%221.1%22%3E%3Cpath%20transform%3D%22rotate%28180%201024%2C576.0000000000001%29%22%20d%3D%22m1109%2C896q17%2C0%2030%2C-12t13%2C-30t-12.5%2C-30.5t-30.5%2C-12.5l-170%2C0q-18%2C0%20-30.5%2C12.5t-12.5%2C30.5t13%2C30t30%2C12l170%2C0zm-85%2C256q59%2C0%20132.5%2C-1.5t154.5%2C-5.5t164.5%2C-11.5t163%2C-20t150%2C-30t124.5%2C-41.5q23%2C-11%2042%2C-24t38%2C-30q27%2C-25%2041%2C-61.5t14%2C-72.5l0%2C-257q0%2C-123%20-47%2C-232t-128%2C-190t-190%2C-128t-232%2C-47l-81%2C0q-37%2C0%20-68.5%2C14t-60.5%2C34.5t-55.5%2C45t-53%2C45t-53%2C34.5t-55.5%2C14t-55.5%2C-14t-53%2C-34.5t-53%2C-45t-55.5%2C-45t-60.5%2C-34.5t-68.5%2C-14l-81%2C0q-123%2C0%20-232%2C47t-190%2C128t-128%2C190t-47%2C232l0%2C257q0%2C68%2038%2C115t97%2C73q54%2C24%20124.5%2C41.5t150%2C30t163%2C20t164.5%2C11.5t154.5%2C5.5t132.5%2C1.5zm939%2C-298q0%2C39%20-24.5%2C67t-58.5%2C42q-54%2C23%20-122%2C39.5t-143.5%2C28t-155.5%2C19t-157%2C11t-148.5%2C5t-129.5%2C1.5q-59%2C0%20-130%2C-1.5t-148%2C-5t-157%2C-11t-155.5%2C-19t-143.5%2C-28t-122%2C-39.5q-34%2C-14%20-58.5%2C-42t-24.5%2C-67l0%2C-257q0%2C-106%2040.5%2C-199t110%2C-162.5t162.5%2C-109.5t199%2C-40l81%2C0q27%2C0%2052%2C14t50%2C34.5t51%2C44.5t55.5%2C44.5t63.5%2C34.5t74%2C14t74%2C-14t63.5%2C-34.5t55.5%2C-44.5t51%2C-44.5t50%2C-34.5t52%2C-14l14%2C0q37%2C0%2070%2C0.5t64.5%2C4.5t63.5%2C12t68%2C23q71%2C30%20128.5%2C78.5t98.5%2C110t63.5%2C133.5t22.5%2C149l0%2C257z%22%20fill%3D%22white%22%20/%3E%3C/svg%3E%0A); background-size: 80%; background-repeat:no-repeat; background-position: center; border: none; outline: none; transition: transform 0.125s ease-out } .babylonVRicon:hover { transform: scale(1.05) } .babylonVRicon:active {background-color: rgba(51,51,51,1) } .babylonVRicon:focus {background-color: rgba(51,51,51,1) }.babylonVRicon.vrdisplaypresenting { display: none; }")), document.getElementsByTagName("head")[0].appendChild(s), this.moveButtonToBottomRight()
|
|
}
|
|
this._btnVR && this._btnVR.addEventListener("click", function() {
|
|
i.isInVRMode ? i.exitVR() : i.enterVR()
|
|
}), window.addEventListener("resize", this._onResize), document.addEventListener("fullscreenchange", this._onFullscreenChange, !1), document.addEventListener("mozfullscreenchange", this._onFullscreenChange, !1), document.addEventListener("webkitfullscreenchange", this._onFullscreenChange, !1), document.addEventListener("msfullscreenchange", this._onFullscreenChange, !1), document.onmsfullscreenchange = this._onFullscreenChange, t.createFallbackVRDeviceOrientationFreeCamera ? this.displayVRButton() : this._scene.getEngine().onVRDisplayChangedObservable.add(function(e) {
|
|
e.vrDisplay && i.displayVRButton()
|
|
}), this._onKeyDown = function(e) {
|
|
27 === e.keyCode && i.isInVRMode && i.exitVR()
|
|
}, document.addEventListener("keydown", this._onKeyDown), this._scene.onPrePointerObservable.add(function() {
|
|
i.isInVRMode && (i.exitVR(), i._fullscreenVRpresenting && i._scene.getEngine().exitFullscreen())
|
|
}, Pe.a.POINTERDOUBLETAP, !1), this._onVRDisplayChanged = function(e) {
|
|
return i.onVRDisplayChanged(e)
|
|
}, this._onVrDisplayPresentChange = function() {
|
|
return i.onVrDisplayPresentChange()
|
|
}, this._onVRRequestPresentStart = function() {
|
|
i._webVRrequesting = !0, i.updateButtonVisibility()
|
|
}, this._onVRRequestPresentComplete = function() {
|
|
i._webVRrequesting = !1, i.updateButtonVisibility()
|
|
}, e.getEngine().onVRDisplayChangedObservable.add(this._onVRDisplayChanged), e.getEngine().onVRRequestPresentStart.add(this._onVRRequestPresentStart), e.getEngine().onVRRequestPresentComplete.add(this._onVRRequestPresentComplete), window.addEventListener("vrdisplaypresentchange", this._onVrDisplayPresentChange), e.onDisposeObservable.add(function() {
|
|
i.dispose()
|
|
}), this._webVRCamera.onControllerMeshLoadedObservable.add(function(e) {
|
|
return i._onDefaultMeshLoaded(e)
|
|
}), this._scene.gamepadManager.onGamepadConnectedObservable.add(this._onNewGamepadConnected), this._scene.gamepadManager.onGamepadDisconnectedObservable.add(this._onNewGamepadDisconnected), this.updateButtonVisibility(), this._circleEase = new ee, this._circleEase.setEasingMode($.EASINGMODE_EASEINOUT), this.webVROptions.floorMeshes && this.enableTeleportation({
|
|
floorMeshes: this.webVROptions.floorMeshes
|
|
})
|
|
}
|
|
return Object.defineProperty(e.prototype, "onEnteringVR", {
|
|
get: function() {
|
|
return this.onEnteringVRObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onExitingVR", {
|
|
get: function() {
|
|
return this.onExitingVRObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onControllerMeshLoaded", {
|
|
get: function() {
|
|
return this.onControllerMeshLoadedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "teleportationTarget", {
|
|
get: function() {
|
|
return this._teleportationTarget
|
|
},
|
|
set: function(e) {
|
|
e && (e.name = "teleportationTarget", this._isDefaultTeleportationTarget = !1, this._teleportationTarget = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "gazeTrackerMesh", {
|
|
get: function() {
|
|
return this._cameraGazer._gazeTracker
|
|
},
|
|
set: function(e) {
|
|
e && (this._cameraGazer._gazeTracker && this._cameraGazer._gazeTracker.dispose(), this._leftController && this._leftController._gazeTracker && this._leftController._gazeTracker.dispose(), this._rightController && this._rightController._gazeTracker && this._rightController._gazeTracker.dispose(), this._cameraGazer._gazeTracker = e, this._cameraGazer._gazeTracker.bakeCurrentTransformIntoVertices(), this._cameraGazer._gazeTracker.isPickable = !1, this._cameraGazer._gazeTracker.isVisible = !1, this._cameraGazer._gazeTracker.name = "gazeTracker", this._leftController && (this._leftController._gazeTracker = this._cameraGazer._gazeTracker.clone("gazeTracker")), this._rightController && (this._rightController._gazeTracker = this._cameraGazer._gazeTracker.clone("gazeTracker")))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "leftControllerGazeTrackerMesh", {
|
|
get: function() {
|
|
return this._leftController ? this._leftController._gazeTracker : null
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "rightControllerGazeTrackerMesh", {
|
|
get: function() {
|
|
return this._rightController ? this._rightController._gazeTracker : null
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "displayGaze", {
|
|
get: function() {
|
|
return this._displayGaze
|
|
},
|
|
set: function(e) {
|
|
this._displayGaze = e, e || (this._cameraGazer._gazeTracker.isVisible = !1, this._leftController && (this._leftController._gazeTracker.isVisible = !1), this._rightController && (this._rightController._gazeTracker.isVisible = !1))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "displayLaserPointer", {
|
|
get: function() {
|
|
return this._displayLaserPointer
|
|
},
|
|
set: function(e) {
|
|
this._displayLaserPointer = e, e ? (this._rightController && this._rightController._activatePointer(), this._leftController && this._leftController._activatePointer()) : (this._rightController && (this._rightController._deactivatePointer(), this._rightController._gazeTracker.isVisible = !1), this._leftController && (this._leftController._deactivatePointer(), this._leftController._gazeTracker.isVisible = !1))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "deviceOrientationCamera", {
|
|
get: function() {
|
|
return this._deviceOrientationCamera
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "currentVRCamera", {
|
|
get: function() {
|
|
return this._webVRready ? this._webVRCamera : this._scene.activeCamera
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "webVRCamera", {
|
|
get: function() {
|
|
return this._webVRCamera
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "vrDeviceOrientationCamera", {
|
|
get: function() {
|
|
return this._vrDeviceOrientationCamera
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "_teleportationRequestInitiated", {
|
|
get: function() {
|
|
return this._cameraGazer._teleportationRequestInitiated || null !== this._leftController && this._leftController._teleportationRequestInitiated || null !== this._rightController && this._rightController._teleportationRequestInitiated
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._onDefaultMeshLoaded = function(e) {
|
|
this._leftController && this._leftController.webVRController == e && e.mesh && this._leftController._setLaserPointerParent(e.mesh), this._rightController && this._rightController.webVRController == e && e.mesh && this._rightController._setLaserPointerParent(e.mesh);
|
|
try {
|
|
this.onControllerMeshLoadedObservable.notifyObservers(e)
|
|
} catch (e) {
|
|
p.a.Warn("Error in your custom logic onControllerMeshLoaded: " + e)
|
|
}
|
|
}, Object.defineProperty(e.prototype, "isInVRMode", {
|
|
get: function() {
|
|
return this._webVRpresenting || this._fullscreenVRpresenting
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.onVrDisplayPresentChange = function() {
|
|
var e = this._scene.getEngine().getVRDevice();
|
|
if (e) {
|
|
var t = this._webVRpresenting;
|
|
this._webVRpresenting = e.isPresenting, t && !this._webVRpresenting && this.exitVR()
|
|
} else p.a.Warn("Detected VRDisplayPresentChange on an unknown VRDisplay. Did you can enterVR on the vrExperienceHelper?");
|
|
this.updateButtonVisibility()
|
|
}, e.prototype.onVRDisplayChanged = function(e) {
|
|
this._webVRsupported = e.vrSupported, this._webVRready = !!e.vrDisplay, this._webVRpresenting = e.vrDisplay && e.vrDisplay.isPresenting, this.updateButtonVisibility()
|
|
}, e.prototype.moveButtonToBottomRight = function() {
|
|
this._canvas && !this._useCustomVRButton && (this._btnVR.style.top = this._canvas.offsetTop + this._canvas.offsetHeight - 70 + "px", this._btnVR.style.left = this._canvas.offsetLeft + this._canvas.offsetWidth - 100 + "px")
|
|
}, e.prototype.displayVRButton = function() {
|
|
this._useCustomVRButton || this._btnVRDisplayed || (document.body.appendChild(this._btnVR), this._btnVRDisplayed = !0)
|
|
}, e.prototype.updateButtonVisibility = function() {
|
|
this._btnVR && !this._useCustomVRButton && (this._btnVR.className = "babylonVRicon", this.isInVRMode ? this._btnVR.className += " vrdisplaypresenting" : (this._webVRready && (this._btnVR.className += " vrdisplayready"), this._webVRsupported && (this._btnVR.className += " vrdisplaysupported"), this._webVRrequesting && (this._btnVR.className += " vrdisplayrequesting")))
|
|
}, e.prototype.enterVR = function() {
|
|
var e = this;
|
|
if (this.onEnteringVRObservable) try {
|
|
this.onEnteringVRObservable.notifyObservers(this)
|
|
} catch (e) {
|
|
p.a.Warn("Error in your custom logic onEnteringVR: " + e)
|
|
}
|
|
if (this._scene.activeCamera) {
|
|
if (this._position = this._scene.activeCamera.position.clone(), this.vrDeviceOrientationCamera && (this.vrDeviceOrientationCamera.rotation = o.q.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles(), this.vrDeviceOrientationCamera.angularSensibility = 2e3), this.webVRCamera) {
|
|
var t = this.webVRCamera.deviceRotationQuaternion.toEulerAngles().y,
|
|
i = o.q.FromRotationMatrix(this._scene.activeCamera.getWorldMatrix().getRotationMatrix()).toEulerAngles().y - t,
|
|
n = this.webVRCamera.rotationQuaternion.toEulerAngles().y;
|
|
this.webVRCamera.rotationQuaternion = o.q.FromEulerAngles(0, n + i, 0)
|
|
}
|
|
this._existingCamera = this._scene.activeCamera, this._existingCamera.angularSensibilityX && (this._cachedAngularSensibility.angularSensibilityX = this._existingCamera.angularSensibilityX, this._existingCamera.angularSensibilityX = Number.MAX_VALUE), this._existingCamera.angularSensibilityY && (this._cachedAngularSensibility.angularSensibilityY = this._existingCamera.angularSensibilityY, this._existingCamera.angularSensibilityY = Number.MAX_VALUE), this._existingCamera.angularSensibility && (this._cachedAngularSensibility.angularSensibility = this._existingCamera.angularSensibility, this._existingCamera.angularSensibility = Number.MAX_VALUE)
|
|
}
|
|
this._webVRrequesting || (this._webVRready ? this._webVRpresenting || (this._scene.getEngine().onVRRequestPresentComplete.addOnce(function(t) {
|
|
e.onAfterEnteringVRObservable.notifyObservers({
|
|
success: t
|
|
})
|
|
}), this._webVRCamera.position = this._position, this._scene.activeCamera = this._webVRCamera) : this._vrDeviceOrientationCamera && (this._vrDeviceOrientationCamera.position = this._position, this._scene.activeCamera && (this._vrDeviceOrientationCamera.minZ = this._scene.activeCamera.minZ), this._scene.activeCamera = this._vrDeviceOrientationCamera, this._scene.getEngine().enterFullscreen(this.requestPointerLockOnFullScreen), this.updateButtonVisibility(), this._vrDeviceOrientationCamera.onViewMatrixChangedObservable.addOnce(function() {
|
|
e.onAfterEnteringVRObservable.notifyObservers({
|
|
success: !0
|
|
})
|
|
})), this._scene.activeCamera && this._canvas && this._scene.activeCamera.attachControl(this._canvas), this._interactionsEnabled && this._scene.registerBeforeRender(this.beforeRender), this._displayLaserPointer && [this._leftController, this._rightController].forEach(function(e) {
|
|
e && e._activatePointer()
|
|
}), this._hasEnteredVR = !0)
|
|
}, e.prototype.exitVR = function() {
|
|
if (this._hasEnteredVR) {
|
|
if (this.onExitingVRObservable) try {
|
|
this.onExitingVRObservable.notifyObservers(this)
|
|
} catch (e) {
|
|
p.a.Warn("Error in your custom logic onExitingVR: " + e)
|
|
}
|
|
this._webVRpresenting && this._scene.getEngine().disableVR(), this._scene.activeCamera && (this._position = this._scene.activeCamera.position.clone()), this.vrDeviceOrientationCamera && (this.vrDeviceOrientationCamera.angularSensibility = Number.MAX_VALUE), this._deviceOrientationCamera ? (this._deviceOrientationCamera.position = this._position, this._scene.activeCamera = this._deviceOrientationCamera, this._canvas && this._scene.activeCamera.attachControl(this._canvas), this._cachedAngularSensibility.angularSensibilityX && (this._deviceOrientationCamera.angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX, this._cachedAngularSensibility.angularSensibilityX = null), this._cachedAngularSensibility.angularSensibilityY && (this._deviceOrientationCamera.angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY, this._cachedAngularSensibility.angularSensibilityY = null), this._cachedAngularSensibility.angularSensibility && (this._deviceOrientationCamera.angularSensibility = this._cachedAngularSensibility.angularSensibility, this._cachedAngularSensibility.angularSensibility = null)) : this._existingCamera && (this._existingCamera.position = this._position, this._scene.activeCamera = this._existingCamera, this._cachedAngularSensibility.angularSensibilityX && (this._existingCamera.angularSensibilityX = this._cachedAngularSensibility.angularSensibilityX, this._cachedAngularSensibility.angularSensibilityX = null), this._cachedAngularSensibility.angularSensibilityY && (this._existingCamera.angularSensibilityY = this._cachedAngularSensibility.angularSensibilityY, this._cachedAngularSensibility.angularSensibilityY = null), this._cachedAngularSensibility.angularSensibility && (this._existingCamera.angularSensibility = this._cachedAngularSensibility.angularSensibility, this._cachedAngularSensibility.angularSensibility = null)), this.updateButtonVisibility(), this._interactionsEnabled && (this._scene.unregisterBeforeRender(this.beforeRender), this._cameraGazer._gazeTracker.isVisible = !1, this._leftController && (this._leftController._gazeTracker.isVisible = !1), this._rightController && (this._rightController._gazeTracker.isVisible = !1)), this._scene.getEngine().resize(), [this._leftController, this._rightController].forEach(function(e) {
|
|
e && e._deactivatePointer()
|
|
}), this._hasEnteredVR = !1;
|
|
var e = this._scene.getEngine();
|
|
e._onVrDisplayPresentChange && e._onVrDisplayPresentChange()
|
|
}
|
|
}, Object.defineProperty(e.prototype, "position", {
|
|
get: function() {
|
|
return this._position
|
|
},
|
|
set: function(e) {
|
|
this._position = e, this._scene.activeCamera && (this._scene.activeCamera.position = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.enableInteractions = function() {
|
|
var e = this;
|
|
this._interactionsEnabled || (this._interactionsRequested = !0, this._leftController && this._enableInteractionOnController(this._leftController), this._rightController && this._enableInteractionOnController(this._rightController), this.raySelectionPredicate = function(t) {
|
|
return t.isVisible && (t.isPickable || t.name === e._floorMeshName)
|
|
}, this.meshSelectionPredicate = function() {
|
|
return !0
|
|
}, this._raySelectionPredicate = function(t) {
|
|
return !!(e._isTeleportationFloor(t) || -1 === t.name.indexOf("gazeTracker") && -1 === t.name.indexOf("teleportationTarget") && -1 === t.name.indexOf("torusTeleportation")) && e.raySelectionPredicate(t)
|
|
}, this._interactionsEnabled = !0)
|
|
}, Object.defineProperty(e.prototype, "_noControllerIsActive", {
|
|
get: function() {
|
|
return !(this._leftController && this._leftController._activePointer || this._rightController && this._rightController._activePointer)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._isTeleportationFloor = function(e) {
|
|
for (var t = 0; t < this._floorMeshesCollection.length; t++)
|
|
if (this._floorMeshesCollection[t].id === e.id) return !0;
|
|
return !(!this._floorMeshName || e.name !== this._floorMeshName)
|
|
}, e.prototype.addFloorMesh = function(e) {
|
|
this._floorMeshesCollection && (this._floorMeshesCollection.indexOf(e) > -1 || this._floorMeshesCollection.push(e))
|
|
}, e.prototype.removeFloorMesh = function(e) {
|
|
if (this._floorMeshesCollection) {
|
|
var t = this._floorMeshesCollection.indexOf(e); - 1 !== t && this._floorMeshesCollection.splice(t, 1)
|
|
}
|
|
}, e.prototype.enableTeleportation = function(e) {
|
|
if (void 0 === e && (e = {}), !this._teleportationInitialized) {
|
|
this._teleportationRequested = !0, this.enableInteractions(), e.floorMeshName && (this._floorMeshName = e.floorMeshName), e.floorMeshes && (this._floorMeshesCollection = e.floorMeshes), null != this._leftController && this._enableTeleportationOnController(this._leftController), null != this._rightController && this._enableTeleportationOnController(this._rightController);
|
|
var t = new xi.a;
|
|
t.vignetteColor = new o.f(0, 0, 0, 0), t.vignetteEnabled = !0, this._postProcessMove = new Ci("postProcessMove", 1, this._webVRCamera, void 0, void 0, void 0, void 0, t), this._webVRCamera.detachPostProcess(this._postProcessMove), this._teleportationInitialized = !0, this._isDefaultTeleportationTarget && (this._createTeleportationCircles(), this._teleportationTarget.scaling.scaleInPlace(this._webVRCamera.deviceScaleFactor))
|
|
}
|
|
}, e.prototype._enableInteractionOnController = function(e) {
|
|
var t = this;
|
|
e.webVRController.mesh && (e._interactionsEnabled = !0, this.isInVRMode && this._displayLaserPointer && e._activatePointer(), this.webVROptions.laserToggle && e.webVRController.onMainButtonStateChangedObservable.add(function(i) {
|
|
t._displayLaserPointer && 1 === i.value && (e._activePointer ? e._deactivatePointer() : e._activatePointer(), t.displayGaze && (e._gazeTracker.isVisible = e._activePointer))
|
|
}), e.webVRController.onTriggerStateChangedObservable.add(function(i) {
|
|
var n = e;
|
|
t._noControllerIsActive && (n = t._cameraGazer), n._pointerDownOnMeshAsked ? i.value < t._padSensibilityDown && n._selectionPointerUp() : i.value > t._padSensibilityUp && n._selectionPointerDown()
|
|
}))
|
|
}, e.prototype._checkTeleportWithRay = function(e, t) {
|
|
this._teleportationRequestInitiated && !t._teleportationRequestInitiated || (t._teleportationRequestInitiated ? Math.sqrt(e.y * e.y + e.x * e.x) < this._padSensibilityDown && (this._teleportActive && this.teleportCamera(this._haloCenter), t._teleportationRequestInitiated = !1) : e.y < -this._padSensibilityUp && t._dpadPressed && (t._activatePointer(), t._teleportationRequestInitiated = !0))
|
|
}, e.prototype._checkRotate = function(e, t) {
|
|
t._teleportationRequestInitiated || (t._rotationLeftAsked ? e.x > -this._padSensibilityDown && (t._rotationLeftAsked = !1) : e.x < -this._padSensibilityUp && t._dpadPressed && (t._rotationLeftAsked = !0, this._rotationAllowed && this._rotateCamera(!1)), t._rotationRightAsked ? e.x < this._padSensibilityDown && (t._rotationRightAsked = !1) : e.x > this._padSensibilityUp && t._dpadPressed && (t._rotationRightAsked = !0, this._rotationAllowed && this._rotateCamera(!0)))
|
|
}, e.prototype._checkTeleportBackwards = function(e, t) {
|
|
if (!t._teleportationRequestInitiated)
|
|
if (e.y > this._padSensibilityUp && t._dpadPressed) {
|
|
if (!t._teleportationBackRequestInitiated) {
|
|
if (!this.currentVRCamera) return;
|
|
var i = o.q.FromRotationMatrix(this.currentVRCamera.getWorldMatrix().getRotationMatrix()),
|
|
n = this.currentVRCamera.position;
|
|
this.currentVRCamera.devicePosition && this.currentVRCamera.deviceRotationQuaternion && (i = this.currentVRCamera.deviceRotationQuaternion, n = this.currentVRCamera.devicePosition), i.toEulerAnglesToRef(this._workingVector), this._workingVector.z = 0, this._workingVector.x = 0, o.q.RotationYawPitchRollToRef(this._workingVector.y, this._workingVector.x, this._workingVector.z, this._workingQuaternion), this._workingQuaternion.toRotationMatrix(this._workingMatrix), o.x.TransformCoordinatesToRef(this._teleportBackwardsVector, this._workingMatrix, this._workingVector);
|
|
var r = new It.a(n, this._workingVector),
|
|
s = this._scene.pickWithRay(r, this._raySelectionPredicate);
|
|
s && s.pickedPoint && s.pickedMesh && this._isTeleportationFloor(s.pickedMesh) && s.distance < 5 && this.teleportCamera(s.pickedPoint), t._teleportationBackRequestInitiated = !0
|
|
}
|
|
} else t._teleportationBackRequestInitiated = !1
|
|
}, e.prototype._enableTeleportationOnController = function(e) {
|
|
var t = this;
|
|
e.webVRController.mesh && (e._interactionsEnabled || this._enableInteractionOnController(e), e._interactionsEnabled = !0, e._teleportationEnabled = !0, e.webVRController.controllerType === St.VIVE && (e._dpadPressed = !1, e.webVRController.onPadStateChangedObservable.add(function(t) {
|
|
e._dpadPressed = t.pressed, e._dpadPressed || (e._rotationLeftAsked = !1, e._rotationRightAsked = !1, e._teleportationBackRequestInitiated = !1)
|
|
})), e.webVRController.onPadValuesChangedObservable.add(function(i) {
|
|
t.teleportationEnabled && (t._checkTeleportBackwards(i, e), t._checkTeleportWithRay(i, e)), t._checkRotate(i, e)
|
|
}))
|
|
}, e.prototype._createTeleportationCircles = function() {
|
|
this._teleportationTarget = fe.a.CreateGround("teleportationTarget", 2, 2, 2, this._scene), this._teleportationTarget.isPickable = !1;
|
|
var e = new Pi("DynamicTexture", 512, this._scene, !0);
|
|
e.hasAlpha = !0;
|
|
var t = e.getContext();
|
|
t.beginPath(), t.arc(256, 256, 200, 0, 2 * Math.PI, !1), t.fillStyle = this._teleportationFillColor, t.fill(), t.lineWidth = 10, t.strokeStyle = this._teleportationBorderColor, t.stroke(), t.closePath(), e.update();
|
|
var i = new Ri.a("TextPlaneMaterial", this._scene);
|
|
i.diffuseTexture = e, this._teleportationTarget.material = i;
|
|
var n = fe.a.CreateTorus("torusTeleportation", .75, .1, 25, this._scene, !1);
|
|
n.isPickable = !1, n.parent = this._teleportationTarget;
|
|
var r = new B("animationInnerCircle", "position.y", 30, B.ANIMATIONTYPE_FLOAT, B.ANIMATIONLOOPMODE_CYCLE),
|
|
o = [];
|
|
o.push({
|
|
frame: 0,
|
|
value: 0
|
|
}), o.push({
|
|
frame: 30,
|
|
value: .4
|
|
}), o.push({
|
|
frame: 60,
|
|
value: 0
|
|
}), r.setKeys(o);
|
|
var s = new ue;
|
|
s.setEasingMode($.EASINGMODE_EASEINOUT), r.setEasingFunction(s), n.animations = [], n.animations.push(r), this._scene.beginAnimation(n, 0, 60, !0), this._hideTeleportationTarget()
|
|
}, e.prototype._displayTeleportationTarget = function() {
|
|
this._teleportActive = !0, this._teleportationInitialized && (this._teleportationTarget.isVisible = !0, this._isDefaultTeleportationTarget && (this._teleportationTarget.getChildren()[0].isVisible = !0))
|
|
}, e.prototype._hideTeleportationTarget = function() {
|
|
this._teleportActive = !1, this._teleportationInitialized && (this._teleportationTarget.isVisible = !1, this._isDefaultTeleportationTarget && (this._teleportationTarget.getChildren()[0].isVisible = !1))
|
|
}, e.prototype._rotateCamera = function(e) {
|
|
var t = this;
|
|
if (this.currentVRCamera instanceof bt) {
|
|
e ? this._rotationAngle++ : this._rotationAngle--, this.currentVRCamera.animations = [];
|
|
var i = o.q.FromRotationMatrix(o.j.RotationY(Math.PI / 4 * this._rotationAngle)),
|
|
n = new B("animationRotation", "rotationQuaternion", 90, B.ANIMATIONTYPE_QUATERNION, B.ANIMATIONLOOPMODE_CONSTANT),
|
|
r = [];
|
|
r.push({
|
|
frame: 0,
|
|
value: this.currentVRCamera.rotationQuaternion
|
|
}), r.push({
|
|
frame: 6,
|
|
value: i
|
|
}), n.setKeys(r), n.setEasingFunction(this._circleEase), this.currentVRCamera.animations.push(n), this._postProcessMove.animations = [];
|
|
var s = new B("animationPP", "vignetteWeight", 90, B.ANIMATIONTYPE_FLOAT, B.ANIMATIONLOOPMODE_CONSTANT),
|
|
a = [];
|
|
a.push({
|
|
frame: 0,
|
|
value: 0
|
|
}), a.push({
|
|
frame: 3,
|
|
value: 4
|
|
}), a.push({
|
|
frame: 6,
|
|
value: 0
|
|
}), s.setKeys(a), s.setEasingFunction(this._circleEase), this._postProcessMove.animations.push(s);
|
|
var c = new B("animationPP2", "vignetteStretch", 90, B.ANIMATIONTYPE_FLOAT, B.ANIMATIONLOOPMODE_CONSTANT),
|
|
l = [];
|
|
l.push({
|
|
frame: 0,
|
|
value: 0
|
|
}), l.push({
|
|
frame: 3,
|
|
value: 10
|
|
}), l.push({
|
|
frame: 6,
|
|
value: 0
|
|
}), c.setKeys(l), c.setEasingFunction(this._circleEase), this._postProcessMove.animations.push(c), this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0, this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0, this._postProcessMove.samples = 4, this._webVRCamera.attachPostProcess(this._postProcessMove), this._scene.beginAnimation(this._postProcessMove, 0, 6, !1, 1, function() {
|
|
t._webVRCamera.detachPostProcess(t._postProcessMove)
|
|
}), this._scene.beginAnimation(this.currentVRCamera, 0, 6, !1, 1)
|
|
}
|
|
}, e.prototype._moveTeleportationSelectorTo = function(e, t, i) {
|
|
if (e.pickedPoint) {
|
|
t._teleportationRequestInitiated && (this._displayTeleportationTarget(), this._haloCenter.copyFrom(e.pickedPoint), this._teleportationTarget.position.copyFrom(e.pickedPoint));
|
|
var n = this._convertNormalToDirectionOfRay(e.getNormal(!0, !1), i);
|
|
if (n) {
|
|
var r = o.x.Cross(o.c.Y, n),
|
|
s = o.x.Cross(n, r);
|
|
o.x.RotationFromAxisToRef(s, n, r, this._teleportationTarget.rotation)
|
|
}
|
|
this._teleportationTarget.position.y += .1
|
|
}
|
|
}, e.prototype.teleportCamera = function(e) {
|
|
var t = this;
|
|
if (this.currentVRCamera instanceof bt) {
|
|
this.webVRCamera.leftCamera ? (this._workingVector.copyFrom(this.webVRCamera.leftCamera.globalPosition), this._workingVector.subtractInPlace(this.webVRCamera.position), e.subtractToRef(this._workingVector, this._workingVector)) : this._workingVector.copyFrom(e), this.isInVRMode ? this._workingVector.y += this.webVRCamera.deviceDistanceToRoomGround() * this._webVRCamera.deviceScaleFactor : this._workingVector.y += this._defaultHeight, this.onBeforeCameraTeleport.notifyObservers(this._workingVector), this.currentVRCamera.animations = [];
|
|
var i = new B("animationCameraTeleportation", "position", 90, B.ANIMATIONTYPE_VECTOR3, B.ANIMATIONLOOPMODE_CONSTANT),
|
|
n = [{
|
|
frame: 0,
|
|
value: this.currentVRCamera.position
|
|
}, {
|
|
frame: 11,
|
|
value: this._workingVector
|
|
}];
|
|
i.setKeys(n), i.setEasingFunction(this._circleEase), this.currentVRCamera.animations.push(i), this._postProcessMove.animations = [];
|
|
var r = new B("animationPP", "vignetteWeight", 90, B.ANIMATIONTYPE_FLOAT, B.ANIMATIONLOOPMODE_CONSTANT),
|
|
o = [];
|
|
o.push({
|
|
frame: 0,
|
|
value: 0
|
|
}), o.push({
|
|
frame: 5,
|
|
value: 8
|
|
}), o.push({
|
|
frame: 11,
|
|
value: 0
|
|
}), r.setKeys(o), this._postProcessMove.animations.push(r);
|
|
var s = new B("animationPP2", "vignetteStretch", 90, B.ANIMATIONTYPE_FLOAT, B.ANIMATIONLOOPMODE_CONSTANT),
|
|
a = [];
|
|
a.push({
|
|
frame: 0,
|
|
value: 0
|
|
}), a.push({
|
|
frame: 5,
|
|
value: 10
|
|
}), a.push({
|
|
frame: 11,
|
|
value: 0
|
|
}), s.setKeys(a), this._postProcessMove.animations.push(s), this._postProcessMove.imageProcessingConfiguration.vignetteWeight = 0, this._postProcessMove.imageProcessingConfiguration.vignetteStretch = 0, this._webVRCamera.attachPostProcess(this._postProcessMove), this._scene.beginAnimation(this._postProcessMove, 0, 11, !1, 1, function() {
|
|
t._webVRCamera.detachPostProcess(t._postProcessMove)
|
|
}), this._scene.beginAnimation(this.currentVRCamera, 0, 11, !1, 1, function() {
|
|
t.onAfterCameraTeleport.notifyObservers(t._workingVector)
|
|
}), this._hideTeleportationTarget()
|
|
}
|
|
}, e.prototype._convertNormalToDirectionOfRay = function(e, t) {
|
|
e && (Math.acos(o.x.Dot(e, t.direction)) < Math.PI / 2 && e.scaleInPlace(-1));
|
|
return e
|
|
}, e.prototype._castRayAndSelectObject = function(e) {
|
|
if (this.currentVRCamera instanceof bt) {
|
|
var t = e._getForwardRay(this._rayLength),
|
|
i = this._scene.pickWithRay(t, this._raySelectionPredicate);
|
|
if (i && (e._laserPointer && (i.originMesh = e._laserPointer.parent), this._scene.simulatePointerMove(i, {
|
|
pointerId: e._id
|
|
})), e._currentHit = i, i && i.pickedPoint) {
|
|
if (this._displayGaze) {
|
|
var n = 1;
|
|
e._gazeTracker.isVisible = !0, e._isActionableMesh && (n = 3), this.updateGazeTrackerScale && (e._gazeTracker.scaling.x = i.distance * n, e._gazeTracker.scaling.y = i.distance * n, e._gazeTracker.scaling.z = i.distance * n);
|
|
var r = this._convertNormalToDirectionOfRay(i.getNormal(), t);
|
|
if (r) {
|
|
var s = o.x.Cross(o.c.Y, r),
|
|
a = o.x.Cross(r, s);
|
|
o.x.RotationFromAxisToRef(a, r, s, e._gazeTracker.rotation)
|
|
}
|
|
e._gazeTracker.position.copyFrom(i.pickedPoint), e._gazeTracker.position.x < 0 ? e._gazeTracker.position.x += .002 : e._gazeTracker.position.x -= .002, e._gazeTracker.position.y < 0 ? e._gazeTracker.position.y += .002 : e._gazeTracker.position.y -= .002, e._gazeTracker.position.z < 0 ? e._gazeTracker.position.z += .002 : e._gazeTracker.position.z -= .002
|
|
}
|
|
e._updatePointerDistance(i.distance)
|
|
} else e._updatePointerDistance(), e._gazeTracker.isVisible = !1;
|
|
if (i && i.pickedMesh) {
|
|
if (this._teleportationInitialized && this._isTeleportationFloor(i.pickedMesh) && i.pickedPoint) return e._currentMeshSelected && !this._isTeleportationFloor(e._currentMeshSelected) && this._notifySelectedMeshUnselected(e._currentMeshSelected), e._currentMeshSelected = null, void(e._teleportationRequestInitiated && this._moveTeleportationSelectorTo(i, e, t));
|
|
if (i.pickedMesh !== e._currentMeshSelected)
|
|
if (this.meshSelectionPredicate(i.pickedMesh)) {
|
|
this.onNewMeshPicked.notifyObservers(i), e._currentMeshSelected = i.pickedMesh, i.pickedMesh.isPickable && i.pickedMesh.actionManager ? (this.changeGazeColor(new o.e(0, 0, 1)), this.changeLaserColor(new o.e(.2, .2, 1)), e._isActionableMesh = !0) : (this.changeGazeColor(new o.e(.7, .7, .7)), this.changeLaserColor(new o.e(.7, .7, .7)), e._isActionableMesh = !1);
|
|
try {
|
|
this.onNewMeshSelected.notifyObservers(i.pickedMesh)
|
|
} catch (e) {
|
|
p.a.Warn("Error in your custom logic onNewMeshSelected: " + e)
|
|
}
|
|
} else this._notifySelectedMeshUnselected(e._currentMeshSelected), e._currentMeshSelected = null, this.changeGazeColor(new o.e(.7, .7, .7)), this.changeLaserColor(new o.e(.7, .7, .7))
|
|
} else this._notifySelectedMeshUnselected(e._currentMeshSelected), e._currentMeshSelected = null, this.changeGazeColor(new o.e(.7, .7, .7)), this.changeLaserColor(new o.e(.7, .7, .7))
|
|
}
|
|
}, e.prototype._notifySelectedMeshUnselected = function(e) {
|
|
e && this.onSelectedMeshUnselected.notifyObservers(e)
|
|
}, e.prototype.changeLaserColor = function(e) {
|
|
this._leftController && this._leftController._setLaserPointerColor(e), this._rightController && this._rightController._setLaserPointerColor(e)
|
|
}, e.prototype.changeGazeColor = function(e) {
|
|
this.updateGazeTrackerColor && this._cameraGazer._gazeTracker.material && (this._cameraGazer._gazeTracker.material.emissiveColor = e, this._leftController && (this._leftController._gazeTracker.material.emissiveColor = e), this._rightController && (this._rightController._gazeTracker.material.emissiveColor = e))
|
|
}, e.prototype.dispose = function() {
|
|
this.isInVRMode && this.exitVR(), this._postProcessMove && this._postProcessMove.dispose(), this._webVRCamera && this._webVRCamera.dispose(), this._vrDeviceOrientationCamera && this._vrDeviceOrientationCamera.dispose(), !this._useCustomVRButton && this._btnVR.parentNode && document.body.removeChild(this._btnVR), this._deviceOrientationCamera && this._scene.activeCamera != this._deviceOrientationCamera && this._deviceOrientationCamera.dispose(), this._cameraGazer && this._cameraGazer.dispose(), this._leftController && this._leftController.dispose(), this._rightController && this._rightController.dispose(), this._teleportationTarget && this._teleportationTarget.dispose(), this._floorMeshesCollection = [], document.removeEventListener("keydown", this._onKeyDown), window.removeEventListener("vrdisplaypresentchange", this._onVrDisplayPresentChange), window.removeEventListener("resize", this._onResize), document.removeEventListener("fullscreenchange", this._onFullscreenChange), document.removeEventListener("mozfullscreenchange", this._onFullscreenChange), document.removeEventListener("webkitfullscreenchange", this._onFullscreenChange), document.removeEventListener("msfullscreenchange", this._onFullscreenChange), document.onmsfullscreenchange = null, this._scene.getEngine().onVRDisplayChangedObservable.removeCallback(this._onVRDisplayChanged), this._scene.getEngine().onVRRequestPresentStart.removeCallback(this._onVRRequestPresentStart), this._scene.getEngine().onVRRequestPresentComplete.removeCallback(this._onVRRequestPresentComplete), window.removeEventListener("vrdisplaypresentchange", this._onVrDisplayPresentChange), this._scene.gamepadManager.onGamepadConnectedObservable.removeCallback(this._onNewGamepadConnected), this._scene.gamepadManager.onGamepadDisconnectedObservable.removeCallback(this._onNewGamepadDisconnected), this._scene.unregisterBeforeRender(this.beforeRender)
|
|
}, e.prototype.getClassName = function() {
|
|
return "VRExperienceHelper"
|
|
}, e
|
|
}(),
|
|
ki = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, o.x.Zero(), i) || this;
|
|
return n.minZ = 0, n.rotationQuaternion = new o.q, n.cameraRigMode = Ne.a.RIG_MODE_CUSTOM, n.updateUpVectorFromRotation = !0, n._updateNumberOfRigCameras(1), n
|
|
}
|
|
return l.d(t, e), t.prototype._updateNumberOfRigCameras = function(e) {
|
|
for (void 0 === e && (e = 1); this.rigCameras.length < e;) {
|
|
var t = new yt("view: " + this.rigCameras.length, o.x.Zero(), this.getScene());
|
|
t.minZ = 0, t.parent = this, t.rotationQuaternion = new o.q, t.updateUpVectorFromRotation = !0, this.rigCameras.push(t)
|
|
}
|
|
for (; this.rigCameras.length > e;) {
|
|
var i = this.rigCameras.pop();
|
|
i && i.dispose()
|
|
}
|
|
}, t.prototype._updateForDualEyeDebugging = function(e) {
|
|
void 0 === e && (e = .01), this._updateNumberOfRigCameras(2), this.rigCameras[0].viewport = new o.z(0, 0, .5, 1), this.rigCameras[0].position.x = -e / 2, this.rigCameras[0].outputRenderTarget = null, this.rigCameras[1].viewport = new o.z(.5, 0, .5, 1), this.rigCameras[1].position.x = e / 2, this.rigCameras[1].outputRenderTarget = null
|
|
}, t.prototype.updateFromXRSessionManager = function(e) {
|
|
var i = this;
|
|
if (!e._currentXRFrame || !e._currentXRFrame.getDevicePose) return !1;
|
|
var n = e._currentXRFrame.getDevicePose(e._frameOfReference);
|
|
return !(!n || !n.poseModelMatrix) && (o.j.FromFloat32ArrayToRefScaled(n.poseModelMatrix, 0, 1, t._TmpMatrix), this._scene.useRightHandedSystem || t._TmpMatrix.toggleModelMatrixHandInPlace(), t._TmpMatrix.getTranslationToRef(this.position), t._TmpMatrix.getRotationMatrixToRef(t._TmpMatrix), o.q.FromRotationMatrixToRef(t._TmpMatrix, this.rotationQuaternion), this.computeWorldMatrix(), this._updateNumberOfRigCameras(e._currentXRFrame.views.length), e._currentXRFrame.views.forEach(function(t, r) {
|
|
o.j.FromFloat32ArrayToRefScaled(n.getViewMatrix(t), 0, 1, i.rigCameras[r]._computedViewMatrix), o.j.FromFloat32ArrayToRefScaled(t.projectionMatrix, 0, 1, i.rigCameras[r]._projectionMatrix), i._scene.useRightHandedSystem || (i.rigCameras[r]._computedViewMatrix.toggleModelMatrixHandInPlace(), i.rigCameras[r]._projectionMatrix.toggleProjectionMatrixHandInPlace());
|
|
var s = e._xrSession.baseLayer.getViewport(t),
|
|
a = e._xrSession.baseLayer.framebufferWidth,
|
|
c = e._xrSession.baseLayer.framebufferHeight;
|
|
i.rigCameras[r].viewport.width = s.width / a, i.rigCameras[r].viewport.height = s.height / c, i.rigCameras[r].viewport.x = s.x / a, i.rigCameras[r].viewport.y = s.y / c, i.rigCameras[r].outputRenderTarget = e._sessionRenderTargetTexture
|
|
}), !0)
|
|
}, t._TmpMatrix = new o.j, t
|
|
}(bt),
|
|
zi = function() {
|
|
function e(e) {
|
|
this.scene = e, this.onXRFrameObservable = new r.c, this.onXRSessionEnded = new r.c, this._sessionRenderTargetTexture = null, this._tmpMatrix = new o.j
|
|
}
|
|
return e.prototype.initializeAsync = function() {
|
|
var e = this;
|
|
return p.a.Warn("The WebXR APIs are still under development and are subject to change in the future."), this._xrNavigator = navigator, this._xrNavigator.xr ? this._xrNavigator.xr.requestDevice().then(function(t) {
|
|
return e._xrDevice = t, e.scene.getEngine()._gl.setCompatibleXRDevice(e._xrDevice)
|
|
}) : Promise.reject("webXR not supported by this browser")
|
|
}, e.prototype.enterXRAsync = function(t, i) {
|
|
var n = this;
|
|
return this._xrDevice.requestSession(t).then(function(e) {
|
|
return n._xrSession = e, n._xrSession.addEventListener("end", function() {
|
|
n._sessionRenderTargetTexture = null, n.scene.getEngine().restoreDefaultFramebuffer(), n.scene.getEngine().customAnimationFrameRequester = null, n.onXRSessionEnded.notifyObservers(null), n.scene.getEngine()._renderLoop()
|
|
}, {
|
|
once: !0
|
|
}), n._xrSession.baseLayer = new XRWebGLLayer(n._xrSession, n.scene.getEngine()._gl), n._xrSession.requestFrameOfReference(i)
|
|
}).then(function(t) {
|
|
n._frameOfReference = t, n.scene.getEngine().customAnimationFrameRequester = {
|
|
requestAnimationFrame: n._xrSession.requestAnimationFrame.bind(n._xrSession),
|
|
renderFunction: function(e, t) {
|
|
n._currentXRFrame = t, n.onXRFrameObservable.notifyObservers(null), n.scene.getEngine()._renderLoop()
|
|
}
|
|
}, n._sessionRenderTargetTexture = e._CreateRenderTargetTextureFromSession(n._xrSession, n.scene), window.cancelAnimationFrame(n.scene.getEngine()._frameHandler), n.scene.getEngine()._renderLoop()
|
|
})
|
|
}, e.prototype.exitXRAsync = function() {
|
|
return this._xrSession.end()
|
|
}, e.prototype.environmentPointHitTestAsync = function(e) {
|
|
var t = this;
|
|
return new Promise(function(i) {
|
|
var n = new Float32Array([e.origin.x, e.origin.y, e.origin.z]),
|
|
r = new Float32Array([e.direction.x, e.direction.y, e.direction.z]);
|
|
t.scene.useRightHandedSystem || (n[2] *= -1, r[2] *= -1), t._xrSession.requestHitTest(n, r, t._frameOfReference).then(function(e) {
|
|
if (e.length > 0) {
|
|
o.j.FromFloat32ArrayToRefScaled(e[0].hitMatrix, 0, 1, t._tmpMatrix);
|
|
var n = t._tmpMatrix.getTranslation();
|
|
t.scene.useRightHandedSystem || (n.z *= -1), i(n)
|
|
} else i(null)
|
|
}).catch(function() {
|
|
i(null)
|
|
})
|
|
})
|
|
}, e.prototype.supportsSessionAsync = function(e) {
|
|
return this._xrDevice.supportsSession(e).then(function() {
|
|
return !0
|
|
}).catch(function() {
|
|
return !1
|
|
})
|
|
}, e._CreateRenderTargetTextureFromSession = function(e, t) {
|
|
var i = new ze.a(t.getEngine(), ze.a.DATASOURCE_UNKNOWN, !0);
|
|
i.width = e.baseLayer.framebufferWidth, i.height = e.baseLayer.framebufferHeight, i._framebuffer = e.baseLayer.framebuffer;
|
|
var n = new _i("XR renderTargetTexture", {
|
|
width: i.width,
|
|
height: i.height
|
|
}, t, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, void 0, !0);
|
|
return n._texture = i, n
|
|
}, e.prototype.dispose = function() {
|
|
this.onXRFrameObservable.clear(), this.onXRSessionEnded.clear()
|
|
}, e
|
|
}();
|
|
! function(e) {
|
|
e[e.ENTERING_XR = 0] = "ENTERING_XR", e[e.EXITING_XR = 1] = "EXITING_XR", e[e.IN_XR = 2] = "IN_XR", e[e.NOT_IN_XR = 3] = "NOT_IN_XR"
|
|
}(Li || (Li = {}));
|
|
var ji, Hi = function() {
|
|
function e(e) {
|
|
this.scene = e, this.state = Li.NOT_IN_XR, this.onStateChangedObservable = new r.c, this._nonVRCamera = null, this._originalSceneAutoClear = !0, this._supported = !1, this.camera = new ki("", e), this._sessionManager = new zi(e), this.container = new Fe.a("", e), this.camera.parent = this.container
|
|
}
|
|
return e.prototype._setState = function(e) {
|
|
this.state = e, this.onStateChangedObservable.notifyObservers(this.state)
|
|
}, e.CreateAsync = function(t) {
|
|
var i = new e(t);
|
|
return i._sessionManager.initializeAsync().then(function() {
|
|
return i._supported = !0, i
|
|
}).catch(function() {
|
|
return i
|
|
})
|
|
}, e.prototype.exitXRAsync = function() {
|
|
return this._setState(Li.EXITING_XR), this._sessionManager.exitXRAsync()
|
|
}, e.prototype.enterXRAsync = function(e, t) {
|
|
var i = this;
|
|
if (!this._supported) throw "XR session not supported by this browser";
|
|
return this._setState(Li.ENTERING_XR), this._sessionManager.enterXRAsync(e, t).then(function() {
|
|
i._originalSceneAutoClear = i.scene.autoClear, i._nonVRCamera = i.scene.activeCamera, i.scene.autoClear = !1, i.scene.activeCamera = i.camera, i._sessionManager.onXRFrameObservable.add(function() {
|
|
i.camera.updateFromXRSessionManager(i._sessionManager)
|
|
}), i._sessionManager.onXRSessionEnded.addOnce(function() {
|
|
i.camera.rigCameras.forEach(function(e) {
|
|
e.outputRenderTarget = null
|
|
}), i.scene.autoClear = i._originalSceneAutoClear, i.scene.activeCamera = i._nonVRCamera, i._sessionManager.onXRFrameObservable.clear(), i._setState(Li.NOT_IN_XR)
|
|
}), i._setState(Li.IN_XR)
|
|
})
|
|
}, e.prototype.environmentPointHitTestAsync = function(e) {
|
|
return this._sessionManager.environmentPointHitTestAsync(e)
|
|
}, e.prototype.setPositionOfCameraUsingContainer = function(t) {
|
|
this.camera.globalPosition.subtractToRef(t, e._TmpVector), this.container.position.subtractInPlace(e._TmpVector)
|
|
}, e.prototype.rotateCameraByQuaternionUsingContainer = function(e) {
|
|
this.container.rotationQuaternion || (this.container.rotationQuaternion = o.q.FromEulerVector(this.container.rotation)), this.container.rotationQuaternion.multiplyInPlace(e), this.container.position.rotateByQuaternionAroundPointToRef(e, this.camera.globalPosition, this.container.position)
|
|
}, e.prototype.supportsSessionAsync = function(e) {
|
|
return this._supported ? this._sessionManager.supportsSessionAsync(e) : Promise.resolve(!1)
|
|
}, e.prototype.dispose = function() {
|
|
this.camera.dispose(), this.container.dispose(), this.onStateChangedObservable.clear(), this._sessionManager.dispose()
|
|
}, e._TmpVector = new o.x, e
|
|
}(),
|
|
Wi = function() {
|
|
function e(e, t) {
|
|
this.element = e, this.initializationOptions = t
|
|
}
|
|
return e.prototype.update = function(e) {}, e
|
|
}(),
|
|
Xi = function() {
|
|
return function() {}
|
|
}(),
|
|
Yi = function() {
|
|
function e(e, t) {
|
|
var i = this;
|
|
if (this.scene = e, this._buttons = [], this._activeButton = null, this.activeButtonChangedObservable = new r.c, this._overlay = document.createElement("div"), this._overlay.style.cssText = "z-index:11;position: absolute; right: 20px;bottom: 50px;", t.customButtons) this._buttons = t.customButtons;
|
|
else {
|
|
var n = document.createElement("button");
|
|
n.style.cssText = "color: #868686; border-color: #868686; border-style: solid; margin-left: 10px; height: 50px; width: 80px; background-color: rgba(51,51,51,0.7); background-repeat:no-repeat; background-position: center; outline: none;", n.innerText = "HMD", this._buttons.push(new Wi(n, {
|
|
immersive: !0,
|
|
outputContext: t.outputCanvasContext
|
|
})), this._buttons[this._buttons.length - 1].update = function(e) {
|
|
this.element.style.display = null === e || e === this ? "" : "none", this.element.innerText = e === this ? "EXIT" : "HMD"
|
|
};
|
|
var o = document.createElement("button");
|
|
o.style.cssText = n.style.cssText, o.innerText = "Window", this._buttons.push(new Wi(o, {
|
|
immersive: !1,
|
|
environmentIntegration: !0,
|
|
outputContext: t.outputCanvasContext
|
|
})), this._buttons[this._buttons.length - 1].update = function(e) {
|
|
this.element.style.display = null === e || e === this ? "" : "none", this.element.innerText = e === this ? "EXIT" : "Window"
|
|
}, this._updateButtons(null)
|
|
}
|
|
var s = e.getEngine().getRenderingCanvas();
|
|
s && s.parentNode && (s.parentNode.appendChild(this._overlay), e.onDisposeObservable.addOnce(function() {
|
|
i.dispose()
|
|
}))
|
|
}
|
|
return e.CreateAsync = function(t, i, n) {
|
|
var r = this,
|
|
o = new e(t, n),
|
|
s = o._buttons.map(function(e) {
|
|
return i.supportsSessionAsync(e.initializationOptions)
|
|
});
|
|
return i.onStateChangedObservable.add(function(e) {
|
|
e == Li.NOT_IN_XR && o._updateButtons(null)
|
|
}), Promise.all(s).then(function(e) {
|
|
return e.forEach(function(e, t) {
|
|
e && (o._overlay.appendChild(o._buttons[t].element), o._buttons[t].element.onclick = function() {
|
|
return l.b(r, void 0, void 0, function() {
|
|
return l.e(this, function(e) {
|
|
switch (e.label) {
|
|
case 0:
|
|
return i.state != Li.IN_XR ? [3, 2] : (o._updateButtons(null), [4, i.exitXRAsync()]);
|
|
case 1:
|
|
return e.sent(), [2];
|
|
case 2:
|
|
return i.state != Li.NOT_IN_XR ? [3, 4] : (o._updateButtons(o._buttons[t]), [4, i.enterXRAsync(o._buttons[t].initializationOptions, "eye-level")]);
|
|
case 3:
|
|
e.sent(), e.label = 4;
|
|
case 4:
|
|
return [2]
|
|
}
|
|
})
|
|
})
|
|
})
|
|
}), o
|
|
})
|
|
}, e.prototype._updateButtons = function(e) {
|
|
var t = this;
|
|
this._activeButton = e, this._buttons.forEach(function(e) {
|
|
e.update(t._activeButton)
|
|
}), this.activeButtonChangedObservable.notifyObservers(this._activeButton)
|
|
}, e.prototype.dispose = function() {
|
|
var e = this.scene.getEngine().getRenderingCanvas();
|
|
e && e.parentNode && e.parentNode.contains(this._overlay) && e.parentNode.removeChild(this._overlay), this.activeButtonChangedObservable.clear()
|
|
}, e
|
|
}(),
|
|
Ki = function() {
|
|
function e(e) {
|
|
this.pointer = new Fe.a("controllerPointer", e)
|
|
}
|
|
return e.prototype.dispose = function() {
|
|
this.grip && this.grip.dispose(), this.pointer.dispose()
|
|
}, e
|
|
}(),
|
|
Qi = function() {
|
|
function e(e) {
|
|
var t = this;
|
|
this.helper = e, this.controllers = [], this._tmpMatrix = new o.j, this._frameObserver = e._sessionManager.onXRFrameObservable.add(function() {
|
|
if (e._sessionManager._currentXRFrame && e._sessionManager._currentXRFrame.getDevicePose) {
|
|
var i = e._sessionManager._currentXRFrame;
|
|
e._sessionManager._xrSession.getInputSources().forEach(function(n, r) {
|
|
var s = i.getInputPose(n, e._sessionManager._frameOfReference);
|
|
if (s) {
|
|
t.controllers.length <= r && t.controllers.push(new Ki(e.container.getScene()));
|
|
var a = t.controllers[r];
|
|
s.gripMatrix && (a.grip || (a.grip = new Fe.a("controllerGrip", e.container.getScene())), o.j.FromFloat32ArrayToRefScaled(s.gripMatrix, 0, 1, t._tmpMatrix), a.grip.getScene().useRightHandedSystem || t._tmpMatrix.toggleModelMatrixHandInPlace(), a.grip.rotationQuaternion || (a.grip.rotationQuaternion = new o.q), t._tmpMatrix.decompose(a.grip.scaling, a.grip.rotationQuaternion, a.grip.position)), o.j.FromFloat32ArrayToRefScaled(s.targetRay.transformMatrix, 0, 1, t._tmpMatrix), a.pointer.getScene().useRightHandedSystem || t._tmpMatrix.toggleModelMatrixHandInPlace(), a.pointer.rotationQuaternion || (a.pointer.rotationQuaternion = new o.q), t._tmpMatrix.decompose(a.pointer.scaling, a.pointer.rotationQuaternion, a.pointer.position)
|
|
}
|
|
})
|
|
}
|
|
})
|
|
}
|
|
return e.prototype.dispose = function() {
|
|
this.controllers.forEach(function(e) {
|
|
e.dispose()
|
|
}), this.helper._sessionManager.onXRFrameObservable.remove(this._frameObserver)
|
|
}, e
|
|
}(),
|
|
qi = function() {
|
|
function e(e, t) {
|
|
var i = this;
|
|
this._canvas = null, this.canvasContext = null, t || ((t = document.createElement("canvas")).style.cssText = "position:absolute; bottom:0px;right:0px;z-index:10;width:100%;height:100%;background-color: #000000;"), this._setManagedOutputCanvas(t), e.onStateChangedObservable.add(function(t) {
|
|
t == Li.ENTERING_XR ? i._addCanvas() : e.state == Li.NOT_IN_XR && i._removeCanvas()
|
|
})
|
|
}
|
|
return e.prototype.dispose = function() {
|
|
this._removeCanvas(), this._setManagedOutputCanvas(null)
|
|
}, e.prototype._setManagedOutputCanvas = function(e) {
|
|
this._removeCanvas(), e ? (this._canvas = e, this.canvasContext = this._canvas.getContext("xrpresent")) : (this._canvas = null, this.canvasContext = null)
|
|
}, e.prototype._addCanvas = function() {
|
|
this._canvas && document.body.appendChild(this._canvas)
|
|
}, e.prototype._removeCanvas = function() {
|
|
this._canvas && document.body.contains(this._canvas) && document.body.removeChild(this._canvas)
|
|
}, e
|
|
}(),
|
|
Zi = (ji = {
|
|
root: 0,
|
|
found: !1
|
|
}, function(e, t, i, n) {
|
|
ji.root = 0, ji.found = !1;
|
|
var r = t * t - 4 * e * i;
|
|
if (r < 0) return ji;
|
|
var o = Math.sqrt(r),
|
|
s = (-t - o) / (2 * e),
|
|
a = (-t + o) / (2 * e);
|
|
if (s > a) {
|
|
var c = a;
|
|
a = s, s = c
|
|
}
|
|
return s > 0 && s < n ? (ji.root = s, ji.found = !0, ji) : a > 0 && a < n ? (ji.root = a, ji.found = !0, ji) : ji
|
|
}),
|
|
Ji = function() {
|
|
function e() {
|
|
this._collisionPoint = o.x.Zero(), this._planeIntersectionPoint = o.x.Zero(), this._tempVector = o.x.Zero(), this._tempVector2 = o.x.Zero(), this._tempVector3 = o.x.Zero(), this._tempVector4 = o.x.Zero(), this._edge = o.x.Zero(), this._baseToVertex = o.x.Zero(), this._destinationPoint = o.x.Zero(), this._slidePlaneNormal = o.x.Zero(), this._displacementVector = o.x.Zero(), this._radius = o.x.One(), this._retry = 0, this._basePointWorld = o.x.Zero(), this._velocityWorld = o.x.Zero(), this._normalizedVelocity = o.x.Zero(), this._collisionMask = -1
|
|
}
|
|
return Object.defineProperty(e.prototype, "collisionMask", {
|
|
get: function() {
|
|
return this._collisionMask
|
|
},
|
|
set: function(e) {
|
|
this._collisionMask = isNaN(e) ? -1 : e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "slidePlaneNormal", {
|
|
get: function() {
|
|
return this._slidePlaneNormal
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._initialize = function(e, t, i) {
|
|
this._velocity = t, o.x.NormalizeToRef(t, this._normalizedVelocity), this._basePoint = e, e.multiplyToRef(this._radius, this._basePointWorld), t.multiplyToRef(this._radius, this._velocityWorld), this._velocityWorldLength = this._velocityWorld.length(), this._epsilon = i, this.collisionFound = !1
|
|
}, e.prototype._checkPointInTriangle = function(e, t, i, n, r) {
|
|
t.subtractToRef(e, this._tempVector), i.subtractToRef(e, this._tempVector2), o.x.CrossToRef(this._tempVector, this._tempVector2, this._tempVector4);
|
|
var s = o.x.Dot(this._tempVector4, r);
|
|
return !(s < 0) && (n.subtractToRef(e, this._tempVector3), o.x.CrossToRef(this._tempVector2, this._tempVector3, this._tempVector4), !((s = o.x.Dot(this._tempVector4, r)) < 0) && (o.x.CrossToRef(this._tempVector3, this._tempVector, this._tempVector4), (s = o.x.Dot(this._tempVector4, r)) >= 0))
|
|
}, e.prototype._canDoCollision = function(e, t, i, n) {
|
|
var r = o.x.Distance(this._basePointWorld, e),
|
|
s = Math.max(this._radius.x, this._radius.y, this._radius.z);
|
|
return !(r > this._velocityWorldLength + s + t) && !! function(e, t, i, n) {
|
|
return !(e.x > i.x + n || i.x - n > t.x || e.y > i.y + n || i.y - n > t.y || e.z > i.z + n || i.z - n > t.z)
|
|
}(i, n, this._basePointWorld, this._velocityWorldLength + s)
|
|
}, e.prototype._testTriangle = function(e, t, i, n, r, s) {
|
|
var a, c = !1;
|
|
t || (t = []), t[e] || (t[e] = new o.n(0, 0, 0, 0), t[e].copyFromPoints(i, n, r));
|
|
var l = t[e];
|
|
if (s || l.isFrontFacingTo(this._normalizedVelocity, 0)) {
|
|
var u = l.signedDistanceTo(this._basePoint),
|
|
h = o.x.Dot(l.normal, this._velocity);
|
|
if (0 == h) {
|
|
if (Math.abs(u) >= 1) return;
|
|
c = !0, a = 0
|
|
} else {
|
|
var d = (1 - u) / h;
|
|
if ((a = (-1 - u) / h) > d) {
|
|
var f = d;
|
|
d = a, a = f
|
|
}
|
|
if (a > 1 || d < 0) return;
|
|
a < 0 && (a = 0), a > 1 && (a = 1)
|
|
}
|
|
this._collisionPoint.copyFromFloats(0, 0, 0);
|
|
var p = !1,
|
|
_ = 1;
|
|
if (c || (this._basePoint.subtractToRef(l.normal, this._planeIntersectionPoint), this._velocity.scaleToRef(a, this._tempVector), this._planeIntersectionPoint.addInPlace(this._tempVector), this._checkPointInTriangle(this._planeIntersectionPoint, i, n, r, l.normal) && (p = !0, _ = a, this._collisionPoint.copyFrom(this._planeIntersectionPoint))), !p) {
|
|
var g = this._velocity.lengthSquared(),
|
|
m = g;
|
|
this._basePoint.subtractToRef(i, this._tempVector);
|
|
var v = 2 * o.x.Dot(this._velocity, this._tempVector),
|
|
y = this._tempVector.lengthSquared() - 1,
|
|
b = Zi(m, v, y, _);
|
|
b.found && (_ = b.root, p = !0, this._collisionPoint.copyFrom(i)), this._basePoint.subtractToRef(n, this._tempVector), v = 2 * o.x.Dot(this._velocity, this._tempVector), y = this._tempVector.lengthSquared() - 1, (b = Zi(m, v, y, _)).found && (_ = b.root, p = !0, this._collisionPoint.copyFrom(n)), this._basePoint.subtractToRef(r, this._tempVector), v = 2 * o.x.Dot(this._velocity, this._tempVector), y = this._tempVector.lengthSquared() - 1, (b = Zi(m, v, y, _)).found && (_ = b.root, p = !0, this._collisionPoint.copyFrom(r)), n.subtractToRef(i, this._edge), i.subtractToRef(this._basePoint, this._baseToVertex);
|
|
var T = this._edge.lengthSquared(),
|
|
E = o.x.Dot(this._edge, this._velocity),
|
|
A = o.x.Dot(this._edge, this._baseToVertex);
|
|
if (m = T * -g + E * E, v = T * (2 * o.x.Dot(this._velocity, this._baseToVertex)) - 2 * E * A, y = T * (1 - this._baseToVertex.lengthSquared()) + A * A, (b = Zi(m, v, y, _)).found) {
|
|
var x = (E * b.root - A) / T;
|
|
x >= 0 && x <= 1 && (_ = b.root, p = !0, this._edge.scaleInPlace(x), i.addToRef(this._edge, this._collisionPoint))
|
|
}
|
|
r.subtractToRef(n, this._edge), n.subtractToRef(this._basePoint, this._baseToVertex), T = this._edge.lengthSquared(), E = o.x.Dot(this._edge, this._velocity), A = o.x.Dot(this._edge, this._baseToVertex), m = T * -g + E * E, v = T * (2 * o.x.Dot(this._velocity, this._baseToVertex)) - 2 * E * A, y = T * (1 - this._baseToVertex.lengthSquared()) + A * A, (b = Zi(m, v, y, _)).found && (x = (E * b.root - A) / T) >= 0 && x <= 1 && (_ = b.root, p = !0, this._edge.scaleInPlace(x), n.addToRef(this._edge, this._collisionPoint)), i.subtractToRef(r, this._edge), r.subtractToRef(this._basePoint, this._baseToVertex), T = this._edge.lengthSquared(), E = o.x.Dot(this._edge, this._velocity), A = o.x.Dot(this._edge, this._baseToVertex), m = T * -g + E * E, v = T * (2 * o.x.Dot(this._velocity, this._baseToVertex)) - 2 * E * A, y = T * (1 - this._baseToVertex.lengthSquared()) + A * A, (b = Zi(m, v, y, _)).found && (x = (E * b.root - A) / T) >= 0 && x <= 1 && (_ = b.root, p = !0, this._edge.scaleInPlace(x), r.addToRef(this._edge, this._collisionPoint))
|
|
}
|
|
if (p) {
|
|
var R = _ * this._velocity.length();
|
|
(!this.collisionFound || R < this._nearestDistance) && (this.intersectionPoint ? this.intersectionPoint.copyFrom(this._collisionPoint) : this.intersectionPoint = this._collisionPoint.clone(), this._nearestDistance = R, this.collisionFound = !0)
|
|
}
|
|
}
|
|
}, e.prototype._collide = function(e, t, i, n, r, o, s) {
|
|
for (var a = n; a < r; a += 3) {
|
|
var c = t[i[a] - o],
|
|
l = t[i[a + 1] - o],
|
|
u = t[i[a + 2] - o];
|
|
this._testTriangle(a, e, u, l, c, s)
|
|
}
|
|
}, e.prototype._getResponse = function(e, t) {
|
|
e.addToRef(t, this._destinationPoint), t.scaleInPlace(this._nearestDistance / t.length()), this._basePoint.addToRef(t, e), e.subtractToRef(this.intersectionPoint, this._slidePlaneNormal), this._slidePlaneNormal.normalize(), this._slidePlaneNormal.scaleToRef(this._epsilon, this._displacementVector), e.addInPlace(this._displacementVector), this.intersectionPoint.addInPlace(this._displacementVector), this._slidePlaneNormal.scaleInPlace(o.n.SignedDistanceToPlaneFromPositionAndNormal(this.intersectionPoint, this._slidePlaneNormal, this._destinationPoint)), this._destinationPoint.subtractInPlace(this._slidePlaneNormal), this._destinationPoint.subtractToRef(this.intersectionPoint, t)
|
|
}, e
|
|
}(),
|
|
$i = function() {
|
|
function e() {
|
|
this._scaledPosition = o.x.Zero(), this._scaledVelocity = o.x.Zero(), this._finalPosition = o.x.Zero()
|
|
}
|
|
return e.prototype.getNewPosition = function(e, t, i, n, r, o, s) {
|
|
e.divideToRef(i._radius, this._scaledPosition), t.divideToRef(i._radius, this._scaledVelocity), i.collidedMesh = null, i._retry = 0, i._initialVelocity = this._scaledVelocity, i._initialPosition = this._scaledPosition, this._collideWithWorld(this._scaledPosition, this._scaledVelocity, i, n, this._finalPosition, r), this._finalPosition.multiplyInPlace(i._radius), o(s, this._finalPosition, i.collidedMesh)
|
|
}, e.prototype.createCollider = function() {
|
|
return new Ji
|
|
}, e.prototype.init = function(e) {
|
|
this._scene = e
|
|
}, e.prototype._collideWithWorld = function(e, t, i, n, r, o) {
|
|
void 0 === o && (o = null);
|
|
var s = 10 * ge.b.CollisionsEpsilon;
|
|
if (i._retry >= n) r.copyFrom(e);
|
|
else {
|
|
var a = o ? o.collisionMask : i.collisionMask;
|
|
i._initialize(e, t, s);
|
|
for (var c = 0; c < this._scene.meshes.length; c++) {
|
|
var l = this._scene.meshes[c];
|
|
l.isEnabled() && l.checkCollisions && l.subMeshes && l !== o && 0 != (a & l.collisionGroup) && l._checkCollision(i)
|
|
}
|
|
i.collisionFound ? (0 === t.x && 0 === t.y && 0 === t.z || i._getResponse(e, t), t.length() <= s ? r.copyFrom(e) : (i._retry++, this._collideWithWorld(e, t, i, n, r, o))) : e.addToRef(t, r)
|
|
}
|
|
}, e
|
|
}();
|
|
W.a.CollisionCoordinatorFactory = function() {
|
|
return new $i
|
|
};
|
|
var en = i(50),
|
|
tn = i(81),
|
|
nn = i(108),
|
|
rn = i(77),
|
|
on = i(43),
|
|
sn = i(82),
|
|
an = function() {
|
|
function e(e, t, i, n, r, o) {
|
|
this.entries = new Array, this._boundingVectors = new Array, this._capacity = i, this._depth = n, this._maxDepth = r, this._creationFunc = o, this._minPoint = e, this._maxPoint = t, this._boundingVectors.push(e.clone()), this._boundingVectors.push(t.clone()), this._boundingVectors.push(e.clone()), this._boundingVectors[2].x = t.x, this._boundingVectors.push(e.clone()), this._boundingVectors[3].y = t.y, this._boundingVectors.push(e.clone()), this._boundingVectors[4].z = t.z, this._boundingVectors.push(t.clone()), this._boundingVectors[5].z = e.z, this._boundingVectors.push(t.clone()), this._boundingVectors[6].x = e.x, this._boundingVectors.push(t.clone()), this._boundingVectors[7].y = e.y
|
|
}
|
|
return Object.defineProperty(e.prototype, "capacity", {
|
|
get: function() {
|
|
return this._capacity
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "minPoint", {
|
|
get: function() {
|
|
return this._minPoint
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "maxPoint", {
|
|
get: function() {
|
|
return this._maxPoint
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.addEntry = function(e) {
|
|
if (this.blocks)
|
|
for (var t = 0; t < this.blocks.length; t++) {
|
|
this.blocks[t].addEntry(e)
|
|
} else this._creationFunc(e, this), this.entries.length > this.capacity && this._depth < this._maxDepth && this.createInnerBlocks()
|
|
}, e.prototype.removeEntry = function(e) {
|
|
if (this.blocks)
|
|
for (var t = 0; t < this.blocks.length; t++) {
|
|
this.blocks[t].removeEntry(e)
|
|
} else {
|
|
var i = this.entries.indexOf(e);
|
|
i > -1 && this.entries.splice(i, 1)
|
|
}
|
|
}, e.prototype.addEntries = function(e) {
|
|
for (var t = 0; t < e.length; t++) {
|
|
var i = e[t];
|
|
this.addEntry(i)
|
|
}
|
|
}, e.prototype.select = function(e, t, i) {
|
|
if (rn.a.IsInFrustum(this._boundingVectors, e)) {
|
|
if (this.blocks) {
|
|
for (var n = 0; n < this.blocks.length; n++) {
|
|
this.blocks[n].select(e, t, i)
|
|
}
|
|
return
|
|
}
|
|
i ? t.concat(this.entries) : t.concatWithNoDuplicate(this.entries)
|
|
}
|
|
}, e.prototype.intersects = function(e, t, i, n) {
|
|
if (rn.a.IntersectsSphere(this._minPoint, this._maxPoint, e, t)) {
|
|
if (this.blocks) {
|
|
for (var r = 0; r < this.blocks.length; r++) {
|
|
this.blocks[r].intersects(e, t, i, n)
|
|
}
|
|
return
|
|
}
|
|
n ? i.concat(this.entries) : i.concatWithNoDuplicate(this.entries)
|
|
}
|
|
}, e.prototype.intersectsRay = function(e, t) {
|
|
if (e.intersectsBoxMinMax(this._minPoint, this._maxPoint)) {
|
|
if (this.blocks) {
|
|
for (var i = 0; i < this.blocks.length; i++) {
|
|
this.blocks[i].intersectsRay(e, t)
|
|
}
|
|
return
|
|
}
|
|
t.concatWithNoDuplicate(this.entries)
|
|
}
|
|
}, e.prototype.createInnerBlocks = function() {
|
|
e._CreateBlocks(this._minPoint, this._maxPoint, this.entries, this._capacity, this._depth, this._maxDepth, this, this._creationFunc)
|
|
}, e._CreateBlocks = function(t, i, n, r, s, a, c, l) {
|
|
c.blocks = new Array;
|
|
for (var u = new o.x((i.x - t.x) / 2, (i.y - t.y) / 2, (i.z - t.z) / 2), h = 0; h < 2; h++)
|
|
for (var d = 0; d < 2; d++)
|
|
for (var f = 0; f < 2; f++) {
|
|
var p = new e(t.add(u.multiplyByFloats(h, d, f)), t.add(u.multiplyByFloats(h + 1, d + 1, f + 1)), r, s + 1, a, l);
|
|
p.addEntries(n), c.blocks.push(p)
|
|
}
|
|
}, e
|
|
}(),
|
|
cn = function() {
|
|
function e(e, t, i) {
|
|
void 0 === i && (i = 2), this.maxDepth = i, this.dynamicContent = new Array, this._maxBlockCapacity = t || 64, this._selectionContent = new kt.b(1024), this._creationFunc = e
|
|
}
|
|
return e.prototype.update = function(e, t, i) {
|
|
an._CreateBlocks(e, t, i, this._maxBlockCapacity, 0, this.maxDepth, this, this._creationFunc)
|
|
}, e.prototype.addMesh = function(e) {
|
|
for (var t = 0; t < this.blocks.length; t++) {
|
|
this.blocks[t].addEntry(e)
|
|
}
|
|
}, e.prototype.removeMesh = function(e) {
|
|
for (var t = 0; t < this.blocks.length; t++) {
|
|
this.blocks[t].removeEntry(e)
|
|
}
|
|
}, e.prototype.select = function(e, t) {
|
|
this._selectionContent.reset();
|
|
for (var i = 0; i < this.blocks.length; i++) {
|
|
this.blocks[i].select(e, this._selectionContent, t)
|
|
}
|
|
return t ? this._selectionContent.concat(this.dynamicContent) : this._selectionContent.concatWithNoDuplicate(this.dynamicContent), this._selectionContent
|
|
}, e.prototype.intersects = function(e, t, i) {
|
|
this._selectionContent.reset();
|
|
for (var n = 0; n < this.blocks.length; n++) {
|
|
this.blocks[n].intersects(e, t, this._selectionContent, i)
|
|
}
|
|
return i ? this._selectionContent.concat(this.dynamicContent) : this._selectionContent.concatWithNoDuplicate(this.dynamicContent), this._selectionContent
|
|
}, e.prototype.intersectsRay = function(e) {
|
|
this._selectionContent.reset();
|
|
for (var t = 0; t < this.blocks.length; t++) {
|
|
this.blocks[t].intersectsRay(e, this._selectionContent)
|
|
}
|
|
return this._selectionContent.concatWithNoDuplicate(this.dynamicContent), this._selectionContent
|
|
}, e.CreationFuncForMeshes = function(e, t) {
|
|
var i = e.getBoundingInfo();
|
|
!e.isBlocked && i.boundingBox.intersectsMinMax(t.minPoint, t.maxPoint) && t.entries.push(e)
|
|
}, e.CreationFuncForSubMeshes = function(e, t) {
|
|
e.getBoundingInfo().boundingBox.intersectsMinMax(t.minPoint, t.maxPoint) && t.entries.push(e)
|
|
}, e
|
|
}();
|
|
W.a.prototype.createOrUpdateSelectionOctree = function(e, t) {
|
|
void 0 === e && (e = 64), void 0 === t && (t = 2);
|
|
var i = this._getComponent(Ae.a.NAME_OCTREE);
|
|
i || (i = new ln(this), this._addComponent(i)), this._selectionOctree || (this._selectionOctree = new cn(cn.CreationFuncForMeshes, e, t));
|
|
var n = this.getWorldExtends();
|
|
return this._selectionOctree.update(n.min, n.max, this.meshes), this._selectionOctree
|
|
}, Object.defineProperty(W.a.prototype, "selectionOctree", {
|
|
get: function() {
|
|
return this._selectionOctree
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Fe.a.prototype.createOrUpdateSubmeshesOctree = function(e, t) {
|
|
void 0 === e && (e = 64), void 0 === t && (t = 2);
|
|
var i = this.getScene(),
|
|
n = i._getComponent(Ae.a.NAME_OCTREE);
|
|
n || (n = new ln(i), i._addComponent(n)), this._submeshesOctree || (this._submeshesOctree = new cn(cn.CreationFuncForSubMeshes, e, t)), this.computeWorldMatrix(!0);
|
|
var r = this.getBoundingInfo().boundingBox;
|
|
return this._submeshesOctree.update(r.minimumWorld, r.maximumWorld, this.subMeshes), this._submeshesOctree
|
|
};
|
|
var ln = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_OCTREE, this.checksIsEnabled = !0, this._tempRay = new It.a(o.x.Zero(), new o.x(1, 1, 1)), this.scene = e, this.scene.getActiveMeshCandidates = this.getActiveMeshCandidates.bind(this), this.scene.getActiveSubMeshCandidates = this.getActiveSubMeshCandidates.bind(this), this.scene.getCollidingSubMeshCandidates = this.getCollidingSubMeshCandidates.bind(this), this.scene.getIntersectingSubMeshCandidates = this.getIntersectingSubMeshCandidates.bind(this)
|
|
}
|
|
return e.prototype.register = function() {
|
|
var e = this;
|
|
this.scene.onMeshRemovedObservable.add(function(t) {
|
|
var i = e.scene.selectionOctree;
|
|
if (null != i) {
|
|
var n = i.dynamicContent.indexOf(t); - 1 !== n && i.dynamicContent.splice(n, 1)
|
|
}
|
|
}), this.scene.onMeshImportedObservable.add(function(t) {
|
|
var i = e.scene.selectionOctree;
|
|
null != i && i.addMesh(t)
|
|
})
|
|
}, e.prototype.getActiveMeshCandidates = function() {
|
|
return this.scene._selectionOctree ? this.scene._selectionOctree.select(this.scene.frustumPlanes) : this.scene._getDefaultMeshCandidates()
|
|
}, e.prototype.getActiveSubMeshCandidates = function(e) {
|
|
return e._submeshesOctree && e.useOctreeForRenderingSelection ? e._submeshesOctree.select(this.scene.frustumPlanes) : this.scene._getDefaultSubMeshCandidates(e)
|
|
}, e.prototype.getIntersectingSubMeshCandidates = function(e, t) {
|
|
return e._submeshesOctree && e.useOctreeForPicking ? (It.a.TransformToRef(t, e.getWorldMatrix(), this._tempRay), e._submeshesOctree.intersectsRay(this._tempRay)) : this.scene._getDefaultSubMeshCandidates(e)
|
|
}, e.prototype.getCollidingSubMeshCandidates = function(e, t) {
|
|
if (e._submeshesOctree && e.useOctreeForCollisions) {
|
|
var i = t._velocityWorldLength + Math.max(t._radius.x, t._radius.y, t._radius.z);
|
|
return e._submeshesOctree.intersects(t._basePointWorld, i)
|
|
}
|
|
return this.scene._getDefaultSubMeshCandidates(e)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.dispose = function() {}, e
|
|
}(),
|
|
un = i(74),
|
|
hn = i(128),
|
|
dn = function() {
|
|
return function() {
|
|
this._timeElapsedQueryEnded = !1
|
|
}
|
|
}(),
|
|
fn = function() {
|
|
return function() {
|
|
this.occlusionInternalRetryCounter = 0, this.isOcclusionQueryInProgress = !1, this.isOccluded = !1, this.occlusionRetryCount = -1, this.occlusionType = Fe.a.OCCLUSION_TYPE_NONE, this.occlusionQueryAlgorithmType = Fe.a.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE
|
|
}
|
|
}();
|
|
ge.b.prototype.createQuery = function() {
|
|
return this._gl.createQuery()
|
|
}, ge.b.prototype.deleteQuery = function(e) {
|
|
return this._gl.deleteQuery(e), this
|
|
}, ge.b.prototype.isQueryResultAvailable = function(e) {
|
|
return this._gl.getQueryParameter(e, this._gl.QUERY_RESULT_AVAILABLE)
|
|
}, ge.b.prototype.getQueryResult = function(e) {
|
|
return this._gl.getQueryParameter(e, this._gl.QUERY_RESULT)
|
|
}, ge.b.prototype.beginOcclusionQuery = function(e, t) {
|
|
var i = this._getGlAlgorithmType(e);
|
|
return this._gl.beginQuery(i, t), this
|
|
}, ge.b.prototype.endOcclusionQuery = function(e) {
|
|
var t = this._getGlAlgorithmType(e);
|
|
return this._gl.endQuery(t), this
|
|
}, ge.b.prototype._createTimeQuery = function() {
|
|
var e = this.getCaps().timerQuery;
|
|
return e.createQueryEXT ? e.createQueryEXT() : this.createQuery()
|
|
}, ge.b.prototype._deleteTimeQuery = function(e) {
|
|
var t = this.getCaps().timerQuery;
|
|
t.deleteQueryEXT ? t.deleteQueryEXT(e) : this.deleteQuery(e)
|
|
}, ge.b.prototype._getTimeQueryResult = function(e) {
|
|
var t = this.getCaps().timerQuery;
|
|
return t.getQueryObjectEXT ? t.getQueryObjectEXT(e, t.QUERY_RESULT_EXT) : this.getQueryResult(e)
|
|
}, ge.b.prototype._getTimeQueryAvailability = function(e) {
|
|
var t = this.getCaps().timerQuery;
|
|
return t.getQueryObjectEXT ? t.getQueryObjectEXT(e, t.QUERY_RESULT_AVAILABLE_EXT) : this.isQueryResultAvailable(e)
|
|
}, ge.b.prototype.startTimeQuery = function() {
|
|
var e = this.getCaps(),
|
|
t = e.timerQuery;
|
|
if (!t) return null;
|
|
var i = new dn;
|
|
if (this._gl.getParameter(t.GPU_DISJOINT_EXT), e.canUseTimestampForTimerQuery) i._startTimeQuery = this._createTimeQuery(), t.queryCounterEXT(i._startTimeQuery, t.TIMESTAMP_EXT);
|
|
else {
|
|
if (this._currentNonTimestampToken) return this._currentNonTimestampToken;
|
|
i._timeElapsedQuery = this._createTimeQuery(), t.beginQueryEXT ? t.beginQueryEXT(t.TIME_ELAPSED_EXT, i._timeElapsedQuery) : this._gl.beginQuery(t.TIME_ELAPSED_EXT, i._timeElapsedQuery), this._currentNonTimestampToken = i
|
|
}
|
|
return i
|
|
}, ge.b.prototype.endTimeQuery = function(e) {
|
|
var t = this.getCaps(),
|
|
i = t.timerQuery;
|
|
if (!i || !e) return -1;
|
|
if (t.canUseTimestampForTimerQuery) {
|
|
if (!e._startTimeQuery) return -1;
|
|
e._endTimeQuery || (e._endTimeQuery = this._createTimeQuery(), i.queryCounterEXT(e._endTimeQuery, i.TIMESTAMP_EXT))
|
|
} else if (!e._timeElapsedQueryEnded) {
|
|
if (!e._timeElapsedQuery) return -1;
|
|
i.endQueryEXT ? i.endQueryEXT(i.TIME_ELAPSED_EXT) : this._gl.endQuery(i.TIME_ELAPSED_EXT), e._timeElapsedQueryEnded = !0
|
|
}
|
|
var n = this._gl.getParameter(i.GPU_DISJOINT_EXT),
|
|
r = !1;
|
|
if (e._endTimeQuery ? r = this._getTimeQueryAvailability(e._endTimeQuery) : e._timeElapsedQuery && (r = this._getTimeQueryAvailability(e._timeElapsedQuery)), r && !n) {
|
|
var o = 0;
|
|
if (t.canUseTimestampForTimerQuery) {
|
|
if (!e._startTimeQuery || !e._endTimeQuery) return -1;
|
|
var s = this._getTimeQueryResult(e._startTimeQuery);
|
|
o = this._getTimeQueryResult(e._endTimeQuery) - s, this._deleteTimeQuery(e._startTimeQuery), this._deleteTimeQuery(e._endTimeQuery), e._startTimeQuery = null, e._endTimeQuery = null
|
|
} else {
|
|
if (!e._timeElapsedQuery) return -1;
|
|
o = this._getTimeQueryResult(e._timeElapsedQuery), this._deleteTimeQuery(e._timeElapsedQuery), e._timeElapsedQuery = null, e._timeElapsedQueryEnded = !1, this._currentNonTimestampToken = null
|
|
}
|
|
return o
|
|
}
|
|
return -1
|
|
}, ge.b.prototype._getGlAlgorithmType = function(e) {
|
|
return e === Fe.a.OCCLUSION_ALGORITHM_TYPE_CONSERVATIVE ? this._gl.ANY_SAMPLES_PASSED_CONSERVATIVE : this._gl.ANY_SAMPLES_PASSED
|
|
}, Object.defineProperty(Fe.a.prototype, "isOcclusionQueryInProgress", {
|
|
get: function() {
|
|
return this._occlusionDataStorage.isOcclusionQueryInProgress
|
|
},
|
|
enumerable: !1,
|
|
configurable: !0
|
|
}), Object.defineProperty(Fe.a.prototype, "_occlusionDataStorage", {
|
|
get: function() {
|
|
return this.__occlusionDataStorage || (this.__occlusionDataStorage = new fn), this.__occlusionDataStorage
|
|
},
|
|
enumerable: !1,
|
|
configurable: !0
|
|
}), Object.defineProperty(Fe.a.prototype, "isOccluded", {
|
|
get: function() {
|
|
return this._occlusionDataStorage.isOccluded
|
|
},
|
|
set: function(e) {
|
|
this._occlusionDataStorage.isOccluded = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(Fe.a.prototype, "occlusionQueryAlgorithmType", {
|
|
get: function() {
|
|
return this._occlusionDataStorage.occlusionQueryAlgorithmType
|
|
},
|
|
set: function(e) {
|
|
this._occlusionDataStorage.occlusionQueryAlgorithmType = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(Fe.a.prototype, "occlusionType", {
|
|
get: function() {
|
|
return this._occlusionDataStorage.occlusionType
|
|
},
|
|
set: function(e) {
|
|
this._occlusionDataStorage.occlusionType = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(Fe.a.prototype, "occlusionRetryCount", {
|
|
get: function() {
|
|
return this._occlusionDataStorage.occlusionRetryCount
|
|
},
|
|
set: function(e) {
|
|
this._occlusionDataStorage.occlusionRetryCount = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Fe.a.prototype._checkOcclusionQuery = function() {
|
|
var e = this._occlusionDataStorage;
|
|
if (e.occlusionType === Fe.a.OCCLUSION_TYPE_NONE) return e.isOccluded = !1, !1;
|
|
var t = this.getEngine();
|
|
if (t.webGLVersion < 2) return e.isOccluded = !1, !1;
|
|
if (!t.isQueryResultAvailable) return e.isOccluded = !1, !1;
|
|
if (this.isOcclusionQueryInProgress && this._occlusionQuery)
|
|
if (t.isQueryResultAvailable(this._occlusionQuery)) {
|
|
var i = t.getQueryResult(this._occlusionQuery);
|
|
e.isOcclusionQueryInProgress = !1, e.occlusionInternalRetryCounter = 0, e.isOccluded = 1 !== i
|
|
} else {
|
|
if (e.occlusionInternalRetryCounter++, !(-1 !== e.occlusionRetryCount && e.occlusionInternalRetryCounter > e.occlusionRetryCount)) return !1;
|
|
e.isOcclusionQueryInProgress = !1, e.occlusionInternalRetryCounter = 0, e.isOccluded = e.occlusionType !== Fe.a.OCCLUSION_TYPE_OPTIMISTIC && e.isOccluded
|
|
} var n = this.getScene();
|
|
if (n.getBoundingBoxRenderer) {
|
|
var r = n.getBoundingBoxRenderer();
|
|
this._occlusionQuery || (this._occlusionQuery = t.createQuery()), t.beginOcclusionQuery(e.occlusionQueryAlgorithmType, this._occlusionQuery), r.renderOcclusionBoundingBox(this), t.endOcclusionQuery(e.occlusionQueryAlgorithmType), this._occlusionDataStorage.isOcclusionQueryInProgress = !0
|
|
}
|
|
return e.isOccluded
|
|
};
|
|
ge.b.prototype.createTransformFeedback = function() {
|
|
return this._gl.createTransformFeedback()
|
|
}, ge.b.prototype.deleteTransformFeedback = function(e) {
|
|
this._gl.deleteTransformFeedback(e)
|
|
}, ge.b.prototype.bindTransformFeedback = function(e) {
|
|
this._gl.bindTransformFeedback(this._gl.TRANSFORM_FEEDBACK, e)
|
|
}, ge.b.prototype.beginTransformFeedback = function(e) {
|
|
void 0 === e && (e = !0), this._gl.beginTransformFeedback(e ? this._gl.POINTS : this._gl.TRIANGLES)
|
|
}, ge.b.prototype.endTransformFeedback = function() {
|
|
this._gl.endTransformFeedback()
|
|
}, ge.b.prototype.setTranformFeedbackVaryings = function(e, t) {
|
|
this._gl.transformFeedbackVaryings(e, t, this._gl.INTERLEAVED_ATTRIBS)
|
|
}, ge.b.prototype.bindTransformFeedbackBuffer = function(e) {
|
|
this._gl.bindBufferBase(this._gl.TRANSFORM_FEEDBACK_BUFFER, 0, e ? e.underlyingResource : null)
|
|
};
|
|
var pn = i(107),
|
|
_n = function() {
|
|
function e() {}
|
|
return e.COPY = 1, e.CUT = 2, e.PASTE = 3, e
|
|
}(),
|
|
gn = function() {
|
|
function e(e, t) {
|
|
this.type = e, this.event = t
|
|
}
|
|
return e.GetTypeFromCharacter = function(e) {
|
|
switch (e) {
|
|
case 67:
|
|
return _n.COPY;
|
|
case 86:
|
|
return _n.PASTE;
|
|
case 88:
|
|
return _n.CUT;
|
|
default:
|
|
return -1
|
|
}
|
|
}, e
|
|
}(),
|
|
mn = i(59),
|
|
vn = i(55),
|
|
yn = function() {
|
|
function e(e, t, i) {
|
|
this.lengthComputable = e, this.loaded = t, this.total = i
|
|
}
|
|
return e.FromProgressEvent = function(t) {
|
|
return new e(t.lengthComputable, t.loaded, t.total)
|
|
}, e
|
|
}(),
|
|
bn = function() {
|
|
function e() {}
|
|
return Object.defineProperty(e, "ForceFullSceneLoadingForIncremental", {
|
|
get: function() {
|
|
return vn.a.ForceFullSceneLoadingForIncremental
|
|
},
|
|
set: function(e) {
|
|
vn.a.ForceFullSceneLoadingForIncremental = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "ShowLoadingScreen", {
|
|
get: function() {
|
|
return vn.a.ShowLoadingScreen
|
|
},
|
|
set: function(e) {
|
|
vn.a.ShowLoadingScreen = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "loggingLevel", {
|
|
get: function() {
|
|
return vn.a.loggingLevel
|
|
},
|
|
set: function(e) {
|
|
vn.a.loggingLevel = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e, "CleanBoneMatrixWeights", {
|
|
get: function() {
|
|
return vn.a.CleanBoneMatrixWeights
|
|
},
|
|
set: function(e) {
|
|
vn.a.CleanBoneMatrixWeights = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e._getDefaultPlugin = function() {
|
|
return e._registeredPlugins[".babylon"]
|
|
}, e._getPluginForExtension = function(t) {
|
|
var i = e._registeredPlugins[t];
|
|
return i || (p.a.Warn("Unable to find a plugin to load " + t + " files. Trying to use .babylon default plugin. To load from a specific filetype (eg. gltf) see: http://doc.babylonjs.com/how_to/load_from_any_file_type"), e._getDefaultPlugin())
|
|
}, e._getPluginForDirectLoad = function(t) {
|
|
for (var i in e._registeredPlugins) {
|
|
var n = e._registeredPlugins[i].plugin;
|
|
if (n.canDirectLoad && n.canDirectLoad(t)) return e._registeredPlugins[i]
|
|
}
|
|
return e._getDefaultPlugin()
|
|
}, e._getPluginForFilename = function(t) {
|
|
var i = t.indexOf("?"); - 1 !== i && (t = t.substring(0, i));
|
|
var n = t.lastIndexOf("."),
|
|
r = t.substring(n, t.length).toLowerCase();
|
|
return e._getPluginForExtension(r)
|
|
}, e._getDirectLoad = function(e) {
|
|
return "data:" === e.substr(0, 5) ? e.substr(5) : null
|
|
}, e._loadData = function(t, i, n, r, o, s, a) {
|
|
var c, l = e._getDirectLoad(t.name),
|
|
u = a ? e._getPluginForExtension(a) : l ? e._getPluginForDirectLoad(t.name) : e._getPluginForFilename(t.name);
|
|
if (!(c = u.plugin.createPlugin ? u.plugin.createPlugin() : u.plugin)) throw "The loader plugin corresponding to the file type you are trying to load has not been found. If using es6, please import the plugin you wish to use before.";
|
|
var h, d = u.isBinary;
|
|
e.OnPluginActivatedObservable.notifyObservers(c);
|
|
var f = function(e, t) {
|
|
i.isDisposed ? o("Scene has been disposed") : (i.offlineProvider = h, n(c, e, t))
|
|
},
|
|
p = null,
|
|
_ = !1,
|
|
g = c.onDisposeObservable;
|
|
g && g.add(function() {
|
|
_ = !0, p && (p.abort(), p = null), s()
|
|
});
|
|
var m = function() {
|
|
_ || (p = ye.h.LoadFile(t.url, f, r ? function(e) {
|
|
r(yn.FromProgressEvent(e))
|
|
} : void 0, h, d, function(e, t) {
|
|
o("Failed to load scene." + (t ? " " + t.message : ""), t)
|
|
}))
|
|
};
|
|
if (l) return f(l), c;
|
|
var v = t.file || mn.a.FilesToLoad[t.name.toLowerCase()];
|
|
if (-1 === t.rootUrl.indexOf("file:") || -1 !== t.rootUrl.indexOf("file:") && !v) {
|
|
var y = i.getEngine(),
|
|
b = y.enableOfflineSupport;
|
|
if (b) {
|
|
for (var T = !1, E = 0, A = i.disableOfflineSupportExceptionRules; E < A.length; E++) {
|
|
if (A[E].test(t.url)) {
|
|
T = !0;
|
|
break
|
|
}
|
|
}
|
|
b = !T
|
|
}
|
|
b && ge.b.OfflineProviderFactory ? h = ge.b.OfflineProviderFactory(t.url, m, y.disableManifestCheck) : m()
|
|
} else v ? p = ye.h.ReadFile(v, f, r, d) : o("Unable to find file named " + t.name);
|
|
return c
|
|
}, e._getFileInfo = function(e, t) {
|
|
var i, n, r = null;
|
|
if (t)
|
|
if (t.name) {
|
|
var o = t;
|
|
i = e + o.name, n = o.name, r = o
|
|
} else {
|
|
var s = t;
|
|
if ("/" === s.substr(0, 1)) return ye.h.Error("Wrong sceneFilename parameter"), null;
|
|
i = e + s, n = s
|
|
}
|
|
else i = e, n = ye.h.GetFilename(e), e = ye.h.GetFolderPath(e);
|
|
return {
|
|
url: i,
|
|
rootUrl: e,
|
|
name: n,
|
|
file: r
|
|
}
|
|
}, e.GetPluginForExtension = function(t) {
|
|
return e._getPluginForExtension(t).plugin
|
|
}, e.IsPluginForExtensionAvailable = function(t) {
|
|
return !!e._registeredPlugins[t]
|
|
}, e.RegisterPlugin = function(t) {
|
|
if ("string" == typeof t.extensions) {
|
|
var i = t.extensions;
|
|
e._registeredPlugins[i.toLowerCase()] = {
|
|
plugin: t,
|
|
isBinary: !1
|
|
}
|
|
} else {
|
|
var n = t.extensions;
|
|
Object.keys(n).forEach(function(i) {
|
|
e._registeredPlugins[i.toLowerCase()] = {
|
|
plugin: t,
|
|
isBinary: n[i].isBinary
|
|
}
|
|
})
|
|
}
|
|
}, e.ImportMesh = function(t, i, n, r, o, s, a, c) {
|
|
if (void 0 === n && (n = ""), void 0 === r && (r = P.a.LastCreatedScene), void 0 === o && (o = null), void 0 === s && (s = null), void 0 === a && (a = null), void 0 === c && (c = null), !r) return p.a.Error("No scene available to import mesh to"), null;
|
|
var l = e._getFileInfo(i, n);
|
|
if (!l) return null;
|
|
var u = {};
|
|
r._addPendingData(u);
|
|
var h = function() {
|
|
r._removePendingData(u)
|
|
},
|
|
d = function(e, t) {
|
|
var i = "Unable to import meshes from " + l.url + ": " + e;
|
|
a ? a(r, i, t) : p.a.Error(i), h()
|
|
},
|
|
f = s ? function(e) {
|
|
try {
|
|
s(e)
|
|
} catch (e) {
|
|
d("Error in onProgress callback", e)
|
|
}
|
|
} : void 0,
|
|
_ = function(e, t, i, n) {
|
|
if (r.importedMeshesFiles.push(l.url), o) try {
|
|
o(e, t, i, n)
|
|
} catch (e) {
|
|
d("Error in onSuccess callback", e)
|
|
}
|
|
r._removePendingData(u)
|
|
};
|
|
return e._loadData(l, r, function(e, i, n) {
|
|
if (e.rewriteRootURL && (l.rootUrl = e.rewriteRootURL(l.rootUrl, n)), e.importMesh) {
|
|
var o = e,
|
|
s = new Array,
|
|
a = new Array,
|
|
c = new Array;
|
|
if (!o.importMesh(t, r, i, l.rootUrl, s, a, c, d)) return;
|
|
r.loadingPluginName = e.name, _(s, a, c, [])
|
|
} else {
|
|
e.importMeshAsync(t, r, i, l.rootUrl, f, l.name).then(function(t) {
|
|
r.loadingPluginName = e.name, _(t.meshes, t.particleSystems, t.skeletons, t.animationGroups)
|
|
}).catch(function(e) {
|
|
d(e.message, e)
|
|
})
|
|
}
|
|
}, f, d, h, c)
|
|
}, e.ImportMeshAsync = function(t, i, n, r, o, s) {
|
|
return void 0 === n && (n = ""), void 0 === r && (r = P.a.LastCreatedScene), void 0 === o && (o = null), void 0 === s && (s = null), new Promise(function(a, c) {
|
|
e.ImportMesh(t, i, n, r, function(e, t, i, n) {
|
|
a({
|
|
meshes: e,
|
|
particleSystems: t,
|
|
skeletons: i,
|
|
animationGroups: n
|
|
})
|
|
}, o, function(e, t, i) {
|
|
c(i || new Error(t))
|
|
}, s)
|
|
})
|
|
}, e.Load = function(t, i, n, r, o, s, a) {
|
|
return void 0 === i && (i = ""), void 0 === n && (n = P.a.LastCreatedEngine), void 0 === r && (r = null), void 0 === o && (o = null), void 0 === s && (s = null), void 0 === a && (a = null), n ? e.Append(t, i, new W.a(n), r, o, s, a) : (ye.h.Error("No engine available"), null)
|
|
}, e.LoadAsync = function(t, i, n, r, o) {
|
|
return void 0 === i && (i = ""), void 0 === n && (n = P.a.LastCreatedEngine), void 0 === r && (r = null), void 0 === o && (o = null), new Promise(function(s, a) {
|
|
e.Load(t, i, n, function(e) {
|
|
s(e)
|
|
}, r, function(e, t, i) {
|
|
a(i || new Error(t))
|
|
}, o)
|
|
})
|
|
}, e.Append = function(t, i, n, r, o, s, a) {
|
|
if (void 0 === i && (i = ""), void 0 === n && (n = P.a.LastCreatedScene), void 0 === r && (r = null), void 0 === o && (o = null), void 0 === s && (s = null), void 0 === a && (a = null), !n) return p.a.Error("No scene available to append to"), null;
|
|
var c = e._getFileInfo(t, i);
|
|
if (!c) return null;
|
|
e.ShowLoadingScreen && n.getEngine().displayLoadingUI();
|
|
var l = {};
|
|
n._addPendingData(l);
|
|
var u = function() {
|
|
n._removePendingData(l), n.getEngine().hideLoadingUI()
|
|
},
|
|
h = function(e, t) {
|
|
var i = "Unable to load from " + c.url + (e ? ": " + e : "");
|
|
s ? s(n, i, t) : p.a.Error(i), u()
|
|
},
|
|
d = o ? function(e) {
|
|
try {
|
|
o(e)
|
|
} catch (e) {
|
|
h("Error in onProgress callback", e)
|
|
}
|
|
} : void 0,
|
|
f = function() {
|
|
if (r) try {
|
|
r(n)
|
|
} catch (e) {
|
|
h("Error in onSuccess callback", e)
|
|
}
|
|
n._removePendingData(l)
|
|
};
|
|
return e._loadData(c, n, function(t, i) {
|
|
if (t.load) {
|
|
if (!t.load(n, i, c.rootUrl, h)) return;
|
|
n.loadingPluginName = t.name, f()
|
|
} else {
|
|
t.loadAsync(n, i, c.rootUrl, d, c.name).then(function() {
|
|
n.loadingPluginName = t.name, f()
|
|
}).catch(function(e) {
|
|
h(e.message, e)
|
|
})
|
|
}
|
|
e.ShowLoadingScreen && n.executeWhenReady(function() {
|
|
n.getEngine().hideLoadingUI()
|
|
})
|
|
}, d, h, u, a)
|
|
}, e.AppendAsync = function(t, i, n, r, o) {
|
|
return void 0 === i && (i = ""), void 0 === n && (n = P.a.LastCreatedScene), void 0 === r && (r = null), void 0 === o && (o = null), new Promise(function(s, a) {
|
|
e.Append(t, i, n, function(e) {
|
|
s(e)
|
|
}, r, function(e, t, i) {
|
|
a(i || new Error(t))
|
|
}, o)
|
|
})
|
|
}, e.LoadAssetContainer = function(t, i, n, r, o, s, a) {
|
|
if (void 0 === i && (i = ""), void 0 === n && (n = P.a.LastCreatedScene), void 0 === r && (r = null), void 0 === o && (o = null), void 0 === s && (s = null), void 0 === a && (a = null), !n) return p.a.Error("No scene available to load asset container to"), null;
|
|
var c = e._getFileInfo(t, i);
|
|
if (!c) return null;
|
|
var l = {};
|
|
n._addPendingData(l);
|
|
var u = function() {
|
|
n._removePendingData(l)
|
|
},
|
|
h = function(e, t) {
|
|
var i = "Unable to load assets from " + c.url + (e ? ": " + e : "");
|
|
s ? s(n, i, t) : p.a.Error(i), u()
|
|
},
|
|
d = o ? function(e) {
|
|
try {
|
|
o(e)
|
|
} catch (e) {
|
|
h("Error in onProgress callback", e)
|
|
}
|
|
} : void 0,
|
|
f = function(e) {
|
|
if (r) try {
|
|
r(e)
|
|
} catch (e) {
|
|
h("Error in onSuccess callback", e)
|
|
}
|
|
n._removePendingData(l)
|
|
};
|
|
return e._loadData(c, n, function(t, i) {
|
|
if (t.loadAssetContainer) {
|
|
var r = t.loadAssetContainer(n, i, c.rootUrl, h);
|
|
if (!r) return;
|
|
n.loadingPluginName = t.name, f(r)
|
|
} else if (t.loadAssetContainerAsync) {
|
|
t.loadAssetContainerAsync(n, i, c.rootUrl, d, c.name).then(function(e) {
|
|
n.loadingPluginName = t.name, f(e)
|
|
}).catch(function(e) {
|
|
h(e.message, e)
|
|
})
|
|
} else h("LoadAssetContainer is not supported by this plugin. Plugin did not provide a loadAssetContainer or loadAssetContainerAsync method.");
|
|
e.ShowLoadingScreen && n.executeWhenReady(function() {
|
|
n.getEngine().hideLoadingUI()
|
|
})
|
|
}, d, h, u, a)
|
|
}, e.LoadAssetContainerAsync = function(t, i, n, r, o) {
|
|
return void 0 === i && (i = ""), void 0 === n && (n = P.a.LastCreatedScene), void 0 === r && (r = null), void 0 === o && (o = null), new Promise(function(s, a) {
|
|
e.LoadAssetContainer(t, i, n, function(e) {
|
|
s(e)
|
|
}, r, function(e, t, i) {
|
|
a(i || new Error(t))
|
|
}, o)
|
|
})
|
|
}, e.NO_LOGGING = _.a.SCENELOADER_NO_LOGGING, e.MINIMAL_LOGGING = _.a.SCENELOADER_MINIMAL_LOGGING, e.SUMMARY_LOGGING = _.a.SCENELOADER_SUMMARY_LOGGING, e.DETAILED_LOGGING = _.a.SCENELOADER_DETAILED_LOGGING, e.OnPluginActivatedObservable = new r.c, e._registeredPlugins = {}, e
|
|
}(),
|
|
Tn = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this, t) || this;
|
|
return i.controllerType = St.DAYDREAM, i
|
|
}
|
|
return l.d(t, e), t.prototype.initControllerMesh = function(e, i) {
|
|
var n = this;
|
|
bn.ImportMesh("", t.MODEL_BASE_URL, t.MODEL_FILENAME, e, function(e) {
|
|
n._defaultModel = e[1], n.attachToMesh(n._defaultModel), i && i(n._defaultModel)
|
|
})
|
|
}, t.prototype._handleButtonChange = function(e, t, i) {
|
|
if (0 === e) {
|
|
var n = this.onTriggerStateChangedObservable;
|
|
n && n.notifyObservers(t)
|
|
} else p.a.Warn("Unrecognized Daydream button index: " + e)
|
|
}, t.MODEL_BASE_URL = "https://controllers.babylonjs.com/generic/", t.MODEL_FILENAME = "generic.babylon", t.GAMEPAD_ID_PREFIX = "Daydream", t
|
|
}(Ai);
|
|
wt._ControllerFactories.push({
|
|
canCreate: function(e) {
|
|
return 0 === e.id.indexOf(Tn.GAMEPAD_ID_PREFIX)
|
|
},
|
|
create: function(e) {
|
|
return new Tn(e)
|
|
}
|
|
});
|
|
var En = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this, t) || this;
|
|
return i._buttonIndexToObservableNameMap = ["onPadStateChangedObservable", "onTriggerStateChangedObservable"], i.controllerType = St.GEAR_VR, i._calculatedPosition = new o.x("left" == i.hand ? -.15 : .15, -.5, .25), i._disableTrackPosition(i._calculatedPosition), i
|
|
}
|
|
return l.d(t, e), t.prototype.initControllerMesh = function(e, i) {
|
|
var n = this;
|
|
bn.ImportMesh("", t.MODEL_BASE_URL, t.MODEL_FILENAME, e, function(t) {
|
|
var r = new fe.a("", e);
|
|
t[1].parent = r, t[1].position.z = -.15, n._defaultModel = r, n.attachToMesh(n._defaultModel), i && i(n._defaultModel)
|
|
})
|
|
}, t.prototype._handleButtonChange = function(e, t, i) {
|
|
if (e < this._buttonIndexToObservableNameMap.length) {
|
|
var n = this[this._buttonIndexToObservableNameMap[e]];
|
|
n && n.notifyObservers(t)
|
|
}
|
|
}, t.MODEL_BASE_URL = "https://controllers.babylonjs.com/generic/", t.MODEL_FILENAME = "generic.babylon", t.GAMEPAD_ID_PREFIX = "Gear VR", t
|
|
}(Ai);
|
|
wt._ControllerFactories.push({
|
|
canCreate: function(e) {
|
|
return 0 === e.id.indexOf(En.GAMEPAD_ID_PREFIX) || -1 !== e.id.indexOf("Oculus Go")
|
|
},
|
|
create: function(e) {
|
|
return new En(e)
|
|
}
|
|
});
|
|
var An = function(e) {
|
|
function t(t) {
|
|
return e.call(this, t) || this
|
|
}
|
|
return l.d(t, e), t.prototype.initControllerMesh = function(e, i) {
|
|
var n = this;
|
|
bn.ImportMesh("", t.MODEL_BASE_URL, t.MODEL_FILENAME, e, function(e) {
|
|
n._defaultModel = e[1], n.attachToMesh(n._defaultModel), i && i(n._defaultModel)
|
|
})
|
|
}, t.prototype._handleButtonChange = function(e, t, i) {
|
|
console.log("Button id: " + e + "state: "), console.dir(t)
|
|
}, t.MODEL_BASE_URL = "https://controllers.babylonjs.com/generic/", t.MODEL_FILENAME = "generic.babylon", t
|
|
}(Ai);
|
|
wt._DefaultControllerFactory = function(e) {
|
|
return new An(e)
|
|
};
|
|
var xn = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this, t) || this;
|
|
return i.onSecondaryTriggerStateChangedObservable = new r.c, i.onThumbRestChangedObservable = new r.c, i.controllerType = St.OCULUS, i
|
|
}
|
|
return l.d(t, e), t.prototype.initControllerMesh = function(e, i) {
|
|
var n, r = this;
|
|
n = "left" === this.hand ? t.MODEL_LEFT_FILENAME : t.MODEL_RIGHT_FILENAME, bn.ImportMesh("", t.MODEL_BASE_URL, n, e, function(e) {
|
|
r._defaultModel = e[1], r.attachToMesh(r._defaultModel), i && i(r._defaultModel)
|
|
})
|
|
}, Object.defineProperty(t.prototype, "onAButtonStateChangedObservable", {
|
|
get: function() {
|
|
if ("right" === this.hand) return this.onMainButtonStateChangedObservable;
|
|
throw new Error("No A button on left hand")
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onBButtonStateChangedObservable", {
|
|
get: function() {
|
|
if ("right" === this.hand) return this.onSecondaryButtonStateChangedObservable;
|
|
throw new Error("No B button on left hand")
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onXButtonStateChangedObservable", {
|
|
get: function() {
|
|
if ("left" === this.hand) return this.onMainButtonStateChangedObservable;
|
|
throw new Error("No X button on right hand")
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onYButtonStateChangedObservable", {
|
|
get: function() {
|
|
if ("left" === this.hand) return this.onSecondaryButtonStateChangedObservable;
|
|
throw new Error("No Y button on right hand")
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._handleButtonChange = function(e, t, i) {
|
|
var n = t,
|
|
r = "right" === this.hand ? -1 : 1;
|
|
switch (e) {
|
|
case 0:
|
|
return void this.onPadStateChangedObservable.notifyObservers(n);
|
|
case 1:
|
|
return this._defaultModel && (this._defaultModel.getChildren()[3].rotation.x = .2 * -n.value, this._defaultModel.getChildren()[3].position.y = .005 * -n.value, this._defaultModel.getChildren()[3].position.z = .005 * -n.value), void this.onTriggerStateChangedObservable.notifyObservers(n);
|
|
case 2:
|
|
return this._defaultModel && (this._defaultModel.getChildren()[4].position.x = r * n.value * .0035), void this.onSecondaryTriggerStateChangedObservable.notifyObservers(n);
|
|
case 3:
|
|
return this._defaultModel && (n.pressed ? this._defaultModel.getChildren()[1].position.y = -.001 : this._defaultModel.getChildren()[1].position.y = 0), void this.onMainButtonStateChangedObservable.notifyObservers(n);
|
|
case 4:
|
|
return this._defaultModel && (n.pressed ? this._defaultModel.getChildren()[2].position.y = -.001 : this._defaultModel.getChildren()[2].position.y = 0), void this.onSecondaryButtonStateChangedObservable.notifyObservers(n);
|
|
case 5:
|
|
return void this.onThumbRestChangedObservable.notifyObservers(n)
|
|
}
|
|
}, t.MODEL_BASE_URL = "https://controllers.babylonjs.com/oculus/", t.MODEL_LEFT_FILENAME = "left.babylon", t.MODEL_RIGHT_FILENAME = "right.babylon", t
|
|
}(Ai);
|
|
wt._ControllerFactories.push({
|
|
canCreate: function(e) {
|
|
return -1 !== e.id.indexOf("Oculus Touch")
|
|
},
|
|
create: function(e) {
|
|
return new xn(e)
|
|
}
|
|
});
|
|
var Rn = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this, t) || this;
|
|
return i.controllerType = St.VIVE, i._invertLeftStickY = !0, i
|
|
}
|
|
return l.d(t, e), t.prototype.initControllerMesh = function(e, i) {
|
|
var n = this;
|
|
bn.ImportMesh("", t.MODEL_BASE_URL, t.MODEL_FILENAME, e, function(e) {
|
|
n._defaultModel = e[1], n.attachToMesh(n._defaultModel), i && i(n._defaultModel)
|
|
})
|
|
}, Object.defineProperty(t.prototype, "onLeftButtonStateChangedObservable", {
|
|
get: function() {
|
|
return this.onMainButtonStateChangedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onRightButtonStateChangedObservable", {
|
|
get: function() {
|
|
return this.onMainButtonStateChangedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onMenuButtonStateChangedObservable", {
|
|
get: function() {
|
|
return this.onSecondaryButtonStateChangedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._handleButtonChange = function(e, t, i) {
|
|
var n = t;
|
|
switch (e) {
|
|
case 0:
|
|
return void this.onPadStateChangedObservable.notifyObservers(n);
|
|
case 1:
|
|
return this._defaultModel && (this._defaultModel.getChildren()[6].rotation.x = .15 * -n.value), void this.onTriggerStateChangedObservable.notifyObservers(n);
|
|
case 2:
|
|
return void this.onMainButtonStateChangedObservable.notifyObservers(n);
|
|
case 3:
|
|
return this._defaultModel && (n.pressed ? this._defaultModel.getChildren()[2].position.y = -.001 : this._defaultModel.getChildren()[2].position.y = 0), void this.onSecondaryButtonStateChangedObservable.notifyObservers(n)
|
|
}
|
|
}, t.MODEL_BASE_URL = "https://controllers.babylonjs.com/vive/", t.MODEL_FILENAME = "wand.babylon", t
|
|
}(Ai);
|
|
wt._ControllerFactories.push({
|
|
canCreate: function(e) {
|
|
return -1 !== e.id.toLowerCase().indexOf("openvr")
|
|
},
|
|
create: function(e) {
|
|
return new Rn(e)
|
|
}
|
|
});
|
|
var Pn = function() {
|
|
return function() {
|
|
this.buttonMeshes = {}, this.axisMeshes = {}
|
|
}
|
|
}(),
|
|
Sn = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this, t) || this;
|
|
return i._mapping = {
|
|
buttons: ["thumbstick", "trigger", "grip", "menu", "trackpad"],
|
|
buttonMeshNames: {
|
|
trigger: "SELECT",
|
|
menu: "MENU",
|
|
grip: "GRASP",
|
|
thumbstick: "THUMBSTICK_PRESS",
|
|
trackpad: "TOUCHPAD_PRESS"
|
|
},
|
|
buttonObservableNames: {
|
|
trigger: "onTriggerStateChangedObservable",
|
|
menu: "onSecondaryButtonStateChangedObservable",
|
|
grip: "onMainButtonStateChangedObservable",
|
|
thumbstick: "onPadStateChangedObservable",
|
|
trackpad: "onTrackpadChangedObservable"
|
|
},
|
|
axisMeshNames: ["THUMBSTICK_X", "THUMBSTICK_Y", "TOUCHPAD_TOUCH_X", "TOUCHPAD_TOUCH_Y"],
|
|
pointingPoseMeshName: Ft.POINTING_POSE
|
|
}, i.onTrackpadChangedObservable = new r.c, i.onTrackpadValuesChangedObservable = new r.c, i.trackpad = {
|
|
x: 0,
|
|
y: 0
|
|
}, i.controllerType = St.WINDOWS, i._loadedMeshInfo = null, i
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "onTriggerButtonStateChangedObservable", {
|
|
get: function() {
|
|
return this.onTriggerStateChangedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onMenuButtonStateChangedObservable", {
|
|
get: function() {
|
|
return this.onSecondaryButtonStateChangedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onGripButtonStateChangedObservable", {
|
|
get: function() {
|
|
return this.onMainButtonStateChangedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onThumbstickButtonStateChangedObservable", {
|
|
get: function() {
|
|
return this.onPadStateChangedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onTouchpadButtonStateChangedObservable", {
|
|
get: function() {
|
|
return this.onTrackpadChangedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "onTouchpadValuesChangedObservable", {
|
|
get: function() {
|
|
return this.onTrackpadValuesChangedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._updateTrackpad = function() {
|
|
!this.browserGamepad.axes || this.browserGamepad.axes[2] == this.trackpad.x && this.browserGamepad.axes[3] == this.trackpad.y || (this.trackpad.x = this.browserGamepad.axes[2], this.trackpad.y = this.browserGamepad.axes[3], this.onTrackpadValuesChangedObservable.notifyObservers(this.trackpad))
|
|
}, t.prototype.update = function() {
|
|
if (e.prototype.update.call(this), this.browserGamepad.axes && (this._updateTrackpad(), this._loadedMeshInfo))
|
|
for (var t = 0; t < this._mapping.axisMeshNames.length; t++) this._lerpAxisTransform(t, this.browserGamepad.axes[t])
|
|
}, t.prototype._handleButtonChange = function(e, t, i) {
|
|
var n = this._mapping.buttons[e];
|
|
if (n) {
|
|
this._updateTrackpad();
|
|
var r = this[this._mapping.buttonObservableNames[n]];
|
|
r && r.notifyObservers(t), this._lerpButtonTransform(n, t.value)
|
|
}
|
|
}, t.prototype._lerpButtonTransform = function(e, t) {
|
|
if (this._loadedMeshInfo) {
|
|
var i = this._loadedMeshInfo.buttonMeshes[e];
|
|
i.unpressed.rotationQuaternion && i.pressed.rotationQuaternion && i.value.rotationQuaternion && (o.q.SlerpToRef(i.unpressed.rotationQuaternion, i.pressed.rotationQuaternion, t, i.value.rotationQuaternion), o.x.LerpToRef(i.unpressed.position, i.pressed.position, t, i.value.position))
|
|
}
|
|
}, t.prototype._lerpAxisTransform = function(e, t) {
|
|
if (this._loadedMeshInfo) {
|
|
var i = this._loadedMeshInfo.axisMeshes[e];
|
|
if (i && i.min.rotationQuaternion && i.max.rotationQuaternion && i.value.rotationQuaternion) {
|
|
var n = .5 * t + .5;
|
|
o.q.SlerpToRef(i.min.rotationQuaternion, i.max.rotationQuaternion, n, i.value.rotationQuaternion), o.x.LerpToRef(i.min.position, i.max.position, n, i.value.position)
|
|
}
|
|
}
|
|
}, t.prototype.initControllerMesh = function(e, i, n) {
|
|
var r, o, s = this;
|
|
if (void 0 === n && (n = !1), bn.IsPluginForExtensionAvailable(".glb")) {
|
|
var a = "default";
|
|
if (this.id && !n) {
|
|
var c = this.id.match(t.GAMEPAD_ID_PATTERN);
|
|
a = c && c[0] || a
|
|
}
|
|
o = "left" === this.hand ? t.MODEL_LEFT_FILENAME : t.MODEL_RIGHT_FILENAME, r = t.MODEL_BASE_URL + a + "/"
|
|
} else p.a.Warn("You need to reference GLTF loader to load Windows Motion Controllers model. Falling back to generic models"), r = An.MODEL_BASE_URL, o = An.MODEL_FILENAME;
|
|
bn.ImportMesh("", r, o, e, function(t) {
|
|
s._loadedMeshInfo = s.processModel(e, t), s._loadedMeshInfo && (s._defaultModel = s._loadedMeshInfo.rootNode, s.attachToMesh(s._defaultModel), i && i(s._defaultModel))
|
|
}, null, function(e, t) {
|
|
p.a.Log(t), p.a.Warn("Failed to retrieve controller model from the remote server: " + r + o), n || s.initControllerMesh(e, i, !0)
|
|
})
|
|
}, t.prototype.processModel = function(e, t) {
|
|
for (var i = null, n = new fe.a(this.id + " " + this.hand, e), r = null, o = 0; o < t.length; o++) {
|
|
var s = t[o];
|
|
if (!s.parent) {
|
|
s.isPickable = !1, r = s;
|
|
break
|
|
}
|
|
}
|
|
return r ? (r.setParent(n), i = this.createMeshInfo(n)) : p.a.Warn("Could not find root node in model file."), i
|
|
}, t.prototype.createMeshInfo = function(e) {
|
|
var t, i = new Pn;
|
|
for (i.rootNode = e, i.buttonMeshes = {}, i.axisMeshes = {}, t = 0; t < this._mapping.buttons.length; t++) {
|
|
var n = this._mapping.buttonMeshNames[this._mapping.buttons[t]];
|
|
if (n) {
|
|
var r = l(e, n);
|
|
if (r) {
|
|
var o = {
|
|
index: t,
|
|
value: u(r, "VALUE"),
|
|
pressed: u(r, "PRESSED"),
|
|
unpressed: u(r, "UNPRESSED")
|
|
};
|
|
o.value && o.pressed && o.unpressed ? i.buttonMeshes[this._mapping.buttons[t]] = o : p.a.Warn("Missing button submesh under mesh with name: " + n + "(VALUE: " + !!o.value + ", PRESSED: " + !!o.pressed + ", UNPRESSED:" + !!o.unpressed + ")")
|
|
} else p.a.Warn("Missing button mesh with name: " + n)
|
|
} else p.a.Log("Skipping unknown button at index: " + t + " with mapped name: " + this._mapping.buttons[t])
|
|
}
|
|
for (t = 0; t < this._mapping.axisMeshNames.length; t++) {
|
|
var s = this._mapping.axisMeshNames[t];
|
|
if (s) {
|
|
var a = l(e, s);
|
|
if (a) {
|
|
var c = {
|
|
index: t,
|
|
value: u(a, "VALUE"),
|
|
min: u(a, "MIN"),
|
|
max: u(a, "MAX")
|
|
};
|
|
c.value && c.min && c.max ? i.axisMeshes[t] = c : p.a.Warn("Missing axis submesh under mesh with name: " + s + "(VALUE: " + !!c.value + ", MIN: " + !!c.min + ", MAX:" + !!c.max + ")")
|
|
} else p.a.Warn("Missing axis mesh with name: " + s)
|
|
} else p.a.Log("Skipping unknown axis at index: " + t)
|
|
}
|
|
return i.pointingPoseNode = l(e, this._mapping.pointingPoseMeshName), i.pointingPoseNode ? this._pointingPoseNode = i.pointingPoseNode : p.a.Warn("Missing pointing pose mesh with name: " + this._mapping.pointingPoseMeshName), i;
|
|
|
|
function l(e, t) {
|
|
return e.getChildren(function(e) {
|
|
return e.name === t
|
|
}, !1)[0]
|
|
}
|
|
|
|
function u(e, t) {
|
|
return e.getChildren(function(e) {
|
|
return e.name == t
|
|
}, !0)[0]
|
|
}
|
|
}, t.prototype.getForwardRay = function(t) {
|
|
if (void 0 === t && (t = 100), !this._loadedMeshInfo || !this._loadedMeshInfo.pointingPoseNode) return e.prototype.getForwardRay.call(this, t);
|
|
var i = this._loadedMeshInfo.pointingPoseNode.getWorldMatrix(),
|
|
n = i.getTranslation(),
|
|
r = new o.x(0, 0, -1),
|
|
s = o.x.TransformNormal(r, i),
|
|
a = o.x.Normalize(s);
|
|
return new It.a(n, a, t)
|
|
}, t.prototype.dispose = function() {
|
|
e.prototype.dispose.call(this), this.onTrackpadChangedObservable.clear()
|
|
}, t.MODEL_BASE_URL = "https://controllers.babylonjs.com/microsoft/", t.MODEL_LEFT_FILENAME = "left.glb", t.MODEL_RIGHT_FILENAME = "right.glb", t.GAMEPAD_ID_PREFIX = "Spatial Controller (Spatial Interaction Source) ", t.GAMEPAD_ID_PATTERN = /([0-9a-zA-Z]+-[0-9a-zA-Z]+)$/, t
|
|
}(Ai);
|
|
wt._ControllerFactories.push({
|
|
canCreate: function(e) {
|
|
return 0 === e.id.indexOf(Sn.GAMEPAD_ID_PREFIX)
|
|
},
|
|
create: function(e) {
|
|
return new Sn(e)
|
|
}
|
|
});
|
|
var Cn = i(58),
|
|
Mn = i(52),
|
|
On = i(48),
|
|
In = i(41),
|
|
Dn = function(e) {
|
|
function t(t, i, n) {
|
|
void 0 === i && (i = o.e.Gray()), void 0 === n && (n = In.a.DefaultUtilityLayer);
|
|
var s = e.call(this, n) || this;
|
|
s._pointerObserver = null, s.snapDistance = 0, s.onSnapObservable = new r.c, s.uniformScaling = !1, s._coloredMaterial = new Ri.a("", n.utilityLayerScene), s._coloredMaterial.diffuseColor = i, s._coloredMaterial.specularColor = i.subtract(new o.e(.1, .1, .1));
|
|
var a = new Ri.a("", n.utilityLayerScene);
|
|
a.diffuseColor = i.add(new o.e(.3, .3, .3));
|
|
var c = new Fe.a("", n.utilityLayerScene),
|
|
l = Mn.a.CreateBox("yPosMesh", {
|
|
size: .4
|
|
}, n.utilityLayerScene),
|
|
u = Fi.a.CreateCylinder("cylinder", {
|
|
diameterTop: .005,
|
|
height: .275,
|
|
diameterBottom: .005,
|
|
tessellation: 96
|
|
}, n.utilityLayerScene);
|
|
u.material = s._coloredMaterial, c.addChild(l), c.addChild(u), l.scaling.scaleInPlace(.1), l.material = s._coloredMaterial, l.rotation.x = Math.PI / 2, l.position.z += .3, u.position.z += .1375, u.rotation.x = Math.PI / 2, c.lookAt(s._rootMesh.position.add(t)), s._rootMesh.addChild(c), c.scaling.scaleInPlace(1 / 3), s.dragBehavior = new Le.a({
|
|
dragAxis: t
|
|
}), s.dragBehavior.moveAttached = !1, s._rootMesh.addBehavior(s.dragBehavior);
|
|
var h = 0,
|
|
d = new o.x,
|
|
f = {
|
|
snapDistance: 0
|
|
};
|
|
s.dragBehavior.onDragObservable.add(function(e) {
|
|
if (s.attachedMesh) {
|
|
var i = e.dragDistance * (3 * s.scaleRatio / s._rootMesh.scaling.length()),
|
|
n = !1,
|
|
r = 0;
|
|
s.uniformScaling ? (s.attachedMesh.scaling.normalizeToRef(d), d.y < 0 && d.scaleInPlace(-1)) : d.copyFrom(t), 0 == s.snapDistance ? d.scaleToRef(i, d) : (h += i, Math.abs(h) > s.snapDistance ? (r = Math.floor(Math.abs(h) / s.snapDistance), h < 0 && (r *= -1), h %= s.snapDistance, d.scaleToRef(s.snapDistance * r, d), n = !0) : d.scaleInPlace(0)), s.attachedMesh.scaling.addInPlace(d), n && (f.snapDistance = s.snapDistance * r, s.onSnapObservable.notifyObservers(f))
|
|
}
|
|
}), s._pointerObserver = n.utilityLayerScene.onPointerObservable.add(function(e) {
|
|
if (!s._customMeshSet) {
|
|
var t = e.pickInfo && -1 != s._rootMesh.getChildMeshes().indexOf(e.pickInfo.pickedMesh) ? a : s._coloredMaterial;
|
|
s._rootMesh.getChildMeshes().forEach(function(e) {
|
|
e.material = t, e.color && (e.color = t.diffuseColor)
|
|
})
|
|
}
|
|
});
|
|
var p = n._getSharedGizmoLight();
|
|
return p.includedOnlyMeshes = p.includedOnlyMeshes.concat(s._rootMesh.getChildMeshes()), s
|
|
}
|
|
return l.d(t, e), t.prototype._attachedMeshChanged = function(e) {
|
|
this.dragBehavior && (this.dragBehavior.enabled = !!e)
|
|
}, t.prototype.dispose = function() {
|
|
this.onSnapObservable.clear(), this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver), this.dragBehavior.detach(), e.prototype.dispose.call(this)
|
|
}, t.prototype.setCustomMesh = function(t, i) {
|
|
var n = this;
|
|
void 0 === i && (i = !1), e.prototype.setCustomMesh.call(this, t), i && (this._rootMesh.getChildMeshes().forEach(function(e) {
|
|
e.material = n._coloredMaterial, e.color && (e.color = n._coloredMaterial.diffuseColor)
|
|
}), this._customMeshSet = !1)
|
|
}, t
|
|
}(On.a),
|
|
Ln = i(46),
|
|
wn = i(40),
|
|
Fn = function(e) {
|
|
function t(t, i) {
|
|
void 0 === t && (t = o.e.Gray()), void 0 === i && (i = In.a.DefaultKeepDepthUtilityLayer);
|
|
var n = e.call(this, i) || this;
|
|
n._boundingDimensions = new o.x(1, 1, 1), n._renderObserver = null, n._pointerObserver = null, n._scaleDragSpeed = .2, n._tmpQuaternion = new o.q, n._tmpVector = new o.x(0, 0, 0), n._tmpRotationMatrix = new o.j, n.ignoreChildren = !1, n.includeChildPredicate = null, n.rotationSphereSize = .1, n.scaleBoxSize = .1, n.fixedDragMeshScreenSize = !1, n.fixedDragMeshScreenSizeDistanceFactor = 10, n.onDragStartObservable = new r.c, n.onScaleBoxDragObservable = new r.c, n.onScaleBoxDragEndObservable = new r.c, n.onRotationSphereDragObservable = new r.c, n.onRotationSphereDragEndObservable = new r.c, n.scalePivot = null, n._existingMeshScale = new o.x, n._dragMesh = null, n.pointerDragBehavior = new Le.a, n._updateScale = !1, n._anchorMesh = new Fe.a("anchor", i.utilityLayerScene), n.coloredMaterial = new Ri.a("", i.utilityLayerScene), n.coloredMaterial.disableLighting = !0, n.hoverColoredMaterial = new Ri.a("", i.utilityLayerScene), n.hoverColoredMaterial.disableLighting = !0, n._lineBoundingBox = new Fe.a("", i.utilityLayerScene), n._lineBoundingBox.rotationQuaternion = new o.q;
|
|
var s = [];
|
|
s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(0, 0, 0), new o.x(n._boundingDimensions.x, 0, 0)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(0, 0, 0), new o.x(0, n._boundingDimensions.y, 0)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(0, 0, 0), new o.x(0, 0, n._boundingDimensions.z)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(n._boundingDimensions.x, 0, 0), new o.x(n._boundingDimensions.x, n._boundingDimensions.y, 0)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(n._boundingDimensions.x, 0, 0), new o.x(n._boundingDimensions.x, 0, n._boundingDimensions.z)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(0, n._boundingDimensions.y, 0), new o.x(n._boundingDimensions.x, n._boundingDimensions.y, 0)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(0, n._boundingDimensions.y, 0), new o.x(0, n._boundingDimensions.y, n._boundingDimensions.z)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(0, 0, n._boundingDimensions.z), new o.x(n._boundingDimensions.x, 0, n._boundingDimensions.z)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(0, 0, n._boundingDimensions.z), new o.x(0, n._boundingDimensions.y, n._boundingDimensions.z)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(n._boundingDimensions.x, n._boundingDimensions.y, n._boundingDimensions.z), new o.x(0, n._boundingDimensions.y, n._boundingDimensions.z)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(n._boundingDimensions.x, n._boundingDimensions.y, n._boundingDimensions.z), new o.x(n._boundingDimensions.x, 0, n._boundingDimensions.z)]
|
|
}, i.utilityLayerScene)), s.push(wn.a.CreateLines("lines", {
|
|
points: [new o.x(n._boundingDimensions.x, n._boundingDimensions.y, n._boundingDimensions.z), new o.x(n._boundingDimensions.x, n._boundingDimensions.y, 0)]
|
|
}, i.utilityLayerScene)), s.forEach(function(e) {
|
|
e.color = t, e.position.addInPlace(new o.x(-n._boundingDimensions.x / 2, -n._boundingDimensions.y / 2, -n._boundingDimensions.z / 2)), e.isPickable = !1, n._lineBoundingBox.addChild(e)
|
|
}), n._rootMesh.addChild(n._lineBoundingBox), n.setColor(t), n._rotateSpheresParent = new Fe.a("", i.utilityLayerScene), n._rotateSpheresParent.rotationQuaternion = new o.q;
|
|
for (var a = function(e) {
|
|
var t = Ln.a.CreateSphere("", {
|
|
diameter: 1
|
|
}, i.utilityLayerScene);
|
|
t.rotationQuaternion = new o.q, t.material = c.coloredMaterial, (d = new Le.a({})).moveAttached = !1, d.updateDragPlane = !1, t.addBehavior(d);
|
|
var r = new o.x(1, 0, 0),
|
|
s = 0;
|
|
d.onDragStartObservable.add(function() {
|
|
r.copyFrom(t.forward), s = 0
|
|
}), d.onDragObservable.add(function(t) {
|
|
if (n.onRotationSphereDragObservable.notifyObservers({}), n.attachedMesh) {
|
|
var i = n.attachedMesh.parent;
|
|
if (i && i.scaling && i.scaling.isNonUniformWithinEpsilon(.001)) return void p.a.Warn("BoundingBoxGizmo controls are not supported on child meshes with non-uniform parent scaling");
|
|
Be.a._RemoveAndStorePivotPoint(n.attachedMesh);
|
|
var a = r,
|
|
c = t.dragPlaneNormal.scale(o.x.Dot(t.dragPlaneNormal, a)),
|
|
l = a.subtract(c).normalizeToNew(),
|
|
u = o.x.Dot(l, t.delta) < 0 ? Math.abs(t.delta.length()) : -Math.abs(t.delta.length());
|
|
u = u / n._boundingDimensions.length() * n._anchorMesh.scaling.length(), n.attachedMesh.rotationQuaternion || (n.attachedMesh.rotationQuaternion = o.q.RotationYawPitchRoll(n.attachedMesh.rotation.y, n.attachedMesh.rotation.x, n.attachedMesh.rotation.z)), n._anchorMesh.rotationQuaternion || (n._anchorMesh.rotationQuaternion = o.q.RotationYawPitchRoll(n._anchorMesh.rotation.y, n._anchorMesh.rotation.x, n._anchorMesh.rotation.z)), s += u, Math.abs(s) <= 2 * Math.PI && (e >= 8 ? o.q.RotationYawPitchRollToRef(0, 0, u, n._tmpQuaternion) : e >= 4 ? o.q.RotationYawPitchRollToRef(u, 0, 0, n._tmpQuaternion) : o.q.RotationYawPitchRollToRef(0, u, 0, n._tmpQuaternion), n._anchorMesh.addChild(n.attachedMesh), n._anchorMesh.rotationQuaternion.multiplyToRef(n._tmpQuaternion, n._anchorMesh.rotationQuaternion), n._anchorMesh.removeChild(n.attachedMesh), n.attachedMesh.setParent(i)), n.updateBoundingBox(), Be.a._RestorePivotPoint(n.attachedMesh)
|
|
}
|
|
n._updateDummy()
|
|
}), d.onDragStartObservable.add(function() {
|
|
n.onDragStartObservable.notifyObservers({}), n._selectNode(t)
|
|
}), d.onDragEndObservable.add(function() {
|
|
n.onRotationSphereDragEndObservable.notifyObservers({}), n._selectNode(null), n._updateDummy()
|
|
}), c._rotateSpheresParent.addChild(t)
|
|
}, c = this, l = 0; l < 12; l++) a(l);
|
|
n._rootMesh.addChild(n._rotateSpheresParent), n._scaleBoxesParent = new Fe.a("", i.utilityLayerScene), n._scaleBoxesParent.rotationQuaternion = new o.q;
|
|
for (var u = 0; u < 2; u++)
|
|
for (var h = 0; h < 2; h++)
|
|
for (var d, f = function() {
|
|
var e = Mn.a.CreateBox("", {
|
|
size: 1
|
|
}, i.utilityLayerScene);
|
|
e.material = _.coloredMaterial;
|
|
var t = new o.x(0 == u ? -1 : 1, 0 == h ? -1 : 1, 0 == g ? -1 : 1);
|
|
(d = new Le.a({
|
|
dragAxis: t
|
|
})).moveAttached = !1, e.addBehavior(d), d.onDragObservable.add(function(t) {
|
|
if (n.onScaleBoxDragObservable.notifyObservers({}), n.attachedMesh) {
|
|
var i = n.attachedMesh.parent;
|
|
if (i && i.scaling && i.scaling.isNonUniformWithinEpsilon(.001)) return void p.a.Warn("BoundingBoxGizmo controls are not supported on child meshes with non-uniform parent scaling");
|
|
Be.a._RemoveAndStorePivotPoint(n.attachedMesh);
|
|
var r = t.dragDistance / n._boundingDimensions.length() * n._anchorMesh.scaling.length(),
|
|
s = new o.x(r, r, r);
|
|
s.scaleInPlace(n._scaleDragSpeed), n.updateBoundingBox(), n.scalePivot ? (n.attachedMesh.getWorldMatrix().getRotationMatrixToRef(n._tmpRotationMatrix), n._boundingDimensions.scaleToRef(.5, n._tmpVector), o.x.TransformCoordinatesToRef(n._tmpVector, n._tmpRotationMatrix, n._tmpVector), n._anchorMesh.position.subtractInPlace(n._tmpVector), n._boundingDimensions.multiplyToRef(n.scalePivot, n._tmpVector), o.x.TransformCoordinatesToRef(n._tmpVector, n._tmpRotationMatrix, n._tmpVector), n._anchorMesh.position.addInPlace(n._tmpVector)) : (e.absolutePosition.subtractToRef(n._anchorMesh.position, n._tmpVector), n._anchorMesh.position.subtractInPlace(n._tmpVector)), n._anchorMesh.addChild(n.attachedMesh), n._anchorMesh.scaling.addInPlace(s), (n._anchorMesh.scaling.x < 0 || n._anchorMesh.scaling.y < 0 || n._anchorMesh.scaling.z < 0) && n._anchorMesh.scaling.subtractInPlace(s), n._anchorMesh.removeChild(n.attachedMesh), n.attachedMesh.setParent(i), Be.a._RestorePivotPoint(n.attachedMesh)
|
|
}
|
|
n._updateDummy()
|
|
}), d.onDragStartObservable.add(function() {
|
|
n.onDragStartObservable.notifyObservers({}), n._selectNode(e)
|
|
}), d.onDragEndObservable.add(function() {
|
|
n.onScaleBoxDragEndObservable.notifyObservers({}), n._selectNode(null), n._updateDummy()
|
|
}), _._scaleBoxesParent.addChild(e)
|
|
}, _ = this, g = 0; g < 2; g++) f();
|
|
n._rootMesh.addChild(n._scaleBoxesParent);
|
|
var m = new Array;
|
|
return n._pointerObserver = i.utilityLayerScene.onPointerObservable.add(function(e) {
|
|
m[e.event.pointerId] ? e.pickInfo && e.pickInfo.pickedMesh != m[e.event.pointerId] && (m[e.event.pointerId].material = n.coloredMaterial, delete m[e.event.pointerId]) : n._rotateSpheresParent.getChildMeshes().concat(n._scaleBoxesParent.getChildMeshes()).forEach(function(t) {
|
|
e.pickInfo && e.pickInfo.pickedMesh == t && (m[e.event.pointerId] = t, t.material = n.hoverColoredMaterial)
|
|
})
|
|
}), n._renderObserver = n.gizmoLayer.originalScene.onBeforeRenderObservable.add(function() {
|
|
n.attachedMesh && !n._existingMeshScale.equals(n.attachedMesh.scaling) ? n.updateBoundingBox() : n.fixedDragMeshScreenSize && (n._updateRotationSpheres(), n._updateScaleBoxes()), n._dragMesh && n.attachedMesh && n.pointerDragBehavior.dragging && (n._lineBoundingBox.position.rotateByQuaternionToRef(n._rootMesh.rotationQuaternion, n._tmpVector), n.attachedMesh.setAbsolutePosition(n._dragMesh.position.add(n._tmpVector.scale(-1))))
|
|
}), n.updateBoundingBox(), n
|
|
}
|
|
return l.d(t, e), t.prototype.setColor = function(e) {
|
|
this.coloredMaterial.emissiveColor = e, this.hoverColoredMaterial.emissiveColor = e.clone().add(new o.e(.3, .3, .3)), this._lineBoundingBox.getChildren().forEach(function(t) {
|
|
t.color && (t.color = e)
|
|
})
|
|
}, t.prototype._attachedMeshChanged = function(e) {
|
|
var t = this;
|
|
if (e) {
|
|
Be.a._RemoveAndStorePivotPoint(e);
|
|
var i = e.parent;
|
|
this._anchorMesh.addChild(e), this._anchorMesh.removeChild(e), e.setParent(i), Be.a._RestorePivotPoint(e), this.updateBoundingBox(), e.getChildMeshes(!1).forEach(function(e) {
|
|
e.markAsDirty("scaling")
|
|
}), this.gizmoLayer.utilityLayerScene.onAfterRenderObservable.addOnce(function() {
|
|
t._updateDummy()
|
|
})
|
|
}
|
|
}, t.prototype._selectNode = function(e) {
|
|
this._rotateSpheresParent.getChildMeshes().concat(this._scaleBoxesParent.getChildMeshes()).forEach(function(t) {
|
|
t.isVisible = !e || t == e
|
|
})
|
|
}, t.prototype.updateBoundingBox = function() {
|
|
if (this.attachedMesh) {
|
|
Be.a._RemoveAndStorePivotPoint(this.attachedMesh);
|
|
var e = this.attachedMesh.parent;
|
|
this.attachedMesh.setParent(null);
|
|
var t = null;
|
|
this.attachedMesh.skeleton && (t = this.attachedMesh.skeleton.overrideMesh, this.attachedMesh.skeleton.overrideMesh = null), this._update(), this.attachedMesh.rotationQuaternion || (this.attachedMesh.rotationQuaternion = o.q.RotationYawPitchRoll(this.attachedMesh.rotation.y, this.attachedMesh.rotation.x, this.attachedMesh.rotation.z)), this._anchorMesh.rotationQuaternion || (this._anchorMesh.rotationQuaternion = o.q.RotationYawPitchRoll(this._anchorMesh.rotation.y, this._anchorMesh.rotation.x, this._anchorMesh.rotation.z)), this._anchorMesh.rotationQuaternion.copyFrom(this.attachedMesh.rotationQuaternion), this._tmpQuaternion.copyFrom(this.attachedMesh.rotationQuaternion), this._tmpVector.copyFrom(this.attachedMesh.position), this.attachedMesh.rotationQuaternion.set(0, 0, 0, 1), this.attachedMesh.position.set(0, 0, 0);
|
|
var i = this.attachedMesh.getHierarchyBoundingVectors(!this.ignoreChildren, this.includeChildPredicate);
|
|
i.max.subtractToRef(i.min, this._boundingDimensions), this._lineBoundingBox.scaling.copyFrom(this._boundingDimensions), this._lineBoundingBox.position.set((i.max.x + i.min.x) / 2, (i.max.y + i.min.y) / 2, (i.max.z + i.min.z) / 2), this._rotateSpheresParent.position.copyFrom(this._lineBoundingBox.position), this._scaleBoxesParent.position.copyFrom(this._lineBoundingBox.position), this._lineBoundingBox.computeWorldMatrix(), this._anchorMesh.position.copyFrom(this._lineBoundingBox.absolutePosition), this.attachedMesh.rotationQuaternion.copyFrom(this._tmpQuaternion), this.attachedMesh.position.copyFrom(this._tmpVector), this.attachedMesh.setParent(e), this.attachedMesh.skeleton && (this.attachedMesh.skeleton.overrideMesh = t)
|
|
}
|
|
this._updateRotationSpheres(), this._updateScaleBoxes(), this.attachedMesh && (this._existingMeshScale.copyFrom(this.attachedMesh.scaling), Be.a._RestorePivotPoint(this.attachedMesh))
|
|
}, t.prototype._updateRotationSpheres = function() {
|
|
for (var e = this._rotateSpheresParent.getChildMeshes(), t = 0; t < 3; t++)
|
|
for (var i = 0; i < 2; i++)
|
|
for (var n = 0; n < 2; n++) {
|
|
var r = 4 * t + 2 * i + n;
|
|
if (0 == t && (e[r].position.set(this._boundingDimensions.x / 2, this._boundingDimensions.y * i, this._boundingDimensions.z * n), e[r].position.addInPlace(new o.x(-this._boundingDimensions.x / 2, -this._boundingDimensions.y / 2, -this._boundingDimensions.z / 2)), e[r].lookAt(o.x.Cross(e[r].position.normalizeToNew(), o.x.Right()).normalizeToNew().add(e[r].position))), 1 == t && (e[r].position.set(this._boundingDimensions.x * i, this._boundingDimensions.y / 2, this._boundingDimensions.z * n), e[r].position.addInPlace(new o.x(-this._boundingDimensions.x / 2, -this._boundingDimensions.y / 2, -this._boundingDimensions.z / 2)), e[r].lookAt(o.x.Cross(e[r].position.normalizeToNew(), o.x.Up()).normalizeToNew().add(e[r].position))), 2 == t && (e[r].position.set(this._boundingDimensions.x * i, this._boundingDimensions.y * n, this._boundingDimensions.z / 2), e[r].position.addInPlace(new o.x(-this._boundingDimensions.x / 2, -this._boundingDimensions.y / 2, -this._boundingDimensions.z / 2)), e[r].lookAt(o.x.Cross(e[r].position.normalizeToNew(), o.x.Forward()).normalizeToNew().add(e[r].position))), this.fixedDragMeshScreenSize && this.gizmoLayer.utilityLayerScene.activeCamera) {
|
|
e[r].absolutePosition.subtractToRef(this.gizmoLayer.utilityLayerScene.activeCamera.position, this._tmpVector);
|
|
var s = this.rotationSphereSize * this._tmpVector.length() / this.fixedDragMeshScreenSizeDistanceFactor;
|
|
e[r].scaling.set(s, s, s)
|
|
} else e[r].scaling.set(this.rotationSphereSize, this.rotationSphereSize, this.rotationSphereSize)
|
|
}
|
|
}, t.prototype._updateScaleBoxes = function() {
|
|
for (var e = this._scaleBoxesParent.getChildMeshes(), t = 0; t < 2; t++)
|
|
for (var i = 0; i < 2; i++)
|
|
for (var n = 0; n < 2; n++) {
|
|
var r = 4 * t + 2 * i + n;
|
|
if (e[r])
|
|
if (e[r].position.set(this._boundingDimensions.x * t, this._boundingDimensions.y * i, this._boundingDimensions.z * n), e[r].position.addInPlace(new o.x(-this._boundingDimensions.x / 2, -this._boundingDimensions.y / 2, -this._boundingDimensions.z / 2)), this.fixedDragMeshScreenSize && this.gizmoLayer.utilityLayerScene.activeCamera) {
|
|
e[r].absolutePosition.subtractToRef(this.gizmoLayer.utilityLayerScene.activeCamera.position, this._tmpVector);
|
|
var s = this.scaleBoxSize * this._tmpVector.length() / this.fixedDragMeshScreenSizeDistanceFactor;
|
|
e[r].scaling.set(s, s, s)
|
|
} else e[r].scaling.set(this.scaleBoxSize, this.scaleBoxSize, this.scaleBoxSize)
|
|
}
|
|
}, t.prototype.setEnabledRotationAxis = function(e) {
|
|
this._rotateSpheresParent.getChildMeshes().forEach(function(t, i) {
|
|
i < 4 ? t.setEnabled(-1 != e.indexOf("x")) : i < 8 ? t.setEnabled(-1 != e.indexOf("y")) : t.setEnabled(-1 != e.indexOf("z"))
|
|
})
|
|
}, t.prototype.setEnabledScaling = function(e) {
|
|
this._scaleBoxesParent.getChildMeshes().forEach(function(t, i) {
|
|
t.setEnabled(e)
|
|
})
|
|
}, t.prototype._updateDummy = function() {
|
|
this._dragMesh && (this._dragMesh.position.copyFrom(this._lineBoundingBox.getAbsolutePosition()), this._dragMesh.scaling.copyFrom(this._lineBoundingBox.scaling), this._dragMesh.rotationQuaternion.copyFrom(this._rootMesh.rotationQuaternion))
|
|
}, t.prototype.enableDragBehavior = function() {
|
|
this._dragMesh = fe.a.CreateBox("dummy", 1, this.gizmoLayer.utilityLayerScene), this._dragMesh.visibility = 0, this._dragMesh.rotationQuaternion = new o.q, this.pointerDragBehavior.useObjectOrienationForDragging = !1, this._dragMesh.addBehavior(this.pointerDragBehavior)
|
|
}, t.prototype.dispose = function() {
|
|
this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver), this.gizmoLayer.originalScene.onBeforeRenderObservable.remove(this._renderObserver), this._lineBoundingBox.dispose(), this._rotateSpheresParent.dispose(), this._scaleBoxesParent.dispose(), this._dragMesh && this._dragMesh.dispose(), e.prototype.dispose.call(this)
|
|
}, t.MakeNotPickableAndWrapInBoundingBox = function(e) {
|
|
var t = function(e) {
|
|
e.isPickable = !1, e.getChildMeshes().forEach(function(e) {
|
|
t(e)
|
|
})
|
|
};
|
|
t(e), e.rotationQuaternion || (e.rotationQuaternion = o.q.RotationYawPitchRoll(e.rotation.y, e.rotation.x, e.rotation.z));
|
|
var i = e.position.clone(),
|
|
n = e.rotationQuaternion.clone();
|
|
e.rotationQuaternion.set(0, 0, 0, 1), e.position.set(0, 0, 0);
|
|
var r = Mn.a.CreateBox("box", {
|
|
size: 1
|
|
}, e.getScene()),
|
|
s = e.getHierarchyBoundingVectors();
|
|
return s.max.subtractToRef(s.min, r.scaling), 0 === r.scaling.y && (r.scaling.y = o.h), 0 === r.scaling.x && (r.scaling.x = o.h), 0 === r.scaling.z && (r.scaling.z = o.h), r.position.set((s.max.x + s.min.x) / 2, (s.max.y + s.min.y) / 2, (s.max.z + s.min.z) / 2), e.addChild(r), e.rotationQuaternion.copyFrom(n), e.position.copyFrom(i), e.removeChild(r), r.addChild(e), r.visibility = 0, r
|
|
}, t.prototype.setCustomMesh = function(e) {
|
|
p.a.Error("Custom meshes are not supported on this gizmo")
|
|
}, t
|
|
}(On.a),
|
|
Nn = function(e) {
|
|
function t(t, i, n, s) {
|
|
void 0 === i && (i = o.e.Gray()), void 0 === n && (n = In.a.DefaultUtilityLayer), void 0 === s && (s = 32);
|
|
var a = e.call(this, n) || this;
|
|
a._pointerObserver = null, a.snapDistance = 0, a.onSnapObservable = new r.c;
|
|
var c = new Ri.a("", n.utilityLayerScene);
|
|
c.diffuseColor = i, c.specularColor = i.subtract(new o.e(.1, .1, .1));
|
|
var l = new Ri.a("", n.utilityLayerScene);
|
|
l.diffuseColor = i.add(new o.e(.3, .3, .3));
|
|
var u = new Fe.a("", n.utilityLayerScene),
|
|
h = fe.a.CreateTorus("", .6, .03, s, n.utilityLayerScene);
|
|
h.visibility = 0;
|
|
var d = fe.a.CreateTorus("", .6, .005, s, n.utilityLayerScene);
|
|
d.material = c, d.rotation.x = Math.PI / 2, h.rotation.x = Math.PI / 2, u.addChild(d), u.addChild(h), u.lookAt(a._rootMesh.position.add(t)), a._rootMesh.addChild(u), u.scaling.scaleInPlace(1 / 3), a.dragBehavior = new Le.a({
|
|
dragPlaneNormal: t
|
|
}), a.dragBehavior.moveAttached = !1, a.dragBehavior.maxDragAngle = 9 * Math.PI / 20, a.dragBehavior._useAlternatePickedPointAboveMaxDragAngle = !0, a._rootMesh.addBehavior(a.dragBehavior);
|
|
var f = new o.x;
|
|
a.dragBehavior.onDragStartObservable.add(function(e) {
|
|
a.attachedMesh && f.copyFrom(e.dragPlanePoint)
|
|
});
|
|
var p = new o.j,
|
|
_ = new o.x,
|
|
g = new o.x,
|
|
m = {
|
|
snapDistance: 0
|
|
},
|
|
v = 0,
|
|
y = new o.j,
|
|
b = new o.x,
|
|
T = new o.q;
|
|
a.dragBehavior.onDragObservable.add(function(e) {
|
|
if (a.attachedMesh) {
|
|
a.attachedMesh.rotationQuaternion || (a.attachedMesh.rotationQuaternion = o.q.RotationYawPitchRoll(a.attachedMesh.rotation.y, a.attachedMesh.rotation.x, a.attachedMesh.rotation.z));
|
|
var i = a.attachedMesh.parent;
|
|
i && a.attachedMesh.setParent(null);
|
|
var r = e.dragPlanePoint.subtract(a.attachedMesh.absolutePosition).normalize(),
|
|
s = f.subtract(a.attachedMesh.absolutePosition).normalize(),
|
|
c = o.x.Cross(r, s),
|
|
l = o.x.Dot(r, s),
|
|
u = Math.atan2(c.length(), l);
|
|
if (_.copyFrom(t), g.copyFrom(t), a.updateGizmoRotationToMatchAttachedMesh && (a.attachedMesh.rotationQuaternion.toRotationMatrix(p), g = o.x.TransformCoordinates(_, p)), n.utilityLayerScene.activeCamera) {
|
|
var h = n.utilityLayerScene.activeCamera.position.subtract(a.attachedMesh.position);
|
|
o.x.Dot(h, g) > 0 && (_.scaleInPlace(-1), g.scaleInPlace(-1))
|
|
}
|
|
o.x.Dot(g, c) > 0 && (u = -u);
|
|
var d = !1;
|
|
if (0 != a.snapDistance)
|
|
if (v += u, Math.abs(v) > a.snapDistance) {
|
|
var E = Math.floor(Math.abs(v) / a.snapDistance);
|
|
v < 0 && (E *= -1), v %= a.snapDistance, u = a.snapDistance * E, d = !0
|
|
} else u = 0;
|
|
y.reset(), a.attachedMesh.parent && (a.attachedMesh.parent.computeWorldMatrix().invertToRef(y), y.getRotationMatrixToRef(y), o.x.TransformCoordinatesToRef(_, y, _));
|
|
var A = Math.sin(u / 2);
|
|
T.set(_.x * A, _.y * A, _.z * A, Math.cos(u / 2)), y.determinant() > 0 && (T.toEulerAnglesToRef(b), o.q.RotationYawPitchRollToRef(b.y, -b.x, -b.z, T)), a.updateGizmoRotationToMatchAttachedMesh ? a.attachedMesh.rotationQuaternion.multiplyToRef(T, a.attachedMesh.rotationQuaternion) : T.multiplyToRef(a.attachedMesh.rotationQuaternion, a.attachedMesh.rotationQuaternion), f.copyFrom(e.dragPlanePoint), d && (m.snapDistance = u, a.onSnapObservable.notifyObservers(m)), i && a.attachedMesh.setParent(i)
|
|
}
|
|
}), a._pointerObserver = n.utilityLayerScene.onPointerObservable.add(function(e) {
|
|
if (!a._customMeshSet) {
|
|
var t = e.pickInfo && -1 != a._rootMesh.getChildMeshes().indexOf(e.pickInfo.pickedMesh) ? l : c;
|
|
a._rootMesh.getChildMeshes().forEach(function(e) {
|
|
e.material = t, e.color && (e.color = t.diffuseColor)
|
|
})
|
|
}
|
|
});
|
|
var E = n._getSharedGizmoLight();
|
|
return E.includedOnlyMeshes = E.includedOnlyMeshes.concat(a._rootMesh.getChildMeshes(!1)), a
|
|
}
|
|
return l.d(t, e), t.prototype._attachedMeshChanged = function(e) {
|
|
this.dragBehavior && (this.dragBehavior.enabled = !!e)
|
|
}, t.prototype.dispose = function() {
|
|
this.onSnapObservable.clear(), this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver), this.dragBehavior.detach(), e.prototype.dispose.call(this)
|
|
}, t
|
|
}(On.a),
|
|
Bn = function(e) {
|
|
function t(t, i) {
|
|
void 0 === t && (t = In.a.DefaultUtilityLayer), void 0 === i && (i = 32);
|
|
var n = e.call(this, t) || this;
|
|
return n.onDragStartObservable = new r.c, n.onDragEndObservable = new r.c, n.xGizmo = new Nn(new o.x(1, 0, 0), o.e.Red().scale(.5), t, i), n.yGizmo = new Nn(new o.x(0, 1, 0), o.e.Green().scale(.5), t, i), n.zGizmo = new Nn(new o.x(0, 0, 1), o.e.Blue().scale(.5), t, i), [n.xGizmo, n.yGizmo, n.zGizmo].forEach(function(e) {
|
|
e.dragBehavior.onDragStartObservable.add(function() {
|
|
n.onDragStartObservable.notifyObservers({})
|
|
}), e.dragBehavior.onDragEndObservable.add(function() {
|
|
n.onDragEndObservable.notifyObservers({})
|
|
})
|
|
}), n.attachedMesh = null, n
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "attachedMesh", {
|
|
get: function() {
|
|
return this.xGizmo.attachedMesh
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.attachedMesh = e, this.yGizmo.attachedMesh = e, this.zGizmo.attachedMesh = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "updateGizmoRotationToMatchAttachedMesh", {
|
|
get: function() {
|
|
return this.xGizmo.updateGizmoRotationToMatchAttachedMesh
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.updateGizmoRotationToMatchAttachedMesh = e, this.yGizmo.updateGizmoRotationToMatchAttachedMesh = e, this.zGizmo.updateGizmoRotationToMatchAttachedMesh = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "snapDistance", {
|
|
get: function() {
|
|
return this.xGizmo.snapDistance
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.snapDistance = e, this.yGizmo.snapDistance = e, this.zGizmo.snapDistance = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "scaleRatio", {
|
|
get: function() {
|
|
return this.xGizmo.scaleRatio
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.scaleRatio = e, this.yGizmo.scaleRatio = e, this.zGizmo.scaleRatio = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.dispose = function() {
|
|
this.xGizmo.dispose(), this.yGizmo.dispose(), this.zGizmo.dispose(), this.onDragStartObservable.clear(), this.onDragEndObservable.clear()
|
|
}, t.prototype.setCustomMesh = function(e) {
|
|
p.a.Error("Custom meshes are not supported on this gizmo, please set the custom meshes on the gizmos contained within this one (gizmo.xGizmo, gizmo.yGizmo, gizmo.zGizmo)")
|
|
}, t
|
|
}(On.a),
|
|
Un = function(e) {
|
|
function t(t) {
|
|
void 0 === t && (t = In.a.DefaultUtilityLayer);
|
|
var i = e.call(this, t) || this;
|
|
return i.onDragStartObservable = new r.c, i.onDragEndObservable = new r.c, i.xGizmo = new Cn.a(new o.x(1, 0, 0), o.e.Red().scale(.5), t), i.yGizmo = new Cn.a(new o.x(0, 1, 0), o.e.Green().scale(.5), t), i.zGizmo = new Cn.a(new o.x(0, 0, 1), o.e.Blue().scale(.5), t), [i.xGizmo, i.yGizmo, i.zGizmo].forEach(function(e) {
|
|
e.dragBehavior.onDragStartObservable.add(function() {
|
|
i.onDragStartObservable.notifyObservers({})
|
|
}), e.dragBehavior.onDragEndObservable.add(function() {
|
|
i.onDragEndObservable.notifyObservers({})
|
|
})
|
|
}), i.attachedMesh = null, i
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "attachedMesh", {
|
|
get: function() {
|
|
return this.xGizmo.attachedMesh
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.attachedMesh = e, this.yGizmo.attachedMesh = e, this.zGizmo.attachedMesh = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "updateGizmoRotationToMatchAttachedMesh", {
|
|
get: function() {
|
|
return this.xGizmo.updateGizmoRotationToMatchAttachedMesh
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.updateGizmoRotationToMatchAttachedMesh = e, this.yGizmo.updateGizmoRotationToMatchAttachedMesh = e, this.zGizmo.updateGizmoRotationToMatchAttachedMesh = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "snapDistance", {
|
|
get: function() {
|
|
return this.xGizmo.snapDistance
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.snapDistance = e, this.yGizmo.snapDistance = e, this.zGizmo.snapDistance = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "scaleRatio", {
|
|
get: function() {
|
|
return this.xGizmo.scaleRatio
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.scaleRatio = e, this.yGizmo.scaleRatio = e, this.zGizmo.scaleRatio = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.dispose = function() {
|
|
this.xGizmo.dispose(), this.yGizmo.dispose(), this.zGizmo.dispose(), this.onDragStartObservable.clear(), this.onDragEndObservable.clear()
|
|
}, t.prototype.setCustomMesh = function(e) {
|
|
p.a.Error("Custom meshes are not supported on this gizmo, please set the custom meshes on the gizmos contained within this one (gizmo.xGizmo, gizmo.yGizmo, gizmo.zGizmo)")
|
|
}, t
|
|
}(On.a);
|
|
Mi.a.CreatePolyhedron = function(e) {
|
|
var t = [];
|
|
t[0] = {
|
|
vertex: [
|
|
[0, 0, 1.732051],
|
|
[1.632993, 0, -.5773503],
|
|
[-.8164966, 1.414214, -.5773503],
|
|
[-.8164966, -1.414214, -.5773503]
|
|
],
|
|
face: [
|
|
[0, 1, 2],
|
|
[0, 2, 3],
|
|
[0, 3, 1],
|
|
[1, 3, 2]
|
|
]
|
|
}, t[1] = {
|
|
vertex: [
|
|
[0, 0, 1.414214],
|
|
[1.414214, 0, 0],
|
|
[0, 1.414214, 0],
|
|
[-1.414214, 0, 0],
|
|
[0, -1.414214, 0],
|
|
[0, 0, -1.414214]
|
|
],
|
|
face: [
|
|
[0, 1, 2],
|
|
[0, 2, 3],
|
|
[0, 3, 4],
|
|
[0, 4, 1],
|
|
[1, 4, 5],
|
|
[1, 5, 2],
|
|
[2, 5, 3],
|
|
[3, 5, 4]
|
|
]
|
|
}, t[2] = {
|
|
vertex: [
|
|
[0, 0, 1.070466],
|
|
[.7136442, 0, .7978784],
|
|
[-.3568221, .618034, .7978784],
|
|
[-.3568221, -.618034, .7978784],
|
|
[.7978784, .618034, .3568221],
|
|
[.7978784, -.618034, .3568221],
|
|
[-.9341724, .381966, .3568221],
|
|
[.1362939, 1, .3568221],
|
|
[.1362939, -1, .3568221],
|
|
[-.9341724, -.381966, .3568221],
|
|
[.9341724, .381966, -.3568221],
|
|
[.9341724, -.381966, -.3568221],
|
|
[-.7978784, .618034, -.3568221],
|
|
[-.1362939, 1, -.3568221],
|
|
[-.1362939, -1, -.3568221],
|
|
[-.7978784, -.618034, -.3568221],
|
|
[.3568221, .618034, -.7978784],
|
|
[.3568221, -.618034, -.7978784],
|
|
[-.7136442, 0, -.7978784],
|
|
[0, 0, -1.070466]
|
|
],
|
|
face: [
|
|
[0, 1, 4, 7, 2],
|
|
[0, 2, 6, 9, 3],
|
|
[0, 3, 8, 5, 1],
|
|
[1, 5, 11, 10, 4],
|
|
[2, 7, 13, 12, 6],
|
|
[3, 9, 15, 14, 8],
|
|
[4, 10, 16, 13, 7],
|
|
[5, 8, 14, 17, 11],
|
|
[6, 12, 18, 15, 9],
|
|
[10, 11, 17, 19, 16],
|
|
[12, 13, 16, 19, 18],
|
|
[14, 15, 18, 19, 17]
|
|
]
|
|
}, t[3] = {
|
|
vertex: [
|
|
[0, 0, 1.175571],
|
|
[1.051462, 0, .5257311],
|
|
[.3249197, 1, .5257311],
|
|
[-.8506508, .618034, .5257311],
|
|
[-.8506508, -.618034, .5257311],
|
|
[.3249197, -1, .5257311],
|
|
[.8506508, .618034, -.5257311],
|
|
[.8506508, -.618034, -.5257311],
|
|
[-.3249197, 1, -.5257311],
|
|
[-1.051462, 0, -.5257311],
|
|
[-.3249197, -1, -.5257311],
|
|
[0, 0, -1.175571]
|
|
],
|
|
face: [
|
|
[0, 1, 2],
|
|
[0, 2, 3],
|
|
[0, 3, 4],
|
|
[0, 4, 5],
|
|
[0, 5, 1],
|
|
[1, 5, 7],
|
|
[1, 7, 6],
|
|
[1, 6, 2],
|
|
[2, 6, 8],
|
|
[2, 8, 3],
|
|
[3, 8, 9],
|
|
[3, 9, 4],
|
|
[4, 9, 10],
|
|
[4, 10, 5],
|
|
[5, 10, 7],
|
|
[6, 7, 11],
|
|
[6, 11, 8],
|
|
[7, 10, 11],
|
|
[8, 11, 9],
|
|
[9, 11, 10]
|
|
]
|
|
}, t[4] = {
|
|
vertex: [
|
|
[0, 0, 1.070722],
|
|
[.7148135, 0, .7971752],
|
|
[-.104682, .7071068, .7971752],
|
|
[-.6841528, .2071068, .7971752],
|
|
[-.104682, -.7071068, .7971752],
|
|
[.6101315, .7071068, .5236279],
|
|
[1.04156, .2071068, .1367736],
|
|
[.6101315, -.7071068, .5236279],
|
|
[-.3574067, 1, .1367736],
|
|
[-.7888348, -.5, .5236279],
|
|
[-.9368776, .5, .1367736],
|
|
[-.3574067, -1, .1367736],
|
|
[.3574067, 1, -.1367736],
|
|
[.9368776, -.5, -.1367736],
|
|
[.7888348, .5, -.5236279],
|
|
[.3574067, -1, -.1367736],
|
|
[-.6101315, .7071068, -.5236279],
|
|
[-1.04156, -.2071068, -.1367736],
|
|
[-.6101315, -.7071068, -.5236279],
|
|
[.104682, .7071068, -.7971752],
|
|
[.6841528, -.2071068, -.7971752],
|
|
[.104682, -.7071068, -.7971752],
|
|
[-.7148135, 0, -.7971752],
|
|
[0, 0, -1.070722]
|
|
],
|
|
face: [
|
|
[0, 2, 3],
|
|
[1, 6, 5],
|
|
[4, 9, 11],
|
|
[7, 15, 13],
|
|
[8, 16, 10],
|
|
[12, 14, 19],
|
|
[17, 22, 18],
|
|
[20, 21, 23],
|
|
[0, 1, 5, 2],
|
|
[0, 3, 9, 4],
|
|
[0, 4, 7, 1],
|
|
[1, 7, 13, 6],
|
|
[2, 5, 12, 8],
|
|
[2, 8, 10, 3],
|
|
[3, 10, 17, 9],
|
|
[4, 11, 15, 7],
|
|
[5, 6, 14, 12],
|
|
[6, 13, 20, 14],
|
|
[8, 12, 19, 16],
|
|
[9, 17, 18, 11],
|
|
[10, 16, 22, 17],
|
|
[11, 18, 21, 15],
|
|
[13, 15, 21, 20],
|
|
[14, 20, 23, 19],
|
|
[16, 19, 23, 22],
|
|
[18, 22, 23, 21]
|
|
]
|
|
}, t[5] = {
|
|
vertex: [
|
|
[0, 0, 1.322876],
|
|
[1.309307, 0, .1889822],
|
|
[-.9819805, .8660254, .1889822],
|
|
[.1636634, -1.299038, .1889822],
|
|
[.3273268, .8660254, -.9449112],
|
|
[-.8183171, -.4330127, -.9449112]
|
|
],
|
|
face: [
|
|
[0, 3, 1],
|
|
[2, 4, 5],
|
|
[0, 1, 4, 2],
|
|
[0, 2, 5, 3],
|
|
[1, 3, 5, 4]
|
|
]
|
|
}, t[6] = {
|
|
vertex: [
|
|
[0, 0, 1.159953],
|
|
[1.013464, 0, .5642542],
|
|
[-.3501431, .9510565, .5642542],
|
|
[-.7715208, -.6571639, .5642542],
|
|
[.6633206, .9510565, -.03144481],
|
|
[.8682979, -.6571639, -.3996071],
|
|
[-1.121664, .2938926, -.03144481],
|
|
[-.2348831, -1.063314, -.3996071],
|
|
[.5181548, .2938926, -.9953061],
|
|
[-.5850262, -.112257, -.9953061]
|
|
],
|
|
face: [
|
|
[0, 1, 4, 2],
|
|
[0, 2, 6, 3],
|
|
[1, 5, 8, 4],
|
|
[3, 6, 9, 7],
|
|
[5, 7, 9, 8],
|
|
[0, 3, 7, 5, 1],
|
|
[2, 4, 8, 9, 6]
|
|
]
|
|
}, t[7] = {
|
|
vertex: [
|
|
[0, 0, 1.118034],
|
|
[.8944272, 0, .6708204],
|
|
[-.2236068, .8660254, .6708204],
|
|
[-.7826238, -.4330127, .6708204],
|
|
[.6708204, .8660254, .2236068],
|
|
[1.006231, -.4330127, -.2236068],
|
|
[-1.006231, .4330127, .2236068],
|
|
[-.6708204, -.8660254, -.2236068],
|
|
[.7826238, .4330127, -.6708204],
|
|
[.2236068, -.8660254, -.6708204],
|
|
[-.8944272, 0, -.6708204],
|
|
[0, 0, -1.118034]
|
|
],
|
|
face: [
|
|
[0, 1, 4, 2],
|
|
[0, 2, 6, 3],
|
|
[1, 5, 8, 4],
|
|
[3, 6, 10, 7],
|
|
[5, 9, 11, 8],
|
|
[7, 10, 11, 9],
|
|
[0, 3, 7, 9, 5, 1],
|
|
[2, 4, 8, 11, 10, 6]
|
|
]
|
|
}, t[8] = {
|
|
vertex: [
|
|
[-.729665, .670121, .319155],
|
|
[-.655235, -.29213, -.754096],
|
|
[-.093922, -.607123, .537818],
|
|
[.702196, .595691, .485187],
|
|
[.776626, -.36656, -.588064]
|
|
],
|
|
face: [
|
|
[1, 4, 2],
|
|
[0, 1, 2],
|
|
[3, 0, 2],
|
|
[4, 3, 2],
|
|
[4, 1, 0, 3]
|
|
]
|
|
}, t[9] = {
|
|
vertex: [
|
|
[-.868849, -.100041, .61257],
|
|
[-.329458, .976099, .28078],
|
|
[-.26629, -.013796, -.477654],
|
|
[-.13392, -1.034115, .229829],
|
|
[.738834, .707117, -.307018],
|
|
[.859683, -.535264, -.338508]
|
|
],
|
|
face: [
|
|
[3, 0, 2],
|
|
[5, 3, 2],
|
|
[4, 5, 2],
|
|
[1, 4, 2],
|
|
[0, 1, 2],
|
|
[0, 3, 5, 4, 1]
|
|
]
|
|
}, t[10] = {
|
|
vertex: [
|
|
[-.610389, .243975, .531213],
|
|
[-.187812, -.48795, -.664016],
|
|
[-.187812, .9759, -.664016],
|
|
[.187812, -.9759, .664016],
|
|
[.798201, .243975, .132803]
|
|
],
|
|
face: [
|
|
[1, 3, 0],
|
|
[3, 4, 0],
|
|
[3, 1, 4],
|
|
[0, 2, 1],
|
|
[0, 4, 2],
|
|
[2, 4, 1]
|
|
]
|
|
}, t[11] = {
|
|
vertex: [
|
|
[-1.028778, .392027, -.048786],
|
|
[-.640503, -.646161, .621837],
|
|
[-.125162, -.395663, -.540059],
|
|
[.004683, .888447, -.651988],
|
|
[.125161, .395663, .540059],
|
|
[.632925, -.791376, .433102],
|
|
[1.031672, .157063, -.354165]
|
|
],
|
|
face: [
|
|
[3, 2, 0],
|
|
[2, 1, 0],
|
|
[2, 5, 1],
|
|
[0, 4, 3],
|
|
[0, 1, 4],
|
|
[4, 1, 5],
|
|
[2, 3, 6],
|
|
[3, 4, 6],
|
|
[5, 2, 6],
|
|
[4, 5, 6]
|
|
]
|
|
}, t[12] = {
|
|
vertex: [
|
|
[-.669867, .334933, -.529576],
|
|
[-.669867, .334933, .529577],
|
|
[-.4043, 1.212901, 0],
|
|
[-.334933, -.669867, -.529576],
|
|
[-.334933, -.669867, .529577],
|
|
[.334933, .669867, -.529576],
|
|
[.334933, .669867, .529577],
|
|
[.4043, -1.212901, 0],
|
|
[.669867, -.334933, -.529576],
|
|
[.669867, -.334933, .529577]
|
|
],
|
|
face: [
|
|
[8, 9, 7],
|
|
[6, 5, 2],
|
|
[3, 8, 7],
|
|
[5, 0, 2],
|
|
[4, 3, 7],
|
|
[0, 1, 2],
|
|
[9, 4, 7],
|
|
[1, 6, 2],
|
|
[9, 8, 5, 6],
|
|
[8, 3, 0, 5],
|
|
[3, 4, 1, 0],
|
|
[4, 9, 6, 1]
|
|
]
|
|
}, t[13] = {
|
|
vertex: [
|
|
[-.931836, .219976, -.264632],
|
|
[-.636706, .318353, .692816],
|
|
[-.613483, -.735083, -.264632],
|
|
[-.326545, .979634, 0],
|
|
[-.318353, -.636706, .692816],
|
|
[-.159176, .477529, -.856368],
|
|
[.159176, -.477529, -.856368],
|
|
[.318353, .636706, .692816],
|
|
[.326545, -.979634, 0],
|
|
[.613482, .735082, -.264632],
|
|
[.636706, -.318353, .692816],
|
|
[.931835, -.219977, -.264632]
|
|
],
|
|
face: [
|
|
[11, 10, 8],
|
|
[7, 9, 3],
|
|
[6, 11, 8],
|
|
[9, 5, 3],
|
|
[2, 6, 8],
|
|
[5, 0, 3],
|
|
[4, 2, 8],
|
|
[0, 1, 3],
|
|
[10, 4, 8],
|
|
[1, 7, 3],
|
|
[10, 11, 9, 7],
|
|
[11, 6, 5, 9],
|
|
[6, 2, 0, 5],
|
|
[2, 4, 1, 0],
|
|
[4, 10, 7, 1]
|
|
]
|
|
}, t[14] = {
|
|
vertex: [
|
|
[-.93465, .300459, -.271185],
|
|
[-.838689, -.260219, -.516017],
|
|
[-.711319, .717591, .128359],
|
|
[-.710334, -.156922, .080946],
|
|
[-.599799, .556003, -.725148],
|
|
[-.503838, -.004675, -.969981],
|
|
[-.487004, .26021, .48049],
|
|
[-.460089, -.750282, -.512622],
|
|
[-.376468, .973135, -.325605],
|
|
[-.331735, -.646985, .084342],
|
|
[-.254001, .831847, .530001],
|
|
[-.125239, -.494738, -.966586],
|
|
[.029622, .027949, .730817],
|
|
[.056536, -.982543, -.262295],
|
|
[.08085, 1.087391, .076037],
|
|
[.125583, -.532729, .485984],
|
|
[.262625, .599586, .780328],
|
|
[.391387, -.726999, -.716259],
|
|
[.513854, -.868287, .139347],
|
|
[.597475, .85513, .326364],
|
|
[.641224, .109523, .783723],
|
|
[.737185, -.451155, .538891],
|
|
[.848705, -.612742, -.314616],
|
|
[.976075, .365067, .32976],
|
|
[1.072036, -.19561, .084927]
|
|
],
|
|
face: [
|
|
[15, 18, 21],
|
|
[12, 20, 16],
|
|
[6, 10, 2],
|
|
[3, 0, 1],
|
|
[9, 7, 13],
|
|
[2, 8, 4, 0],
|
|
[0, 4, 5, 1],
|
|
[1, 5, 11, 7],
|
|
[7, 11, 17, 13],
|
|
[13, 17, 22, 18],
|
|
[18, 22, 24, 21],
|
|
[21, 24, 23, 20],
|
|
[20, 23, 19, 16],
|
|
[16, 19, 14, 10],
|
|
[10, 14, 8, 2],
|
|
[15, 9, 13, 18],
|
|
[12, 15, 21, 20],
|
|
[6, 12, 16, 10],
|
|
[3, 6, 2, 0],
|
|
[9, 3, 1, 7],
|
|
[9, 15, 12, 6, 3],
|
|
[22, 17, 11, 5, 4, 8, 14, 19, 23, 24]
|
|
]
|
|
};
|
|
var i, n, r, s, a, c, l = e.type && (e.type < 0 || e.type >= t.length) ? 0 : e.type || 0,
|
|
u = e.size,
|
|
h = e.sizeX || u || 1,
|
|
d = e.sizeY || u || 1,
|
|
f = e.sizeZ || u || 1,
|
|
p = e.custom || t[l],
|
|
_ = p.face.length,
|
|
g = e.faceUV || new Array(_),
|
|
m = e.faceColors,
|
|
v = void 0 === e.flat || e.flat,
|
|
y = 0 === e.sideOrientation ? 0 : e.sideOrientation || Mi.a.DEFAULTSIDE,
|
|
b = new Array,
|
|
T = new Array,
|
|
E = new Array,
|
|
A = new Array,
|
|
x = new Array,
|
|
R = 0,
|
|
P = 0,
|
|
S = new Array,
|
|
C = 0,
|
|
M = 0;
|
|
if (v)
|
|
for (M = 0; M < _; M++) m && void 0 === m[M] && (m[M] = new o.f(1, 1, 1, 1)), g && void 0 === g[M] && (g[M] = new o.y(0, 0, 1, 1));
|
|
if (v)
|
|
for (M = 0; M < _; M++) {
|
|
var O = p.face[M].length;
|
|
for (r = 2 * Math.PI / O, s = .5 * Math.tan(r / 2), a = .5, C = 0; C < O; C++) b.push(p.vertex[p.face[M][C]][0] * h, p.vertex[p.face[M][C]][1] * d, p.vertex[p.face[M][C]][2] * f), S.push(R), R++, i = g[M].x + (g[M].z - g[M].x) * (.5 + s), n = g[M].y + (g[M].w - g[M].y) * (a - .5), A.push(i, n), c = s * Math.cos(r) - a * Math.sin(r), a = s * Math.sin(r) + a * Math.cos(r), s = c, m && x.push(m[M].r, m[M].g, m[M].b, m[M].a);
|
|
for (C = 0; C < O - 2; C++) T.push(S[0 + P], S[C + 2 + P], S[C + 1 + P]);
|
|
P += O
|
|
} else {
|
|
for (C = 0; C < p.vertex.length; C++) b.push(p.vertex[C][0] * h, p.vertex[C][1] * d, p.vertex[C][2] * f), A.push(0, 0);
|
|
for (M = 0; M < _; M++)
|
|
for (C = 0; C < p.face[M].length - 2; C++) T.push(p.face[M][0], p.face[M][C + 2], p.face[M][C + 1])
|
|
}
|
|
Mi.a.ComputeNormals(b, T, E), Mi.a._ComputeSides(y, b, T, E, A, e.frontUVs, e.backUVs);
|
|
var I = new Mi.a;
|
|
return I.positions = b, I.indices = T, I.normals = E, I.uvs = A, m && v && (I.colors = x), I
|
|
}, fe.a.CreatePolyhedron = function(e, t, i) {
|
|
return Vn.CreatePolyhedron(e, t, i)
|
|
};
|
|
var Vn = function() {
|
|
function e() {}
|
|
return e.CreatePolyhedron = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n = new fe.a(e, i);
|
|
return t.sideOrientation = fe.a._GetDefaultSideOrientation(t.sideOrientation), n._originalBuilderSideOrientation = t.sideOrientation, Mi.a.CreatePolyhedron(t).applyToMesh(n, t.updatable), n
|
|
}, e
|
|
}(),
|
|
Gn = function(e) {
|
|
function t(t) {
|
|
void 0 === t && (t = In.a.DefaultUtilityLayer);
|
|
var i = e.call(this, t) || this;
|
|
i.onDragStartObservable = new r.c, i.onDragEndObservable = new r.c, i.xGizmo = new Dn(new o.x(1, 0, 0), o.e.Red().scale(.5), t), i.yGizmo = new Dn(new o.x(0, 1, 0), o.e.Green().scale(.5), t), i.zGizmo = new Dn(new o.x(0, 0, 1), o.e.Blue().scale(.5), t), i.uniformScaleGizmo = new Dn(new o.x(0, 1, 0), o.e.Yellow().scale(.5), t), i.uniformScaleGizmo.updateGizmoRotationToMatchAttachedMesh = !1, i.uniformScaleGizmo.uniformScaling = !0;
|
|
var n = Vn.CreatePolyhedron("", {
|
|
type: 1
|
|
}, i.uniformScaleGizmo.gizmoLayer.utilityLayerScene);
|
|
n.scaling.scaleInPlace(.02), n.visibility = 0;
|
|
var s = Vn.CreatePolyhedron("", {
|
|
type: 1
|
|
}, i.uniformScaleGizmo.gizmoLayer.utilityLayerScene);
|
|
s.scaling.scaleInPlace(.007), n.addChild(s), i.uniformScaleGizmo.setCustomMesh(n, !0);
|
|
var a = t._getSharedGizmoLight();
|
|
return a.includedOnlyMeshes = a.includedOnlyMeshes.concat(s), [i.xGizmo, i.yGizmo, i.zGizmo, i.uniformScaleGizmo].forEach(function(e) {
|
|
e.dragBehavior.onDragStartObservable.add(function() {
|
|
i.onDragStartObservable.notifyObservers({})
|
|
}), e.dragBehavior.onDragEndObservable.add(function() {
|
|
i.onDragEndObservable.notifyObservers({})
|
|
})
|
|
}), i.attachedMesh = null, i
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "attachedMesh", {
|
|
get: function() {
|
|
return this.xGizmo.attachedMesh
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.attachedMesh = e, this.yGizmo.attachedMesh = e, this.zGizmo.attachedMesh = e, this.uniformScaleGizmo.attachedMesh = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "updateGizmoRotationToMatchAttachedMesh", {
|
|
get: function() {
|
|
return this.xGizmo.updateGizmoRotationToMatchAttachedMesh
|
|
},
|
|
set: function(e) {
|
|
e || p.a.Warn("Setting updateGizmoRotationToMatchAttachedMesh = false on scaling gizmo is not supported."), this.xGizmo && (this.xGizmo.updateGizmoRotationToMatchAttachedMesh = e, this.yGizmo.updateGizmoRotationToMatchAttachedMesh = e, this.zGizmo.updateGizmoRotationToMatchAttachedMesh = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "snapDistance", {
|
|
get: function() {
|
|
return this.xGizmo.snapDistance
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.snapDistance = e, this.yGizmo.snapDistance = e, this.zGizmo.snapDistance = e, this.uniformScaleGizmo.snapDistance = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "scaleRatio", {
|
|
get: function() {
|
|
return this.xGizmo.scaleRatio
|
|
},
|
|
set: function(e) {
|
|
this.xGizmo && (this.xGizmo.scaleRatio = e, this.yGizmo.scaleRatio = e, this.zGizmo.scaleRatio = e, this.uniformScaleGizmo.scaleRatio = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.dispose = function() {
|
|
this.xGizmo.dispose(), this.yGizmo.dispose(), this.zGizmo.dispose(), this.uniformScaleGizmo.dispose(), this.onDragStartObservable.clear(), this.onDragEndObservable.clear()
|
|
}, t
|
|
}(On.a),
|
|
kn = function() {
|
|
function e(e) {
|
|
var t = this;
|
|
this.scene = e, this.clearGizmoOnEmptyPointerEvent = !1, this.onAttachedToMeshObservable = new r.c, this._gizmosEnabled = {
|
|
positionGizmo: !1,
|
|
rotationGizmo: !1,
|
|
scaleGizmo: !1,
|
|
boundingBoxGizmo: !1
|
|
}, this._pointerObserver = null, this._attachedMesh = null, this._boundingBoxColor = o.e.FromHexString("#0984e3"), this.boundingBoxDragBehavior = new Ue, this.attachableMeshes = null, this.usePointerToAttachGizmos = !0, this._defaultKeepDepthUtilityLayer = new In.a(e), this._defaultKeepDepthUtilityLayer.utilityLayerScene.autoClearDepthAndStencil = !1, this._defaultUtilityLayer = In.a.DefaultUtilityLayer, this.gizmos = {
|
|
positionGizmo: null,
|
|
rotationGizmo: null,
|
|
scaleGizmo: null,
|
|
boundingBoxGizmo: null
|
|
}, this._pointerObserver = e.onPointerObservable.add(function(e) {
|
|
if (t.usePointerToAttachGizmos && e.type == Pe.a.POINTERDOWN)
|
|
if (e.pickInfo && e.pickInfo.pickedMesh) {
|
|
var i = e.pickInfo.pickedMesh;
|
|
if (null == t.attachableMeshes)
|
|
for (; i && null != i.parent;) i = i.parent;
|
|
else {
|
|
var n = !1;
|
|
t.attachableMeshes.forEach(function(e) {
|
|
i && (i == e || i.isDescendantOf(e)) && (i = e, n = !0)
|
|
}), n || (i = null)
|
|
}
|
|
i instanceof Fe.a ? t._attachedMesh != i && t.attachToMesh(i) : t.clearGizmoOnEmptyPointerEvent && t.attachToMesh(null)
|
|
} else t.clearGizmoOnEmptyPointerEvent && t.attachToMesh(null)
|
|
})
|
|
}
|
|
return e.prototype.attachToMesh = function(e) {
|
|
for (var t in this._attachedMesh && this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior), this._attachedMesh = e, this.gizmos) {
|
|
var i = this.gizmos[t];
|
|
i && this._gizmosEnabled[t] && (i.attachedMesh = e)
|
|
}
|
|
this.boundingBoxGizmoEnabled && this._attachedMesh && this._attachedMesh.addBehavior(this.boundingBoxDragBehavior), this.onAttachedToMeshObservable.notifyObservers(e)
|
|
}, Object.defineProperty(e.prototype, "positionGizmoEnabled", {
|
|
get: function() {
|
|
return this._gizmosEnabled.positionGizmo
|
|
},
|
|
set: function(e) {
|
|
e ? (this.gizmos.positionGizmo || (this.gizmos.positionGizmo = new Un(this._defaultUtilityLayer)), this.gizmos.positionGizmo.attachedMesh = this._attachedMesh) : this.gizmos.positionGizmo && (this.gizmos.positionGizmo.attachedMesh = null), this._gizmosEnabled.positionGizmo = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "rotationGizmoEnabled", {
|
|
get: function() {
|
|
return this._gizmosEnabled.rotationGizmo
|
|
},
|
|
set: function(e) {
|
|
e ? (this.gizmos.rotationGizmo || (this.gizmos.rotationGizmo = new Bn(this._defaultUtilityLayer)), this.gizmos.rotationGizmo.attachedMesh = this._attachedMesh) : this.gizmos.rotationGizmo && (this.gizmos.rotationGizmo.attachedMesh = null), this._gizmosEnabled.rotationGizmo = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "scaleGizmoEnabled", {
|
|
get: function() {
|
|
return this._gizmosEnabled.scaleGizmo
|
|
},
|
|
set: function(e) {
|
|
e ? (this.gizmos.scaleGizmo = this.gizmos.scaleGizmo || new Gn(this._defaultUtilityLayer), this.gizmos.scaleGizmo.attachedMesh = this._attachedMesh) : this.gizmos.scaleGizmo && (this.gizmos.scaleGizmo.attachedMesh = null), this._gizmosEnabled.scaleGizmo = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "boundingBoxGizmoEnabled", {
|
|
get: function() {
|
|
return this._gizmosEnabled.boundingBoxGizmo
|
|
},
|
|
set: function(e) {
|
|
e ? (this.gizmos.boundingBoxGizmo = this.gizmos.boundingBoxGizmo || new Fn(this._boundingBoxColor, this._defaultKeepDepthUtilityLayer), this.gizmos.boundingBoxGizmo.attachedMesh = this._attachedMesh, this._attachedMesh && (this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior), this._attachedMesh.addBehavior(this.boundingBoxDragBehavior))) : this.gizmos.boundingBoxGizmo && (this._attachedMesh && this._attachedMesh.removeBehavior(this.boundingBoxDragBehavior), this.gizmos.boundingBoxGizmo.attachedMesh = null), this._gizmosEnabled.boundingBoxGizmo = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.dispose = function() {
|
|
for (var e in this.scene.onPointerObservable.remove(this._pointerObserver), this.gizmos) {
|
|
var t = this.gizmos[e];
|
|
t && t.dispose()
|
|
}
|
|
this._defaultKeepDepthUtilityLayer.dispose(), this.boundingBoxDragBehavior.detach(), this.onAttachedToMeshObservable.clear()
|
|
}, e
|
|
}(),
|
|
zn = i(38),
|
|
jn = function(e) {
|
|
function t() {
|
|
var t = null !== e && e.apply(this, arguments) || this;
|
|
return t._needProjectionMatrixCompute = !0, t
|
|
}
|
|
return l.d(t, e), t.prototype._setPosition = function(e) {
|
|
this._position = e
|
|
}, Object.defineProperty(t.prototype, "position", {
|
|
get: function() {
|
|
return this._position
|
|
},
|
|
set: function(e) {
|
|
this._setPosition(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._setDirection = function(e) {
|
|
this._direction = e
|
|
}, Object.defineProperty(t.prototype, "direction", {
|
|
get: function() {
|
|
return this._direction
|
|
},
|
|
set: function(e) {
|
|
this._setDirection(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "shadowMinZ", {
|
|
get: function() {
|
|
return this._shadowMinZ
|
|
},
|
|
set: function(e) {
|
|
this._shadowMinZ = e, this.forceProjectionMatrixCompute()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "shadowMaxZ", {
|
|
get: function() {
|
|
return this._shadowMaxZ
|
|
},
|
|
set: function(e) {
|
|
this._shadowMaxZ = e, this.forceProjectionMatrixCompute()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.computeTransformedInformation = function() {
|
|
return !(!this.parent || !this.parent.getWorldMatrix) && (this.transformedPosition || (this.transformedPosition = o.x.Zero()), o.x.TransformCoordinatesToRef(this.position, this.parent.getWorldMatrix(), this.transformedPosition), this.direction && (this.transformedDirection || (this.transformedDirection = o.x.Zero()), o.x.TransformNormalToRef(this.direction, this.parent.getWorldMatrix(), this.transformedDirection)), !0)
|
|
}, t.prototype.getDepthScale = function() {
|
|
return 50
|
|
}, t.prototype.getShadowDirection = function(e) {
|
|
return this.transformedDirection ? this.transformedDirection : this.direction
|
|
}, t.prototype.getAbsolutePosition = function() {
|
|
return this.transformedPosition ? this.transformedPosition : this.position
|
|
}, t.prototype.setDirectionToTarget = function(e) {
|
|
return this.direction = o.x.Normalize(e.subtract(this.position)), this.direction
|
|
}, t.prototype.getRotation = function() {
|
|
this.direction.normalize();
|
|
var e = o.x.Cross(this.direction, o.c.Y),
|
|
t = o.x.Cross(e, this.direction);
|
|
return o.x.RotationFromAxis(e, t, this.direction)
|
|
}, t.prototype.needCube = function() {
|
|
return !1
|
|
}, t.prototype.needProjectionMatrixCompute = function() {
|
|
return this._needProjectionMatrixCompute
|
|
}, t.prototype.forceProjectionMatrixCompute = function() {
|
|
this._needProjectionMatrixCompute = !0
|
|
}, t.prototype._initCache = function() {
|
|
e.prototype._initCache.call(this), this._cache.position = o.x.Zero()
|
|
}, t.prototype._isSynchronized = function() {
|
|
return !!this._cache.position.equals(this.position)
|
|
}, t.prototype.computeWorldMatrix = function(e) {
|
|
return !e && this.isSynchronized() ? (this._currentRenderId = this.getScene().getRenderId(), this._worldMatrix) : (this._updateCache(), this._cache.position.copyFrom(this.position), this._worldMatrix || (this._worldMatrix = o.j.Identity()), o.j.TranslationToRef(this.position.x, this.position.y, this.position.z, this._worldMatrix), this.parent && this.parent.getWorldMatrix && (this._worldMatrix.multiplyToRef(this.parent.getWorldMatrix(), this._worldMatrix), this._markSyncedWithParent()), this._worldMatrixDeterminantIsDirty = !0, this._worldMatrix)
|
|
}, t.prototype.getDepthMinZ = function(e) {
|
|
return void 0 !== this.shadowMinZ ? this.shadowMinZ : e.minZ
|
|
}, t.prototype.getDepthMaxZ = function(e) {
|
|
return void 0 !== this.shadowMaxZ ? this.shadowMaxZ : e.maxZ
|
|
}, t.prototype.setShadowProjectionMatrix = function(e, t, i) {
|
|
return this.customProjectionMatrixBuilder ? this.customProjectionMatrixBuilder(t, i, e) : this._setDefaultShadowProjectionMatrix(e, t, i), this
|
|
}, l.c([Object(L.o)()], t.prototype, "position", null), l.c([Object(L.o)()], t.prototype, "direction", null), l.c([Object(L.c)()], t.prototype, "shadowMinZ", null), l.c([Object(L.c)()], t.prototype, "shadowMaxZ", null), t
|
|
}(zn.a);
|
|
F.a.AddNodeConstructor("Light_Type_1", function(e, t) {
|
|
return function() {
|
|
return new Hn(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var Hn = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, n) || this;
|
|
return r._shadowFrustumSize = 0, r._shadowOrthoScale = .1, r.autoUpdateExtends = !0, r._orthoLeft = Number.MAX_VALUE, r._orthoRight = Number.MIN_VALUE, r._orthoTop = Number.MIN_VALUE, r._orthoBottom = Number.MAX_VALUE, r.position = i.scale(-1), r.direction = i, r
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "shadowFrustumSize", {
|
|
get: function() {
|
|
return this._shadowFrustumSize
|
|
},
|
|
set: function(e) {
|
|
this._shadowFrustumSize = e, this.forceProjectionMatrixCompute()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "shadowOrthoScale", {
|
|
get: function() {
|
|
return this._shadowOrthoScale
|
|
},
|
|
set: function(e) {
|
|
this._shadowOrthoScale = e, this.forceProjectionMatrixCompute()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "DirectionalLight"
|
|
}, t.prototype.getTypeID = function() {
|
|
return zn.a.LIGHTTYPEID_DIRECTIONALLIGHT
|
|
}, t.prototype._setDefaultShadowProjectionMatrix = function(e, t, i) {
|
|
this.shadowFrustumSize > 0 ? this._setDefaultFixedFrustumShadowProjectionMatrix(e) : this._setDefaultAutoExtendShadowProjectionMatrix(e, t, i)
|
|
}, t.prototype._setDefaultFixedFrustumShadowProjectionMatrix = function(e) {
|
|
var t = this.getScene().activeCamera;
|
|
t && o.j.OrthoLHToRef(this.shadowFrustumSize, this.shadowFrustumSize, void 0 !== this.shadowMinZ ? this.shadowMinZ : t.minZ, void 0 !== this.shadowMaxZ ? this.shadowMaxZ : t.maxZ, e)
|
|
}, t.prototype._setDefaultAutoExtendShadowProjectionMatrix = function(e, t, i) {
|
|
var n = this.getScene().activeCamera;
|
|
if (n) {
|
|
if (this.autoUpdateExtends || this._orthoLeft === Number.MAX_VALUE) {
|
|
var r = o.x.Zero();
|
|
this._orthoLeft = Number.MAX_VALUE, this._orthoRight = Number.MIN_VALUE, this._orthoTop = Number.MIN_VALUE, this._orthoBottom = Number.MAX_VALUE;
|
|
for (var s = 0; s < i.length; s++) {
|
|
var a = i[s];
|
|
if (a)
|
|
for (var c = a.getBoundingInfo().boundingBox, l = 0; l < c.vectorsWorld.length; l++) o.x.TransformCoordinatesToRef(c.vectorsWorld[l], t, r), r.x < this._orthoLeft && (this._orthoLeft = r.x), r.y < this._orthoBottom && (this._orthoBottom = r.y), r.x > this._orthoRight && (this._orthoRight = r.x), r.y > this._orthoTop && (this._orthoTop = r.y)
|
|
}
|
|
}
|
|
var u = this._orthoRight - this._orthoLeft,
|
|
h = this._orthoTop - this._orthoBottom;
|
|
o.j.OrthoOffCenterLHToRef(this._orthoLeft - u * this.shadowOrthoScale, this._orthoRight + u * this.shadowOrthoScale, this._orthoBottom - h * this.shadowOrthoScale, this._orthoTop + h * this.shadowOrthoScale, void 0 !== this.shadowMinZ ? this.shadowMinZ : n.minZ, void 0 !== this.shadowMaxZ ? this.shadowMaxZ : n.maxZ, e)
|
|
}
|
|
}, t.prototype._buildUniformLayout = function() {
|
|
this._uniformBuffer.addUniform("vLightData", 4), this._uniformBuffer.addUniform("vLightDiffuse", 4), this._uniformBuffer.addUniform("vLightSpecular", 3), this._uniformBuffer.addUniform("shadowsInfo", 3), this._uniformBuffer.addUniform("depthValues", 2), this._uniformBuffer.create()
|
|
}, t.prototype.transferToEffect = function(e, t) {
|
|
return this.computeTransformedInformation() ? (this._uniformBuffer.updateFloat4("vLightData", this.transformedDirection.x, this.transformedDirection.y, this.transformedDirection.z, 1, t), this) : (this._uniformBuffer.updateFloat4("vLightData", this.direction.x, this.direction.y, this.direction.z, 1, t), this)
|
|
}, t.prototype.getDepthMinZ = function(e) {
|
|
return 1
|
|
}, t.prototype.getDepthMaxZ = function(e) {
|
|
return 1
|
|
}, t.prototype.prepareLightSpecificDefines = function(e, t) {
|
|
e["DIRLIGHT" + t] = !0
|
|
}, l.c([Object(L.c)()], t.prototype, "shadowFrustumSize", null), l.c([Object(L.c)()], t.prototype, "shadowOrthoScale", null), l.c([Object(L.c)()], t.prototype, "autoUpdateExtends", void 0), t
|
|
}(jn);
|
|
fe.a.CreateHemisphere = function(e, t, i, n) {
|
|
var r = {
|
|
segments: t,
|
|
diameter: i
|
|
};
|
|
return Wn.CreateHemisphere(e, r, n)
|
|
};
|
|
var Wn = function() {
|
|
function e() {}
|
|
return e.CreateHemisphere = function(e, t, i) {
|
|
t.diameter || (t.diameter = 1), t.segments || (t.segments = 16);
|
|
var n = Ln.a.CreateSphere("", {
|
|
slice: .5,
|
|
diameter: t.diameter,
|
|
segments: t.segments
|
|
}, i),
|
|
r = fe.a.CreateDisc("", t.diameter / 2, 3 * t.segments + (4 - t.segments), i);
|
|
r.rotation.x = -Math.PI / 2, r.parent = n;
|
|
var o = fe.a.MergeMeshes([r, n], !0);
|
|
return o.name = e, o
|
|
}, e
|
|
}();
|
|
F.a.AddNodeConstructor("Light_Type_2", function(e, t) {
|
|
return function() {
|
|
return new Xn(e, o.x.Zero(), o.x.Zero(), 0, 0, t)
|
|
}
|
|
});
|
|
var Xn = function(e) {
|
|
function t(t, i, n, r, s, a) {
|
|
var c = e.call(this, t, a) || this;
|
|
return c._innerAngle = 0, c._projectionTextureMatrix = o.j.Zero(), c._projectionTextureLightNear = 1e-6, c._projectionTextureLightFar = 1e3, c._projectionTextureUpDirection = o.x.Up(), c._projectionTextureViewLightDirty = !0, c._projectionTextureProjectionLightDirty = !0, c._projectionTextureDirty = !0, c._projectionTextureViewTargetVector = o.x.Zero(), c._projectionTextureViewLightMatrix = o.j.Zero(), c._projectionTextureProjectionLightMatrix = o.j.Zero(), c._projectionTextureScalingMatrix = o.j.FromValues(.5, 0, 0, 0, 0, .5, 0, 0, 0, 0, .5, 0, .5, .5, .5, 1), c.position = i, c.direction = n, c.angle = r, c.exponent = s, c
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "angle", {
|
|
get: function() {
|
|
return this._angle
|
|
},
|
|
set: function(e) {
|
|
this._angle = e, this._cosHalfAngle = Math.cos(.5 * e), this._projectionTextureProjectionLightDirty = !0, this.forceProjectionMatrixCompute(), this._computeAngleValues()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "innerAngle", {
|
|
get: function() {
|
|
return this._innerAngle
|
|
},
|
|
set: function(e) {
|
|
this._innerAngle = e, this._computeAngleValues()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "shadowAngleScale", {
|
|
get: function() {
|
|
return this._shadowAngleScale
|
|
},
|
|
set: function(e) {
|
|
this._shadowAngleScale = e, this.forceProjectionMatrixCompute()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "projectionTextureMatrix", {
|
|
get: function() {
|
|
return this._projectionTextureMatrix
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "projectionTextureLightNear", {
|
|
get: function() {
|
|
return this._projectionTextureLightNear
|
|
},
|
|
set: function(e) {
|
|
this._projectionTextureLightNear = e, this._projectionTextureProjectionLightDirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "projectionTextureLightFar", {
|
|
get: function() {
|
|
return this._projectionTextureLightFar
|
|
},
|
|
set: function(e) {
|
|
this._projectionTextureLightFar = e, this._projectionTextureProjectionLightDirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "projectionTextureUpDirection", {
|
|
get: function() {
|
|
return this._projectionTextureUpDirection
|
|
},
|
|
set: function(e) {
|
|
this._projectionTextureUpDirection = e, this._projectionTextureProjectionLightDirty = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "projectionTexture", {
|
|
get: function() {
|
|
return this._projectionTexture
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
if (this._projectionTexture !== e && (this._projectionTexture = e, this._projectionTextureDirty = !0, this._projectionTexture && !this._projectionTexture.isReady())) {
|
|
var i = this._projectionTexture;
|
|
i.onLoadObservable && i.onLoadObservable.addOnce(function() {
|
|
t._markMeshesAsLightDirty()
|
|
})
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "SpotLight"
|
|
}, t.prototype.getTypeID = function() {
|
|
return zn.a.LIGHTTYPEID_SPOTLIGHT
|
|
}, t.prototype._setDirection = function(t) {
|
|
e.prototype._setDirection.call(this, t), this._projectionTextureViewLightDirty = !0
|
|
}, t.prototype._setPosition = function(t) {
|
|
e.prototype._setPosition.call(this, t), this._projectionTextureViewLightDirty = !0
|
|
}, t.prototype._setDefaultShadowProjectionMatrix = function(e, t, i) {
|
|
var n = this.getScene().activeCamera;
|
|
if (n) {
|
|
this._shadowAngleScale = this._shadowAngleScale || 1;
|
|
var r = this._shadowAngleScale * this._angle;
|
|
o.j.PerspectiveFovLHToRef(r, 1, this.getDepthMinZ(n), this.getDepthMaxZ(n), e)
|
|
}
|
|
}, t.prototype._computeProjectionTextureViewLightMatrix = function() {
|
|
this._projectionTextureViewLightDirty = !1, this._projectionTextureDirty = !0, this.position.addToRef(this.direction, this._projectionTextureViewTargetVector), o.j.LookAtLHToRef(this.position, this._projectionTextureViewTargetVector, this._projectionTextureUpDirection, this._projectionTextureViewLightMatrix)
|
|
}, t.prototype._computeProjectionTextureProjectionLightMatrix = function() {
|
|
this._projectionTextureProjectionLightDirty = !1, this._projectionTextureDirty = !0;
|
|
var e = this.projectionTextureLightFar,
|
|
t = this.projectionTextureLightNear,
|
|
i = e / (e - t),
|
|
n = -i * t,
|
|
r = 1 / Math.tan(this._angle / 2);
|
|
o.j.FromValuesToRef(r / 1, 0, 0, 0, 0, r, 0, 0, 0, 0, i, 1, 0, 0, n, 0, this._projectionTextureProjectionLightMatrix)
|
|
}, t.prototype._computeProjectionTextureMatrix = function() {
|
|
this._projectionTextureDirty = !1, this._projectionTextureViewLightMatrix.multiplyToRef(this._projectionTextureProjectionLightMatrix, this._projectionTextureMatrix), this._projectionTextureMatrix.multiplyToRef(this._projectionTextureScalingMatrix, this._projectionTextureMatrix)
|
|
}, t.prototype._buildUniformLayout = function() {
|
|
this._uniformBuffer.addUniform("vLightData", 4), this._uniformBuffer.addUniform("vLightDiffuse", 4), this._uniformBuffer.addUniform("vLightSpecular", 3), this._uniformBuffer.addUniform("vLightDirection", 3), this._uniformBuffer.addUniform("vLightFalloff", 4), this._uniformBuffer.addUniform("shadowsInfo", 3), this._uniformBuffer.addUniform("depthValues", 2), this._uniformBuffer.create()
|
|
}, t.prototype._computeAngleValues = function() {
|
|
this._lightAngleScale = 1 / Math.max(.001, Math.cos(.5 * this._innerAngle) - this._cosHalfAngle), this._lightAngleOffset = -this._cosHalfAngle * this._lightAngleScale
|
|
}, t.prototype.transferToEffect = function(e, t) {
|
|
var i;
|
|
return this.computeTransformedInformation() ? (this._uniformBuffer.updateFloat4("vLightData", this.transformedPosition.x, this.transformedPosition.y, this.transformedPosition.z, this.exponent, t), i = o.x.Normalize(this.transformedDirection)) : (this._uniformBuffer.updateFloat4("vLightData", this.position.x, this.position.y, this.position.z, this.exponent, t), i = o.x.Normalize(this.direction)), this._uniformBuffer.updateFloat4("vLightDirection", i.x, i.y, i.z, this._cosHalfAngle, t), this._uniformBuffer.updateFloat4("vLightFalloff", this.range, this._inverseSquaredRange, this._lightAngleScale, this._lightAngleOffset, t), this.projectionTexture && this.projectionTexture.isReady() && (this._projectionTextureViewLightDirty && this._computeProjectionTextureViewLightMatrix(), this._projectionTextureProjectionLightDirty && this._computeProjectionTextureProjectionLightMatrix(), this._projectionTextureDirty && this._computeProjectionTextureMatrix(), e.setMatrix("textureProjectionMatrix" + t, this._projectionTextureMatrix), e.setTexture("projectionLightSampler" + t, this.projectionTexture)), this
|
|
}, t.prototype.dispose = function() {
|
|
e.prototype.dispose.call(this), this._projectionTexture && this._projectionTexture.dispose()
|
|
}, t.prototype.prepareLightSpecificDefines = function(e, t) {
|
|
e["SPOTLIGHT" + t] = !0, e["PROJECTEDLIGHTTEXTURE" + t] = !(!this.projectionTexture || !this.projectionTexture.isReady())
|
|
}, l.c([Object(L.c)()], t.prototype, "angle", null), l.c([Object(L.c)()], t.prototype, "innerAngle", null), l.c([Object(L.c)()], t.prototype, "shadowAngleScale", null), l.c([Object(L.c)()], t.prototype, "exponent", void 0), l.c([Object(L.c)()], t.prototype, "projectionTextureLightNear", null), l.c([Object(L.c)()], t.prototype, "projectionTextureLightFar", null), l.c([Object(L.c)()], t.prototype, "projectionTextureUpDirection", null), l.c([Object(L.m)("projectedLightTexture")], t.prototype, "_projectionTexture", void 0), t
|
|
}(jn),
|
|
Yn = function(e) {
|
|
function t(t) {
|
|
var i = e.call(this, t) || this;
|
|
return i.cachedPosition = new o.x, i.cachedForward = new o.x(0, 0, 1), i._light = null, i.attachedMesh = new Fe.a("", i.gizmoLayer.utilityLayerScene), i._material = new Ri.a("light", i.gizmoLayer.originalScene), i._material.diffuseColor = new o.e(.5, .5, .5), i._material.specularColor = new o.e(.1, .1, .1), i
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "light", {
|
|
get: function() {
|
|
return this._light
|
|
},
|
|
set: function(e) {
|
|
var i = this;
|
|
if (this._light = e, e) {
|
|
this._lightMesh && this._lightMesh.dispose(), e instanceof Ti.a ? this._lightMesh = t._CreateHemisphericLightMesh(this.gizmoLayer.utilityLayerScene) : this._lightMesh = e instanceof Hn ? t._CreateDirectionalLightMesh(this.gizmoLayer.utilityLayerScene) : e instanceof Xn ? t._CreateSpotLightMesh(this.gizmoLayer.utilityLayerScene) : t._CreatePointLightMesh(this.gizmoLayer.utilityLayerScene), this._lightMesh.getChildMeshes(!1).forEach(function(e) {
|
|
e.material = i._material
|
|
}), this._lightMesh.parent = this._rootMesh;
|
|
var n = this.gizmoLayer._getSharedGizmoLight();
|
|
n.includedOnlyMeshes = n.includedOnlyMeshes.concat(this._lightMesh.getChildMeshes(!1)), this._lightMesh.rotationQuaternion = new o.q, e.position && this.attachedMesh.position.copyFrom(e.position), e.direction && this.attachedMesh.setDirection(e.direction), this._update()
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._update = function() {
|
|
e.prototype._update.call(this), this._light && (this._light.position && (this.attachedMesh.position.equals(this.cachedPosition) ? this.attachedMesh.position.copyFrom(this._light.position) : (this._light.position.copyFrom(this.attachedMesh.position), this.cachedPosition.copyFrom(this.attachedMesh.position))), this._light.direction && (o.x.DistanceSquared(this.attachedMesh.forward, this.cachedForward) > 1e-4 ? (this._light.direction.copyFrom(this.attachedMesh.forward), this.cachedForward.copyFrom(this.attachedMesh.forward)) : o.x.DistanceSquared(this.attachedMesh.forward, this._light.direction) > 1e-4 && (this.attachedMesh.setDirection(this._light.direction), this.cachedForward.copyFrom(this._lightMesh.forward))), this._light.isEnabled() ? this._material.diffuseColor.set(this._light.diffuse.r / 3, this._light.diffuse.g / 3, this._light.diffuse.b / 3) : this._material.diffuseColor.set(0, 0, 0))
|
|
}, t.prototype.dispose = function() {
|
|
this._material.dispose(), e.prototype.dispose.call(this)
|
|
}, t._CreateHemisphericLightMesh = function(e) {
|
|
var i = new fe.a("hemisphereLight", e),
|
|
n = Wn.CreateHemisphere(i.name, {
|
|
segments: 10,
|
|
diameter: 1
|
|
}, e);
|
|
n.position.z = -.15, n.rotation.x = Math.PI / 2, n.parent = i;
|
|
var r = this._createLightLines(3, e);
|
|
return r.parent = i, r.position.z, i.scaling.scaleInPlace(t._Scale), i.rotation.x = Math.PI / 2, i
|
|
}, t._CreatePointLightMesh = function(e) {
|
|
var i = new fe.a("pointLight", e),
|
|
n = Ln.a.CreateSphere(i.name, {
|
|
segments: 10,
|
|
diameter: 1
|
|
}, e);
|
|
return n.rotation.x = Math.PI / 2, n.parent = i, this._createLightLines(5, e).parent = i, i.scaling.scaleInPlace(t._Scale), i.rotation.x = Math.PI / 2, i
|
|
}, t._CreateSpotLightMesh = function(e) {
|
|
var i = new fe.a("spotLight", e);
|
|
Ln.a.CreateSphere(i.name, {
|
|
segments: 10,
|
|
diameter: 1
|
|
}, e).parent = i;
|
|
var n = Wn.CreateHemisphere(i.name, {
|
|
segments: 10,
|
|
diameter: 2
|
|
}, e);
|
|
return n.parent = i, n.rotation.x = -Math.PI / 2, this._createLightLines(2, e).parent = i, i.scaling.scaleInPlace(t._Scale), i.rotation.x = Math.PI / 2, i
|
|
}, t._CreateDirectionalLightMesh = function(e) {
|
|
var i = new fe.a("directionalLight", e),
|
|
n = new fe.a(i.name, e);
|
|
n.parent = i, Ln.a.CreateSphere(i.name, {
|
|
diameter: 1.2,
|
|
segments: 10
|
|
}, e).parent = n;
|
|
var r = fe.a.CreateCylinder(i.name, 6, .3, .3, 6, 1, e);
|
|
r.parent = n, (o = r.clone(i.name)).scaling.y = .5, o.position.x += 1.25, (s = r.clone(i.name)).scaling.y = .5, s.position.x += -1.25;
|
|
var o, s, a = fe.a.CreateCylinder(i.name, 1, 0, .6, 6, 1, e);
|
|
return a.position.y += 3, a.parent = n, (o = a.clone(i.name)).position.y = 1.5, o.position.x += 1.25, (s = a.clone(i.name)).position.y = 1.5, s.position.x += -1.25, n.scaling.scaleInPlace(t._Scale), n.rotation.z = Math.PI / 2, n.rotation.y = Math.PI / 2, i
|
|
}, t._Scale = .007, t._createLightLines = function(e, t) {
|
|
var i = new fe.a("root", t);
|
|
i.rotation.x = Math.PI / 2;
|
|
var n = new fe.a("linePivot", t);
|
|
n.parent = i;
|
|
var r = fe.a.CreateCylinder("line", 2, .2, .3, 6, 1, t);
|
|
if (r.position.y = r.scaling.y / 2 + 1.2, r.parent = n, e < 2) return n;
|
|
for (var o = 0; o < 4; o++) {
|
|
(s = n.clone("lineParentClone")).rotation.z = Math.PI / 4, s.rotation.y = Math.PI / 2 + Math.PI / 2 * o, s.getChildMeshes()[0].scaling.y = .5, s.getChildMeshes()[0].scaling.x = s.getChildMeshes()[0].scaling.z = .8, s.getChildMeshes()[0].position.y = s.getChildMeshes()[0].scaling.y / 2 + 1.2
|
|
}
|
|
if (e < 3) return i;
|
|
for (o = 0; o < 4; o++) {
|
|
(s = n.clone("linePivotClone")).rotation.z = Math.PI / 2, s.rotation.y = Math.PI / 2 * o
|
|
}
|
|
if (e < 4) return i;
|
|
for (o = 0; o < 4; o++) {
|
|
var s;
|
|
(s = n.clone("linePivotClone")).rotation.z = Math.PI + Math.PI / 4, s.rotation.y = Math.PI / 2 + Math.PI / 2 * o, s.getChildMeshes()[0].scaling.y = .5, s.getChildMeshes()[0].scaling.x = s.getChildMeshes()[0].scaling.z = .8, s.getChildMeshes()[0].position.y = s.getChildMeshes()[0].scaling.y / 2 + 1.2
|
|
}
|
|
return e < 5 ? i : ((s = n.clone("linePivotClone")).rotation.z = Math.PI, i)
|
|
}, t
|
|
}(On.a),
|
|
Kn = i(44);
|
|
zt.a.IncludesShadersStore.kernelBlurVaryingDeclaration = "varying vec2 sampleCoord{X};";
|
|
var Qn = "#ifdef DOF\nfactor=sampleCoC(sampleCoord{X});\ncomputedWeight=KERNEL_WEIGHT{X}*factor;\nsumOfWeights+=computedWeight;\n#else\ncomputedWeight=KERNEL_WEIGHT{X};\n#endif\n#ifdef PACKEDFLOAT\nblend+=unpack(texture2D(textureSampler,sampleCoord{X}))*computedWeight;\n#else\nblend+=texture2D(textureSampler,sampleCoord{X})*computedWeight;\n#endif";
|
|
zt.a.IncludesShadersStore.kernelBlurFragment = Qn;
|
|
var qn = "#ifdef DOF\nfactor=sampleCoC(sampleCenter+delta*KERNEL_DEP_OFFSET{X});\ncomputedWeight=KERNEL_DEP_WEIGHT{X}*factor;\nsumOfWeights+=computedWeight;\n#else\ncomputedWeight=KERNEL_DEP_WEIGHT{X};\n#endif\n#ifdef PACKEDFLOAT\nblend+=unpack(texture2D(textureSampler,sampleCenter+delta*KERNEL_DEP_OFFSET{X}))*computedWeight;\n#else\nblend+=texture2D(textureSampler,sampleCenter+delta*KERNEL_DEP_OFFSET{X})*computedWeight;\n#endif";
|
|
zt.a.IncludesShadersStore.kernelBlurFragment2 = qn;
|
|
var Zn = "\nuniform sampler2D textureSampler;\nuniform vec2 delta;\n\nvarying vec2 sampleCenter;\n#ifdef DOF\nuniform sampler2D circleOfConfusionSampler;\nuniform vec2 cameraMinMaxZ;\nfloat sampleDistance(const in vec2 offset) {\nfloat depth=texture2D(circleOfConfusionSampler,offset).g;\nreturn cameraMinMaxZ.x+(cameraMinMaxZ.y-cameraMinMaxZ.x)*depth;\n}\nfloat sampleCoC(const in vec2 offset) {\nfloat coc=texture2D(circleOfConfusionSampler,offset).r;\nreturn coc;\n}\n#endif\n#include<kernelBlurVaryingDeclaration>[0..varyingCount]\n#ifdef PACKEDFLOAT\nvec4 pack(float depth)\n{\nconst vec4 bit_shift=vec4(255.0*255.0*255.0,255.0*255.0,255.0,1.0);\nconst vec4 bit_mask=vec4(0.0,1.0/255.0,1.0/255.0,1.0/255.0);\nvec4 res=fract(depth*bit_shift);\nres-=res.xxyz*bit_mask;\nreturn res;\n}\nfloat unpack(vec4 color)\n{\nconst vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);\nreturn dot(color,bit_shift);\n}\n#endif\nvoid main(void)\n{\nfloat computedWeight=0.0;\n#ifdef PACKEDFLOAT\nfloat blend=0.;\n#else\nvec4 blend=vec4(0.);\n#endif\n#ifdef DOF\nfloat sumOfWeights=CENTER_WEIGHT;\nfloat factor=0.0;\n\n#ifdef PACKEDFLOAT\nblend+=unpack(texture2D(textureSampler,sampleCenter))*CENTER_WEIGHT;\n#else\nblend+=texture2D(textureSampler,sampleCenter)*CENTER_WEIGHT;\n#endif\n#endif\n#include<kernelBlurFragment>[0..varyingCount]\n#include<kernelBlurFragment2>[0..depCount]\n#ifdef PACKEDFLOAT\ngl_FragColor=pack(blend);\n#else\ngl_FragColor=blend;\n#endif\n#ifdef DOF\ngl_FragColor/=sumOfWeights;\n#endif\n}";
|
|
zt.a.ShadersStore.kernelBlurPixelShader = Zn;
|
|
zt.a.IncludesShadersStore.kernelBlurVertex = "sampleCoord{X}=sampleCenter+delta*KERNEL_OFFSET{X};";
|
|
var Jn = "\nattribute vec2 position;\n\nuniform vec2 delta;\n\nvarying vec2 sampleCenter;\n#include<kernelBlurVaryingDeclaration>[0..varyingCount]\nconst vec2 madd=vec2(0.5,0.5);\nvoid main(void) {\nsampleCenter=(position*madd+madd);\n#include<kernelBlurVertex>[0..varyingCount]\ngl_Position=vec4(position,0.0,1.0);\n}";
|
|
zt.a.ShadersStore.kernelBlurVertexShader = Jn;
|
|
var $n = function(e) {
|
|
function t(t, i, n, r, o, s, a, c, l, u, h) {
|
|
void 0 === s && (s = ke.a.BILINEAR_SAMPLINGMODE), void 0 === l && (l = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === u && (u = ""), void 0 === h && (h = !1);
|
|
var d = e.call(this, t, "kernelBlur", ["delta", "direction", "cameraMinMaxZ"], ["circleOfConfusionSampler"], r, o, s, a, c, null, l, "kernelBlur", {
|
|
varyingCount: 0,
|
|
depCount: 0
|
|
}, !0) || this;
|
|
return d.direction = i, d.blockCompilation = h, d._packedFloat = !1, d._staticDefines = "", d._staticDefines = u, d.onApplyObservable.add(function(e) {
|
|
d._outputTexture ? e.setFloat2("delta", 1 / d._outputTexture.width * d.direction.x, 1 / d._outputTexture.height * d.direction.y) : e.setFloat2("delta", 1 / d.width * d.direction.x, 1 / d.height * d.direction.y)
|
|
}), d.kernel = n, d
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "kernel", {
|
|
get: function() {
|
|
return this._idealKernel
|
|
},
|
|
set: function(e) {
|
|
this._idealKernel !== e && (e = Math.max(e, 1), this._idealKernel = e, this._kernel = this._nearestBestKernel(e), this.blockCompilation || this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "packedFloat", {
|
|
get: function() {
|
|
return this._packedFloat
|
|
},
|
|
set: function(e) {
|
|
this._packedFloat !== e && (this._packedFloat = e, this.blockCompilation || this._updateParameters())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.updateEffect = function(e, t, i, n, r, o) {
|
|
void 0 === e && (e = null), void 0 === t && (t = null), void 0 === i && (i = null), this._updateParameters(r, o)
|
|
}, t.prototype._updateParameters = function(t, i) {
|
|
for (var n = this._kernel, r = (n - 1) / 2, o = [], s = [], a = 0, c = 0; c < n; c++) {
|
|
var l = c / (n - 1),
|
|
u = this._gaussianWeight(2 * l - 1);
|
|
o[c] = c - r, s[c] = u, a += u
|
|
}
|
|
for (c = 0; c < s.length; c++) s[c] /= a;
|
|
var h = [],
|
|
d = [],
|
|
f = [];
|
|
for (c = 0; c <= r; c += 2) {
|
|
var p = Math.min(c + 1, Math.floor(r));
|
|
if (c === p) f.push({
|
|
o: o[c],
|
|
w: s[c]
|
|
});
|
|
else {
|
|
var _ = p === r,
|
|
g = s[c] + s[p] * (_ ? .5 : 1),
|
|
m = o[c] + 1 / (1 + s[c] / s[p]);
|
|
0 === m ? (f.push({
|
|
o: o[c],
|
|
w: s[c]
|
|
}), f.push({
|
|
o: o[c + 1],
|
|
w: s[c + 1]
|
|
})) : (f.push({
|
|
o: m,
|
|
w: g
|
|
}), f.push({
|
|
o: -m,
|
|
w: g
|
|
}))
|
|
}
|
|
}
|
|
for (c = 0; c < f.length; c++) d[c] = f[c].o, h[c] = f[c].w;
|
|
o = d, s = h;
|
|
var v = this.getEngine().getCaps().maxVaryingVectors,
|
|
y = Math.max(v, 0) - 1,
|
|
b = Math.min(o.length, y),
|
|
T = "";
|
|
T += this._staticDefines, -1 != this._staticDefines.indexOf("DOF") && (T += "#define CENTER_WEIGHT " + this._glslFloat(s[b - 1]) + "\r\n", b--);
|
|
for (c = 0; c < b; c++) T += "#define KERNEL_OFFSET" + c + " " + this._glslFloat(o[c]) + "\r\n", T += "#define KERNEL_WEIGHT" + c + " " + this._glslFloat(s[c]) + "\r\n";
|
|
var E = 0;
|
|
for (c = y; c < o.length; c++) T += "#define KERNEL_DEP_OFFSET" + E + " " + this._glslFloat(o[c]) + "\r\n", T += "#define KERNEL_DEP_WEIGHT" + E + " " + this._glslFloat(s[c]) + "\r\n", E++;
|
|
this.packedFloat && (T += "#define PACKEDFLOAT 1"), this.blockCompilation = !1, e.prototype.updateEffect.call(this, T, null, null, {
|
|
varyingCount: b,
|
|
depCount: E
|
|
}, t, i)
|
|
}, t.prototype._nearestBestKernel = function(e) {
|
|
for (var t = Math.round(e), i = 0, n = [t, t - 1, t + 1, t - 2, t + 2]; i < n.length; i++) {
|
|
var r = n[i];
|
|
if (r % 2 != 0 && Math.floor(r / 2) % 2 == 0 && r > 0) return Math.max(r, 3)
|
|
}
|
|
return Math.max(t, 3)
|
|
}, t.prototype._gaussianWeight = function(e) {
|
|
var t = -e * e / (1 / 3 * 2 * (1 / 3));
|
|
return 1 / (Math.sqrt(2 * Math.PI) * (1 / 3)) * Math.exp(t)
|
|
}, t.prototype._glslFloat = function(e, t) {
|
|
return void 0 === t && (t = 8), e.toFixed(t).replace(/0+$/, "")
|
|
}, t
|
|
}(Ht),
|
|
er = function(e) {
|
|
function t(t, i, n, r, s, a, c) {
|
|
void 0 === s && (s = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === a && (a = ke.a.BILINEAR_SAMPLINGMODE), void 0 === c && (c = !0);
|
|
var l = e.call(this, t, i, n, r, !0, s, !1, a, c) || this;
|
|
return l.scene = n, l.mirrorPlane = new o.n(0, 1, 0, 1), l._transformMatrix = o.j.Zero(), l._mirrorMatrix = o.j.Zero(), l._adaptiveBlurKernel = 0, l._blurKernelX = 0, l._blurKernelY = 0, l._blurRatio = 1, l.ignoreCameraViewport = !0, l._updateGammaSpace(), l._imageProcessingConfigChangeObserver = n.imageProcessingConfiguration.onUpdateParameters.add(function() {
|
|
l._updateGammaSpace
|
|
}), l.onBeforeRenderObservable.add(function() {
|
|
o.j.ReflectionToRef(l.mirrorPlane, l._mirrorMatrix), l._savedViewMatrix = n.getViewMatrix(), l._mirrorMatrix.multiplyToRef(l._savedViewMatrix, l._transformMatrix), n.setTransformMatrix(l._transformMatrix, n.getProjectionMatrix()), n.clipPlane = l.mirrorPlane, n.getEngine().cullBackFaces = !1, n._mirroredCameraPosition = o.x.TransformCoordinates(n.activeCamera.globalPosition, l._mirrorMatrix)
|
|
}), l.onAfterRenderObservable.add(function() {
|
|
n.setTransformMatrix(l._savedViewMatrix, n.getProjectionMatrix()), n.getEngine().cullBackFaces = !0, n._mirroredCameraPosition = null, n.clipPlane = null
|
|
}), l
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "blurRatio", {
|
|
get: function() {
|
|
return this._blurRatio
|
|
},
|
|
set: function(e) {
|
|
this._blurRatio !== e && (this._blurRatio = e, this._preparePostProcesses())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "adaptiveBlurKernel", {
|
|
set: function(e) {
|
|
this._adaptiveBlurKernel = e, this._autoComputeBlurKernel()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "blurKernel", {
|
|
set: function(e) {
|
|
this.blurKernelX = e, this.blurKernelY = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "blurKernelX", {
|
|
get: function() {
|
|
return this._blurKernelX
|
|
},
|
|
set: function(e) {
|
|
this._blurKernelX !== e && (this._blurKernelX = e, this._preparePostProcesses())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "blurKernelY", {
|
|
get: function() {
|
|
return this._blurKernelY
|
|
},
|
|
set: function(e) {
|
|
this._blurKernelY !== e && (this._blurKernelY = e, this._preparePostProcesses())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._autoComputeBlurKernel = function() {
|
|
var e = this.getScene().getEngine(),
|
|
t = this.getRenderWidth() / e.getRenderWidth(),
|
|
i = this.getRenderHeight() / e.getRenderHeight();
|
|
this.blurKernelX = this._adaptiveBlurKernel * t, this.blurKernelY = this._adaptiveBlurKernel * i
|
|
}, t.prototype._onRatioRescale = function() {
|
|
this._sizeRatio && (this.resize(this._initialSizeParameter), this._adaptiveBlurKernel || this._preparePostProcesses()), this._adaptiveBlurKernel && this._autoComputeBlurKernel()
|
|
}, t.prototype._updateGammaSpace = function() {
|
|
this.gammaSpace = !this.scene.imageProcessingConfiguration.isEnabled || !this.scene.imageProcessingConfiguration.applyByPostProcess
|
|
}, t.prototype._preparePostProcesses = function() {
|
|
if (this.clearPostProcesses(!0), this._blurKernelX && this._blurKernelY) {
|
|
var e = this.getScene().getEngine(),
|
|
t = e.getCaps().textureFloatRender ? _.a.TEXTURETYPE_FLOAT : _.a.TEXTURETYPE_HALF_FLOAT;
|
|
this._blurX = new $n("horizontal blur", new o.w(1, 0), this._blurKernelX, this._blurRatio, null, ke.a.BILINEAR_SAMPLINGMODE, e, !1, t), this._blurX.autoClear = !1, 1 === this._blurRatio && this.samples < 2 && this._texture ? this._blurX.inputTexture = this._texture : this._blurX.alwaysForcePOT = !0, this._blurY = new $n("vertical blur", new o.w(0, 1), this._blurKernelY, this._blurRatio, null, ke.a.BILINEAR_SAMPLINGMODE, e, !1, t), this._blurY.autoClear = !1, this._blurY.alwaysForcePOT = 1 !== this._blurRatio, this.addPostProcess(this._blurX), this.addPostProcess(this._blurY)
|
|
} else this._blurY && (this.removePostProcess(this._blurY), this._blurY.dispose(), this._blurY = null), this._blurX && (this.removePostProcess(this._blurX), this._blurX.dispose(), this._blurX = null)
|
|
}, t.prototype.clone = function() {
|
|
var e = this.getScene();
|
|
if (!e) return this;
|
|
var i = this.getSize(),
|
|
n = new t(this.name, i.width, e, this._renderTargetOptions.generateMipMaps, this._renderTargetOptions.type, this._renderTargetOptions.samplingMode, this._renderTargetOptions.generateDepthBuffer);
|
|
return n.hasAlpha = this.hasAlpha, n.level = this.level, n.mirrorPlane = this.mirrorPlane.clone(), this.renderList && (n.renderList = this.renderList.slice(0)), n
|
|
}, t.prototype.serialize = function() {
|
|
if (!this.name) return null;
|
|
var t = e.prototype.serialize.call(this);
|
|
return t.mirrorPlane = this.mirrorPlane.asArray(), t
|
|
}, t.prototype.dispose = function() {
|
|
e.prototype.dispose.call(this), this.scene.imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingConfigChangeObserver)
|
|
}, t
|
|
}(_i);
|
|
ke.a._CreateMirror = function(e, t, i, n) {
|
|
return new er(e, t, i, n)
|
|
}, ge.b.prototype._createDepthStencilCubeTexture = function(e, t) {
|
|
var i = new ze.a(this, ze.a.DATASOURCE_UNKNOWN);
|
|
if (i.isCube = !0, 1 === this.webGLVersion) return p.a.Error("Depth cube texture is not supported by WebGL 1."), i;
|
|
var n = l.a({
|
|
bilinearFiltering: !1,
|
|
comparisonFunction: 0,
|
|
generateStencil: !1
|
|
}, t),
|
|
r = this._gl;
|
|
this._bindTextureDirectly(r.TEXTURE_CUBE_MAP, i, !0), this._setupDepthStencilTexture(i, e, n.generateStencil, n.bilinearFiltering, n.comparisonFunction);
|
|
for (var o = 0; o < 6; o++) n.generateStencil ? r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X + o, 0, r.DEPTH24_STENCIL8, e, e, 0, r.DEPTH_STENCIL, r.UNSIGNED_INT_24_8, null) : r.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X + o, 0, r.DEPTH_COMPONENT24, e, e, 0, r.DEPTH_COMPONENT, r.UNSIGNED_INT, null);
|
|
return this._bindTextureDirectly(r.TEXTURE_CUBE_MAP, null), i
|
|
}, ge.b.prototype._partialLoadFile = function(e, t, i, n, r) {
|
|
void 0 === r && (r = null);
|
|
this._loadFile(e, function(e) {
|
|
i[t] = e, i._internalCount++, 6 === i._internalCount && n(i)
|
|
}, void 0, void 0, !0, function(e, t) {
|
|
r && e && r(e.status + " " + e.statusText, t)
|
|
})
|
|
}, ge.b.prototype._cascadeLoadFiles = function(e, t, i, n) {
|
|
void 0 === n && (n = null);
|
|
var r = [];
|
|
r._internalCount = 0;
|
|
for (var o = 0; o < 6; o++) this._partialLoadFile(i[o], o, r, t, n)
|
|
}, ge.b.prototype._cascadeLoadImgs = function(e, t, i, n) {
|
|
void 0 === n && (n = null);
|
|
var r = [];
|
|
r._internalCount = 0;
|
|
for (var o = 0; o < 6; o++) this._partialLoadImg(i[o], o, r, e, t, n)
|
|
}, ge.b.prototype._partialLoadImg = function(e, t, i, n, r, o) {
|
|
var s;
|
|
void 0 === o && (o = null);
|
|
s = ye.h.LoadImage(e, function() {
|
|
i[t] = s, i._internalCount++, n && n._removePendingData(s), 6 === i._internalCount && r(i)
|
|
}, function(e, t) {
|
|
n && n._removePendingData(s), o && o(e, t)
|
|
}, n ? n.offlineProvider : null), n && n._addPendingData(s)
|
|
}, ge.b.prototype.createCubeTexture = function(e, t, i, n, r, o, s, a, c, l, u, h, d) {
|
|
var f = this;
|
|
void 0 === r && (r = null), void 0 === o && (o = null), void 0 === a && (a = null), void 0 === c && (c = !1), void 0 === l && (l = 0), void 0 === u && (u = 0), void 0 === h && (h = null), void 0 === d && (d = []);
|
|
var _ = this._gl,
|
|
g = h || new ze.a(this, ze.a.DATASOURCE_CUBE);
|
|
g.isCube = !0, g.url = e, g.generateMipMaps = !n, g._lodGenerationScale = l, g._lodGenerationOffset = u, this._doNotHandleContextLost || (g._extension = a, g._files = i);
|
|
for (var m = e.lastIndexOf("."), v = a || (m > -1 ? e.substring(m).toLowerCase() : ""), y = null, b = 0, T = ge.b._TextureLoaders; b < T.length; b++) {
|
|
var E = T[b];
|
|
if (-1 === d.indexOf(E) && E.canLoad(v, this._textureFormatInUse, h, !1, !1)) {
|
|
y = E;
|
|
break
|
|
}
|
|
}
|
|
if (y) {
|
|
e = y.transformUrl(e, this._textureFormatInUse);
|
|
var A = function(e) {
|
|
f._bindTextureDirectly(_.TEXTURE_CUBE_MAP, g, !0), y.loadCubeData(e, g, c, r, o)
|
|
};
|
|
i && 6 === i.length ? y.supportCascades ? this._cascadeLoadFiles(t, A, i, o) : o ? o("Textures type does not support cascades.") : p.a.Warn("Texture loader does not support cascades.") : this._loadFile(e, A, void 0, void 0, !0, function(e, a) {
|
|
if (y) {
|
|
var h = y.getFallbackTextureUrl(g.url, f._textureFormatInUse);
|
|
if (p.a.Warn(y.constructor.name + " failed when trying to load " + g.url + ", falling back to the next supported loader"), h) return d.push(y), void f.createCubeTexture(h, t, i, n, r, o, s, v, c, l, u, g, d)
|
|
}
|
|
o && e && o(e.status + " " + e.statusText, a)
|
|
})
|
|
} else {
|
|
if (!i) throw new Error("Cannot load cubemap because files were not defined");
|
|
this._cascadeLoadImgs(t, function(e) {
|
|
var t = f.needPOTTextures ? ye.h.GetExponentOfTwo(e[0].width, f._caps.maxCubemapTextureSize) : e[0].width,
|
|
i = t;
|
|
if (f._prepareWorkingCanvas(), f._workingCanvas && f._workingContext) {
|
|
f._workingCanvas.width = t, f._workingCanvas.height = i;
|
|
var o = [_.TEXTURE_CUBE_MAP_POSITIVE_X, _.TEXTURE_CUBE_MAP_POSITIVE_Y, _.TEXTURE_CUBE_MAP_POSITIVE_Z, _.TEXTURE_CUBE_MAP_NEGATIVE_X, _.TEXTURE_CUBE_MAP_NEGATIVE_Y, _.TEXTURE_CUBE_MAP_NEGATIVE_Z];
|
|
f._bindTextureDirectly(_.TEXTURE_CUBE_MAP, g, !0), f._unpackFlipY(!1);
|
|
for (var a = s ? f._getInternalFormat(s) : f._gl.RGBA, c = 0; c < o.length; c++) e[c].width !== t || e[c].height !== i ? (f._workingContext.drawImage(e[c], 0, 0, e[c].width, e[c].height, 0, 0, t, i), _.texImage2D(o[c], 0, a, a, _.UNSIGNED_BYTE, f._workingCanvas)) : _.texImage2D(o[c], 0, a, a, _.UNSIGNED_BYTE, e[c]);
|
|
n || _.generateMipmap(_.TEXTURE_CUBE_MAP), f._setCubeMapTextureParams(!n), g.width = t, g.height = i, g.isReady = !0, s && (g.format = s), g.onLoadedObservable.notifyObservers(g), g.onLoadedObservable.clear(), r && r()
|
|
}
|
|
}, i, o)
|
|
}
|
|
return this._internalTexturesCache.push(g), g
|
|
};
|
|
var tr = function(e) {
|
|
function t(t, i, n, r, s, a, c, l, u, h, d, f, p) {
|
|
void 0 === n && (n = null), void 0 === r && (r = !1), void 0 === s && (s = null), void 0 === a && (a = null), void 0 === c && (c = null), void 0 === l && (l = _.a.TEXTUREFORMAT_RGBA), void 0 === u && (u = !1), void 0 === h && (h = null), void 0 === d && (d = !1), void 0 === f && (f = .8), void 0 === p && (p = 0);
|
|
var g = e.call(this, i) || this;
|
|
if (g.boundingBoxPosition = o.x.Zero(), g._rotationY = 0, g._prefiltered = !1, g.name = t, g.url = t, g._noMipmap = r, g.hasAlpha = !1, g._format = l, g.isCube = !0, g._textureMatrix = o.j.Identity(), g._createPolynomials = d, g.coordinatesMode = ke.a.CUBIC_MODE, !t && !s) return g;
|
|
var m = t.lastIndexOf("."),
|
|
v = h || (m > -1 ? t.substring(m).toLowerCase() : ""),
|
|
y = ".dds" === v,
|
|
b = ".env" === v;
|
|
if (b ? (g.gammaSpace = !1, g._prefiltered = !1) : (g._prefiltered = u, u && (g.gammaSpace = !1)), g._texture = g._getFromCache(t, r), !s && (b || y || n || (n = ["_px.jpg", "_py.jpg", "_pz.jpg", "_nx.jpg", "_ny.jpg", "_nz.jpg"]), s = [], n))
|
|
for (var T = 0; T < n.length; T++) s.push(t + n[T]);
|
|
return g._files = s, g._texture ? a && (g._texture.isReady ? ye.h.SetImmediate(function() {
|
|
return a()
|
|
}) : g._texture.onLoadedObservable.add(a)) : i.useDelayedTextureLoading ? g.delayLoadState = _.a.DELAYLOADSTATE_NOTLOADED : g._texture = u ? i.getEngine().createPrefilteredCubeTexture(t, i, f, p, a, c, l, h, g._createPolynomials) : i.getEngine().createCubeTexture(t, i, s, r, a, c, g._format, h, !1, f, p), g
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "boundingBoxSize", {
|
|
get: function() {
|
|
return this._boundingBoxSize
|
|
},
|
|
set: function(e) {
|
|
if (!this._boundingBoxSize || !this._boundingBoxSize.equals(e)) {
|
|
this._boundingBoxSize = e;
|
|
var t = this.getScene();
|
|
t && t.markAllMaterialsAsDirty(_.a.MATERIAL_TextureDirtyFlag)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rotationY", {
|
|
get: function() {
|
|
return this._rotationY
|
|
},
|
|
set: function(e) {
|
|
this._rotationY = e, this.setReflectionTextureMatrix(o.j.RotationY(this._rotationY))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "noMipmap", {
|
|
get: function() {
|
|
return this._noMipmap
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.CreateFromImages = function(e, i, n) {
|
|
var r = "";
|
|
return e.forEach(function(e) {
|
|
return r += e
|
|
}), new t(r, i, null, n, e)
|
|
}, t.CreateFromPrefilteredData = function(e, i, n, r) {
|
|
return void 0 === n && (n = null), void 0 === r && (r = !0), new t(e, i, null, !1, null, null, null, void 0, !0, n, r)
|
|
}, Object.defineProperty(t.prototype, "isPrefiltered", {
|
|
get: function() {
|
|
return this._prefiltered
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "CubeTexture"
|
|
}, t.prototype.updateURL = function(e, t, i) {
|
|
this.url && (this.releaseInternalTexture(), this.getScene().markAllMaterialsAsDirty(_.a.MATERIAL_TextureDirtyFlag)), this.url = e, this.delayLoadState = _.a.DELAYLOADSTATE_NOTLOADED, this._prefiltered = !1, i && (this._delayedOnLoad = i), this.delayLoad(t)
|
|
}, t.prototype.delayLoad = function(e) {
|
|
if (this.delayLoadState === _.a.DELAYLOADSTATE_NOTLOADED) {
|
|
var t = this.getScene();
|
|
t && (this.delayLoadState = _.a.DELAYLOADSTATE_LOADED, this._texture = this._getFromCache(this.url, this._noMipmap), this._texture || (this._prefiltered ? this._texture = t.getEngine().createPrefilteredCubeTexture(this.url, t, this.lodGenerationScale, this.lodGenerationOffset, this._delayedOnLoad, void 0, this._format, void 0, this._createPolynomials) : this._texture = t.getEngine().createCubeTexture(this.url, t, this._files, this._noMipmap, this._delayedOnLoad, null, this._format, e)))
|
|
}
|
|
}, t.prototype.getReflectionTextureMatrix = function() {
|
|
return this._textureMatrix
|
|
}, t.prototype.setReflectionTextureMatrix = function(e) {
|
|
var t = this;
|
|
e.updateFlag !== this._textureMatrix.updateFlag && (e.isIdentity() !== this._textureMatrix.isIdentity() && this.getScene().markAllMaterialsAsDirty(_.a.MATERIAL_TextureDirtyFlag, function(e) {
|
|
return -1 !== e.getActiveTextures().indexOf(t)
|
|
}), this._textureMatrix = e)
|
|
}, t.Parse = function(e, i, n) {
|
|
var r = L.a.Parse(function() {
|
|
var r = !1;
|
|
return e.prefiltered && (r = e.prefiltered), new t(n + e.name, i, e.extensions, !1, null, null, null, void 0, r)
|
|
}, e, i);
|
|
if (e.boundingBoxPosition && (r.boundingBoxPosition = o.x.FromArray(e.boundingBoxPosition)), e.boundingBoxSize && (r.boundingBoxSize = o.x.FromArray(e.boundingBoxSize)), e.animations)
|
|
for (var a = 0; a < e.animations.length; a++) {
|
|
var c = e.animations[a],
|
|
l = s.a.GetClass("BABYLON.Animation");
|
|
l && r.animations.push(l.Parse(c))
|
|
}
|
|
return r
|
|
}, t.prototype.clone = function() {
|
|
var e = this,
|
|
i = this.getScene(),
|
|
n = 0,
|
|
r = L.a.Clone(function() {
|
|
if (!i) return e;
|
|
var r = new t(e.url, i, e._extensions, e._noMipmap, e._files);
|
|
return n = r.uniqueId, r
|
|
}, this);
|
|
return r.uniqueId = n, r
|
|
}, l.c([Object(L.c)("rotationY")], t.prototype, "rotationY", null), l.c([Object(L.j)("textureMatrix")], t.prototype, "_textureMatrix", void 0), t
|
|
}(Kn.a);
|
|
ke.a._CubeTextureParser = tr.Parse, s.a.RegisteredTypes["BABYLON.CubeTexture"] = tr;
|
|
var ir = i(15),
|
|
nr = i(64),
|
|
rr = i(75),
|
|
or = i(18),
|
|
sr = " uniform vec4 vPrimaryColor;\n#ifdef USEHIGHLIGHTANDSHADOWCOLORS\nuniform vec4 vPrimaryColorShadow;\n#endif\nuniform float shadowLevel;\nuniform float alpha;\n#ifdef DIFFUSE\nuniform vec2 vDiffuseInfos;\n#endif\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionMicrosurfaceInfos;\n#endif\n#if defined(REFLECTIONFRESNEL) || defined(OPACITYFRESNEL)\nuniform vec3 vBackgroundCenter;\n#endif\n#ifdef REFLECTIONFRESNEL\nuniform vec4 vReflectionControl;\n#endif\n#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(REFRACTION)\nuniform mat4 view;\n#endif";
|
|
zt.a.IncludesShadersStore.backgroundFragmentDeclaration = sr;
|
|
var ar = "layout(std140,column_major) uniform;\nuniform Material\n{\nuniform vec4 vPrimaryColor;\nuniform vec4 vPrimaryColorShadow;\nuniform vec2 vDiffuseInfos;\nuniform vec2 vReflectionInfos;\nuniform mat4 diffuseMatrix;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionMicrosurfaceInfos;\nuniform float fFovMultiplier;\nuniform float pointSize;\nuniform float shadowLevel;\nuniform float alpha;\n#if defined(REFLECTIONFRESNEL) || defined(OPACITYFRESNEL)\nuniform vec3 vBackgroundCenter;\n#endif\n#ifdef REFLECTIONFRESNEL\nuniform vec4 vReflectionControl;\n#endif\n};\nuniform Scene {\nmat4 viewProjection;\n#ifdef MULTIVIEW\nmat4 viewProjectionR;\n#endif\nmat4 view;\n};";
|
|
zt.a.IncludesShadersStore.backgroundUboDeclaration = ar;
|
|
i(113), i(84), i(85), i(120), i(112), i(95), i(98), i(89), i(114), i(99);
|
|
var cr = "#ifdef TEXTURELODSUPPORT\n#extension GL_EXT_shader_texture_lod : enable\n#endif\nprecision highp float;\n#include<__decl__backgroundFragment>\n#define RECIPROCAL_PI2 0.15915494\n\nuniform vec3 vEyePosition;\n\nvarying vec3 vPositionW;\n#ifdef MAINUV1\nvarying vec2 vMainUV1;\n#endif\n#ifdef MAINUV2\nvarying vec2 vMainUV2;\n#endif\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef DIFFUSE\n#if DIFFUSEDIRECTUV == 1\n#define vDiffuseUV vMainUV1\n#elif DIFFUSEDIRECTUV == 2\n#define vDiffuseUV vMainUV2\n#else\nvarying vec2 vDiffuseUV;\n#endif\nuniform sampler2D diffuseSampler;\n#endif\n\n#ifdef REFLECTION\n#ifdef REFLECTIONMAP_3D\n#define sampleReflection(s,c) textureCube(s,c)\nuniform samplerCube reflectionSampler;\n#ifdef TEXTURELODSUPPORT\n#define sampleReflectionLod(s,c,l) textureCubeLodEXT(s,c,l)\n#else\nuniform samplerCube reflectionSamplerLow;\nuniform samplerCube reflectionSamplerHigh;\n#endif\n#else\n#define sampleReflection(s,c) texture2D(s,c)\nuniform sampler2D reflectionSampler;\n#ifdef TEXTURELODSUPPORT\n#define sampleReflectionLod(s,c,l) texture2DLodEXT(s,c,l)\n#else\nuniform samplerCube reflectionSamplerLow;\nuniform samplerCube reflectionSamplerHigh;\n#endif\n#endif\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#else\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#endif\n#include<reflectionFunction>\n#endif\n\n#ifndef FROMLINEARSPACE\n#define FROMLINEARSPACE;\n#endif\n\n#ifndef SHADOWONLY\n#define SHADOWONLY;\n#endif\n#include<imageProcessingDeclaration>\n\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<helperFunctions>\n#include<lightsFragmentFunctions>\n#include<shadowsFragmentFunctions>\n#include<imageProcessingFunctions>\n#include<clipPlaneFragmentDeclaration>\n\n#include<fogFragmentDeclaration>\n#ifdef REFLECTIONFRESNEL\n#define FRESNEL_MAXIMUM_ON_ROUGH 0.25\nvec3 fresnelSchlickEnvironmentGGX(float VdotN,vec3 reflectance0,vec3 reflectance90,float smoothness)\n{\n\nfloat weight=mix(FRESNEL_MAXIMUM_ON_ROUGH,1.0,smoothness);\nreturn reflectance0+weight*(reflectance90-reflectance0)*pow5(saturate(1.0-VdotN));\n}\n#endif\nvoid main(void) {\n#include<clipPlaneFragment>\nvec3 viewDirectionW=normalize(vEyePosition-vPositionW);\n\n#ifdef NORMAL\nvec3 normalW=normalize(vNormalW);\n#else\nvec3 normalW=vec3(0.0,1.0,0.0);\n#endif\n\nfloat shadow=1.;\nfloat globalShadow=0.;\nfloat shadowLightCount=0.;\n#include<lightFragment>[0..maxSimultaneousLights]\n#ifdef SHADOWINUSE\nglobalShadow/=shadowLightCount;\n#else\nglobalShadow=1.0;\n#endif\n\nvec4 reflectionColor=vec4(1.,1.,1.,1.);\n#ifdef REFLECTION\nvec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),normalW);\n#ifdef REFLECTIONMAP_OPPOSITEZ\nreflectionVector.z*=-1.0;\n#endif\n\n#ifdef REFLECTIONMAP_3D\nvec3 reflectionCoords=reflectionVector;\n#else\nvec2 reflectionCoords=reflectionVector.xy;\n#ifdef REFLECTIONMAP_PROJECTION\nreflectionCoords/=reflectionVector.z;\n#endif\nreflectionCoords.y=1.0-reflectionCoords.y;\n#endif\n#ifdef REFLECTIONBLUR\nfloat reflectionLOD=vReflectionInfos.y;\n#ifdef TEXTURELODSUPPORT\n\nreflectionLOD=reflectionLOD*log2(vReflectionMicrosurfaceInfos.x)*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;\nreflectionColor=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);\n#else\nfloat lodReflectionNormalized=saturate(reflectionLOD);\nfloat lodReflectionNormalizedDoubled=lodReflectionNormalized*2.0;\nvec4 reflectionSpecularMid=sampleReflection(reflectionSampler,reflectionCoords);\nif(lodReflectionNormalizedDoubled<1.0){\nreflectionColor=mix(\nsampleReflection(reflectionSamplerHigh,reflectionCoords),\nreflectionSpecularMid,\nlodReflectionNormalizedDoubled\n);\n} else {\nreflectionColor=mix(\nreflectionSpecularMid,\nsampleReflection(reflectionSamplerLow,reflectionCoords),\nlodReflectionNormalizedDoubled-1.0\n);\n}\n#endif\n#else\nvec4 reflectionSample=sampleReflection(reflectionSampler,reflectionCoords);\nreflectionColor=reflectionSample;\n#endif\n#ifdef RGBDREFLECTION\nreflectionColor.rgb=fromRGBD(reflectionColor);\n#endif\n#ifdef GAMMAREFLECTION\nreflectionColor.rgb=toLinearSpace(reflectionColor.rgb);\n#endif\n#ifdef REFLECTIONBGR\nreflectionColor.rgb=reflectionColor.bgr;\n#endif\n\nreflectionColor.rgb*=vReflectionInfos.x;\n#endif\n\nvec3 diffuseColor=vec3(1.,1.,1.);\nfloat finalAlpha=alpha;\n#ifdef DIFFUSE\nvec4 diffuseMap=texture2D(diffuseSampler,vDiffuseUV);\n#ifdef GAMMADIFFUSE\ndiffuseMap.rgb=toLinearSpace(diffuseMap.rgb);\n#endif\n\ndiffuseMap.rgb*=vDiffuseInfos.y;\n#ifdef DIFFUSEHASALPHA\nfinalAlpha*=diffuseMap.a;\n#endif\ndiffuseColor=diffuseMap.rgb;\n#endif\n\n#ifdef REFLECTIONFRESNEL\nvec3 colorBase=diffuseColor;\n#else\nvec3 colorBase=reflectionColor.rgb*diffuseColor;\n#endif\ncolorBase=max(colorBase,0.0);\n\n#ifdef USERGBCOLOR\nvec3 finalColor=colorBase;\n#else\n#ifdef USEHIGHLIGHTANDSHADOWCOLORS\nvec3 mainColor=mix(vPrimaryColorShadow.rgb,vPrimaryColor.rgb,colorBase);\n#else\nvec3 mainColor=vPrimaryColor.rgb;\n#endif\nvec3 finalColor=colorBase*mainColor;\n#endif\n\n#ifdef REFLECTIONFRESNEL\nvec3 reflectionAmount=vReflectionControl.xxx;\nvec3 reflectionReflectance0=vReflectionControl.yyy;\nvec3 reflectionReflectance90=vReflectionControl.zzz;\nfloat VdotN=dot(normalize(vEyePosition),normalW);\nvec3 planarReflectionFresnel=fresnelSchlickEnvironmentGGX(saturate(VdotN),reflectionReflectance0,reflectionReflectance90,1.0);\nreflectionAmount*=planarReflectionFresnel;\n#ifdef REFLECTIONFALLOFF\nfloat reflectionDistanceFalloff=1.0-saturate(length(vPositionW.xyz-vBackgroundCenter)*vReflectionControl.w);\nreflectionDistanceFalloff*=reflectionDistanceFalloff;\nreflectionAmount*=reflectionDistanceFalloff;\n#endif\nfinalColor=mix(finalColor,reflectionColor.rgb,saturate(reflectionAmount));\n#endif\n#ifdef OPACITYFRESNEL\nfloat viewAngleToFloor=dot(normalW,normalize(vEyePosition-vBackgroundCenter));\n\nconst float startAngle=0.1;\nfloat fadeFactor=saturate(viewAngleToFloor/startAngle);\nfinalAlpha*=fadeFactor*fadeFactor;\n#endif\n\n#ifdef SHADOWINUSE\nfinalColor=mix(finalColor*shadowLevel,finalColor,globalShadow);\n#endif\n\nvec4 color=vec4(finalColor,finalAlpha);\n#include<fogFragment>\n#ifdef IMAGEPROCESSINGPOSTPROCESS\n\n\ncolor.rgb=clamp(color.rgb,0.,30.0);\n#else\n\ncolor=applyImageProcessing(color);\n#endif\n#ifdef PREMULTIPLYALPHA\n\ncolor.rgb*=color.a;\n#endif\n#ifdef NOISE\ncolor.rgb+=dither(vPositionW.xy,0.5);\ncolor=max(color,0.0);\n#endif\ngl_FragColor=color;\n}\n";
|
|
zt.a.ShadersStore.backgroundPixelShader = cr;
|
|
var lr = "uniform mat4 view;\nuniform mat4 viewProjection;\nuniform float shadowLevel;\n#ifdef DIFFUSE\nuniform mat4 diffuseMatrix;\nuniform vec2 vDiffuseInfos;\n#endif\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionMicrosurfaceInfos;\nuniform float fFovMultiplier;\n#endif\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif";
|
|
zt.a.IncludesShadersStore.backgroundVertexDeclaration = lr;
|
|
i(67), i(68), i(96), i(100), i(69), i(70), i(90), i(116), i(117);
|
|
var ur = "precision highp float;\n#include<__decl__backgroundVertex>\n#include<helperFunctions>\n\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#include<bonesDeclaration>\n\n#include<instancesDeclaration>\n\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#ifdef MAINUV1\nvarying vec2 vMainUV1;\n#endif\n#ifdef MAINUV2\nvarying vec2 vMainUV2;\n#endif\n#if defined(DIFFUSE) && DIFFUSEDIRECTUV == 0\nvarying vec2 vDiffuseUV;\n#endif\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\nvoid main(void) {\n#ifdef REFLECTIONMAP_SKYBOX\n#ifdef REFLECTIONMAP_SKYBOX_TRANSFORMED\nvPositionUVW=(reflectionMatrix*vec4(position,1.0)).xyz;\n#else\nvPositionUVW=position;\n#endif\n#endif\n#include<instancesVertex>\n#include<bonesVertex>\n#ifdef MULTIVIEW\nif (gl_ViewID_OVR == 0u) {\ngl_Position=viewProjection*finalWorld*vec4(position,1.0);\n} else {\ngl_Position=viewProjectionR*finalWorld*vec4(position,1.0);\n}\n#else\ngl_Position=viewProjection*finalWorld*vec4(position,1.0);\n#endif\nvec4 worldPos=finalWorld*vec4(position,1.0);\nvPositionW=vec3(worldPos);\n#ifdef NORMAL\nmat3 normalWorld=mat3(finalWorld);\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvNormalW=normalize(normalWorld*normal);\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvDirectionW=normalize(vec3(finalWorld*vec4(position,0.0)));\n#ifdef EQUIRECTANGULAR_RELFECTION_FOV\nmat3 screenToWorld=inverseMat3(mat3(finalWorld*viewProjection));\nvec3 segment=mix(vDirectionW,screenToWorld*vec3(0.0,0.0,1.0),abs(fFovMultiplier-1.0));\nif (fFovMultiplier<=1.0) {\nvDirectionW=normalize(segment);\n} else {\nvDirectionW=normalize(vDirectionW+(vDirectionW-segment));\n}\n#endif\n#endif\n#ifndef UV1\nvec2 uv=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2=vec2(0.,0.);\n#endif\n#ifdef MAINUV1\nvMainUV1=uv;\n#endif\n#ifdef MAINUV2\nvMainUV2=uv2;\n#endif\n#if defined(DIFFUSE) && DIFFUSEDIRECTUV == 0\nif (vDiffuseInfos.x == 0.)\n{\nvDiffuseUV=vec2(diffuseMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvDiffuseUV=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n\n#include<clipPlaneVertex>\n\n#include<fogVertex>\n\n#include<shadowsVertex>[0..maxSimultaneousLights]\n\n#ifdef VERTEXCOLOR\nvColor=color;\n#endif\n\n#ifdef POINTSIZE\ngl_PointSize=pointSize;\n#endif\n}\n";
|
|
zt.a.ShadersStore.backgroundVertexShader = ur;
|
|
var hr = function(e) {
|
|
function t() {
|
|
var t = e.call(this) || this;
|
|
return t.DIFFUSE = !1, t.DIFFUSEDIRECTUV = 0, t.GAMMADIFFUSE = !1, t.DIFFUSEHASALPHA = !1, t.OPACITYFRESNEL = !1, t.REFLECTIONBLUR = !1, t.REFLECTIONFRESNEL = !1, t.REFLECTIONFALLOFF = !1, t.TEXTURELODSUPPORT = !1, t.PREMULTIPLYALPHA = !1, t.USERGBCOLOR = !1, t.USEHIGHLIGHTANDSHADOWCOLORS = !1, t.NOISE = !1, t.REFLECTIONBGR = !1, t.IMAGEPROCESSING = !1, t.VIGNETTE = !1, t.VIGNETTEBLENDMODEMULTIPLY = !1, t.VIGNETTEBLENDMODEOPAQUE = !1, t.TONEMAPPING = !1, t.TONEMAPPING_ACES = !1, t.CONTRAST = !1, t.COLORCURVES = !1, t.COLORGRADING = !1, t.COLORGRADING3D = !1, t.SAMPLER3DGREENDEPTH = !1, t.SAMPLER3DBGRMAP = !1, t.IMAGEPROCESSINGPOSTPROCESS = !1, t.EXPOSURE = !1, t.MULTIVIEW = !1, t.REFLECTION = !1, t.REFLECTIONMAP_3D = !1, t.REFLECTIONMAP_SPHERICAL = !1, t.REFLECTIONMAP_PLANAR = !1, t.REFLECTIONMAP_CUBIC = !1, t.REFLECTIONMAP_PROJECTION = !1, t.REFLECTIONMAP_SKYBOX = !1, t.REFLECTIONMAP_SKYBOX_TRANSFORMED = !1, t.REFLECTIONMAP_EXPLICIT = !1, t.REFLECTIONMAP_EQUIRECTANGULAR = !1, t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = !1, t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = !1, t.INVERTCUBICMAP = !1, t.REFLECTIONMAP_OPPOSITEZ = !1, t.LODINREFLECTIONALPHA = !1, t.GAMMAREFLECTION = !1, t.RGBDREFLECTION = !1, t.EQUIRECTANGULAR_RELFECTION_FOV = !1, t.MAINUV1 = !1, t.MAINUV2 = !1, t.UV1 = !1, t.UV2 = !1, t.CLIPPLANE = !1, t.CLIPPLANE2 = !1, t.CLIPPLANE3 = !1, t.CLIPPLANE4 = !1, t.POINTSIZE = !1, t.FOG = !1, t.NORMAL = !1, t.NUM_BONE_INFLUENCERS = 0, t.BonesPerMesh = 0, t.INSTANCES = !1, t.SHADOWFLOAT = !1, t.rebuild(), t
|
|
}
|
|
return l.d(t, e), t
|
|
}(nr.a),
|
|
dr = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i) || this;
|
|
return n.primaryColor = o.e.White(), n._primaryColorShadowLevel = 0, n._primaryColorHighlightLevel = 0, n.reflectionTexture = null, n.reflectionBlur = 0, n.diffuseTexture = null, n._shadowLights = null, n.shadowLights = null, n.shadowLevel = 0, n.sceneCenter = o.x.Zero(), n.opacityFresnel = !0, n.reflectionFresnel = !1, n.reflectionFalloffDistance = 0, n.reflectionAmount = 1, n.reflectionReflectance0 = .05, n.reflectionReflectance90 = .5, n.useRGBColor = !0, n.enableNoise = !1, n._fovMultiplier = 1, n.useEquirectangularFOV = !1, n._maxSimultaneousLights = 4, n.maxSimultaneousLights = 4, n._imageProcessingObserver = null, n.switchToBGR = !1, n._renderTargets = new kt.a(16), n._reflectionControls = o.y.Zero(), n._white = o.e.White(), n._primaryShadowColor = o.e.Black(), n._primaryHighlightColor = o.e.Black(), n._attachImageProcessingConfiguration(null), n.getRenderTargetTextures = function() {
|
|
return n._renderTargets.reset(), n._diffuseTexture && n._diffuseTexture.isRenderTarget && n._renderTargets.push(n._diffuseTexture), n._reflectionTexture && n._reflectionTexture.isRenderTarget && n._renderTargets.push(n._reflectionTexture), n._renderTargets
|
|
}, n
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "_perceptualColor", {
|
|
get: function() {
|
|
return this.__perceptualColor
|
|
},
|
|
set: function(e) {
|
|
this.__perceptualColor = e, this._computePrimaryColorFromPerceptualColor(), this._markAllSubMeshesAsLightsDirty()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "primaryColorShadowLevel", {
|
|
get: function() {
|
|
return this._primaryColorShadowLevel
|
|
},
|
|
set: function(e) {
|
|
this._primaryColorShadowLevel = e, this._computePrimaryColors(), this._markAllSubMeshesAsLightsDirty()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "primaryColorHighlightLevel", {
|
|
get: function() {
|
|
return this._primaryColorHighlightLevel
|
|
},
|
|
set: function(e) {
|
|
this._primaryColorHighlightLevel = e, this._computePrimaryColors(), this._markAllSubMeshesAsLightsDirty()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "reflectionStandardFresnelWeight", {
|
|
set: function(e) {
|
|
var i = e;
|
|
i < .5 ? (i *= 2, this.reflectionReflectance0 = t.StandardReflectance0 * i, this.reflectionReflectance90 = t.StandardReflectance90 * i) : (i = 2 * i - 1, this.reflectionReflectance0 = t.StandardReflectance0 + (1 - t.StandardReflectance0) * i, this.reflectionReflectance90 = t.StandardReflectance90 + (1 - t.StandardReflectance90) * i)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "fovMultiplier", {
|
|
get: function() {
|
|
return this._fovMultiplier
|
|
},
|
|
set: function(e) {
|
|
isNaN(e) && (e = 1), this._fovMultiplier = Math.max(0, Math.min(2, e))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._attachImageProcessingConfiguration = function(e) {
|
|
var t = this;
|
|
e !== this._imageProcessingConfiguration && (this._imageProcessingConfiguration && this._imageProcessingObserver && this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver), this._imageProcessingConfiguration = e || this.getScene().imageProcessingConfiguration, this._imageProcessingConfiguration && (this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(function() {
|
|
t._computePrimaryColorFromPerceptualColor(), t._markAllSubMeshesAsImageProcessingDirty()
|
|
})))
|
|
}, Object.defineProperty(t.prototype, "imageProcessingConfiguration", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration
|
|
},
|
|
set: function(e) {
|
|
this._attachImageProcessingConfiguration(e), this._markAllSubMeshesAsTexturesDirty()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorCurvesEnabled", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorCurvesEnabled
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorCurvesEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorGradingEnabled", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorGradingEnabled
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorGradingEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraToneMappingEnabled", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.toneMappingEnabled
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.toneMappingEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraExposure", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.exposure
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.exposure = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraContrast", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.contrast
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.contrast = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorGradingTexture", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.colorGradingTexture
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorGradingTexture = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorCurves", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorCurves
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorCurves = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "hasRenderTargetTextures", {
|
|
get: function() {
|
|
return !(!this._diffuseTexture || !this._diffuseTexture.isRenderTarget) || !(!this._reflectionTexture || !this._reflectionTexture.isRenderTarget)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.needAlphaTesting = function() {
|
|
return !0
|
|
}, t.prototype.needAlphaBlending = function() {
|
|
return this.alpha < 0 || null != this._diffuseTexture && this._diffuseTexture.hasAlpha
|
|
}, t.prototype.isReadyForSubMesh = function(e, t, i) {
|
|
var n = this;
|
|
if (void 0 === i && (i = !1), t.effect && this.isFrozen && this._wasPreviouslyReady) return !0;
|
|
t._materialDefines || (t._materialDefines = new hr);
|
|
var r = this.getScene(),
|
|
o = t._materialDefines;
|
|
if (!this.checkReadyOnEveryCall && t.effect && o._renderId === r.getRenderId()) return !0;
|
|
var s = r.getEngine();
|
|
if (ir.a.PrepareDefinesForLights(r, e, o, !1, this._maxSimultaneousLights), o._needNormals = !0, ir.a.PrepareDefinesForMultiview(r, o), o._areTexturesDirty) {
|
|
if (o._needUVs = !1, r.texturesEnabled) {
|
|
if (r.getEngine().getCaps().textureLOD && (o.TEXTURELODSUPPORT = !0), this._diffuseTexture && or.a.DiffuseTextureEnabled) {
|
|
if (!this._diffuseTexture.isReadyOrNotBlocking()) return !1;
|
|
ir.a.PrepareDefinesForMergedUV(this._diffuseTexture, o, "DIFFUSE"), o.DIFFUSEHASALPHA = this._diffuseTexture.hasAlpha, o.GAMMADIFFUSE = this._diffuseTexture.gammaSpace, o.OPACITYFRESNEL = this._opacityFresnel
|
|
} else o.DIFFUSE = !1, o.DIFFUSEHASALPHA = !1, o.GAMMADIFFUSE = !1, o.OPACITYFRESNEL = !1;
|
|
var a = this._reflectionTexture;
|
|
if (a && or.a.ReflectionTextureEnabled) {
|
|
if (!a.isReadyOrNotBlocking()) return !1;
|
|
switch (o.REFLECTION = !0, o.GAMMAREFLECTION = a.gammaSpace, o.RGBDREFLECTION = a.isRGBD, o.REFLECTIONBLUR = this._reflectionBlur > 0, o.REFLECTIONMAP_OPPOSITEZ = this.getScene().useRightHandedSystem ? !a.invertZ : a.invertZ, o.LODINREFLECTIONALPHA = a.lodLevelInAlpha, o.EQUIRECTANGULAR_RELFECTION_FOV = this.useEquirectangularFOV, o.REFLECTIONBGR = this.switchToBGR, a.coordinatesMode === ke.a.INVCUBIC_MODE && (o.INVERTCUBICMAP = !0), o.REFLECTIONMAP_3D = a.isCube, a.coordinatesMode) {
|
|
case ke.a.EXPLICIT_MODE:
|
|
o.REFLECTIONMAP_EXPLICIT = !0;
|
|
break;
|
|
case ke.a.PLANAR_MODE:
|
|
o.REFLECTIONMAP_PLANAR = !0;
|
|
break;
|
|
case ke.a.PROJECTION_MODE:
|
|
o.REFLECTIONMAP_PROJECTION = !0;
|
|
break;
|
|
case ke.a.SKYBOX_MODE:
|
|
o.REFLECTIONMAP_SKYBOX = !0, o.REFLECTIONMAP_SKYBOX_TRANSFORMED = !a.getReflectionTextureMatrix().isIdentity();
|
|
break;
|
|
case ke.a.SPHERICAL_MODE:
|
|
o.REFLECTIONMAP_SPHERICAL = !0;
|
|
break;
|
|
case ke.a.EQUIRECTANGULAR_MODE:
|
|
o.REFLECTIONMAP_EQUIRECTANGULAR = !0;
|
|
break;
|
|
case ke.a.FIXED_EQUIRECTANGULAR_MODE:
|
|
o.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = !0;
|
|
break;
|
|
case ke.a.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:
|
|
o.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = !0;
|
|
break;
|
|
case ke.a.CUBIC_MODE:
|
|
case ke.a.INVCUBIC_MODE:
|
|
default:
|
|
o.REFLECTIONMAP_CUBIC = !0
|
|
}
|
|
this.reflectionFresnel ? (o.REFLECTIONFRESNEL = !0, o.REFLECTIONFALLOFF = this.reflectionFalloffDistance > 0, this._reflectionControls.x = this.reflectionAmount, this._reflectionControls.y = this.reflectionReflectance0, this._reflectionControls.z = this.reflectionReflectance90, this._reflectionControls.w = 1 / this.reflectionFalloffDistance) : (o.REFLECTIONFRESNEL = !1, o.REFLECTIONFALLOFF = !1)
|
|
} else o.REFLECTION = !1, o.REFLECTIONFRESNEL = !1, o.REFLECTIONFALLOFF = !1, o.REFLECTIONBLUR = !1, o.REFLECTIONMAP_3D = !1, o.REFLECTIONMAP_SPHERICAL = !1, o.REFLECTIONMAP_PLANAR = !1, o.REFLECTIONMAP_CUBIC = !1, o.REFLECTIONMAP_PROJECTION = !1, o.REFLECTIONMAP_SKYBOX = !1, o.REFLECTIONMAP_SKYBOX_TRANSFORMED = !1, o.REFLECTIONMAP_EXPLICIT = !1, o.REFLECTIONMAP_EQUIRECTANGULAR = !1, o.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = !1, o.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = !1, o.INVERTCUBICMAP = !1, o.REFLECTIONMAP_OPPOSITEZ = !1, o.LODINREFLECTIONALPHA = !1, o.GAMMAREFLECTION = !1, o.RGBDREFLECTION = !1
|
|
}
|
|
o.PREMULTIPLYALPHA = this.alphaMode === _.a.ALPHA_PREMULTIPLIED || this.alphaMode === _.a.ALPHA_PREMULTIPLIED_PORTERDUFF, o.USERGBCOLOR = this._useRGBColor, o.NOISE = this._enableNoise
|
|
}
|
|
if (o._areLightsDirty && (o.USEHIGHLIGHTANDSHADOWCOLORS = !this._useRGBColor && (0 !== this._primaryColorShadowLevel || 0 !== this._primaryColorHighlightLevel)), o._areImageProcessingDirty && this._imageProcessingConfiguration) {
|
|
if (!this._imageProcessingConfiguration.isReady()) return !1;
|
|
this._imageProcessingConfiguration.prepareDefines(o)
|
|
}
|
|
if (ir.a.PrepareDefinesForMisc(e, r, !1, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(e), o), ir.a.PrepareDefinesForFrameBoundValues(r, s, o, i), ir.a.PrepareDefinesForAttributes(e, o, !1, !0, !1) && e && (r.getEngine().getCaps().standardDerivatives || e.isVerticesDataPresent(Oi.b.NormalKind) || (e.createNormals(!0), p.a.Warn("BackgroundMaterial: Normals have been created for the mesh: " + e.name))), o.isDirty) {
|
|
o.markAsProcessed(), r.resetCachedMaterial();
|
|
var c = new zt.c;
|
|
o.FOG && c.addFallback(0, "FOG"), o.POINTSIZE && c.addFallback(1, "POINTSIZE"), o.MULTIVIEW && c.addFallback(0, "MULTIVIEW"), ir.a.HandleFallbacksForShadows(o, c, this._maxSimultaneousLights), o.NUM_BONE_INFLUENCERS > 0 && c.addCPUSkinningFallback(0, e);
|
|
var l = [Oi.b.PositionKind];
|
|
o.NORMAL && l.push(Oi.b.NormalKind), o.UV1 && l.push(Oi.b.UVKind), o.UV2 && l.push(Oi.b.UV2Kind), ir.a.PrepareAttributesForBones(l, e, o, c), ir.a.PrepareAttributesForInstances(l, o);
|
|
var u = ["world", "view", "viewProjection", "vEyePosition", "vLightsType", "vFogInfos", "vFogColor", "pointSize", "vClipPlane", "vClipPlane2", "vClipPlane3", "vClipPlane4", "mBones", "vPrimaryColor", "vPrimaryColorShadow", "vReflectionInfos", "reflectionMatrix", "vReflectionMicrosurfaceInfos", "fFovMultiplier", "shadowLevel", "alpha", "vBackgroundCenter", "vReflectionControl", "vDiffuseInfos", "diffuseMatrix"],
|
|
h = ["diffuseSampler", "reflectionSampler", "reflectionSamplerLow", "reflectionSamplerHigh"],
|
|
d = ["Material", "Scene"];
|
|
xi.a && (xi.a.PrepareUniforms(u, o), xi.a.PrepareSamplers(h, o)), ir.a.PrepareUniformsAndSamplersList({
|
|
uniformsNames: u,
|
|
uniformBuffersNames: d,
|
|
samplers: h,
|
|
defines: o,
|
|
maxSimultaneousLights: this._maxSimultaneousLights
|
|
});
|
|
var f = o.toString();
|
|
t.setEffect(r.getEngine().createEffect("background", {
|
|
attributes: l,
|
|
uniformsNames: u,
|
|
uniformBuffersNames: d,
|
|
samplers: h,
|
|
defines: f,
|
|
fallbacks: c,
|
|
onCompiled: function(e) {
|
|
n.onCompiled && n.onCompiled(e), n.bindSceneUniformBuffer(e, r.getSceneUniformBuffer())
|
|
},
|
|
onError: this.onError,
|
|
indexParameters: {
|
|
maxSimultaneousLights: this._maxSimultaneousLights
|
|
}
|
|
}, s), o), this.buildUniformLayout()
|
|
}
|
|
return !(!t.effect || !t.effect.isReady()) && (o._renderId = r.getRenderId(), this._wasPreviouslyReady = !0, !0)
|
|
}, t.prototype._computePrimaryColorFromPerceptualColor = function() {
|
|
this.__perceptualColor && (this._primaryColor.copyFrom(this.__perceptualColor), this._primaryColor.toLinearSpaceToRef(this._primaryColor), this._imageProcessingConfiguration && this._primaryColor.scaleToRef(1 / this._imageProcessingConfiguration.exposure, this._primaryColor), this._computePrimaryColors())
|
|
}, t.prototype._computePrimaryColors = function() {
|
|
0 === this._primaryColorShadowLevel && 0 === this._primaryColorHighlightLevel || (this._primaryColor.scaleToRef(this._primaryColorShadowLevel, this._primaryShadowColor), this._primaryColor.subtractToRef(this._primaryShadowColor, this._primaryShadowColor), this._white.subtractToRef(this._primaryColor, this._primaryHighlightColor), this._primaryHighlightColor.scaleToRef(this._primaryColorHighlightLevel, this._primaryHighlightColor), this._primaryColor.addToRef(this._primaryHighlightColor, this._primaryHighlightColor))
|
|
}, t.prototype.buildUniformLayout = function() {
|
|
this._uniformBuffer.addUniform("vPrimaryColor", 4), this._uniformBuffer.addUniform("vPrimaryColorShadow", 4), this._uniformBuffer.addUniform("vDiffuseInfos", 2), this._uniformBuffer.addUniform("vReflectionInfos", 2), this._uniformBuffer.addUniform("diffuseMatrix", 16), this._uniformBuffer.addUniform("reflectionMatrix", 16), this._uniformBuffer.addUniform("vReflectionMicrosurfaceInfos", 3), this._uniformBuffer.addUniform("fFovMultiplier", 1), this._uniformBuffer.addUniform("pointSize", 1), this._uniformBuffer.addUniform("shadowLevel", 1), this._uniformBuffer.addUniform("alpha", 1), this._uniformBuffer.addUniform("vBackgroundCenter", 3), this._uniformBuffer.addUniform("vReflectionControl", 4), this._uniformBuffer.create()
|
|
}, t.prototype.unbind = function() {
|
|
this._diffuseTexture && this._diffuseTexture.isRenderTarget && this._uniformBuffer.setTexture("diffuseSampler", null), this._reflectionTexture && this._reflectionTexture.isRenderTarget && this._uniformBuffer.setTexture("reflectionSampler", null), e.prototype.unbind.call(this)
|
|
}, t.prototype.bindOnlyWorldMatrix = function(e) {
|
|
this._activeEffect.setMatrix("world", e)
|
|
}, t.prototype.bindForSubMesh = function(e, t, i) {
|
|
var n = this.getScene(),
|
|
r = i._materialDefines;
|
|
if (r) {
|
|
var o = i.effect;
|
|
if (o) {
|
|
this._activeEffect = o, this.bindOnlyWorldMatrix(e), ir.a.BindBonesParameters(t, this._activeEffect);
|
|
var s = this._mustRebind(n, o, t.visibility);
|
|
if (s) {
|
|
this._uniformBuffer.bindToEffect(o, "Material"), this.bindViewProjection(o);
|
|
var a = this._reflectionTexture;
|
|
this._uniformBuffer.useUbo && this.isFrozen && this._uniformBuffer.isSync || (n.texturesEnabled && (this._diffuseTexture && or.a.DiffuseTextureEnabled && (this._uniformBuffer.updateFloat2("vDiffuseInfos", this._diffuseTexture.coordinatesIndex, this._diffuseTexture.level), ir.a.BindTextureMatrix(this._diffuseTexture, this._uniformBuffer, "diffuse")), a && or.a.ReflectionTextureEnabled && (this._uniformBuffer.updateMatrix("reflectionMatrix", a.getReflectionTextureMatrix()), this._uniformBuffer.updateFloat2("vReflectionInfos", a.level, this._reflectionBlur), this._uniformBuffer.updateFloat3("vReflectionMicrosurfaceInfos", a.getSize().width, a.lodGenerationScale, a.lodGenerationOffset))), this.shadowLevel > 0 && this._uniformBuffer.updateFloat("shadowLevel", this.shadowLevel), this._uniformBuffer.updateFloat("alpha", this.alpha), this.pointsCloud && this._uniformBuffer.updateFloat("pointSize", this.pointSize), r.USEHIGHLIGHTANDSHADOWCOLORS ? (this._uniformBuffer.updateColor4("vPrimaryColor", this._primaryHighlightColor, 1), this._uniformBuffer.updateColor4("vPrimaryColorShadow", this._primaryShadowColor, 1)) : this._uniformBuffer.updateColor4("vPrimaryColor", this._primaryColor, 1)), this._uniformBuffer.updateFloat("fFovMultiplier", this._fovMultiplier), n.texturesEnabled && (this._diffuseTexture && or.a.DiffuseTextureEnabled && this._uniformBuffer.setTexture("diffuseSampler", this._diffuseTexture), a && or.a.ReflectionTextureEnabled && (r.REFLECTIONBLUR && r.TEXTURELODSUPPORT ? this._uniformBuffer.setTexture("reflectionSampler", a) : r.REFLECTIONBLUR ? (this._uniformBuffer.setTexture("reflectionSampler", a._lodTextureMid || a), this._uniformBuffer.setTexture("reflectionSamplerLow", a._lodTextureLow || a), this._uniformBuffer.setTexture("reflectionSamplerHigh", a._lodTextureHigh || a)) : this._uniformBuffer.setTexture("reflectionSampler", a), r.REFLECTIONFRESNEL && (this._uniformBuffer.updateFloat3("vBackgroundCenter", this.sceneCenter.x, this.sceneCenter.y, this.sceneCenter.z), this._uniformBuffer.updateFloat4("vReflectionControl", this._reflectionControls.x, this._reflectionControls.y, this._reflectionControls.z, this._reflectionControls.w)))), ir.a.BindClipPlane(this._activeEffect, n), ir.a.BindEyePosition(o, n)
|
|
}!s && this.isFrozen || (n.lightsEnabled && ir.a.BindLights(n, t, this._activeEffect, r, this._maxSimultaneousLights, !1), this.bindView(o), ir.a.BindFogParameters(n, t, this._activeEffect, !0), this._imageProcessingConfiguration && this._imageProcessingConfiguration.bind(this._activeEffect)), this._uniformBuffer.update(), this._afterBind(t, this._activeEffect)
|
|
}
|
|
}
|
|
}, t.prototype.dispose = function(t, i) {
|
|
void 0 === t && (t = !1), void 0 === i && (i = !1), i && (this.diffuseTexture && this.diffuseTexture.dispose(), this.reflectionTexture && this.reflectionTexture.dispose()), this._renderTargets.dispose(), this._imageProcessingConfiguration && this._imageProcessingObserver && this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver), e.prototype.dispose.call(this, t)
|
|
}, t.prototype.clone = function(e) {
|
|
var i = this;
|
|
return L.a.Clone(function() {
|
|
return new t(e, i.getScene())
|
|
}, this)
|
|
}, t.prototype.serialize = function() {
|
|
var e = L.a.Serialize(this);
|
|
return e.customType = "BABYLON.BackgroundMaterial", e
|
|
}, t.prototype.getClassName = function() {
|
|
return "BackgroundMaterial"
|
|
}, t.Parse = function(e, i, n) {
|
|
return L.a.Parse(function() {
|
|
return new t(e.name, i)
|
|
}, e, i, n)
|
|
}, t.StandardReflectance0 = .05, t.StandardReflectance90 = .5, l.c([Object(L.e)()], t.prototype, "_primaryColor", void 0), l.c([Object(L.b)("_markAllSubMeshesAsLightsDirty")], t.prototype, "primaryColor", void 0), l.c([Object(L.e)()], t.prototype, "__perceptualColor", void 0), l.c([Object(L.c)()], t.prototype, "_primaryColorShadowLevel", void 0), l.c([Object(L.c)()], t.prototype, "_primaryColorHighlightLevel", void 0), l.c([Object(L.b)("_markAllSubMeshesAsLightsDirty")], t.prototype, "primaryColorHighlightLevel", null), l.c([Object(L.m)()], t.prototype, "_reflectionTexture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionTexture", void 0), l.c([Object(L.c)()], t.prototype, "_reflectionBlur", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionBlur", void 0), l.c([Object(L.m)()], t.prototype, "_diffuseTexture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "diffuseTexture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "shadowLights", void 0), l.c([Object(L.c)()], t.prototype, "_shadowLevel", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "shadowLevel", void 0), l.c([Object(L.o)()], t.prototype, "_sceneCenter", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "sceneCenter", void 0), l.c([Object(L.c)()], t.prototype, "_opacityFresnel", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "opacityFresnel", void 0), l.c([Object(L.c)()], t.prototype, "_reflectionFresnel", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionFresnel", void 0), l.c([Object(L.c)()], t.prototype, "_reflectionFalloffDistance", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionFalloffDistance", void 0), l.c([Object(L.c)()], t.prototype, "_reflectionAmount", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionAmount", void 0), l.c([Object(L.c)()], t.prototype, "_reflectionReflectance0", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionReflectance0", void 0), l.c([Object(L.c)()], t.prototype, "_reflectionReflectance90", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionReflectance90", void 0), l.c([Object(L.c)()], t.prototype, "_useRGBColor", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useRGBColor", void 0), l.c([Object(L.c)()], t.prototype, "_enableNoise", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "enableNoise", void 0), l.c([Object(L.c)()], t.prototype, "_maxSimultaneousLights", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "maxSimultaneousLights", void 0), l.c([Object(L.i)()], t.prototype, "_imageProcessingConfiguration", void 0), t
|
|
}(rr.a);
|
|
s.a.RegisteredTypes["BABYLON.BackgroundMaterial"] = dr;
|
|
var fr = i(80),
|
|
pr = function() {
|
|
function e(t, i) {
|
|
var n = this;
|
|
this._errorHandler = function(e, t) {
|
|
n.onErrorObservable.notifyObservers({
|
|
message: e,
|
|
exception: t
|
|
})
|
|
}, this._options = l.a({}, e._getDefaultOptions(), t), this._scene = i, this.onErrorObservable = new r.c, this._setupBackground(), this._setupImageProcessing()
|
|
}
|
|
return e._getDefaultOptions = function() {
|
|
return {
|
|
createGround: !0,
|
|
groundSize: 15,
|
|
groundTexture: this._groundTextureCDNUrl,
|
|
groundColor: new o.e(.2, .2, .3).toLinearSpace().scale(3),
|
|
groundOpacity: .9,
|
|
enableGroundShadow: !0,
|
|
groundShadowLevel: .5,
|
|
enableGroundMirror: !1,
|
|
groundMirrorSizeRatio: .3,
|
|
groundMirrorBlurKernel: 64,
|
|
groundMirrorAmount: 1,
|
|
groundMirrorFresnelWeight: 1,
|
|
groundMirrorFallOffDistance: 0,
|
|
groundMirrorTextureType: _.a.TEXTURETYPE_UNSIGNED_INT,
|
|
groundYBias: 1e-5,
|
|
createSkybox: !0,
|
|
skyboxSize: 20,
|
|
skyboxTexture: this._skyboxTextureCDNUrl,
|
|
skyboxColor: new o.e(.2, .2, .3).toLinearSpace().scale(3),
|
|
backgroundYRotation: 0,
|
|
sizeAuto: !0,
|
|
rootPosition: o.x.Zero(),
|
|
setupImageProcessing: !0,
|
|
environmentTexture: this._environmentTextureCDNUrl,
|
|
cameraExposure: .8,
|
|
cameraContrast: 1.2,
|
|
toneMappingEnabled: !0
|
|
}
|
|
}, Object.defineProperty(e.prototype, "rootMesh", {
|
|
get: function() {
|
|
return this._rootMesh
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "skybox", {
|
|
get: function() {
|
|
return this._skybox
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "skyboxTexture", {
|
|
get: function() {
|
|
return this._skyboxTexture
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "skyboxMaterial", {
|
|
get: function() {
|
|
return this._skyboxMaterial
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "ground", {
|
|
get: function() {
|
|
return this._ground
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "groundTexture", {
|
|
get: function() {
|
|
return this._groundTexture
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "groundMirror", {
|
|
get: function() {
|
|
return this._groundMirror
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "groundMirrorRenderList", {
|
|
get: function() {
|
|
return this._groundMirror ? this._groundMirror.renderList : null
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "groundMaterial", {
|
|
get: function() {
|
|
return this._groundMaterial
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.updateOptions = function(e) {
|
|
var t = l.a({}, this._options, e);
|
|
this._ground && !t.createGround && (this._ground.dispose(), this._ground = null), this._groundMaterial && !t.createGround && (this._groundMaterial.dispose(), this._groundMaterial = null), this._groundTexture && this._options.groundTexture != t.groundTexture && (this._groundTexture.dispose(), this._groundTexture = null), this._skybox && !t.createSkybox && (this._skybox.dispose(), this._skybox = null), this._skyboxMaterial && !t.createSkybox && (this._skyboxMaterial.dispose(), this._skyboxMaterial = null), this._skyboxTexture && this._options.skyboxTexture != t.skyboxTexture && (this._skyboxTexture.dispose(), this._skyboxTexture = null), this._groundMirror && !t.enableGroundMirror && (this._groundMirror.dispose(), this._groundMirror = null), this._scene.environmentTexture && this._options.environmentTexture != t.environmentTexture && this._scene.environmentTexture.dispose(), this._options = t, this._setupBackground(), this._setupImageProcessing()
|
|
}, e.prototype.setMainColor = function(e) {
|
|
this.groundMaterial && (this.groundMaterial.primaryColor = e), this.skyboxMaterial && (this.skyboxMaterial.primaryColor = e), this.groundMirror && (this.groundMirror.clearColor = new o.f(e.r, e.g, e.b, 1))
|
|
}, e.prototype._setupImageProcessing = function() {
|
|
this._options.setupImageProcessing && (this._scene.imageProcessingConfiguration.contrast = this._options.cameraContrast, this._scene.imageProcessingConfiguration.exposure = this._options.cameraExposure, this._scene.imageProcessingConfiguration.toneMappingEnabled = this._options.toneMappingEnabled, this._setupEnvironmentTexture())
|
|
}, e.prototype._setupEnvironmentTexture = function() {
|
|
if (!this._scene.environmentTexture)
|
|
if (this._options.environmentTexture instanceof Kn.a) this._scene.environmentTexture = this._options.environmentTexture;
|
|
else {
|
|
var e = tr.CreateFromPrefilteredData(this._options.environmentTexture, this._scene);
|
|
this._scene.environmentTexture = e
|
|
}
|
|
}, e.prototype._setupBackground = function() {
|
|
this._rootMesh || (this._rootMesh = new fe.a("BackgroundHelper", this._scene)), this._rootMesh.rotation.y = this._options.backgroundYRotation;
|
|
var e = this._getSceneSize();
|
|
this._options.createGround && (this._setupGround(e), this._setupGroundMaterial(), this._setupGroundDiffuseTexture(), this._options.enableGroundMirror && this._setupGroundMirrorTexture(e), this._setupMirrorInGroundMaterial()), this._options.createSkybox && (this._setupSkybox(e), this._setupSkyboxMaterial(), this._setupSkyboxReflectionTexture()), this._rootMesh.position.x = e.rootPosition.x, this._rootMesh.position.z = e.rootPosition.z, this._rootMesh.position.y = e.rootPosition.y
|
|
}, e.prototype._getSceneSize = function() {
|
|
var e = this,
|
|
t = this._options.groundSize,
|
|
i = this._options.skyboxSize,
|
|
n = this._options.rootPosition;
|
|
if (!this._scene.meshes || 1 === this._scene.meshes.length) return {
|
|
groundSize: t,
|
|
skyboxSize: i,
|
|
rootPosition: n
|
|
};
|
|
var r = this._scene.getWorldExtends(function(t) {
|
|
return t !== e._ground && t !== e._rootMesh && t !== e._skybox
|
|
}),
|
|
o = r.max.subtract(r.min);
|
|
if (this._options.sizeAuto) {
|
|
this._scene.activeCamera instanceof Et && this._scene.activeCamera.upperRadiusLimit && (i = t = 2 * this._scene.activeCamera.upperRadiusLimit);
|
|
var s = o.length();
|
|
s > t && (i = t = 2 * s), t *= 1.1, i *= 1.5, (n = r.min.add(o.scale(.5))).y = r.min.y - this._options.groundYBias
|
|
}
|
|
return {
|
|
groundSize: t,
|
|
skyboxSize: i,
|
|
rootPosition: n
|
|
}
|
|
}, e.prototype._setupGround = function(e) {
|
|
var t = this;
|
|
this._ground && !this._ground.isDisposed() || (this._ground = fe.a.CreatePlane("BackgroundPlane", e.groundSize, this._scene), this._ground.rotation.x = Math.PI / 2, this._ground.parent = this._rootMesh, this._ground.onDisposeObservable.add(function() {
|
|
t._ground = null
|
|
})), this._ground.receiveShadows = this._options.enableGroundShadow
|
|
}, e.prototype._setupGroundMaterial = function() {
|
|
this._groundMaterial || (this._groundMaterial = new dr("BackgroundPlaneMaterial", this._scene)), this._groundMaterial.alpha = this._options.groundOpacity, this._groundMaterial.alphaMode = _.a.ALPHA_PREMULTIPLIED_PORTERDUFF, this._groundMaterial.shadowLevel = this._options.groundShadowLevel, this._groundMaterial.primaryColor = this._options.groundColor, this._groundMaterial.useRGBColor = !1, this._groundMaterial.enableNoise = !0, this._ground && (this._ground.material = this._groundMaterial)
|
|
}, e.prototype._setupGroundDiffuseTexture = function() {
|
|
if (this._groundMaterial && !this._groundTexture)
|
|
if (this._options.groundTexture instanceof Kn.a) this._groundMaterial.diffuseTexture = this._options.groundTexture;
|
|
else {
|
|
var e = new ke.a(this._options.groundTexture, this._scene, void 0, void 0, void 0, void 0, this._errorHandler);
|
|
e.gammaSpace = !1, e.hasAlpha = !0, this._groundMaterial.diffuseTexture = e
|
|
}
|
|
}, e.prototype._setupGroundMirrorTexture = function(e) {
|
|
var t = ke.a.CLAMP_ADDRESSMODE;
|
|
if (!this._groundMirror && (this._groundMirror = new er("BackgroundPlaneMirrorTexture", {
|
|
ratio: this._options.groundMirrorSizeRatio
|
|
}, this._scene, !1, this._options.groundMirrorTextureType, ke.a.BILINEAR_SAMPLINGMODE, !0), this._groundMirror.mirrorPlane = new o.n(0, -1, 0, e.rootPosition.y), this._groundMirror.anisotropicFilteringLevel = 1, this._groundMirror.wrapU = t, this._groundMirror.wrapV = t, this._groundMirror.gammaSpace = !1, this._groundMirror.renderList))
|
|
for (var i = 0; i < this._scene.meshes.length; i++) {
|
|
var n = this._scene.meshes[i];
|
|
n !== this._ground && n !== this._skybox && n !== this._rootMesh && this._groundMirror.renderList.push(n)
|
|
}
|
|
this._groundMirror.clearColor = new o.f(this._options.groundColor.r, this._options.groundColor.g, this._options.groundColor.b, 1), this._groundMirror.adaptiveBlurKernel = this._options.groundMirrorBlurKernel
|
|
}, e.prototype._setupMirrorInGroundMaterial = function() {
|
|
this._groundMaterial && (this._groundMaterial.reflectionTexture = this._groundMirror, this._groundMaterial.reflectionFresnel = !0, this._groundMaterial.reflectionAmount = this._options.groundMirrorAmount, this._groundMaterial.reflectionStandardFresnelWeight = this._options.groundMirrorFresnelWeight, this._groundMaterial.reflectionFalloffDistance = this._options.groundMirrorFallOffDistance)
|
|
}, e.prototype._setupSkybox = function(e) {
|
|
var t = this;
|
|
this._skybox && !this._skybox.isDisposed() || (this._skybox = fe.a.CreateBox("BackgroundSkybox", e.skyboxSize, this._scene, void 0, fe.a.BACKSIDE), this._skybox.onDisposeObservable.add(function() {
|
|
t._skybox = null
|
|
})), this._skybox.parent = this._rootMesh
|
|
}, e.prototype._setupSkyboxMaterial = function() {
|
|
this._skybox && (this._skyboxMaterial || (this._skyboxMaterial = new dr("BackgroundSkyboxMaterial", this._scene)), this._skyboxMaterial.useRGBColor = !1, this._skyboxMaterial.primaryColor = this._options.skyboxColor, this._skyboxMaterial.enableNoise = !0, this._skybox.material = this._skyboxMaterial)
|
|
}, e.prototype._setupSkyboxReflectionTexture = function() {
|
|
this._skyboxMaterial && (this._skyboxTexture || (this._options.skyboxTexture instanceof Kn.a ? this._skyboxMaterial.reflectionTexture = this._options.skyboxTexture : (this._skyboxTexture = new tr(this._options.skyboxTexture, this._scene, void 0, void 0, void 0, void 0, this._errorHandler), this._skyboxTexture.coordinatesMode = ke.a.SKYBOX_MODE, this._skyboxTexture.gammaSpace = !1, this._skyboxMaterial.reflectionTexture = this._skyboxTexture)))
|
|
}, e.prototype.dispose = function() {
|
|
this._groundMaterial && this._groundMaterial.dispose(!0, !0), this._skyboxMaterial && this._skyboxMaterial.dispose(!0, !0), this._rootMesh.dispose(!1)
|
|
}, e._groundTextureCDNUrl = "https://assets.babylonjs.com/environments/backgroundGround.png", e._skyboxTextureCDNUrl = "https://assets.babylonjs.com/environments/backgroundSkybox.dds", e._environmentTextureCDNUrl = "https://assets.babylonjs.com/environments/environmentSpecular.env", e
|
|
}(),
|
|
_r = i(42),
|
|
gr = function(e) {
|
|
function t(t, i, n, s, a) {
|
|
void 0 === a && (a = null);
|
|
var c = e.call(this, t, s) || this;
|
|
c._useDirectMapping = !1, c.onLoadErrorObservable = new r.c, t = t || "photoDome", n.resolution = 0 | Math.abs(n.resolution) || 32, n.size = Math.abs(n.size) || (s.activeCamera ? .48 * s.activeCamera.maxZ : 1e3), void 0 === n.useDirectMapping ? c._useDirectMapping = !0 : c._useDirectMapping = n.useDirectMapping, void 0 === n.faceForward && (n.faceForward = !0), c._setReady(!1);
|
|
var l = c._material = new dr(t + "_material", s);
|
|
if (c._mesh = fe.a.CreateSphere(t + "_mesh", n.resolution, n.size, s, !1, fe.a.BACKSIDE), l.opacityFresnel = !1, l.useEquirectangularFOV = !0, l.fovMultiplier = 1, c.photoTexture = new ke.a(i, s, !0, !c._useDirectMapping, void 0, void 0, function(e, t) {
|
|
c.onLoadErrorObservable.notifyObservers(e || "Unknown error occured"), a && a(e, t)
|
|
}), c.photoTexture.onLoadObservable.addOnce(function() {
|
|
c._setReady(!0)
|
|
}), c._mesh.material = l, c._mesh.parent = c, n.faceForward && s.activeCamera) {
|
|
var u = s.activeCamera,
|
|
h = o.x.Forward(),
|
|
d = o.x.TransformNormal(h, u.getViewMatrix());
|
|
d.normalize(), c.rotation.y = Math.acos(o.x.Dot(h, d))
|
|
}
|
|
return c
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "photoTexture", {
|
|
get: function() {
|
|
return this._photoTexture
|
|
},
|
|
set: function(e) {
|
|
this._photoTexture !== e && (this._photoTexture = e, this._useDirectMapping ? (this._photoTexture.wrapU = ke.a.CLAMP_ADDRESSMODE, this._photoTexture.wrapV = ke.a.CLAMP_ADDRESSMODE, this._material.diffuseTexture = this._photoTexture) : (this._photoTexture.coordinatesMode = ke.a.FIXED_EQUIRECTANGULAR_MIRRORED_MODE, this._photoTexture.wrapV = ke.a.CLAMP_ADDRESSMODE, this._material.reflectionTexture = this._photoTexture))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "fovMultiplier", {
|
|
get: function() {
|
|
return this._material.fovMultiplier
|
|
},
|
|
set: function(e) {
|
|
this._material.fovMultiplier = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.dispose = function(t, i) {
|
|
void 0 === i && (i = !1), this._photoTexture.dispose(), this._mesh.dispose(), this._material.dispose(), this.onLoadErrorObservable.clear(), e.prototype.dispose.call(this, t, i)
|
|
}, t
|
|
}(_r.a),
|
|
mr = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\n#include<helperFunctions>\nvoid main(void)\n{\ngl_FragColor=vec4(fromRGBD(texture2D(textureSampler,vUV)),1.0);\n}";
|
|
zt.a.ShadersStore.rgbdDecodePixelShader = mr;
|
|
var vr = function() {
|
|
function e() {}
|
|
return e._ExpandDefaultBRDFTexture = function(e) {
|
|
var t = e.getEngine(),
|
|
i = t.getCaps(),
|
|
n = !1;
|
|
if (i.textureHalfFloatRender && i.textureHalfFloatLinearFiltering ? (n = !0, e.type = _.a.TEXTURETYPE_HALF_FLOAT) : i.textureFloatRender && i.textureFloatLinearFiltering && (n = !0, e.type = _.a.TEXTURETYPE_FLOAT), n) {
|
|
e.isReady = !1;
|
|
var r = new Ht("rgbdDecode", "rgbdDecode", null, null, 1, null, _.a.TEXTURE_TRILINEAR_SAMPLINGMODE, t, !1, void 0, e.type, void 0, null, !1);
|
|
e._isRGBD = !1, e.invertY = !1;
|
|
var o = t.createRenderTargetTexture(e.width, {
|
|
generateDepthBuffer: !1,
|
|
generateMipMaps: !1,
|
|
generateStencilBuffer: !1,
|
|
samplingMode: _.a.TEXTURE_BILINEAR_SAMPLINGMODE,
|
|
type: e.type,
|
|
format: _.a.TEXTUREFORMAT_RGBA
|
|
});
|
|
r.getEffect().executeWhenCompiled(function() {
|
|
r.onApply = function(t) {
|
|
t._bindTexture("textureSampler", e), t.setFloat2("scale", 1, 1)
|
|
}, t.scenes[0].postProcessManager.directRender([r], o, !0), t.restoreDefaultFramebuffer(), t._releaseTexture(e), t._releaseFramebufferObjects(o), r && r.dispose(), o._swapAndDie(e), e.isReady = !0
|
|
})
|
|
}
|
|
}, e.GetEnvironmentBRDFTexture = function(e) {
|
|
var t = this;
|
|
if (!e.environmentBRDFTexture) {
|
|
var i = e.useDelayedTextureLoading;
|
|
e.useDelayedTextureLoading = !1;
|
|
var n = ke.a.CreateFromBase64String(this._environmentBRDFBase64Texture, "EnvironmentBRDFTexture", e, !0, !0, ke.a.BILINEAR_SAMPLINGMODE);
|
|
n._texture._isRGBD = !0, n.wrapU = ke.a.CLAMP_ADDRESSMODE, n.wrapV = ke.a.CLAMP_ADDRESSMODE, e.environmentBRDFTexture = n, e.useDelayedTextureLoading = i, n.onLoadObservable.addOnce(function() {
|
|
t._ExpandDefaultBRDFTexture(n._texture)
|
|
})
|
|
}
|
|
return e.environmentBRDFTexture
|
|
}, e._environmentBRDFBase64Texture = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAgAElEQVR4Xuy9Ccx261oW9q5v/r7/33ufgalSbWtiTJsmTZOmSdOkpVKsWhxAxIJFQaCKUkpFiiBFKjKPh3PO7hjb2LmNnYxtjbGtbY21rQGkgCgiIKPMM5x99ruatZ7puq/7up/nWd/3bzzABjb/9675Xeu5hnt41rv8s+evW9fz+ZT+W9N/63o6re3v+nlfvq2CbdZT2hbW7dukDbf/a/9uS3G7E69Ln9PifK50sHSMvD2ur3+XY/E2++dyPelDPoU7Jm9XTm2uab86vJ56gvSd80dzXflA+Zul74PHwGuGv/MXLv+kL4Lfp56r3DM8ef6utE10Xnu97fra7uWi2/etZ8BV/F3F+fdni/8Dn9O4KSvt/cxPMa+HY5Qx024OHF3cM7zHdcsy3uAeuu3wPve3S2OVthHH09v5e9BuCT0HHgPlHsjz+3uxNALYAJ9JgAigALyBmQGPQEcAxwRQgVhIogwcIoAG2HYsM1gR3IokEDD5biMBhMeSoLXkweCoAxsGcDoX3Xi3nkCFACnfiQaPARECgPaVAMZjEuAsNttAjIBZSY8HXHkuFctt4Npj2e8+B/ImFOnwEcg9SPEqcNdyDBSZemwipBkwmvMwocG9Gm6nCDUisHpb+iSRTp+2kQTQAJ9cACt8cwRN/Ss5IJBJ7a2qC0AHYK4gUkpuQE2uoTiJfMPw4epjeqdRXYE5Rhu0me7aGCwIKtfFD0sAmklCgWBmG3utbfCrfdtlBUpK6qUIpwCkkUYDIg4yp4QhAeW9GDBwLR6glgysC8PvZq6o2MJMT3jdhtKqI0WiMfeTCMhs54BqzwNPyLueclxzS/3+XQI0jtSSQrmly4ecv249Z+U/gQOoNj+HBKj+yhGEtn9/2C10qLaWLH5Tz6KykeI3FTb7wM0uRJMWlZtmQwgXFgAr23VwDGRjADoPOgMIQ1pigNdnCrbviaqvFMopuDpvHjB8/RXoeI8ydGp4RAM2x13NzQtr74BkQoFZlceBDQTugIlaixa7kbn5nl3wNgVNpxGKi2OvQxJmjOJ24riNB/sKX0VJPS/zjNfTTgAp9s95AIj9K9DPqPQc22+nS6C0eYAGZJMLyF+sPPwGVggXypcH8HggA5gwbCjHhy9v1Z7yDIY4Gie3nIMGrQHUUNVBVeq14rnyOeiBvWjVl8QgQoZ6NajErESk0n0wx4CLFLuXJ5gOE4J8gtV4cW2RlYbvrO5lVWMk10KU6lpwrHbBr8cHn8+EMdH5YPl2H4gANhCmPEABLTsBp/5k+Y1TwGReWlGTgqiy6WFrxXcEQQTilLw8mUP5AIh1pbJnTgUrOiYIVBZKMAXqW7GISigAyjbYgkWfyyqyTTI5ZckLokEehQNxAs8TYMHF8X3w+3kSrcc1qozPAsAUqbfLX8B5AKgyFGBidOcIiB8JAMdZWV4fGak/nU+Sd0BC266CANbTqdp+zPZHmX9Uf1Txju1HxS6DbeeAZtOtavtKAILAhw9B1aCNjhyJELDZrldlFwRB1YT2nJtUNnVTBPJ41Y+dAQwOE2eD6+EBWZ4FDDRUFmUn7ZiLzjkgGbgOTTTintG1y2QiuKh2ZSKrLoDDVt4RI90jc28CMunnC/AK27iBhEB+FHgme78rtk2w5b+vcguSAKLyH5YCfT6ghAgFeAh+H9PXBxcBPiKICjo4fnEE+ODLk1NJQ7M9PACXK2iqgTa1DTpPHo59FYGgNZuM9T1AoBphFMIPIhXPMzG1Q/jBVYceAobVqCElHYo+uzwBPKvGyXBuY1O9YjZBQzOP312TK4PAVjDw/Hn/p5CEJKI2puq15C/jXFz7kiZB2CPLckzzzIPjlMtbPuT89WtK/rUSoOkFMDV/KvflEp6pCnCtH614yRPU0AAScxjvlwGABFFGlgQ12MJD+QCt7HX88bEE2aRFFnhGOdBO5hWsLDOx/mzZT6meSgAa9cLrYnA6O0yqxSDpbG/uFRAXwDWPYUsG1s2Le91Yp8CJsK5VM6wYUJyMGLLqjESsCcykC80XsddknltlRSC/fL+GBFAdXXw97fDrafnnzl+fG4FyIrAAPggD9nsTNQIhsLfziwqAVX+r5IcqAQKMxZlYUBaSQVUog4jWgXJhCGKah1QlQIUDZlDSQCm804n1+6rfQOAqEALA0SCMcwdeqZyqONKIQBsAVoBWKlcvRKnq6YHSKmAa/LJKUZFBJMf3tEdeJvmGY05cIx1XkXIlH8re8/J0SeK6I3LMvQCSAHQYULL8OhfApT6X2BN2v4YSRxW/Hivf4ALcScuPAx9JxxIHwKY6AXiIfC5+mHBNj63rW2cAwyMiDiQnygJ3AQzEZ+6BG+iCGBQ4BqD1cTHlKFTJUA3kyi0RyHF8EAAVWOg+vBCSqLeMFFnct64jOXAcW6SM8wHbLcgEUNT/3BKA2BJsWnoFAahKgGv79V2Bs5WAWkbkHAAMirgnoA1ajN8REKHay/IesCzkDdrzfMR6/B5moHuLORMu1PtKipbG9wGldsSgQVSpqdkWECRtRcPyn1DQGTVvl+rPh7pYOA2tvKxE8DOBJJuq+4/i7rj0SKpN9zA9QpFQbV9EtBxbZ1uPUcYDuAlDAEn5z83i7yRgld91AXZiftMXkG9oAartCqQKQOgIhOKHMX8elsbWF8mgdRSnm0QfJry4SoCEhAwND9EMjFE+wCXXJlS/o7ZK9RXwDhNDl0jsgJ2r81cpz8a0MpfrkJNA53sQqWsHXI8mCXZdCDImRAHmuvljjiO+Z+0FUG5GCMLy6/YcAAB/B30igdOZ4/2dDRJBIKCNQyggxfheNfn4kh8qsSGKei6v5l7VDyQEcSBzWIEKgDeTtkubWQvKg5StfBsXI4DDd2ky2EBirkt3pw3BXbFnQdjGVqSoj9weBi3fB1QqHyaIe0FEZMmmnigfNqoYwDOge4zg1AovQhcCmflOgjgbX4jrCLavWzpCa8/EOQ5xXds2y687f0ObDchdgC4M2E4wqAQYYsiDcrcRDSjVRRiQlQds/5WzAE3mHSoJlJGfIoeW8jezBDON+R7/URIQE4IyJvcJQT5XSzqCLhHJtOFN9pBVh0iil5U+5BhUnM6qw3G2UOCo4w/hkNUGtDWIa3mOgVC8CsjhtVhSN/c7ALl0J0Aqs6BkUkASUWMFiapFKoLwRCgBBJCUf9wE1MCswoEKdOcSChlQf76y8PlOGkeAeYZCMkwg+SlJ4PfIQal9uQZULKW4sAxVi2N1rr2zMusyXx/cKtZXqtrtFJxQ5C4xKBWeARc7D6F2GlAQLu4j3zoRoEwXPqRTkKMBMJt9pWLWAZbX2mON8gDTyTl4Jgbc7lrFd8HxiPdH3N9tkSGAU24DtmU+7gYsTT8lHGjlPhPz13gZFV01BWUbpWr+tazYyMOoI8TkCKg4ISgUtRIQcDwk9xhQ0u4jIQHL6m0bqDn5xANopvZ/vMZfvpGoYbscRNWbLEITA55VGMhAkZMrsfYAqQa3JBsgBiKJUTKuOg9x3PBa8ZljsjCqZojlqPIy/CFCMg6pfEe6ZvNdA+JbPrSGAG0egO36C8p+KTtYe/ttGZBzBKz+uv5fzotMPQLz/r3YRbhqAYDOgdvnDDzJIPNb4BxK8kX5AnQghqk74cJAubXqB7aWBodSMnU8Qw8MdHPMdv/cwOUEnhvEvnLRxnusgD0n0AM5CgmCMp1T2epj9ffu8XuJQFLwEZH5Z9OIH11FJoACfnohSNDwo63/DBnkyyo5gTDbv329AtpokhAOKtq23shiD21ZxIUW9VBwHACYsdomk5+HEiiTGSQ4uCsggqYg/L547mJyMZ5mNqdKRc0Eq0HDAMNrZyJS5SfaXlpqvEfRwOXjRKrIcxoitWUSI8WcUth8TYY81LPoJQs75+2SSM9F0DUYcHfcRLvFgijzdyAC2DL/rQyIQEdXYGYE1jKgz/Tbkh/Z/5QsqH3jBpQqL4AM3Fmv3QOFEDgoe9l/tZ1RAuEsROLPKo6v0VpVoGx34bBDYBxUD14EMQwciGp+CgGggMeOgq45Lnd13MZR8gjAFfYNDBUcoYturN7MmtMwTolJOoN35Ca6oUS+1uVDz38tVQFKAhBagBvQC1gpHJDgB3vPiUAX00MG38TzXtGl1e/lDdJoM5l9vGH4EF03IA+UMkBRPY0TgAcrcgpISra7TOUDhKswpBN1zen9npIAVANdDjrOHQycROMOr0xy0KrjT4C5FwO3R6nU8RHJwgN5AKPgh8EN/iRKaIJDafeAvmf+uBNAUn07GagP/jLYIkIoNzB2BVb9i8x5R+DsugFj277adAYrzcjzFQIkCkhYssIpYKtOQUkedI4qUlXeoQFmPkloQhPhPIrtVVZQgpsHY5DQi4A1TRiVw/ygNMqnnErPDgsw9TLz7lwHbPhIofsE411geVYtgtDEhFUPXVZUY8o7jMQR62n556sDaM1AUSlw2ASkbH3JI1T1hwRhecBQMTAqraw+EYCNz2dife4baDfHJRyNks3affEAYGCyIk8lEVlRZdKunVcBVA1YNUiniIE7INmhUIwMmmVKcxFIFGGNMvDTYMZcSrnO7BbbRzxae+6ufViQUZR/wX2738WFVoIICgYKW8jvQd8Bt4Xx6Aggeh9AHPejamN23ycF7Qs/mouoFrmC264z+yEYOKPP5ABZ9y64VYJOOYfIFaBSSVeAmWKRA0DlEqpbH2XFePkjHqj9TH65v6gMKfw0lpHPpxS5objAaP5FmjOhQ5PEdnyRhFMEV3cdJe3w/uNZguVpk6AiIPMABGJ1X0ffyZDUCNwgavB9SviJbiMTQGkCyglA1QFI8bypBHAuAOcHRK6g2K1uHK8tvrTx0/kAn2TD47Ux7sOB+shrdn8yhqfKASufBbi2h2FPQX7WXdUPiCPt6hUujXs7aB9VGmTnMhrkADgmPaO+Qez72CafOfdQb6JO1Kl7xgpNhDIq5Y3W1+cXOJiZ9cuH7SEA9gCUeQC5538v2aVLUZWApt4JrOkhROqPDoG2LczZrQBwchCYeBjrk+pB0rFlrGEosLswrD/OFdT7AgqGg5oVy5NLRXZ+vAKoA5C6hBreI3YzNIja9Qg1AdVvY7oRRpQl1wAVDUk9hVXKq4gDvh9/g6LgziGMQExuxwBMuIUeifVast11dZJ9LCYu1IDxh8pf/l4+7PyNtQpgfxUoE0EH/GWAaTdQ1EWECFV1RO8ArwubeoISotjfgFGp8UDRe3G6BK4KKYq5xhgUH6wAJ6s6D6gQpBznsvLwgAqsOEK68YO3s5bMhD09AlACWQQi5VIM0COwiuWjmDx0FjzvgxW/13pcSnnm2dC9jZKl5WGIHhFNACqPkc7lCGCU/TcuwLmCMeiNQzDg7gPa234RHqBysJPAhxG6hbhfwKgpxfkxMAHCgmTUwJtOEiqVrC61/EFg7Ci3AppXF9Atdh+kuFUdFaCFojm3IgECEBeK60kKAHUoZhfuS4B7lAcwKh8kHHUmH0u9nhSqkjviFgRiXI1fXwmA3wWgG39aP0BR1aPqnwY9WGhX/89DsRsKiPZfyAHg4EOlaOAC8jDEAKZOuQJUdraYUtl9vkFZP6tmgyShUB0GD37PSLldTG8SgA0AQ3VXRAT3xrgIJiiy3CoB6UDEJNa+YIYoJeciRxERlrPMMCaCZKLKvxSQmu/vzhkkEtnBgeIj+PHK6nLcNpOkeYZ0rOXX1xCAXgZi2oCx3s+WPq8zbiBfmgE6lP/KhWGcXZfBvji4iBAkmA2ZEIvS8QuBpfthldqqIZUWYdA64OLgRIUS2fUjrgEJLSozuUQmgUu6jXAbqxSOLAJra++HJ1McpC9K8Q8fRyQ9DVgDZ6G+W+WKSgxarVWoJglCnHtEIJVTpkuB9hozAeQkYGc6sCkD7oABN5AHeHUDBVTlC5mWX6X+jRwQmCVcqOUpTtzV4zfrjsAyYQMCV8XonbLfbPa/PT/rYurDDkkBO8/INeQnzOpolZlUipXWKEE9IDQf2az/oQSgIRGtvt0KRUURfiMYpNWJtaGO5SyrblSVKcfu9SWMzl9DEQ3uci09lY2Sn4ZAQDzqZZdzd8qY+OQrwdKxdJiR7tXy68//X2sF3kCArwTLLiCe/PMY9S+jEx2BBYyr2e+DQOQITJ2/Dex54Jfz0r4DV8AAQXWwyq7sPHK6Tc6MrHy8Pg8DVhAR9w5bgyN1V+oULkOw4rXZ5bpa4O/ZSKGZeJ26qnzFvlGrKjk1N+sZZoqgAoLo5R4UuTNpmVKtPgcLVCWC/B2ciwDS3gmgtgLvBJB7Ajrgt/kBTPwBkKlvIJ0zWF8v6A1KBIaVgTYgfaNQ0C8gyMEMD6oy1DME+QPnGsiiIrnU8wDDj9aPzh+pUDsFERYMHv7eJjwZqa5UdgzbiEQiIA2TewFoRCIyJhrhToj8nMqO1rcHA+a9XKslGA9g+508AYr1GCLAd1/+BXAAGwjw58AR6M3ed6x/vhKb5KOcQQXQRE9A7ari+j8QyUR2P3QEMJhVlaGJQL6hLkywKoKgsU7AZs8ZXHbboHKgBgwmKqMBxZliBbyZBKDscAs64jjnkVlGWWG+T45EgOwiwmF9xiYmDUzqeETVVSVRhKgkDiCIgFh0olCQaxl0ZmwSGdbrKTgYrBfHLGQHBFC6AakBCJOBEPcnV065AEwEFqA/QvVVCIBKZ5xE/nLVHnNVARUbB7/L8nMeQrgDAQKfjGykYHQDHEAT+UIsvgUX93XlJgFqoxKiPDSTyFMJNbmfcikiuabAzddpwTtSvn4LrrpWbvIqAx+eLiwSSt9UwOZMRNLNPDNa71UaQatzJ6b7kUBfL1qRNwIer9q4knS1mQC2o9gZgbIfQCT+ynYtUUd5AdMViKQRdAIa1dfJQZkPeArw4cZgXBqWDYGd8VraYhjmLuGo1mUYmAdkE4M8gJAQq2ry/hTj2n3QlSAcGilFaqxUVS/zyuSB0FfPIYmMlLKj6JbwgHxgRgS3RHviCPaTBGG3rcajNolZUnDrAxvfnqQ6vsqptO2W33D+pjVNBW4EMAX+mpgTicCB+isAO1U3vf0+BHCKT0qPA8e4B8wH4OCJYvSIHBhcYP10M0+5IpX4U27DNiXVLfA8Nc4m5arPt8AyyI5z9yHeQ1CR2BmIwa9IyBCmrezX17mRarXsugaNTiBqUnMuw90fIiqZVwDiFm6nKLJ1AUF1xXzXvAfdt6b+9GzpXsq8C7uPzrGJAHJ8nysBhgjodeCqDFjdgAoFirJHGf2q4FAdEACtpcEg9m84toM/zgMwucBwCcOE3ja4DocenKehOQ8FAdD80FgBR+VAsz5oJXXVBGnpo9IgAaHIlEzqiZJm+cYAQgsee96oEUiXtqicWiV0UFkogIzICwEb5DdGuQv3Pei+heszmKOKST2MChGUWBA5VAIwrwI7l5Bgu6HnWoKzbcDQHASKb+P3fqJPdwQWRmTF7FQIuurPwLPHxRIK21NPGn3gcznGOQ8kNBp0DQ8+HuQEEqtMz3HUKzZOJjOQUsIjQBYOQg1Uc71MbF0CadfplLXadOuompaDc+BkKbkNXaf3eZlCVPIc7CzpHI0g8nUJVVbfsQ2T8n2UI6IxI1xCdOzlN9YQoDQDbe8FhERgbt1V4J9OBAbqb/IGBGIdJsCtL+xmQgUcMAeB784/ytzT8XF/UFRHMNW22wHGCSwNavH9m4fQvw6rADeZ9T+UAKyXpgajzrp3yWKkxhVHHhBIvDqRZgmQXZMBemCfdVYfBIJzAJnoXJs2EIUF6YjY7Pdmp9gNIeDaMgHAj4PWXoDtkEFFQM73L3YvhxGh5QeFB9uf8EPqn8MFta5lxicnBWFyUYAVb6AELSaTEECsmAQu88B761JbCoDY21a53rgKqy5tiMCzKYqr5hQAOcnYUtnfIAutEmxqkJprNM+lkV0BZEhITSYLzGCIE1BCQNP5Bq6Bk7+Pdwd4B5Q7EOsFuTwqRNheCZYcQHkbcHshSCnxuV4A/jFQfBlIeYBmYk405dfH+sZyF+UqD2yg9N7Kl+FGg79Ty4+B3x7MlKJTEonBgAPZgjpI/HUdxcgV4MAOSKVnXwXo+ZpN/MrJVACnsqHqWPCNAFeQ0wESa7dGOQEPKHUNVbfrIQJ1LeeVYZK4z4bQ8Vv5a023KfiO+R46sgzcZL09kBeI9l1+4/mbN/mHFuD9F0HbLwTz36jsuQ/AN/6gkkfvA9BqX8Dis/xC6UmJnYpPrEfTZh6A3Nc/JLTqbO8Q+EhubVwASdXxYZOX5vqGMwEVwPuuQCWfZJKQBvMoL1GPaxQX9pIJqpjMKvakSxGACpxJlFTUSTigC7heF88XkgOCiIiGn2fbFfco32eOiKYqAeIat0XLbzp/M5QBs33fQR8QAai8aQTC5aYKgKFBUThUf87Ccx8BgM6oNzkItPjFPTCrKhuP24ZhAgGfVLGr6KyIImRQg9JE0nCMxhNtkDThEoNoYj5AwyjqBAxCvG+gvjFRdNQuOpZQS6da/KzwWkid00ehqJ0SnwPtTBhQgEXuISYARYLBfYfvh3c0x4p57ey+QCYwnoAASuafp/4CKewAwex/+Zxv9nZgUb8vpbum7pFDyF8TcgNVI8sorevK47UEg8ozCgvatqzEVoWdsyiDC9RNq71NJFq34bPMdtAUxwN7KdVUdlTZ9oESm3MH/fXOxaCq9MDZBUd5fm2IF/AmTrAqaIBAoDeupJbP2pgyxz2YpHNkVMVCX3ev7DdFDkFZ77H78rMrrmEngPYyEHgNGAK9/G1e/rkdEsGnGoJoPbkESRZGhZV7sIBI4w4AjAPRxfvgNsR+mA02gEbwUJwW2XxUZSQQHhhORTtq37Xdw1jdKw8PJhfCCHWzRDGX3VfgmU3oKVDX6hESEDXq7gPckJIFKj7rxgXGdxmFtc8Qj6X2IfdBBBiSQyUtrdae/Cw5soBUA6Fe457PtfyL529JIUDOA4zj/5wfcFl+Uv8Cyv1fPyGIXUF9qJzsK/sX8kDgvmjg98Dds/ITNp8HHD4sV/Iz5ASDbdrOm6Nn4dMDdQR6c91RYxERhVbi6v1LvcNodK8jEMm0qLgnlQw643SM56rnLeQQqam7/nwyvhfhtcgkYQ+s+Iw1qfq8g3JGR4ljPVUCaD8NHrgAUv9qz8yEoPIQAPR1fRz/s5NA6yfXdeL9+sghVJBWf+QUCv8juGFwNUs1b/OtW4hLfiOVta7BJv6G+wK5WHgoK56PRqDqkZkFhQU9g3Zs7wfhwahsicXAA0k8b5c7RIJ0NqX0mpyNWpOzKeDvJSoRM7h9OW5EXjsB+IlA7QdCqyPA+B+TfEgARaWd+peBVKgUwoVyXKfwvvMvjUNyFEYto3xAuek+BEBr13IGloVtOFCecgA8zj47V4EwaPfD2Ds+hrBwOEhZyXqOYgz6QtRsOK26uHNWMIrvlwd0e35+WNZB28s/IDDEPZKKPKveKvSiONw5BnZ+AriRy9AvFBXkQLmK8TV4Z9AjjuXDawiQmoF8CHDOoZRN/tX+gEoMj1P/FB5YgnDhgWgSUvuZUEMQAzqBpwMfHoXLFtsEHrNzE1TKUsvqAgEK1NgMF1I4BttItbsJPpOMixVMkgJcL+totbXDRF/sBBQg8I4VUmA6a+cG+w0AlrkHcR+c46lSHt+n0T49wKLzZKW398ITgXcB62n58PNf33MAthcAMv9VcYNqAMf3rgowjv+bwgrVL4MDlLRsL/cbAL8OQgSb+duCMp4S3Oxtcw68Lw675j56au9jcmWjtV1HYnFgm+jbj52EGsyjBKBSsyISFnSPyhlIex+7D3zuSArOEWUAPzpJSC6l3aUeIPF+BC6g7k6iYVzH8XXLb84E0H4dWLgAsP9NnSnpp0KEieRf2P4ryn3KiiuAovo5q6wqA5k0pCsg++1i/4w6va+107gNDzzMitvtKHlH1rer3NyRWAZLHkyjBJ9TjKjSMJNxD5yLUUPlYtQAN66C7g8DePaYBrgBCB05WOAyAbfEnQd4RDwtQekJwycCJ4jDuBrafnspKBIA/zYAv/EnBH+YB4jVv5f1d4pq1L+M3sZ2lRhggCrga/UH1uxYcEM09T6O9oXH7MIEP3XVkQsA1g7J2BU4YglBP1JjbbuVMjoiyYRqwG2A7PMMChBMmH01zQ8lJJrYkdiyYgOJDgM8Idvv+QSlB7JSdj3zD7yuZMbmw/ehPMd2PysBpNh/awkusX6uBvCEIIj504AtMTyDfWYOACblbAKvHtuAAFwHVQKUDe8n7wLwhkk7aEWmiTvTIYBxGp4cTOynLLtLOlUpd4PCVhzsQEG3YYGn+9Hx+yE8HMA7A5hdzWOPo67XLVP19OmQge4VEddjkncezNS7wudQHYyQkORQbVglMC7VuoDlt+whQJkKfLZTgWuv/xYW4Cu8EPTb0Rns21dGQOdbMFEStIm8OKtvjm+ARUAVZTwXItD+VhGA2CoF21jLuwOKRTlMoHp6D2BmrgFl2lmhXJkRtscrMoAR12bXazvMdtcOSriyTqZ8hhQcUYgwpKfATHZRgo3vT7PiFjBehe36CJz6nQMqfKGxY8ihF5rkdRQelXujCHdbtvyW87fWRqBUDoQ3A7vaP0wSUrMAwzxAuTj8t5MczIBM/2SCQZCinQ5i+sO5ASQsJhS8HnYk+bNT3CrO5YECmeVR5MKUolz0EC1h0YCr46UMjo4rgO+hgBCGIK7WPUsKSk1F/wMMcme7a7QD95FaiUys3S3nIQzstT0pDDDXb7+fJwx1T+haypgSzkCRswW5vU/9dWsigNoHkJ1AfSFIN/lX7H++pAN5gJpbQIAXJar/ti/Ssv4wyFG5wFnIUh+WETlhxbF5RCiGBArIyAmoZBiHFHUbfJR9cjAPvVeSU/0DHdAjafE58D5GgxiJqausQGgqrjbLZB+AVso5dRfVisBFSKse2DVzzl4AACAASURBVHG+d6MEnXQYBuiW2I1iK0Ew5ABYKQ+Lehii/MnyW8EBtLn/KRdQau2+5l/WlWQOhwQ2XDBKzgB3YUG5VF8StOEBxFHkCOpgDpJ6VlExD5Fvu0wmwkDq5QmUWyDQtudJqk3TfavOItnhoAnsdQxs0Z+AjSZRqRAVbjAY0UVEg85+L0sdEZAs2RB5wqBHb5IuOyCPACh2//yJvvNjVT0kGHN85VK8Q5gjq57bSOsyAWwjPs8HKEm9Eg5so8kk+loizlcFOO4/lgdw6l3IAQEkljkrLVW8PMzYRbC9MrxqQMiKzQnC4hCs+sgYPSqtuapByaPoARIm9vi62T4LgLSchAKaB5QlHLG+5iLmgcv9ENahoJ62p1R4augyOknCI7F6pOrq/E28OkpPqv441+DJwpNqu2fLbzv/jTYZKHoHwP6EN4IojCqmBHPSrwzgEsO7z+WR6ux/U3FMILJCU4LOOAGt2D5WR863wI6Se2HWP6iHz+QHQhC5EKLdA1ZY7Rj89xvF/3PHVUQEy6AioJyAUbDJON8AonIsEYCZFdghiumuPrp/oduAc1EeIu1iw8WyLCI2v/1YzfWxjIzBhKi0tSGAWgoE1Vf2Pylu3/bXLH0lgDI4JjoDEUhVwRQ4SdXREncU+wiw02EC11CTdnST6/YKEDZDbodXGdWBiprvBI8bwMbWUFYReslGHqwB0PouwcfdTE5IHxYgvKaFaGqf4bJ8z4bbgfriMzEJRoyrxbOIvscbkx8YKD187/A7bCHA5gCO2H9j++nloHZdnAdwTUC9+QAVgOQEjM1v7GrUtpPg06oMLC3zAHo95ibMQOMchCGTHjkUYmvbGEUgxeyp6UhpjUaaQROAOMg7WPUZ9BNUC26/X8uPsmqp+yAciAG7B4iKm8NldC+G+QxwBvOqLr4D5mTYNXTufQG5cnfdEOAj9hAg9QHUMmD9bFXeuYFi+00F4EAeAKoAM6RQkpL1BiPAVL4AW5FZyWViDpR+Yj2/xBETYDiwHNnk5262EdeH3zO00ex08kB0eRFshJnpDyhOgJQECcMM9N51sLrOkoiK1UWi8gg4jboLp9ZTyylnYBwUEVxQTj0GWrzrjSgr/7hQIwoB0vLlI85/s00Gyom/NiMwzwswNf9W/quhANf/XYiQL9pYaVR0tPciJyCBPJcbSLiKLfzICYzW4/HNgxxVCgTAYtLQbsG4jV55sESgFb02HmV7bgc6JTLrSS1ZpgHIce6g6jAJ8BnlDsFJ8fiTEoSkzvI7B0QYq3AP0D4UHIUT2n3g3bGksRMAhgDoAvS7AEQzkLPwg/ZgtX1WwHT/tv9PBIFAzuvH4A6AT6HBKCfg1nPTkJswVAgPIZpvfJR1FwMndBRFUUXyDMHMoIjtfpBzEE7FDjD41MtDRLa23BKqWc8obTsdK5xV3dCxKEcULQuIs+cWIiDy9TyOGHx45kOAdqZuCPCR2QHYtwDTjEByAHPlP1b4WPGLylqlbtvXmwmq2pTZVwIsCJAELCF0bToBshET3PygycfyregzMGpNCpvPa9WlQyiVKAXZwAwBk8jMfvFQwrCQDhJ1B0QGxL1SY+Qc8jWq645UkJ1LlEnnigs7qX4Y0AOWIh+7vSK3uRDAHvuo0kf3YvnI87eBA8DXgQEJgKV3th/yAC1Gty/5aPsE6l5jefE+AFNa65TpyOa3LDUkCKW7gMfvYlNR31dKzfup5J9yDfXUbMkHbkGA0JCOs73aiaiBb1xCvV+s+0CkSCZAXmy1GZyj5GR8be4KTWkLcx+VQ5zDmAPxTOhhibq5EXP9ktRniGFG6Y8Qg72+7ejLbz9/m58LUMuA29uAfMlPZvupFdgTReshwISfU3eXzFOTe1T874EunYABq2jogUFfj+gAzgBosW7XVRS1M0DpE1C6nHiwzIQJrDASjILYlMpE5xsCNmp4AnAitJlyMCQsoBsRmAYnHnkMQnYysVvokcr4PHMu4MhxPNj5/hoCaLG/sv+cDMyXS9n/Rgz5JpdYvgwu+bkdS5MBHkttC+Ymyg2QYvrEnlBgAoTO5ItkWtj7H51DJdkEwVQ5E4m2TCyNu/z+zWx01nFSTrmdXpmKWpm9b2CFFAO6Q3YKJP2kHsIXzh02Hr1IZzCTwDsC6Mcovd3HEn/6tHwUOIBU5qMXgir7X4G8HSQnBct2FWylZbjTDgxlQB3Ti31Nwo2n6qJb8Ouq8whKfO0GCYeh9qm23qvKVOKwALdT17fEg/qjcwus2tH+JibsJRO5dZgSnu58QEbSQYD78XGpt7w8aNm9pPGHA13bZqV+0gkNrj9SanVd6vu/cUpPY8N8D036uwP4qPPfCsqA4oUgNXtvW4Fr8k4QQ+KDTBQYBxelFJbf7IMq1N22uANOqtGXl4lEdhHl0c2FCO1644TeODRo18/AwLgWB7LVNyYEPSA4e26uq7iMKF+BTiOy7k+y+qTYxoHEA1wp2ygHESYIu8DxRL8nDPND8TkD7QLU9U4Rw3LEMVi3FX3fnQBaGZDtP/1GQFX5pu7JNeiQwAI5f20OA5RzYLU1CT6I9SvzdyoBhoCorTdQ9XGIQMnMPGjS5YzDiTqMxACvgyNKJPYqCAjQUd4gg50n3dghawdRS6wqpY4HpwQjXB8Dpw/eHqg6KiiJyV6zVuzHO4oIdMr5jLdFlxMreuQ6zPJKJOtp+R3GAaSOQN//r5KBAejrHAFeT5+F/S9K1xKI+UsL1TbbFgBGlQDTSOStcwGu4feZikAH8F5ZAzdR4u4AEOraWC1kfgJLgNBTkXCvYN7Abs85r7zRfi/C6jfy4cGvVXnG8s9c1xGw9p3IWL29gwgch3mGkdLPEcbyO87fLhyABbyu+2+XyxOCbPkvxWfZ/le16+UEUMlVyY9cBAMQiUKBs4YiwgmYcmO+8dVhRCFCISgcJgAksX+6JxpUbTG4HLbdxjXgMB+dN1DtvJskrIgsHDnOgdCdI7gPeHcUYc0q9VyCsOcCYgDOHLvEBnPEgFsFzmuinDl2EvbYy0efv92XAXcwxMnAAuym1CUkwFJfIgi0xLpKgM6gAC8CehmtCBBSVswTqFhWEREO9GELbz43uo3qQPyA8fE7KRiTVs3Ee5JyuYEpG23bce0w44HmCW2kknZwl2epCO5Y2KBiYh8qtOsdXedTiOTFuwAdxmhio22X2JE1wvGuIDr2TgCuFbh2/gEJkNrLWYHG1mflr0osSAKteRjnA2CgYahl9J9QCSCCqjdJxd8E+C6wjzQCkT2PYvC+zS+E2bPr5BaEk+jF3gZ8naoFq3cIWraxg0qEGsCjXIHdp6fm1i4zqUWqOusCZo93hGimlR7ifeVElt95/tvZAbye1Vr9OCiEBJAI7CYATdyeyQAAzJWDxBOKNMpXpfCALD5P+EkPB50EaIpRXbtN3WoimVdvaAD4ELTC+hp7bNYLUKtrG9h1b/GDMCQ4t3MfnX6AFq8HjijJsZ48BOseA3qkOa16PSdCJJmvcfY4RwDs4/04BBgT0NGQoW2/E4CpAuyqHGT/tynDGaje/mPdv9lkkyfougEIHyIywAlBmYjaw+lVAgY9AZksfPbfDpbqRQSAo9h+FALIfgFM01EfvbTwISHo68d+CAXEkCx6lQkAyxGyGFn9XtmS3UYMlL7CKzDOqLZSVL1MWPLFZggeY9+Z7I4dI+29/EvVAWzgxrhf2P8cX2v7rxOAwzyAidPbMfybg0WugBN3w/gfwgl2EC4bD3kGpdiiStBczAzwMI8xEe/n62U1miOEQO2NwrVr6AHYW/o2uM2A7JBF7zv0VV+rJIO1d42KNOw5tTOZdQFHlH1MPLEjOS1t/BQSj1xVb/lOANUBqOTf5gagGzAp3a7rOWTAfxGkUAFQyj+qEDhiKI+gUx3gpCOBHFVa2fcSNijrrpQ68QKRipnGHAAvE4oE76hKcCRJCDZ96DQOlQbnrHLPjo+sepQLMUCs9/7pCu/A6ADmQ4exNdfPvwdI5SDG5xEhACQLe85g+Zjzd7QqQHUAnYYgWfrLj0V0AjbbvP0FLkFWCHzXYPry+SiDRKGN3wGYrEYMWpGJnwX8Uy3+FDCVA0Fwl7+HuYFAQaOQJo3UTqzuj+fUd7ZSAefqu4Dx9TzdRcw4DSb+Adi7gOzvq92HF57DDmA5nXYCaA4AgS+mA1eHYJXe/IhojadtHkD/GAiCFC23XV5vgEss+gSh3HbGCXB+IcjOK8ArN4Gs/dT1ZshHoUcGKg+WrkuZArdudWWlUlSggRgPdm/dZ7Z9MYQwQxqjfMVRZZ8KATJxvDBnAONk+z7LxxoHwAlAOx/A2X9WfBMWZO2umX3RMhx2A3oyqE4A1FxWDcqgrjb7gBMwHYNlSASdg9RjYBJnXcXWjUAu8abKjgKwsQPR4DFA7XUf1lCD7eX4uAYoHVeCR5oBYJ90WlChLLPdd4Y0bBCy33oRdytg6mX2Pka2fjaRWckmdBZz51s+9vyd5AC4AUi0BocdgPhCD8oTjHoEhpl/DAPIXRSTKpt4fDKvPSBRHTjiBMhZWBXsEAea6lDR2wMsOQl3/IgQzHX5we7IxoEdIPxIAGuw9q+FCSFORs5ZdAb905KDkeX2uQFzno6CI8WUOP1R8T6puiOg3AugHMfyu87f2c0BVNXfS4DzCcBi+f1rvrbLs0RhbXsf6N08Qh34Cjx4XPvQzDU6BwFOoAf4KBk4kdSbDhEq0R0H9egcfQWm+wUDzpNJxyG4ezRDCLGyx4Cm40oQziX1RiQyC1gFdgXI014enFPv2XPbJKA99k4AugrQeSNw+ZWgrhPIQDfKfqAbsJMwNO3FBPpWnYCBaAaeUn3RTVgGOTYvuWUCGIFi1oc6Wt/LPUwpfnM8DOoGpcE2gsx6dr3vTMYhA4PjxVl9/p7tWiwo1DXqMKEuHbTk4r2udp2UWpHuNKg7qq5CEH3c9bT8y+fvSg7gVH4XAC1/8HLQrhPI1p8sf3oUrPzCyqucgVHR3j75lu53oF2HOW/UHciE45pxvAXsWfOwioB2m65TWfM6kCYy/BKIw/2OuwlvzS2wuoSQv7MmJ22z6/GEkvcShzO5gHFYMFLjScU+oOwvxAHMlgE3AtgdwK7qBfD8MpBm/znj75qCMDnGrwwzai0ah0I1t2FBHTzRNGHOJ0jQvwAnAJY8Bi/1LYC9g+xEFiStzDJmh975vgIL4lIW3hHFEeWOlbYHMHvdcyRiieNpIURIENA/z85nTCqaxKaTe9NEcew88vxbGfDjzn9nXdfXoQsQSAAagJK17lQFVJJPqLl8O5DJvqsZhPnyzSD1cwNMVYCPWewzq65JwsFNxWoDgvZgrG9BHoPRgEEkBkcg1/uPY3dJLuh+ZhqERMUgAvc8ITQTPU4GWpWeCyHaPnb7QVKP7k2196S4fMxpa9+6XtKhg2rMvrySBX9/71qicGMnAOsAsAXYVgBUC3CLuVVnIAx/IAP3CrFu1x9CCDPr1hUkXEP4YVTfAs8RRd633SQMM1hl/Dq7BU1PxkYmQyT+4YYuokc6wSBRhFGXdXv6NTDGRBGTTQzgx+zDJHocsGsXrNbNzCt+7GAkiKeqAxFJ9Zbn6ycXExHQ8rt3B1DmARTAp/ZffEloiqMzwNjaiw7AekLeJytzywmg6or8QRAW2ONDzC+Sdq21FwnJ5gkSkellRsUphu9Zf3negf3WwA1A2SEGR0rFAUnCKHdT6fYkIYTXQgQqLG5MLo8JCxjAjyAIysKzo1CZ+lEu4VEO4JFz/1UOwTmAfOzl95y/ew8BUhIQGoHMxKDtkFQVoAqAcQIq2VcdACp1IZV8ea7VV6g8txCze5CEwQNcH7e4CHxYlZ6IHMw2eZ0CXSG6dJmsXrwEr0sfbRrYT1D5GUCOHUH8XTmujo41tv6xRXaADOfFjwlixgU4ktiGucsleGsu95stAwYTguqYA7IPHUAiAHQADejmrUDGAaj3A3AfP7kFGeejXe6QAWTo0xeh/Qag5/DAgpfCg8gJiAYhCUY1r8Ak/goBHggBqOtQEdQ0MZATcI6jEp0Gl3IoCKEeaKN99zM5gHLo5T/3VLdALYqhR4q9r+8o8Gh/vidOgctzmOzkm1J1fLaGfDwZ75turcAfnwmglQGTC6iWv1QGqvLie/62A9vP1tqryT+4T75NGLsPyoBVM9FRuBKeSBASaZjhxMcqzCnBbHMN0i1kQmrnsLbUOYHwtWBKRWlZ2FdQANyGzog4HgPePiHw9Vu1ndl3fE0BUb3QOH/gEiYz949S+x3IHNbosEyTXWfbrQrw8efvyUnA103M30ICSwiVGIAQWvJN5AlkC7BX/gqWiAxEac928E1UBSowvfXmbsCedW8kF6u4sbUHk3i2h2AybBhm4uPwgtWJPZFdfxzEw3DBNbXMnSO67qJuXcfB9viJhKEU3qh2kPQ7Tgo2jGCnosmi4wA+4fw9YQhQ+wJqQnCQCzCkUMy6qA5E3YFSyeHijVJSuZCy/nWvamnxOOVx4Y1R3YDAnmSNDYW4dWxXYeu8bWzZGX75GgYuYaTuQxC6DEVMPD3gKb8xVvH5c3VBX2Pip4UPXTAf6MCbAbez9t24vrk6RXJRuLNNYgpzAJ9w/t71lJOADfA0LbjE/y7bn3MBocqneF3P2ustB4CarP5M7I/QRNUj1Q9sf+gEoklCZM9kiZHUWZPH05W+VR20gipFPEIMx5yCDnscGUwm554aLjhQD6oRI3fRV/y8dqIUN0MS5p5VpxKruj9mxwH83vP3ZgeQQoAW/4uWYOMEMqtEbwdyuYF8U0yMj8oILFXDgLy+FxbMVAWiNl855RbPaZ1CfRCq34A7/Caz/u1h+fPGLsErXA1LkjSYVmh3joCQIqU+ThI+NHrDXAApJitqPwwQdhpCA7bw/tgH9q/PBFR8MnegyCapPeUGOu4kCg2WT8wEYJKAriRY1Do3Can4P4PCdvpZAO+fENxoz3v2fpjwIyu/37HkPurNU/0BJuPPoBFuwwCnM4GI7XTXvmulVKDzcw/I1bxgYB8H/ryVr8AkEPQBOyaWHtHUsTAZj7OSDj8P8gixawiIZPBK7xJkF8KPwwJ4LnSNyyeev0+GAKkJKMX87e8GYKwU+EpApPYtbq+KNZP1f0zsP1MqrByqwV5vm0ziKXIpw88CwcE0aj+WLbhIEMcBnzhWX8+U4otS2GOJ4UW6gIhARtb9kCMY1PGPOoK5F4qQqovkLgI+lU97TqStU6HB8knn7/NJwN0yY9//4M1ATtmz+hq1Dyz+TAmwC2YRJhR7hA6jTtxRIIqO0QBdgOQHEB0Pvo9KzDUo0oN5gkuQbkFYWQ3c46TSAxkfbRr0gdpFZOOPq92BudbBG30soD0QnQM4WDmIHUC79kQSFtBzZcAA6EAQ/P22sy6fdP7+9XTa4n+YDYghQAF3dgNzswHTl4gn/hQyUBN/qjewNh6dggTzZFVAhQczoQJGXEMFR0LxAxO+oZvsYQHUcxk4nOxgnTn+U6sGDpgi/ozU9oUtDxp1elZ9qNod2z0MASrpEhgPHLM91Y6quxBm7AAUqWxjYPnk8/evKf73SUAVAiRQ92YFauD73EAmAaPSqnEIVNhYWdq28KZL0EVNQX1rHVUDjJmOKglRLN5JHlpAWcvecxL9dX7t44DfdwlToUSQXIus/FNIYr7SMKHyT0gKqhg9VHdJEj37bis9NQwwLqdv/3cH8K+cf2BdswOwbwYSFYGw/790DuaLktYf8wc4wDtOga0/5wK4n0A1C0X9AWa5SACa1mW1HuJ9l/H3gGkDWoUM9vhzoD5u3Xvhi/ITI7II1x+w848G+uDlINFxu0nCAxOVlC1nh+AnDXnCGYcFOO0XQgVTATjoAOD57ASQFD2FAV718fXgOE9A2fx4WUsUZl505cB8+9jqT3xm2+w6BDOLy3f/qfxCmW9QQw3KBZgsv4rlrYK76wvj8w6ooYqhzb9ne76KEaD3sxOwFJBKiPFCcwFvVAhx4LjKfjvbf2B+gCYJAOuwGnHAAUw7CEsWy+/bHQC8DkyWAHkmIIQA5Aoa0OfzAL6lF4ZuryegJvvIUQRx/h50ZELBh52ikJZ84Ri6Hr3XN0CM3PbpuYf+ul5Y4GLwHikNuvz0sWJCiYDvyKKj0uqcDMDuNgccQFf1C8kPwehdmlTvQ5UDH+q5Y051HioHIJZRE9GeA/j9579rQ4BcAeg7Aazni94AbLwZhAP14ZQ+AtnYg8ookn0qNFDHiZKHUA7kWrtU7+h8WFY0bRo79bTMQGIcyBT01NsPEu8vZtSf9b/nUoTH6ChpA761uOxnekCsVzOR2IuIwR4frqXTazBFDsWxhSFCrNTOQeyBdxoPikCUa9DLIAQNqxHqusgBbATQQoBtZaoGtLf/2L/r6757zUCiLFicQVVXmdArrgHZlpN44rNRcCYLZd+jun9+KHxt9VEJ0AzJoJ8/iGCoHUqLAUOXguGFAe08OJ2Sc7uzGLz8PZxLCBU7JrhhiHHABWjSyOfuqLYEMJTp3PqDDoD3r9/5UMvvGOiqX2B3AJ9y/sHdAfifB8MfBcXpwZkkAOTqxaBx1r89cL2NTSTWrcNcAADMgTGoAIQVAyKLmbDgsd2BnGcQjiGO9ftgZtcynzOInYQ6Bja2PNUFOIBKx6GV9miooFV/cOzAiuO5p3II1QHokOKwA5CEY1U+Z912aSjOI/27npY/sBNASgKmdwPm7L/rAlRvBAp+LIR6AHqTgcaOIN8o19orYvZIuXuKHrUIy7BA6bW38i5s2HdToGWTzN+p7YUPUe1VHm60zoIkUF0oIb0hLiAP/n78r+lKuoEDJNENPzoW+pADECU4TRAFiHZMmLBgygEooLdjV8DLGYZp3+UPnH/INgLhLwQbMpidD7CRCCbV4B0BrjnIDng5j6Ao5UDd661UDUOmpIeDH+AyY/tFt54Dew0X5qx/ulXBNdVjxTbZAV5kg8FzmatTVQEFTk8GTEz5u3bOHdl5RTT7toNS4gyJtOPMhxn+OjPIDjmAGOD+haQ9EA+IImwDHjmAdj+WP3j+IWgEKra/JPbaewJNDJ+dgv35rwzmcFJQshz1xaIOlLYfwJEIk4or33FogXY+r3ONOwS8qtQRIGH50Dmo3EOfFLT25fsWEIsGsT3PU7fB109PkwHYTc5XcH2cfVUIQpVkPZwHiN1Pc1EFeOzcvGIbhyBbjS0YRyFDPeOjHYAHv52D0NZvfy2fev5hqgLYNwPX9wLugIO3BRd34EDdgF5sa6jspsSHlQXOAzCAEYg6FLCq9xSln1TnQ12BY+s/tvz+GG249gIBGADDmn/vHJ3wZHhcva+06cPZghPqPkhA9sIDQ0YvwOK/OAewnvhYUf4Ax0UNCzKZ7gRgGoGq7Uewi98KQOBXIENJ0PQHgBoai06qbxSYXhiSQwH3wg2p6jb558hgVum7jiGoLqjynzzfUYfQcw/FMj+OFHrE4VxJMP9ehw5WbRzQuk06KmeiQw/vKPx5oxCkqv5kv75VcOEIXD6h5wAemwPwpGfyB9V9ebLHJOB29uVfPf+IqQLYMiDW+LneL5KCWBmISoFH8gBBmNAHNKs9gsL+naKIYrE7tl/afQXIkbKP1h8lBTbP6vMBUiCFi47uQxW95f5tOuo7G07wL+DwN+om+ErJbmomoAIWkM6LcADbzTNk4y17uy+KyGgZ5QFm9y3favm0nQDKZCDMAcDfBbQy9uewAADlmntUeIBAGuUBuH5f8g4dIHeSe0mYRQjBpb0af+P5Rw5gBPbR+qNkwLAkUOaBwlBVYI63EWQCFt2u7ZAC5wcOuAq2s1WRBxUMFd8710L3aLSPstwjiz9yEOb7Bd2Jj7H6qPyFgHYH8K+df1TkAGhOAP5ISDf2D0IA5wx0SLDfnKDcZwYXtwebPEQv+RerfOsALAR2QOEflRCcU2sdzcPSOkh6bqC/rgv4YTw/mSeAee46XCiJt471f2ozEc21Vw7Egss7gmMAb2PRkQk9N2vN273g0GVs9ZWjwGXoIDIB2BxAifdLjd9WBvavxO8GkPmAuPwXNgkpyy9aev2LN9FZlPQZAdk5AU8GjYDIlaADwP6AunxEFu1c6i8cdHq9dwNHEn6szGbgB92CR1xAPR78WKUClwW+AFe2x37fY26iF++XkC/cRsy1j4iC3YghjwDghxwAjS8bOliSsMRgAd+u35LDVmpdPv38Y6IT0DcEpZ8N2y5fTAxSXYGz+YCw979Yc9X6q94F4MODBstCEPPADknmEWQQAXAW7EMXwAMF5xlMOoRpwB/OEwhFd2FDQAZB8xQm/ZSb6OcEWi/+GNiW2F8EwBmMGMIoQnn0snC+ATmAf30nAOwE5CnBQAZF6eGXg6re8otCgmSftfn562OugPfLjTKFueu/+/dIJNHWUQOSAWveKqoaCGDXoRs1F02Qgbm2eq2s+QhxpXad9UMF18dDBXQEFdp+TUXlORibK2PymXAhX+9khSAC8aiRSF4z9vhDHX5MFAiqosxEHvScXEhAY4mz9WX7/d/wtWFW+f05vDNY/tD5x3UOIMf6+AYg/LWgFAqU3wUAu29m/+WuwB4ZOMBj6BDlCvLNFcCMbTzo7UQ4gIFEGyyWsLQNVyDx4QYOQOkQRMzsyUSFHpPJQ2HXvQsYAD6o0fNeKsTZlw2nCw+s/zCxGTuL/c51ZuVZZ3EU4M2eI3mM8gt4TxrgrYNKxDBa5q0+EgqGCzsByBxAfUfAdjJ6EYgDvnhRiCgDGhWnacJ2HcfxPjlonQQO+uwIuiW+/FgmKwDWfSiAeYDPgfWY8ns4DNyCULH5sAM8wjCB1wFqdxrxhPXvZvdji74fWWT1LbDngNqO1aAXxdxo8SX4B2U7vD57Dhvz1+0ciVnws9Ph614+4/wTYQ7AvSLMvAtQ/UKwfVGInDrsGnrgVWFovdC3NQAAIABJREFUg6hL0PfLZyZUcwT2e1WCA8uYypLPVAD6Vt4CWYNsDuyHiaMb44/cCJCZs/1e9brkMcg1xI7HWloFUAUqY8uFks8ouNsmfBfBhAMopeNOjb88W7TzDHj8rvx2JhsWWELwQFfkBt8jX+fyh3cCiHIAXA4E218Ayu3BJiGYKwkl9pUvB6GfFVcEUSyPA3XQF2Be/MHA058r8Lp9AzNWHiEcgV4vlwAzCjhQfJmTIMfy1OMNEniWcqxVLZbbgJfeLYAgMccKCIZtdXzsvKY7yUgBXX2HA85BvjvAX8tY7fW1yVBB5i/QGbTvtHzm+SeDHIAvB6a4f9tZTw22IKIyYK8qwOsoL1CHPcT8ZnBQX0CDoH97kB+gDGrYQuQKZtR9ZptqsDMg+w5Dx/Xdfbox/gSRBDVz5SlcjD9dKfBHm5t41Ak5trF0sPvQqafLbcw5AKPeNKMR80W95Jw7Ro75K9DhuSL4IWDLc/7tuNbbrqflM88/lacD55eClqYfyAGU14DLEmB1AtvD3E4avCLsQCJwP46c/lvOYRU03B6z7oY8MHYcOAKjqvPq3gf0/HHYOjtyCRJhkRLr/ScThzzPYTLTzzC3CUALZksmcRjSTyKqY9Iy2X044QBA0fmXftC9qERduQ9R/oATk5Gtt8fx39WGCqD8IjxZ/o1KAPmHQcorwdyPg/jJQdIRmORf3BlomoGqsyBg8mzB3ChkFN6EFzYZaId1MLlIALylIL07aFfYW9cjGExwjhKKsK1U9FjJPQHpWFtup8qVYUJNeQK4rkBNmaBQwcw6SiLi4Ld/BwlBUX6ThITABqLjkptWaH9upcj7vodyBO1KpdUPypajbZGcls86/3ROAuZfB6r23v5SkP9BEJsErL8VOGgAqgMumApswM2JQEjuWZDmG6VyBKZzz27nCMLNAdDuwEN4e7TsSuygUI5AhgqPCAnmwD4Aarn+x+YIDs0JsAN7/9TtIhTb47sBDjQWuXCFzq3seQN9GzF+u7xO5hi0SuNxvdpbEk2qHtl6f13xtvYYyx/ZCcAmAfEnws1rwrD2X1/80V4Lli4jeGX4IAfgHIFqCFI9AwQ8m/2fcQR2GwtKtupe9RWIY/ud17iy2hPIQyokE1dAT1Phg3Apg8qDV3MinzC/EKh4cSQHKhVswRPJKMfUU+8gPAn6B0YWP3QPzl3pUKSRDth6SvwiUaQwCbfF4yZCWT77/DM5CUjvBDRvB6Y3BO1gFu8LKE0KNd6eJAOX9MuKCkk45Qw80LYlUeIvr4P+QYZFyTuYc3W2l0DPg1uqe6lw0ENjmnHXlRNKSsPlthMWfvpYj+w0LHaX70N0vSZJdtBNGMIJwZm2ksQgGmvapB/lPjRAu4oukneaECy4y9iQtv5Atr84gnYP0nmWzz7/rEgC4lTg9lqwBK4A+KU6UOP5BuI6wCNiMHkDNNg8PRiJQalzAnm6TlZ2pd5+mY3xWZmPOACtwkN3AKw9RQwO7L7DTp0Tj11BMdV9qFR0dE5rUc31TCYSnXUPKg1IJAhIBFJVahHuKOuMym7/bqQy8zNgY4dAyu5afi0Z9cMC3Na6ALyO5XMqAagkYPCWYJfph7IgkkSvG5BLejJ+F6XEzNYyZCCGN+8fhPjp8QrPoFYkhARm7bM6b8kke0CidjLxAE0FtrgSoZy9aH9vrn9uymUcDBsqICfKkpHzYeurANlddpAsyhN0cf6BygEnASX4yZ53HQT1Szirb5KYMF5cCGCJYfmj558TSUCcAGTfEdjyA9uBsB+gNf3YDsB8rB4ZhLE9tgDTkHY9ATzk2YE8zhFYCzsCPDsGBE9SSQW2OFygHEbef257OPfwvJ2E5aGkYL6yg2FDBZxI5ikVD5cF5zXhBWb4RagUtw9b58MkIc8RTCjy+/pj21BFhxyt38EqvM4VJDzwdS6fe/75gABK/I6/FORzAUgI6aJ7cb8nA6OKwgVYpR+FBwrkmRj2757+9hrdW0YgFDkB8x0qSMsxbVCBD79RFjuLNFEFlyovIY81BHtg4feA0PsGPoe24pFDUcSiJ+F4YvQxe70fopQ2dgV0vPDlIH2gN/LJZwzKergduwEFbusQkEhtWFDuk8wJkAuw14Ak0v5e/s1MAOmXgV8HAGNIQD8V7nIBfmbg3hDEyT2cvWfAXrZFsDRQ+r5+VnelzGUw8+C0/QAGvEafLQANcZgsOJ+bv0McBhglJ+Da6+qEFc6S41E7wBwmK01qLT3L6XkHcN7J8p4lu3zPBhWOUby/X8WwD2CsvvgWIAQgg1Y5ExdGoAp3SoazLoEVvYUG7Y7uy4KE4fJ55/dQFYCAL2cF0u8F1sQf/VIQlg1Vpr/zHgADOH6TMCq5nAw0o/QMlAjwipR6roBcSjVdcHwA7TTQcxlLw1t9FwDwNNgBho8oL9qfCnucK1AgMkQZWfhJV6DyDHWZKMfh9YS5AVVFKGosGqgUuPk8cQhgHcG+HVQ+GgG0MYpuwRLGelr+2Pm1DgFsyhxVARDsOgm4X4J7PwDYbfGKcGvRm9I3WMH+BVxhPkCoPyQK5bkUYE3YoMEWA7kX+3uQmOOYcCJyEiLEAPCqMEKGQMPQgex8x3koZWb7Hln+npXf1z3KFYAaDhwJ2/UplXe/GkzqS6Q1EwIY+y5fL6YtfSKAGPwYBu8GaSOA02nrAsS5ALYMmMKD7UthXmA7kX9V+P7Vq7IzMYAyY9mwlu7QtvO2AvjkBDxJsFLj8VmpESp4rp66otNottXuMSIMALBLYtlrUkqYQDEmB0MTQ7AL9Z7qUCQj3214UvmBfuhgyUHnF+oA707o8bZfHdsAlSoAPTfAAIxJJIOYqhQRgA0pgFCxwkfhA4N/I9Pl88/vDQhgAy+WAfnVYNgKjIk/9U4AahvmrsBKAOkNQumGlb+L0+iBOQM7mi1YuwMGJOLUvxBGENdXaz0CuSIX+2Meo1DAQKtj6ZXi8zTcQls4UIwiT4cMlniwb36k8Hy+rmsQquavNx3BWny/rLs+zBd4wrAq7hXXEYprUEIrj47BEtvI0itSSGFB++7FFShiWP6t8+umClB/GKTG/uwGUPlFGbBafpoIlPMB9SIGGX8LCN8PgOvd37IJiN2FJRSvtZG6M3zaoItBnNdU28xn64cCKvnmgQ5LgtKdIgef+e9dCwzOQV1fuRU7MIk8REnOkYhImvF3Qgtf9ne2vpMY9MqOVlsRir0nHmR9cmAiYRKT4B2QCcf56BAsYayn5Y+fz+t6em9S+1wFSMqP9f+SGMQXgkQdgfyeQHgpSK8TUCUJUbkVYbjYXABL7seKDkpvVD0CuwIwDtd8PIjduoClwV/6t9tVeXrCAKYpL1/D8fyAV+5jIYZRWFk1sN9FAXYfpJ3wQbsF4QA6hNGz8AiS9nf+ZoI8LIhRzUfOIYjXZduwdQwF1Og0PFn4fRoppnXLF+wEsM0DwNmAhQAoDDDvCtgOZasB+8FLrsDZ/M7U4GL53ew/tOyYW2jLGxCUDUcVF4ruQgPlCgSwndXMxxY9AOgKujB2MXYnrOjE4+4cE/kBp9aySuFjbkdqjwX8cD9l73W+QJGDXoZAtSodvSwUwWaBR/vn8dFAinbcEomy5Ug6PUfAxFMIAJ0PhhD1XECMy584r+f19PpiCWDrB8i1f3QD9V0BOCdgXA2oIIjmC8gkIDiJMEkYATYCfk/RRwQShAxVqSKiQK2GbUSc3XUJZOsjMkk2O6Ya4QlEA9BEGDBVafCk8fhSYb6mQSsyAkoBFsFhXx2OVn9k+2PyaCDT4YICJ8fxM9so4kiS3sY4g1/ts/yJ19fXT8v5YrP/rRFoAzV3APZyAWKSULX04tXh3B/QqQI4BZ0OBY6qP4OG3EfpAOzG8R0S6BIFhyTYCcjHZCLCh97bFvYbgBePUghFEgfUv5la9+0fWyoUPQ+spp4slUvIy4JJP9rqd5wBKPu+FZUklVprcCty0ATkVP0FzABsxLCeli987/ra6eJ8lQgArH8lgEIG21fmkIBfEhpXA8y8ARUedHIAxuYfJAAkEA+dNGw1bPLyUKnbnjYMgTMGDT9en7lXQJEROIlBqOHASvG0AzgBuZQVI5DNgj1MBO5ohqNMEoWO/W0o4B2AdzPKKhtnEHbrHXMJeL06Zrehw35doiQYqb1yCvacNgfACcDdMHzha+vPL5frjSWA11uNf/8VoOwGaguw7QfYL4SnCZMDaD39oiRYYFh+cciAUij5QRJAE+7BiiTAysvntkqtgRw5CR9CYHZfHgtn8k2GAEWZOKCx35vuyCDmd0RgkpvC5vecwcSsQEVQBkCdY5S7zKDh79CAkvc4UBnAc9i/PaDLeas7gFePK2CzYwitPhAoKroiHU94jRiWL3pt/dnl8nQXhwD4I6FRI5BtFEpfGpN+/ZJgfeBYJaAMPyp5IhxWb0EUJsmHgx72hay/BiEeNzqGWh6QhQkFPFlU4HZU296LfJ4hQcC5ujkChF/eZ6IvQIJ2IgE5VvV23RbcmnhGCT/1k2EIUvu3tuq9mD0RcGzxWbUdQWR3VAiPyUa5l0YAREC1XGhdEB57+aL3rD+zXJ5uT6fzhc4BQDtwdgL7acqvA2GzEMf26heEqtqXGDvIERgXIBKCQYnQEQUafFHi4+2tcto8gIGryQXwXmW/pi5IV96F8HbsFo7kCDyN7UcLymoRmcQxvz2+2W744lJBLtOhAA5ivD+WCKpiypZfJBN/jFllTyDXoLKAtoBk8HtwewehtsHviODXboHDFhsWLF/88+tP7QSwbHkATP6h9S+xP1t/3SKcvmjPAdCUYdoeByWCpS0fEAKAXhOCdwt+aCJkG4A81AnshZjIVkugCWDyddTPZkCX60fnQS7Eba8gnY9zcCZiUTml+jbufzpZRKDEI3PcHOUetDuIQeqBHpBNVW0kGPs3hhwFtF27P905yHG+/WxzD7xuPS1f/HPrT1xcnu5OF+t1IoDcD2BifwQ6hgSqHEgtwjXDD+8CiKoAveWDvMBxoEckAEBy4UEhBVboTAIuOeeBWgaVpY12XOMO4HgxQWEIwJG/3kt1/yngmr3B8cTuQJOMeuOvpYZ2N6zNJ5WddBgMMFRlQxwZuHPlQFTS46GBU+fJZh/lGiJX0F/uwb8nAb/kZ9cf23IAmwvoE4B/S1DL7HtnoJN+yu4zMRTQ0HITz5M6C3LoEcJwXQBkVvEGZrweUuLqCFROQOj9QOnrAB6UFflaG+iZJIJwYxgyRGD3pIODX7kGSShh6c6SwiG1f3Q5MFb2puLevvMbeXu5A23f50MCD352Bo20EkGmzxsB/OjFxel2J4AtD+DKfyUHoNqDtxsTOYIcBuwAoFmBJjwo4ImqA327PwRzQBxuP6P2EVjztXbtPWiMSPjxeROJ2EDHAqK5g1ZXLyTJZMPuJQC3y9Lba2AV5rDHWOlQlSeJ4EBFoecODBEEnYU6BEBw4/2aVPmOVUfAd+0+dZYiQNG9lOXaFSBZ2EQkfm889k4AX/oz6w8vmQBOy3rVCKCUAqEBKOoK7LUI5zcDmRZhsPoWEEwUTVkr0TwhFHDgo0SeU00gDwaf0O5UtAv6Bpx7cOdWpNPKkh5OjRjseZ8SBoz31ZOHYrC70GLY9gsEOjULUDuCbihB8+XZlVg1Va8wo9CkhBKgrAxcrf6oysJBwPFKWFPBDO28fWLga7XOYPnSn15/cFP/zQWcLk43iQD43QA5CVjfCcDNQUnl9y/NVYEM9qZNrPTqF4S1/U/H8I7giAuIgdzIxuhqlySyEstYnQBqEn6ODmzBslOaNPCgrsQ+gVmC8S4jDgX62+rjJlLyispgw+9jtyYioJh55jgFNBwmoN2uahoc36qnBWkP5Eftvtn+ES8Aad+JY31yBpCw3B3Al/3U+gN7DuDidLP9l9qCg1eEj+YFmJ8Vy+BAd1CHuQgJXFlvZP0tcXRJYAbEodozMDKwpxS87wgYzKGrCEuZjarkvmKCUWTn6/7d6oFXW3NekSj0oB7E8J1ZgAg4RRwS2CbcKe8I9C4D933q30wafLxCjk7VSfFnwoa++jdyZutfPi9f9pPr919cphzAaTldLxfrXg7slQTxp8NMIpAcQB0ctR8AlB1mDbZBpPIAbR8P8njdvm2YxS/k1FRfba90mo/J17Q/tEH1oIGtnZ8DAEM7gwlHFVKmz8H4GNNWZUAZtjrr/cu+KqnYA7sHbL5q0QYcJfZiJfeA9jP67BU0d9AUM4rZjy7HqscMGaht6n12Mwu9wiuCQcCzU0HiWb78J9fvLTmAZSOAy9NNIgDIAVA7cCOH7dBifgCrPr/+y7T8stJbd5AufqYikI/zQkEPRAFq6kGftwMw9bdhcBUiAAgFYHZK3w0DWO91so+JDn1FJaZwXgOqjCcNXMLvLVCKvV0xfke9DbgIasiJyGOcAHyEK4C23nLNM4AfhQcR+PvLNTGE5JCvffnyn1i/u1QBdgdwuecB9jAgqgi0Xwr2MwRdVYAbgvacQCYODAnQgqOTMNoVxP8VLOP8gFJfBdZk08gh1GuEYU3bKEcwk0C0DiQmCL6urnMwLshvKYFe7nenXdhCpUG2B3YNan+kLuCDSUMRkfDgZxcSxfdG8YO23h6IkQwUAI8RAFYjJtSfkoNa/dsxl6/48fW7qgNIeYDrrRqQXgQqZge6dmDbJFQV2839L+CkDsGa1Rd2viQUiQQ8CBCoPjdgQOlKc2jD899By7DR6Qm1t8BHZYPrFSVFVuR964HSGyhRHC38Bfy8Sd5zInwwAK/PLS8NHIJNINp7wKpsSILCnmMgt1Bnu+/UGsiOVXZs/9t32vNrcF/aeY9m+/0x05i3x9HHtyRhyYYJZD0tX/Fj63dsnYA1CXhxut5CgfV0XhoBbOFA6f/nBKHN/PccgF+XnIAdoD4k8KraTwByydADSIDeZekD9Q/JgYHQcQ9dEgJdFrG/vVcAmWEfA+q9CgVYjW34gNDVnYR6e00a9lx2+jGtOxASDElioj9gnPW3ScyR5WcF7ib2yOEUQomIZLScySxtjySyEcCPrt+OBJAcwO4CLuPJQQX0pUkoA7mqPvyEmKv50zpZ2hN5AQoRFMjtEM8kMcgJ7A9I2HjlGjwRAZEQAB1QJXEQKKmPIDofxuXKLfBRrWPiUEABl8gA4mxUaT43A1Bu24nZrW73iMCC0MT9gz4DBAWC07kCqB5YIHmV98dB2w6Ae0L7ryKOEcBH6r+tX77yR9ZvUw7gtBFB/akwGw7YFuCcKwCHYJt+GuDrgBBVAQ9oVnml+p0qwKLzARGwJdg6Sj1PHKiB1hXUc1KC0V9LftQy3yBIJHh7kTqu3TsPmW7VwRKItfgxcWgngL7iEYDvJgA7JCGsOpPPY5xAIVpU2VG8zw5BOQoP9IBgSN0j0ihOYDv38lU/vP7NrQRYQoDiAPaegNN5SS/+VAQArcG7jQdlr7G7bRNuIUB2DC7Dz4Duf5YuwIAkIIEXAmxQf3Yn3RxCDGZWzP0M7lpjQtmHhXM8HYIIE36iemBy883f1KM7MDKgvR9ojsF/c84P6LcEz4Mcz6Cs8zQBdBqGGKgj8CtgoxMp1xmRgl3uE4T6WG27RAA/tH7r3glY+wC2XoDTzZYH2MKARgDtRaGt9MevC6eqgJnm65OADcAIVJ0TaEMuIAUJOjrWKGO/r49Ljggu1i6/zqu9qga0HDps3ykBWhXXbzCSx4S2WksqilBilW+uxd4B5QTwWu36jvJT9cESQR/w6nyodhFAUYWTs5u3+W5fUOERATxV/XvEgOTKcX/5nAjgB9dvKY1Aex9AqQSUZOCu5vZ9gb72314ZZhuDIgeAICt/RySgbD4s25XHbtMGQl4+yOonYPpjaAUmYIsuQ+MNOuuNNlMYwNbcaG6Y14jcgW9OYo33kIQzdisEVun5E8fcRmnhO7cBq4mFj+M/434xgBuBWSVEUPDfqKSsqk8jAEzI+Wtm8mIgxxa/3QuzjygRLl/9d9dvIgewlwJrMnDrCajNPr5F2PYE0OvDTD2fHYACPMb5A1fgQC1IgBS9Den8Vz2GIJkDiUHW+hILCg9gGlPZrlt1h6vtkoinivr4O4lH3otTgz4zr4DerhipB49djytr+Lw/gsCebx7wvJ+ezIPgsX+jy5hxAkgkcWzOxPFC7b8oD6rz2dxEuu7lq39g/caeA7AzBEvWv8T8+bPp/MOkH/QI5Gx/+uJcCVCOIG3XBlNT83oMnD+ACm4GvlB2E1fT+l7VYBRCiOahmHSMT/BvQAxdS6TyrU4sCQnupAV/HoqdsMNqq/EiVMLlY+lQgtUeaSByAibTb0qDGYD1mUZOQIcPiljwGmb/ZkC/MPs/VfufcRI2R1Cub/ma71+/YZsMdLF1AEIIAMnA6z0ZmOcHsBtIIBVvDS6Ah4RgetAZcK4SoBW/kgCouSKAemwHUjhusG7fN1D8fbhLwtiuwocYVsUBao8gD2uGmTDaD4A4kjHEGDgE+dITdUYGMak2Ac9ruicMBh1q9pAcnpD5b6roXcIs0Mueve1n1D2NuQLco/a/PScbFlgHpdZte+L1LV/zfevX7WXAy5T44xzATgSnkgzcEoHcIQgNQjgvIFcGsCRokn6mHbjlAbziCxdQv4TNBcgGoO06egnCHjCDEKJCsRv/91qJUaPVnH/WcAA/5Qo0+AWQBVDtvspZcGDwxAai2iXHNCHUWTgSr9YM5PZZKTvaYiTqNyT+ly3Ex0KEXpIPv0sBtfoeaR06BHuvl6/53vWvKgJAB5A6A/07Asx8AaP4AGjpAJoLYMBXh5Dr+MY1uKYhC275rgA4ToORbhJCYGM1wKh6zykU5R0RA4UKXqM9QfS2kU5BTFe27iSdw0Pc1hCsMxq4AXFEa8j9Of1PhU2QAxFJFDYwIPDIrIT9UMCCZr8L+f72yKOAj8GKLiLaRrkIdc0N3EguviSIJIFOaHnH96z/TyOA9Xq5WNJ8gFwFyAnBm6012AJeJATxfQDmBSGo8JT1VwRByTmboYd8gVTofq5gH4JEChVcPcUfWXhJNKTkzol0YG3CDuUICPYyd2GPrz7xFfjXk0U+wZIH+gc8JlIGg50BydAfK769B6iYNmfwhPgfMucI3OhvBdzHEUD7bmzlX5T670nAd3z3+leGDmB/Uch6KRuCavyPCcLtEoPPoOLcB+A/l+NQmS50Bx7cJiyIAC6qAZYUCgjihKKCaB3QM65hMBeh6LKBozyu0vSivN4D9BTeazFexYQbCFqIFUEoAvkFIYAXUPNnRY8qDJFFb9vbZF4E9McTgM81LO/4O+tf3gjgYgP5xem6/Lsrf8oJ7HMDttxAi//FT4nnVuCk1qU6gPmBAmKO98v2ZZBah9BsPdp9BCLkCCJHEGX9DYB61YBRJUHAP0w4kuYOld67CO8bED6aioptxbVqL+cIZPXABx1zZUN/RqvaBUqWsHoWHyktdAA5b8IWeqToCLTob7w2/nvGDURxflTjj8iiHx5wBaB9Xr72u9a/BHMBahKQcwDpdWHr/ivCtTtwSv079r+ShVJ6ArkDNxCFiXftfrbWzknDomh+eRqC/RJhA5OuBoSuYNYRhDkFHTrIpeatu/aKPIytz2AvYeBLOQZj9aE4GIYDlC/QDkBbfHQmFXTTLwZhkrGqOAP6WTKICSBOBvaBHIcFinw4dFDbLF/7nev/ERFAcQAJ/LsL2H9FuE8ATdHrdOL6Ik9Ue5hEVIFW1JxcgJnYw+ssUFsSUQCYKgIG5NNuwB+3W0IEEFv4CVcB/fZ+DkBEJ6iW9h2EZQ9FDHHyr+3FYRAThgItghPV2cLOlqL4jKz4BvDGMSF454CtVP8poMd9+27A229FEB6ko7BgTCaVCMgJbedavvY71r9YQoCS8MNOwLpsOV3ltwa3ZCA6gPIGIQwBTIKPAa/ATstMYq2/rsJDkkUBBoOOqwgE7h4pyKaf4zkCA+uZ6gFPPKo9DAdcgcz9Z1BCmbEXDlhwT+QDqOKAgz8kAPEz6A0gDHhPAArYjyGAXlPPvBvQ6q2s/iH7P3iDcHIUMUks7/zb6/8qHUCO/wsBZAeQJgjV14VlN4C9AbXjrzQHgSMAckg3DtU8/b0vM3Zf5AyicEAtFwm+qvwZcNsZ0uOxVj4tP/tZAuEx81AOLX4jCFbXvr7TWvHrQWp/TwnGxCcq6VQm5ghABRK6QuDDBFgyOZvwRRHASPWjRF4vwddzAyrWRzJCoOo3/4zsv3UKJZTogX93AO/89vUvcBLQxP9pXsDWJHS1hwIXJ/sbgibbjwlAagl28T4qegGeDgssYCnGd2U9jOfFtqIMiMdvQIri/8i6Ry5DQPNoDuBQ30A6nwUvfDowr4CP4Qmhnam3LVIEvxgUr9UnBHX5Ds8aE4IlJs7Aa3eglXKGDBjgngwAoFK1VYgwsvfz66Nk4/LOv7X++cv2SrCWBPQOYCOAXA1YL+qPiJpWYCYA/FwUNi1riouKH+QAyBUY5zCt+lEVQZcOK2xB7SX0Z+r/IekMdN+p87xPaA6j5wPweD4rcIQAmHRGVQFDCrWxxzsUJgX7uZ8DiMhFHQNDkkYqHpRdMoDmoC4BQAjWFHqWALzSWycROwHlOJZ3fdv65zAEqGVAJID29+4AlvzSUFvrL2Cn9wcWglD2v4JHhQmZMIJwwE7hRetOScKOQ9hed+Iy/a6/P1D8EPht+/2vrtprl+EhOw/8/SHTLxVZmOtgQZ2T4Rg6AFHK9Ha/DD90KKzS3lFEBKBdANpkPp+10EwOCHrlDup1POItwUwuWo2Vxe+TQnM1CvRzRLG862+s/9PFVeoDSLX/9Xq5XMq8gNIDsPcD1HkC28tCytuC9vi/5QLs5KCi9hTrLz4hmIYFLBfk0GJ0BrlS97hvoIGylxT0wN+zARLQUbigCEYAMDzmNig6IUcx+wecQuQHpglgMmesYnE4AAAgAElEQVQwRwAWpPiJATln+z3oFbBRCc3flIfo2XpW03FuwAKSHUI7lwJuDPCx+isSgT6Ad33r+mcvLtfbi8tley1YIoDcDmyagbBJCN4WJMHP/QGo/jv4CzCa8pvmoR38CuQR8CfzAlRVaFBMwCbthnx7v1rQlH4EViCEx+QBwpIiqmrfLRwigHqNVqnLGXgpHntEAArQPZCzYs8RgnAE1a1YYHRVHyoY2xE1McTxeEwWihReBAHMHmM9Le/66+uf2QlgdwBpHkBxAzQfwDiAbTvzpqDa/beBYOsU3L52Dgd25aT8gKsAJJC1TkIgCRcGFMvfs/u0jux+ze2HDUY2NxCSwyAUMJTgQD9DGBluA8KYCRv0NgBjOsdcCIBQbOSjYnzW+xmV77kCre7t7Uc+ro9A384ykx/oOYPY7iuC6C/zrmAW2GW7cQixvPtb1v9+I4AN/DUMKOEAtgOXv9u04ev6Q6JV4fPPiYEDSGW9Bn6XACz7ZiA6AqgABUB3l5VBaEnCFvM64cHmPXq5garCojyo7Lo4loa9WDrhEmaAbxWbCUWrOypu8Rc6BzAmAKXe9vg4UNvVNoBb6vAzCDmXYOkHjzMCOKp1/Hds52fUXrXz+mVj8NpzWdAXp2IJyRPI8u5vXv/b/Y1AFycggBwG2EpAmhvQXhySkoEK/MYNMPjt5/1xZ4Iw4HdhgOoPiJzAWYCYty0Oo1j/mBQqNAfE0LaLlD1W/P45WFnb59m/+t2KaNijc4228etHLkCFDHWZKZURAcg2Yq3u7CBeDAG0GFo3CcXKrkAbAbmQ5B5zmIYe9Aap5Bttw26Ft13e/U3rn94IIKt/TQRe5ETgHgbYqcHmpSEpGQjKf4gQGvh9ApDyAFL1rc1vtr6fK0hrAYwm4QiEYGJuDgIYzDZP4M5hOvjw3D0IHwgRuEMwtPP6fAreKl8QuwDb/BMpPPoF+wvD3klYsKrmInYOXjWZAJSqI9D83/ExMQRRuQGlvscJwKv2TGhQCCFyFuV6l3d/4/m/urhachVgvb7Y8gDpZ8JdMrCSAYQI6dXhSAD5rUGm7JfAjDMFfViACg3g7zqBArPYCZSuQgvIsj26AASbdQMWhna7FC6U/43MPS2H3oKxgk+SwBNyBFEQoMIL3tYTAmcOyu8aiuVZ2SKyQACV+xSRAm87H/+3bzRyB0pNLaGo0MCqtyaA4yDv2/92TruddwrLu//a+b+4vFzqK8G2dwPCJKCwMajOF9hfGVbKgBH4ySGYnEAC4YnyBPsD5+2IDLTiN/W3sbxX/BbF23Ws9WnwAYW4xB/rvQBt3sevmQF4sM1EjsCCK1J/XK6A2tbzWukIRKvyk8IBRxRzdh89Ayu0KttFYNYlPkscTDhepZsXQbseATRW7nYmbf1VeKJDiG3p8u5vWP+z1AmY1Z8SgIUQQP3NlOE0UzD/glAmgqT0ojdAJAQl+I3dz25gL9OBM6jHauCs+Yi6La2LlrvEH1KAJ450VBECZCdg6KDjEDTRKJCiYxl7Bt5CKbmGvN1zJiyI3yCk5wNwoKCIQS+z3kOpdSM7TRDxPvM2PyIDDgdmE30vngAi9dcksLz69et/kjoBKwHUMqAMBUpOoBDFnhRMYUCz+Qr8eRlXBEKVL2AvNXr7uSUfM8irwjYHgI1DKgSwjT3gHNzEINybQgCO7QHwqk6gGnv0dthFOOMSZtQ9Jo/Y7mdYiW4/BFyz6DGJNJDoPe36ppga2Lx+liDG5IDqXc7tY2qr6PF2nlxG8bklBQ/c0frR8dGBLK9+3fqnLi72RqAtAdj6AEwFgPIB0BW4v0249ARI5Qcy6ILflwtLCNDgV7Ypys7uAJenEMLsWxXaVxQcQdTGICQUkSDM3YGxmjO8IzDn7WY6DTnh1/k8Un8J3ADsFnIN6HgOdg0YMtjt/NGOKP/j1R4beR4f/7Nys+L3qwOWYhCQNpR4DPjt9/Nhgj3m8upfXf+jWgW4PN1cqARg7hDMJGHbgrfGocvTzbqcL6z157jfuoINnL2koAO/yBskgJPi5/DBx/cFYAxo+kwVAWv3AeZBV6ElkkJICSx+XQZRt1fgMeqf9pkFf5l+yv4g2t9qrT9PHO8r5ecZf33lx7VouyNC6G2DYENA279bgg5B/kYRQE/de3mBBvRRjiDRTdl+efX/Xf9kKwO2MABDgpoUzGpvXhxSl209AQjyQgCvu0agdeklBZsTqIDhBKEBOQBYKv7WE2BB3iJ4sP3UbahDBp45iOqOHoBBaz+360HIaaCH4UFUVoTlEsBB4lCDXWUBFODt3pEjeIwbUMfywO2FAx7ACuwxAeikGlp+Bu0oHPAJwrm43RJAnNhr1xNvU0hgefX/Pv/7rQzY2oA30LuKABBA7RosyzYXANWA6gYMeBMZaOXHHEGGqKsMCHKAZCAnCS3wMRzIeiwSi2zlW55AATzODRjtF1UDooTAxIeewaQbWbmN+j+xUqCgzWTB23ir75U/dgneXzQV7wGdnUSc2GO3gMlBlSj0gG3XocD8YglgjhyKrvsQokMCy+m0vPpXzv9ucQCp+SfF+xd7nO9j/50URA4gdQjmHxItRLBQebACWiQEAewJdDm+r63C6XMDuX2PgLH8wgnU/VwlwBNDcx42AMAJSirmN2ptyn7aEcR5Axs6FID3t1dv91HUoJf17b7dB5XckE2d11+2ZzDrygD6DFb3Y5b/qBMYuQMGn46v58OBPph7Ci/tP/20GB7d5hUUCaRly6v/1/pvp8lAbS4AzAnYSWBvDirZ/0wAygGcLtar2hMgwc8JQV0ZSMoN/+XPFvwFpna7ppmFMJraNwIpwLahAfcVcB6B5xM4fa7EYwHM+1njr6x/FPfTGYOE4XTsPwoXur8cxKTAtNDWe4AzUBthxJY/VngmCaXidhvrDlCxEcz9+r93GLEbsADUYG5nbvE8hx8xkAvgyx7+GLhv+3t59S+v764OAN4JUBN+OSnYEoDrdf07kcHNcpneFbAnA43659LgDmAEf/D3pu8j8LNTyFl46w4A4KY8yKSRt4O+A4799ecGcBvPxyFBrN4zVQL9HoIoQHixBBA5hjjut/DGnAFSQVluXYIKDRjQ6Dp6YG+hgz1qAUc7zljpfQIwcAPwS0KKELxFt0e2yt1b58kgdhAa/NvS5dW/tL5zJ4C9AuDtfwoF0iSgPFW4/r0t253ARgCZDPYwIKu/dAMYBiDY8z7NqlsXwGEBbseVgLatbx6KQoFY7YMQARKLHtzHk4MGzBPtxZ2aAmX/Izfhge2Jw1t4a+61ytuwQIGeKUJVArzizwLfA5v1P123Vc1GSAxS5xDAelv73/a0JNOz/kgT7ZryxZlf8sVl/m/lIGLgl+++vPp/nr/m4nKbC9A6AQvoMRSA2H8H+77NBnpIAu4/MX5RqgE504+hADoB9/cGmrmQAMnAhAW7gyjqjPkCIAKT+LPgdklEU7yzvQOeMND2H3QCtaphgwMP0RjMeMbHOAALWntmdTwLa64MzIIeodqoJUr6WRhbEjnmBBqxWfi1n+zWBNEHOFt7ZfURphFJoAtQ21uXYH1Gs/498LdAYXn1f1+/quYA9nkA2eLnRqCNGPZXhOV6P/67EwEQQCGENDloy/hDEtAAXocACdi2X4BDAvyM4Hfb1ap7dhKUGEQAa/XHDsQcKphZhFHyEMID0y6MPkH/qnEvTNBGfFbd57bTxMFQL+rJVxSBXqm9Bz7uPU4Etq17wPdOIB95J1xW3raMrXtU/x8BXhOAsu4NkBy7z9j6mW20e9hCgL+4fgX3Aeygh0qAj/8TKezgL6HB1f5Ogevl6nS7TxHegZz/k+DH/oDXIfZvLsCqO24D6l6bgXxSUIcCZd8gPDBqTIlEMwcAzxeDviozzQDU8ftkPiDs/JsDuiYTVvG2lXYA3jNwVsAm9LzCe0VXZOHjdwZ2epOUpQ0mEQ9qH8PPxPkRGaDJ96FFpNL9GP9p6s8OQH3eCOB/W78M3gewzwPY7X1xAqD8Tf2zSygOIOUA9jzCXg68OF+mGLW4gALq2BE0sCdiMOBfXjefffxfgNryBiU5Z1wCTCay7oEVHtXdA72XKDRuIoOeHQaercGMHMJEo4+aV2DBfYwQeqGDygbw9r2wQCm8pRBUdeEQzAxDezSV7POE0LH9zg+o/MAR+++3xSVo0zHUYJWeVXZLFHPALyS1vPt/OX/xNh24qT5MCqLEX4n767/FATQiSI7gct3fF2hDAAX+5gJs/A+A38mghQUq/o9CgbIcY3u/bYGjrxD4/YrSi9wBdBIyQXjAxzmC5iXsX4oongL2tK8nCG34tTtoBKCThR706axuOU0fVvD2YcEoDChA8HYfQedDAQvex9l/RQCjZRa4x9X/GPAL2Szv/gvrF17CZKCdCPYuwNwMlBN+JdY3/17lHEAmghoSXJ5ubQiA4PdEwLH/Dvha+wfwQwXBgZtcA69vVty6iwb7AgZcj9N+W+iwLx20DmuXgKCL7T6v0Uofqfsx1edwIHIBfrmmCmPY3VuJmCjsMWLgM2mosEARgl5mCWAmFLB+Ymz3lVtggPJ5ewQQ7VtgjDmE3jJPEsu7//z6Ba0PwKp/6QYsOYC9VHjZ4n8AfM0HXGy5gDo5KLmApOAF1P7vZNcT0JEMjPLzNnVbtP8cKoC6S4LAPAABHCYZVUC6RGIDNNt8b/sR1n0HoEOEo44g2p4hbz/3CQDWyhmDDOhy7Dngo6NgW2913PoIb/e96nOGAD/j/seXj8jBry/2u8HWJwF76xrEHw/86gDe9efOn3+5vRIsx/yl9FfLgpdpTgDY/jRHAGx//Xy1L98JYLk4XzUXsCkmJgWbC2jgx9i/kIFalgEP1QKv9pwLaKpucwJo/znhV8godgE8qWhEAjo0YKBiLkCBWCn8jOrPbFMsOpCC+4XeiDBmw4CYDKyu+2DBx/rKCaiEIFPEnOr3E34I0ZYz8O7A0ouO/4+ovz4DHreAu/2riCKtXd71P58/73J/KWhpBU4u4GLv7kvJvp0M9lLgen1xlbL/hgQgFNjfMLy7gJwHgERgIgGbHEygKUAvJJHj/qra1h342L4pf10nOgY1UQgSEFOKo3wAgr6XHLTvEMJwowAKAWqP5EOAx5IAgpeOUe26tvYJjt498Na9vIC1+O2IHviPt/x4VKX63i2oJRFBIPgUAWi1j+J5u1wBm4GrfEEM7j4ppLXLu/7H9XN3AoAeAGgKSuqPLiCDvZIAgj/b/0ICpgpgQoEE9Jb4KwDOy43dj8BPicE9LodtYeKQJwx0BFllIUSwoFbOoCizTQaOHIGfhmxpwQLdhwwWfk/IATzyBaIzeQCv7wz04jKU4S8kY6nCAlkpvLf8SCHHQK9AjlBt59JW3G57xBH40KCdAVXdVwdY83ukYH3B8q4/u35OygFk5S9lwKL+l+ACWP0t+Hf7X3IAez/A8voFkkBK7rVQAO1/IQN0CW1ZcgnFLVhAc3/AHAlURYeXitjwgKsCCPbob9VbYG38TG4gQYRTgQz4SQKYnA7M2j6bC7Db+TDAq35s7RVoLbTVpxj8WtubXe9XAGwiz+v9yAEw9C0oj6u/phsL/TngY8CxvPPPnD+LQ4BL6PzbYv+LDejl31zm2x3A1ZLmEOTYH/7dw4DTcr5sgH8v5AFsTqARQ7b+Bey1/s/gz58hRHCkALMJnfWn2YWzwPdhAJOEzRdYGOO2ESnY5TpsUCFDXpbbnCPwegMfL5klABsa9JN9EfRV7O+tfE/TZ+J+b8+tlvdtf0QArMYM7Nj+27i/D28mD+8H2AOMPpcjLu/8H9bPvLg43V5yCACx/5b533MBu+LveYDkGK6WDegpJ1Dsf/p3dwKnPQ/w3toQ1KoBrTKArqApfKkeKOUvio9xP6u+cAHO4rcwAGcSHksS6lAgyhcoQvBaD8oeTC8uDkHBdzv3G0sAKhBQNIAQLleqrL2lhb7510D3ZNEDu03t4ZY6VEAnEG0dq72y62P119bfUsa82isyqATwtf/d+hnJAUAIsMX8HALkEmAigaT6xQHsFYGrbP+3f1siME0PXt4LpUAsCxIRbMqf4/9CFsb2jxxBjfuBHKifQCcCmQwKLLHEGKn9yAX08wSVANyPhRxPBJY9tiFbaOSxZKD3Q3g2+uGl4zxArPk+M9CjBIasNvX9UMCnCvswR+AhlL0XiAAbxfCj2N4Tx0jn9Xr8Bss7/pvzp5cQ4HJ/H8B6vYUALfGHmX/4+2qFECD9vdn+Av6Lq9P2YyO3G/j3+H2P/fPfORfQQN5yAwh8QwI1iVjCBPVvBjK0Dtc8Qg4JIgJQLqDvBmy8H6t+QAD0UlGGu53uOxf/c9YAHcJRIogIwGp9OsOYAHRtYOQHGhBHGt9zBlbB8XoTPBqsLJx1jM+WPqIDPnaDooLxGPqWTB4HfHWM5R1/ev20y4v2PgAs+212fyeDZv139b/cY/715rKEADvwKwnc5XBgCwPu1uX1BR3AeSOBnAisAOfPuXFoW28dAeUIcq5AJwuRIFDJRckwIAd8g5DKE+j16B7y37MvHDVvOEajPyIATx8cHjQIquRhZOv1UcbVAEsJI6BHQUDbr6fhDOkZiD8e9Ec0nwMDa+x7cb2H6tMMf6EjTxzLO/7r9VMvLtb9xR4p+ZdBn2v+W24gx/07Eeyfd/ufbX+J/3MIkEOBXf2Xq9Pd6SJVAgrw939LCXBXavhcS4MW+Coc8O4A8wUJ/E3to8qAXm7dgA0HEPS4XbXy+SfNMNvf4IlAbb0AZl/q0beq3q//67pAWzrnAlitPQkcI4Aj8Lehgf7kLbungFnTr91BPwRQsJ6L9DmbgHCc8wAvTvnLkZav+S/Pn9KqACkPsCl8TvLt4C8uYF9ecwA5BChEUJJ/16e7vay4hQA7AZwvE/ghD3BKFQEJfugXSCAuPQMF4HkZTBJqYA+qBSo34FRfkYFqFS75AiCGmdeO8ctF5LsF0jEb5BD+fRdg10Ylwm2YMaDVZ47ibTBxlADQwHPIwFDVbmDGAfSIIYb0nO3XoD9a2Ovp+kjhR+tH1BDtv3z1f77+vpYETC6gZP0vU8a/qn4lgBQS7HH/5fXe9ZeTgEuy/1en7d9CAFc1D1DUvuQFQP1LjgDzAiZHsIO45BIQ6Br0NvZ/ihtoJGDCAAd6jPXt31bhdTlwPgcQ6XwM+jgc6JOBNfJlW7XUqjwDPgK9zR54kI/MfboiG20rQLfjMJBx6yhXYHW6F/Nj1kDF20xD3gFoGL9R4N/OtnzVf3r+pEQAGfw1CZjBX23/9nmL/5dN3W8urlIOoGT/M/B35c9/329/ny7Peykwlfu2f4vlb9b/XAmhdQgmABfXkPoGPDnYnEADPcwlyOofE0LJDwzCAflGIeEGahMPWvxRJSBS+p4DsG5hZP81CYz9wBwJHCEAFRJo9e4X/Y7bfF8AHIGeCcLCegR4Xh+TQl+/31gC+I/Pv/fyMjf0bBOCNsXfSGDr+tvBX4Cfkn+76m9JQEEAF9e76hcSuN+cwOYOdiDvIE8EUMGdKwPJwvtcQMsbtLZhGxY0oCP4PRH08gN2XZuR2EqDXDmwLb24XQHlUx1Ag7PP7D/dATSFHnsDHQwwLfiynrbyVtNHdl85gEjxLVlYrWUHoFRc5/yZIHpuYBzRR0DuAfyp4I9Ip+YAvvJPrR+/JQG3EuBWAUhJv9P1BvIN/JUIdvXPyn+9EcZ6c7H925J/dxdX6+3+K0OJCHYHsFyttwncRf0TGaDCa1fQHEAUFiRwJHLAvxNAo3wAVwG4q3AEfKwolL8R+E35dSIQAwLc1iq6LQPyOv95PgAoxrln/1UiEN3CDAGMlT4igHnlV87BG+1jBBCB3roB9gIMVAXcX2gCmCGP5Sv+w/PHpclAadbfRgAb6Av4S9y/EwISwN4HcLq9vC5xfwZ/jv8vrncCuC8EUElAOQF0AJAsbG6hgJxDBFxeQI/235JAI4lMHKYleFwe1B2DnCjULsDG+FFI4ElgnNzz2YMetHFdL9VX0oVRTcBSgHIADYjNcVjAItARpEr5C+AiMB8BOULZO4ftGjlXUPIMRTd7ZMDbNmdwhBTamfrhQbR2Bvx7DuDL/+T5d+0hwNLAv2f+r5abqwb668vrZP1r7H992j43B7Bl/wH8ORG4EcBdCQHQCdi/W7cguoGm/MkxDBOEUDFQpcPUkMT9AQr4Nh+gm4RY9TG5x87gMZOEElRnQgCv/rxEx/rj6j9TBNKBdQRWzeesvncA5ZjewjNQLeCRWHhfD2ZPALHVH5OBBvws2EdAHa1XBHBkn+XL/oP1Yy63PoBN+bcQIMf/l9c5BNj+zUSwkcCeF7hOwK8EUMDf/t3Vf3MBy+V6l+L/13L8j7mAMkGo5AZagjAGfysncpkwrhog6DFv0EsANmIYKX+rDkRuICKApvhRvd8TwNPtf3MBbOWbVuttojDAK7tWfQVw3DKpr1LzPgE0SPvtFAGoMAGVWqXvijOYA/yLIIAjQPYZiDnnsHzpv3f+6MuLZZ8MtIcAxf5fn26utr8LAVyXrP96k4ng9iK5gBT7b+C/Xva4v9j/i+vTQ3UAmQBqInB5rWb5k9UvxIAJwaL8UDHA0iF2DKL6Q2ehs/01b9CSf3YbjPHjsKCpc8sZ+OQgAzyO+Y8RgCWB+fg/0nxebj83mjhKAB7wiVgKiNjs4/aWCGLrrxW/ncPb9t46G9vHoB/F/KP1Mxb/MQRwdJ/lS/6d9aNKErCAf7f+1zkEqARQlD8TwfVa4/8M+rvLFPdvBPCQHcBOAOdTAftrOQFYwL65ggL45gJ8GNBCAKwWmJDAgF41D2G2nxOEHBaozyr5p2y/Ajluh8ZeZfs56u/BexT/a+tfQOj13tt6Ze0biO0RME7n+N5+5vxAi7uTA4hCALVOEQC7CAYyGnuv6J4g4m0iIP+iIYAvevf5I65yGXC3/0X5r9brqwz+q5sU/yfrvzmAlvzblf/qtIF/+3e3/fm/jQQeLjIBbCTAoUAjBgR/yf7bngEuFba+gig3gD0CbPuf0jGYiMCHBQXYZT2/G8Am/ljxkQqa/VY5AFxb8gR+WbzEqz3rPdr/eQLwYUDLIKh1s2rP2x0DPOcKUOERpBb0niBOp6U6l55LmCWEN8oB8LWNAoHli951/q0XS+rxb4m/BP6dAKoD2EgAwL+TQLL/l2j9r9f7y+vlYXcBWwhweb47Lyn+T3mAkgsoroCVH/MBLQTA3gFdHeBEoSaA8mahca8AOgZfGozmBDRN7vUCMDkUILPa6wwAg3scAign0JbZTIB3AQ3IqPhWxVm5vUvA7Xt/s/Wfs/gYViiQz4JdbZeOt/8iaP2faLsIgLM5gegcIyDPEIo6xvKFX7v+5hQCbHMA1uvN/l9t9j+DP7mAFPdf7nmA0+3lzVb6yyHA9a7+95vSZ+BvDmAH/+X16dnp6nzbgJ8IIOUBGhFwdcDmBHjeAPcQ2H4BmwhMSi+TgyIXUPoHxlODZ8KBkQOwcbzX+pG9n1H/PvBbwo2Dgaa62u57RVexPapv/DeTwQwBRKFAs/ps41vmwW8zcgW/WAjgaPy/fa/lC776/JtSG/CW9MvgL/Z/cwGb/U9uYLf/V1vdP6t/tv07AewkkP7bgP9wcXN6dnF9erZcvn6TwF7Ab11AcwboBF6rk4dUglA3EcVlQqv2SAqqOjCr/Dr5Z5t/Wj4AI38Ldjb/nAPo2/tY/b3Vt0eyII9UfkwAfJwEMEUIzWm0mNoSg1d7tuYe2O1YDcgN7iqeP7rs7wUBHAXz0e2LG1j++Feuv2F3AJdb0q9Z/+QCNsCfbi5vltuNAPbYf6v97wnATfmXDfBIAA+XN7v6P9vU//Lm9Hy9eO9VUv1GApYQwA3UUMGGBVwh0L0Ctp247wSwAuDnDbQXkPas/wwBoMpzDmDkAFDhEeYW2J4A5lS/ALQHcAtka/85qacdwMjqK7W36t4HfLkmb81HRMFWvUcK7+sE8Fjw7w7g87/s/GEbAWwlv80BXN8k+7//d7PlAHbVT+Df/0vWPxHAupf+LnPcv4F/A/6m/pkAXlqX1y4S4N9TXYAjhL37D/MEcV7gMRWC+XbhXva/vIY8mB0oJgFZE68IwJKASgRqhW8gt+t7qu9j+z7AOd73YYEigQKsFl4UR6Cs/hjsvdg+AnkvBxDnAqyT8ATRcgCjDP9svN8D7hFQH9mW8wDLH/uS84duIcBOADvw1+vrDP5EAgn81QEU9b9Z7i+v1ruLm9P91fWSlX99uLxeduXP/72UgF/An/7d3cCu9vY/mxtIpNAmENFEIpxUVLsEsVyIvz3gW4b5NeN2tmBMBOplIT4hiIafy4I2GIh0vtj1eQKYAb8CcTPhSAjNIbBKN9XluB4BaR0Bxt3Wntt9RiGAjd/fJIB2P2aThI4APvcLX/+Qq8uL2633//pmcwA5D7D/u+4EgODfcgCXN9n236TYf4v5i/pf3qzPLm+WlzYCuLhen51PP5+Bnohg3YFv3UDLDxQnwF2D+DlZfTOrsJJBATo2DuH8gWL92farvoCS6OMfIFEOwHb6aa2PC389sM8RgFJ3tuz9zz4HgGRh1RvJoSm+B7aP72fcwBzIE1mp+F8ve1zcj6HF4x1ApNBHlyuQP0X99xDgj37B+Z/ZZgJuan+9xf03hQh24G9hADiA9XYD/9Vm+wv4N9t/c3q4SjF/Uv/b00YALy2Xr9/toN8AvxQnYN2ATw5ymbCBn+cP6O7BXi4gKbt6bwB3A7b2Xp8HKOt0yQ/7ARG+jyWAfkxvXwLOCh+BfmTnrcqzSs8TQM/2Ixn0/44s/S93Angq+HcC+OzPf/2fvry8uN0SgDebA7jNZLA5gE39b5r9v0rKf3dVwb/eX93sln8jgedXxfrfnl66uj29clpeuzovmwNA8AchgUsS2vkDLUegmoZ8+3CL++EVUykAAAroSURBVDkUwLIgZ/zbJKAxAWjVj+DPZT6l7PGyWOHbPrG954SftfqYsUfgq2y+dQUjy+/t/Tzoe0m8Iwm+IyQRJQY5CXg0B3BU6WeBPbtdLzxYPuvzzv/U5gA2639zs+z/7mHAzbolBHcCKMm/jQCutth/j/vX7d+HTADPrm63uH99fnW7vHx1e9r+eyXZ//KfJ4HdGVTg49++aUj1CpQ3BtlwoCi8bwyypBCVAIvi4zyAErdj/d/W+THhZ0OAluizfqAY//ZvWm8V3y+zQI8dgFZ5TQYc51vwzzkAb917BKCAGW3PDuCXAgG8LyQAdwfwhz/n9X/y+uridkv+3dxuJHC6ubrdqwHbsj0EuLpZNtW/u7peGwHs4F835X92dbs8v9pU/2ZX/pev7k6vXFy/nuN/JADrBhIBaBJoCcG4cxAJoLx5WLYM0wtD5roA2fpz7K8IwCb4uJVHE0ADvFfz7RxK/Ru4LUGwQnMI4IFdYmmO171LaLF128cvs1UAuz5ah8vV30cJAMH1S9kBsGN5TCJw+Yw/cv4ntiagHfy3y04A1zc78HfwX+/gT7H/dVb/6xL3327gT9b/6nZ96fpueWVT/qvb01tOl++5bur/cxnojQwa+I/mBLhV2L9dKH5vQNQEZBN+HOPrz9zO44t43MiLYFXlO2XnRxY/EUSk9t6y2+x+ZPObVe+B3TuDPiG8SQAWokdDgzckCfjpn/n6P745gOub8/XtXQoBbm4365/UPxHAHvfvsf/VzXp/fbs829Q/Kf/6/Pou2f7ru9MrV3ent17drq+cTxvoy38YCvx8Sgru/xVHgJWBLWmI5cFSDrTJQPdCkVwJ4NmC/sUgUcZ/3vIfaemJQK+s/XiZBWzbPlJ2julVjK/jcgR++ZsBrAhg1va/kSHALwYH8CJCgBeSA/i0P3T+x7YGoNu7083t7XJzfbvF/nseYI//r28T+K9vlx38V7fLw/Vu+9dn13fLS9cp4ffy9d36yvX98tbru9PblqvX7hL4fzaDfPt7A74lAp8cTETguwYxIahLghgCqAQgZvltzV/N+ceY36f1UNl1lb/E9Sd6y7+N8dneKzvvFR7t/yzwtaIzyBXAjzqAxxDAiAx+KYYA7zME8Ac/7fV/9Ob24vbm9ny9EcDN3XK7hQBIAJv1v7o93V/fnh6ub9eH6xTzP7++O710fXd6+ebu9Jbr7b/709uu79e3J+AXAkguYN0/RwRAvQKibbg1BJWOQZwp2HthCJf+et1+JRTAWL7pfQ/sNr7nuD599m5AJfSsbbcqbxXcO4A5oCt1j9T8TQIoYc2L7QN4nyGAT/nU8z+yxf27A7jL1YDbXflvr2+T/b/ewL9Z/7vl2fXt6dn13en5zQ7+9eWbu2UD/ltv7k9vu3k4vd9y9Z77jQDWnQTKfxgKIBFgGJAbhUTbsJowZDsES6mPXxdWynyo8tFbfjDJx8k8m85TyTyM1ft/FzKYA3oP5M0dPA34PYv/JgH8EieAT/797/21m/Lf3adE4O3mAG53F7Db/5vbZVP+++u79eHmdrHgv1/ecvNweuvt/entG/hv7s9vP59+5tT+804guQAmgVYitKVBnEWIU4jt68PGrw23qt+SegXY0b/JynNZT8X1aOf93x70bZsE3gjoPZC/SQD9rr+ogagk0zj0+IXsA3ifcQCf+MnnX3N3d0oEcJcSgDe7+q+3O/jvNuu/3t/cnZ7d3C278t/cry/fFvA/rG+/fVje/+756YNOFz97fT79NBHARgg2HIhDgdw1OJwjYF8eqgmgB3rM67eIXgO9WHf+19p6SwocpyfrjqBn8EZgfpMAPMij0l4P0DPrflkSwO/5hPf+6vv75ADu7vdqwM3N3cXdzd2m/uvdzd3ycLOp/93p+e39ksD/sLzl9uH0trtnp7ffPjt9wN2z0wdd3b7n5fPpp06JAJgEOBTQYUBT/1IaxAlBJfmH7xDEST6+xIdKz5F8qfKrd/O0WL84gAJg/JeXqdq8An16tdSbBKB7BHp9ALPAf7MKMN8RsHzc7z7/g/cPp5v73QGsexLw9m7J4D/d394vz27u1me3D8tLt/fry3cPy1vunu3gf7+75+sH3L+0/Irbh9c/4Hz6yVMigB4JRKXBEv+rSUL0GnE38Qd7+5Xql7l6GMe3Rt+WnPMKX1Q9+jft6y08gtv//SYBqJzDTKb/KAEcJYJflg7gYz72vb/y4dmm/psLWG5v7k63t3enu9u7Dfynh9v707O7DfwPp5fvHk5vuX++vu3++fL+98/XD3x4efngh5dPv+p8+vFTIgAmAZUP4N6AKP7HdwTYdwNibb/9BFjSdGXum9pbkFulb3G4BbwHuQJ4H/SFJLZ/33cJYFQJeKP6AGbLgL8YCEDF9rPLODcx0vEX0gfw0b/z/MHPn59ubvcQYFP/9fb2frm/vV/v7+5Pz+6fLS/dPZxevn92esv9S6e3Pzw/vf/Dy6e/79nLp7//+VtO/9B68RNXiQCYBEoYsP0bhQB2fkD78RCeAdisPv/mXwx6m7zzoG5ttiU2t/82m95UHoFs/36TAHRD0Wxr8C8VBzAL9veZJOBH/vb3ftBGAPfPLm/v7k63dw+nu7v70/3tw/pw/3B6fv/s9PLDS8tbH146vf3ZS+sHPH/L8sHPX1l/1ctvW37N6fLHb86nHz2dTz8mCGALBdABYGMQTxDCl4Xa2X42wccqz026kcK3hhwEeQTs2eUYy79JAG8SQNSbP0sKf08cwG/7iPMHJAew3jw8XNzd3Z/v7p8tD/fPTs8fXjq9/Oyl5a3PXz693/NX1g986a3Lr3zlbadf/cr7nf7h08WPXJ9PP3w6n34ECOAnIAwoyUDVC8CTgLi5BxW/NOew1iewl/9KLI9Kj0BWoJ4F+psOIIH7zRDAViQUYGfB/j7jAD78w197+7Pny83Ds+X2/tly9/Cw3j97aXn+7KXl5ecvn976/JX1/V552/IrXnnb+g+89f2XX/u2D/z/2zuXnYSBMAqf0YhAW1pKuQVUVDRqCG5MUBN0oRt3bnwMX8c38EmMD+DGxBgX3qKocUc0mk5NkQk/ZWw1bozMgnBpWJ5zvv8yrbfM0QLHIzieiAH4FED7ACL9xS4APQlI7wxM7+4jOvm9pKejObng+1H9K9ErA/jeslDYOrAygH9oADs7PK3piCU1b1wzWEI3mKYZnmFazDZt5KwMypkcqtki6pbzuuTiFhz34HgIGIBIf5r8YtxHEz+I+PLmXb/YP0VOXwK/xW/0e9Rn2XUZzkcRgioBoqlA9QB69ESben+GALa231O67sV0YyRupJA00yMpy2a27aDg5FHJl7xaucKaca1V4LiEi5uuAfgEQPGf1vy0xqcNPXnCy0QcJvZgyn8n9RUBKAKQbQaGj/56kqVPBgqKVzZujBL7nzGAZrOtpczYuGmxhGUzw8myTK6IUmkSi5Uqa05Mt7c4TsFxAY4ruLjr4r8vfj/1hfBF2gu8F3W8OIwzmOJRqR5mDIoABpeJxHz9N++qBKCiHwIDaKy+JWx7LO5kPb1QhDM1g9mFGttYWfP2OY7BcQKOc3Bcd7Df7XT9/VpfHPWlgo8WeVD0UUkvS3tFAIPjyN+Inv5XGcCQGUC9/hwrlQ1tbn602FjH5u7eywHHIVwcgeOsi/v+jN9v6vn1O+AG6vEwUf/kWjDVFQGEpzwdPSoD6J9UfIX2wWWiYS8BPgCAPOYxoDrtqQAAAABJRU5ErkJggg==", e
|
|
}(),
|
|
yr = function() {
|
|
function e(t) {
|
|
this._isEnabled = !1, this.isEnabled = !1, this.intensity = 1, this.roughness = 0, this._indiceOfRefraction = e._DefaultIndiceOfRefraction, this.indiceOfRefraction = e._DefaultIndiceOfRefraction, this._texture = null, this.texture = null, this._bumpTexture = null, this.bumpTexture = null, this._isTintEnabled = !1, this.isTintEnabled = !1, this.tintColor = o.e.White(), this.tintColorAtDistance = 1, this.tintThickness = 1, this._tintTexture = null, this.tintTexture = null, this._internalMarkAllSubMeshesAsTexturesDirty = t
|
|
}
|
|
return e.prototype._markAllSubMeshesAsTexturesDirty = function() {
|
|
this._internalMarkAllSubMeshesAsTexturesDirty()
|
|
}, e.prototype.isReadyForSubMesh = function(e, t, i, n) {
|
|
if (e._areTexturesDirty && t.texturesEnabled) {
|
|
if (this._texture && or.a.ClearCoatTextureEnabled && !this._texture.isReadyOrNotBlocking()) return !1;
|
|
if (i.getCaps().standardDerivatives && this._bumpTexture && or.a.ClearCoatBumpTextureEnabled && !n && !this._bumpTexture.isReady()) return !1;
|
|
if (this._isTintEnabled && this._tintTexture && or.a.ClearCoatTintTextureEnabled && !this._tintTexture.isReadyOrNotBlocking()) return !1
|
|
}
|
|
return !0
|
|
}, e.prototype.prepareDefines = function(t, i) {
|
|
this._isEnabled ? (t.CLEARCOAT = !0, t._areTexturesDirty && i.texturesEnabled && (this._texture && or.a.ClearCoatTextureEnabled ? ir.a.PrepareDefinesForMergedUV(this._texture, t, "CLEARCOAT_TEXTURE") : t.CLEARCOAT_TEXTURE = !1, this._bumpTexture && or.a.ClearCoatBumpTextureEnabled ? ir.a.PrepareDefinesForMergedUV(this._bumpTexture, t, "CLEARCOAT_BUMP") : t.CLEARCOAT_BUMP = !1, t.CLEARCOAT_DEFAULTIOR = this._indiceOfRefraction === e._DefaultIndiceOfRefraction, this._isTintEnabled ? (t.CLEARCOAT_TINT = !0, this._tintTexture && or.a.ClearCoatTintTextureEnabled ? ir.a.PrepareDefinesForMergedUV(this._tintTexture, t, "CLEARCOAT_TINT_TEXTURE") : t.CLEARCOAT_TINT_TEXTURE = !1) : (t.CLEARCOAT_TINT = !1, t.CLEARCOAT_TINT_TEXTURE = !1))) : (t.CLEARCOAT = !1, t.CLEARCOAT_TEXTURE = !1, t.CLEARCOAT_BUMP = !1, t.CLEARCOAT_TINT = !1, t.CLEARCOAT_TINT_TEXTURE = !1)
|
|
}, e.prototype.bindForSubMesh = function(e, t, i, n, r, o, s) {
|
|
if (!e.useUbo || !r || !e.isSync) {
|
|
this._texture && or.a.ClearCoatTextureEnabled && (e.updateFloat2("vClearCoatInfos", this._texture.coordinatesIndex, this._texture.level), ir.a.BindTextureMatrix(this._texture, e, "clearCoat")), this._bumpTexture && i.getCaps().standardDerivatives && or.a.ClearCoatTextureEnabled && !n && (e.updateFloat2("vClearCoatBumpInfos", this._bumpTexture.coordinatesIndex, this._bumpTexture.level), ir.a.BindTextureMatrix(this._bumpTexture, e, "clearCoatBump"), t._mirroredCameraPosition ? e.updateFloat2("vClearCoatTangentSpaceParams", o ? 1 : -1, s ? 1 : -1) : e.updateFloat2("vClearCoatTangentSpaceParams", o ? -1 : 1, s ? -1 : 1)), this._tintTexture && or.a.ClearCoatTintTextureEnabled && (e.updateFloat2("vClearCoatTintInfos", this._tintTexture.coordinatesIndex, this._tintTexture.level), ir.a.BindTextureMatrix(this._tintTexture, e, "clearCoatTint")), e.updateFloat2("vClearCoatParams", this.intensity, this.roughness);
|
|
var a = 1 - this._indiceOfRefraction,
|
|
c = 1 + this._indiceOfRefraction,
|
|
l = Math.pow(-a / c, 2),
|
|
u = 1 / this._indiceOfRefraction;
|
|
e.updateFloat4("vClearCoatRefractionParams", l, u, a, c), this._isTintEnabled && (e.updateFloat4("vClearCoatTintParams", this.tintColor.r, this.tintColor.g, this.tintColor.b, Math.max(1e-5, this.tintThickness)), e.updateFloat("clearCoatColorAtDistance", Math.max(1e-5, this.tintColorAtDistance)))
|
|
}
|
|
t.texturesEnabled && (this._texture && or.a.ClearCoatTextureEnabled && e.setTexture("clearCoatSampler", this._texture), this._bumpTexture && i.getCaps().standardDerivatives && or.a.ClearCoatBumpTextureEnabled && !n && e.setTexture("clearCoatBumpSampler", this._bumpTexture), this._isTintEnabled && this._tintTexture && or.a.ClearCoatTintTextureEnabled && e.setTexture("clearCoatTintSampler", this._tintTexture))
|
|
}, e.prototype.hasTexture = function(e) {
|
|
return this._texture === e || (this._bumpTexture === e || this._tintTexture === e)
|
|
}, e.prototype.getActiveTextures = function(e) {
|
|
this._texture && e.push(this._texture), this._bumpTexture && e.push(this._bumpTexture), this._tintTexture && e.push(this._tintTexture)
|
|
}, e.prototype.getAnimatables = function(e) {
|
|
this._texture && this._texture.animations && this._texture.animations.length > 0 && e.push(this._texture), this._bumpTexture && this._bumpTexture.animations && this._bumpTexture.animations.length > 0 && e.push(this._bumpTexture), this._tintTexture && this._tintTexture.animations && this._tintTexture.animations.length > 0 && e.push(this._tintTexture)
|
|
}, e.prototype.dispose = function(e) {
|
|
e && (this._texture && this._texture.dispose(), this._bumpTexture && this._bumpTexture.dispose(), this._tintTexture && this._tintTexture.dispose())
|
|
}, e.prototype.getClassName = function() {
|
|
return "PBRClearCoatConfiguration"
|
|
}, e.AddFallbacks = function(e, t, i) {
|
|
return e.CLEARCOAT_BUMP && t.addFallback(i++, "CLEARCOAT_BUMP"), e.CLEARCOAT_TINT && t.addFallback(i++, "CLEARCOAT_TINT"), e.CLEARCOAT && t.addFallback(i++, "CLEARCOAT"), i
|
|
}, e.AddUniforms = function(e) {
|
|
e.push("vClearCoatTangentSpaceParams", "vClearCoatParams", "vClearCoatRefractionParams", "vClearCoatTintParams", "clearCoatColorAtDistance", "clearCoatMatrix", "clearCoatBumpMatrix", "clearCoatTintMatrix", "vClearCoatInfos", "vClearCoatBumpInfos", "vClearCoatTintInfos")
|
|
}, e.AddSamplers = function(e) {
|
|
e.push("clearCoatSampler", "clearCoatBumpSampler", "clearCoatTintSampler")
|
|
}, e.PrepareUniformBuffer = function(e) {
|
|
e.addUniform("vClearCoatParams", 2), e.addUniform("vClearCoatRefractionParams", 4), e.addUniform("vClearCoatInfos", 2), e.addUniform("clearCoatMatrix", 16), e.addUniform("vClearCoatBumpInfos", 2), e.addUniform("vClearCoatTangentSpaceParams", 2), e.addUniform("clearCoatBumpMatrix", 16), e.addUniform("vClearCoatTintParams", 4), e.addUniform("clearCoatColorAtDistance", 1), e.addUniform("vClearCoatTintInfos", 2), e.addUniform("clearCoatTintMatrix", 16)
|
|
}, e.prototype.copyTo = function(e) {
|
|
L.a.Clone(function() {
|
|
return e
|
|
}, this)
|
|
}, e.prototype.serialize = function() {
|
|
return L.a.Serialize(this)
|
|
}, e.prototype.parse = function(e) {
|
|
var t = this;
|
|
L.a.Parse(function() {
|
|
return t
|
|
}, e, null)
|
|
}, e._DefaultIndiceOfRefraction = 1.5, l.c([Object(L.c)()], e.prototype, "_isEnabled", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "isEnabled", void 0), l.c([Object(L.c)()], e.prototype, "intensity", void 0), l.c([Object(L.c)()], e.prototype, "roughness", void 0), l.c([Object(L.c)()], e.prototype, "_indiceOfRefraction", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "indiceOfRefraction", void 0), l.c([Object(L.m)()], e.prototype, "_texture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "texture", void 0), l.c([Object(L.m)()], e.prototype, "_bumpTexture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "bumpTexture", void 0), l.c([Object(L.c)()], e.prototype, "_isTintEnabled", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "isTintEnabled", void 0), l.c([Object(L.e)()], e.prototype, "tintColor", void 0), l.c([Object(L.c)()], e.prototype, "tintColorAtDistance", void 0), l.c([Object(L.c)()], e.prototype, "tintThickness", void 0), l.c([Object(L.m)()], e.prototype, "_tintTexture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "tintTexture", void 0), e
|
|
}(),
|
|
br = function() {
|
|
function e(e) {
|
|
this._isEnabled = !1, this.isEnabled = !1, this.intensity = 1, this.direction = new o.w(1, 0), this._texture = null, this.texture = null, this._internalMarkAllSubMeshesAsTexturesDirty = e
|
|
}
|
|
return e.prototype._markAllSubMeshesAsTexturesDirty = function() {
|
|
this._internalMarkAllSubMeshesAsTexturesDirty()
|
|
}, e.prototype.isReadyForSubMesh = function(e, t) {
|
|
return !(e._areTexturesDirty && t.texturesEnabled && this._texture && or.a.AnisotropicTextureEnabled && !this._texture.isReadyOrNotBlocking())
|
|
}, e.prototype.prepareDefines = function(e, t, i) {
|
|
this._isEnabled ? (e.ANISOTROPIC = this._isEnabled, this._isEnabled && !t.isVerticesDataPresent(Oi.b.TangentKind) && (e._needUVs = !0, e.MAINUV1 = !0), e._areTexturesDirty && i.texturesEnabled && (this._texture && or.a.AnisotropicTextureEnabled ? ir.a.PrepareDefinesForMergedUV(this._texture, e, "ANISOTROPIC_TEXTURE") : e.ANISOTROPIC_TEXTURE = !1)) : (e.ANISOTROPIC = !1, e.ANISOTROPIC_TEXTURE = !1)
|
|
}, e.prototype.bindForSubMesh = function(e, t, i) {
|
|
e.useUbo && i && e.isSync || (this._texture && or.a.AnisotropicTextureEnabled && (e.updateFloat2("vAnisotropyInfos", this._texture.coordinatesIndex, this._texture.level), ir.a.BindTextureMatrix(this._texture, e, "anisotropy")), e.updateFloat3("vAnisotropy", this.direction.x, this.direction.y, this.intensity)), t.texturesEnabled && this._texture && or.a.AnisotropicTextureEnabled && e.setTexture("anisotropySampler", this._texture)
|
|
}, e.prototype.hasTexture = function(e) {
|
|
return this._texture === e
|
|
}, e.prototype.getActiveTextures = function(e) {
|
|
this._texture && e.push(this._texture)
|
|
}, e.prototype.getAnimatables = function(e) {
|
|
this._texture && this._texture.animations && this._texture.animations.length > 0 && e.push(this._texture)
|
|
}, e.prototype.dispose = function(e) {
|
|
e && this._texture && this._texture.dispose()
|
|
}, e.prototype.getClassName = function() {
|
|
return "PBRAnisotropicConfiguration"
|
|
}, e.AddFallbacks = function(e, t, i) {
|
|
return e.ANISOTROPIC && t.addFallback(i++, "ANISOTROPIC"), i
|
|
}, e.AddUniforms = function(e) {
|
|
e.push("vAnisotropy", "vAnisotropyInfos", "anisotropyMatrix")
|
|
}, e.PrepareUniformBuffer = function(e) {
|
|
e.addUniform("vAnisotropy", 3), e.addUniform("vAnisotropyInfos", 2), e.addUniform("anisotropyMatrix", 16)
|
|
}, e.AddSamplers = function(e) {
|
|
e.push("anisotropySampler")
|
|
}, e.prototype.copyTo = function(e) {
|
|
L.a.Clone(function() {
|
|
return e
|
|
}, this)
|
|
}, e.prototype.serialize = function() {
|
|
return L.a.Serialize(this)
|
|
}, e.prototype.parse = function(e) {
|
|
var t = this;
|
|
L.a.Parse(function() {
|
|
return t
|
|
}, e, null)
|
|
}, l.c([Object(L.c)()], e.prototype, "_isEnabled", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "isEnabled", void 0), l.c([Object(L.c)()], e.prototype, "intensity", void 0), l.c([Object(L.n)()], e.prototype, "direction", void 0), l.c([Object(L.m)()], e.prototype, "_texture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "texture", void 0), e
|
|
}(),
|
|
Tr = function() {
|
|
function e(t) {
|
|
this._useEnergyConservation = e.DEFAULT_USE_ENERGY_CONSERVATION, this.useEnergyConservation = e.DEFAULT_USE_ENERGY_CONSERVATION, this._useSmithVisibilityHeightCorrelated = e.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED, this.useSmithVisibilityHeightCorrelated = e.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED, this._useSphericalHarmonics = e.DEFAULT_USE_SPHERICAL_HARMONICS, this.useSphericalHarmonics = e.DEFAULT_USE_SPHERICAL_HARMONICS, this._internalMarkAllSubMeshesAsMiscDirty = t
|
|
}
|
|
return e.prototype._markAllSubMeshesAsMiscDirty = function() {
|
|
this._internalMarkAllSubMeshesAsMiscDirty()
|
|
}, e.prototype.prepareDefines = function(e) {
|
|
e.BRDF_V_HEIGHT_CORRELATED = this._useSmithVisibilityHeightCorrelated, e.MS_BRDF_ENERGY_CONSERVATION = this._useEnergyConservation && this._useSmithVisibilityHeightCorrelated, e.SPHERICAL_HARMONICS = this._useSphericalHarmonics
|
|
}, e.prototype.getClassName = function() {
|
|
return "PBRBRDFConfiguration"
|
|
}, e.prototype.copyTo = function(e) {
|
|
L.a.Clone(function() {
|
|
return e
|
|
}, this)
|
|
}, e.prototype.serialize = function() {
|
|
return L.a.Serialize(this)
|
|
}, e.prototype.parse = function(e) {
|
|
var t = this;
|
|
L.a.Parse(function() {
|
|
return t
|
|
}, e, null)
|
|
}, e.DEFAULT_USE_ENERGY_CONSERVATION = !0, e.DEFAULT_USE_SMITH_VISIBILITY_HEIGHT_CORRELATED = !0, e.DEFAULT_USE_SPHERICAL_HARMONICS = !0, l.c([Object(L.c)()], e.prototype, "_useEnergyConservation", void 0), l.c([Object(L.b)("_markAllSubMeshesAsMiscDirty")], e.prototype, "useEnergyConservation", void 0), l.c([Object(L.c)()], e.prototype, "_useSmithVisibilityHeightCorrelated", void 0), l.c([Object(L.b)("_markAllSubMeshesAsMiscDirty")], e.prototype, "useSmithVisibilityHeightCorrelated", void 0), l.c([Object(L.c)()], e.prototype, "_useSphericalHarmonics", void 0), l.c([Object(L.b)("_markAllSubMeshesAsMiscDirty")], e.prototype, "useSphericalHarmonics", void 0), e
|
|
}(),
|
|
Er = function() {
|
|
function e(e) {
|
|
this._isEnabled = !1, this.isEnabled = !1, this._linkSheenWithAlbedo = !1, this.linkSheenWithAlbedo = !1, this.intensity = 1, this.color = o.e.White(), this._texture = null, this.texture = null, this._internalMarkAllSubMeshesAsTexturesDirty = e
|
|
}
|
|
return e.prototype._markAllSubMeshesAsTexturesDirty = function() {
|
|
this._internalMarkAllSubMeshesAsTexturesDirty()
|
|
}, e.prototype.isReadyForSubMesh = function(e, t) {
|
|
return !(e._areTexturesDirty && t.texturesEnabled && this._texture && or.a.SheenTextureEnabled && !this._texture.isReadyOrNotBlocking())
|
|
}, e.prototype.prepareDefines = function(e, t) {
|
|
this._isEnabled ? (e.SHEEN = this._isEnabled, e.SHEEN_LINKWITHALBEDO = this._linkSheenWithAlbedo, e._areTexturesDirty && t.texturesEnabled && (this._texture && or.a.SheenTextureEnabled ? ir.a.PrepareDefinesForMergedUV(this._texture, e, "SHEEN_TEXTURE") : e.SHEEN_TEXTURE = !1)) : (e.SHEEN = !1, e.SHEEN_TEXTURE = !1, e.SHEEN_LINKWITHALBEDO = !1)
|
|
}, e.prototype.bindForSubMesh = function(e, t, i) {
|
|
e.useUbo && i && e.isSync || (this._texture && or.a.SheenTextureEnabled && (e.updateFloat2("vSheenInfos", this._texture.coordinatesIndex, this._texture.level), ir.a.BindTextureMatrix(this._texture, e, "sheen")), e.updateFloat4("vSheenColor", this.color.r, this.color.g, this.color.b, this.intensity)), t.texturesEnabled && this._texture && or.a.SheenTextureEnabled && e.setTexture("sheenSampler", this._texture)
|
|
}, e.prototype.hasTexture = function(e) {
|
|
return this._texture === e
|
|
}, e.prototype.getActiveTextures = function(e) {
|
|
this._texture && e.push(this._texture)
|
|
}, e.prototype.getAnimatables = function(e) {
|
|
this._texture && this._texture.animations && this._texture.animations.length > 0 && e.push(this._texture)
|
|
}, e.prototype.dispose = function(e) {
|
|
e && this._texture && this._texture.dispose()
|
|
}, e.prototype.getClassName = function() {
|
|
return "PBRSheenConfiguration"
|
|
}, e.AddFallbacks = function(e, t, i) {
|
|
return e.SHEEN && t.addFallback(i++, "SHEEN"), i
|
|
}, e.AddUniforms = function(e) {
|
|
e.push("vSheenColor", "vSheenInfos", "sheenMatrix")
|
|
}, e.PrepareUniformBuffer = function(e) {
|
|
e.addUniform("vSheenColor", 4), e.addUniform("vSheenInfos", 2), e.addUniform("sheenMatrix", 16)
|
|
}, e.AddSamplers = function(e) {
|
|
e.push("sheenSampler")
|
|
}, e.prototype.copyTo = function(e) {
|
|
L.a.Clone(function() {
|
|
return e
|
|
}, this)
|
|
}, e.prototype.serialize = function() {
|
|
return L.a.Serialize(this)
|
|
}, e.prototype.parse = function(e) {
|
|
var t = this;
|
|
L.a.Parse(function() {
|
|
return t
|
|
}, e, null)
|
|
}, l.c([Object(L.c)()], e.prototype, "_isEnabled", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "isEnabled", void 0), l.c([Object(L.c)()], e.prototype, "_linkSheenWithAlbedo", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "linkSheenWithAlbedo", void 0), l.c([Object(L.c)()], e.prototype, "intensity", void 0), l.c([Object(L.e)()], e.prototype, "color", void 0), l.c([Object(L.m)()], e.prototype, "_texture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "texture", void 0), e
|
|
}(),
|
|
Ar = function() {
|
|
function e(e) {
|
|
this._isRefractionEnabled = !1, this.isRefractionEnabled = !1, this._isTranslucencyEnabled = !1, this.isTranslucencyEnabled = !1, this._isScatteringEnabled = !1, this.refractionIntensity = 1, this.translucencyIntensity = 1, this.scatteringIntensity = 1, this._thicknessTexture = null, this.thicknessTexture = null, this._refractionTexture = null, this.refractionTexture = null, this._indexOfRefraction = 1, this.indexOfRefraction = 1, this._invertRefractionY = !1, this.invertRefractionY = !1, this._linkRefractionWithTransparency = !1, this.linkRefractionWithTransparency = !1, this.minimumThickness = 0, this.maximumThickness = 1, this.tintColor = o.e.White(), this.tintColorAtDistance = 1, this.diffusionDistance = o.e.White(), this._useMaskFromThicknessTexture = !1, this.useMaskFromThicknessTexture = !1, this._internalMarkAllSubMeshesAsTexturesDirty = e
|
|
}
|
|
return e.prototype._markAllSubMeshesAsTexturesDirty = function() {
|
|
this._internalMarkAllSubMeshesAsTexturesDirty()
|
|
}, e.prototype.isReadyForSubMesh = function(e, t) {
|
|
if (e._areTexturesDirty && t.texturesEnabled) {
|
|
if (this._thicknessTexture && or.a.ThicknessTextureEnabled && !this._thicknessTexture.isReadyOrNotBlocking()) return !1;
|
|
var i = this._getRefractionTexture(t);
|
|
if (i && or.a.RefractionTextureEnabled && !i.isReadyOrNotBlocking()) return !1
|
|
}
|
|
return !0
|
|
}, e.prototype.prepareDefines = function(e, t) {
|
|
if (e._areTexturesDirty && (e.SUBSURFACE = !1, e.SS_TRANSLUCENCY = this._isTranslucencyEnabled, e.SS_SCATERRING = this._isScatteringEnabled, e.SS_THICKNESSANDMASK_TEXTURE = !1, e.SS_MASK_FROM_THICKNESS_TEXTURE = !1, e.SS_REFRACTION = !1, e.SS_REFRACTIONMAP_3D = !1, e.SS_GAMMAREFRACTION = !1, e.SS_RGBDREFRACTION = !1, e.SS_REFRACTIONMAP_OPPOSITEZ = !1, e.SS_LODINREFRACTIONALPHA = !1, e.SS_LINKREFRACTIONTOTRANSPARENCY = !1, (this._isRefractionEnabled || this._isTranslucencyEnabled || this._isScatteringEnabled) && (e.SUBSURFACE = !0, e._areTexturesDirty && t.texturesEnabled && this._thicknessTexture && or.a.ThicknessTextureEnabled && ir.a.PrepareDefinesForMergedUV(this._thicknessTexture, e, "SS_THICKNESSANDMASK_TEXTURE"), e.SS_MASK_FROM_THICKNESS_TEXTURE = this._useMaskFromThicknessTexture), this._isRefractionEnabled && t.texturesEnabled)) {
|
|
var i = this._getRefractionTexture(t);
|
|
i && or.a.RefractionTextureEnabled && (e.SS_REFRACTION = !0, e.SS_REFRACTIONMAP_3D = i.isCube, e.SS_GAMMAREFRACTION = i.gammaSpace, e.SS_RGBDREFRACTION = i.isRGBD, e.SS_REFRACTIONMAP_OPPOSITEZ = i.invertZ, e.SS_LODINREFRACTIONALPHA = i.lodLevelInAlpha, e.SS_LINKREFRACTIONTOTRANSPARENCY = this._linkRefractionWithTransparency)
|
|
}
|
|
}, e.prototype.bindForSubMesh = function(e, t, i, n, r) {
|
|
var o = this._getRefractionTexture(t);
|
|
if (!e.useUbo || !n || !e.isSync) {
|
|
if (this._thicknessTexture && or.a.ThicknessTextureEnabled && (e.updateFloat2("vThicknessInfos", this._thicknessTexture.coordinatesIndex, this._thicknessTexture.level), ir.a.BindTextureMatrix(this._thicknessTexture, e, "thickness")), e.updateFloat2("vThicknessParam", this.minimumThickness, this.maximumThickness - this.minimumThickness), o && or.a.RefractionTextureEnabled) {
|
|
e.updateMatrix("refractionMatrix", o.getReflectionTextureMatrix());
|
|
var s = 1;
|
|
o.isCube || o.depth && (s = o.depth), e.updateFloat4("vRefractionInfos", o.level, 1 / this._indexOfRefraction, s, this._invertRefractionY ? -1 : 1), e.updateFloat3("vRefractionMicrosurfaceInfos", o.getSize().width, o.lodGenerationScale, o.lodGenerationOffset)
|
|
}
|
|
e.updateColor3("vDiffusionDistance", this.diffusionDistance), e.updateFloat4("vTintColor", this.tintColor.r, this.tintColor.g, this.tintColor.b, this.tintColorAtDistance), e.updateFloat3("vSubSurfaceIntensity", this.refractionIntensity, this.translucencyIntensity, this.scatteringIntensity)
|
|
}
|
|
t.texturesEnabled && (this._thicknessTexture && or.a.ThicknessTextureEnabled && e.setTexture("thicknessSampler", this._thicknessTexture), o && or.a.RefractionTextureEnabled && (r ? e.setTexture("refractionSampler", o) : (e.setTexture("refractionSampler", o._lodTextureMid || o), e.setTexture("refractionSamplerLow", o._lodTextureLow || o), e.setTexture("refractionSamplerHigh", o._lodTextureHigh || o))))
|
|
}, e.prototype.unbind = function(e) {
|
|
return !(!this._refractionTexture || !this._refractionTexture.isRenderTarget) && (e.setTexture("refractionSampler", null), !0)
|
|
}, e.prototype._getRefractionTexture = function(e) {
|
|
return this._refractionTexture ? this._refractionTexture : this._isRefractionEnabled ? e.environmentTexture : null
|
|
}, Object.defineProperty(e.prototype, "disableAlphaBlending", {
|
|
get: function() {
|
|
return this.isRefractionEnabled && this._linkRefractionWithTransparency
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.fillRenderTargetTextures = function(e) {
|
|
or.a.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget && e.push(this._refractionTexture)
|
|
}, e.prototype.hasTexture = function(e) {
|
|
return this._thicknessTexture === e || this._refractionTexture === e
|
|
}, e.prototype.hasRenderTargetTextures = function() {
|
|
return !!(or.a.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget)
|
|
}, e.prototype.getActiveTextures = function(e) {
|
|
this._thicknessTexture && e.push(this._thicknessTexture), this._refractionTexture && e.push(this._refractionTexture)
|
|
}, e.prototype.getAnimatables = function(e) {
|
|
this._thicknessTexture && this._thicknessTexture.animations && this._thicknessTexture.animations.length > 0 && e.push(this._thicknessTexture), this._refractionTexture && this._refractionTexture.animations && this._refractionTexture.animations.length > 0 && e.push(this._refractionTexture)
|
|
}, e.prototype.dispose = function(e) {
|
|
e && (this._thicknessTexture && this._thicknessTexture.dispose(), this._refractionTexture && this._refractionTexture.dispose())
|
|
}, e.prototype.getClassName = function() {
|
|
return "PBRSubSurfaceConfiguration"
|
|
}, e.AddFallbacks = function(e, t, i) {
|
|
return e.SS_SCATERRING && t.addFallback(i++, "SS_SCATERRING"), e.SS_TRANSLUCENCY && t.addFallback(i++, "SS_TRANSLUCENCY"), i
|
|
}, e.AddUniforms = function(e) {
|
|
e.push("vDiffusionDistance", "vTintColor", "vSubSurfaceIntensity", "vRefractionMicrosurfaceInfos", "vRefractionInfos", "vThicknessInfos", "vThicknessParam", "refractionMatrix", "thicknessMatrix")
|
|
}, e.AddSamplers = function(e) {
|
|
e.push("thicknessSampler", "refractionSampler", "refractionSamplerLow", "refractionSamplerHigh")
|
|
}, e.PrepareUniformBuffer = function(e) {
|
|
e.addUniform("vRefractionMicrosurfaceInfos", 3), e.addUniform("vRefractionInfos", 4), e.addUniform("refractionMatrix", 16), e.addUniform("vThicknessInfos", 2), e.addUniform("thicknessMatrix", 16), e.addUniform("vThicknessParam", 2), e.addUniform("vDiffusionDistance", 3), e.addUniform("vTintColor", 4), e.addUniform("vSubSurfaceIntensity", 3)
|
|
}, e.prototype.copyTo = function(e) {
|
|
L.a.Clone(function() {
|
|
return e
|
|
}, this)
|
|
}, e.prototype.serialize = function() {
|
|
return L.a.Serialize(this)
|
|
}, e.prototype.parse = function(e) {
|
|
var t = this;
|
|
L.a.Parse(function() {
|
|
return t
|
|
}, e, null)
|
|
}, l.c([Object(L.c)()], e.prototype, "_isRefractionEnabled", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "isRefractionEnabled", void 0), l.c([Object(L.c)()], e.prototype, "_isTranslucencyEnabled", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "isTranslucencyEnabled", void 0), l.c([Object(L.c)()], e.prototype, "_isScatteringEnabled", void 0), l.c([Object(L.c)()], e.prototype, "refractionIntensity", void 0), l.c([Object(L.c)()], e.prototype, "translucencyIntensity", void 0), l.c([Object(L.c)()], e.prototype, "scatteringIntensity", void 0), l.c([Object(L.m)()], e.prototype, "_thicknessTexture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "thicknessTexture", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "refractionTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "indexOfRefraction", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "invertRefractionY", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "linkRefractionWithTransparency", void 0), l.c([Object(L.c)()], e.prototype, "minimumThickness", void 0), l.c([Object(L.c)()], e.prototype, "maximumThickness", void 0), l.c([Object(L.e)()], e.prototype, "tintColor", void 0), l.c([Object(L.c)()], e.prototype, "tintColorAtDistance", void 0), l.c([Object(L.e)()], e.prototype, "diffusionDistance", void 0), l.c([Object(L.c)()], e.prototype, "_useMaskFromThicknessTexture", void 0), l.c([Object(L.b)("_markAllSubMeshesAsTexturesDirty")], e.prototype, "useMaskFromThicknessTexture", void 0), e
|
|
}(),
|
|
xr = "uniform vec3 vReflectionColor;\nuniform vec4 vAlbedoColor;\n\nuniform vec4 vLightingIntensity;\nuniform vec4 vReflectivityColor;\nuniform vec3 vEmissiveColor;\nuniform float visibility;\n\n#ifdef ALBEDO\nuniform vec2 vAlbedoInfos;\n#endif\n#ifdef AMBIENT\nuniform vec4 vAmbientInfos;\n#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\nuniform vec2 vTangentSpaceParams;\n#endif\n#ifdef OPACITY\nuniform vec2 vOpacityInfos;\n#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\n#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\n#endif\n#ifdef REFLECTIVITY\nuniform vec3 vReflectivityInfos;\n#endif\n#ifdef MICROSURFACEMAP\nuniform vec2 vMicroSurfaceSamplerInfos;\n#endif\n\n#if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(SS_REFRACTION)\nuniform mat4 view;\n#endif\n\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionMicrosurfaceInfos;\n#if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)\nuniform vec3 vReflectionPosition;\nuniform vec3 vReflectionSize;\n#endif\n#endif\n\n#ifdef CLEARCOAT\nuniform vec2 vClearCoatParams;\nuniform vec4 vClearCoatRefractionParams;\n#ifdef CLEARCOAT_TEXTURE\nuniform vec2 vClearCoatInfos;\nuniform mat4 clearCoatMatrix;\n#endif\n#ifdef CLEARCOAT_BUMP\nuniform vec2 vClearCoatBumpInfos;\nuniform vec2 vClearCoatTangentSpaceParams;\nuniform mat4 clearCoatBumpMatrix;\n#endif\n#ifdef CLEARCOAT_TINT\nuniform vec4 vClearCoatTintParams;\nuniform float clearCoatColorAtDistance;\n#ifdef CLEARCOAT_TINT_TEXTURE\nuniform vec2 vClearCoatTintInfos;\nuniform mat4 clearCoatTintMatrix;\n#endif\n#endif\n#endif\n\n#ifdef ANISOTROPIC\nuniform vec3 vAnisotropy;\n#ifdef ANISOTROPIC_TEXTURE\nuniform vec2 vAnisotropyInfos;\nuniform mat4 anisotropyMatrix;\n#endif\n#endif\n\n#ifdef SHEEN\nuniform vec4 vSheenColor;\n#ifdef SHEEN_TEXTURE\nuniform vec2 vSheenInfos;\nuniform mat4 sheenMatrix;\n#endif\n#endif\n\n#ifdef SUBSURFACE\n#ifdef SS_REFRACTION\nuniform vec3 vRefractionMicrosurfaceInfos;\nuniform vec4 vRefractionInfos;\nuniform mat4 refractionMatrix;\n#endif\n#ifdef SS_THICKNESSANDMASK_TEXTURE\nuniform vec2 vThicknessInfos;\nuniform mat4 thicknessMatrix;;\n#endif\nuniform vec2 vThicknessParam;\nuniform vec3 vDiffusionDistance;\nuniform vec4 vTintColor;\nuniform vec3 vSubSurfaceIntensity;\n#endif";
|
|
zt.a.IncludesShadersStore.pbrFragmentDeclaration = xr;
|
|
var Rr = "layout(std140,column_major) uniform;\nuniform Material\n{\nuniform vec2 vAlbedoInfos;\nuniform vec4 vAmbientInfos;\nuniform vec2 vOpacityInfos;\nuniform vec2 vEmissiveInfos;\nuniform vec2 vLightmapInfos;\nuniform vec3 vReflectivityInfos;\nuniform vec2 vMicroSurfaceSamplerInfos;\nuniform vec2 vReflectionInfos;\nuniform vec3 vReflectionPosition;\nuniform vec3 vReflectionSize;\nuniform vec3 vBumpInfos;\nuniform mat4 albedoMatrix;\nuniform mat4 ambientMatrix;\nuniform mat4 opacityMatrix;\nuniform mat4 emissiveMatrix;\nuniform mat4 lightmapMatrix;\nuniform mat4 reflectivityMatrix;\nuniform mat4 microSurfaceSamplerMatrix;\nuniform mat4 bumpMatrix;\nuniform vec2 vTangentSpaceParams;\nuniform mat4 reflectionMatrix;\nuniform vec3 vReflectionColor;\nuniform vec4 vAlbedoColor;\nuniform vec4 vLightingIntensity;\nuniform vec3 vReflectionMicrosurfaceInfos;\nuniform float pointSize;\nuniform vec4 vReflectivityColor;\nuniform vec3 vEmissiveColor;\nuniform float visibility;\nuniform vec2 vClearCoatParams;\nuniform vec4 vClearCoatRefractionParams;\nuniform vec2 vClearCoatInfos;\nuniform mat4 clearCoatMatrix;\nuniform vec2 vClearCoatBumpInfos;\nuniform vec2 vClearCoatTangentSpaceParams;\nuniform mat4 clearCoatBumpMatrix;\nuniform vec4 vClearCoatTintParams;\nuniform float clearCoatColorAtDistance;\nuniform vec2 vClearCoatTintInfos;\nuniform mat4 clearCoatTintMatrix;\nuniform vec3 vAnisotropy;\nuniform vec2 vAnisotropyInfos;\nuniform mat4 anisotropyMatrix;\nuniform vec4 vSheenColor;\nuniform vec2 vSheenInfos;\nuniform mat4 sheenMatrix;\nuniform vec3 vRefractionMicrosurfaceInfos;\nuniform vec4 vRefractionInfos;\nuniform mat4 refractionMatrix;\nuniform vec2 vThicknessInfos;\nuniform mat4 thicknessMatrix;\nuniform vec2 vThicknessParam;\nuniform vec3 vDiffusionDistance;\nuniform vec4 vTintColor;\nuniform vec3 vSubSurfaceIntensity;\n};\nuniform Scene {\nmat4 viewProjection;\n#ifdef MULTIVIEW\nmat4 viewProjectionR;\n#endif\nmat4 view;\n};";
|
|
zt.a.IncludesShadersStore.pbrUboDeclaration = Rr;
|
|
var Pr = "uniform vec4 vEyePosition;\nuniform vec3 vAmbientColor;\nuniform vec4 vCameraInfos;\n\nvarying vec3 vPositionW;\n#if DEBUGMODE>0\nuniform vec2 vDebugMode;\nvarying vec4 vClipSpacePosition;\n#endif\n#ifdef MAINUV1\nvarying vec2 vMainUV1;\n#endif\n#ifdef MAINUV2\nvarying vec2 vMainUV2;\n#endif\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\nvarying vec3 vEnvironmentIrradiance;\n#endif\n#endif\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif";
|
|
zt.a.IncludesShadersStore.pbrFragmentExtraDeclaration = Pr;
|
|
var Sr = "#ifdef ALBEDO\n#if ALBEDODIRECTUV == 1\n#define vAlbedoUV vMainUV1\n#elif ALBEDODIRECTUV == 2\n#define vAlbedoUV vMainUV2\n#else\nvarying vec2 vAlbedoUV;\n#endif\nuniform sampler2D albedoSampler;\n#endif\n#ifdef AMBIENT\n#if AMBIENTDIRECTUV == 1\n#define vAmbientUV vMainUV1\n#elif AMBIENTDIRECTUV == 2\n#define vAmbientUV vMainUV2\n#else\nvarying vec2 vAmbientUV;\n#endif\nuniform sampler2D ambientSampler;\n#endif\n#ifdef OPACITY\n#if OPACITYDIRECTUV == 1\n#define vOpacityUV vMainUV1\n#elif OPACITYDIRECTUV == 2\n#define vOpacityUV vMainUV2\n#else\nvarying vec2 vOpacityUV;\n#endif\nuniform sampler2D opacitySampler;\n#endif\n#ifdef EMISSIVE\n#if EMISSIVEDIRECTUV == 1\n#define vEmissiveUV vMainUV1\n#elif EMISSIVEDIRECTUV == 2\n#define vEmissiveUV vMainUV2\n#else\nvarying vec2 vEmissiveUV;\n#endif\nuniform sampler2D emissiveSampler;\n#endif\n#ifdef LIGHTMAP\n#if LIGHTMAPDIRECTUV == 1\n#define vLightmapUV vMainUV1\n#elif LIGHTMAPDIRECTUV == 2\n#define vLightmapUV vMainUV2\n#else\nvarying vec2 vLightmapUV;\n#endif\nuniform sampler2D lightmapSampler;\n#endif\n#ifdef REFLECTIVITY\n#if REFLECTIVITYDIRECTUV == 1\n#define vReflectivityUV vMainUV1\n#elif REFLECTIVITYDIRECTUV == 2\n#define vReflectivityUV vMainUV2\n#else\nvarying vec2 vReflectivityUV;\n#endif\nuniform sampler2D reflectivitySampler;\n#endif\n#ifdef MICROSURFACEMAP\n#if MICROSURFACEMAPDIRECTUV == 1\n#define vMicroSurfaceSamplerUV vMainUV1\n#elif MICROSURFACEMAPDIRECTUV == 2\n#define vMicroSurfaceSamplerUV vMainUV2\n#else\nvarying vec2 vMicroSurfaceSamplerUV;\n#endif\nuniform sampler2D microSurfaceSampler;\n#endif\n#ifdef CLEARCOAT\n#ifdef CLEARCOAT_TEXTURE\n#if CLEARCOAT_TEXTUREDIRECTUV == 1\n#define vClearCoatUV vMainUV1\n#elif CLEARCOAT_TEXTUREDIRECTUV == 2\n#define vClearCoatUV vMainUV2\n#else\nvarying vec2 vClearCoatUV;\n#endif\nuniform sampler2D clearCoatSampler;\n#endif\n#ifdef CLEARCOAT_BUMP\n#if CLEARCOAT_BUMPDIRECTUV == 1\n#define vClearCoatBumpUV vMainUV1\n#elif CLEARCOAT_BUMPDIRECTUV == 2\n#define vClearCoatBumpUV vMainUV2\n#else\nvarying vec2 vClearCoatBumpUV;\n#endif\nuniform sampler2D clearCoatBumpSampler;\n#endif\n#ifdef CLEARCOAT_TINT_TEXTURE\n#if CLEARCOAT_TINT_TEXTUREDIRECTUV == 1\n#define vClearCoatTintUV vMainUV1\n#elif CLEARCOAT_TINT_TEXTUREDIRECTUV == 2\n#define vClearCoatTintUV vMainUV2\n#else\nvarying vec2 vClearCoatTintUV;\n#endif\nuniform sampler2D clearCoatTintSampler;\n#endif\n#endif\n#ifdef SHEEN\n#ifdef SHEEN_TEXTURE\n#if SHEEN_TEXTUREDIRECTUV == 1\n#define vSheenUV vMainUV1\n#elif SHEEN_TEXTUREDIRECTUV == 2\n#define vSheenUV vMainUV2\n#else\nvarying vec2 vSheenUV;\n#endif\nuniform sampler2D sheenSampler;\n#endif\n#endif\n#ifdef ANISOTROPIC\n#ifdef ANISOTROPIC_TEXTURE\n#if ANISOTROPIC_TEXTUREDIRECTUV == 1\n#define vAnisotropyUV vMainUV1\n#elif ANISOTROPIC_TEXTUREDIRECTUV == 2\n#define vAnisotropyUV vMainUV2\n#else\nvarying vec2 vAnisotropyUV;\n#endif\nuniform sampler2D anisotropySampler;\n#endif\n#endif\n\n#ifdef REFLECTION\n#ifdef REFLECTIONMAP_3D\n#define sampleReflection(s,c) textureCube(s,c)\nuniform samplerCube reflectionSampler;\n#ifdef LODBASEDMICROSFURACE\n#define sampleReflectionLod(s,c,l) textureCubeLodEXT(s,c,l)\n#else\nuniform samplerCube reflectionSamplerLow;\nuniform samplerCube reflectionSamplerHigh;\n#endif\n#else\n#define sampleReflection(s,c) texture2D(s,c)\nuniform sampler2D reflectionSampler;\n#ifdef LODBASEDMICROSFURACE\n#define sampleReflectionLod(s,c,l) texture2DLodEXT(s,c,l)\n#else\nuniform samplerCube reflectionSamplerLow;\nuniform samplerCube reflectionSamplerHigh;\n#endif\n#endif\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#else\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#endif\n#endif\n#ifdef ENVIRONMENTBRDF\nuniform sampler2D environmentBrdfSampler;\n#endif\n\n#ifdef SUBSURFACE\n#ifdef SS_REFRACTION\n#ifdef SS_REFRACTIONMAP_3D\n#define sampleRefraction(s,c) textureCube(s,c)\nuniform samplerCube refractionSampler;\n#ifdef LODBASEDMICROSFURACE\n#define sampleRefractionLod(s,c,l) textureCubeLodEXT(s,c,l)\n#else\nuniform samplerCube refractionSamplerLow;\nuniform samplerCube refractionSamplerHigh;\n#endif\n#else\n#define sampleRefraction(s,c) texture2D(s,c)\nuniform sampler2D refractionSampler;\n#ifdef LODBASEDMICROSFURACE\n#define sampleRefractionLod(s,c,l) texture2DLodEXT(s,c,l)\n#else\nuniform samplerCube refractionSamplerLow;\nuniform samplerCube refractionSamplerHigh;\n#endif\n#endif\n#endif\n#ifdef SS_THICKNESSANDMASK_TEXTURE\n#if SS_THICKNESSANDMASK_TEXTUREDIRECTUV == 1\n#define vThicknessUV vMainUV1\n#elif SS_THICKNESSANDMASK_TEXTUREDIRECTUV == 2\n#define vThicknessUV vMainUV2\n#else\nvarying vec2 vThicknessUV;\n#endif\nuniform sampler2D thicknessSampler;\n#endif\n#endif";
|
|
zt.a.IncludesShadersStore.pbrFragmentSamplersDeclaration = Sr;
|
|
i(88);
|
|
var Cr = "\n#define RECIPROCAL_PI2 0.15915494\n#define RECIPROCAL_PI 0.31830988618\n\n#define MINIMUMVARIANCE 0.0005\nfloat convertRoughnessToAverageSlope(float roughness)\n{\n\nreturn square(roughness)+MINIMUMVARIANCE;\n}\nfloat fresnelGrazingReflectance(float reflectance0) {\n\n\nfloat reflectance90=saturate(reflectance0*25.0);\nreturn reflectance90;\n}\nvec2 getAARoughnessFactors(vec3 normalVector) {\n#ifdef SPECULARAA\nvec3 nDfdx=dFdx(normalVector.xyz);\nvec3 nDfdy=dFdy(normalVector.xyz);\nfloat slopeSquare=max(dot(nDfdx,nDfdx),dot(nDfdy,nDfdy));\n\nfloat geometricRoughnessFactor=pow(saturate(slopeSquare),0.333);\n\nfloat geometricAlphaGFactor=sqrt(slopeSquare);\n\ngeometricAlphaGFactor*=0.75;\nreturn vec2(geometricRoughnessFactor,geometricAlphaGFactor);\n#else\nreturn vec2(0.);\n#endif\n}\n#ifdef ANISOTROPIC\n\n\nvec2 getAnisotropicRoughness(float alphaG,float anisotropy) {\nfloat alphaT=max(alphaG*(1.0+anisotropy),MINIMUMVARIANCE);\nfloat alphaB=max(alphaG*(1.0-anisotropy),MINIMUMVARIANCE);\nreturn vec2(alphaT,alphaB);\n}\n\n\nvec3 getAnisotropicBentNormals(const vec3 T,const vec3 B,const vec3 N,const vec3 V,float anisotropy) {\nvec3 anisotropicFrameDirection=anisotropy>=0.0 ? B : T;\nvec3 anisotropicFrameTangent=cross(normalize(anisotropicFrameDirection),V);\nvec3 anisotropicFrameNormal=cross(anisotropicFrameTangent,anisotropicFrameDirection);\nvec3 anisotropicNormal=normalize(mix(N,anisotropicFrameNormal,abs(anisotropy)));\nreturn anisotropicNormal;\n\n}\n#endif\n#if defined(CLEARCOAT) || defined(SS_REFRACTION)\n\n\n\nvec3 cocaLambert(vec3 alpha,float distance) {\nreturn exp(-alpha*distance);\n}\n\nvec3 cocaLambert(float NdotVRefract,float NdotLRefract,vec3 alpha,float thickness) {\nreturn cocaLambert(alpha,(thickness*((NdotLRefract+NdotVRefract)/(NdotLRefract*NdotVRefract))));\n}\n\nvec3 computeColorAtDistanceInMedia(vec3 color,float distance) {\nreturn -log(color)/distance;\n}\nvec3 computeClearCoatAbsorption(float NdotVRefract,float NdotLRefract,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {\nvec3 clearCoatAbsorption=mix(vec3(1.0),\ncocaLambert(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness),\nclearCoatIntensity);\nreturn clearCoatAbsorption;\n}\n#endif\n\n\n\n\n#ifdef MICROSURFACEAUTOMATIC\nfloat computeDefaultMicroSurface(float microSurface,vec3 reflectivityColor)\n{\nconst float kReflectivityNoAlphaWorkflow_SmoothnessMax=0.95;\nfloat reflectivityLuminance=getLuminance(reflectivityColor);\nfloat reflectivityLuma=sqrt(reflectivityLuminance);\nmicroSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;\nreturn microSurface;\n}\n#endif";
|
|
zt.a.IncludesShadersStore.pbrHelperFunctions = Cr;
|
|
var Mr = "#ifdef USESPHERICALFROMREFLECTIONMAP\n#ifdef SPHERICAL_HARMONICS\nuniform vec3 vSphericalL00;\nuniform vec3 vSphericalL1_1;\nuniform vec3 vSphericalL10;\nuniform vec3 vSphericalL11;\nuniform vec3 vSphericalL2_2;\nuniform vec3 vSphericalL2_1;\nuniform vec3 vSphericalL20;\nuniform vec3 vSphericalL21;\nuniform vec3 vSphericalL22;\n\n\n\n\n\n\n\nvec3 computeEnvironmentIrradiance(vec3 normal) {\nreturn vSphericalL00\n+vSphericalL1_1*(normal.y)\n+vSphericalL10*(normal.z)\n+vSphericalL11*(normal.x)\n+vSphericalL2_2*(normal.y*normal.x)\n+vSphericalL2_1*(normal.y*normal.z)\n+vSphericalL20*((3.0*normal.z*normal.z)-1.0)\n+vSphericalL21*(normal.z*normal.x)\n+vSphericalL22*(normal.x*normal.x-(normal.y*normal.y));\n}\n#else\nuniform vec3 vSphericalX;\nuniform vec3 vSphericalY;\nuniform vec3 vSphericalZ;\nuniform vec3 vSphericalXX_ZZ;\nuniform vec3 vSphericalYY_ZZ;\nuniform vec3 vSphericalZZ;\nuniform vec3 vSphericalXY;\nuniform vec3 vSphericalYZ;\nuniform vec3 vSphericalZX;\n\nvec3 computeEnvironmentIrradiance(vec3 normal) {\n\n\n\n\n\n\n\n\n\nfloat Nx=normal.x;\nfloat Ny=normal.y;\nfloat Nz=normal.z;\nvec3 C1=vSphericalZZ.rgb;\nvec3 Cx=vSphericalX.rgb;\nvec3 Cy=vSphericalY.rgb;\nvec3 Cz=vSphericalZ.rgb;\nvec3 Cxx_zz=vSphericalXX_ZZ.rgb;\nvec3 Cyy_zz=vSphericalYY_ZZ.rgb;\nvec3 Cxy=vSphericalXY.rgb;\nvec3 Cyz=vSphericalYZ.rgb;\nvec3 Czx=vSphericalZX.rgb;\nvec3 a1=Cyy_zz*Ny+Cy;\nvec3 a2=Cyz*Nz+a1;\nvec3 b1=Czx*Nz+Cx;\nvec3 b2=Cxy*Ny+b1;\nvec3 b3=Cxx_zz*Nx+b2;\nvec3 t1=Cz*Nz+C1;\nvec3 t2=a2*Ny+t1;\nvec3 t3=b3*Nx+t2;\nreturn t3;\n}\n#endif\n#endif";
|
|
zt.a.IncludesShadersStore.harmonicsFunctions = Mr;
|
|
var Or = "\nstruct preLightingInfo\n{\n\nvec3 lightOffset;\nfloat lightDistanceSquared;\nfloat lightDistance;\n\nfloat attenuation;\n\nvec3 L;\nvec3 H;\nfloat NdotV;\nfloat NdotLUnclamped;\nfloat NdotL;\nfloat VdotH;\nfloat roughness;\n};\npreLightingInfo computePointAndSpotPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {\npreLightingInfo result;\n\nresult.lightOffset=lightData.xyz-vPositionW;\nresult.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);\n\nresult.lightDistance=sqrt(result.lightDistanceSquared);\n\nresult.L=normalize(result.lightOffset);\nresult.H=normalize(V+result.L);\nresult.VdotH=saturate(dot(V,result.H));\nresult.NdotLUnclamped=dot(N,result.L);\nresult.NdotL=saturateEps(result.NdotLUnclamped);\nreturn result;\n}\npreLightingInfo computeDirectionalPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {\npreLightingInfo result;\n\nresult.lightDistance=length(-lightData.xyz);\n\nresult.L=normalize(-lightData.xyz);\nresult.H=normalize(V+result.L);\nresult.VdotH=saturate(dot(V,result.H));\nresult.NdotLUnclamped=dot(N,result.L);\nresult.NdotL=saturateEps(result.NdotLUnclamped);\nreturn result;\n}\npreLightingInfo computeHemisphericPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {\npreLightingInfo result;\n\n\nresult.NdotL=dot(N,lightData.xyz)*0.5+0.5;\nresult.NdotL=saturateEps(result.NdotL);\nresult.NdotLUnclamped=result.NdotL;\n#ifdef SPECULARTERM\nresult.L=normalize(lightData.xyz);\nresult.H=normalize(V+result.L);\nresult.VdotH=saturate(dot(V,result.H));\n#endif\nreturn result;\n}";
|
|
zt.a.IncludesShadersStore.pbrDirectLightingSetupFunctions = Or;
|
|
var Ir = "float computeDistanceLightFalloff_Standard(vec3 lightOffset,float range)\n{\nreturn max(0.,1.0-length(lightOffset)/range);\n}\nfloat computeDistanceLightFalloff_Physical(float lightDistanceSquared)\n{\nreturn 1.0/maxEps(lightDistanceSquared);\n}\nfloat computeDistanceLightFalloff_GLTF(float lightDistanceSquared,float inverseSquaredRange)\n{\nfloat lightDistanceFalloff=1.0/maxEps(lightDistanceSquared);\nfloat factor=lightDistanceSquared*inverseSquaredRange;\nfloat attenuation=saturate(1.0-factor*factor);\nattenuation*=attenuation;\n\nlightDistanceFalloff*=attenuation;\nreturn lightDistanceFalloff;\n}\nfloat computeDistanceLightFalloff(vec3 lightOffset,float lightDistanceSquared,float range,float inverseSquaredRange)\n{\n#ifdef USEPHYSICALLIGHTFALLOFF\nreturn computeDistanceLightFalloff_Physical(lightDistanceSquared);\n#elif defined(USEGLTFLIGHTFALLOFF)\nreturn computeDistanceLightFalloff_GLTF(lightDistanceSquared,inverseSquaredRange);\n#else\nreturn computeDistanceLightFalloff_Standard(lightOffset,range);\n#endif\n}\nfloat computeDirectionalLightFalloff_Standard(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent)\n{\nfloat falloff=0.0;\nfloat cosAngle=maxEps(dot(-lightDirection,directionToLightCenterW));\nif (cosAngle>=cosHalfAngle)\n{\nfalloff=max(0.,pow(cosAngle,exponent));\n}\nreturn falloff;\n}\nfloat computeDirectionalLightFalloff_Physical(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle)\n{\nconst float kMinusLog2ConeAngleIntensityRatio=6.64385618977;\n\n\n\n\n\nfloat concentrationKappa=kMinusLog2ConeAngleIntensityRatio/(1.0-cosHalfAngle);\n\n\nvec4 lightDirectionSpreadSG=vec4(-lightDirection*concentrationKappa,-concentrationKappa);\nfloat falloff=exp2(dot(vec4(directionToLightCenterW,1.0),lightDirectionSpreadSG));\nreturn falloff;\n}\nfloat computeDirectionalLightFalloff_GLTF(vec3 lightDirection,vec3 directionToLightCenterW,float lightAngleScale,float lightAngleOffset)\n{\n\n\n\nfloat cd=dot(-lightDirection,directionToLightCenterW);\nfloat falloff=saturate(cd*lightAngleScale+lightAngleOffset);\n\nfalloff*=falloff;\nreturn falloff;\n}\nfloat computeDirectionalLightFalloff(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent,float lightAngleScale,float lightAngleOffset)\n{\n#ifdef USEPHYSICALLIGHTFALLOFF\nreturn computeDirectionalLightFalloff_Physical(lightDirection,directionToLightCenterW,cosHalfAngle);\n#elif defined(USEGLTFLIGHTFALLOFF)\nreturn computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenterW,lightAngleScale,lightAngleOffset);\n#else\nreturn computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent);\n#endif\n}";
|
|
zt.a.IncludesShadersStore.pbrDirectLightingFalloffFunctions = Ir;
|
|
var Dr = "\n#define FRESNEL_MAXIMUM_ON_ROUGH 0.25\n\n\n\n\n#ifdef MS_BRDF_ENERGY_CONSERVATION\n\n\nvec3 getEnergyConservationFactor(const vec3 specularEnvironmentR0,const vec3 environmentBrdf) {\nreturn 1.0+specularEnvironmentR0*(1.0/environmentBrdf.y-1.0);\n}\n#endif\n#ifdef ENVIRONMENTBRDF\nvec3 getBRDFLookup(float NdotV,float perceptualRoughness,sampler2D brdfSampler) {\n\nvec2 UV=vec2(NdotV,perceptualRoughness);\n\nvec4 brdfLookup=texture2D(brdfSampler,UV);\n#ifdef ENVIRONMENTBRDF_RGBD\nbrdfLookup.rgb=fromRGBD(brdfLookup.rgba);\n#endif\nreturn brdfLookup.rgb;\n}\nvec3 getReflectanceFromBRDFLookup(const vec3 specularEnvironmentR0,const vec3 environmentBrdf) {\n#ifdef BRDF_V_HEIGHT_CORRELATED\nvec3 reflectance=mix(environmentBrdf.xxx,environmentBrdf.yyy,specularEnvironmentR0);\n#else\nvec3 reflectance=specularEnvironmentR0*environmentBrdf.x+environmentBrdf.y;\n#endif\nreturn reflectance;\n}\n#endif\n#if !defined(ENVIRONMENTBRDF) || defined(REFLECTIONMAP_SKYBOX) || defined(ALPHAFRESNEL)\nvec3 getReflectanceFromAnalyticalBRDFLookup_Jones(float VdotN,vec3 reflectance0,vec3 reflectance90,float smoothness)\n{\n\nfloat weight=mix(FRESNEL_MAXIMUM_ON_ROUGH,1.0,smoothness);\nreturn reflectance0+weight*(reflectance90-reflectance0)*pow5(saturate(1.0-VdotN));\n}\n#endif\n#if defined(SHEEN) && defined(REFLECTION)\n\nvec3 getSheenReflectanceFromBRDFLookup(const vec3 reflectance0,const vec3 environmentBrdf) {\nvec3 sheenEnvironmentReflectance=reflectance0*environmentBrdf.b;\nreturn sheenEnvironmentReflectance;\n}\n#endif\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvec3 fresnelSchlickGGX(float VdotH,vec3 reflectance0,vec3 reflectance90)\n{\nreturn reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);\n}\nfloat fresnelSchlickGGX(float VdotH,float reflectance0,float reflectance90)\n{\nreturn reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);\n}\n#ifdef CLEARCOAT\n\n\n\n\n\nvec3 getR0RemappedForClearCoat(vec3 f0) {\n#ifdef CLEARCOAT_DEFAULTIOR\n#ifdef MOBILE\nreturn saturate(f0*(f0*0.526868+0.529324)-0.0482256);\n#else\nreturn saturate(f0*(f0*(0.941892-0.263008*f0)+0.346479)-0.0285998);\n#endif\n#else\nvec3 s=sqrt(f0);\nvec3 t=(vClearCoatRefractionParams.z+vClearCoatRefractionParams.w*s)/(vClearCoatRefractionParams.w+vClearCoatRefractionParams.z*s);\nreturn t*t;\n#endif\n}\n#endif\n\n\n\n\n\n\nfloat normalDistributionFunction_TrowbridgeReitzGGX(float NdotH,float alphaG)\n{\n\n\n\nfloat a2=square(alphaG);\nfloat d=NdotH*NdotH*(a2-1.0)+1.0;\nreturn a2/(PI*d*d);\n}\n#ifdef SHEEN\n\nfloat normalDistributionFunction_CharlieSheen(float NdotH,float alphaG)\n{\nfloat invR=1./alphaG;\nfloat cos2h=NdotH*NdotH;\nfloat sin2h=1.-cos2h;\nreturn (2.+invR)*pow(sin2h,invR*.5)/(2.*PI);\n}\n#endif\n#ifdef ANISOTROPIC\n\n\nfloat normalDistributionFunction_BurleyGGX_Anisotropic(float NdotH,float TdotH,float BdotH,const vec2 alphaTB) {\nfloat a2=alphaTB.x*alphaTB.y;\nvec3 v=vec3(alphaTB.y*TdotH,alphaTB.x*BdotH,a2*NdotH);\nfloat v2=dot(v,v);\nfloat w2=a2/v2;\nreturn a2*w2*w2*RECIPROCAL_PI;\n}\n#endif\n\n\n\n\n#ifdef BRDF_V_HEIGHT_CORRELATED\n\n\n\nfloat smithVisibility_GGXCorrelated(float NdotL,float NdotV,float alphaG) {\n#ifdef MOBILE\n\nfloat GGXV=NdotL*(NdotV*(1.0-alphaG)+alphaG);\nfloat GGXL=NdotV*(NdotL*(1.0-alphaG)+alphaG);\nreturn 0.5/(GGXV+GGXL);\n#else\nfloat a2=alphaG*alphaG;\nfloat GGXV=NdotL*sqrt(NdotV*(NdotV-a2*NdotV)+a2);\nfloat GGXL=NdotV*sqrt(NdotL*(NdotL-a2*NdotL)+a2);\nreturn 0.5/(GGXV+GGXL);\n#endif\n}\n#else\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfloat smithVisibilityG1_TrowbridgeReitzGGXFast(float dot,float alphaG)\n{\n#ifdef MOBILE\n\nreturn 1.0/(dot+alphaG+(1.0-alphaG)*dot ));\n#else\nfloat alphaSquared=alphaG*alphaG;\nreturn 1.0/(dot+sqrt(alphaSquared+(1.0-alphaSquared)*dot*dot));\n#endif\n}\nfloat smithVisibility_TrowbridgeReitzGGXFast(float NdotL,float NdotV,float alphaG)\n{\nfloat visibility=smithVisibilityG1_TrowbridgeReitzGGXFast(NdotL,alphaG)*smithVisibilityG1_TrowbridgeReitzGGXFast(NdotV,alphaG);\n\nreturn visibility;\n}\n#endif\n#ifdef ANISOTROPIC\n\n\nfloat smithVisibility_GGXCorrelated_Anisotropic(float NdotL,float NdotV,float TdotV,float BdotV,float TdotL,float BdotL,const vec2 alphaTB) {\nfloat lambdaV=NdotL*length(vec3(alphaTB.x*TdotV,alphaTB.y*BdotV,NdotV));\nfloat lambdaL=NdotV*length(vec3(alphaTB.x*TdotL,alphaTB.y*BdotL,NdotL));\nfloat v=0.5/(lambdaV+lambdaL);\nreturn v;\n}\n#endif\n#ifdef CLEARCOAT\nfloat visibility_Kelemen(float VdotH) {\n\n\n\nreturn 0.25/(VdotH*VdotH);\n}\n#endif\n#ifdef SHEEN\n\n\n\nfloat visibility_Ashikhmin(float NdotL,float NdotV)\n{\nreturn 1./(4.*(NdotL+NdotV-NdotL*NdotV));\n}\n#endif\n\n\n\n\n\n\n\nfloat diffuseBRDF_Burley(float NdotL,float NdotV,float VdotH,float roughness) {\n\n\nfloat diffuseFresnelNV=pow5(saturateEps(1.0-NdotL));\nfloat diffuseFresnelNL=pow5(saturateEps(1.0-NdotV));\nfloat diffuseFresnel90=0.5+2.0*VdotH*VdotH*roughness;\nfloat fresnel =\n(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNL) *\n(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNV);\nreturn fresnel/PI;\n}\n#ifdef SS_TRANSLUCENCY\n\n\nvec3 transmittanceBRDF_Burley(const vec3 tintColor,const vec3 diffusionDistance,float thickness) {\nvec3 S=1./maxEps(diffusionDistance);\nvec3 temp=exp((-0.333333333*thickness)*S);\nreturn tintColor.rgb*0.25*(temp*temp*temp+3.0*temp);\n}\n\n\nfloat computeWrappedDiffuseNdotL(float NdotL,float w) {\nfloat t=1.0+w;\nfloat invt2=1.0/square(t);\nreturn saturate((NdotL+w)*invt2);\n}\n#endif\n";
|
|
zt.a.IncludesShadersStore.pbrBRDFFunctions = Dr;
|
|
var Lr = "#define CLEARCOATREFLECTANCE90 1.0\n\nstruct lightingInfo\n{\nvec3 diffuse;\n#ifdef SPECULARTERM\nvec3 specular;\n#endif\n#ifdef CLEARCOAT\n\n\nvec4 clearCoat;\n#endif\n#ifdef SHEEN\nvec3 sheen;\n#endif\n};\n\nfloat adjustRoughnessFromLightProperties(float roughness,float lightRadius,float lightDistance) {\n#if defined(USEPHYSICALLIGHTFALLOFF) || defined(USEGLTFLIGHTFALLOFF)\n\nfloat lightRoughness=lightRadius/lightDistance;\n\nfloat totalRoughness=saturate(lightRoughness+roughness);\nreturn totalRoughness;\n#else\nreturn roughness;\n#endif\n}\nvec3 computeHemisphericDiffuseLighting(preLightingInfo info,vec3 lightColor,vec3 groundColor) {\nreturn mix(groundColor,lightColor,info.NdotL);\n}\nvec3 computeDiffuseLighting(preLightingInfo info,vec3 lightColor) {\nfloat diffuseTerm=diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness);\nreturn diffuseTerm*info.attenuation*info.NdotL*lightColor;\n}\nvec3 computeProjectionTextureDiffuseLighting(sampler2D projectionLightSampler,mat4 textureProjectionMatrix){\nvec4 strq=textureProjectionMatrix*vec4(vPositionW,1.0);\nstrq/=strq.w;\nvec3 textureColor=texture2D(projectionLightSampler,strq.xy).rgb;\nreturn toLinearSpace(textureColor);\n}\n#ifdef SS_TRANSLUCENCY\nvec3 computeDiffuseAndTransmittedLighting(preLightingInfo info,vec3 lightColor,vec3 transmittance) {\nfloat NdotL=absEps(info.NdotLUnclamped);\n\nfloat wrapNdotL=computeWrappedDiffuseNdotL(NdotL,0.02);\n\nfloat trAdapt=step(0.,info.NdotLUnclamped);\nvec3 transmittanceNdotL=mix(transmittance*wrapNdotL,vec3(wrapNdotL),trAdapt);\nfloat diffuseTerm=diffuseBRDF_Burley(NdotL,info.NdotV,info.VdotH,info.roughness);\nreturn diffuseTerm*transmittanceNdotL*info.attenuation*lightColor;\n}\n#endif\n#ifdef SPECULARTERM\nvec3 computeSpecularLighting(preLightingInfo info,vec3 N,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {\nfloat NdotH=saturateEps(dot(N,info.H));\nfloat roughness=max(info.roughness,geometricRoughnessFactor);\nfloat alphaG=convertRoughnessToAverageSlope(roughness);\nvec3 fresnel=fresnelSchlickGGX(info.VdotH,reflectance0,reflectance90);\nfloat distribution=normalDistributionFunction_TrowbridgeReitzGGX(NdotH,alphaG);\n#ifdef BRDF_V_HEIGHT_CORRELATED\nfloat visibility=smithVisibility_GGXCorrelated(info.NdotL,info.NdotV,alphaG);\n#else\nfloat visibility=smithVisibility_TrowbridgeReitzGGXFast(info.NdotL,info.NdotV,alphaG);\n#endif\nvec3 specTerm=fresnel*distribution*visibility;\nreturn specTerm*info.attenuation*info.NdotL*lightColor;\n}\n#endif\n#ifdef ANISOTROPIC\nvec3 computeAnisotropicSpecularLighting(preLightingInfo info,vec3 V,vec3 N,vec3 T,vec3 B,float anisotropy,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {\nfloat NdotH=saturateEps(dot(N,info.H));\nfloat TdotH=dot(T,info.H);\nfloat BdotH=dot(B,info.H);\nfloat TdotV=dot(T,V);\nfloat BdotV=dot(B,V);\nfloat TdotL=dot(T,info.L);\nfloat BdotL=dot(B,info.L);\nfloat alphaG=convertRoughnessToAverageSlope(info.roughness);\nvec2 alphaTB=getAnisotropicRoughness(alphaG,anisotropy);\nalphaTB=max(alphaTB,square(geometricRoughnessFactor));\nvec3 fresnel=fresnelSchlickGGX(info.VdotH,reflectance0,reflectance90);\nfloat distribution=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);\nfloat visibility=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);\nvec3 specTerm=fresnel*distribution*visibility;\nreturn specTerm*info.attenuation*info.NdotL*lightColor;\n}\n#endif\n#ifdef CLEARCOAT\nvec4 computeClearCoatLighting(preLightingInfo info,vec3 Ncc,float geometricRoughnessFactor,float clearCoatIntensity,vec3 lightColor) {\nfloat NccdotL=saturateEps(dot(Ncc,info.L));\nfloat NccdotH=saturateEps(dot(Ncc,info.H));\nfloat clearCoatRoughness=max(info.roughness,geometricRoughnessFactor);\nfloat alphaG=convertRoughnessToAverageSlope(clearCoatRoughness);\nfloat fresnel=fresnelSchlickGGX(info.VdotH,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);\nfresnel*=clearCoatIntensity;\nfloat distribution=normalDistributionFunction_TrowbridgeReitzGGX(NccdotH,alphaG);\nfloat visibility=visibility_Kelemen(info.VdotH);\nfloat clearCoatTerm=fresnel*distribution*visibility;\nreturn vec4(\nclearCoatTerm*info.attenuation*NccdotL*lightColor,\n1.0-fresnel\n);\n}\nvec3 computeClearCoatLightingAbsorption(float NdotVRefract,vec3 L,vec3 Ncc,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {\nvec3 LRefract=-refract(L,Ncc,vClearCoatRefractionParams.y);\nfloat NdotLRefract=saturateEps(dot(Ncc,LRefract));\nvec3 absorption=computeClearCoatAbsorption(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness,clearCoatIntensity);\nreturn absorption;\n}\n#endif\n#ifdef SHEEN\nvec3 computeSheenLighting(preLightingInfo info,vec3 N,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {\nfloat NdotH=saturateEps(dot(N,info.H));\nfloat roughness=max(info.roughness,geometricRoughnessFactor);\nfloat alphaG=convertRoughnessToAverageSlope(roughness);\n\n\nvec3 fresnel=reflectance0;\nfloat distribution=normalDistributionFunction_CharlieSheen(NdotH,alphaG);\nfloat visibility=visibility_Ashikhmin(info.NdotL,info.NdotV);\nvec3 sheenTerm=fresnel*distribution*visibility;\nreturn sheenTerm*info.attenuation*info.NdotL*lightColor;\n}\n#endif\n";
|
|
zt.a.IncludesShadersStore.pbrDirectLightingFunctions = Lr;
|
|
var wr = "#if defined(REFLECTION) || defined(SS_REFRACTION)\nfloat getLodFromAlphaG(float cubeMapDimensionPixels,float microsurfaceAverageSlope) {\nfloat microsurfaceAverageSlopeTexels=microsurfaceAverageSlope*cubeMapDimensionPixels;\nfloat lod=log2(microsurfaceAverageSlopeTexels);\nreturn lod;\n}\n#endif\n#if defined(ENVIRONMENTBRDF) && defined(RADIANCEOCCLUSION)\nfloat environmentRadianceOcclusion(float ambientOcclusion,float NdotVUnclamped) {\n\n\nfloat temp=NdotVUnclamped+ambientOcclusion;\nreturn saturate(square(temp)-1.0+ambientOcclusion);\n}\n#endif\n#if defined(ENVIRONMENTBRDF) && defined(HORIZONOCCLUSION)\nfloat environmentHorizonOcclusion(vec3 view,vec3 normal) {\n\nvec3 reflection=reflect(view,normal);\nfloat temp=saturate(1.0+1.1*dot(reflection,normal));\nreturn square(temp);\n}\n#endif\n\n\n\n\n#if defined(LODINREFLECTIONALPHA) || defined(SS_LODINREFRACTIONALPHA)\n\n\n#define UNPACK_LOD(x) (1.0-x)*255.0\nfloat getLodFromAlphaG(float cubeMapDimensionPixels,float alphaG,float NdotV) {\nfloat microsurfaceAverageSlope=alphaG;\n\n\n\n\n\n\nmicrosurfaceAverageSlope*=sqrt(abs(NdotV));\nreturn getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);\n}\n#endif";
|
|
zt.a.IncludesShadersStore.pbrIBLFunctions = wr;
|
|
i(121), i(122), i(123), i(115);
|
|
var Fr = "#if DEBUGMODE>0\nif (vClipSpacePosition.x/vClipSpacePosition.w<vDebugMode.x) {\nreturn;\n}\n\n#if DEBUGMODE == 1\ngl_FragColor.rgb=vPositionW.rgb;\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 2 && defined(NORMAL)\ngl_FragColor.rgb=vNormalW.rgb;\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 3 && (defined(BUMP) || defined(PARALLAX) || defined(ANISOTROPIC))\n\ngl_FragColor.rgb=TBN[0];\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 4 && (defined(BUMP) || defined(PARALLAX) || defined(ANISOTROPIC))\n\ngl_FragColor.rgb=TBN[1];\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 5\n\ngl_FragColor.rgb=normalW;\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 6 && defined(MAINUV1)\ngl_FragColor.rgb=vec3(vMainUV1,0.0);\n#elif DEBUGMODE == 7 && defined(MAINUV2)\ngl_FragColor.rgb=vec3(vMainUV2,0.0);\n#elif DEBUGMODE == 8 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)\n\ngl_FragColor.rgb=TBNClearCoat[0];\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 9 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)\n\ngl_FragColor.rgb=TBNClearCoat[1];\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 10 && defined(CLEARCOAT)\n\ngl_FragColor.rgb=clearCoatNormalW;\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 11 && defined(ANISOTROPIC)\ngl_FragColor.rgb=anisotropicNormal;\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 12 && defined(ANISOTROPIC)\ngl_FragColor.rgb=anisotropicTangent;\n#define DEBUGMODE_NORMALIZE\n#elif DEBUGMODE == 13 && defined(ANISOTROPIC)\ngl_FragColor.rgb=anisotropicBitangent;\n#define DEBUGMODE_NORMALIZE\n\n#elif DEBUGMODE == 20 && defined(ALBEDO)\ngl_FragColor.rgb=albedoTexture.rgb;\n#elif DEBUGMODE == 21 && defined(AMBIENT)\ngl_FragColor.rgb=ambientOcclusionColorMap.rgb;\n#elif DEBUGMODE == 22 && defined(OPACITY)\ngl_FragColor.rgb=opacityMap.rgb;\n#elif DEBUGMODE == 23 && defined(EMISSIVE)\ngl_FragColor.rgb=emissiveColorTex.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 24 && defined(LIGHTMAP)\ngl_FragColor.rgb=lightmapColor.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 25 && defined(REFLECTIVITY) && defined(METALLICWORKFLOW)\ngl_FragColor.rgb=surfaceMetallicColorMap.rgb;\n#elif DEBUGMODE == 26 && defined(REFLECTIVITY) && !defined(METALLICWORKFLOW)\ngl_FragColor.rgb=surfaceReflectivityColorMap.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 27 && defined(CLEARCOAT) && defined(CLEARCOAT_TEXTURE)\ngl_FragColor.rgb=vec3(clearCoatMapData.rg,0.0);\n#elif DEBUGMODE == 28 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)\ngl_FragColor.rgb=clearCoatTintMapData.rgb;\n#elif DEBUGMODE == 29 && defined(SHEEN) && defined(SHEEN_TEXTURE)\ngl_FragColor.rgb=sheenMapData.rgb;\n#elif DEBUGMODE == 30 && defined(ANISOTROPIC) && defined(ANISOTROPIC_TEXTURE)\ngl_FragColor.rgb=anisotropyMapData.rgb;\n#elif DEBUGMODE == 31 && defined(SUBSURFACE) && defined(SS_THICKNESSANDMASK_TEXTURE)\ngl_FragColor.rgb=thicknessMap.rgb;\n\n#elif DEBUGMODE == 40 && defined(SS_REFRACTION)\n\ngl_FragColor.rgb=environmentRefraction.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 41 && defined(REFLECTION)\ngl_FragColor.rgb=environmentRadiance.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 42 && defined(CLEARCOAT) && defined(REFLECTION)\ngl_FragColor.rgb=environmentClearCoatRadiance;\n#define DEBUGMODE_GAMMA\n\n#elif DEBUGMODE == 50\ngl_FragColor.rgb=diffuseBase.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 51 && defined(SPECULARTERM)\ngl_FragColor.rgb=specularBase.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 52 && defined(CLEARCOAT)\ngl_FragColor.rgb=clearCoatBase.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 53 && defined(SHEEN)\ngl_FragColor.rgb=sheenBase.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 54 && defined(REFLECTION)\ngl_FragColor.rgb=environmentIrradiance.rgb;\n#define DEBUGMODE_GAMMA\n\n#elif DEBUGMODE == 60\ngl_FragColor.rgb=surfaceAlbedo.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 61\ngl_FragColor.rgb=specularEnvironmentR0;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 62\ngl_FragColor.rgb=vec3(roughness);\n#elif DEBUGMODE == 63\ngl_FragColor.rgb=vec3(alphaG);\n#elif DEBUGMODE == 64\ngl_FragColor.rgb=vec3(NdotV);\n#elif DEBUGMODE == 65 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT)\ngl_FragColor.rgb=clearCoatColor.rgb;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 66 && defined(CLEARCOAT)\ngl_FragColor.rgb=vec3(clearCoatRoughness);\n#elif DEBUGMODE == 67 && defined(CLEARCOAT)\ngl_FragColor.rgb=vec3(clearCoatNdotV);\n#elif DEBUGMODE == 68 && defined(SUBSURFACE) && defined(SS_TRANSLUCENCY)\ngl_FragColor.rgb=transmittance;\n#elif DEBUGMODE == 69 && defined(SUBSURFACE) && defined(SS_REFRACTION)\ngl_FragColor.rgb=refractionTransmittance;\n\n#elif DEBUGMODE == 70 && defined(RADIANCEOCCLUSION)\ngl_FragColor.rgb=vec3(seo);\n#elif DEBUGMODE == 71 && defined(HORIZONOCCLUSION)\ngl_FragColor.rgb=vec3(eho);\n#elif DEBUGMODE == 72 && defined(MS_BRDF_ENERGY_CONSERVATION)\ngl_FragColor.rgb=vec3(energyConservationFactor);\n#elif DEBUGMODE == 73 && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\ngl_FragColor.rgb=specularEnvironmentReflectance;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 74 && defined(CLEARCOAT) && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\ngl_FragColor.rgb=clearCoatEnvironmentReflectance;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 75 && defined(SHEEN) && defined(REFLECTION)\ngl_FragColor.rgb=sheenEnvironmentReflectance;\n#define DEBUGMODE_GAMMA\n#elif DEBUGMODE == 76 && defined(ALPHABLEND)\ngl_FragColor.rgb=vec3(luminanceOverAlpha);\n#elif DEBUGMODE == 77\ngl_FragColor.rgb=vec3(alpha);\n#endif\ngl_FragColor.rgb*=vDebugMode.y;\n#ifdef DEBUGMODE_NORMALIZE\ngl_FragColor.rgb=normalize(gl_FragColor.rgb)*0.5+0.5;\n#endif\n#ifdef DEBUGMODE_GAMMA\ngl_FragColor.rgb=toGammaSpace(gl_FragColor.rgb);\n#endif\ngl_FragColor.a=1.0;\n#endif";
|
|
zt.a.IncludesShadersStore.pbrDebug = Fr;
|
|
var Nr = "#if defined(BUMP) || !defined(NORMAL) || defined(FORCENORMALFORWARD) || defined(SPECULARAA) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC)\n#extension GL_OES_standard_derivatives : enable\n#endif\n#ifdef LODBASEDMICROSFURACE\n#extension GL_EXT_shader_texture_lod : enable\n#endif\n#define CUSTOM_FRAGMENT_BEGIN\n#ifdef LOGARITHMICDEPTH\n#extension GL_EXT_frag_depth : enable\n#endif\nprecision highp float;\n\n#ifndef FROMLINEARSPACE\n#define FROMLINEARSPACE;\n#endif\n\n#include<__decl__pbrFragment>\n#include<pbrFragmentExtraDeclaration>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<pbrFragmentSamplersDeclaration>\n#include<imageProcessingDeclaration>\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n#include<fogFragmentDeclaration>\n\n#include<helperFunctions>\n#include<pbrHelperFunctions>\n#include<imageProcessingFunctions>\n#include<shadowsFragmentFunctions>\n#include<harmonicsFunctions>\n#include<pbrDirectLightingSetupFunctions>\n#include<pbrDirectLightingFalloffFunctions>\n#include<pbrBRDFFunctions>\n#include<pbrDirectLightingFunctions>\n#include<pbrIBLFunctions>\n#include<bumpFragmentFunctions>\n#ifdef REFLECTION\n#include<reflectionFunction>\n#endif\n#define CUSTOM_FRAGMENT_DEFINITIONS\n\nvoid main(void) {\n#define CUSTOM_FRAGMENT_MAIN_BEGIN\n#include<clipPlaneFragment>\n\nvec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);\n#ifdef NORMAL\nvec3 normalW=normalize(vNormalW);\n#else\nvec3 normalW=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w;\n#endif\n#ifdef CLEARCOAT\n\nvec3 clearCoatNormalW=normalW;\n#endif\n#include<bumpFragment>\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nvec3 faceNormal=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w;\n#if defined(TWOSIDEDLIGHTING)\nfaceNormal=gl_FrontFacing ? faceNormal : -faceNormal;\n#endif\nnormalW*=sign(dot(normalW,faceNormal));\n#endif\n#if defined(TWOSIDEDLIGHTING) && defined(NORMAL)\nnormalW=gl_FrontFacing ? normalW : -normalW;\n#endif\n\n\nvec3 surfaceAlbedo=vAlbedoColor.rgb;\n\nfloat alpha=vAlbedoColor.a;\n#ifdef ALBEDO\nvec4 albedoTexture=texture2D(albedoSampler,vAlbedoUV+uvOffset);\n#if defined(ALPHAFROMALBEDO) || defined(ALPHATEST)\nalpha*=albedoTexture.a;\n#endif\nsurfaceAlbedo*=toLinearSpace(albedoTexture.rgb);\nsurfaceAlbedo*=vAlbedoInfos.y;\n#endif\n#ifdef VERTEXCOLOR\nsurfaceAlbedo*=vColor.rgb;\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_ALBEDO\n\n#ifdef OPACITY\nvec4 opacityMap=texture2D(opacitySampler,vOpacityUV+uvOffset);\n#ifdef OPACITYRGB\nalpha=getLuminance(opacityMap.rgb);\n#else\nalpha*=opacityMap.a;\n#endif\nalpha*=vOpacityInfos.y;\n#endif\n#ifdef VERTEXALPHA\nalpha*=vColor.a;\n#endif\n#if !defined(SS_LINKREFRACTIONTOTRANSPARENCY) && !defined(ALPHAFRESNEL)\n#ifdef ALPHATEST\nif (alpha<ALPHATESTVALUE)\ndiscard;\n#ifndef ALPHABLEND\n\nalpha=1.0;\n#endif\n#endif\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_ALPHA\n#include<depthPrePass>\n#define CUSTOM_FRAGMENT_BEFORE_LIGHTS\n\nvec3 ambientOcclusionColor=vec3(1.,1.,1.);\n#ifdef AMBIENT\nvec3 ambientOcclusionColorMap=texture2D(ambientSampler,vAmbientUV+uvOffset).rgb*vAmbientInfos.y;\n#ifdef AMBIENTINGRAYSCALE\nambientOcclusionColorMap=vec3(ambientOcclusionColorMap.r,ambientOcclusionColorMap.r,ambientOcclusionColorMap.r);\n#endif\nambientOcclusionColor=mix(ambientOcclusionColor,ambientOcclusionColorMap,vAmbientInfos.z);\n#endif\n#ifdef UNLIT\nvec3 diffuseBase=vec3(1.,1.,1.);\n#else\n\nfloat microSurface=vReflectivityColor.a;\nvec3 surfaceReflectivityColor=vReflectivityColor.rgb;\n#ifdef METALLICWORKFLOW\nvec2 metallicRoughness=surfaceReflectivityColor.rg;\n#ifdef REFLECTIVITY\nvec4 surfaceMetallicColorMap=texture2D(reflectivitySampler,vReflectivityUV+uvOffset);\n#ifdef AOSTOREINMETALMAPRED\nvec3 aoStoreInMetalMap=vec3(surfaceMetallicColorMap.r,surfaceMetallicColorMap.r,surfaceMetallicColorMap.r);\nambientOcclusionColor=mix(ambientOcclusionColor,aoStoreInMetalMap,vReflectivityInfos.z);\n#endif\n#ifdef METALLNESSSTOREINMETALMAPBLUE\nmetallicRoughness.r*=surfaceMetallicColorMap.b;\n#else\nmetallicRoughness.r*=surfaceMetallicColorMap.r;\n#endif\n#ifdef ROUGHNESSSTOREINMETALMAPALPHA\nmetallicRoughness.g*=surfaceMetallicColorMap.a;\n#else\n#ifdef ROUGHNESSSTOREINMETALMAPGREEN\nmetallicRoughness.g*=surfaceMetallicColorMap.g;\n#endif\n#endif\n#endif\n#ifdef MICROSURFACEMAP\nvec4 microSurfaceTexel=texture2D(microSurfaceSampler,vMicroSurfaceSamplerUV+uvOffset)*vMicroSurfaceSamplerInfos.y;\nmetallicRoughness.g*=microSurfaceTexel.r;\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_METALLICROUGHNESS\n\nmicroSurface=1.0-metallicRoughness.g;\n\nvec3 baseColor=surfaceAlbedo;\n#ifdef REFLECTANCE\n\n\n\n\n\nsurfaceAlbedo=baseColor.rgb*(1.0-metallicRoughness.r);\n\nsurfaceReflectivityColor=mix(0.16*reflectance*reflectance,baseColor,metallicRoughness.r);\n#else\n\n\n\nconst vec3 DefaultSpecularReflectanceDielectric=vec3(0.04,0.04,0.04);\n\nsurfaceAlbedo=mix(baseColor.rgb*(1.0-DefaultSpecularReflectanceDielectric.r),vec3(0.,0.,0.),metallicRoughness.r);\n\nsurfaceReflectivityColor=mix(DefaultSpecularReflectanceDielectric,baseColor,metallicRoughness.r);\n#endif\n#else\n#ifdef REFLECTIVITY\nvec4 surfaceReflectivityColorMap=texture2D(reflectivitySampler,vReflectivityUV+uvOffset);\nsurfaceReflectivityColor*=toLinearSpace(surfaceReflectivityColorMap.rgb);\nsurfaceReflectivityColor*=vReflectivityInfos.y;\n#ifdef MICROSURFACEFROMREFLECTIVITYMAP\nmicroSurface*=surfaceReflectivityColorMap.a;\nmicroSurface*=vReflectivityInfos.z;\n#else\n#ifdef MICROSURFACEAUTOMATIC\nmicroSurface*=computeDefaultMicroSurface(microSurface,surfaceReflectivityColor);\n#endif\n#ifdef MICROSURFACEMAP\nvec4 microSurfaceTexel=texture2D(microSurfaceSampler,vMicroSurfaceSamplerUV+uvOffset)*vMicroSurfaceSamplerInfos.y;\nmicroSurface*=microSurfaceTexel.r;\n#endif\n#define CUSTOM_FRAGMENT_UPDATE_MICROSURFACE\n#endif\n#endif\n#endif\n\nmicroSurface=saturate(microSurface);\n\nfloat roughness=1.-microSurface;\n\n#ifdef ALPHAFRESNEL\n#if defined(ALPHATEST) || defined(ALPHABLEND)\n\n\n\nfloat opacityPerceptual=alpha;\n#ifdef LINEARALPHAFRESNEL\nfloat opacity0=opacityPerceptual;\n#else\nfloat opacity0=opacityPerceptual*opacityPerceptual;\n#endif\nfloat opacity90=fresnelGrazingReflectance(opacity0);\nvec3 normalForward=faceforward(normalW,-viewDirectionW,normalW);\n\nalpha=getReflectanceFromAnalyticalBRDFLookup_Jones(saturate(dot(viewDirectionW,normalForward)),vec3(opacity0),vec3(opacity90),sqrt(microSurface)).x;\n#ifdef ALPHATEST\nif (alpha<ALPHATESTVALUE)\ndiscard;\n#ifndef ALPHABLEND\n\nalpha=1.0;\n#endif\n#endif\n#endif\n#endif\n\nfloat NdotVUnclamped=dot(normalW,viewDirectionW);\n\nfloat NdotV=absEps(NdotVUnclamped);\nfloat alphaG=convertRoughnessToAverageSlope(roughness);\nvec2 AARoughnessFactors=getAARoughnessFactors(normalW.xyz);\n#ifdef SPECULARAA\n\nalphaG+=AARoughnessFactors.y;\n#endif\n#ifdef ANISOTROPIC\nfloat anisotropy=vAnisotropy.b;\nvec3 anisotropyDirection=vec3(vAnisotropy.xy,0.);\n#ifdef ANISOTROPIC_TEXTURE\nvec3 anisotropyMapData=texture2D(anisotropySampler,vAnisotropyUV+uvOffset).rgb*vAnisotropyInfos.y;\nanisotropy*=anisotropyMapData.b;\nanisotropyDirection.rg*=anisotropyMapData.rg*2.0-1.0;\n#endif\nmat3 anisoTBN=mat3(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));\nvec3 anisotropicTangent=normalize(anisoTBN*anisotropyDirection);\nvec3 anisotropicBitangent=normalize(cross(anisoTBN[2],anisotropicTangent));\nvec3 anisotropicNormal=getAnisotropicBentNormals(anisotropicTangent,anisotropicBitangent,normalW,viewDirectionW,anisotropy);\n#endif\n\n#ifdef SS_REFRACTION\nvec4 environmentRefraction=vec4(0.,0.,0.,0.);\n#ifdef ANISOTROPIC\nvec3 refractionVector=refract(-viewDirectionW,anisotropicNormal,vRefractionInfos.y);\n#else\nvec3 refractionVector=refract(-viewDirectionW,normalW,vRefractionInfos.y);\n#endif\n#ifdef SS_REFRACTIONMAP_OPPOSITEZ\nrefractionVector.z*=-1.0;\n#endif\n\n#ifdef SS_REFRACTIONMAP_3D\nrefractionVector.y=refractionVector.y*vRefractionInfos.w;\nvec3 refractionCoords=refractionVector;\nrefractionCoords=vec3(refractionMatrix*vec4(refractionCoords,0));\n#else\nvec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*vRefractionInfos.z,1.0)));\nvec2 refractionCoords=vRefractionUVW.xy/vRefractionUVW.z;\nrefractionCoords.y=1.0-refractionCoords.y;\n#endif\n#ifdef SS_LODINREFRACTIONALPHA\nfloat refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,alphaG,NdotVUnclamped);\n#else\nfloat refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,alphaG);\n#endif\n#ifdef LODBASEDMICROSFURACE\n\nrefractionLOD=refractionLOD*vRefractionMicrosurfaceInfos.y+vRefractionMicrosurfaceInfos.z;\n#ifdef SS_LODINREFRACTIONALPHA\n\n\n\n\n\n\n\n\n\nfloat automaticRefractionLOD=UNPACK_LOD(sampleRefraction(refractionSampler,refractionCoords).a);\nfloat requestedRefractionLOD=max(automaticRefractionLOD,refractionLOD);\n#else\nfloat requestedRefractionLOD=refractionLOD;\n#endif\nenvironmentRefraction=sampleRefractionLod(refractionSampler,refractionCoords,requestedRefractionLOD);\n#else\nfloat lodRefractionNormalized=saturate(refractionLOD/log2(vRefractionMicrosurfaceInfos.x));\nfloat lodRefractionNormalizedDoubled=lodRefractionNormalized*2.0;\nvec4 environmentRefractionMid=sampleRefraction(refractionSampler,refractionCoords);\nif(lodRefractionNormalizedDoubled<1.0){\nenvironmentRefraction=mix(\nsampleRefraction(refractionSamplerHigh,refractionCoords),\nenvironmentRefractionMid,\nlodRefractionNormalizedDoubled\n);\n}else{\nenvironmentRefraction=mix(\nenvironmentRefractionMid,\nsampleRefraction(refractionSamplerLow,refractionCoords),\nlodRefractionNormalizedDoubled-1.0\n);\n}\n#endif\n#ifdef SS_RGBDREFRACTION\nenvironmentRefraction.rgb=fromRGBD(environmentRefraction);\n#endif\n#ifdef SS_GAMMAREFRACTION\nenvironmentRefraction.rgb=toLinearSpace(environmentRefraction.rgb);\n#endif\n\nenvironmentRefraction.rgb*=vRefractionInfos.x;\n#endif\n\n#ifdef REFLECTION\nvec4 environmentRadiance=vec4(0.,0.,0.,0.);\nvec3 environmentIrradiance=vec3(0.,0.,0.);\n#ifdef ANISOTROPIC\nvec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),anisotropicNormal);\n#else\nvec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),normalW);\n#endif\n#ifdef REFLECTIONMAP_OPPOSITEZ\nreflectionVector.z*=-1.0;\n#endif\n\n#ifdef REFLECTIONMAP_3D\nvec3 reflectionCoords=reflectionVector;\n#else\nvec2 reflectionCoords=reflectionVector.xy;\n#ifdef REFLECTIONMAP_PROJECTION\nreflectionCoords/=reflectionVector.z;\n#endif\nreflectionCoords.y=1.0-reflectionCoords.y;\n#endif\n#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)\nfloat reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,NdotVUnclamped);\n#else\nfloat reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);\n#endif\n#ifdef LODBASEDMICROSFURACE\n\nreflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;\n#ifdef LODINREFLECTIONALPHA\n\n\n\n\n\n\n\n\n\nfloat automaticReflectionLOD=UNPACK_LOD(sampleReflection(reflectionSampler,reflectionCoords).a);\nfloat requestedReflectionLOD=max(automaticReflectionLOD,reflectionLOD);\n#else\nfloat requestedReflectionLOD=reflectionLOD;\n#endif\nenvironmentRadiance=sampleReflectionLod(reflectionSampler,reflectionCoords,requestedReflectionLOD);\n#else\nfloat lodReflectionNormalized=saturate(reflectionLOD/log2(vReflectionMicrosurfaceInfos.x));\nfloat lodReflectionNormalizedDoubled=lodReflectionNormalized*2.0;\nvec4 environmentSpecularMid=sampleReflection(reflectionSampler,reflectionCoords);\nif(lodReflectionNormalizedDoubled<1.0){\nenvironmentRadiance=mix(\nsampleReflection(reflectionSamplerHigh,reflectionCoords),\nenvironmentSpecularMid,\nlodReflectionNormalizedDoubled\n);\n}else{\nenvironmentRadiance=mix(\nenvironmentSpecularMid,\nsampleReflection(reflectionSamplerLow,reflectionCoords),\nlodReflectionNormalizedDoubled-1.0\n);\n}\n#endif\n#ifdef RGBDREFLECTION\nenvironmentRadiance.rgb=fromRGBD(environmentRadiance);\n#endif\n#ifdef GAMMAREFLECTION\nenvironmentRadiance.rgb=toLinearSpace(environmentRadiance.rgb);\n#endif\n\n#ifdef USESPHERICALFROMREFLECTIONMAP\n#if defined(NORMAL) && defined(USESPHERICALINVERTEX)\nenvironmentIrradiance=vEnvironmentIrradiance;\n#else\n#ifdef ANISOTROPIC\nvec3 irradianceVector=vec3(reflectionMatrix*vec4(anisotropicNormal,0)).xyz;\n#else\nvec3 irradianceVector=vec3(reflectionMatrix*vec4(normalW,0)).xyz;\n#endif\n#ifdef REFLECTIONMAP_OPPOSITEZ\nirradianceVector.z*=-1.0;\n#endif\nenvironmentIrradiance=computeEnvironmentIrradiance(irradianceVector);\n#endif\n#endif\n\nenvironmentRadiance.rgb*=vReflectionInfos.x;\nenvironmentRadiance.rgb*=vReflectionColor.rgb;\nenvironmentIrradiance*=vReflectionColor.rgb;\n#endif\n\nfloat reflectance=max(max(surfaceReflectivityColor.r,surfaceReflectivityColor.g),surfaceReflectivityColor.b);\nfloat reflectance90=fresnelGrazingReflectance(reflectance);\nvec3 specularEnvironmentR0=surfaceReflectivityColor.rgb;\nvec3 specularEnvironmentR90=vec3(1.0,1.0,1.0)*reflectance90;\n\n#ifdef SHEEN\nfloat sheenIntensity=vSheenColor.a;\n#ifdef SHEEN_TEXTURE\nvec4 sheenMapData=texture2D(sheenSampler,vSheenUV+uvOffset)*vSheenInfos.y;\nsheenIntensity*=sheenMapData.a;\n#endif\n#ifdef SHEEN_LINKWITHALBEDO\nfloat sheenFactor=pow5(1.0-sheenIntensity);\nvec3 sheenColor=baseColor.rgb*(1.0-sheenFactor);\nfloat sheenRoughness=sheenIntensity;\n\nsurfaceAlbedo.rgb*=sheenFactor;\n#else\nvec3 sheenColor=vSheenColor.rgb;\n#ifdef SHEEN_TEXTURE\nsheenColor.rgb*=toLinearSpace(sheenMapData.rgb);\n#endif\nfloat sheenRoughness=roughness;\n\nsheenIntensity*=(1.-reflectance);\n\nsheenColor*=sheenIntensity;\n#endif\n\n#if defined(REFLECTION)\nfloat sheenAlphaG=convertRoughnessToAverageSlope(sheenRoughness);\n#ifdef SPECULARAA\n\nsheenAlphaG+=AARoughnessFactors.y;\n#endif\nvec4 environmentSheenRadiance=vec4(0.,0.,0.,0.);\n\n#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)\nfloat sheenReflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,sheenAlphaG,NdotVUnclamped);\n#else\nfloat sheenReflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,sheenAlphaG);\n#endif\n#ifdef LODBASEDMICROSFURACE\n\nsheenReflectionLOD=sheenReflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;\nenvironmentSheenRadiance=sampleReflectionLod(reflectionSampler,reflectionCoords,sheenReflectionLOD);\n#else\nfloat lodSheenReflectionNormalized=saturate(sheenReflectionLOD/log2(vReflectionMicrosurfaceInfos.x));\nfloat lodSheenReflectionNormalizedDoubled=lodSheenReflectionNormalized*2.0;\nvec4 environmentSheenMid=sampleReflection(reflectionSampler,reflectionCoords);\nif(lodSheenReflectionNormalizedDoubled<1.0){\nenvironmentSheenRadiance=mix(\nsampleReflection(reflectionSamplerHigh,reflectionCoords),\nenvironmentSheenMid,\nlodSheenReflectionNormalizedDoubled\n);\n}else{\nenvironmentSheenRadiance=mix(\nenvironmentSheenMid,\nsampleReflection(reflectionSamplerLow,reflectionCoords),\nlodSheenReflectionNormalizedDoubled-1.0\n);\n}\n#endif\n#ifdef RGBDREFLECTION\nenvironmentSheenRadiance.rgb=fromRGBD(environmentSheenRadiance);\n#endif\n#ifdef GAMMAREFLECTION\nenvironmentSheenRadiance.rgb=toLinearSpace(environmentSheenRadiance.rgb);\n#endif\n\nenvironmentSheenRadiance.rgb*=vReflectionInfos.x;\nenvironmentSheenRadiance.rgb*=vReflectionColor.rgb;\n#endif\n#endif\n\n#ifdef CLEARCOAT\n\nfloat clearCoatIntensity=vClearCoatParams.x;\nfloat clearCoatRoughness=vClearCoatParams.y;\n#ifdef CLEARCOAT_TEXTURE\nvec2 clearCoatMapData=texture2D(clearCoatSampler,vClearCoatUV+uvOffset).rg*vClearCoatInfos.y;\nclearCoatIntensity*=clearCoatMapData.x;\nclearCoatRoughness*=clearCoatMapData.y;\n#endif\n#ifdef CLEARCOAT_TINT\nvec3 clearCoatColor=vClearCoatTintParams.rgb;\nfloat clearCoatThickness=vClearCoatTintParams.a;\n#ifdef CLEARCOAT_TINT_TEXTURE\nvec4 clearCoatTintMapData=texture2D(clearCoatTintSampler,vClearCoatTintUV+uvOffset);\nclearCoatColor*=toLinearSpace(clearCoatTintMapData.rgb);\nclearCoatThickness*=clearCoatTintMapData.a;\n#endif\nclearCoatColor=computeColorAtDistanceInMedia(clearCoatColor,clearCoatColorAtDistance);\n#endif\n\n\n\n\nvec3 specularEnvironmentR0Updated=getR0RemappedForClearCoat(specularEnvironmentR0);\nspecularEnvironmentR0=mix(specularEnvironmentR0,specularEnvironmentR0Updated,clearCoatIntensity);\n#ifdef CLEARCOAT_BUMP\n#ifdef NORMALXYSCALE\nfloat clearCoatNormalScale=1.0;\n#else\nfloat clearCoatNormalScale=vClearCoatBumpInfos.y;\n#endif\n#if defined(TANGENT) && defined(NORMAL)\nmat3 TBNClearCoat=vTBN;\n#else\nmat3 TBNClearCoat=cotangent_frame(clearCoatNormalW*clearCoatNormalScale,vPositionW,vClearCoatBumpUV,vClearCoatTangentSpaceParams);\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\nclearCoatNormalW=normalize(texture2D(clearCoatBumpSampler,vClearCoatBumpUV+uvOffset).xyz*2.0-1.0);\nclearCoatNormalW=normalize(mat3(normalMatrix)*clearCoatNormalW);\n#else\nclearCoatNormalW=perturbNormal(TBN,vClearCoatBumpUV+uvOffset,clearCoatBumpSampler,vClearCoatBumpInfos.y);\n#endif\n#endif\n#if defined(FORCENORMALFORWARD) && defined(NORMAL)\nclearCoatNormalW*=sign(dot(clearCoatNormalW,faceNormal));\n#endif\n#if defined(TWOSIDEDLIGHTING) && defined(NORMAL)\nclearCoatNormalW=gl_FrontFacing ? clearCoatNormalW : -clearCoatNormalW;\n#endif\n\nvec2 clearCoatAARoughnessFactors=getAARoughnessFactors(clearCoatNormalW.xyz);\n\nfloat clearCoatNdotVUnclamped=dot(clearCoatNormalW,viewDirectionW);\n\nfloat clearCoatNdotV=absEps(clearCoatNdotVUnclamped);\n\n#if defined(REFLECTION)\nfloat clearCoatAlphaG=convertRoughnessToAverageSlope(clearCoatRoughness);\n#ifdef SPECULARAA\n\nclearCoatAlphaG+=clearCoatAARoughnessFactors.y;\n#endif\nvec4 environmentClearCoatRadiance=vec4(0.,0.,0.,0.);\nvec3 clearCoatReflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),clearCoatNormalW);\n#ifdef REFLECTIONMAP_OPPOSITEZ\nclearCoatReflectionVector.z*=-1.0;\n#endif\n\n#ifdef REFLECTIONMAP_3D\nvec3 clearCoatReflectionCoords=clearCoatReflectionVector;\n#else\nvec2 clearCoatReflectionCoords=clearCoatReflectionVector.xy;\n#ifdef REFLECTIONMAP_PROJECTION\nclearCoatReflectionCoords/=clearCoatReflectionVector.z;\n#endif\nclearCoatReflectionCoords.y=1.0-clearCoatReflectionCoords.y;\n#endif\n#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)\nfloat clearCoatReflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,clearCoatAlphaG,clearCoatNdotVUnclamped);\n#else\nfloat clearCoatReflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,clearCoatAlphaG);\n#endif\n#ifdef LODBASEDMICROSFURACE\n\nclearCoatReflectionLOD=clearCoatReflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;\nfloat requestedClearCoatReflectionLOD=clearCoatReflectionLOD;\nenvironmentClearCoatRadiance=sampleReflectionLod(reflectionSampler,clearCoatReflectionCoords,requestedClearCoatReflectionLOD);\n#else\nfloat lodClearCoatReflectionNormalized=saturate(clearCoatReflectionLOD/log2(vReflectionMicrosurfaceInfos.x));\nfloat lodClearCoatReflectionNormalizedDoubled=lodClearCoatReflectionNormalized*2.0;\nvec4 environmentClearCoatMid=sampleReflection(reflectionSampler,reflectionCoords);\nif(lodClearCoatReflectionNormalizedDoubled<1.0){\nenvironmentClearCoatRadiance=mix(\nsampleReflection(reflectionSamplerHigh,clearCoatReflectionCoords),\nenvironmentClearCoatMid,\nlodClearCoatReflectionNormalizedDoubled\n);\n}else{\nenvironmentClearCoatRadiance=mix(\nenvironmentClearCoatMid,\nsampleReflection(reflectionSamplerLow,clearCoatReflectionCoords),\nlodClearCoatReflectionNormalizedDoubled-1.0\n);\n}\n#endif\n#ifdef RGBDREFLECTION\nenvironmentClearCoatRadiance.rgb=fromRGBD(environmentClearCoatRadiance);\n#endif\n#ifdef GAMMAREFLECTION\nenvironmentClearCoatRadiance.rgb=toLinearSpace(environmentClearCoatRadiance.rgb);\n#endif\n#ifdef CLEARCOAT_TINT\n\nvec3 clearCoatVRefract=-refract(vPositionW,clearCoatNormalW,vClearCoatRefractionParams.y);\n\nfloat clearCoatNdotVRefract=absEps(dot(clearCoatNormalW,clearCoatVRefract));\nvec3 absorption=vec3(0.);\n#endif\n\nenvironmentClearCoatRadiance.rgb*=vReflectionInfos.x;\nenvironmentClearCoatRadiance.rgb*=vReflectionColor.rgb;\n#endif\n#endif\n\n#if defined(ENVIRONMENTBRDF)\n\nvec3 environmentBrdf=getBRDFLookup(NdotV,roughness,environmentBrdfSampler);\n#ifdef MS_BRDF_ENERGY_CONSERVATION\nvec3 energyConservationFactor=getEnergyConservationFactor(specularEnvironmentR0,environmentBrdf);\n#endif\n#endif\n\n#ifdef SUBSURFACE\n#ifdef SS_REFRACTION\nfloat refractionIntensity=vSubSurfaceIntensity.x;\n#ifdef SS_LINKREFRACTIONTOTRANSPARENCY\nrefractionIntensity*=(1.0-alpha);\n\nalpha=1.0;\n#endif\n#endif\n#ifdef SS_TRANSLUCENCY\nfloat translucencyIntensity=vSubSurfaceIntensity.y;\n#endif\n#ifdef SS_SCATTERING\nfloat scatteringIntensity=vSubSurfaceIntensity.z;\n#endif\n#ifdef SS_THICKNESSANDMASK_TEXTURE\nvec4 thicknessMap=texture2D(thicknessSampler,vThicknessUV+uvOffset);\nfloat thickness=thicknessMap.r*vThicknessParam.y+vThicknessParam.x;\n#ifdef SS_MASK_FROM_THICKNESS_TEXTURE\n#ifdef SS_REFRACTION\nrefractionIntensity*=thicknessMap.g;\n#endif\n#ifdef SS_TRANSLUCENCY\ntranslucencyIntensity*=thicknessMap.b;\n#endif\n#ifdef SS_SCATTERING\nscatteringIntensity*=thicknessMap.a;\n#endif\n#endif\n#else\nfloat thickness=vThicknessParam.y;\n#endif\n#ifdef SS_TRANSLUCENCY\nthickness=maxEps(thickness);\nvec3 transmittance=transmittanceBRDF_Burley(vTintColor.rgb,vDiffusionDistance,thickness);\ntransmittance*=translucencyIntensity;\n#endif\n#endif\n\n\nvec3 diffuseBase=vec3(0.,0.,0.);\n#ifdef SPECULARTERM\nvec3 specularBase=vec3(0.,0.,0.);\n#endif\n#ifdef CLEARCOAT\nvec3 clearCoatBase=vec3(0.,0.,0.);\n#endif\n#ifdef SHEEN\nvec3 sheenBase=vec3(0.,0.,0.);\n#endif\n#ifdef LIGHTMAP\nvec3 lightmapColor=texture2D(lightmapSampler,vLightmapUV+uvOffset).rgb;\n#ifdef GAMMALIGHTMAP\nlightmapColor=toLinearSpace(lightmapColor);\n#endif\nlightmapColor*=vLightmapInfos.y;\n#endif\n\npreLightingInfo preInfo;\nlightingInfo info;\nfloat shadow=1.;\n#include<lightFragment>[0..maxSimultaneousLights]\n\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\nvec3 specularEnvironmentReflectance=getReflectanceFromBRDFLookup(specularEnvironmentR0,environmentBrdf);\n#ifdef RADIANCEOCCLUSION\n#ifdef AMBIENTINGRAYSCALE\nfloat ambientMonochrome=ambientOcclusionColor.r;\n#else\nfloat ambientMonochrome=getLuminance(ambientOcclusionColor);\n#endif\nfloat seo=environmentRadianceOcclusion(ambientMonochrome,NdotVUnclamped);\nspecularEnvironmentReflectance*=seo;\n#endif\n#ifdef HORIZONOCCLUSION\n#ifdef BUMP\n#ifdef REFLECTIONMAP_3D\nfloat eho=environmentHorizonOcclusion(-viewDirectionW,normalW);\nspecularEnvironmentReflectance*=eho;\n#endif\n#endif\n#endif\n#else\n\nvec3 specularEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(NdotV,specularEnvironmentR0,specularEnvironmentR90,sqrt(microSurface));\n#endif\n\n#if defined(SHEEN) && defined(REFLECTION)\nvec3 sheenEnvironmentReflectance=getSheenReflectanceFromBRDFLookup(sheenColor,environmentBrdf);\n#ifdef RADIANCEOCCLUSION\nsheenEnvironmentReflectance*=seo;\n#endif\n#ifdef HORIZONOCCLUSION\n#ifdef BUMP\n#ifdef REFLECTIONMAP_3D\nsheenEnvironmentReflectance*=eho;\n#endif\n#endif\n#endif\n#endif\n\n#ifdef CLEARCOAT\n#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)\n\nvec3 environmentClearCoatBrdf=getBRDFLookup(clearCoatNdotV,clearCoatRoughness,environmentBrdfSampler);\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(vClearCoatRefractionParams.x),environmentClearCoatBrdf);\n#ifdef RADIANCEOCCLUSION\nfloat clearCoatSeo=environmentRadianceOcclusion(ambientMonochrome,clearCoatNdotVUnclamped);\nclearCoatEnvironmentReflectance*=clearCoatSeo;\n#endif\n#ifdef HORIZONOCCLUSION\n#ifdef BUMP\n#ifdef REFLECTIONMAP_3D\nfloat clearCoatEho=environmentHorizonOcclusion(-viewDirectionW,clearCoatNormalW);\nclearCoatEnvironmentReflectance*=clearCoatEho;\n#endif\n#endif\n#endif\n#else\n\nvec3 clearCoatEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(clearCoatNdotV,vec3(1.),vec3(1.),sqrt(1.-clearCoatRoughness));\n#endif\nclearCoatEnvironmentReflectance*=clearCoatIntensity;\n#ifdef CLEARCOAT_TINT\n\nabsorption=computeClearCoatAbsorption(clearCoatNdotVRefract,clearCoatNdotVRefract,clearCoatColor,clearCoatThickness,clearCoatIntensity);\n#ifdef REFLECTION\nenvironmentIrradiance*=absorption;\n#endif\n#ifdef SHEEN\nsheenEnvironmentReflectance*=absorption;\n#endif\nspecularEnvironmentReflectance*=absorption;\n#endif\n\nfloat fresnelIBLClearCoat=fresnelSchlickGGX(clearCoatNdotV,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);\nfresnelIBLClearCoat*=clearCoatIntensity;\nfloat conservationFactor=(1.-fresnelIBLClearCoat);\n#ifdef REFLECTION\nenvironmentIrradiance*=conservationFactor;\n#endif\n#ifdef SHEEN\nsheenEnvironmentReflectance*=(conservationFactor*conservationFactor);\n#endif\nspecularEnvironmentReflectance*=(conservationFactor*conservationFactor);\n#endif\n\n#ifdef SS_REFRACTION\nvec3 refractionTransmittance=vec3(refractionIntensity);\n#ifdef SS_THICKNESSANDMASK_TEXTURE\nvec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);\n\n\n\n\n\nrefractionTransmittance*=cocaLambert(volumeAlbedo,thickness);\n#elif defined(SS_LINKREFRACTIONTOTRANSPARENCY)\n\nfloat maxChannel=max(max(surfaceAlbedo.r,surfaceAlbedo.g),surfaceAlbedo.b);\nvec3 volumeAlbedo=saturate(maxChannel*surfaceAlbedo);\n\nenvironmentRefraction.rgb*=volumeAlbedo;\n#else\n\nvec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);\nrefractionTransmittance*=cocaLambert(volumeAlbedo,vThicknessParam.y);\n#endif\n\nsurfaceAlbedo*=(1.-refractionIntensity);\n\nenvironmentIrradiance*=(1.-refractionIntensity);\n\nvec3 bounceSpecularEnvironmentReflectance=(2.0*specularEnvironmentReflectance)/(1.0+specularEnvironmentReflectance);\nspecularEnvironmentReflectance=mix(bounceSpecularEnvironmentReflectance,specularEnvironmentReflectance,refractionIntensity);\n\nrefractionTransmittance*=1.0-specularEnvironmentReflectance;\n#endif\n\n#if defined(REFLECTION) && defined(USESPHERICALFROMREFLECTIONMAP) && defined(SS_TRANSLUCENCY)\n#if defined(USESPHERICALINVERTEX)\nvec3 irradianceVector=vec3(reflectionMatrix*vec4(normalW,0)).xyz;\n#ifdef REFLECTIONMAP_OPPOSITEZ\nirradianceVector.z*=-1.0;\n#endif\n#endif\nvec3 refractionIrradiance=computeEnvironmentIrradiance(-irradianceVector);\nrefractionIrradiance*=transmittance;\n#endif\n\n\n\n#ifndef METALLICWORKFLOW\nsurfaceAlbedo.rgb=(1.-reflectance)*surfaceAlbedo.rgb;\n#endif\n\n#ifdef REFLECTION\nvec3 finalIrradiance=environmentIrradiance;\n#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(SS_TRANSLUCENCY)\nfinalIrradiance+=refractionIrradiance;\n#endif\nfinalIrradiance*=surfaceAlbedo.rgb;\n#endif\n\n#ifdef SPECULARTERM\nvec3 finalSpecular=specularBase;\nfinalSpecular=max(finalSpecular,0.0);\n\nvec3 finalSpecularScaled=finalSpecular*vLightingIntensity.x*vLightingIntensity.w;\n#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\nfinalSpecularScaled*=energyConservationFactor;\n#endif\n#endif\n\n#ifdef REFLECTION\nvec3 finalRadiance=environmentRadiance.rgb;\nfinalRadiance*=specularEnvironmentReflectance;\n\nvec3 finalRadianceScaled=finalRadiance*vLightingIntensity.z;\n#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\nfinalRadianceScaled*=energyConservationFactor;\n#endif\n#endif\n\n#ifdef SS_REFRACTION\nvec3 finalRefraction=environmentRefraction.rgb;\nfinalRefraction*=refractionTransmittance;\n#endif\n\n#ifdef CLEARCOAT\nvec3 finalClearCoat=clearCoatBase;\nfinalClearCoat=max(finalClearCoat,0.0);\n\nvec3 finalClearCoatScaled=finalClearCoat*vLightingIntensity.x*vLightingIntensity.w;\n#if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)\nfinalClearCoatScaled*=energyConservationFactor;\n#endif\n\n#ifdef REFLECTION\nvec3 finalClearCoatRadiance=environmentClearCoatRadiance.rgb;\nfinalClearCoatRadiance*=clearCoatEnvironmentReflectance;\n\nvec3 finalClearCoatRadianceScaled=finalClearCoatRadiance*vLightingIntensity.z;\n#endif\n#ifdef SS_REFRACTION\nfinalRefraction*=(conservationFactor*conservationFactor);\n#ifdef CLEARCOAT_TINT\nfinalRefraction*=absorption;\n#endif\n#endif\n#endif\n\n#ifdef SHEEN\nvec3 finalSheen=sheenBase*sheenColor;\nfinalSheen=max(finalSheen,0.0);\nvec3 finalSheenScaled=finalSheen*vLightingIntensity.x*vLightingIntensity.w;\n\n\n\n\n\n#ifdef REFLECTION\nvec3 finalSheenRadiance=environmentSheenRadiance.rgb;\nfinalSheenRadiance*=sheenEnvironmentReflectance;\n\nvec3 finalSheenRadianceScaled=finalSheenRadiance*vLightingIntensity.z;\n#endif\n#endif\n\n#ifdef ALPHABLEND\nfloat luminanceOverAlpha=0.0;\n#if defined(REFLECTION) && defined(RADIANCEOVERALPHA)\nluminanceOverAlpha+=getLuminance(finalRadianceScaled);\n#if defined(CLEARCOAT)\nluminanceOverAlpha+=getLuminance(finalClearCoatRadianceScaled);\n#endif\n#endif\n#if defined(SPECULARTERM) && defined(SPECULAROVERALPHA)\nluminanceOverAlpha+=getLuminance(finalSpecularScaled);\n#endif\n#if defined(CLEARCOAT) && defined(CLEARCOATOVERALPHA)\nluminanceOverAlpha+=getLuminance(finalClearCoatScaled);\n#endif\n#if defined(RADIANCEOVERALPHA) || defined(SPECULAROVERALPHA)\nalpha=saturate(alpha+luminanceOverAlpha*luminanceOverAlpha);\n#endif\n#endif\n#endif\n\n\nvec3 finalDiffuse=diffuseBase;\nfinalDiffuse*=surfaceAlbedo.rgb;\nfinalDiffuse=max(finalDiffuse,0.0);\n\nvec3 finalAmbient=vAmbientColor;\nfinalAmbient*=surfaceAlbedo.rgb;\n\nvec3 finalEmissive=vEmissiveColor;\n#ifdef EMISSIVE\nvec3 emissiveColorTex=texture2D(emissiveSampler,vEmissiveUV+uvOffset).rgb;\nfinalEmissive*=toLinearSpace(emissiveColorTex.rgb);\nfinalEmissive*=vEmissiveInfos.y;\n#endif\n\n#ifdef AMBIENT\nvec3 ambientOcclusionForDirectDiffuse=mix(vec3(1.),ambientOcclusionColor,vAmbientInfos.w);\n#else\nvec3 ambientOcclusionForDirectDiffuse=ambientOcclusionColor;\n#endif\n\n\n\nvec4 finalColor=vec4(\nfinalAmbient*ambientOcclusionColor +\nfinalDiffuse*ambientOcclusionForDirectDiffuse*vLightingIntensity.x +\n#ifndef UNLIT\n#ifdef REFLECTION\nfinalIrradiance*ambientOcclusionColor*vLightingIntensity.z +\n#endif\n#ifdef SPECULARTERM\n\n\nfinalSpecularScaled +\n#endif\n#ifdef CLEARCOAT\n\n\nfinalClearCoatScaled +\n#endif\n#ifdef SHEEN\n\n\nfinalSheenScaled +\n#endif\n#ifdef REFLECTION\n\n\nfinalRadianceScaled +\n#ifdef CLEARCOAT\n\n\nfinalClearCoatRadianceScaled +\n#endif\n#ifdef SHEEN\n\n\nfinalSheenRadianceScaled +\n#endif\n#endif\n#ifdef SS_REFRACTION\nfinalRefraction*vLightingIntensity.z +\n#endif\n#endif\nfinalEmissive*vLightingIntensity.y,\nalpha);\n\n#ifdef LIGHTMAP\n#ifndef LIGHTMAPEXCLUDED\n#ifdef USELIGHTMAPASSHADOWMAP\nfinalColor.rgb*=lightmapColor;\n#else\nfinalColor.rgb+=lightmapColor;\n#endif\n#endif\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_FOG\n\nfinalColor=max(finalColor,0.0);\n#include<logDepthFragment>\n#include<fogFragment>(color,finalColor)\n#ifdef IMAGEPROCESSINGPOSTPROCESS\n\n\nfinalColor.rgb=clamp(finalColor.rgb,0.,30.0);\n#else\n\nfinalColor=applyImageProcessing(finalColor);\n#endif\nfinalColor.a*=visibility;\n#ifdef PREMULTIPLYALPHA\n\nfinalColor.rgb*=finalColor.a;\n#endif\n#define CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR\ngl_FragColor=finalColor;\n#include<pbrDebug>\n}\n";
|
|
zt.a.ShadersStore.pbrPixelShader = Nr;
|
|
var Br = "uniform mat4 view;\nuniform mat4 viewProjection;\n#ifdef ALBEDO\nuniform mat4 albedoMatrix;\nuniform vec2 vAlbedoInfos;\n#endif\n#ifdef AMBIENT\nuniform mat4 ambientMatrix;\nuniform vec4 vAmbientInfos;\n#endif\n#ifdef OPACITY\nuniform mat4 opacityMatrix;\nuniform vec2 vOpacityInfos;\n#endif\n#ifdef EMISSIVE\nuniform vec2 vEmissiveInfos;\nuniform mat4 emissiveMatrix;\n#endif\n#ifdef LIGHTMAP\nuniform vec2 vLightmapInfos;\nuniform mat4 lightmapMatrix;\n#endif\n#ifdef REFLECTIVITY\nuniform vec3 vReflectivityInfos;\nuniform mat4 reflectivityMatrix;\n#endif\n#ifdef MICROSURFACEMAP\nuniform vec2 vMicroSurfaceSamplerInfos;\nuniform mat4 microSurfaceSamplerMatrix;\n#endif\n#ifdef BUMP\nuniform vec3 vBumpInfos;\nuniform mat4 bumpMatrix;\n#endif\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif\n\n#ifdef REFLECTION\nuniform vec2 vReflectionInfos;\nuniform mat4 reflectionMatrix;\n#endif\n\n#ifdef CLEARCOAT\n#ifdef CLEARCOAT_TEXTURE\nuniform vec2 vClearCoatInfos;\nuniform mat4 clearCoatMatrix;\n#endif\n#ifdef CLEARCOAT_BUMP\nuniform vec2 vClearCoatBumpInfos;\nuniform mat4 clearCoatBumpMatrix;\n#endif\n#ifdef CLEARCOAT_TINT_TEXTURE\nuniform vec2 vClearCoatTintInfos;\nuniform mat4 clearCoatTintMatrix;\n#endif\n#endif\n\n#ifdef ANISOTROPIC\n#ifdef ANISOTROPIC_TEXTURE\nuniform vec2 vAnisotropyInfos;\nuniform mat4 anisotropyMatrix;\n#endif\n#endif\n\n#ifdef SHEEN\n#ifdef SHEEN_TEXTURE\nuniform vec2 vSheenInfos;\nuniform mat4 sheenMatrix;\n#endif\n#endif\n\n#ifdef SUBSURFACE\n#ifdef SS_REFRACTION\nuniform vec4 vRefractionInfos;\nuniform mat4 refractionMatrix;\n#endif\n#ifdef SS_THICKNESSANDMASK_TEXTURE\nuniform vec2 vThicknessInfos;\nuniform mat4 thicknessMatrix;;\n#endif\n#endif\n";
|
|
zt.a.IncludesShadersStore.pbrVertexDeclaration = Br;
|
|
i(124), i(101), i(102), i(103), i(125), i(118);
|
|
var Ur = "precision highp float;\n#include<__decl__pbrVertex>\n#define CUSTOM_VERTEX_BEGIN\n\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#ifdef TANGENT\nattribute vec4 tangent;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#ifdef MAINUV1\nvarying vec2 vMainUV1;\n#endif\n#ifdef MAINUV2\nvarying vec2 vMainUV2;\n#endif\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<helperFunctions>\n#include<bonesDeclaration>\n\n#include<instancesDeclaration>\n#if defined(ALBEDO) && ALBEDODIRECTUV == 0\nvarying vec2 vAlbedoUV;\n#endif\n#if defined(AMBIENT) && AMBIENTDIRECTUV == 0\nvarying vec2 vAmbientUV;\n#endif\n#if defined(OPACITY) && OPACITYDIRECTUV == 0\nvarying vec2 vOpacityUV;\n#endif\n#if defined(EMISSIVE) && EMISSIVEDIRECTUV == 0\nvarying vec2 vEmissiveUV;\n#endif\n#if defined(LIGHTMAP) && LIGHTMAPDIRECTUV == 0\nvarying vec2 vLightmapUV;\n#endif\n#if defined(REFLECTIVITY) && REFLECTIVITYDIRECTUV == 0\nvarying vec2 vReflectivityUV;\n#endif\n#if defined(MICROSURFACEMAP) && MICROSURFACEMAPDIRECTUV == 0\nvarying vec2 vMicroSurfaceSamplerUV;\n#endif\n#if defined(BUMP) && BUMPDIRECTUV == 0\nvarying vec2 vBumpUV;\n#endif\n#ifdef CLEARCOAT\n#if defined(CLEARCOAT_TEXTURE) && CLEARCOAT_TEXTUREDIRECTUV == 0\nvarying vec2 vClearCoatUV;\n#endif\n#if defined(CLEARCOAT_BUMP) && CLEARCOAT_BUMPDIRECTUV == 0\nvarying vec2 vClearCoatBumpUV;\n#endif\n#if defined(CLEARCOAT_TINT_TEXTURE) && CLEARCOAT_TINT_TEXTUREDIRECTUV == 0\nvarying vec2 vClearCoatTintUV;\n#endif\n#endif\n#ifdef SHEEN\n#if defined(SHEEN_TEXTURE) && SHEEN_TEXTUREDIRECTUV == 0\nvarying vec2 vSheenUV;\n#endif\n#endif\n#ifdef ANISOTROPIC\n#if defined(ANISOTROPIC_TEXTURE) && ANISOTROPIC_TEXTUREDIRECTUV == 0\nvarying vec2 vAnisotropyUV;\n#endif\n#endif\n#ifdef SUBSURFACE\n#if defined(SS_THICKNESSANDMASK_TEXTURE) && SS_THICKNESSANDMASK_TEXTUREDIRECTUV == 0\nvarying vec2 vThicknessUV;\n#endif\n#endif\n\nvarying vec3 vPositionW;\n#if DEBUGMODE>0\nvarying vec4 vClipSpacePosition;\n#endif\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\nvarying vec3 vEnvironmentIrradiance;\n#include<harmonicsFunctions>\n#endif\n#endif\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n#include<bumpVertexDeclaration>\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\nvarying vec3 vPositionUVW;\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvarying vec3 vDirectionW;\n#endif\n#include<logDepthDeclaration>\n#define CUSTOM_VERTEX_DEFINITIONS\nvoid main(void) {\n#define CUSTOM_VERTEX_MAIN_BEGIN\nvec3 positionUpdated=position;\n#ifdef NORMAL\nvec3 normalUpdated=normal;\n#endif\n#ifdef TANGENT\nvec4 tangentUpdated=tangent;\n#endif\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#ifdef REFLECTIONMAP_SKYBOX\n#ifdef REFLECTIONMAP_SKYBOX_TRANSFORMED\nvPositionUVW=(reflectionMatrix*vec4(positionUpdated,1.0)).xyz;\n#else\nvPositionUVW=positionUpdated;\n#endif\n#endif\n#define CUSTOM_VERTEX_UPDATE_POSITION\n#define CUSTOM_VERTEX_UPDATE_NORMAL\n#include<instancesVertex>\n#include<bonesVertex>\n#ifdef MULTIVIEW\nif (gl_ViewID_OVR == 0u) {\ngl_Position=viewProjection*finalWorld*vec4(positionUpdated,1.0);\n} else {\ngl_Position=viewProjectionR*finalWorld*vec4(positionUpdated,1.0);\n}\n#else\ngl_Position=viewProjection*finalWorld*vec4(positionUpdated,1.0);\n#endif\n#if DEBUGMODE>0\nvClipSpacePosition=gl_Position;\n#endif\nvec4 worldPos=finalWorld*vec4(positionUpdated,1.0);\nvPositionW=vec3(worldPos);\n#ifdef NORMAL\nmat3 normalWorld=mat3(finalWorld);\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvNormalW=normalize(normalWorld*normalUpdated);\n#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\nvec3 reflectionVector=vec3(reflectionMatrix*vec4(vNormalW,0)).xyz;\n#ifdef REFLECTIONMAP_OPPOSITEZ\nreflectionVector.z*=-1.0;\n#endif\nvEnvironmentIrradiance=computeEnvironmentIrradiance(reflectionVector);\n#endif\n#endif\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvDirectionW=normalize(vec3(finalWorld*vec4(positionUpdated,0.0)));\n#endif\n\n#ifndef UV1\nvec2 uv=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2=vec2(0.,0.);\n#endif\n#ifdef MAINUV1\nvMainUV1=uv;\n#endif\n#ifdef MAINUV2\nvMainUV2=uv2;\n#endif\n#if defined(ALBEDO) && ALBEDODIRECTUV == 0\nif (vAlbedoInfos.x == 0.)\n{\nvAlbedoUV=vec2(albedoMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvAlbedoUV=vec2(albedoMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(AMBIENT) && AMBIENTDIRECTUV == 0\nif (vAmbientInfos.x == 0.)\n{\nvAmbientUV=vec2(ambientMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvAmbientUV=vec2(ambientMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(OPACITY) && OPACITYDIRECTUV == 0\nif (vOpacityInfos.x == 0.)\n{\nvOpacityUV=vec2(opacityMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvOpacityUV=vec2(opacityMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(EMISSIVE) && EMISSIVEDIRECTUV == 0\nif (vEmissiveInfos.x == 0.)\n{\nvEmissiveUV=vec2(emissiveMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvEmissiveUV=vec2(emissiveMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(LIGHTMAP) && LIGHTMAPDIRECTUV == 0\nif (vLightmapInfos.x == 0.)\n{\nvLightmapUV=vec2(lightmapMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvLightmapUV=vec2(lightmapMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(REFLECTIVITY) && REFLECTIVITYDIRECTUV == 0\nif (vReflectivityInfos.x == 0.)\n{\nvReflectivityUV=vec2(reflectivityMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvReflectivityUV=vec2(reflectivityMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(MICROSURFACEMAP) && MICROSURFACEMAPDIRECTUV == 0\nif (vMicroSurfaceSamplerInfos.x == 0.)\n{\nvMicroSurfaceSamplerUV=vec2(microSurfaceSamplerMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvMicroSurfaceSamplerUV=vec2(microSurfaceSamplerMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(BUMP) && BUMPDIRECTUV == 0\nif (vBumpInfos.x == 0.)\n{\nvBumpUV=vec2(bumpMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvBumpUV=vec2(bumpMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#ifdef CLEARCOAT\n#if defined(CLEARCOAT_TEXTURE) && CLEARCOAT_TEXTUREDIRECTUV == 0\nif (vClearCoatInfos.x == 0.)\n{\nvClearCoatUV=vec2(clearCoatMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvClearCoatUV=vec2(clearCoatMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(CLEARCOAT_BUMP) && CLEARCOAT_BUMPDIRECTUV == 0\nif (vClearCoatBumpInfos.x == 0.)\n{\nvClearCoatBumpUV=vec2(clearCoatBumpMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvClearCoatBumpUV=vec2(clearCoatBumpMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#if defined(CLEARCOAT_TINT_TEXTURE) && CLEARCOAT_TINT_TEXTUREDIRECTUV == 0\nif (vClearCoatTintInfos.x == 0.)\n{\nvClearCoatTintUV=vec2(clearCoatTintMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvClearCoatTintUV=vec2(clearCoatTintMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#endif\n#ifdef SHEEN\n#if defined(SHEEN_TEXTURE) && SHEEN_TEXTUREDIRECTUV == 0\nif (vSheenInfos.x == 0.)\n{\nvSheenUV=vec2(sheenMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvSheenUV=vec2(sheenMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#endif\n#ifdef ANISOTROPIC\n#if defined(ANISOTROPIC_TEXTURE) && ANISOTROPIC_TEXTUREDIRECTUV == 0\nif (vAnisotropyInfos.x == 0.)\n{\nvAnisotropyUV=vec2(anisotropyMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvAnisotropyUV=vec2(anisotropyMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#endif\n#ifdef SUBSURFACE\n#if defined(SS_THICKNESSANDMASK_TEXTURE) && SS_THICKNESSANDMASK_TEXTUREDIRECTUV == 0\nif (vThicknessInfos.x == 0.)\n{\nvThicknessUV=vec2(thicknessMatrix*vec4(uv,1.0,0.0));\n}\nelse\n{\nvThicknessUV=vec2(thicknessMatrix*vec4(uv2,1.0,0.0));\n}\n#endif\n#endif\n\n#include<bumpVertex>\n\n#include<clipPlaneVertex>\n\n#include<fogVertex>\n\n#include<shadowsVertex>[0..maxSimultaneousLights]\n\n#ifdef VERTEXCOLOR\nvColor=color;\n#endif\n\n#ifdef POINTSIZE\ngl_PointSize=pointSize;\n#endif\n\n#include<logDepthVertex>\n#define CUSTOM_VERTEX_MAIN_END\n}";
|
|
zt.a.ShadersStore.pbrVertexShader = Ur;
|
|
var Vr = function(e) {
|
|
function t() {
|
|
var t = e.call(this) || this;
|
|
return t.PBR = !0, t.MAINUV1 = !1, t.MAINUV2 = !1, t.UV1 = !1, t.UV2 = !1, t.ALBEDO = !1, t.ALBEDODIRECTUV = 0, t.VERTEXCOLOR = !1, t.AMBIENT = !1, t.AMBIENTDIRECTUV = 0, t.AMBIENTINGRAYSCALE = !1, t.OPACITY = !1, t.VERTEXALPHA = !1, t.OPACITYDIRECTUV = 0, t.OPACITYRGB = !1, t.ALPHATEST = !1, t.DEPTHPREPASS = !1, t.ALPHABLEND = !1, t.ALPHAFROMALBEDO = !1, t.ALPHATESTVALUE = "0.5", t.SPECULAROVERALPHA = !1, t.RADIANCEOVERALPHA = !1, t.ALPHAFRESNEL = !1, t.LINEARALPHAFRESNEL = !1, t.PREMULTIPLYALPHA = !1, t.EMISSIVE = !1, t.EMISSIVEDIRECTUV = 0, t.REFLECTIVITY = !1, t.REFLECTIVITYDIRECTUV = 0, t.SPECULARTERM = !1, t.MICROSURFACEFROMREFLECTIVITYMAP = !1, t.MICROSURFACEAUTOMATIC = !1, t.LODBASEDMICROSFURACE = !1, t.MICROSURFACEMAP = !1, t.MICROSURFACEMAPDIRECTUV = 0, t.METALLICWORKFLOW = !1, t.ROUGHNESSSTOREINMETALMAPALPHA = !1, t.ROUGHNESSSTOREINMETALMAPGREEN = !1, t.METALLNESSSTOREINMETALMAPBLUE = !1, t.AOSTOREINMETALMAPRED = !1, t.ENVIRONMENTBRDF = !1, t.ENVIRONMENTBRDF_RGBD = !1, t.NORMAL = !1, t.TANGENT = !1, t.BUMP = !1, t.BUMPDIRECTUV = 0, t.OBJECTSPACE_NORMALMAP = !1, t.PARALLAX = !1, t.PARALLAXOCCLUSION = !1, t.NORMALXYSCALE = !0, t.LIGHTMAP = !1, t.LIGHTMAPDIRECTUV = 0, t.USELIGHTMAPASSHADOWMAP = !1, t.GAMMALIGHTMAP = !1, t.REFLECTION = !1, t.REFLECTIONMAP_3D = !1, t.REFLECTIONMAP_SPHERICAL = !1, t.REFLECTIONMAP_PLANAR = !1, t.REFLECTIONMAP_CUBIC = !1, t.USE_LOCAL_REFLECTIONMAP_CUBIC = !1, t.REFLECTIONMAP_PROJECTION = !1, t.REFLECTIONMAP_SKYBOX = !1, t.REFLECTIONMAP_SKYBOX_TRANSFORMED = !1, t.REFLECTIONMAP_EXPLICIT = !1, t.REFLECTIONMAP_EQUIRECTANGULAR = !1, t.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = !1, t.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = !1, t.INVERTCUBICMAP = !1, t.USESPHERICALFROMREFLECTIONMAP = !1, t.SPHERICAL_HARMONICS = !1, t.USESPHERICALINVERTEX = !1, t.REFLECTIONMAP_OPPOSITEZ = !1, t.LODINREFLECTIONALPHA = !1, t.GAMMAREFLECTION = !1, t.RGBDREFLECTION = !1, t.RADIANCEOCCLUSION = !1, t.HORIZONOCCLUSION = !1, t.INSTANCES = !1, t.NUM_BONE_INFLUENCERS = 0, t.BonesPerMesh = 0, t.BONETEXTURE = !1, t.NONUNIFORMSCALING = !1, t.MORPHTARGETS = !1, t.MORPHTARGETS_NORMAL = !1, t.MORPHTARGETS_TANGENT = !1, t.NUM_MORPH_INFLUENCERS = 0, t.IMAGEPROCESSING = !1, t.VIGNETTE = !1, t.VIGNETTEBLENDMODEMULTIPLY = !1, t.VIGNETTEBLENDMODEOPAQUE = !1, t.TONEMAPPING = !1, t.TONEMAPPING_ACES = !1, t.CONTRAST = !1, t.COLORCURVES = !1, t.COLORGRADING = !1, t.COLORGRADING3D = !1, t.SAMPLER3DGREENDEPTH = !1, t.SAMPLER3DBGRMAP = !1, t.IMAGEPROCESSINGPOSTPROCESS = !1, t.EXPOSURE = !1, t.MULTIVIEW = !1, t.USEPHYSICALLIGHTFALLOFF = !1, t.USEGLTFLIGHTFALLOFF = !1, t.TWOSIDEDLIGHTING = !1, t.SHADOWFLOAT = !1, t.CLIPPLANE = !1, t.CLIPPLANE2 = !1, t.CLIPPLANE3 = !1, t.CLIPPLANE4 = !1, t.POINTSIZE = !1, t.FOG = !1, t.LOGARITHMICDEPTH = !1, t.FORCENORMALFORWARD = !1, t.SPECULARAA = !1, t.CLEARCOAT = !1, t.CLEARCOAT_DEFAULTIOR = !1, t.CLEARCOAT_TEXTURE = !1, t.CLEARCOAT_TEXTUREDIRECTUV = 0, t.CLEARCOAT_BUMP = !1, t.CLEARCOAT_BUMPDIRECTUV = 0, t.CLEARCOAT_TINT = !1, t.CLEARCOAT_TINT_TEXTURE = !1, t.CLEARCOAT_TINT_TEXTUREDIRECTUV = 0, t.ANISOTROPIC = !1, t.ANISOTROPIC_TEXTURE = !1, t.ANISOTROPIC_TEXTUREDIRECTUV = 0, t.BRDF_V_HEIGHT_CORRELATED = !1, t.MS_BRDF_ENERGY_CONSERVATION = !1, t.SHEEN = !1, t.SHEEN_TEXTURE = !1, t.SHEEN_TEXTUREDIRECTUV = 0, t.SHEEN_LINKWITHALBEDO = !1, t.SUBSURFACE = !1, t.SS_REFRACTION = !1, t.SS_TRANSLUCENCY = !1, t.SS_SCATERRING = !1, t.SS_THICKNESSANDMASK_TEXTURE = !1, t.SS_THICKNESSANDMASK_TEXTUREDIRECTUV = 0, t.SS_REFRACTIONMAP_3D = !1, t.SS_REFRACTIONMAP_OPPOSITEZ = !1, t.SS_LODINREFRACTIONALPHA = !1, t.SS_GAMMAREFRACTION = !1, t.SS_RGBDREFRACTION = !1, t.SS_LINKREFRACTIONTOTRANSPARENCY = !1, t.SS_MASK_FROM_THICKNESS_TEXTURE = !1, t.UNLIT = !1, t.DEBUGMODE = 0, t.rebuild(), t
|
|
}
|
|
return l.d(t, e), t.prototype.reset = function() {
|
|
e.prototype.reset.call(this), this.ALPHATESTVALUE = "0.5", this.PBR = !0
|
|
}, t
|
|
}(nr.a),
|
|
Gr = function(e) {
|
|
function t(i, n) {
|
|
var r = e.call(this, i, n) || this;
|
|
return r._directIntensity = 1, r._emissiveIntensity = 1, r._environmentIntensity = 1, r._specularIntensity = 1, r._lightingInfos = new o.y(r._directIntensity, r._emissiveIntensity, r._environmentIntensity, r._specularIntensity), r._disableBumpMap = !1, r._albedoTexture = null, r._ambientTexture = null, r._ambientTextureStrength = 1, r._ambientTextureImpactOnAnalyticalLights = t.DEFAULT_AO_ON_ANALYTICAL_LIGHTS, r._opacityTexture = null, r._reflectionTexture = null, r._emissiveTexture = null, r._reflectivityTexture = null, r._metallicTexture = null, r._metallic = null, r._roughness = null, r._microSurfaceTexture = null, r._bumpTexture = null, r._lightmapTexture = null, r._ambientColor = new o.e(0, 0, 0), r._albedoColor = new o.e(1, 1, 1), r._reflectivityColor = new o.e(1, 1, 1), r._reflectionColor = new o.e(1, 1, 1), r._emissiveColor = new o.e(0, 0, 0), r._microSurface = .9, r._useLightmapAsShadowmap = !1, r._useHorizonOcclusion = !0, r._useRadianceOcclusion = !0, r._useAlphaFromAlbedoTexture = !1, r._useSpecularOverAlpha = !0, r._useMicroSurfaceFromReflectivityMapAlpha = !1, r._useRoughnessFromMetallicTextureAlpha = !0, r._useRoughnessFromMetallicTextureGreen = !1, r._useMetallnessFromMetallicTextureBlue = !1, r._useAmbientOcclusionFromMetallicTextureRed = !1, r._useAmbientInGrayScale = !1, r._useAutoMicroSurfaceFromReflectivityMap = !1, r._lightFalloff = t.LIGHTFALLOFF_PHYSICAL, r._useRadianceOverAlpha = !0, r._useObjectSpaceNormalMap = !1, r._useParallax = !1, r._useParallaxOcclusion = !1, r._parallaxScaleBias = .05, r._disableLighting = !1, r._maxSimultaneousLights = 4, r._invertNormalMapX = !1, r._invertNormalMapY = !1, r._twoSidedLighting = !1, r._alphaCutOff = .4, r._forceAlphaTest = !1, r._useAlphaFresnel = !1, r._useLinearAlphaFresnel = !1, r._transparencyMode = null, r._environmentBRDFTexture = null, r._forceIrradianceInFragment = !1, r._forceNormalForward = !1, r._enableSpecularAntiAliasing = !1, r._imageProcessingObserver = null, r._renderTargets = new kt.a(16), r._globalAmbientColor = new o.e(0, 0, 0), r._useLogarithmicDepth = !1, r._unlit = !1, r._debugMode = 0, r.debugMode = 0, r.debugLimit = -1, r.debugFactor = 1, r.clearCoat = new yr(r._markAllSubMeshesAsTexturesDirty.bind(r)), r.anisotropy = new br(r._markAllSubMeshesAsTexturesDirty.bind(r)), r.brdf = new Tr(r._markAllSubMeshesAsMiscDirty.bind(r)), r.sheen = new Er(r._markAllSubMeshesAsTexturesDirty.bind(r)), r.subSurface = new Ar(r._markAllSubMeshesAsTexturesDirty.bind(r)), r._attachImageProcessingConfiguration(null), r.getRenderTargetTextures = function() {
|
|
return r._renderTargets.reset(), or.a.ReflectionTextureEnabled && r._reflectionTexture && r._reflectionTexture.isRenderTarget && r._renderTargets.push(r._reflectionTexture), r.subSurface.fillRenderTargetTextures(r._renderTargets), r._renderTargets
|
|
}, r._environmentBRDFTexture = vr.GetEnvironmentBRDFTexture(n), r
|
|
}
|
|
return l.d(t, e), t.prototype._attachImageProcessingConfiguration = function(e) {
|
|
var t = this;
|
|
e !== this._imageProcessingConfiguration && (this._imageProcessingConfiguration && this._imageProcessingObserver && this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver), this._imageProcessingConfiguration = e || this.getScene().imageProcessingConfiguration, this._imageProcessingConfiguration && (this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(function() {
|
|
t._markAllSubMeshesAsImageProcessingDirty()
|
|
})))
|
|
}, Object.defineProperty(t.prototype, "hasRenderTargetTextures", {
|
|
get: function() {
|
|
return !!(or.a.ReflectionTextureEnabled && this._reflectionTexture && this._reflectionTexture.isRenderTarget) || this.subSurface.hasRenderTargetTextures()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "PBRBaseMaterial"
|
|
}, Object.defineProperty(t.prototype, "useLogarithmicDepth", {
|
|
get: function() {
|
|
return this._useLogarithmicDepth
|
|
},
|
|
set: function(e) {
|
|
this._useLogarithmicDepth = e && this.getScene().getEngine().getCaps().fragmentDepthSupported
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "transparencyMode", {
|
|
get: function() {
|
|
return this._transparencyMode
|
|
},
|
|
set: function(e) {
|
|
this._transparencyMode !== e && (this._transparencyMode = e, this._forceAlphaTest = e === t.PBRMATERIAL_ALPHATESTANDBLEND, this._markAllSubMeshesAsTexturesAndMiscDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "_disableAlphaBlending", {
|
|
get: function() {
|
|
return this.subSurface.disableAlphaBlending || this._transparencyMode === t.PBRMATERIAL_OPAQUE || this._transparencyMode === t.PBRMATERIAL_ALPHATEST
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.needAlphaBlending = function() {
|
|
return !this._disableAlphaBlending && (this.alpha < 1 || null != this._opacityTexture || this._shouldUseAlphaFromAlbedoTexture())
|
|
}, t.prototype.needAlphaBlendingForMesh = function(t) {
|
|
return !(this._disableAlphaBlending && t.visibility >= 1) && e.prototype.needAlphaBlendingForMesh.call(this, t)
|
|
}, t.prototype.needAlphaTesting = function() {
|
|
return !!this._forceAlphaTest || !this.subSurface.disableAlphaBlending && (null != this._albedoTexture && this._albedoTexture.hasAlpha && (null == this._transparencyMode || this._transparencyMode === t.PBRMATERIAL_ALPHATEST))
|
|
}, t.prototype._shouldUseAlphaFromAlbedoTexture = function() {
|
|
return null != this._albedoTexture && this._albedoTexture.hasAlpha && this._useAlphaFromAlbedoTexture && this._transparencyMode !== t.PBRMATERIAL_OPAQUE
|
|
}, t.prototype.getAlphaTestTexture = function() {
|
|
return this._albedoTexture
|
|
}, t.prototype.isReadyForSubMesh = function(e, t, i) {
|
|
if (t.effect && this.isFrozen && this._wasPreviouslyReady) return !0;
|
|
t._materialDefines || (t._materialDefines = new Vr);
|
|
var n = t._materialDefines;
|
|
if (!this.checkReadyOnEveryCall && t.effect && n._renderId === this.getScene().getRenderId()) return !0;
|
|
var r = this.getScene(),
|
|
o = r.getEngine();
|
|
if (n._areTexturesDirty && r.texturesEnabled) {
|
|
if (this._albedoTexture && or.a.DiffuseTextureEnabled && !this._albedoTexture.isReadyOrNotBlocking()) return !1;
|
|
if (this._ambientTexture && or.a.AmbientTextureEnabled && !this._ambientTexture.isReadyOrNotBlocking()) return !1;
|
|
if (this._opacityTexture && or.a.OpacityTextureEnabled && !this._opacityTexture.isReadyOrNotBlocking()) return !1;
|
|
var s = this._getReflectionTexture();
|
|
if (s && or.a.ReflectionTextureEnabled && !s.isReadyOrNotBlocking()) return !1;
|
|
if (this._lightmapTexture && or.a.LightmapTextureEnabled && !this._lightmapTexture.isReadyOrNotBlocking()) return !1;
|
|
if (this._emissiveTexture && or.a.EmissiveTextureEnabled && !this._emissiveTexture.isReadyOrNotBlocking()) return !1;
|
|
if (or.a.SpecularTextureEnabled) {
|
|
if (this._metallicTexture) {
|
|
if (!this._metallicTexture.isReadyOrNotBlocking()) return !1
|
|
} else if (this._reflectivityTexture && !this._reflectivityTexture.isReadyOrNotBlocking()) return !1;
|
|
if (this._microSurfaceTexture && !this._microSurfaceTexture.isReadyOrNotBlocking()) return !1
|
|
}
|
|
if (o.getCaps().standardDerivatives && this._bumpTexture && or.a.BumpTextureEnabled && !this._disableBumpMap && !this._bumpTexture.isReady()) return !1;
|
|
if (this._environmentBRDFTexture && or.a.ReflectionTextureEnabled && !this._environmentBRDFTexture.isReady()) return !1
|
|
}
|
|
if (!(this.subSurface.isReadyForSubMesh(n, r) && this.clearCoat.isReadyForSubMesh(n, r, o, this._disableBumpMap) && this.sheen.isReadyForSubMesh(n, r) && this.anisotropy.isReadyForSubMesh(n, r))) return !1;
|
|
if (n._areImageProcessingDirty && this._imageProcessingConfiguration && !this._imageProcessingConfiguration.isReady()) return !1;
|
|
o.getCaps().standardDerivatives || e.isVerticesDataPresent(Oi.b.NormalKind) || (e.createNormals(!0), p.a.Warn("PBRMaterial: Normals have been created for the mesh: " + e.name));
|
|
var a = t.effect,
|
|
c = this._prepareEffect(e, n, this.onCompiled, this.onError, i);
|
|
return c && (this.allowShaderHotSwapping && a && !c.isReady() ? (c = a, n.markAsUnprocessed()) : (r.resetCachedMaterial(), t.setEffect(c, n), this.buildUniformLayout())), !(!t.effect || !t.effect.isReady()) && (n._renderId = r.getRenderId(), this._wasPreviouslyReady = !0, !0)
|
|
}, t.prototype.isMetallicWorkflow = function() {
|
|
return !(null == this._metallic && null == this._roughness && !this._metallicTexture)
|
|
}, t.prototype._prepareEffect = function(e, t, i, n, r, o) {
|
|
if (void 0 === i && (i = null), void 0 === n && (n = null), void 0 === r && (r = null), void 0 === o && (o = null), this._prepareDefines(e, t, r, o), !t.isDirty) return null;
|
|
t.markAsProcessed();
|
|
var s = this.getScene().getEngine(),
|
|
a = new zt.c,
|
|
c = 0;
|
|
t.USESPHERICALINVERTEX && a.addFallback(c++, "USESPHERICALINVERTEX"), t.FOG && a.addFallback(c, "FOG"), t.SPECULARAA && a.addFallback(c, "SPECULARAA"), t.POINTSIZE && a.addFallback(c, "POINTSIZE"), t.LOGARITHMICDEPTH && a.addFallback(c, "LOGARITHMICDEPTH"), t.PARALLAX && a.addFallback(c, "PARALLAX"), t.PARALLAXOCCLUSION && a.addFallback(c++, "PARALLAXOCCLUSION"), c = br.AddFallbacks(t, a, c), c = br.AddFallbacks(t, a, c), c = Ar.AddFallbacks(t, a, c), c = Er.AddFallbacks(t, a, c), t.ENVIRONMENTBRDF && a.addFallback(c++, "ENVIRONMENTBRDF"), t.TANGENT && a.addFallback(c++, "TANGENT"), t.BUMP && a.addFallback(c++, "BUMP"), c = ir.a.HandleFallbacksForShadows(t, a, this._maxSimultaneousLights, c++), t.SPECULARTERM && a.addFallback(c++, "SPECULARTERM"), t.USESPHERICALFROMREFLECTIONMAP && a.addFallback(c++, "USESPHERICALFROMREFLECTIONMAP"), t.LIGHTMAP && a.addFallback(c++, "LIGHTMAP"), t.NORMAL && a.addFallback(c++, "NORMAL"), t.AMBIENT && a.addFallback(c++, "AMBIENT"), t.EMISSIVE && a.addFallback(c++, "EMISSIVE"), t.VERTEXCOLOR && a.addFallback(c++, "VERTEXCOLOR"), t.NUM_BONE_INFLUENCERS > 0 && a.addCPUSkinningFallback(c++, e), t.MORPHTARGETS && a.addFallback(c++, "MORPHTARGETS"), t.MULTIVIEW && a.addFallback(0, "MULTIVIEW");
|
|
var l = [Oi.b.PositionKind];
|
|
t.NORMAL && l.push(Oi.b.NormalKind), t.TANGENT && l.push(Oi.b.TangentKind), t.UV1 && l.push(Oi.b.UVKind), t.UV2 && l.push(Oi.b.UV2Kind), t.VERTEXCOLOR && l.push(Oi.b.ColorKind), ir.a.PrepareAttributesForBones(l, e, t, a), ir.a.PrepareAttributesForInstances(l, t), ir.a.PrepareAttributesForMorphTargets(l, e, t);
|
|
var u = "pbr",
|
|
h = ["world", "view", "viewProjection", "vEyePosition", "vLightsType", "vAmbientColor", "vAlbedoColor", "vReflectivityColor", "vEmissiveColor", "visibility", "vReflectionColor", "vFogInfos", "vFogColor", "pointSize", "vAlbedoInfos", "vAmbientInfos", "vOpacityInfos", "vReflectionInfos", "vReflectionPosition", "vReflectionSize", "vEmissiveInfos", "vReflectivityInfos", "vMicroSurfaceSamplerInfos", "vBumpInfos", "vLightmapInfos", "mBones", "vClipPlane", "vClipPlane2", "vClipPlane3", "vClipPlane4", "albedoMatrix", "ambientMatrix", "opacityMatrix", "reflectionMatrix", "emissiveMatrix", "reflectivityMatrix", "normalMatrix", "microSurfaceSamplerMatrix", "bumpMatrix", "lightmapMatrix", "vLightingIntensity", "logarithmicDepthConstant", "vSphericalX", "vSphericalY", "vSphericalZ", "vSphericalXX_ZZ", "vSphericalYY_ZZ", "vSphericalZZ", "vSphericalXY", "vSphericalYZ", "vSphericalZX", "vSphericalL00", "vSphericalL1_1", "vSphericalL10", "vSphericalL11", "vSphericalL2_2", "vSphericalL2_1", "vSphericalL20", "vSphericalL21", "vSphericalL22", "vReflectionMicrosurfaceInfos", "vTangentSpaceParams", "boneTextureWidth", "vDebugMode"],
|
|
d = ["albedoSampler", "reflectivitySampler", "ambientSampler", "emissiveSampler", "bumpSampler", "lightmapSampler", "opacitySampler", "reflectionSampler", "reflectionSamplerLow", "reflectionSamplerHigh", "microSurfaceSampler", "environmentBrdfSampler", "boneSampler"],
|
|
f = ["Material", "Scene"];
|
|
Ar.AddUniforms(h), Ar.AddSamplers(d), yr.AddUniforms(h), yr.AddSamplers(d), br.AddUniforms(h), br.AddSamplers(d), Er.AddUniforms(h), Er.AddSamplers(d), xi.a && (xi.a.PrepareUniforms(h, t), xi.a.PrepareSamplers(d, t)), ir.a.PrepareUniformsAndSamplersList({
|
|
uniformsNames: h,
|
|
uniformBuffersNames: f,
|
|
samplers: d,
|
|
defines: t,
|
|
maxSimultaneousLights: this._maxSimultaneousLights
|
|
}), this.customShaderNameResolve && (u = this.customShaderNameResolve(u, h, f, d, t));
|
|
var p = t.toString();
|
|
return s.createEffect(u, {
|
|
attributes: l,
|
|
uniformsNames: h,
|
|
uniformBuffersNames: f,
|
|
samplers: d,
|
|
defines: p,
|
|
fallbacks: a,
|
|
onCompiled: i,
|
|
onError: n,
|
|
indexParameters: {
|
|
maxSimultaneousLights: this._maxSimultaneousLights,
|
|
maxSimultaneousMorphTargets: t.NUM_MORPH_INFLUENCERS
|
|
}
|
|
}, s)
|
|
}, t.prototype._prepareDefines = function(e, i, n, r) {
|
|
void 0 === n && (n = null), void 0 === r && (r = null);
|
|
var o = this.getScene(),
|
|
s = o.getEngine();
|
|
if (ir.a.PrepareDefinesForLights(o, e, i, !0, this._maxSimultaneousLights, this._disableLighting), i._needNormals = !0, ir.a.PrepareDefinesForMultiview(o, i), i.METALLICWORKFLOW = this.isMetallicWorkflow(), i._areTexturesDirty) {
|
|
if (i._needUVs = !1, o.texturesEnabled) {
|
|
o.getEngine().getCaps().textureLOD && (i.LODBASEDMICROSFURACE = !0), this._albedoTexture && or.a.DiffuseTextureEnabled ? ir.a.PrepareDefinesForMergedUV(this._albedoTexture, i, "ALBEDO") : i.ALBEDO = !1, this._ambientTexture && or.a.AmbientTextureEnabled ? (ir.a.PrepareDefinesForMergedUV(this._ambientTexture, i, "AMBIENT"), i.AMBIENTINGRAYSCALE = this._useAmbientInGrayScale) : i.AMBIENT = !1, this._opacityTexture && or.a.OpacityTextureEnabled ? (ir.a.PrepareDefinesForMergedUV(this._opacityTexture, i, "OPACITY"), i.OPACITYRGB = this._opacityTexture.getAlphaFromRGB) : i.OPACITY = !1;
|
|
var a = this._getReflectionTexture();
|
|
if (a && or.a.ReflectionTextureEnabled) {
|
|
switch (i.REFLECTION = !0, i.GAMMAREFLECTION = a.gammaSpace, i.RGBDREFLECTION = a.isRGBD, i.REFLECTIONMAP_OPPOSITEZ = this.getScene().useRightHandedSystem ? !a.invertZ : a.invertZ, i.LODINREFLECTIONALPHA = a.lodLevelInAlpha, a.coordinatesMode === ke.a.INVCUBIC_MODE && (i.INVERTCUBICMAP = !0), i.REFLECTIONMAP_3D = a.isCube, i.REFLECTIONMAP_CUBIC = !1, i.REFLECTIONMAP_EXPLICIT = !1, i.REFLECTIONMAP_PLANAR = !1, i.REFLECTIONMAP_PROJECTION = !1, i.REFLECTIONMAP_SKYBOX = !1, i.REFLECTIONMAP_SPHERICAL = !1, i.REFLECTIONMAP_EQUIRECTANGULAR = !1, i.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = !1, i.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = !1, i.REFLECTIONMAP_SKYBOX_TRANSFORMED = !1, a.coordinatesMode) {
|
|
case ke.a.EXPLICIT_MODE:
|
|
i.REFLECTIONMAP_EXPLICIT = !0;
|
|
break;
|
|
case ke.a.PLANAR_MODE:
|
|
i.REFLECTIONMAP_PLANAR = !0;
|
|
break;
|
|
case ke.a.PROJECTION_MODE:
|
|
i.REFLECTIONMAP_PROJECTION = !0;
|
|
break;
|
|
case ke.a.SKYBOX_MODE:
|
|
i.REFLECTIONMAP_SKYBOX = !0;
|
|
break;
|
|
case ke.a.SPHERICAL_MODE:
|
|
i.REFLECTIONMAP_SPHERICAL = !0;
|
|
break;
|
|
case ke.a.EQUIRECTANGULAR_MODE:
|
|
i.REFLECTIONMAP_EQUIRECTANGULAR = !0;
|
|
break;
|
|
case ke.a.FIXED_EQUIRECTANGULAR_MODE:
|
|
i.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = !0;
|
|
break;
|
|
case ke.a.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:
|
|
i.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = !0;
|
|
break;
|
|
case ke.a.CUBIC_MODE:
|
|
case ke.a.INVCUBIC_MODE:
|
|
default:
|
|
i.REFLECTIONMAP_CUBIC = !0, i.USE_LOCAL_REFLECTIONMAP_CUBIC = !!a.boundingBoxSize
|
|
}
|
|
a.coordinatesMode !== ke.a.SKYBOX_MODE ? a.sphericalPolynomial && (i.USESPHERICALFROMREFLECTIONMAP = !0, this._forceIrradianceInFragment || o.getEngine().getCaps().maxVaryingVectors <= 8 ? i.USESPHERICALINVERTEX = !1 : i.USESPHERICALINVERTEX = !0) : i.REFLECTIONMAP_SKYBOX_TRANSFORMED = !a.getReflectionTextureMatrix().isIdentity()
|
|
} else i.REFLECTION = !1, i.REFLECTIONMAP_3D = !1, i.REFLECTIONMAP_SPHERICAL = !1, i.REFLECTIONMAP_PLANAR = !1, i.REFLECTIONMAP_CUBIC = !1, i.USE_LOCAL_REFLECTIONMAP_CUBIC = !1, i.REFLECTIONMAP_PROJECTION = !1, i.REFLECTIONMAP_SKYBOX = !1, i.REFLECTIONMAP_SKYBOX_TRANSFORMED = !1, i.REFLECTIONMAP_EXPLICIT = !1, i.REFLECTIONMAP_EQUIRECTANGULAR = !1, i.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = !1, i.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = !1, i.INVERTCUBICMAP = !1, i.USESPHERICALFROMREFLECTIONMAP = !1, i.USESPHERICALINVERTEX = !1, i.REFLECTIONMAP_OPPOSITEZ = !1, i.LODINREFLECTIONALPHA = !1, i.GAMMAREFLECTION = !1, i.RGBDREFLECTION = !1;
|
|
this._lightmapTexture && or.a.LightmapTextureEnabled ? (ir.a.PrepareDefinesForMergedUV(this._lightmapTexture, i, "LIGHTMAP"), i.USELIGHTMAPASSHADOWMAP = this._useLightmapAsShadowmap, i.GAMMALIGHTMAP = this._lightmapTexture.gammaSpace) : i.LIGHTMAP = !1, this._emissiveTexture && or.a.EmissiveTextureEnabled ? ir.a.PrepareDefinesForMergedUV(this._emissiveTexture, i, "EMISSIVE") : i.EMISSIVE = !1, or.a.SpecularTextureEnabled ? (this._metallicTexture ? (ir.a.PrepareDefinesForMergedUV(this._metallicTexture, i, "REFLECTIVITY"), i.ROUGHNESSSTOREINMETALMAPALPHA = this._useRoughnessFromMetallicTextureAlpha, i.ROUGHNESSSTOREINMETALMAPGREEN = !this._useRoughnessFromMetallicTextureAlpha && this._useRoughnessFromMetallicTextureGreen, i.METALLNESSSTOREINMETALMAPBLUE = this._useMetallnessFromMetallicTextureBlue, i.AOSTOREINMETALMAPRED = this._useAmbientOcclusionFromMetallicTextureRed) : this._reflectivityTexture ? (ir.a.PrepareDefinesForMergedUV(this._reflectivityTexture, i, "REFLECTIVITY"), i.MICROSURFACEFROMREFLECTIVITYMAP = this._useMicroSurfaceFromReflectivityMapAlpha, i.MICROSURFACEAUTOMATIC = this._useAutoMicroSurfaceFromReflectivityMap) : i.REFLECTIVITY = !1, this._microSurfaceTexture ? ir.a.PrepareDefinesForMergedUV(this._microSurfaceTexture, i, "MICROSURFACEMAP") : i.MICROSURFACEMAP = !1) : (i.REFLECTIVITY = !1, i.MICROSURFACEMAP = !1), o.getEngine().getCaps().standardDerivatives && this._bumpTexture && or.a.BumpTextureEnabled && !this._disableBumpMap ? (ir.a.PrepareDefinesForMergedUV(this._bumpTexture, i, "BUMP"), this._useParallax && this._albedoTexture && or.a.DiffuseTextureEnabled ? (i.PARALLAX = !0, i.PARALLAXOCCLUSION = !!this._useParallaxOcclusion) : i.PARALLAX = !1, i.OBJECTSPACE_NORMALMAP = this._useObjectSpaceNormalMap) : i.BUMP = !1, this._environmentBRDFTexture && or.a.ReflectionTextureEnabled ? (i.ENVIRONMENTBRDF = !0, i.ENVIRONMENTBRDF_RGBD = this._environmentBRDFTexture.isRGBD) : (i.ENVIRONMENTBRDF = !1, i.ENVIRONMENTBRDF_RGBD = !1), this._shouldUseAlphaFromAlbedoTexture() ? i.ALPHAFROMALBEDO = !0 : i.ALPHAFROMALBEDO = !1
|
|
}
|
|
i.SPECULAROVERALPHA = this._useSpecularOverAlpha, this._lightFalloff === t.LIGHTFALLOFF_STANDARD ? (i.USEPHYSICALLIGHTFALLOFF = !1, i.USEGLTFLIGHTFALLOFF = !1) : this._lightFalloff === t.LIGHTFALLOFF_GLTF ? (i.USEPHYSICALLIGHTFALLOFF = !1, i.USEGLTFLIGHTFALLOFF = !0) : (i.USEPHYSICALLIGHTFALLOFF = !0, i.USEGLTFLIGHTFALLOFF = !1), i.RADIANCEOVERALPHA = this._useRadianceOverAlpha, !this.backFaceCulling && this._twoSidedLighting ? i.TWOSIDEDLIGHTING = !0 : i.TWOSIDEDLIGHTING = !1, i.ALPHATESTVALUE = this._alphaCutOff + (this._alphaCutOff % 1 == 0 ? "." : ""), i.PREMULTIPLYALPHA = this.alphaMode === _.a.ALPHA_PREMULTIPLIED || this.alphaMode === _.a.ALPHA_PREMULTIPLIED_PORTERDUFF, i.ALPHABLEND = this.needAlphaBlendingForMesh(e), i.ALPHAFRESNEL = this._useAlphaFresnel || this._useLinearAlphaFresnel, i.LINEARALPHAFRESNEL = this._useLinearAlphaFresnel, i.SPECULARAA = o.getEngine().getCaps().standardDerivatives && this._enableSpecularAntiAliasing
|
|
}
|
|
i._areImageProcessingDirty && this._imageProcessingConfiguration && this._imageProcessingConfiguration.prepareDefines(i), i.FORCENORMALFORWARD = this._forceNormalForward, i.RADIANCEOCCLUSION = this._useRadianceOcclusion, i.HORIZONOCCLUSION = this._useHorizonOcclusion, i._areMiscDirty && (ir.a.PrepareDefinesForMisc(e, o, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(e) || this._forceAlphaTest, i), i.UNLIT = this._unlit || (this.pointsCloud || this.wireframe) && !e.isVerticesDataPresent(Oi.b.NormalKind), i.DEBUGMODE = this._debugMode), this.subSurface.prepareDefines(i, o), this.clearCoat.prepareDefines(i, o), this.anisotropy.prepareDefines(i, e, o), this.brdf.prepareDefines(i), this.sheen.prepareDefines(i, o), ir.a.PrepareDefinesForFrameBoundValues(o, s, i, !!n, r), ir.a.PrepareDefinesForAttributes(e, i, !0, !0, !0, this._transparencyMode !== t.PBRMATERIAL_OPAQUE)
|
|
}, t.prototype.forceCompilation = function(e, t, i) {
|
|
var n = this,
|
|
r = l.a({
|
|
clipPlane: !1
|
|
}, i),
|
|
o = new Vr,
|
|
s = this._prepareEffect(e, o, void 0, void 0, void 0, r.clipPlane);
|
|
s.isReady() ? t && t(this) : s.onCompileObservable.add(function() {
|
|
t && t(n)
|
|
})
|
|
}, t.prototype.buildUniformLayout = function() {
|
|
var e = this._uniformBuffer;
|
|
e.addUniform("vAlbedoInfos", 2), e.addUniform("vAmbientInfos", 4), e.addUniform("vOpacityInfos", 2), e.addUniform("vEmissiveInfos", 2), e.addUniform("vLightmapInfos", 2), e.addUniform("vReflectivityInfos", 3), e.addUniform("vMicroSurfaceSamplerInfos", 2), e.addUniform("vReflectionInfos", 2), e.addUniform("vReflectionPosition", 3), e.addUniform("vReflectionSize", 3), e.addUniform("vBumpInfos", 3), e.addUniform("albedoMatrix", 16), e.addUniform("ambientMatrix", 16), e.addUniform("opacityMatrix", 16), e.addUniform("emissiveMatrix", 16), e.addUniform("lightmapMatrix", 16), e.addUniform("reflectivityMatrix", 16), e.addUniform("microSurfaceSamplerMatrix", 16), e.addUniform("bumpMatrix", 16), e.addUniform("vTangentSpaceParams", 2), e.addUniform("reflectionMatrix", 16), e.addUniform("vReflectionColor", 3), e.addUniform("vAlbedoColor", 4), e.addUniform("vLightingIntensity", 4), e.addUniform("vReflectionMicrosurfaceInfos", 3), e.addUniform("pointSize", 1), e.addUniform("vReflectivityColor", 4), e.addUniform("vEmissiveColor", 3), e.addUniform("visibility", 1), yr.PrepareUniformBuffer(e), br.PrepareUniformBuffer(e), Er.PrepareUniformBuffer(e), Ar.PrepareUniformBuffer(e), e.create()
|
|
}, t.prototype.unbind = function() {
|
|
if (this._activeEffect) {
|
|
var t = !1;
|
|
this._reflectionTexture && this._reflectionTexture.isRenderTarget && (this._activeEffect.setTexture("reflection2DSampler", null), t = !0), this.subSurface.unbind(this._activeEffect) && (t = !0), t && this._markAllSubMeshesAsTexturesDirty()
|
|
}
|
|
e.prototype.unbind.call(this)
|
|
}, t.prototype.bindForSubMesh = function(e, i, n) {
|
|
var r = this.getScene(),
|
|
s = n._materialDefines;
|
|
if (s) {
|
|
var a = n.effect;
|
|
if (a) {
|
|
this._activeEffect = a, s.INSTANCES || this.bindOnlyWorldMatrix(e), s.OBJECTSPACE_NORMALMAP && (e.toNormalMatrix(this._normalMatrix), this.bindOnlyNormalMatrix(this._normalMatrix));
|
|
var c = this._mustRebind(r, a, i.visibility);
|
|
ir.a.BindBonesParameters(i, this._activeEffect);
|
|
var l = null,
|
|
u = this._uniformBuffer;
|
|
if (c) {
|
|
var h = r.getEngine();
|
|
if (u.bindToEffect(a, "Material"), this.bindViewProjection(a), l = this._getReflectionTexture(), !u.useUbo || !this.isFrozen || !u.isSync) {
|
|
if (r.texturesEnabled) {
|
|
if (this._albedoTexture && or.a.DiffuseTextureEnabled && (u.updateFloat2("vAlbedoInfos", this._albedoTexture.coordinatesIndex, this._albedoTexture.level), ir.a.BindTextureMatrix(this._albedoTexture, u, "albedo")), this._ambientTexture && or.a.AmbientTextureEnabled && (u.updateFloat4("vAmbientInfos", this._ambientTexture.coordinatesIndex, this._ambientTexture.level, this._ambientTextureStrength, this._ambientTextureImpactOnAnalyticalLights), ir.a.BindTextureMatrix(this._ambientTexture, u, "ambient")), this._opacityTexture && or.a.OpacityTextureEnabled && (u.updateFloat2("vOpacityInfos", this._opacityTexture.coordinatesIndex, this._opacityTexture.level), ir.a.BindTextureMatrix(this._opacityTexture, u, "opacity")), l && or.a.ReflectionTextureEnabled) {
|
|
if (u.updateMatrix("reflectionMatrix", l.getReflectionTextureMatrix()), u.updateFloat2("vReflectionInfos", l.level, 0), l.boundingBoxSize) {
|
|
var d = l;
|
|
u.updateVector3("vReflectionPosition", d.boundingBoxPosition), u.updateVector3("vReflectionSize", d.boundingBoxSize)
|
|
}
|
|
var f = l.sphericalPolynomial;
|
|
if (s.USESPHERICALFROMREFLECTIONMAP && f)
|
|
if (s.SPHERICAL_HARMONICS) {
|
|
var p = f.preScaledHarmonics;
|
|
this._activeEffect.setVector3("vSphericalL00", p.l00), this._activeEffect.setVector3("vSphericalL1_1", p.l1_1), this._activeEffect.setVector3("vSphericalL10", p.l10), this._activeEffect.setVector3("vSphericalL11", p.l11), this._activeEffect.setVector3("vSphericalL2_2", p.l2_2), this._activeEffect.setVector3("vSphericalL2_1", p.l2_1), this._activeEffect.setVector3("vSphericalL20", p.l20), this._activeEffect.setVector3("vSphericalL21", p.l21), this._activeEffect.setVector3("vSphericalL22", p.l22)
|
|
} else this._activeEffect.setFloat3("vSphericalX", f.x.x, f.x.y, f.x.z), this._activeEffect.setFloat3("vSphericalY", f.y.x, f.y.y, f.y.z), this._activeEffect.setFloat3("vSphericalZ", f.z.x, f.z.y, f.z.z), this._activeEffect.setFloat3("vSphericalXX_ZZ", f.xx.x - f.zz.x, f.xx.y - f.zz.y, f.xx.z - f.zz.z), this._activeEffect.setFloat3("vSphericalYY_ZZ", f.yy.x - f.zz.x, f.yy.y - f.zz.y, f.yy.z - f.zz.z), this._activeEffect.setFloat3("vSphericalZZ", f.zz.x, f.zz.y, f.zz.z), this._activeEffect.setFloat3("vSphericalXY", f.xy.x, f.xy.y, f.xy.z), this._activeEffect.setFloat3("vSphericalYZ", f.yz.x, f.yz.y, f.yz.z), this._activeEffect.setFloat3("vSphericalZX", f.zx.x, f.zx.y, f.zx.z);
|
|
u.updateFloat3("vReflectionMicrosurfaceInfos", l.getSize().width, l.lodGenerationScale, l.lodGenerationOffset)
|
|
}
|
|
this._emissiveTexture && or.a.EmissiveTextureEnabled && (u.updateFloat2("vEmissiveInfos", this._emissiveTexture.coordinatesIndex, this._emissiveTexture.level), ir.a.BindTextureMatrix(this._emissiveTexture, u, "emissive")), this._lightmapTexture && or.a.LightmapTextureEnabled && (u.updateFloat2("vLightmapInfos", this._lightmapTexture.coordinatesIndex, this._lightmapTexture.level), ir.a.BindTextureMatrix(this._lightmapTexture, u, "lightmap")), or.a.SpecularTextureEnabled && (this._metallicTexture ? (u.updateFloat3("vReflectivityInfos", this._metallicTexture.coordinatesIndex, this._metallicTexture.level, this._ambientTextureStrength), ir.a.BindTextureMatrix(this._metallicTexture, u, "reflectivity")) : this._reflectivityTexture && (u.updateFloat3("vReflectivityInfos", this._reflectivityTexture.coordinatesIndex, this._reflectivityTexture.level, 1), ir.a.BindTextureMatrix(this._reflectivityTexture, u, "reflectivity")), this._microSurfaceTexture && (u.updateFloat2("vMicroSurfaceSamplerInfos", this._microSurfaceTexture.coordinatesIndex, this._microSurfaceTexture.level), ir.a.BindTextureMatrix(this._microSurfaceTexture, u, "microSurfaceSampler"))), this._bumpTexture && h.getCaps().standardDerivatives && or.a.BumpTextureEnabled && !this._disableBumpMap && (u.updateFloat3("vBumpInfos", this._bumpTexture.coordinatesIndex, this._bumpTexture.level, this._parallaxScaleBias), ir.a.BindTextureMatrix(this._bumpTexture, u, "bump"), r._mirroredCameraPosition ? u.updateFloat2("vTangentSpaceParams", this._invertNormalMapX ? 1 : -1, this._invertNormalMapY ? 1 : -1) : u.updateFloat2("vTangentSpaceParams", this._invertNormalMapX ? -1 : 1, this._invertNormalMapY ? -1 : 1))
|
|
}
|
|
this.pointsCloud && u.updateFloat("pointSize", this.pointSize), s.METALLICWORKFLOW ? (o.t.Color3[0].r = void 0 === this._metallic || null === this._metallic ? 1 : this._metallic, o.t.Color3[0].g = void 0 === this._roughness || null === this._roughness ? 1 : this._roughness, u.updateColor4("vReflectivityColor", o.t.Color3[0], 0)) : u.updateColor4("vReflectivityColor", this._reflectivityColor, this._microSurface), u.updateColor3("vEmissiveColor", or.a.EmissiveTextureEnabled ? this._emissiveColor : o.e.BlackReadOnly), u.updateColor3("vReflectionColor", this._reflectionColor), u.updateColor4("vAlbedoColor", this._albedoColor, this.alpha), u.updateFloat("visibility", i.visibility), this._lightingInfos.x = this._directIntensity, this._lightingInfos.y = this._emissiveIntensity, this._lightingInfos.z = this._environmentIntensity, this._lightingInfos.w = this._specularIntensity, u.updateVector4("vLightingIntensity", this._lightingInfos)
|
|
}
|
|
r.texturesEnabled && (this._albedoTexture && or.a.DiffuseTextureEnabled && u.setTexture("albedoSampler", this._albedoTexture), this._ambientTexture && or.a.AmbientTextureEnabled && u.setTexture("ambientSampler", this._ambientTexture), this._opacityTexture && or.a.OpacityTextureEnabled && u.setTexture("opacitySampler", this._opacityTexture), l && or.a.ReflectionTextureEnabled && (s.LODBASEDMICROSFURACE ? u.setTexture("reflectionSampler", l) : (u.setTexture("reflectionSampler", l._lodTextureMid || l), u.setTexture("reflectionSamplerLow", l._lodTextureLow || l), u.setTexture("reflectionSamplerHigh", l._lodTextureHigh || l))), s.ENVIRONMENTBRDF && u.setTexture("environmentBrdfSampler", this._environmentBRDFTexture), this._emissiveTexture && or.a.EmissiveTextureEnabled && u.setTexture("emissiveSampler", this._emissiveTexture), this._lightmapTexture && or.a.LightmapTextureEnabled && u.setTexture("lightmapSampler", this._lightmapTexture), or.a.SpecularTextureEnabled && (this._metallicTexture ? u.setTexture("reflectivitySampler", this._metallicTexture) : this._reflectivityTexture && u.setTexture("reflectivitySampler", this._reflectivityTexture), this._microSurfaceTexture && u.setTexture("microSurfaceSampler", this._microSurfaceTexture)), this._bumpTexture && h.getCaps().standardDerivatives && or.a.BumpTextureEnabled && !this._disableBumpMap && u.setTexture("bumpSampler", this._bumpTexture)), this.subSurface.bindForSubMesh(u, r, h, this.isFrozen, s.LODBASEDMICROSFURACE), this.clearCoat.bindForSubMesh(u, r, h, this._disableBumpMap, this.isFrozen, this._invertNormalMapX, this._invertNormalMapY), this.anisotropy.bindForSubMesh(u, r, this.isFrozen), this.sheen.bindForSubMesh(u, r, this.isFrozen), ir.a.BindClipPlane(this._activeEffect, r), r.ambientColor.multiplyToRef(this._ambientColor, this._globalAmbientColor);
|
|
var _ = r._forcedViewPosition ? r._forcedViewPosition : r._mirroredCameraPosition ? r._mirroredCameraPosition : r.activeCamera.globalPosition,
|
|
g = r.useRightHandedSystem === (null != r._mirroredCameraPosition);
|
|
a.setFloat4("vEyePosition", _.x, _.y, _.z, g ? -1 : 1), a.setColor3("vAmbientColor", this._globalAmbientColor), a.setFloat2("vDebugMode", this.debugLimit, this.debugFactor)
|
|
}!c && this.isFrozen || (r.lightsEnabled && !this._disableLighting && ir.a.BindLights(r, i, this._activeEffect, s, this._maxSimultaneousLights, this._lightFalloff !== t.LIGHTFALLOFF_STANDARD), (r.fogEnabled && i.applyFog && r.fogMode !== W.a.FOGMODE_NONE || l) && this.bindView(a), ir.a.BindFogParameters(r, i, this._activeEffect, !0), s.NUM_MORPH_INFLUENCERS && ir.a.BindMorphTargetParameters(i, this._activeEffect), this._imageProcessingConfiguration.bind(this._activeEffect), ir.a.BindLogDepth(s, this._activeEffect, r)), u.update(), this._afterBind(i, this._activeEffect)
|
|
}
|
|
}
|
|
}, t.prototype.getAnimatables = function() {
|
|
var e = [];
|
|
return this._albedoTexture && this._albedoTexture.animations && this._albedoTexture.animations.length > 0 && e.push(this._albedoTexture), this._ambientTexture && this._ambientTexture.animations && this._ambientTexture.animations.length > 0 && e.push(this._ambientTexture), this._opacityTexture && this._opacityTexture.animations && this._opacityTexture.animations.length > 0 && e.push(this._opacityTexture), this._reflectionTexture && this._reflectionTexture.animations && this._reflectionTexture.animations.length > 0 && e.push(this._reflectionTexture), this._emissiveTexture && this._emissiveTexture.animations && this._emissiveTexture.animations.length > 0 && e.push(this._emissiveTexture), this._metallicTexture && this._metallicTexture.animations && this._metallicTexture.animations.length > 0 ? e.push(this._metallicTexture) : this._reflectivityTexture && this._reflectivityTexture.animations && this._reflectivityTexture.animations.length > 0 && e.push(this._reflectivityTexture), this._bumpTexture && this._bumpTexture.animations && this._bumpTexture.animations.length > 0 && e.push(this._bumpTexture), this._lightmapTexture && this._lightmapTexture.animations && this._lightmapTexture.animations.length > 0 && e.push(this._lightmapTexture), this.subSurface.getAnimatables(e), this.clearCoat.getAnimatables(e), this.sheen.getAnimatables(e), this.anisotropy.getAnimatables(e), e
|
|
}, t.prototype._getReflectionTexture = function() {
|
|
return this._reflectionTexture ? this._reflectionTexture : this.getScene().environmentTexture
|
|
}, t.prototype.getActiveTextures = function() {
|
|
var t = e.prototype.getActiveTextures.call(this);
|
|
return this._albedoTexture && t.push(this._albedoTexture), this._ambientTexture && t.push(this._ambientTexture), this._opacityTexture && t.push(this._opacityTexture), this._reflectionTexture && t.push(this._reflectionTexture), this._emissiveTexture && t.push(this._emissiveTexture), this._reflectivityTexture && t.push(this._reflectivityTexture), this._metallicTexture && t.push(this._metallicTexture), this._microSurfaceTexture && t.push(this._microSurfaceTexture), this._bumpTexture && t.push(this._bumpTexture), this._lightmapTexture && t.push(this._lightmapTexture), this.subSurface.getActiveTextures(t), this.clearCoat.getActiveTextures(t), this.sheen.getActiveTextures(t), this.anisotropy.getActiveTextures(t), t
|
|
}, t.prototype.hasTexture = function(t) {
|
|
return !!e.prototype.hasTexture.call(this, t) || (this._albedoTexture === t || (this._ambientTexture === t || (this._opacityTexture === t || (this._reflectionTexture === t || (this._reflectivityTexture === t || (this._metallicTexture === t || (this._microSurfaceTexture === t || (this._bumpTexture === t || (this._lightmapTexture === t || (this.subSurface.hasTexture(t) || this.clearCoat.hasTexture(t) || this.sheen.hasTexture(t) || this.anisotropy.hasTexture(t)))))))))))
|
|
}, t.prototype.dispose = function(t, i) {
|
|
i && (this._albedoTexture && this._albedoTexture.dispose(), this._ambientTexture && this._ambientTexture.dispose(), this._opacityTexture && this._opacityTexture.dispose(), this._reflectionTexture && this._reflectionTexture.dispose(), this._environmentBRDFTexture && this.getScene().environmentBRDFTexture !== this._environmentBRDFTexture && this._environmentBRDFTexture.dispose(), this._emissiveTexture && this._emissiveTexture.dispose(), this._metallicTexture && this._metallicTexture.dispose(), this._reflectivityTexture && this._reflectivityTexture.dispose(), this._bumpTexture && this._bumpTexture.dispose(), this._lightmapTexture && this._lightmapTexture.dispose()), this.subSurface.dispose(i), this.clearCoat.dispose(i), this.sheen.dispose(i), this.anisotropy.dispose(i), this._renderTargets.dispose(), this._imageProcessingConfiguration && this._imageProcessingObserver && this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver), e.prototype.dispose.call(this, t, i)
|
|
}, t.PBRMATERIAL_OPAQUE = 0, t.PBRMATERIAL_ALPHATEST = 1, t.PBRMATERIAL_ALPHABLEND = 2, t.PBRMATERIAL_ALPHATESTANDBLEND = 3, t.DEFAULT_AO_ON_ANALYTICAL_LIGHTS = 0, t.LIGHTFALLOFF_PHYSICAL = 0, t.LIGHTFALLOFF_GLTF = 1, t.LIGHTFALLOFF_STANDARD = 2, l.c([Object(L.i)()], t.prototype, "_imageProcessingConfiguration", void 0), l.c([Object(L.b)("_markAllSubMeshesAsMiscDirty")], t.prototype, "debugMode", void 0), l.c([Object(L.c)()], t.prototype, "useLogarithmicDepth", null), l.c([Object(L.c)()], t.prototype, "transparencyMode", null), t
|
|
}(rr.a),
|
|
kr = function(e) {
|
|
function t(i, n) {
|
|
var r = e.call(this, i, n) || this;
|
|
return r.directIntensity = 1, r.emissiveIntensity = 1, r.environmentIntensity = 1, r.specularIntensity = 1, r.disableBumpMap = !1, r.ambientTextureStrength = 1, r.ambientTextureImpactOnAnalyticalLights = t.DEFAULT_AO_ON_ANALYTICAL_LIGHTS, r.ambientColor = new o.e(0, 0, 0), r.albedoColor = new o.e(1, 1, 1), r.reflectivityColor = new o.e(1, 1, 1), r.reflectionColor = new o.e(1, 1, 1), r.emissiveColor = new o.e(0, 0, 0), r.microSurface = 1, r.useLightmapAsShadowmap = !1, r.useAlphaFromAlbedoTexture = !1, r.forceAlphaTest = !1, r.alphaCutOff = .4, r.useSpecularOverAlpha = !0, r.useMicroSurfaceFromReflectivityMapAlpha = !1, r.useRoughnessFromMetallicTextureAlpha = !0, r.useRoughnessFromMetallicTextureGreen = !1, r.useMetallnessFromMetallicTextureBlue = !1, r.useAmbientOcclusionFromMetallicTextureRed = !1, r.useAmbientInGrayScale = !1, r.useAutoMicroSurfaceFromReflectivityMap = !1, r.useRadianceOverAlpha = !0, r.useObjectSpaceNormalMap = !1, r.useParallax = !1, r.useParallaxOcclusion = !1, r.parallaxScaleBias = .05, r.disableLighting = !1, r.forceIrradianceInFragment = !1, r.maxSimultaneousLights = 4, r.invertNormalMapX = !1, r.invertNormalMapY = !1, r.twoSidedLighting = !1, r.useAlphaFresnel = !1, r.useLinearAlphaFresnel = !1, r.environmentBRDFTexture = null, r.forceNormalForward = !1, r.enableSpecularAntiAliasing = !1, r.useHorizonOcclusion = !0, r.useRadianceOcclusion = !0, r.unlit = !1, r._environmentBRDFTexture = vr.GetEnvironmentBRDFTexture(n), r
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "refractionTexture", {
|
|
get: function() {
|
|
return this.subSurface.refractionTexture
|
|
},
|
|
set: function(e) {
|
|
this.subSurface.refractionTexture = e, e ? this.subSurface.isRefractionEnabled = !0 : this.subSurface.linkRefractionWithTransparency || (this.subSurface.isRefractionEnabled = !1)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "indexOfRefraction", {
|
|
get: function() {
|
|
return 1 / this.subSurface.indexOfRefraction
|
|
},
|
|
set: function(e) {
|
|
this.subSurface.indexOfRefraction = 1 / e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "invertRefractionY", {
|
|
get: function() {
|
|
return this.subSurface.invertRefractionY
|
|
},
|
|
set: function(e) {
|
|
this.subSurface.invertRefractionY = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "linkRefractionWithTransparency", {
|
|
get: function() {
|
|
return this.subSurface.linkRefractionWithTransparency
|
|
},
|
|
set: function(e) {
|
|
this.subSurface.linkRefractionWithTransparency = e, e && (this.subSurface.isRefractionEnabled = !0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "usePhysicalLightFalloff", {
|
|
get: function() {
|
|
return this._lightFalloff === Gr.LIGHTFALLOFF_PHYSICAL
|
|
},
|
|
set: function(e) {
|
|
e !== this.usePhysicalLightFalloff && (this._markAllSubMeshesAsTexturesDirty(), this._lightFalloff = e ? Gr.LIGHTFALLOFF_PHYSICAL : Gr.LIGHTFALLOFF_STANDARD)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "useGLTFLightFalloff", {
|
|
get: function() {
|
|
return this._lightFalloff === Gr.LIGHTFALLOFF_GLTF
|
|
},
|
|
set: function(e) {
|
|
e !== this.useGLTFLightFalloff && (this._markAllSubMeshesAsTexturesDirty(), this._lightFalloff = e ? Gr.LIGHTFALLOFF_GLTF : Gr.LIGHTFALLOFF_STANDARD)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "imageProcessingConfiguration", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration
|
|
},
|
|
set: function(e) {
|
|
this._attachImageProcessingConfiguration(e), this._markAllSubMeshesAsTexturesDirty()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorCurvesEnabled", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorCurvesEnabled
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorCurvesEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorGradingEnabled", {
|
|
get: function() {
|
|
return this.imageProcessingConfiguration.colorGradingEnabled
|
|
},
|
|
set: function(e) {
|
|
this.imageProcessingConfiguration.colorGradingEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraToneMappingEnabled", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.toneMappingEnabled
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.toneMappingEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraExposure", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.exposure
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.exposure = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraContrast", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.contrast
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.contrast = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorGradingTexture", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.colorGradingTexture
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.colorGradingTexture = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "cameraColorCurves", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration.colorCurves
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingConfiguration.colorCurves = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "PBRMaterial"
|
|
}, t.prototype.clone = function(e) {
|
|
var i = this,
|
|
n = L.a.Clone(function() {
|
|
return new t(e, i.getScene())
|
|
}, this);
|
|
return n.id = e, n.name = e, this.clearCoat.copyTo(n.clearCoat), this.anisotropy.copyTo(n.anisotropy), this.brdf.copyTo(n.brdf), this.sheen.copyTo(n.sheen), n
|
|
}, t.prototype.serialize = function() {
|
|
var e = L.a.Serialize(this);
|
|
return e.customType = "BABYLON.PBRMaterial", e.clearCoat = this.clearCoat.serialize(), e.anisotropy = this.anisotropy.serialize(), e.brdf = this.brdf.serialize(), e.sheen = this.sheen.serialize(), e
|
|
}, t.Parse = function(e, i, n) {
|
|
var r = L.a.Parse(function() {
|
|
return new t(e.name, i)
|
|
}, e, i, n);
|
|
return e.clearCoat && r.clearCoat.parse(e.clearCoat), e.anisotropy && r.anisotropy.parse(e.anisotropy), e.brdf && r.brdf.parse(e.brdf), e.sheen && r.sheen.parse(e.brdf), r
|
|
}, t.PBRMATERIAL_OPAQUE = Gr.PBRMATERIAL_OPAQUE, t.PBRMATERIAL_ALPHATEST = Gr.PBRMATERIAL_ALPHATEST, t.PBRMATERIAL_ALPHABLEND = Gr.PBRMATERIAL_ALPHABLEND, t.PBRMATERIAL_ALPHATESTANDBLEND = Gr.PBRMATERIAL_ALPHATESTANDBLEND, t.DEFAULT_AO_ON_ANALYTICAL_LIGHTS = Gr.DEFAULT_AO_ON_ANALYTICAL_LIGHTS, l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "directIntensity", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "emissiveIntensity", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "environmentIntensity", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "specularIntensity", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "disableBumpMap", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "albedoTexture", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "ambientTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "ambientTextureStrength", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "ambientTextureImpactOnAnalyticalLights", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesAndMiscDirty")], t.prototype, "opacityTexture", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionTexture", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "emissiveTexture", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectivityTexture", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "metallicTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "metallic", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "roughness", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "microSurfaceTexture", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "bumpTexture", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", null)], t.prototype, "lightmapTexture", void 0), l.c([Object(L.e)("ambient"), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "ambientColor", void 0), l.c([Object(L.e)("albedo"), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "albedoColor", void 0), l.c([Object(L.e)("reflectivity"), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectivityColor", void 0), l.c([Object(L.e)("reflection"), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "reflectionColor", void 0), l.c([Object(L.e)("emissive"), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "emissiveColor", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "microSurface", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useLightmapAsShadowmap", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesAndMiscDirty")], t.prototype, "useAlphaFromAlbedoTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesAndMiscDirty")], t.prototype, "forceAlphaTest", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesAndMiscDirty")], t.prototype, "alphaCutOff", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useSpecularOverAlpha", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useMicroSurfaceFromReflectivityMapAlpha", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useRoughnessFromMetallicTextureAlpha", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useRoughnessFromMetallicTextureGreen", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useMetallnessFromMetallicTextureBlue", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useAmbientOcclusionFromMetallicTextureRed", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useAmbientInGrayScale", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useAutoMicroSurfaceFromReflectivityMap", void 0), l.c([Object(L.c)()], t.prototype, "usePhysicalLightFalloff", null), l.c([Object(L.c)()], t.prototype, "useGLTFLightFalloff", null), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useRadianceOverAlpha", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useObjectSpaceNormalMap", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useParallax", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useParallaxOcclusion", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "parallaxScaleBias", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsLightsDirty")], t.prototype, "disableLighting", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "forceIrradianceInFragment", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsLightsDirty")], t.prototype, "maxSimultaneousLights", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "invertNormalMapX", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "invertNormalMapY", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "twoSidedLighting", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useAlphaFresnel", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useLinearAlphaFresnel", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "environmentBRDFTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "forceNormalForward", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "enableSpecularAntiAliasing", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useHorizonOcclusion", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useRadianceOcclusion", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsMiscDirty")], t.prototype, "unlit", void 0), t
|
|
}(Gr);
|
|
s.a.RegisteredTypes["BABYLON.PBRMaterial"] = kr;
|
|
var zr = i(62),
|
|
jr = i(71);
|
|
|
|
function Hr(e) {
|
|
return e.charCodeAt(0) + (e.charCodeAt(1) << 8) + (e.charCodeAt(2) << 16) + (e.charCodeAt(3) << 24)
|
|
}
|
|
var Wr = Hr("DXT1"),
|
|
Xr = Hr("DXT3"),
|
|
Yr = Hr("DXT5"),
|
|
Kr = Hr("DX10"),
|
|
Qr = function() {
|
|
function e() {}
|
|
return e.GetDDSInfo = function(e) {
|
|
var t = new Int32Array(e, 0, 31),
|
|
i = new Int32Array(e, 0, 35),
|
|
n = 1;
|
|
131072 & t[2] && (n = Math.max(1, t[7]));
|
|
var r = t[21],
|
|
o = r === Kr ? i[32] : 0,
|
|
s = _.a.TEXTURETYPE_UNSIGNED_INT;
|
|
switch (r) {
|
|
case 113:
|
|
s = _.a.TEXTURETYPE_HALF_FLOAT;
|
|
break;
|
|
case 116:
|
|
s = _.a.TEXTURETYPE_FLOAT;
|
|
break;
|
|
case Kr:
|
|
if (10 === o) {
|
|
s = _.a.TEXTURETYPE_HALF_FLOAT;
|
|
break
|
|
}
|
|
}
|
|
return {
|
|
width: t[4],
|
|
height: t[3],
|
|
mipmapCount: n,
|
|
isFourCC: 4 == (4 & t[20]),
|
|
isRGB: 64 == (64 & t[20]),
|
|
isLuminance: 131072 == (131072 & t[20]),
|
|
isCube: 512 == (512 & t[28]),
|
|
isCompressed: r === Wr || r === Xr || r === Yr,
|
|
dxgiFormat: o,
|
|
textureType: s
|
|
}
|
|
}, e._ToHalfFloat = function(t) {
|
|
e._FloatView || (e._FloatView = new Float32Array(1), e._Int32View = new Int32Array(e._FloatView.buffer)), e._FloatView[0] = t;
|
|
var i = e._Int32View[0],
|
|
n = i >> 16 & 32768,
|
|
r = i >> 12 & 2047,
|
|
o = i >> 23 & 255;
|
|
return o < 103 ? n : o > 142 ? (n |= 31744, n |= (255 == o ? 0 : 1) && 8388607 & i) : o < 113 ? n |= ((r |= 2048) >> 114 - o) + (r >> 113 - o & 1) : (n |= o - 112 << 10 | r >> 1, n += 1 & r)
|
|
}, e._FromHalfFloat = function(e) {
|
|
var t = (32768 & e) >> 15,
|
|
i = (31744 & e) >> 10,
|
|
n = 1023 & e;
|
|
return 0 === i ? (t ? -1 : 1) * Math.pow(2, -14) * (n / Math.pow(2, 10)) : 31 == i ? n ? NaN : 1 / 0 * (t ? -1 : 1) : (t ? -1 : 1) * Math.pow(2, i - 15) * (1 + n / Math.pow(2, 10))
|
|
}, e._GetHalfFloatAsFloatRGBAArrayBuffer = function(t, i, n, r, o, s) {
|
|
for (var a = new Float32Array(r), c = new Uint16Array(o, n), l = 0, u = 0; u < i; u++)
|
|
for (var h = 0; h < t; h++) {
|
|
var d = 4 * (h + u * t);
|
|
a[l] = e._FromHalfFloat(c[d]), a[l + 1] = e._FromHalfFloat(c[d + 1]), a[l + 2] = e._FromHalfFloat(c[d + 2]), e.StoreLODInAlphaChannel ? a[l + 3] = s : a[l + 3] = e._FromHalfFloat(c[d + 3]), l += 4
|
|
}
|
|
return a
|
|
}, e._GetHalfFloatRGBAArrayBuffer = function(t, i, n, r, o, s) {
|
|
if (e.StoreLODInAlphaChannel) {
|
|
for (var a = new Uint16Array(r), c = new Uint16Array(o, n), l = 0, u = 0; u < i; u++)
|
|
for (var h = 0; h < t; h++) {
|
|
var d = 4 * (h + u * t);
|
|
a[l] = c[d], a[l + 1] = c[d + 1], a[l + 2] = c[d + 2], a[l + 3] = e._ToHalfFloat(s), l += 4
|
|
}
|
|
return a
|
|
}
|
|
return new Uint16Array(o, n, r)
|
|
}, e._GetFloatRGBAArrayBuffer = function(t, i, n, r, o, s) {
|
|
if (e.StoreLODInAlphaChannel) {
|
|
for (var a = new Float32Array(r), c = new Float32Array(o, n), l = 0, u = 0; u < i; u++)
|
|
for (var h = 0; h < t; h++) {
|
|
var d = 4 * (h + u * t);
|
|
a[l] = c[d], a[l + 1] = c[d + 1], a[l + 2] = c[d + 2], a[l + 3] = s, l += 4
|
|
}
|
|
return a
|
|
}
|
|
return new Float32Array(o, n, r)
|
|
}, e._GetFloatAsUIntRGBAArrayBuffer = function(t, i, n, r, o, s) {
|
|
for (var a = new Uint8Array(r), c = new Float32Array(o, n), l = 0, u = 0; u < i; u++)
|
|
for (var h = 0; h < t; h++) {
|
|
var d = 4 * (h + u * t);
|
|
a[l] = 255 * D.a.Clamp(c[d]), a[l + 1] = 255 * D.a.Clamp(c[d + 1]), a[l + 2] = 255 * D.a.Clamp(c[d + 2]), e.StoreLODInAlphaChannel ? a[l + 3] = s : a[l + 3] = 255 * D.a.Clamp(c[d + 3]), l += 4
|
|
}
|
|
return a
|
|
}, e._GetHalfFloatAsUIntRGBAArrayBuffer = function(t, i, n, r, o, s) {
|
|
for (var a = new Uint8Array(r), c = new Uint16Array(o, n), l = 0, u = 0; u < i; u++)
|
|
for (var h = 0; h < t; h++) {
|
|
var d = 4 * (h + u * t);
|
|
a[l] = 255 * D.a.Clamp(e._FromHalfFloat(c[d])), a[l + 1] = 255 * D.a.Clamp(e._FromHalfFloat(c[d + 1])), a[l + 2] = 255 * D.a.Clamp(e._FromHalfFloat(c[d + 2])), e.StoreLODInAlphaChannel ? a[l + 3] = s : a[l + 3] = 255 * D.a.Clamp(e._FromHalfFloat(c[d + 3])), l += 4
|
|
}
|
|
return a
|
|
}, e._GetRGBAArrayBuffer = function(e, t, i, n, r, o, s, a, c) {
|
|
for (var l = new Uint8Array(n), u = new Uint8Array(r, i), h = 0, d = 0; d < t; d++)
|
|
for (var f = 0; f < e; f++) {
|
|
var p = 4 * (f + d * e);
|
|
l[h] = u[p + o], l[h + 1] = u[p + s], l[h + 2] = u[p + a], l[h + 3] = u[p + c], h += 4
|
|
}
|
|
return l
|
|
}, e._ExtractLongWordOrder = function(t) {
|
|
return 0 === t || 255 === t || -16777216 === t ? 0 : 1 + e._ExtractLongWordOrder(t >> 8)
|
|
}, e._GetRGBArrayBuffer = function(e, t, i, n, r, o, s, a) {
|
|
for (var c = new Uint8Array(n), l = new Uint8Array(r, i), u = 0, h = 0; h < t; h++)
|
|
for (var d = 0; d < e; d++) {
|
|
var f = 3 * (d + h * e);
|
|
c[u] = l[f + o], c[u + 1] = l[f + s], c[u + 2] = l[f + a], u += 3
|
|
}
|
|
return c
|
|
}, e._GetLuminanceArrayBuffer = function(e, t, i, n, r) {
|
|
for (var o = new Uint8Array(n), s = new Uint8Array(r, i), a = 0, c = 0; c < t; c++)
|
|
for (var l = 0; l < e; l++) {
|
|
var u = l + c * e;
|
|
o[a] = s[u], a++
|
|
}
|
|
return o
|
|
}, e.UploadDDSLevels = function(t, i, n, r, o, s, a, c) {
|
|
void 0 === a && (a = -1);
|
|
var l = null;
|
|
r.sphericalPolynomial && (l = new Array);
|
|
var u, h, d, f, g, m, v, y = t.getCaps().s3tc,
|
|
b = new Int32Array(n, 0, 31),
|
|
T = 0,
|
|
E = 0,
|
|
A = 1;
|
|
if (542327876 === b[0])
|
|
if (r.isFourCC || r.isRGB || r.isLuminance)
|
|
if (!r.isCompressed || y) {
|
|
var x = b[22];
|
|
f = b[1] + 4;
|
|
var R, P = !1;
|
|
if (r.isFourCC) switch (u = b[21]) {
|
|
case Wr:
|
|
A = 8, E = y.COMPRESSED_RGBA_S3TC_DXT1_EXT;
|
|
break;
|
|
case Xr:
|
|
A = 16, E = y.COMPRESSED_RGBA_S3TC_DXT3_EXT;
|
|
break;
|
|
case Yr:
|
|
A = 16, E = y.COMPRESSED_RGBA_S3TC_DXT5_EXT;
|
|
break;
|
|
case 113:
|
|
case 116:
|
|
P = !0;
|
|
break;
|
|
case Kr:
|
|
f += 20;
|
|
var S = !1;
|
|
switch (r.dxgiFormat) {
|
|
case 10:
|
|
P = !0, S = !0;
|
|
break;
|
|
case 88:
|
|
r.isRGB = !0, r.isFourCC = !1, x = 32, S = !0
|
|
}
|
|
if (S) break;
|
|
default:
|
|
return void console.error("Unsupported FourCC code:", (R = u, String.fromCharCode(255 & R, R >> 8 & 255, R >> 16 & 255, R >> 24 & 255)))
|
|
}
|
|
var C = e._ExtractLongWordOrder(b[23]),
|
|
M = e._ExtractLongWordOrder(b[24]),
|
|
O = e._ExtractLongWordOrder(b[25]),
|
|
I = e._ExtractLongWordOrder(b[26]);
|
|
P && (E = t._getRGBABufferInternalSizedFormat(r.textureType)), m = 1, 131072 & b[2] && !1 !== o && (m = Math.max(1, b[7]));
|
|
for (var D = c || 0; D < s; D++) {
|
|
for (h = b[4], d = b[3], v = 0; v < m; ++v) {
|
|
if (-1 === a || a === v) {
|
|
var L = -1 === a ? v : 0;
|
|
if (!r.isCompressed && r.isFourCC) {
|
|
i.format = _.a.TEXTUREFORMAT_RGBA, T = h * d * 4;
|
|
var w = null;
|
|
t._badOS || t._badDesktopOS || !t.getCaps().textureHalfFloat && !t.getCaps().textureFloat ? (128 === x ? (w = e._GetFloatAsUIntRGBAArrayBuffer(h, d, f, T, n, L), l && 0 == L && l.push(e._GetFloatRGBAArrayBuffer(h, d, f, T, n, L))) : 64 === x && (w = e._GetHalfFloatAsUIntRGBAArrayBuffer(h, d, f, T, n, L), l && 0 == L && l.push(e._GetHalfFloatAsFloatRGBAArrayBuffer(h, d, f, T, n, L))), i.type = _.a.TEXTURETYPE_UNSIGNED_INT) : 128 === x ? (i.type = _.a.TEXTURETYPE_FLOAT, w = e._GetFloatRGBAArrayBuffer(h, d, f, T, n, L), l && 0 == L && l.push(w)) : 64 !== x || t.getCaps().textureHalfFloat ? (i.type = _.a.TEXTURETYPE_HALF_FLOAT, w = e._GetHalfFloatRGBAArrayBuffer(h, d, f, T, n, L), l && 0 == L && l.push(e._GetHalfFloatAsFloatRGBAArrayBuffer(h, d, f, T, n, L))) : (i.type = _.a.TEXTURETYPE_FLOAT, w = e._GetHalfFloatAsFloatRGBAArrayBuffer(h, d, f, T, n, L), l && 0 == L && l.push(w)), w && t._uploadDataToTextureDirectly(i, w, D, L)
|
|
} else if (r.isRGB) i.type = _.a.TEXTURETYPE_UNSIGNED_INT, 24 === x ? (i.format = _.a.TEXTUREFORMAT_RGB, T = h * d * 3, g = e._GetRGBArrayBuffer(h, d, f, T, n, C, M, O), t._uploadDataToTextureDirectly(i, g, D, L)) : (i.format = _.a.TEXTUREFORMAT_RGBA, T = h * d * 4, g = e._GetRGBAArrayBuffer(h, d, f, T, n, C, M, O, I), t._uploadDataToTextureDirectly(i, g, D, L));
|
|
else if (r.isLuminance) {
|
|
var F = t._getUnpackAlignement(),
|
|
N = h;
|
|
T = Math.floor((h + F - 1) / F) * F * (d - 1) + N, g = e._GetLuminanceArrayBuffer(h, d, f, T, n), i.format = _.a.TEXTUREFORMAT_LUMINANCE, i.type = _.a.TEXTURETYPE_UNSIGNED_INT, t._uploadDataToTextureDirectly(i, g, D, L)
|
|
} else T = Math.max(4, h) / 4 * Math.max(4, d) / 4 * A, g = new Uint8Array(n, f, T), i.type = _.a.TEXTURETYPE_UNSIGNED_INT, t._uploadCompressedDataToTextureDirectly(i, E, h, d, g, D, L)
|
|
}
|
|
f += x ? h * d * (x / 8) : T, h *= .5, d *= .5, h = Math.max(1, h), d = Math.max(1, d)
|
|
}
|
|
if (void 0 !== c) break
|
|
}
|
|
l && l.length > 0 ? r.sphericalPolynomial = jr.a.ConvertCubeMapToSphericalPolynomial({
|
|
size: b[4],
|
|
right: l[0],
|
|
left: l[1],
|
|
up: l[2],
|
|
down: l[3],
|
|
front: l[4],
|
|
back: l[5],
|
|
format: _.a.TEXTUREFORMAT_RGBA,
|
|
type: _.a.TEXTURETYPE_FLOAT,
|
|
gammaSpace: !1
|
|
}) : r.sphericalPolynomial = void 0
|
|
} else p.a.Error("Compressed textures are not supported on this platform.");
|
|
else p.a.Error("Unsupported format, must contain a FourCC, RGB or LUMINANCE code");
|
|
else p.a.Error("Invalid magic number in DDS header")
|
|
}, e.StoreLODInAlphaChannel = !1, e
|
|
}();
|
|
ge.b.prototype.createPrefilteredCubeTexture = function(e, t, i, n, r, o, s, a, c) {
|
|
var l = this;
|
|
void 0 === r && (r = null), void 0 === o && (o = null), void 0 === a && (a = null), void 0 === c && (c = !0);
|
|
return this.createCubeTexture(e, t, null, !1, function(e) {
|
|
if (e) {
|
|
var o = e.texture;
|
|
if (c ? e.info.sphericalPolynomial && (o._sphericalPolynomial = e.info.sphericalPolynomial) : o._sphericalPolynomial = new zr.b, o._dataSource = ze.a.DATASOURCE_CUBEPREFILTERED, l.getCaps().textureLOD) r && r(o);
|
|
else {
|
|
var s = l._gl,
|
|
a = e.width;
|
|
if (a) {
|
|
for (var u = [], h = 0; h < 3; h++) {
|
|
var d = 1 - h / 2,
|
|
f = n,
|
|
_ = D.a.Log2(a) * i + n,
|
|
g = f + (_ - f) * d,
|
|
m = Math.round(Math.min(Math.max(g, 0), _)),
|
|
v = new ze.a(l, ze.a.DATASOURCE_TEMP);
|
|
if (v.type = o.type, v.format = o.format, v.width = Math.pow(2, Math.max(D.a.Log2(a) - m, 0)), v.height = v.width, v.isCube = !0, l._bindTextureDirectly(s.TEXTURE_CUBE_MAP, v, !0), s.texParameteri(s.TEXTURE_CUBE_MAP, s.TEXTURE_MAG_FILTER, s.LINEAR), s.texParameteri(s.TEXTURE_CUBE_MAP, s.TEXTURE_MIN_FILTER, s.LINEAR), s.texParameteri(s.TEXTURE_CUBE_MAP, s.TEXTURE_WRAP_S, s.CLAMP_TO_EDGE), s.texParameteri(s.TEXTURE_CUBE_MAP, s.TEXTURE_WRAP_T, s.CLAMP_TO_EDGE), e.isDDS) {
|
|
var y = e.info,
|
|
b = e.data;
|
|
l._unpackFlipY(y.isCompressed), Qr.UploadDDSLevels(l, v, b, y, !0, 6, m)
|
|
} else p.a.Warn("DDS is the only prefiltered cube map supported so far.");
|
|
l._bindTextureDirectly(s.TEXTURE_CUBE_MAP, null);
|
|
var T = new Kn.a(t);
|
|
T.isCube = !0, T._texture = v, v.isReady = !0, u.push(T)
|
|
}
|
|
o._lodTextureHigh = u[2], o._lodTextureMid = u[1], o._lodTextureLow = u[0], r && r(o)
|
|
}
|
|
}
|
|
} else r && r(null)
|
|
}, o, s, a, c, i, n)
|
|
};
|
|
var qr = function() {
|
|
function e() {
|
|
this.supportCascades = !0
|
|
}
|
|
return e.prototype.canLoad = function(e, t, i, n, r) {
|
|
return 0 === e.indexOf(".dds")
|
|
}, e.prototype.transformUrl = function(e, t) {
|
|
return e
|
|
}, e.prototype.getFallbackTextureUrl = function(e, t) {
|
|
return null
|
|
}, e.prototype.loadCubeData = function(e, t, i, n, r) {
|
|
var o, s = t.getEngine(),
|
|
a = !1;
|
|
if (Array.isArray(e))
|
|
for (var c = 0; c < e.length; c++) {
|
|
var l = e[c];
|
|
o = Qr.GetDDSInfo(l), t.width = o.width, t.height = o.height, a = (o.isRGB || o.isLuminance || o.mipmapCount > 1) && t.generateMipMaps, s._unpackFlipY(o.isCompressed), Qr.UploadDDSLevels(s, t, l, o, a, 6, -1, c), o.isFourCC || 1 !== o.mipmapCount || s.generateMipMapsForCubemap(t)
|
|
} else {
|
|
var u = e;
|
|
o = Qr.GetDDSInfo(u), t.width = o.width, t.height = o.height, i && (o.sphericalPolynomial = new zr.b), a = (o.isRGB || o.isLuminance || o.mipmapCount > 1) && t.generateMipMaps, s._unpackFlipY(o.isCompressed), Qr.UploadDDSLevels(s, t, u, o, a, 6), o.isFourCC || 1 !== o.mipmapCount || s.generateMipMapsForCubemap(t)
|
|
}
|
|
s._setCubeMapTextureParams(a), t.isReady = !0, n && n({
|
|
isDDS: !0,
|
|
width: t.width,
|
|
info: o,
|
|
data: e,
|
|
texture: t
|
|
})
|
|
}, e.prototype.loadData = function(e, t, i) {
|
|
var n = Qr.GetDDSInfo(e),
|
|
r = (n.isRGB || n.isLuminance || n.mipmapCount > 1) && t.generateMipMaps && n.width >> n.mipmapCount - 1 == 1;
|
|
i(n.width, n.height, r, n.isFourCC, function() {
|
|
Qr.UploadDDSLevels(t.getEngine(), t, e, n, r, 1)
|
|
})
|
|
}, e
|
|
}();
|
|
ge.b._TextureLoaders.push(new qr);
|
|
var Zr = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\n#include<helperFunctions>\nvoid main(void)\n{\ngl_FragColor=toRGBD(texture2D(textureSampler,vUV).rgb);\n}";
|
|
zt.a.ShadersStore.rgbdEncodePixelShader = Zr;
|
|
var Jr = function() {
|
|
function e() {}
|
|
return e.GetEnvInfo = function(t) {
|
|
for (var i = new DataView(t), n = 0, r = 0; r < e._MagicBytes.length; r++)
|
|
if (i.getUint8(n++) !== e._MagicBytes[r]) return p.a.Error("Not a babylon environment map"), null;
|
|
for (var o = "", s = 0; s = i.getUint8(n++);) o += String.fromCharCode(s);
|
|
var a = JSON.parse(o);
|
|
return a.specular && (a.specular.specularDataPosition = n, a.specular.lodGenerationScale = a.specular.lodGenerationScale || .8), a
|
|
}, e.CreateEnvTextureAsync = function(t) {
|
|
var i = this,
|
|
n = t.getInternalTexture();
|
|
if (!n) return Promise.reject("The cube texture is invalid.");
|
|
if (!t._prefiltered) return Promise.reject("The cube texture is invalid (not prefiltered).");
|
|
var r = n.getEngine();
|
|
if (r && r.premultipliedAlpha) return Promise.reject("Env texture can only be created when the engine is created with the premultipliedAlpha option set to false.");
|
|
if (t.textureType === _.a.TEXTURETYPE_UNSIGNED_INT) return Promise.reject("The cube texture should allow HDR (Full Float or Half Float).");
|
|
var o = r.getRenderingCanvas();
|
|
if (!o) return Promise.reject("Env texture can only be created when the engine is associated to a canvas.");
|
|
var s = _.a.TEXTURETYPE_FLOAT;
|
|
if (!r.getCaps().textureFloatRender && (s = _.a.TEXTURETYPE_HALF_FLOAT, !r.getCaps().textureHalfFloatRender)) return Promise.reject("Env texture can only be created when the browser supports half float or full float rendering.");
|
|
var a = n.width,
|
|
c = new W.a(r),
|
|
l = {},
|
|
u = [],
|
|
h = D.a.Log2(n.width);
|
|
h = Math.round(h);
|
|
for (var d = function(e) {
|
|
for (var i = Math.pow(2, h - e), n = function(n) {
|
|
var a = t.readPixels(n, e),
|
|
h = r.createRawTexture(a, i, i, _.a.TEXTUREFORMAT_RGBA, !1, !1, _.a.TEXTURE_NEAREST_SAMPLINGMODE, null, s),
|
|
d = new Promise(function(t, s) {
|
|
var a = new Ht("rgbdEncode", "rgbdEncode", null, null, 1, null, _.a.TEXTURE_NEAREST_SAMPLINGMODE, r, !1, void 0, _.a.TEXTURETYPE_UNSIGNED_INT, void 0, null, !1);
|
|
a.getEffect().executeWhenCompiled(function() {
|
|
a.onApply = function(e) {
|
|
e._bindTexture("textureSampler", h)
|
|
};
|
|
var s = r.getRenderWidth(),
|
|
u = r.getRenderHeight();
|
|
r.setSize(i, i), c.postProcessManager.directRender([a], null), ye.h.ToBlob(o, function(i) {
|
|
var r = new FileReader;
|
|
r.onload = function(i) {
|
|
var r = i.target.result;
|
|
l[6 * e + n] = r, t()
|
|
}, r.readAsArrayBuffer(i)
|
|
}), r.setSize(s, u)
|
|
})
|
|
});
|
|
u.push(d)
|
|
}, a = 0; a < 6; a++) n(a)
|
|
}, f = 0; f <= h; f++) d(f);
|
|
return Promise.all(u).then(function() {
|
|
c.dispose();
|
|
for (var n = {
|
|
version: 1,
|
|
width: a,
|
|
irradiance: i._CreateEnvTextureIrradiance(t),
|
|
specular: {
|
|
mipmaps: [],
|
|
lodGenerationScale: t.lodGenerationScale
|
|
}
|
|
}, r = 0, o = 0; o <= h; o++)
|
|
for (var s = 0; s < 6; s++) {
|
|
var u = l[6 * o + s].byteLength;
|
|
n.specular.mipmaps.push({
|
|
length: u,
|
|
position: r
|
|
}), r += u
|
|
}
|
|
for (var d = JSON.stringify(n), f = new ArrayBuffer(d.length + 1), p = new Uint8Array(f), _ = (o = 0, d.length); o < _; o++) p[o] = d.charCodeAt(o);
|
|
p[d.length] = 0;
|
|
var g = e._MagicBytes.length + r + f.byteLength,
|
|
m = new ArrayBuffer(g),
|
|
v = new Uint8Array(m),
|
|
y = new DataView(m),
|
|
b = 0;
|
|
for (o = 0; o < e._MagicBytes.length; o++) y.setUint8(b++, e._MagicBytes[o]);
|
|
v.set(new Uint8Array(f), b), b += f.byteLength;
|
|
for (o = 0; o <= h; o++)
|
|
for (s = 0; s < 6; s++) {
|
|
var T = l[6 * o + s];
|
|
v.set(new Uint8Array(T), b), b += T.byteLength
|
|
}
|
|
return m
|
|
})
|
|
}, e._CreateEnvTextureIrradiance = function(e) {
|
|
var t = e.sphericalPolynomial;
|
|
return null == t ? null : {
|
|
x: [t.x.x, t.x.y, t.x.z],
|
|
y: [t.y.x, t.y.y, t.y.z],
|
|
z: [t.z.x, t.z.y, t.z.z],
|
|
xx: [t.xx.x, t.xx.y, t.xx.z],
|
|
yy: [t.yy.x, t.yy.y, t.yy.z],
|
|
zz: [t.zz.x, t.zz.y, t.zz.z],
|
|
yz: [t.yz.x, t.yz.y, t.yz.z],
|
|
zx: [t.zx.x, t.zx.y, t.zx.z],
|
|
xy: [t.xy.x, t.xy.y, t.xy.z]
|
|
}
|
|
}, e.UploadEnvLevelsAsync = function(t, i, n) {
|
|
if (1 !== n.version) throw new Error('Unsupported babylon environment map version "' + n.version + '"');
|
|
var r = n.specular;
|
|
if (!r) return Promise.resolve();
|
|
var o = D.a.Log2(n.width);
|
|
if (o = Math.round(o) + 1, r.mipmaps.length !== 6 * o) throw new Error('Unsupported specular mipmaps number "' + r.mipmaps.length + '"');
|
|
t._lodGenerationScale = r.lodGenerationScale;
|
|
for (var s = new Array(o), a = 0; a < o; a++) {
|
|
s[a] = new Array(6);
|
|
for (var c = 0; c < 6; c++) {
|
|
var l = r.mipmaps[6 * a + c];
|
|
s[a][c] = new Uint8Array(i, r.specularDataPosition + l.position, l.length)
|
|
}
|
|
}
|
|
return e.UploadLevelsAsync(t, s)
|
|
}, e.UploadLevelsAsync = function(e, t) {
|
|
if (!ye.h.IsExponentOfTwo(e.width)) throw new Error("Texture size must be a power of two");
|
|
var i = Math.round(D.a.Log2(e.width)) + 1,
|
|
n = e.getEngine(),
|
|
r = !1,
|
|
o = !1,
|
|
s = null,
|
|
a = null,
|
|
c = null,
|
|
l = n.getCaps();
|
|
if (e.format = _.a.TEXTUREFORMAT_RGBA, e.type = _.a.TEXTURETYPE_UNSIGNED_INT, e.generateMipMaps = !0, n.updateTextureSamplingMode(_.a.TEXTURE_TRILINEAR_SAMPLINGMODE, e), l.textureLOD ? n.webGLVersion < 2 ? r = !1 : l.textureHalfFloatRender && l.textureHalfFloatLinearFiltering ? (r = !0, e.type = _.a.TEXTURETYPE_HALF_FLOAT) : l.textureFloatRender && l.textureFloatLinearFiltering && (r = !0, e.type = _.a.TEXTURETYPE_FLOAT) : (r = !1, o = !0, c = {}), r) s = new Ht("rgbdDecode", "rgbdDecode", null, null, 1, null, _.a.TEXTURE_TRILINEAR_SAMPLINGMODE, n, !1, void 0, e.type, void 0, null, !1), e._isRGBD = !1, e.invertY = !1, a = n.createRenderTargetCubeTexture(e.width, {
|
|
generateDepthBuffer: !1,
|
|
generateMipMaps: !0,
|
|
generateStencilBuffer: !1,
|
|
samplingMode: _.a.TEXTURE_TRILINEAR_SAMPLINGMODE,
|
|
type: e.type,
|
|
format: _.a.TEXTUREFORMAT_RGBA
|
|
});
|
|
else if (e._isRGBD = !0, e.invertY = !0, o)
|
|
for (var u = e._lodGenerationScale, h = e._lodGenerationOffset, d = 0; d < 3; d++) {
|
|
var f = (i - 1) * u + h,
|
|
p = h + (f - h) * (1 - d / 2),
|
|
g = Math.round(Math.min(Math.max(p, 0), f)),
|
|
m = new ze.a(n, ze.a.DATASOURCE_TEMP);
|
|
m.isCube = !0, m.invertY = !0, m.generateMipMaps = !1, n.updateTextureSamplingMode(_.a.TEXTURE_LINEAR_LINEAR, m);
|
|
var v = new Kn.a(null);
|
|
switch (v.isCube = !0, v._texture = m, c[g] = v, d) {
|
|
case 0:
|
|
e._lodTextureLow = v;
|
|
break;
|
|
case 1:
|
|
e._lodTextureMid = v;
|
|
break;
|
|
case 2:
|
|
e._lodTextureHigh = v
|
|
}
|
|
}
|
|
var y = [],
|
|
b = function(i) {
|
|
for (var l = function(l) {
|
|
var u = t[i][l],
|
|
h = new Blob([u], {
|
|
type: "image/png"
|
|
}),
|
|
d = URL.createObjectURL(h),
|
|
f = new Image;
|
|
f.src = d;
|
|
var p = new Promise(function(t, u) {
|
|
f.onload = function() {
|
|
if (r) {
|
|
var h = n.createTexture(null, !0, !0, null, _.a.TEXTURE_NEAREST_SAMPLINGMODE, null, function(e) {
|
|
u(e)
|
|
}, f);
|
|
s.getEffect().executeWhenCompiled(function() {
|
|
s.onApply = function(e) {
|
|
e._bindTexture("textureSampler", h), e.setFloat2("scale", 1, 1)
|
|
}, n.scenes[0].postProcessManager.directRender([s], a, !0, l, i), n.restoreDefaultFramebuffer(), h.dispose(), window.URL.revokeObjectURL(d), t()
|
|
})
|
|
} else {
|
|
if (n._uploadImageToTexture(e, f, l, i), o) {
|
|
var p = c[i];
|
|
p && n._uploadImageToTexture(p._texture, f, l, 0)
|
|
}
|
|
t()
|
|
}
|
|
}, f.onerror = function(e) {
|
|
u(e)
|
|
}
|
|
});
|
|
y.push(p)
|
|
}, u = 0; u < 6; u++) l(u)
|
|
};
|
|
for (d = 0; d < t.length; d++) b(d);
|
|
if (t.length < i) {
|
|
var T = void 0,
|
|
E = Math.pow(2, i - 1 - t.length),
|
|
A = E * E * 4;
|
|
switch (e.type) {
|
|
case _.a.TEXTURETYPE_UNSIGNED_INT:
|
|
T = new Uint8Array(A);
|
|
break;
|
|
case _.a.TEXTURETYPE_HALF_FLOAT:
|
|
T = new Uint16Array(A);
|
|
break;
|
|
case _.a.TEXTURETYPE_FLOAT:
|
|
T = new Float32Array(A)
|
|
}
|
|
for (d = t.length; d < i; d++)
|
|
for (var x = 0; x < 6; x++) n._uploadArrayBufferViewToTexture(e, T, x, d)
|
|
}
|
|
return Promise.all(y).then(function() {
|
|
a && (n._releaseFramebufferObjects(a), a._swapAndDie(e)), s && s.dispose(), o && (e._lodTextureHigh && e._lodTextureHigh._texture && (e._lodTextureHigh._texture.isReady = !0), e._lodTextureMid && e._lodTextureMid._texture && (e._lodTextureMid._texture.isReady = !0), e._lodTextureLow && e._lodTextureLow._texture && (e._lodTextureLow._texture.isReady = !0))
|
|
})
|
|
}, e.UploadEnvSpherical = function(e, t) {
|
|
1 !== t.version && p.a.Warn('Unsupported babylon environment map version "' + t.version + '"');
|
|
var i = t.irradiance;
|
|
if (i) {
|
|
var n = new zr.b;
|
|
o.x.FromArrayToRef(i.x, 0, n.x), o.x.FromArrayToRef(i.y, 0, n.y), o.x.FromArrayToRef(i.z, 0, n.z), o.x.FromArrayToRef(i.xx, 0, n.xx), o.x.FromArrayToRef(i.yy, 0, n.yy), o.x.FromArrayToRef(i.zz, 0, n.zz), o.x.FromArrayToRef(i.yz, 0, n.yz), o.x.FromArrayToRef(i.zx, 0, n.zx), o.x.FromArrayToRef(i.xy, 0, n.xy), e._sphericalPolynomial = n
|
|
}
|
|
}, e._UpdateRGBDAsync = function(t, i, n, r, o) {
|
|
return t._dataSource = ze.a.DATASOURCE_CUBERAW_RGBD, t._bufferViewArrayArray = i, t._lodGenerationScale = r, t._lodGenerationOffset = o, t._sphericalPolynomial = n, e.UploadLevelsAsync(t, i).then(function() {
|
|
t.isReady = !0
|
|
})
|
|
}, e._MagicBytes = [134, 22, 135, 150, 246, 214, 150, 54], e
|
|
}();
|
|
ze.a._UpdateRGBDAsync = Jr._UpdateRGBDAsync;
|
|
var $r = function() {
|
|
function e() {
|
|
this.supportCascades = !1
|
|
}
|
|
return e.prototype.canLoad = function(e, t, i, n, r) {
|
|
return 0 === e.indexOf(".env")
|
|
}, e.prototype.transformUrl = function(e, t) {
|
|
return e
|
|
}, e.prototype.getFallbackTextureUrl = function(e, t) {
|
|
return null
|
|
}, e.prototype.loadCubeData = function(e, t, i, n, r) {
|
|
if (!Array.isArray(e)) {
|
|
e = e;
|
|
var o = Jr.GetEnvInfo(e);
|
|
o ? (t.width = o.width, t.height = o.width, Jr.UploadEnvSpherical(t, o), Jr.UploadEnvLevelsAsync(t, e, o).then(function() {
|
|
t.isReady = !0, n && n()
|
|
})) : r && r("Can not parse the environment file", null)
|
|
}
|
|
}, e.prototype.loadData = function(e, t, i) {
|
|
throw ".env not supported in 2d."
|
|
}, e
|
|
}();
|
|
ge.b._TextureLoaders.push(new $r);
|
|
var eo = function() {
|
|
function e(t, i, n, r) {
|
|
this.arrayBuffer = t, this.isInvalid = !1;
|
|
var o = new Uint8Array(this.arrayBuffer, 0, 12);
|
|
if (171 !== o[0] || 75 !== o[1] || 84 !== o[2] || 88 !== o[3] || 32 !== o[4] || 49 !== o[5] || 49 !== o[6] || 187 !== o[7] || 13 !== o[8] || 10 !== o[9] || 26 !== o[10] || 10 !== o[11]) return this.isInvalid = !0, void p.a.Error("texture missing KTX identifier");
|
|
var s = Uint32Array.BYTES_PER_ELEMENT,
|
|
a = new DataView(this.arrayBuffer, 12, 13 * s),
|
|
c = 67305985 === a.getUint32(0, !0);
|
|
this.glType = a.getUint32(1 * s, c), this.glTypeSize = a.getUint32(2 * s, c), this.glFormat = a.getUint32(3 * s, c), this.glInternalFormat = a.getUint32(4 * s, c), this.glBaseInternalFormat = a.getUint32(5 * s, c), this.pixelWidth = a.getUint32(6 * s, c), this.pixelHeight = a.getUint32(7 * s, c), this.pixelDepth = a.getUint32(8 * s, c), this.numberOfArrayElements = a.getUint32(9 * s, c), this.numberOfFaces = a.getUint32(10 * s, c), this.numberOfMipmapLevels = a.getUint32(11 * s, c), this.bytesOfKeyValueData = a.getUint32(12 * s, c), 0 === this.glType ? (this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels), 0 !== this.pixelHeight && 0 === this.pixelDepth ? 0 === this.numberOfArrayElements ? this.numberOfFaces === i ? this.loadType = e.COMPRESSED_2D : p.a.Error("number of faces expected" + i + ", but found " + this.numberOfFaces) : p.a.Error("texture arrays not currently supported") : p.a.Error("only 2D textures currently supported")) : p.a.Error("only compressed formats currently supported")
|
|
}
|
|
return e.prototype.uploadLevels = function(t, i) {
|
|
switch (this.loadType) {
|
|
case e.COMPRESSED_2D:
|
|
this._upload2DCompressedLevels(t, i);
|
|
break;
|
|
case e.TEX_2D:
|
|
case e.COMPRESSED_3D:
|
|
case e.TEX_3D:
|
|
}
|
|
}, e.prototype._upload2DCompressedLevels = function(t, i) {
|
|
for (var n = e.HEADER_LEN + this.bytesOfKeyValueData, r = this.pixelWidth, o = this.pixelHeight, s = i ? this.numberOfMipmapLevels : 1, a = 0; a < s; a++) {
|
|
var c = new Int32Array(this.arrayBuffer, n, 1)[0];
|
|
n += 4;
|
|
for (var l = 0; l < this.numberOfFaces; l++) {
|
|
var u = new Uint8Array(this.arrayBuffer, n, c);
|
|
t.getEngine()._uploadCompressedDataToTextureDirectly(t, this.glInternalFormat, r, o, u, l, a), n += c, n += 3 - (c + 3) % 4
|
|
}
|
|
r = Math.max(1, .5 * r), o = Math.max(1, .5 * o)
|
|
}
|
|
}, e.HEADER_LEN = 64, e.COMPRESSED_2D = 0, e.COMPRESSED_3D = 1, e.TEX_2D = 2, e.TEX_3D = 3, e
|
|
}(),
|
|
to = function() {
|
|
function e() {
|
|
this.supportCascades = !1
|
|
}
|
|
return e.prototype.canLoad = function(e, t, i, n, r) {
|
|
return !(!t || n || i || r)
|
|
}, e.prototype.transformUrl = function(e, t) {
|
|
var i = e.lastIndexOf(".");
|
|
return -1 != i && "ktx" == e.substring(i + 1) ? e : (i > -1 ? e.substring(0, i) : e) + t
|
|
}, e.prototype.getFallbackTextureUrl = function(e, t) {
|
|
var i = new RegExp(t + "$");
|
|
return e.replace(i, "")
|
|
}, e.prototype.loadCubeData = function(e, t, i, n, r) {
|
|
if (!Array.isArray(e)) {
|
|
t._invertVScale = !t.invertY;
|
|
var o = t.getEngine(),
|
|
s = new eo(e, 6),
|
|
a = s.numberOfMipmapLevels > 1 && t.generateMipMaps;
|
|
o._unpackFlipY(!0), s.uploadLevels(t, t.generateMipMaps), t.width = s.pixelWidth, t.height = s.pixelHeight, o._setCubeMapTextureParams(a), t.isReady = !0
|
|
}
|
|
}, e.prototype.loadData = function(e, t, i) {
|
|
t._invertVScale = !t.invertY;
|
|
var n = new eo(e, 1);
|
|
i(n.pixelWidth, n.pixelHeight, !1, !0, function() {
|
|
n.uploadLevels(t, t.generateMipMaps)
|
|
}, n.isInvalid)
|
|
}, e
|
|
}();
|
|
ge.b._TextureLoaders.unshift(new to);
|
|
W.a.prototype.createDefaultLight = function(e) {
|
|
if (void 0 === e && (e = !1), e && this.lights)
|
|
for (var t = 0; t < this.lights.length; t++) this.lights[t].dispose();
|
|
0 === this.lights.length && new Ti.a("default light", o.x.Up(), this)
|
|
}, W.a.prototype.createDefaultCamera = function(e, t, i) {
|
|
if (void 0 === e && (e = !1), void 0 === t && (t = !1), void 0 === i && (i = !1), t && this.activeCamera && (this.activeCamera.dispose(), this.activeCamera = null), !this.activeCamera) {
|
|
var n, r = this.getWorldExtends(),
|
|
s = r.max.subtract(r.min),
|
|
a = r.min.add(s.scale(.5)),
|
|
c = 1.5 * s.length();
|
|
if (isFinite(c) || (c = 1, a.copyFromFloats(0, 0, 0)), e) {
|
|
var l = new Et("default camera", -Math.PI / 2, Math.PI / 2, c, a, this);
|
|
l.lowerRadiusLimit = .01 * c, l.wheelPrecision = 100 / c, n = l
|
|
} else {
|
|
var u = new bt("default camera", new o.x(a.x, a.y, -c), this);
|
|
u.setTarget(a), n = u
|
|
}
|
|
n.minZ = .01 * c, n.maxZ = 1e3 * c, n.speed = .2 * c, this.activeCamera = n;
|
|
var h = this.getEngine().getRenderingCanvas();
|
|
i && h && n.attachControl(h)
|
|
}
|
|
}, W.a.prototype.createDefaultCameraOrLight = function(e, t, i) {
|
|
void 0 === e && (e = !1), void 0 === t && (t = !1), void 0 === i && (i = !1), this.createDefaultLight(t), this.createDefaultCamera(e, t, i)
|
|
}, W.a.prototype.createDefaultSkybox = function(e, t, i, n, r) {
|
|
if (void 0 === t && (t = !1), void 0 === i && (i = 1e3), void 0 === n && (n = 0), void 0 === r && (r = !0), !e) return p.a.Warn("Can not create default skybox without environment texture."), null;
|
|
r && e && (this.environmentTexture = e);
|
|
var o = fe.a.CreateBox("hdrSkyBox", i, this);
|
|
if (t) {
|
|
var s = new kr("skyBox", this);
|
|
s.backFaceCulling = !1, s.reflectionTexture = e.clone(), s.reflectionTexture && (s.reflectionTexture.coordinatesMode = ke.a.SKYBOX_MODE), s.microSurface = 1 - n, s.disableLighting = !0, s.twoSidedLighting = !0, o.infiniteDistance = !0, o.material = s
|
|
} else {
|
|
var a = new Ri.a("skyBox", this);
|
|
a.backFaceCulling = !1, a.reflectionTexture = e.clone(), a.reflectionTexture && (a.reflectionTexture.coordinatesMode = ke.a.SKYBOX_MODE), a.disableLighting = !0, o.infiniteDistance = !0, o.material = a
|
|
}
|
|
return o.isPickable = !1, o
|
|
}, W.a.prototype.createDefaultEnvironment = function(e) {
|
|
return pr ? new pr(e, this) : null
|
|
}, W.a.prototype.createDefaultVRExperience = function(e) {
|
|
return void 0 === e && (e = {}), new Gi(this, e)
|
|
}, W.a.prototype.createDefaultXRExperienceAsync = function() {
|
|
var e = this;
|
|
return Hi.CreateAsync(this).then(function(t) {
|
|
var i = new qi(t);
|
|
return Yi.CreateAsync(e, t, {
|
|
outputCanvasContext: i.canvasContext
|
|
}).then(function(e) {
|
|
return new Qi(t), t
|
|
})
|
|
})
|
|
};
|
|
var io = function(e) {
|
|
function t(t, i, n, r, o, s, a) {
|
|
void 0 === r && (r = !1), void 0 === o && (o = !1), void 0 === s && (s = ke.a.TRILINEAR_SAMPLINGMODE), void 0 === a && (a = {
|
|
autoPlay: !0,
|
|
loop: !0,
|
|
autoUpdateTexture: !0
|
|
});
|
|
var c = e.call(this, null, n, !r, o) || this;
|
|
c._onUserActionRequestedObservable = null, c._stillImageCaptured = !1, c._displayingPosterTexture = !1, c._createInternalTexture = function() {
|
|
if (null != c._texture) {
|
|
if (!c._displayingPosterTexture) return;
|
|
c._texture.dispose(), c._displayingPosterTexture = !1
|
|
}
|
|
if (!c._engine.needPOTTextures || ye.h.IsExponentOfTwo(c.video.videoWidth) && ye.h.IsExponentOfTwo(c.video.videoHeight) ? (c.wrapU = ke.a.WRAP_ADDRESSMODE, c.wrapV = ke.a.WRAP_ADDRESSMODE) : (c.wrapU = ke.a.CLAMP_ADDRESSMODE, c.wrapV = ke.a.CLAMP_ADDRESSMODE, c._generateMipMaps = !1), c._texture = c._engine.createDynamicTexture(c.video.videoWidth, c.video.videoHeight, c._generateMipMaps, c.samplingMode), c.video.autoplay || c._settings.poster) c._texture.isReady = !0, c._updateInternalTexture(), c.onLoadObservable.hasObservers() && c.onLoadObservable.notifyObservers(c);
|
|
else {
|
|
var e = c.video.onplaying,
|
|
t = !1,
|
|
i = c.video.muted;
|
|
c.video.muted = !0, c.video.onplaying = function() {
|
|
c.video.muted = i, c.video.onplaying = e, c._texture.isReady = !0, c._updateInternalTexture(), t || c.video.pause(), c.onLoadObservable.hasObservers() && c.onLoadObservable.notifyObservers(c)
|
|
};
|
|
var n = c.video.play();
|
|
n ? n.then(function() {}).catch(function() {
|
|
t = !0, c._onUserActionRequestedObservable && c._onUserActionRequestedObservable.hasObservers() && c._onUserActionRequestedObservable.notifyObservers(c)
|
|
}) : (c.video.onplaying = e, c._texture.isReady = !0, c._updateInternalTexture(), c.onLoadObservable.hasObservers() && c.onLoadObservable.notifyObservers(c))
|
|
}
|
|
}, c.reset = function() {
|
|
null != c._texture && (c._displayingPosterTexture || (c._texture.dispose(), c._texture = null))
|
|
}, c._updateInternalTexture = function() {
|
|
null != c._texture && c._texture.isReady && (c.video.readyState < c.video.HAVE_CURRENT_DATA || c._displayingPosterTexture || c._engine.updateVideoTexture(c._texture, c.video, c._invertY))
|
|
}, c._engine = c.getScene().getEngine(), c._generateMipMaps = r, c._initialSamplingMode = s, c.autoUpdateTexture = a.autoUpdateTexture, c.name = t || c._getName(i), c.video = c._getVideo(i), c._settings = a, a.poster && (c.video.poster = a.poster), void 0 !== a.autoPlay && (c.video.autoplay = a.autoPlay), void 0 !== a.loop && (c.video.loop = a.loop), c.video.setAttribute("playsinline", ""), c.video.addEventListener("paused", c._updateInternalTexture), c.video.addEventListener("seeked", c._updateInternalTexture), c.video.addEventListener("emptied", c.reset), c._createInternalTextureOnEvent = a.poster && !a.autoPlay ? "play" : "canplay", c.video.addEventListener(c._createInternalTextureOnEvent, c._createInternalTexture);
|
|
var l = c.video.readyState >= c.video.HAVE_CURRENT_DATA;
|
|
return !a.poster || a.autoPlay && l ? l && c._createInternalTexture() : (c._texture = c._engine.createTexture(a.poster, !1, !0, n), c._displayingPosterTexture = !0), c
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "onUserActionRequestedObservable", {
|
|
get: function() {
|
|
return this._onUserActionRequestedObservable || (this._onUserActionRequestedObservable = new r.c), this._onUserActionRequestedObservable
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._getName = function(e) {
|
|
return e instanceof HTMLVideoElement ? e.currentSrc : "object" == typeof e ? e.toString() : e
|
|
}, t.prototype._getVideo = function(e) {
|
|
if (e instanceof HTMLVideoElement) return ye.h.SetCorsBehavior(e.currentSrc, e), e;
|
|
var t = document.createElement("video");
|
|
return "string" == typeof e ? (ye.h.SetCorsBehavior(e, t), t.src = e) : (ye.h.SetCorsBehavior(e[0], t), e.forEach(function(e) {
|
|
var i = document.createElement("source");
|
|
i.src = e, t.appendChild(i)
|
|
})), t
|
|
}, t.prototype._rebuild = function() {
|
|
this.update()
|
|
}, t.prototype.update = function() {
|
|
this.autoUpdateTexture && this.updateTexture(!0)
|
|
}, t.prototype.updateTexture = function(e) {
|
|
e && (this.video.paused && this._stillImageCaptured || (this._stillImageCaptured = !0, this._updateInternalTexture()))
|
|
}, t.prototype.updateURL = function(e) {
|
|
this.video.src = e
|
|
}, t.prototype.dispose = function() {
|
|
e.prototype.dispose.call(this), this._onUserActionRequestedObservable && (this._onUserActionRequestedObservable.clear(), this._onUserActionRequestedObservable = null), this.video.removeEventListener(this._createInternalTextureOnEvent, this._createInternalTexture), this.video.removeEventListener("paused", this._updateInternalTexture), this.video.removeEventListener("seeked", this._updateInternalTexture), this.video.removeEventListener("emptied", this.reset), this.video.pause()
|
|
}, t.CreateFromStreamAsync = function(e, i) {
|
|
var n = document.createElement("video");
|
|
return n.setAttribute("autoplay", ""), n.setAttribute("muted", "true"), n.setAttribute("playsinline", ""), n.muted = !0, void 0 !== n.mozSrcObject ? n.mozSrcObject = i : "object" == typeof n.srcObject ? n.srcObject = i : (window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL, n.src = window.URL && window.URL.createObjectURL(i)), new Promise(function(i) {
|
|
var r = function() {
|
|
i(new t("video", n, e, !0, !0)), n.removeEventListener("playing", r)
|
|
};
|
|
n.addEventListener("playing", r), n.play()
|
|
})
|
|
}, t.CreateFromWebCamAsync = function(e, t, i) {
|
|
var n, r = this;
|
|
return void 0 === i && (i = !1), t && t.deviceId && (n = {
|
|
exact: t.deviceId
|
|
}), navigator.mediaDevices ? navigator.mediaDevices.getUserMedia({
|
|
video: t,
|
|
audio: i
|
|
}).then(function(t) {
|
|
return r.CreateFromStreamAsync(e, t)
|
|
}) : (navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia, navigator.getUserMedia && navigator.getUserMedia({
|
|
video: {
|
|
deviceId: n,
|
|
width: {
|
|
min: t && t.minWidth || 256,
|
|
max: t && t.maxWidth || 640
|
|
},
|
|
height: {
|
|
min: t && t.minHeight || 256,
|
|
max: t && t.maxHeight || 480
|
|
}
|
|
},
|
|
audio: i
|
|
}, function(t) {
|
|
return r.CreateFromStreamAsync(e, t)
|
|
}, function(e) {
|
|
p.a.Error(e.name)
|
|
}), Promise.reject("No support for userMedia on this device"))
|
|
}, t.CreateFromWebCam = function(e, t, i, n) {
|
|
void 0 === n && (n = !1), this.CreateFromWebCamAsync(e, i, n).then(function(e) {
|
|
t && t(e)
|
|
}).catch(function(e) {
|
|
p.a.Error(e.name)
|
|
})
|
|
}, t
|
|
}(ke.a),
|
|
no = function(e) {
|
|
function t(i, n, r, s) {
|
|
var a = e.call(this, i, s) || this;
|
|
a._useDirectMapping = !1, a._videoMode = t.MODE_MONOSCOPIC, a._onBeforeCameraRenderObserver = null, s = a.getScene(), i = i || "videoDome", r.resolution = 0 | Math.abs(r.resolution) || 32, r.clickToPlay = Boolean(r.clickToPlay), r.autoPlay = void 0 === r.autoPlay || Boolean(r.autoPlay), r.loop = void 0 === r.loop || Boolean(r.loop), r.size = Math.abs(r.size) || (s.activeCamera ? .48 * s.activeCamera.maxZ : 1e3), void 0 === r.useDirectMapping ? a._useDirectMapping = !0 : a._useDirectMapping = r.useDirectMapping, void 0 === r.faceForward && (r.faceForward = !0), a._setReady(!1);
|
|
var c = {
|
|
loop: r.loop,
|
|
autoPlay: r.autoPlay,
|
|
autoUpdateTexture: !0,
|
|
poster: r.poster
|
|
},
|
|
l = a._material = new dr(i + "_material", s),
|
|
u = a._videoTexture = new io(i + "_texture", n, s, !1, a._useDirectMapping, ke.a.TRILINEAR_SAMPLINGMODE, c);
|
|
if (a._mesh = fe.a.CreateSphere(i + "_mesh", r.resolution, r.size, s, !1, fe.a.BACKSIDE), u.onLoadObservable.addOnce(function() {
|
|
a._setReady(!0)
|
|
}), l.useEquirectangularFOV = !0, l.fovMultiplier = 1, l.opacityFresnel = !1, a._useDirectMapping ? (u.wrapU = ke.a.CLAMP_ADDRESSMODE, u.wrapV = ke.a.CLAMP_ADDRESSMODE, l.diffuseTexture = u) : (u.coordinatesMode = ke.a.FIXED_EQUIRECTANGULAR_MIRRORED_MODE, u.wrapV = ke.a.CLAMP_ADDRESSMODE, l.reflectionTexture = u), a._mesh.material = l, a._mesh.parent = a, r.clickToPlay && (s.onPointerUp = function() {
|
|
a._videoTexture.video.play()
|
|
}), r.faceForward && s.activeCamera) {
|
|
var h = s.activeCamera,
|
|
d = o.x.Forward(),
|
|
f = o.x.TransformNormal(d, h.getViewMatrix());
|
|
f.normalize(), a.rotation.y = Math.acos(o.x.Dot(d, f))
|
|
}
|
|
return a
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "videoTexture", {
|
|
get: function() {
|
|
return this._videoTexture
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "fovMultiplier", {
|
|
get: function() {
|
|
return this._material.fovMultiplier
|
|
},
|
|
set: function(e) {
|
|
this._material.fovMultiplier = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "videoMode", {
|
|
get: function() {
|
|
return this._videoMode
|
|
},
|
|
set: function(e) {
|
|
this._videoMode !== e && this._changeVideoMode(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._changeVideoMode = function(e) {
|
|
var i = this;
|
|
switch (this._scene.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver), this._videoMode = e, this._videoTexture.uScale = 1, this._videoTexture.vScale = 1, this._videoTexture.uOffset = 0, this._videoTexture.vOffset = 0, e) {
|
|
case t.MODE_SIDEBYSIDE:
|
|
this._videoTexture.uScale = .5, this._onBeforeCameraRenderObserver = this._scene.onBeforeCameraRenderObservable.add(function(e) {
|
|
i._videoTexture.uOffset = e.isRightCamera ? .5 : 0
|
|
});
|
|
break;
|
|
case t.MODE_TOPBOTTOM:
|
|
this._videoTexture.vScale = .5, this._onBeforeCameraRenderObserver = this._scene.onBeforeCameraRenderObservable.add(function(e) {
|
|
i._videoTexture.vOffset = e.isRightCamera ? .5 : 0
|
|
})
|
|
}
|
|
}, t.prototype.dispose = function(t, i) {
|
|
void 0 === i && (i = !1), this._videoTexture.dispose(), this._mesh.dispose(), this._material.dispose(), this._scene.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver), e.prototype.dispose.call(this, t, i)
|
|
}, t.MODE_MONOSCOPIC = 0, t.MODE_TOPBOTTOM = 1, t.MODE_SIDEBYSIDE = 2, t
|
|
}(_r.a),
|
|
ro = function() {
|
|
function e(e) {
|
|
this.engine = e, this._captureGPUFrameTime = !1, this._gpuFrameTime = new ye.f, this._captureShaderCompilationTime = !1, this._shaderCompilationTime = new ye.f, this._onBeginFrameObserver = null, this._onEndFrameObserver = null, this._onBeforeShaderCompilationObserver = null, this._onAfterShaderCompilationObserver = null
|
|
}
|
|
return Object.defineProperty(e.prototype, "gpuFrameTimeCounter", {
|
|
get: function() {
|
|
return this._gpuFrameTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureGPUFrameTime", {
|
|
get: function() {
|
|
return this._captureGPUFrameTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._captureGPUFrameTime && (this._captureGPUFrameTime = e, e ? (this._onBeginFrameObserver = this.engine.onBeginFrameObservable.add(function() {
|
|
t._gpuFrameTimeToken || (t._gpuFrameTimeToken = t.engine.startTimeQuery())
|
|
}), this._onEndFrameObserver = this.engine.onEndFrameObservable.add(function() {
|
|
if (t._gpuFrameTimeToken) {
|
|
var e = t.engine.endTimeQuery(t._gpuFrameTimeToken);
|
|
e > -1 && (t._gpuFrameTimeToken = null, t._gpuFrameTime.fetchNewFrame(), t._gpuFrameTime.addCount(e, !0))
|
|
}
|
|
})) : (this.engine.onBeginFrameObservable.remove(this._onBeginFrameObserver), this._onBeginFrameObserver = null, this.engine.onEndFrameObservable.remove(this._onEndFrameObserver), this._onEndFrameObserver = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "shaderCompilationTimeCounter", {
|
|
get: function() {
|
|
return this._shaderCompilationTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureShaderCompilationTime", {
|
|
get: function() {
|
|
return this._captureShaderCompilationTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._captureShaderCompilationTime && (this._captureShaderCompilationTime = e, e ? (this._onBeforeShaderCompilationObserver = this.engine.onBeforeShaderCompilationObservable.add(function() {
|
|
t._shaderCompilationTime.fetchNewFrame(), t._shaderCompilationTime.beginMonitoring()
|
|
}), this._onAfterShaderCompilationObserver = this.engine.onAfterShaderCompilationObservable.add(function() {
|
|
t._shaderCompilationTime.endMonitoring()
|
|
})) : (this.engine.onBeforeShaderCompilationObservable.remove(this._onBeforeShaderCompilationObserver), this._onBeforeShaderCompilationObserver = null, this.engine.onAfterShaderCompilationObservable.remove(this._onAfterShaderCompilationObserver), this._onAfterShaderCompilationObserver = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.dispose = function() {
|
|
this.engine.onBeginFrameObservable.remove(this._onBeginFrameObserver), this._onBeginFrameObserver = null, this.engine.onEndFrameObservable.remove(this._onEndFrameObserver), this._onEndFrameObserver = null, this.engine.onBeforeShaderCompilationObservable.remove(this._onBeforeShaderCompilationObserver), this._onBeforeShaderCompilationObserver = null, this.engine.onAfterShaderCompilationObservable.remove(this._onAfterShaderCompilationObserver), this._onAfterShaderCompilationObserver = null, this.engine = null
|
|
}, e
|
|
}(),
|
|
oo = function() {
|
|
function e(e) {
|
|
var t = this;
|
|
this.scene = e, this._captureActiveMeshesEvaluationTime = !1, this._activeMeshesEvaluationTime = new ye.f, this._captureRenderTargetsRenderTime = !1, this._renderTargetsRenderTime = new ye.f, this._captureFrameTime = !1, this._frameTime = new ye.f, this._captureRenderTime = !1, this._renderTime = new ye.f, this._captureInterFrameTime = !1, this._interFrameTime = new ye.f, this._captureParticlesRenderTime = !1, this._particlesRenderTime = new ye.f, this._captureSpritesRenderTime = !1, this._spritesRenderTime = new ye.f, this._capturePhysicsTime = !1, this._physicsTime = new ye.f, this._captureAnimationsTime = !1, this._animationsTime = new ye.f, this._captureCameraRenderTime = !1, this._cameraRenderTime = new ye.f, this._onBeforeActiveMeshesEvaluationObserver = null, this._onAfterActiveMeshesEvaluationObserver = null, this._onBeforeRenderTargetsRenderObserver = null, this._onAfterRenderTargetsRenderObserver = null, this._onAfterRenderObserver = null, this._onBeforeDrawPhaseObserver = null, this._onAfterDrawPhaseObserver = null, this._onBeforeAnimationsObserver = null, this._onBeforeParticlesRenderingObserver = null, this._onAfterParticlesRenderingObserver = null, this._onBeforeSpritesRenderingObserver = null, this._onAfterSpritesRenderingObserver = null, this._onBeforePhysicsObserver = null, this._onAfterPhysicsObserver = null, this._onAfterAnimationsObserver = null, this._onBeforeCameraRenderObserver = null, this._onAfterCameraRenderObserver = null, this._onBeforeAnimationsObserver = e.onBeforeAnimationsObservable.add(function() {
|
|
t._captureActiveMeshesEvaluationTime && t._activeMeshesEvaluationTime.fetchNewFrame(), t._captureRenderTargetsRenderTime && t._renderTargetsRenderTime.fetchNewFrame(), t._captureFrameTime && (ye.h.StartPerformanceCounter("Scene rendering"), t._frameTime.beginMonitoring()), t._captureInterFrameTime && t._interFrameTime.endMonitoring(), t._captureParticlesRenderTime && t._particlesRenderTime.fetchNewFrame(), t._captureSpritesRenderTime && t._spritesRenderTime.fetchNewFrame(), t._captureAnimationsTime && t._animationsTime.beginMonitoring(), t.scene.getEngine()._drawCalls.fetchNewFrame()
|
|
}), this._onAfterRenderObserver = e.onAfterRenderObservable.add(function() {
|
|
t._captureFrameTime && (ye.h.EndPerformanceCounter("Scene rendering"), t._frameTime.endMonitoring()), t._captureRenderTime && t._renderTime.endMonitoring(!1), t._captureInterFrameTime && t._interFrameTime.beginMonitoring()
|
|
})
|
|
}
|
|
return Object.defineProperty(e.prototype, "activeMeshesEvaluationTimeCounter", {
|
|
get: function() {
|
|
return this._activeMeshesEvaluationTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureActiveMeshesEvaluationTime", {
|
|
get: function() {
|
|
return this._captureActiveMeshesEvaluationTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._captureActiveMeshesEvaluationTime && (this._captureActiveMeshesEvaluationTime = e, e ? (this._onBeforeActiveMeshesEvaluationObserver = this.scene.onBeforeActiveMeshesEvaluationObservable.add(function() {
|
|
ye.h.StartPerformanceCounter("Active meshes evaluation"), t._activeMeshesEvaluationTime.beginMonitoring()
|
|
}), this._onAfterActiveMeshesEvaluationObserver = this.scene.onAfterActiveMeshesEvaluationObservable.add(function() {
|
|
ye.h.EndPerformanceCounter("Active meshes evaluation"), t._activeMeshesEvaluationTime.endMonitoring()
|
|
})) : (this.scene.onBeforeActiveMeshesEvaluationObservable.remove(this._onBeforeActiveMeshesEvaluationObserver), this._onBeforeActiveMeshesEvaluationObserver = null, this.scene.onAfterActiveMeshesEvaluationObservable.remove(this._onAfterActiveMeshesEvaluationObserver), this._onAfterActiveMeshesEvaluationObserver = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "renderTargetsRenderTimeCounter", {
|
|
get: function() {
|
|
return this._renderTargetsRenderTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureRenderTargetsRenderTime", {
|
|
get: function() {
|
|
return this._captureRenderTargetsRenderTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._captureRenderTargetsRenderTime && (this._captureRenderTargetsRenderTime = e, e ? (this._onBeforeRenderTargetsRenderObserver = this.scene.onBeforeRenderTargetsRenderObservable.add(function() {
|
|
ye.h.StartPerformanceCounter("Render targets rendering"), t._renderTargetsRenderTime.beginMonitoring()
|
|
}), this._onAfterRenderTargetsRenderObserver = this.scene.onAfterRenderTargetsRenderObservable.add(function() {
|
|
ye.h.EndPerformanceCounter("Render targets rendering"), t._renderTargetsRenderTime.endMonitoring(!1)
|
|
})) : (this.scene.onBeforeRenderTargetsRenderObservable.remove(this._onBeforeRenderTargetsRenderObserver), this._onBeforeRenderTargetsRenderObserver = null, this.scene.onAfterRenderTargetsRenderObservable.remove(this._onAfterRenderTargetsRenderObserver), this._onAfterRenderTargetsRenderObserver = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "particlesRenderTimeCounter", {
|
|
get: function() {
|
|
return this._particlesRenderTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureParticlesRenderTime", {
|
|
get: function() {
|
|
return this._captureParticlesRenderTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._captureParticlesRenderTime && (this._captureParticlesRenderTime = e, e ? (this._onBeforeParticlesRenderingObserver = this.scene.onBeforeParticlesRenderingObservable.add(function() {
|
|
ye.h.StartPerformanceCounter("Particles"), t._particlesRenderTime.beginMonitoring()
|
|
}), this._onAfterParticlesRenderingObserver = this.scene.onAfterParticlesRenderingObservable.add(function() {
|
|
ye.h.EndPerformanceCounter("Particles"), t._particlesRenderTime.endMonitoring(!1)
|
|
})) : (this.scene.onBeforeParticlesRenderingObservable.remove(this._onBeforeParticlesRenderingObserver), this._onBeforeParticlesRenderingObserver = null, this.scene.onAfterParticlesRenderingObservable.remove(this._onAfterParticlesRenderingObserver), this._onAfterParticlesRenderingObserver = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "spritesRenderTimeCounter", {
|
|
get: function() {
|
|
return this._spritesRenderTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureSpritesRenderTime", {
|
|
get: function() {
|
|
return this._captureSpritesRenderTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._captureSpritesRenderTime && (this._captureSpritesRenderTime = e, this.scene.spriteManagers && (e ? (this._onBeforeSpritesRenderingObserver = this.scene.onBeforeSpritesRenderingObservable.add(function() {
|
|
ye.h.StartPerformanceCounter("Sprites"), t._spritesRenderTime.beginMonitoring()
|
|
}), this._onAfterSpritesRenderingObserver = this.scene.onAfterSpritesRenderingObservable.add(function() {
|
|
ye.h.EndPerformanceCounter("Sprites"), t._spritesRenderTime.endMonitoring(!1)
|
|
})) : (this.scene.onBeforeSpritesRenderingObservable.remove(this._onBeforeSpritesRenderingObserver), this._onBeforeSpritesRenderingObserver = null, this.scene.onAfterSpritesRenderingObservable.remove(this._onAfterSpritesRenderingObserver), this._onAfterSpritesRenderingObserver = null)))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "physicsTimeCounter", {
|
|
get: function() {
|
|
return this._physicsTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "capturePhysicsTime", {
|
|
get: function() {
|
|
return this._capturePhysicsTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._capturePhysicsTime && this.scene.onBeforePhysicsObservable && (this._capturePhysicsTime = e, e ? (this._onBeforePhysicsObserver = this.scene.onBeforePhysicsObservable.add(function() {
|
|
ye.h.StartPerformanceCounter("Physics"), t._physicsTime.beginMonitoring()
|
|
}), this._onAfterPhysicsObserver = this.scene.onAfterPhysicsObservable.add(function() {
|
|
ye.h.EndPerformanceCounter("Physics"), t._physicsTime.endMonitoring()
|
|
})) : (this.scene.onBeforePhysicsObservable.remove(this._onBeforePhysicsObserver), this._onBeforePhysicsObserver = null, this.scene.onAfterPhysicsObservable.remove(this._onAfterPhysicsObserver), this._onAfterPhysicsObserver = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "animationsTimeCounter", {
|
|
get: function() {
|
|
return this._animationsTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureAnimationsTime", {
|
|
get: function() {
|
|
return this._captureAnimationsTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._captureAnimationsTime && (this._captureAnimationsTime = e, e ? this._onAfterAnimationsObserver = this.scene.onAfterAnimationsObservable.add(function() {
|
|
t._animationsTime.endMonitoring()
|
|
}) : (this.scene.onAfterAnimationsObservable.remove(this._onAfterAnimationsObserver), this._onAfterAnimationsObserver = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "frameTimeCounter", {
|
|
get: function() {
|
|
return this._frameTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureFrameTime", {
|
|
get: function() {
|
|
return this._captureFrameTime
|
|
},
|
|
set: function(e) {
|
|
this._captureFrameTime = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "interFrameTimeCounter", {
|
|
get: function() {
|
|
return this._interFrameTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureInterFrameTime", {
|
|
get: function() {
|
|
return this._captureInterFrameTime
|
|
},
|
|
set: function(e) {
|
|
this._captureInterFrameTime = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "renderTimeCounter", {
|
|
get: function() {
|
|
return this._renderTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureRenderTime", {
|
|
get: function() {
|
|
return this._captureRenderTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._captureRenderTime && (this._captureRenderTime = e, e ? (this._onBeforeDrawPhaseObserver = this.scene.onBeforeDrawPhaseObservable.add(function() {
|
|
t._renderTime.beginMonitoring(), ye.h.StartPerformanceCounter("Main render")
|
|
}), this._onAfterDrawPhaseObserver = this.scene.onAfterDrawPhaseObservable.add(function() {
|
|
t._renderTime.endMonitoring(!1), ye.h.EndPerformanceCounter("Main render")
|
|
})) : (this.scene.onBeforeDrawPhaseObservable.remove(this._onBeforeDrawPhaseObserver), this._onBeforeDrawPhaseObserver = null, this.scene.onAfterDrawPhaseObservable.remove(this._onAfterDrawPhaseObserver), this._onAfterDrawPhaseObserver = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "cameraRenderTimeCounter", {
|
|
get: function() {
|
|
return this._cameraRenderTime
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "captureCameraRenderTime", {
|
|
get: function() {
|
|
return this._captureCameraRenderTime
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
e !== this._captureCameraRenderTime && (this._captureCameraRenderTime = e, e ? (this._onBeforeCameraRenderObserver = this.scene.onBeforeCameraRenderObservable.add(function(e) {
|
|
t._cameraRenderTime.beginMonitoring(), ye.h.StartPerformanceCounter("Rendering camera " + e.name)
|
|
}), this._onAfterCameraRenderObserver = this.scene.onAfterCameraRenderObservable.add(function(e) {
|
|
t._cameraRenderTime.endMonitoring(!1), ye.h.EndPerformanceCounter("Rendering camera " + e.name)
|
|
})) : (this.scene.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver), this._onBeforeCameraRenderObserver = null, this.scene.onAfterCameraRenderObservable.remove(this._onAfterCameraRenderObserver), this._onAfterCameraRenderObserver = null))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "drawCallsCounter", {
|
|
get: function() {
|
|
return this.scene.getEngine()._drawCalls
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.dispose = function() {
|
|
this.scene.onAfterRenderObservable.remove(this._onAfterRenderObserver), this._onAfterRenderObserver = null, this.scene.onBeforeActiveMeshesEvaluationObservable.remove(this._onBeforeActiveMeshesEvaluationObserver), this._onBeforeActiveMeshesEvaluationObserver = null, this.scene.onAfterActiveMeshesEvaluationObservable.remove(this._onAfterActiveMeshesEvaluationObserver), this._onAfterActiveMeshesEvaluationObserver = null, this.scene.onBeforeRenderTargetsRenderObservable.remove(this._onBeforeRenderTargetsRenderObserver), this._onBeforeRenderTargetsRenderObserver = null, this.scene.onAfterRenderTargetsRenderObservable.remove(this._onAfterRenderTargetsRenderObserver), this._onAfterRenderTargetsRenderObserver = null, this.scene.onBeforeAnimationsObservable.remove(this._onBeforeAnimationsObserver), this._onBeforeAnimationsObserver = null, this.scene.onBeforeParticlesRenderingObservable.remove(this._onBeforeParticlesRenderingObserver), this._onBeforeParticlesRenderingObserver = null, this.scene.onAfterParticlesRenderingObservable.remove(this._onAfterParticlesRenderingObserver), this._onAfterParticlesRenderingObserver = null, this._onBeforeSpritesRenderingObserver && (this.scene.onBeforeSpritesRenderingObservable.remove(this._onBeforeSpritesRenderingObserver), this._onBeforeSpritesRenderingObserver = null), this._onAfterSpritesRenderingObserver && (this.scene.onAfterSpritesRenderingObservable.remove(this._onAfterSpritesRenderingObserver), this._onAfterSpritesRenderingObserver = null), this.scene.onBeforeDrawPhaseObservable.remove(this._onBeforeDrawPhaseObserver), this._onBeforeDrawPhaseObserver = null, this.scene.onAfterDrawPhaseObservable.remove(this._onAfterDrawPhaseObserver), this._onAfterDrawPhaseObserver = null, this._onBeforePhysicsObserver && (this.scene.onBeforePhysicsObservable.remove(this._onBeforePhysicsObserver), this._onBeforePhysicsObserver = null), this._onAfterPhysicsObserver && (this.scene.onAfterPhysicsObservable.remove(this._onAfterPhysicsObserver), this._onAfterPhysicsObserver = null), this.scene.onAfterAnimationsObservable.remove(this._onAfterAnimationsObserver), this._onAfterAnimationsObserver = null, this.scene.onBeforeCameraRenderObservable.remove(this._onBeforeCameraRenderObserver), this._onBeforeCameraRenderObserver = null, this.scene.onAfterCameraRenderObservable.remove(this._onAfterCameraRenderObserver), this._onAfterCameraRenderObserver = null, this.scene = null
|
|
}, e
|
|
}(),
|
|
so = i(20),
|
|
ao = "#ifdef DIFFUSE\nvarying vec2 vUVDiffuse;\nuniform sampler2D diffuseSampler;\n#endif\n#ifdef OPACITY\nvarying vec2 vUVOpacity;\nuniform sampler2D opacitySampler;\nuniform float opacityIntensity;\n#endif\n#ifdef EMISSIVE\nvarying vec2 vUVEmissive;\nuniform sampler2D emissiveSampler;\n#endif\n#ifdef VERTEXALPHA\nvarying vec4 vColor;\n#endif\nuniform vec4 glowColor;\nvoid main(void)\n{\nvec4 finalColor=glowColor;\n\n#ifdef DIFFUSE\nvec4 albedoTexture=texture2D(diffuseSampler,vUVDiffuse);\nfinalColor.a*=albedoTexture.a;\n#endif\n#ifdef OPACITY\nvec4 opacityMap=texture2D(opacitySampler,vUVOpacity);\n#ifdef OPACITYRGB\nfinalColor.a*=getLuminance(opacityMap.rgb);\n#else\nfinalColor.a*=opacityMap.a;\n#endif\nfinalColor.a*=opacityIntensity;\n#endif\n#ifdef VERTEXALPHA\nfinalColor.a*=vColor.a;\n#endif\n#ifdef ALPHATEST\nif (finalColor.a<ALPHATESTVALUE)\ndiscard;\n#endif\n#ifdef EMISSIVE\ngl_FragColor=texture2D(emissiveSampler,vUVEmissive)*finalColor;\n#else\ngl_FragColor=finalColor;\n#endif\n}";
|
|
zt.a.ShadersStore.glowMapGenerationPixelShader = ao;
|
|
var co = "\nattribute vec3 position;\n#include<bonesDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n\n#include<instancesDeclaration>\nuniform mat4 viewProjection;\nvarying vec4 vPosition;\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#ifdef DIFFUSE\nvarying vec2 vUVDiffuse;\nuniform mat4 diffuseMatrix;\n#endif\n#ifdef OPACITY\nvarying vec2 vUVOpacity;\nuniform mat4 opacityMatrix;\n#endif\n#ifdef EMISSIVE\nvarying vec2 vUVEmissive;\nuniform mat4 emissiveMatrix;\n#endif\n#ifdef VERTEXALPHA\nattribute vec4 color;\nvarying vec4 vColor;\n#endif\nvoid main(void)\n{\nvec3 positionUpdated=position;\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#include<bonesVertex>\n#ifdef CUBEMAP\nvPosition=finalWorld*vec4(positionUpdated,1.0);\ngl_Position=viewProjection*finalWorld*vec4(position,1.0);\n#else\nvPosition=viewProjection*finalWorld*vec4(positionUpdated,1.0);\ngl_Position=vPosition;\n#endif\n#ifdef DIFFUSE\n#ifdef DIFFUSEUV1\nvUVDiffuse=vec2(diffuseMatrix*vec4(uv,1.0,0.0));\n#endif\n#ifdef DIFFUSEUV2\nvUVDiffuse=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));\n#endif\n#endif\n#ifdef OPACITY\n#ifdef OPACITYUV1\nvUVOpacity=vec2(opacityMatrix*vec4(uv,1.0,0.0));\n#endif\n#ifdef OPACITYUV2\nvUVOpacity=vec2(opacityMatrix*vec4(uv2,1.0,0.0));\n#endif\n#endif\n#ifdef EMISSIVE\n#ifdef EMISSIVEUV1\nvUVEmissive=vec2(emissiveMatrix*vec4(uv,1.0,0.0));\n#endif\n#ifdef EMISSIVEUV2\nvUVEmissive=vec2(emissiveMatrix*vec4(uv2,1.0,0.0));\n#endif\n#endif\n#ifdef VERTEXALPHA\nvColor=color;\n#endif\n}";
|
|
zt.a.ShadersStore.glowMapGenerationVertexShader = co;
|
|
var lo = function() {
|
|
function e(t, i) {
|
|
this._vertexBuffers = {}, this._maxSize = 0, this._mainTextureDesiredSize = {
|
|
width: 0,
|
|
height: 0
|
|
}, this._shouldRender = !0, this._postProcesses = [], this._textures = [], this._emissiveTextureAndColor = {
|
|
texture: null,
|
|
color: new o.f
|
|
}, this.neutralColor = new o.f, this.isEnabled = !0, this.onDisposeObservable = new r.c, this.onBeforeRenderMainTextureObservable = new r.c, this.onBeforeComposeObservable = new r.c, this.onAfterComposeObservable = new r.c, this.onSizeChangedObservable = new r.c, this.name = t, this._scene = i || P.a.LastCreatedScene, e._SceneComponentInitialization(this._scene), this._engine = this._scene.getEngine(), this._maxSize = this._engine.getCaps().maxTextureSize, this._scene.effectLayers.push(this), this._generateIndexBuffer(), this._generateVertexBuffer()
|
|
}
|
|
return Object.defineProperty(e.prototype, "camera", {
|
|
get: function() {
|
|
return this._effectLayerOptions.camera
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "renderingGroupId", {
|
|
get: function() {
|
|
return this._effectLayerOptions.renderingGroupId
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._init = function(e) {
|
|
this._effectLayerOptions = l.a({
|
|
mainTextureRatio: .5,
|
|
alphaBlendingMode: _.a.ALPHA_COMBINE,
|
|
camera: null,
|
|
renderingGroupId: -1
|
|
}, e), this._setMainTextureSize(), this._createMainTexture(), this._createTextureAndPostProcesses(), this._mergeEffect = this._createMergeEffect()
|
|
}, e.prototype._generateIndexBuffer = function() {
|
|
var e = [];
|
|
e.push(0), e.push(1), e.push(2), e.push(0), e.push(2), e.push(3), this._indexBuffer = this._engine.createIndexBuffer(e)
|
|
}, e.prototype._generateVertexBuffer = function() {
|
|
var e = [];
|
|
e.push(1, 1), e.push(-1, 1), e.push(-1, -1), e.push(1, -1);
|
|
var t = new Oi.b(this._engine, e, Oi.b.PositionKind, !1, !1, 2);
|
|
this._vertexBuffers[Oi.b.PositionKind] = t
|
|
}, e.prototype._setMainTextureSize = function() {
|
|
this._effectLayerOptions.mainTextureFixedSize ? (this._mainTextureDesiredSize.width = this._effectLayerOptions.mainTextureFixedSize, this._mainTextureDesiredSize.height = this._effectLayerOptions.mainTextureFixedSize) : (this._mainTextureDesiredSize.width = this._engine.getRenderWidth() * this._effectLayerOptions.mainTextureRatio, this._mainTextureDesiredSize.height = this._engine.getRenderHeight() * this._effectLayerOptions.mainTextureRatio, this._mainTextureDesiredSize.width = this._engine.needPOTTextures ? ye.h.GetExponentOfTwo(this._mainTextureDesiredSize.width, this._maxSize) : this._mainTextureDesiredSize.width, this._mainTextureDesiredSize.height = this._engine.needPOTTextures ? ye.h.GetExponentOfTwo(this._mainTextureDesiredSize.height, this._maxSize) : this._mainTextureDesiredSize.height), this._mainTextureDesiredSize.width = Math.floor(this._mainTextureDesiredSize.width), this._mainTextureDesiredSize.height = Math.floor(this._mainTextureDesiredSize.height)
|
|
}, e.prototype._createMainTexture = function() {
|
|
var e = this;
|
|
this._mainTexture = new _i("HighlightLayerMainRTT", {
|
|
width: this._mainTextureDesiredSize.width,
|
|
height: this._mainTextureDesiredSize.height
|
|
}, this._scene, !1, !0, _.a.TEXTURETYPE_UNSIGNED_INT), this._mainTexture.activeCamera = this._effectLayerOptions.camera, this._mainTexture.wrapU = ke.a.CLAMP_ADDRESSMODE, this._mainTexture.wrapV = ke.a.CLAMP_ADDRESSMODE, this._mainTexture.anisotropicFilteringLevel = 1, this._mainTexture.updateSamplingMode(ke.a.BILINEAR_SAMPLINGMODE), this._mainTexture.renderParticles = !1, this._mainTexture.renderList = null, this._mainTexture.ignoreCameraViewport = !0, this._mainTexture.customRenderFunction = function(t, i, n, r) {
|
|
var o;
|
|
e.onBeforeRenderMainTextureObservable.notifyObservers(e);
|
|
var s = e._scene.getEngine();
|
|
if (r.length) {
|
|
for (s.setColorWrite(!1), o = 0; o < r.length; o++) e._renderSubMesh(r.data[o]);
|
|
s.setColorWrite(!0)
|
|
}
|
|
for (o = 0; o < t.length; o++) e._renderSubMesh(t.data[o]);
|
|
for (o = 0; o < i.length; o++) e._renderSubMesh(i.data[o]);
|
|
var a = s.getAlphaMode();
|
|
for (o = 0; o < n.length; o++) e._renderSubMesh(n.data[o], !0);
|
|
s.setAlphaMode(a)
|
|
}, this._mainTexture.onClearObservable.add(function(t) {
|
|
t.clear(e.neutralColor, !0, !0, !0)
|
|
})
|
|
}, e.prototype._addCustomEffectDefines = function(e) {}, e.prototype._isReady = function(e, t, i) {
|
|
var n = e.getMaterial();
|
|
if (!n) return !1;
|
|
if (!n.isReadyForSubMesh(e.getMesh(), e, t)) return !1;
|
|
var r = [],
|
|
o = [Oi.b.PositionKind],
|
|
s = e.getMesh(),
|
|
a = !1,
|
|
c = !1;
|
|
if (n) {
|
|
var l = n.needAlphaTesting(),
|
|
u = n.getAlphaTestTexture(),
|
|
h = u && u.hasAlpha && (n.useAlphaFromDiffuseTexture || n._useAlphaFromAlbedoTexture);
|
|
u && (l || h) && (r.push("#define DIFFUSE"), s.isVerticesDataPresent(Oi.b.UV2Kind) && 1 === u.coordinatesIndex ? (r.push("#define DIFFUSEUV2"), c = !0) : s.isVerticesDataPresent(Oi.b.UVKind) && (r.push("#define DIFFUSEUV1"), a = !0), l && (r.push("#define ALPHATEST"), r.push("#define ALPHATESTVALUE 0.4")));
|
|
var d = n.opacityTexture;
|
|
d && (r.push("#define OPACITY"), s.isVerticesDataPresent(Oi.b.UV2Kind) && 1 === d.coordinatesIndex ? (r.push("#define OPACITYUV2"), c = !0) : s.isVerticesDataPresent(Oi.b.UVKind) && (r.push("#define OPACITYUV1"), a = !0))
|
|
}
|
|
i && (r.push("#define EMISSIVE"), s.isVerticesDataPresent(Oi.b.UV2Kind) && 1 === i.coordinatesIndex ? (r.push("#define EMISSIVEUV2"), c = !0) : s.isVerticesDataPresent(Oi.b.UVKind) && (r.push("#define EMISSIVEUV1"), a = !0)), s.isVerticesDataPresent(Oi.b.ColorKind) && s.hasVertexAlpha && (o.push(Oi.b.ColorKind), r.push("#define VERTEXALPHA")), a && (o.push(Oi.b.UVKind), r.push("#define UV1")), c && (o.push(Oi.b.UV2Kind), r.push("#define UV2")), s.useBones && s.computeBonesUsingShaders ? (o.push(Oi.b.MatricesIndicesKind), o.push(Oi.b.MatricesWeightsKind), s.numBoneInfluencers > 4 && (o.push(Oi.b.MatricesIndicesExtraKind), o.push(Oi.b.MatricesWeightsExtraKind)), r.push("#define NUM_BONE_INFLUENCERS " + s.numBoneInfluencers), r.push("#define BonesPerMesh " + (s.skeleton ? s.skeleton.bones.length + 1 : 0))) : r.push("#define NUM_BONE_INFLUENCERS 0");
|
|
var f = s.morphTargetManager,
|
|
p = 0;
|
|
f && f.numInfluencers > 0 && (r.push("#define MORPHTARGETS"), p = f.numInfluencers, r.push("#define NUM_MORPH_INFLUENCERS " + p), ir.a.PrepareAttributesForMorphTargets(o, s, {
|
|
NUM_MORPH_INFLUENCERS: p
|
|
})), t && (r.push("#define INSTANCES"), o.push("world0"), o.push("world1"), o.push("world2"), o.push("world3")), this._addCustomEffectDefines(r);
|
|
var _ = r.join("\n");
|
|
return this._cachedDefines !== _ && (this._cachedDefines = _, this._effectLayerMapGenerationEffect = this._scene.getEngine().createEffect("glowMapGeneration", o, ["world", "mBones", "viewProjection", "glowColor", "morphTargetInfluences", "diffuseMatrix", "emissiveMatrix", "opacityMatrix", "opacityIntensity"], ["diffuseSampler", "emissiveSampler", "opacitySampler"], _, void 0, void 0, void 0, {
|
|
maxSimultaneousMorphTargets: p
|
|
})), this._effectLayerMapGenerationEffect.isReady()
|
|
}, e.prototype.render = function() {
|
|
var e = this._mergeEffect;
|
|
if (e.isReady()) {
|
|
for (var t = 0; t < this._postProcesses.length; t++)
|
|
if (!this._postProcesses[t].isReady()) return;
|
|
var i = this._scene.getEngine();
|
|
this.onBeforeComposeObservable.notifyObservers(this), i.enableEffect(e), i.setState(!1), i.bindBuffers(this._vertexBuffers, this._indexBuffer, e);
|
|
var n = i.getAlphaMode();
|
|
i.setAlphaMode(this._effectLayerOptions.alphaBlendingMode), this._internalRender(e), i.setAlphaMode(n), this.onAfterComposeObservable.notifyObservers(this);
|
|
var r = this._mainTexture.getSize();
|
|
this._setMainTextureSize(), r.width === this._mainTextureDesiredSize.width && r.height === this._mainTextureDesiredSize.height || (this.onSizeChangedObservable.notifyObservers(this), this._disposeTextureAndPostProcesses(), this._createMainTexture(), this._createTextureAndPostProcesses())
|
|
}
|
|
}, e.prototype.hasMesh = function(e) {
|
|
return -1 === this.renderingGroupId || e.renderingGroupId === this.renderingGroupId
|
|
}, e.prototype.shouldRender = function() {
|
|
return this.isEnabled && this._shouldRender
|
|
}, e.prototype._shouldRenderMesh = function(e) {
|
|
return !0
|
|
}, e.prototype._canRenderMesh = function(e, t) {
|
|
return !t.needAlphaBlendingForMesh(e)
|
|
}, e.prototype._shouldRenderEmissiveTextureForMesh = function() {
|
|
return !0
|
|
}, e.prototype._renderSubMesh = function(e, t) {
|
|
var i = this;
|
|
if (void 0 === t && (t = !1), this.shouldRender()) {
|
|
var n = e.getMaterial(),
|
|
r = e.getRenderingMesh(),
|
|
o = this._scene,
|
|
s = o.getEngine();
|
|
if (r._internalAbstractMeshDataInfo._isActiveIntermediate = !1, n && this._canRenderMesh(r, n)) {
|
|
s.setState(n.backFaceCulling);
|
|
var a = r._getInstancesRenderList(e._id);
|
|
if (!a.mustReturn && this._shouldRenderMesh(r)) {
|
|
var c = a.hardwareInstancedRendering[e._id];
|
|
if (this._setEmissiveTextureAndColor(r, e, n), this._isReady(e, c, this._emissiveTextureAndColor.texture)) {
|
|
s.enableEffect(this._effectLayerMapGenerationEffect), r._bind(e, this._effectLayerMapGenerationEffect, so.a.TriangleFillMode), this._effectLayerMapGenerationEffect.setMatrix("viewProjection", o.getTransformMatrix()), this._effectLayerMapGenerationEffect.setFloat4("glowColor", this._emissiveTextureAndColor.color.r, this._emissiveTextureAndColor.color.g, this._emissiveTextureAndColor.color.b, this._emissiveTextureAndColor.color.a);
|
|
var l = n.needAlphaTesting(),
|
|
u = n.getAlphaTestTexture(),
|
|
h = u && u.hasAlpha && (n.useAlphaFromDiffuseTexture || n._useAlphaFromAlbedoTexture);
|
|
if (u && (l || h)) this._effectLayerMapGenerationEffect.setTexture("diffuseSampler", u), (d = u.getTextureMatrix()) && this._effectLayerMapGenerationEffect.setMatrix("diffuseMatrix", d);
|
|
var d, f = n.opacityTexture;
|
|
if (f) this._effectLayerMapGenerationEffect.setTexture("opacitySampler", f), this._effectLayerMapGenerationEffect.setFloat("opacityIntensity", f.level), (d = f.getTextureMatrix()) && this._effectLayerMapGenerationEffect.setMatrix("opacityMatrix", d);
|
|
this._emissiveTextureAndColor.texture && (this._effectLayerMapGenerationEffect.setTexture("emissiveSampler", this._emissiveTextureAndColor.texture), this._effectLayerMapGenerationEffect.setMatrix("emissiveMatrix", this._emissiveTextureAndColor.texture.getTextureMatrix())), r.useBones && r.computeBonesUsingShaders && r.skeleton && this._effectLayerMapGenerationEffect.setMatrices("mBones", r.skeleton.getTransformMatrices(r)), ir.a.BindMorphTargetParameters(r, this._effectLayerMapGenerationEffect), t && s.setAlphaMode(n.alphaMode), r._processRendering(e, this._effectLayerMapGenerationEffect, so.a.TriangleFillMode, a, c, function(e, t) {
|
|
return i._effectLayerMapGenerationEffect.setMatrix("world", t)
|
|
})
|
|
} else this._mainTexture.resetRefreshCounter()
|
|
}
|
|
}
|
|
}
|
|
}, e.prototype._rebuild = function() {
|
|
var e = this._vertexBuffers[Oi.b.PositionKind];
|
|
e && e._rebuild(), this._generateIndexBuffer()
|
|
}, e.prototype._disposeTextureAndPostProcesses = function() {
|
|
this._mainTexture.dispose();
|
|
for (var e = 0; e < this._postProcesses.length; e++) this._postProcesses[e] && this._postProcesses[e].dispose();
|
|
this._postProcesses = [];
|
|
for (e = 0; e < this._textures.length; e++) this._textures[e] && this._textures[e].dispose();
|
|
this._textures = []
|
|
}, e.prototype.dispose = function() {
|
|
var e = this._vertexBuffers[Oi.b.PositionKind];
|
|
e && (e.dispose(), this._vertexBuffers[Oi.b.PositionKind] = null), this._indexBuffer && (this._scene.getEngine()._releaseBuffer(this._indexBuffer), this._indexBuffer = null), this._disposeTextureAndPostProcesses();
|
|
var t = this._scene.effectLayers.indexOf(this, 0);
|
|
t > -1 && this._scene.effectLayers.splice(t, 1), this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear(), this.onBeforeRenderMainTextureObservable.clear(), this.onBeforeComposeObservable.clear(), this.onAfterComposeObservable.clear(), this.onSizeChangedObservable.clear()
|
|
}, e.prototype.getClassName = function() {
|
|
return "EffectLayer"
|
|
}, e.Parse = function(e, t, i) {
|
|
return ye.h.Instantiate(e.customType).Parse(e, t, i)
|
|
}, e._SceneComponentInitialization = function(e) {
|
|
throw be.a.WarnImport("EffectLayerSceneComponent")
|
|
}, l.c([Object(L.c)()], e.prototype, "name", void 0), l.c([Object(L.f)()], e.prototype, "neutralColor", void 0), l.c([Object(L.c)()], e.prototype, "isEnabled", void 0), l.c([Object(L.d)()], e.prototype, "camera", null), l.c([Object(L.c)()], e.prototype, "renderingGroupId", null), e
|
|
}();
|
|
n.a.AddParser(Ae.a.NAME_EFFECTLAYER, function(e, t, i, n) {
|
|
if (e.effectLayers) {
|
|
i.effectLayers || (i.effectLayers = new Array);
|
|
for (var r = 0; r < e.effectLayers.length; r++) {
|
|
var o = lo.Parse(e.effectLayers[r], t, n);
|
|
i.effectLayers.push(o)
|
|
}
|
|
}
|
|
}), n.a.prototype.removeEffectLayer = function(e) {
|
|
var t = this.effectLayers.indexOf(e);
|
|
return -1 !== t && this.effectLayers.splice(t, 1), t
|
|
}, n.a.prototype.addEffectLayer = function(e) {
|
|
this.effectLayers.push(e)
|
|
};
|
|
var uo = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_EFFECTLAYER, this._renderEffects = !1, this._needStencil = !1, this._previousStencilState = !1, this.scene = e, this._engine = e.getEngine(), e.effectLayers = new Array
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._isReadyForMeshStage.registerStep(Ae.a.STEP_ISREADYFORMESH_EFFECTLAYER, this, this._isReadyForMesh), this.scene._cameraDrawRenderTargetStage.registerStep(Ae.a.STEP_CAMERADRAWRENDERTARGET_EFFECTLAYER, this, this._renderMainTexture), this.scene._beforeCameraDrawStage.registerStep(Ae.a.STEP_BEFORECAMERADRAW_EFFECTLAYER, this, this._setStencil), this.scene._afterRenderingGroupDrawStage.registerStep(Ae.a.STEP_AFTERRENDERINGGROUPDRAW_EFFECTLAYER_DRAW, this, this._drawRenderingGroup), this.scene._afterCameraDrawStage.registerStep(Ae.a.STEP_AFTERCAMERADRAW_EFFECTLAYER, this, this._setStencilBack), this.scene._afterCameraDrawStage.registerStep(Ae.a.STEP_AFTERCAMERADRAW_EFFECTLAYER_DRAW, this, this._drawCamera)
|
|
}, e.prototype.rebuild = function() {
|
|
for (var e = 0, t = this.scene.effectLayers; e < t.length; e++) {
|
|
t[e]._rebuild()
|
|
}
|
|
}, e.prototype.serialize = function(e) {
|
|
e.effectLayers = [];
|
|
for (var t = 0, i = this.scene.effectLayers; t < i.length; t++) {
|
|
var n = i[t];
|
|
n.serialize && e.effectLayers.push(n.serialize())
|
|
}
|
|
}, e.prototype.addFromContainer = function(e) {
|
|
var t = this;
|
|
e.effectLayers && e.effectLayers.forEach(function(e) {
|
|
t.scene.addEffectLayer(e)
|
|
})
|
|
}, e.prototype.removeFromContainer = function(e, t) {
|
|
var i = this;
|
|
e.effectLayers && e.effectLayers.forEach(function(e) {
|
|
i.scene.removeEffectLayer(e), t && e.dispose()
|
|
})
|
|
}, e.prototype.dispose = function() {
|
|
for (var e = this.scene.effectLayers; e.length;) e[0].dispose()
|
|
}, e.prototype._isReadyForMesh = function(e, t) {
|
|
for (var i = 0, n = this.scene.effectLayers; i < n.length; i++) {
|
|
var r = n[i];
|
|
if (r.hasMesh(e))
|
|
for (var o = 0, s = e.subMeshes; o < s.length; o++) {
|
|
var a = s[o];
|
|
if (!r.isReady(a, t)) return !1
|
|
}
|
|
}
|
|
return !0
|
|
}, e.prototype._renderMainTexture = function(e) {
|
|
this._renderEffects = !1, this._needStencil = !1;
|
|
var t = !1,
|
|
i = this.scene.effectLayers;
|
|
if (i && i.length > 0) {
|
|
this._previousStencilState = this._engine.getStencilBuffer();
|
|
for (var n = 0, r = i; n < r.length; n++) {
|
|
var o = r[n];
|
|
if (o.shouldRender() && (!o.camera || o.camera.cameraRigMode === Ne.a.RIG_MODE_NONE && e === o.camera || o.camera.cameraRigMode !== Ne.a.RIG_MODE_NONE && o.camera._rigCameras.indexOf(e) > -1)) {
|
|
this._renderEffects = !0, this._needStencil = this._needStencil || o.needStencil();
|
|
var s = o._mainTexture;
|
|
s._shouldRender() && (this.scene.incrementRenderId(), s.render(!1, !1), t = !0)
|
|
}
|
|
}
|
|
this.scene.incrementRenderId()
|
|
}
|
|
return t
|
|
}, e.prototype._setStencil = function() {
|
|
this._needStencil && this._engine.setStencilBuffer(!0)
|
|
}, e.prototype._setStencilBack = function() {
|
|
this._needStencil && this._engine.setStencilBuffer(this._previousStencilState)
|
|
}, e.prototype._draw = function(e) {
|
|
if (this._renderEffects) {
|
|
this._engine.setDepthBuffer(!1);
|
|
for (var t = this.scene.effectLayers, i = 0; i < t.length; i++) {
|
|
var n = t[i];
|
|
n.renderingGroupId === e && n.shouldRender() && n.render()
|
|
}
|
|
this._engine.setDepthBuffer(!0)
|
|
}
|
|
}, e.prototype._drawCamera = function() {
|
|
this._renderEffects && this._draw(-1)
|
|
}, e.prototype._drawRenderingGroup = function(e) {
|
|
!this.scene._isInIntermediateRendering() && this._renderEffects && this._draw(e)
|
|
}, e
|
|
}();
|
|
lo._SceneComponentInitialization = function(e) {
|
|
var t = e._getComponent(Ae.a.NAME_EFFECTLAYER);
|
|
t || (t = new uo(e), e._addComponent(t))
|
|
};
|
|
var ho = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\n#ifdef EMISSIVE\nuniform sampler2D textureSampler2;\n#endif\n\nuniform float offset;\nvoid main(void) {\nvec4 baseColor=texture2D(textureSampler,vUV);\n#ifdef EMISSIVE\nbaseColor+=texture2D(textureSampler2,vUV);\nbaseColor*=offset;\n#else\nbaseColor.a=abs(offset-baseColor.a);\n#ifdef STROKE\nfloat alpha=smoothstep(.0,.1,baseColor.a);\nbaseColor.a=alpha;\nbaseColor.rgb=baseColor.rgb*alpha;\n#endif\n#endif\ngl_FragColor=baseColor;\n}";
|
|
zt.a.ShadersStore.glowMapMergePixelShader = ho;
|
|
var fo = "\nattribute vec2 position;\n\nvarying vec2 vUV;\nconst vec2 madd=vec2(0.5,0.5);\nvoid main(void) {\nvUV=position*madd+madd;\ngl_Position=vec4(position,0.0,1.0);\n}";
|
|
zt.a.ShadersStore.glowMapMergeVertexShader = fo;
|
|
n.a.prototype.getGlowLayerByName = function(e) {
|
|
for (var t = 0; t < this.effectLayers.length; t++)
|
|
if (this.effectLayers[t].name === e && this.effectLayers[t].getEffectName() === po.EffectName) return this.effectLayers[t];
|
|
return null
|
|
};
|
|
var po = function(e) {
|
|
function t(i, n, r) {
|
|
var s = e.call(this, i, n) || this;
|
|
return s._intensity = 1, s._includedOnlyMeshes = [], s._excludedMeshes = [], s.neutralColor = new o.f(0, 0, 0, 1), s._options = l.a({
|
|
mainTextureRatio: t.DefaultTextureRatio,
|
|
blurKernelSize: 32,
|
|
mainTextureFixedSize: void 0,
|
|
camera: null,
|
|
mainTextureSamples: 1,
|
|
renderingGroupId: -1
|
|
}, r), s._init({
|
|
alphaBlendingMode: _.a.ALPHA_ADD,
|
|
camera: s._options.camera,
|
|
mainTextureFixedSize: s._options.mainTextureFixedSize,
|
|
mainTextureRatio: s._options.mainTextureRatio,
|
|
renderingGroupId: s._options.renderingGroupId
|
|
}), s
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "blurKernelSize", {
|
|
get: function() {
|
|
return this._horizontalBlurPostprocess1.kernel
|
|
},
|
|
set: function(e) {
|
|
this._horizontalBlurPostprocess1.kernel = e, this._verticalBlurPostprocess1.kernel = e, this._horizontalBlurPostprocess2.kernel = e, this._verticalBlurPostprocess2.kernel = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "intensity", {
|
|
get: function() {
|
|
return this._intensity
|
|
},
|
|
set: function(e) {
|
|
this._intensity = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getEffectName = function() {
|
|
return t.EffectName
|
|
}, t.prototype._createMergeEffect = function() {
|
|
return this._engine.createEffect("glowMapMerge", [Oi.b.PositionKind], ["offset"], ["textureSampler", "textureSampler2"], "#define EMISSIVE \n")
|
|
}, t.prototype._createTextureAndPostProcesses = function() {
|
|
var e = this,
|
|
t = this._mainTextureDesiredSize.width,
|
|
i = this._mainTextureDesiredSize.height;
|
|
t = this._engine.needPOTTextures ? ye.h.GetExponentOfTwo(t, this._maxSize) : t, i = this._engine.needPOTTextures ? ye.h.GetExponentOfTwo(i, this._maxSize) : i;
|
|
var n = 0;
|
|
n = this._engine.getCaps().textureHalfFloatRender ? _.a.TEXTURETYPE_HALF_FLOAT : _.a.TEXTURETYPE_UNSIGNED_INT, this._blurTexture1 = new _i("GlowLayerBlurRTT", {
|
|
width: t,
|
|
height: i
|
|
}, this._scene, !1, !0, n), this._blurTexture1.wrapU = ke.a.CLAMP_ADDRESSMODE, this._blurTexture1.wrapV = ke.a.CLAMP_ADDRESSMODE, this._blurTexture1.updateSamplingMode(ke.a.BILINEAR_SAMPLINGMODE), this._blurTexture1.renderParticles = !1, this._blurTexture1.ignoreCameraViewport = !0;
|
|
var r = Math.floor(t / 2),
|
|
s = Math.floor(i / 2);
|
|
this._blurTexture2 = new _i("GlowLayerBlurRTT2", {
|
|
width: r,
|
|
height: s
|
|
}, this._scene, !1, !0, n), this._blurTexture2.wrapU = ke.a.CLAMP_ADDRESSMODE, this._blurTexture2.wrapV = ke.a.CLAMP_ADDRESSMODE, this._blurTexture2.updateSamplingMode(ke.a.BILINEAR_SAMPLINGMODE), this._blurTexture2.renderParticles = !1, this._blurTexture2.ignoreCameraViewport = !0, this._textures = [this._blurTexture1, this._blurTexture2], this._horizontalBlurPostprocess1 = new $n("GlowLayerHBP1", new o.w(1, 0), this._options.blurKernelSize / 2, {
|
|
width: t,
|
|
height: i
|
|
}, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, n), this._horizontalBlurPostprocess1.width = t, this._horizontalBlurPostprocess1.height = i, this._horizontalBlurPostprocess1.onApplyObservable.add(function(t) {
|
|
t.setTexture("textureSampler", e._mainTexture)
|
|
}), this._verticalBlurPostprocess1 = new $n("GlowLayerVBP1", new o.w(0, 1), this._options.blurKernelSize / 2, {
|
|
width: t,
|
|
height: i
|
|
}, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, n), this._horizontalBlurPostprocess2 = new $n("GlowLayerHBP2", new o.w(1, 0), this._options.blurKernelSize / 2, {
|
|
width: r,
|
|
height: s
|
|
}, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, n), this._horizontalBlurPostprocess2.width = r, this._horizontalBlurPostprocess2.height = s, this._horizontalBlurPostprocess2.onApplyObservable.add(function(t) {
|
|
t.setTexture("textureSampler", e._blurTexture1)
|
|
}), this._verticalBlurPostprocess2 = new $n("GlowLayerVBP2", new o.w(0, 1), this._options.blurKernelSize / 2, {
|
|
width: r,
|
|
height: s
|
|
}, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, n), this._postProcesses = [this._horizontalBlurPostprocess1, this._verticalBlurPostprocess1, this._horizontalBlurPostprocess2, this._verticalBlurPostprocess2], this._postProcesses1 = [this._horizontalBlurPostprocess1, this._verticalBlurPostprocess1], this._postProcesses2 = [this._horizontalBlurPostprocess2, this._verticalBlurPostprocess2], this._mainTexture.samples = this._options.mainTextureSamples, this._mainTexture.onAfterUnbindObservable.add(function() {
|
|
var t = e._blurTexture1.getInternalTexture();
|
|
t && (e._scene.postProcessManager.directRender(e._postProcesses1, t, !0), (t = e._blurTexture2.getInternalTexture()) && e._scene.postProcessManager.directRender(e._postProcesses2, t, !0))
|
|
}), this._postProcesses.map(function(e) {
|
|
e.autoClear = !1
|
|
})
|
|
}, t.prototype.isReady = function(t, i) {
|
|
var n = t.getMaterial(),
|
|
r = t.getRenderingMesh();
|
|
if (!n || !r) return !1;
|
|
var o = n.emissiveTexture;
|
|
return e.prototype._isReady.call(this, t, i, o)
|
|
}, t.prototype.needStencil = function() {
|
|
return !1
|
|
}, t.prototype._canRenderMesh = function(e, t) {
|
|
return !0
|
|
}, t.prototype._internalRender = function(e) {
|
|
e.setTexture("textureSampler", this._blurTexture1), e.setTexture("textureSampler2", this._blurTexture2), e.setFloat("offset", this._intensity);
|
|
var t = this._engine,
|
|
i = t.getStencilBuffer();
|
|
t.setStencilBuffer(!1), t.drawElementsType(so.a.TriangleFillMode, 0, 6), t.setStencilBuffer(i)
|
|
}, t.prototype._setEmissiveTextureAndColor = function(e, t, i) {
|
|
var n = 1;
|
|
this.customEmissiveTextureSelector ? this._emissiveTextureAndColor.texture = this.customEmissiveTextureSelector(e, t, i) : i ? (this._emissiveTextureAndColor.texture = i.emissiveTexture, this._emissiveTextureAndColor.texture && (n = this._emissiveTextureAndColor.texture.level)) : this._emissiveTextureAndColor.texture = null, this.customEmissiveColorSelector ? this.customEmissiveColorSelector(e, t, i, this._emissiveTextureAndColor.color) : i.emissiveColor ? this._emissiveTextureAndColor.color.set(i.emissiveColor.r * n, i.emissiveColor.g * n, i.emissiveColor.b * n, i.alpha) : this._emissiveTextureAndColor.color.set(this.neutralColor.r, this.neutralColor.g, this.neutralColor.b, this.neutralColor.a)
|
|
}, t.prototype._shouldRenderMesh = function(e) {
|
|
return this.hasMesh(e)
|
|
}, t.prototype._addCustomEffectDefines = function(e) {
|
|
e.push("#define GLOW")
|
|
}, t.prototype.addExcludedMesh = function(e) {
|
|
-1 === this._excludedMeshes.indexOf(e.uniqueId) && this._excludedMeshes.push(e.uniqueId)
|
|
}, t.prototype.removeExcludedMesh = function(e) {
|
|
var t = this._excludedMeshes.indexOf(e.uniqueId); - 1 !== t && this._excludedMeshes.splice(t, 1)
|
|
}, t.prototype.addIncludedOnlyMesh = function(e) {
|
|
-1 === this._includedOnlyMeshes.indexOf(e.uniqueId) && this._includedOnlyMeshes.push(e.uniqueId)
|
|
}, t.prototype.removeIncludedOnlyMesh = function(e) {
|
|
var t = this._includedOnlyMeshes.indexOf(e.uniqueId); - 1 !== t && this._includedOnlyMeshes.splice(t, 1)
|
|
}, t.prototype.hasMesh = function(t) {
|
|
return !!e.prototype.hasMesh.call(this, t) && (this._includedOnlyMeshes.length ? -1 !== this._includedOnlyMeshes.indexOf(t.uniqueId) : !this._excludedMeshes.length || -1 === this._excludedMeshes.indexOf(t.uniqueId))
|
|
}, t.prototype._disposeMesh = function(e) {
|
|
this.removeIncludedOnlyMesh(e), this.removeExcludedMesh(e)
|
|
}, t.prototype.getClassName = function() {
|
|
return "GlowLayer"
|
|
}, t.prototype.serialize = function() {
|
|
var e, t = L.a.Serialize(this);
|
|
if (t.customType = "BABYLON.GlowLayer", t.includedMeshes = [], this._includedOnlyMeshes.length)
|
|
for (e = 0; e < this._includedOnlyMeshes.length; e++) {
|
|
(i = this._scene.getMeshByUniqueID(this._includedOnlyMeshes[e])) && t.includedMeshes.push(i.id)
|
|
}
|
|
if (t.excludedMeshes = [], this._excludedMeshes.length)
|
|
for (e = 0; e < this._excludedMeshes.length; e++) {
|
|
var i;
|
|
(i = this._scene.getMeshByUniqueID(this._excludedMeshes[e])) && t.excludedMeshes.push(i.id)
|
|
}
|
|
return t
|
|
}, t.Parse = function(e, i, n) {
|
|
var r, o = L.a.Parse(function() {
|
|
return new t(e.name, i, e.options)
|
|
}, e, i, n);
|
|
for (r = 0; r < e.excludedMeshes.length; r++) {
|
|
(s = i.getMeshByID(e.excludedMeshes[r])) && o.addExcludedMesh(s)
|
|
}
|
|
for (r = 0; r < e.includedMeshes.length; r++) {
|
|
var s;
|
|
(s = i.getMeshByID(e.includedMeshes[r])) && o.addIncludedOnlyMesh(s)
|
|
}
|
|
return o
|
|
}, t.EffectName = "GlowLayer", t.DefaultBlurKernelSize = 32, t.DefaultTextureRatio = .5, l.c([Object(L.c)()], t.prototype, "blurKernelSize", null), l.c([Object(L.c)()], t.prototype, "intensity", null), l.c([Object(L.c)("options")], t.prototype, "_options", void 0), t
|
|
}(lo);
|
|
s.a.RegisteredTypes["BABYLON.GlowLayer"] = po;
|
|
var _o = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\n\nuniform vec2 screenSize;\nuniform vec2 direction;\nuniform float blurWidth;\n\nfloat getLuminance(vec3 color)\n{\nreturn dot(color,vec3(0.2126,0.7152,0.0722));\n}\nvoid main(void)\n{\nfloat weights[7];\nweights[0]=0.05;\nweights[1]=0.1;\nweights[2]=0.2;\nweights[3]=0.3;\nweights[4]=0.2;\nweights[5]=0.1;\nweights[6]=0.05;\nvec2 texelSize=vec2(1.0/screenSize.x,1.0/screenSize.y);\nvec2 texelStep=texelSize*direction*blurWidth;\nvec2 start=vUV-3.0*texelStep;\nvec4 baseColor=vec4(0.,0.,0.,0.);\nvec2 texelOffset=vec2(0.,0.);\nfor (int i=0; i<7; i++)\n{\n\nvec4 texel=texture2D(textureSampler,start+texelOffset);\nbaseColor.a+=texel.a*weights[i];\n\nfloat luminance=getLuminance(baseColor.rgb);\nfloat luminanceTexel=getLuminance(texel.rgb);\nfloat choice=step(luminanceTexel,luminance);\nbaseColor.rgb=choice*baseColor.rgb+(1.0-choice)*texel.rgb;\ntexelOffset+=texelStep;\n}\ngl_FragColor=baseColor;\n}";
|
|
zt.a.ShadersStore.glowBlurPostProcessPixelShader = _o;
|
|
n.a.prototype.getHighlightLayerByName = function(e) {
|
|
for (var t = 0; t < this.effectLayers.length; t++)
|
|
if (this.effectLayers[t].name === e && this.effectLayers[t].getEffectName() === mo.EffectName) return this.effectLayers[t];
|
|
return null
|
|
};
|
|
var go = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
void 0 === s && (s = ke.a.BILINEAR_SAMPLINGMODE);
|
|
var l = e.call(this, t, "glowBlurPostProcess", ["screenSize", "direction", "blurWidth"], null, r, o, s, a, c) || this;
|
|
return l.direction = i, l.kernel = n, l.onApplyObservable.add(function(e) {
|
|
e.setFloat2("screenSize", l.width, l.height), e.setVector2("direction", l.direction), e.setFloat("blurWidth", l.kernel)
|
|
}), l
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
mo = function(e) {
|
|
function t(i, n, o) {
|
|
var s = e.call(this, i, n) || this;
|
|
return s.name = i, s.innerGlow = !0, s.outerGlow = !0, s.onBeforeBlurObservable = new r.c, s.onAfterBlurObservable = new r.c, s._instanceGlowingMeshStencilReference = t.GlowingMeshStencilReference++, s._meshes = {}, s._excludedMeshes = {}, s.neutralColor = t.NeutralColor, s._engine.isStencilEnable || p.a.Warn("Rendering the Highlight Layer requires the stencil to be active on the canvas. var engine = new Engine(canvas, antialias, { stencil: true }"), s._options = l.a({
|
|
mainTextureRatio: .5,
|
|
blurTextureSizeRatio: .5,
|
|
blurHorizontalSize: 1,
|
|
blurVerticalSize: 1,
|
|
alphaBlendingMode: _.a.ALPHA_COMBINE,
|
|
camera: null,
|
|
renderingGroupId: -1
|
|
}, o), s._init({
|
|
alphaBlendingMode: s._options.alphaBlendingMode,
|
|
camera: s._options.camera,
|
|
mainTextureFixedSize: s._options.mainTextureFixedSize,
|
|
mainTextureRatio: s._options.mainTextureRatio,
|
|
renderingGroupId: s._options.renderingGroupId
|
|
}), s._shouldRender = !1, s
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "blurHorizontalSize", {
|
|
get: function() {
|
|
return this._horizontalBlurPostprocess.kernel
|
|
},
|
|
set: function(e) {
|
|
this._horizontalBlurPostprocess.kernel = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "blurVerticalSize", {
|
|
get: function() {
|
|
return this._verticalBlurPostprocess.kernel
|
|
},
|
|
set: function(e) {
|
|
this._verticalBlurPostprocess.kernel = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getEffectName = function() {
|
|
return t.EffectName
|
|
}, t.prototype._createMergeEffect = function() {
|
|
return this._engine.createEffect("glowMapMerge", [Oi.b.PositionKind], ["offset"], ["textureSampler"], this._options.isStroke ? "#define STROKE \n" : void 0)
|
|
}, t.prototype._createTextureAndPostProcesses = function() {
|
|
var e = this,
|
|
t = this._mainTextureDesiredSize.width * this._options.blurTextureSizeRatio,
|
|
i = this._mainTextureDesiredSize.height * this._options.blurTextureSizeRatio;
|
|
t = this._engine.needPOTTextures ? ye.h.GetExponentOfTwo(t, this._maxSize) : t, i = this._engine.needPOTTextures ? ye.h.GetExponentOfTwo(i, this._maxSize) : i;
|
|
var n = 0;
|
|
n = this._engine.getCaps().textureHalfFloatRender ? _.a.TEXTURETYPE_HALF_FLOAT : _.a.TEXTURETYPE_UNSIGNED_INT, this._blurTexture = new _i("HighlightLayerBlurRTT", {
|
|
width: t,
|
|
height: i
|
|
}, this._scene, !1, !0, n), this._blurTexture.wrapU = ke.a.CLAMP_ADDRESSMODE, this._blurTexture.wrapV = ke.a.CLAMP_ADDRESSMODE, this._blurTexture.anisotropicFilteringLevel = 16, this._blurTexture.updateSamplingMode(ke.a.TRILINEAR_SAMPLINGMODE), this._blurTexture.renderParticles = !1, this._blurTexture.ignoreCameraViewport = !0, this._textures = [this._blurTexture], this._options.alphaBlendingMode === _.a.ALPHA_COMBINE ? (this._downSamplePostprocess = new Yt("HighlightLayerPPP", this._options.blurTextureSizeRatio, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine()), this._downSamplePostprocess.onApplyObservable.add(function(t) {
|
|
t.setTexture("textureSampler", e._mainTexture)
|
|
}), this._horizontalBlurPostprocess = new go("HighlightLayerHBP", new o.w(1, 0), this._options.blurHorizontalSize, 1, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine()), this._horizontalBlurPostprocess.onApplyObservable.add(function(e) {
|
|
e.setFloat2("screenSize", t, i)
|
|
}), this._verticalBlurPostprocess = new go("HighlightLayerVBP", new o.w(0, 1), this._options.blurVerticalSize, 1, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine()), this._verticalBlurPostprocess.onApplyObservable.add(function(e) {
|
|
e.setFloat2("screenSize", t, i)
|
|
}), this._postProcesses = [this._downSamplePostprocess, this._horizontalBlurPostprocess, this._verticalBlurPostprocess]) : (this._horizontalBlurPostprocess = new $n("HighlightLayerHBP", new o.w(1, 0), this._options.blurHorizontalSize / 2, {
|
|
width: t,
|
|
height: i
|
|
}, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, n), this._horizontalBlurPostprocess.width = t, this._horizontalBlurPostprocess.height = i, this._horizontalBlurPostprocess.onApplyObservable.add(function(t) {
|
|
t.setTexture("textureSampler", e._mainTexture)
|
|
}), this._verticalBlurPostprocess = new $n("HighlightLayerVBP", new o.w(0, 1), this._options.blurVerticalSize / 2, {
|
|
width: t,
|
|
height: i
|
|
}, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, n), this._postProcesses = [this._horizontalBlurPostprocess, this._verticalBlurPostprocess]), this._mainTexture.onAfterUnbindObservable.add(function() {
|
|
e.onBeforeBlurObservable.notifyObservers(e);
|
|
var t = e._blurTexture.getInternalTexture();
|
|
t && e._scene.postProcessManager.directRender(e._postProcesses, t, !0), e.onAfterBlurObservable.notifyObservers(e)
|
|
}), this._postProcesses.map(function(e) {
|
|
e.autoClear = !1
|
|
})
|
|
}, t.prototype.needStencil = function() {
|
|
return !0
|
|
}, t.prototype.isReady = function(t, i) {
|
|
var n = t.getMaterial(),
|
|
r = t.getRenderingMesh();
|
|
if (!n || !r || !this._meshes) return !1;
|
|
var o = null,
|
|
s = this._meshes[r.uniqueId];
|
|
return s && s.glowEmissiveOnly && n && (o = n.emissiveTexture), e.prototype._isReady.call(this, t, i, o)
|
|
}, t.prototype._internalRender = function(e) {
|
|
e.setTexture("textureSampler", this._blurTexture);
|
|
var t = this._engine;
|
|
t.cacheStencilState(), t.setStencilOperationPass(_.a.REPLACE), t.setStencilOperationFail(_.a.KEEP), t.setStencilOperationDepthFail(_.a.KEEP), t.setStencilMask(0), t.setStencilBuffer(!0), t.setStencilFunctionReference(this._instanceGlowingMeshStencilReference), this.outerGlow && (e.setFloat("offset", 0), t.setStencilFunction(_.a.NOTEQUAL), t.drawElementsType(so.a.TriangleFillMode, 0, 6)), this.innerGlow && (e.setFloat("offset", 1), t.setStencilFunction(_.a.EQUAL), t.drawElementsType(so.a.TriangleFillMode, 0, 6)), t.restoreStencilState()
|
|
}, t.prototype.shouldRender = function() {
|
|
return !!e.prototype.shouldRender.call(this) && !!this._meshes
|
|
}, t.prototype._shouldRenderMesh = function(t) {
|
|
return (!this._excludedMeshes || !this._excludedMeshes[t.uniqueId]) && !!e.prototype.hasMesh.call(this, t)
|
|
}, t.prototype._setEmissiveTextureAndColor = function(e, t, i) {
|
|
var n = this._meshes[e.uniqueId];
|
|
n ? this._emissiveTextureAndColor.color.set(n.color.r, n.color.g, n.color.b, 1) : this._emissiveTextureAndColor.color.set(this.neutralColor.r, this.neutralColor.g, this.neutralColor.b, this.neutralColor.a), n && n.glowEmissiveOnly && i ? (this._emissiveTextureAndColor.texture = i.emissiveTexture, this._emissiveTextureAndColor.color.set(1, 1, 1, 1)) : this._emissiveTextureAndColor.texture = null
|
|
}, t.prototype.addExcludedMesh = function(e) {
|
|
this._excludedMeshes && (this._excludedMeshes[e.uniqueId] || (this._excludedMeshes[e.uniqueId] = {
|
|
mesh: e,
|
|
beforeBind: e.onBeforeBindObservable.add(function(e) {
|
|
e.getEngine().setStencilBuffer(!1)
|
|
}),
|
|
afterRender: e.onAfterRenderObservable.add(function(e) {
|
|
e.getEngine().setStencilBuffer(!0)
|
|
})
|
|
}))
|
|
}, t.prototype.removeExcludedMesh = function(e) {
|
|
if (this._excludedMeshes) {
|
|
var t = this._excludedMeshes[e.uniqueId];
|
|
t && (t.beforeBind && e.onBeforeBindObservable.remove(t.beforeBind), t.afterRender && e.onAfterRenderObservable.remove(t.afterRender)), this._excludedMeshes[e.uniqueId] = null
|
|
}
|
|
}, t.prototype.hasMesh = function(t) {
|
|
return !!this._meshes && (!!e.prototype.hasMesh.call(this, t) && (void 0 !== this._meshes[t.uniqueId] && null !== this._meshes[t.uniqueId]))
|
|
}, t.prototype.addMesh = function(e, t, i) {
|
|
var n = this;
|
|
if (void 0 === i && (i = !1), this._meshes) {
|
|
var r = this._meshes[e.uniqueId];
|
|
r ? r.color = t : (this._meshes[e.uniqueId] = {
|
|
mesh: e,
|
|
color: t,
|
|
observerHighlight: e.onBeforeBindObservable.add(function(e) {
|
|
n._excludedMeshes && n._excludedMeshes[e.uniqueId] ? n._defaultStencilReference(e) : e.getScene().getEngine().setStencilFunctionReference(n._instanceGlowingMeshStencilReference)
|
|
}),
|
|
observerDefault: e.onAfterRenderObservable.add(this._defaultStencilReference),
|
|
glowEmissiveOnly: i
|
|
}, e.onDisposeObservable.add(function() {
|
|
n._disposeMesh(e)
|
|
})), this._shouldRender = !0
|
|
}
|
|
}, t.prototype.removeMesh = function(e) {
|
|
if (this._meshes) {
|
|
var t = this._meshes[e.uniqueId];
|
|
for (var i in t && (t.observerHighlight && e.onBeforeBindObservable.remove(t.observerHighlight), t.observerDefault && e.onAfterRenderObservable.remove(t.observerDefault), delete this._meshes[e.uniqueId]), this._shouldRender = !1, this._meshes)
|
|
if (this._meshes[i]) {
|
|
this._shouldRender = !0;
|
|
break
|
|
}
|
|
}
|
|
}, t.prototype._defaultStencilReference = function(e) {
|
|
e.getScene().getEngine().setStencilFunctionReference(t.NormalMeshStencilReference)
|
|
}, t.prototype._disposeMesh = function(e) {
|
|
this.removeMesh(e), this.removeExcludedMesh(e)
|
|
}, t.prototype.dispose = function() {
|
|
if (this._meshes) {
|
|
for (var t in this._meshes) {
|
|
(i = this._meshes[t]) && i.mesh && (i.observerHighlight && i.mesh.onBeforeBindObservable.remove(i.observerHighlight), i.observerDefault && i.mesh.onAfterRenderObservable.remove(i.observerDefault))
|
|
}
|
|
this._meshes = null
|
|
}
|
|
if (this._excludedMeshes) {
|
|
for (var t in this._excludedMeshes) {
|
|
var i;
|
|
(i = this._excludedMeshes[t]) && (i.beforeBind && i.mesh.onBeforeBindObservable.remove(i.beforeBind), i.afterRender && i.mesh.onAfterRenderObservable.remove(i.afterRender))
|
|
}
|
|
this._excludedMeshes = null
|
|
}
|
|
e.prototype.dispose.call(this)
|
|
}, t.prototype.getClassName = function() {
|
|
return "HighlightLayer"
|
|
}, t.prototype.serialize = function() {
|
|
var e = L.a.Serialize(this);
|
|
if (e.customType = "BABYLON.HighlightLayer", e.meshes = [], this._meshes)
|
|
for (var t in this._meshes) {
|
|
var i = this._meshes[t];
|
|
i && e.meshes.push({
|
|
glowEmissiveOnly: i.glowEmissiveOnly,
|
|
color: i.color.asArray(),
|
|
meshId: i.mesh.id
|
|
})
|
|
}
|
|
if (e.excludedMeshes = [], this._excludedMeshes)
|
|
for (var n in this._excludedMeshes) {
|
|
var r = this._excludedMeshes[n];
|
|
r && e.excludedMeshes.push(r.mesh.id)
|
|
}
|
|
return e
|
|
}, t.Parse = function(e, i, n) {
|
|
var r, s = L.a.Parse(function() {
|
|
return new t(e.name, i, e.options)
|
|
}, e, i, n);
|
|
for (r = 0; r < e.excludedMeshes.length; r++) {
|
|
(a = i.getMeshByID(e.excludedMeshes[r])) && s.addExcludedMesh(a)
|
|
}
|
|
for (r = 0; r < e.meshes.length; r++) {
|
|
var a, c = e.meshes[r];
|
|
(a = i.getMeshByID(c.meshId)) && s.addMesh(a, o.e.FromArray(c.color), c.glowEmissiveOnly)
|
|
}
|
|
return s
|
|
}, t.EffectName = "HighlightLayer", t.NeutralColor = new o.f(0, 0, 0, 0), t.GlowingMeshStencilReference = 2, t.NormalMeshStencilReference = 1, l.c([Object(L.c)()], t.prototype, "innerGlow", void 0), l.c([Object(L.c)()], t.prototype, "outerGlow", void 0), l.c([Object(L.c)()], t.prototype, "blurHorizontalSize", null), l.c([Object(L.c)()], t.prototype, "blurVerticalSize", null), l.c([Object(L.c)("options")], t.prototype, "_options", void 0), t
|
|
}(lo);
|
|
s.a.RegisteredTypes["BABYLON.HighlightLayer"] = mo;
|
|
var vo = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_LAYER, this.scene = e, this._engine = e.getEngine(), e.layers = new Array
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._beforeCameraDrawStage.registerStep(Ae.a.STEP_BEFORECAMERADRAW_LAYER, this, this._drawCameraBackground), this.scene._afterCameraDrawStage.registerStep(Ae.a.STEP_AFTERCAMERADRAW_LAYER, this, this._drawCameraForeground), this.scene._beforeRenderTargetDrawStage.registerStep(Ae.a.STEP_BEFORERENDERTARGETDRAW_LAYER, this, this._drawRenderTargetBackground), this.scene._afterRenderTargetDrawStage.registerStep(Ae.a.STEP_AFTERRENDERTARGETDRAW_LAYER, this, this._drawRenderTargetForeground)
|
|
}, e.prototype.rebuild = function() {
|
|
for (var e = 0, t = this.scene.layers; e < t.length; e++) {
|
|
t[e]._rebuild()
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
for (var e = this.scene.layers; e.length;) e[0].dispose()
|
|
}, e.prototype._draw = function(e) {
|
|
var t = this.scene.layers;
|
|
if (t.length) {
|
|
this._engine.setDepthBuffer(!1);
|
|
for (var i = 0, n = t; i < n.length; i++) {
|
|
var r = n[i];
|
|
e(r) && r.render()
|
|
}
|
|
this._engine.setDepthBuffer(!0)
|
|
}
|
|
}, e.prototype._drawCameraPredicate = function(e, t, i) {
|
|
return !e.renderOnlyInRenderTargetTextures && e.isBackground === t && 0 != (e.layerMask & i)
|
|
}, e.prototype._drawCameraBackground = function(e) {
|
|
var t = this;
|
|
this._draw(function(i) {
|
|
return t._drawCameraPredicate(i, !0, e.layerMask)
|
|
})
|
|
}, e.prototype._drawCameraForeground = function(e) {
|
|
var t = this;
|
|
this._draw(function(i) {
|
|
return t._drawCameraPredicate(i, !1, e.layerMask)
|
|
})
|
|
}, e.prototype._drawRenderTargetPredicate = function(e, t, i, n) {
|
|
return e.renderTargetTextures.length > 0 && e.isBackground === t && e.renderTargetTextures.indexOf(n) > -1 && 0 != (e.layerMask & i)
|
|
}, e.prototype._drawRenderTargetBackground = function(e) {
|
|
var t = this;
|
|
this._draw(function(i) {
|
|
return t._drawRenderTargetPredicate(i, !0, t.scene.activeCamera.layerMask, e)
|
|
})
|
|
}, e.prototype._drawRenderTargetForeground = function(e) {
|
|
var t = this;
|
|
this._draw(function(i) {
|
|
return t._drawRenderTargetPredicate(i, !1, t.scene.activeCamera.layerMask, e)
|
|
})
|
|
}, e
|
|
}(),
|
|
yo = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\n\nuniform vec4 color;\nvoid main(void) {\nvec4 baseColor=texture2D(textureSampler,vUV);\n#ifdef ALPHATEST\nif (baseColor.a<0.4)\ndiscard;\n#endif\ngl_FragColor=baseColor*color;\n}";
|
|
zt.a.ShadersStore.layerPixelShader = yo;
|
|
var bo = "\nattribute vec2 position;\n\nuniform vec2 scale;\nuniform vec2 offset;\nuniform mat4 textureMatrix;\n\nvarying vec2 vUV;\nconst vec2 madd=vec2(0.5,0.5);\nvoid main(void) {\nvec2 shiftedPosition=position*scale+offset;\nvUV=vec2(textureMatrix*vec4(shiftedPosition*madd+madd,1.0,0.0));\ngl_Position=vec4(shiftedPosition,0.0,1.0);\n}";
|
|
zt.a.ShadersStore.layerVertexShader = bo;
|
|
var To = function() {
|
|
function e(e, t, i, n, s) {
|
|
this.name = e, this.scale = new o.w(1, 1), this.offset = new o.w(0, 0), this.alphaBlendingMode = _.a.ALPHA_COMBINE, this.layerMask = 268435455, this.renderTargetTextures = [], this.renderOnlyInRenderTargetTextures = !1, this._vertexBuffers = {}, this.onDisposeObservable = new r.c, this.onBeforeRenderObservable = new r.c, this.onAfterRenderObservable = new r.c, this.texture = t ? new ke.a(t, i, !0) : null, this.isBackground = void 0 === n || n, this.color = void 0 === s ? new o.f(1, 1, 1, 1) : s, this._scene = i || P.a.LastCreatedScene;
|
|
var a = this._scene._getComponent(Ae.a.NAME_LAYER);
|
|
a || (a = new vo(this._scene), this._scene._addComponent(a)), this._scene.layers.push(this);
|
|
var c = this._scene.getEngine(),
|
|
l = [];
|
|
l.push(1, 1), l.push(-1, 1), l.push(-1, -1), l.push(1, -1);
|
|
var u = new Oi.b(c, l, Oi.b.PositionKind, !1, !1, 2);
|
|
this._vertexBuffers[Oi.b.PositionKind] = u, this._createIndexBuffer(), this._effect = c.createEffect("layer", [Oi.b.PositionKind], ["textureMatrix", "color", "scale", "offset"], ["textureSampler"], ""), this._alphaTestEffect = c.createEffect("layer", [Oi.b.PositionKind], ["textureMatrix", "color", "scale", "offset"], ["textureSampler"], "#define ALPHATEST")
|
|
}
|
|
return Object.defineProperty(e.prototype, "onDispose", {
|
|
set: function(e) {
|
|
this._onDisposeObserver && this.onDisposeObservable.remove(this._onDisposeObserver), this._onDisposeObserver = this.onDisposeObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onBeforeRender", {
|
|
set: function(e) {
|
|
this._onBeforeRenderObserver && this.onBeforeRenderObservable.remove(this._onBeforeRenderObserver), this._onBeforeRenderObserver = this.onBeforeRenderObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "onAfterRender", {
|
|
set: function(e) {
|
|
this._onAfterRenderObserver && this.onAfterRenderObservable.remove(this._onAfterRenderObserver), this._onAfterRenderObserver = this.onAfterRenderObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._createIndexBuffer = function() {
|
|
var e = this._scene.getEngine(),
|
|
t = [];
|
|
t.push(0), t.push(1), t.push(2), t.push(0), t.push(2), t.push(3), this._indexBuffer = e.createIndexBuffer(t)
|
|
}, e.prototype._rebuild = function() {
|
|
var e = this._vertexBuffers[Oi.b.PositionKind];
|
|
e && e._rebuild(), this._createIndexBuffer()
|
|
}, e.prototype.render = function() {
|
|
var e = this.alphaTest ? this._alphaTestEffect : this._effect;
|
|
if (e.isReady() && this.texture && this.texture.isReady()) {
|
|
var t = this._scene.getEngine();
|
|
this.onBeforeRenderObservable.notifyObservers(this), t.enableEffect(e), t.setState(!1), e.setTexture("textureSampler", this.texture), e.setMatrix("textureMatrix", this.texture.getTextureMatrix()), e.setFloat4("color", this.color.r, this.color.g, this.color.b, this.color.a), e.setVector2("offset", this.offset), e.setVector2("scale", this.scale), t.bindBuffers(this._vertexBuffers, this._indexBuffer, e), this.alphaTest ? t.drawElementsType(so.a.TriangleFillMode, 0, 6) : (t.setAlphaMode(this.alphaBlendingMode), t.drawElementsType(so.a.TriangleFillMode, 0, 6), t.setAlphaMode(_.a.ALPHA_DISABLE)), this.onAfterRenderObservable.notifyObservers(this)
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
var e = this._vertexBuffers[Oi.b.PositionKind];
|
|
e && (e.dispose(), this._vertexBuffers[Oi.b.PositionKind] = null), this._indexBuffer && (this._scene.getEngine()._releaseBuffer(this._indexBuffer), this._indexBuffer = null), this.texture && (this.texture.dispose(), this.texture = null), this.renderTargetTextures = [];
|
|
var t = this._scene.layers.indexOf(this);
|
|
this._scene.layers.splice(t, 1), this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear(), this.onAfterRenderObservable.clear(), this.onBeforeRenderObservable.clear()
|
|
}, e
|
|
}(),
|
|
Eo = function() {
|
|
function e(e, t, i, n, r) {
|
|
this.size = e, this.position = t, this.alphaMode = _.a.ALPHA_ONEONE, this.color = i || new o.e(1, 1, 1), this.texture = n ? new ke.a(n, r.getScene(), !0) : null, this._system = r, r.lensFlares.push(this)
|
|
}
|
|
return e.AddFlare = function(t, i, n, r, o) {
|
|
return new e(t, i, n, r, o)
|
|
}, e.prototype.dispose = function() {
|
|
this.texture && this.texture.dispose();
|
|
var e = this._system.lensFlares.indexOf(this);
|
|
this._system.lensFlares.splice(e, 1)
|
|
}, e
|
|
}(),
|
|
Ao = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\n\nuniform vec4 color;\nvoid main(void) {\nvec4 baseColor=texture2D(textureSampler,vUV);\ngl_FragColor=baseColor*color;\n}";
|
|
zt.a.ShadersStore.lensFlarePixelShader = Ao;
|
|
var xo = "\nattribute vec2 position;\n\nuniform mat4 viewportMatrix;\n\nvarying vec2 vUV;\nconst vec2 madd=vec2(0.5,0.5);\nvoid main(void) {\nvUV=position*madd+madd;\ngl_Position=viewportMatrix*vec4(position,0.0,1.0);\n}";
|
|
zt.a.ShadersStore.lensFlareVertexShader = xo;
|
|
var Ro = function() {
|
|
function e(t, i, n) {
|
|
this.name = t, this.lensFlares = new Array, this.borderLimit = 300, this.viewportBorder = 0, this.layerMask = 268435455, this._vertexBuffers = {}, this._isEnabled = !0, this._scene = n || P.a.LastCreatedScene, e._SceneComponentInitialization(this._scene), this._emitter = i, this.id = t, n.lensFlareSystems.push(this), this.meshesSelectionPredicate = function(e) {
|
|
return n.activeCamera && e.material && e.isVisible && e.isEnabled() && e.isBlocker && 0 != (e.layerMask & n.activeCamera.layerMask)
|
|
};
|
|
var r = n.getEngine(),
|
|
o = [];
|
|
o.push(1, 1), o.push(-1, 1), o.push(-1, -1), o.push(1, -1), this._vertexBuffers[Oi.b.PositionKind] = new Oi.b(r, o, Oi.b.PositionKind, !1, !1, 2);
|
|
var s = [];
|
|
s.push(0), s.push(1), s.push(2), s.push(0), s.push(2), s.push(3), this._indexBuffer = r.createIndexBuffer(s), this._effect = r.createEffect("lensFlare", [Oi.b.PositionKind], ["color", "viewportMatrix"], ["textureSampler"], "")
|
|
}
|
|
return Object.defineProperty(e.prototype, "isEnabled", {
|
|
get: function() {
|
|
return this._isEnabled
|
|
},
|
|
set: function(e) {
|
|
this._isEnabled = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getScene = function() {
|
|
return this._scene
|
|
}, e.prototype.getEmitter = function() {
|
|
return this._emitter
|
|
}, e.prototype.setEmitter = function(e) {
|
|
this._emitter = e
|
|
}, e.prototype.getEmitterPosition = function() {
|
|
return this._emitter.getAbsolutePosition ? this._emitter.getAbsolutePosition() : this._emitter.position
|
|
}, e.prototype.computeEffectivePosition = function(e) {
|
|
var t = this.getEmitterPosition();
|
|
return t = o.x.Project(t, o.j.Identity(), this._scene.getTransformMatrix(), e), this._positionX = t.x, this._positionY = t.y, t = o.x.TransformCoordinates(this.getEmitterPosition(), this._scene.getViewMatrix()), this.viewportBorder > 0 && (e.x -= this.viewportBorder, e.y -= this.viewportBorder, e.width += 2 * this.viewportBorder, e.height += 2 * this.viewportBorder, t.x += this.viewportBorder, t.y += this.viewportBorder, this._positionX += this.viewportBorder, this._positionY += this.viewportBorder), t.z > 0 && (this._positionX > e.x && this._positionX < e.x + e.width && this._positionY > e.y && (this._positionY, e.y, e.height), !0)
|
|
}, e.prototype._isVisible = function() {
|
|
if (!this._isEnabled || !this._scene.activeCamera) return !1;
|
|
var e = this.getEmitterPosition().subtract(this._scene.activeCamera.globalPosition),
|
|
t = e.length();
|
|
e.normalize();
|
|
var i = new It.a(this._scene.activeCamera.globalPosition, e),
|
|
n = this._scene.pickWithRay(i, this.meshesSelectionPredicate, !0);
|
|
return !n || !n.hit || n.distance > t
|
|
}, e.prototype.render = function() {
|
|
if (!this._effect.isReady() || !this._scene.activeCamera) return !1;
|
|
var e, t, i = this._scene.getEngine(),
|
|
n = this._scene.activeCamera.viewport.toGlobal(i.getRenderWidth(!0), i.getRenderHeight(!0));
|
|
if (!this.computeEffectivePosition(n)) return !1;
|
|
if (!this._isVisible()) return !1;
|
|
var r = (e = this._positionX < this.borderLimit + n.x ? this.borderLimit + n.x - this._positionX : this._positionX > n.x + n.width - this.borderLimit ? this._positionX - n.x - n.width + this.borderLimit : 0) > (t = this._positionY < this.borderLimit + n.y ? this.borderLimit + n.y - this._positionY : this._positionY > n.y + n.height - this.borderLimit ? this._positionY - n.y - n.height + this.borderLimit : 0) ? e : t;
|
|
(r -= this.viewportBorder) > this.borderLimit && (r = this.borderLimit);
|
|
var s = 1 - D.a.Clamp(r / this.borderLimit, 0, 1);
|
|
if (s < 0) return !1;
|
|
s > 1 && (s = 1), this.viewportBorder > 0 && (n.x += this.viewportBorder, n.y += this.viewportBorder, n.width -= 2 * this.viewportBorder, n.height -= 2 * this.viewportBorder, this._positionX -= this.viewportBorder, this._positionY -= this.viewportBorder);
|
|
var a = n.x + n.width / 2,
|
|
c = n.y + n.height / 2,
|
|
l = a - this._positionX,
|
|
u = c - this._positionY;
|
|
i.enableEffect(this._effect), i.setState(!1), i.setDepthBuffer(!1), i.bindBuffers(this._vertexBuffers, this._indexBuffer, this._effect);
|
|
for (var h = 0; h < this.lensFlares.length; h++) {
|
|
var d = this.lensFlares[h];
|
|
i.setAlphaMode(d.alphaMode);
|
|
var f = a - l * d.position,
|
|
p = c - u * d.position,
|
|
g = d.size,
|
|
m = d.size * i.getAspectRatio(this._scene.activeCamera, !0),
|
|
v = f / (n.width + 2 * n.x) * 2 - 1,
|
|
y = 1 - p / (n.height + 2 * n.y) * 2,
|
|
b = o.j.FromValues(g / 2, 0, 0, 0, 0, m / 2, 0, 0, 0, 0, 1, 0, v, y, 0, 1);
|
|
this._effect.setMatrix("viewportMatrix", b), this._effect.setTexture("textureSampler", d.texture), this._effect.setFloat4("color", d.color.r * s, d.color.g * s, d.color.b * s, 1), i.drawElementsType(so.a.TriangleFillMode, 0, 6)
|
|
}
|
|
return i.setDepthBuffer(!0), i.setAlphaMode(_.a.ALPHA_DISABLE), !0
|
|
}, e.prototype.dispose = function() {
|
|
var e = this._vertexBuffers[Oi.b.PositionKind];
|
|
for (e && (e.dispose(), this._vertexBuffers[Oi.b.PositionKind] = null), this._indexBuffer && (this._scene.getEngine()._releaseBuffer(this._indexBuffer), this._indexBuffer = null); this.lensFlares.length;) this.lensFlares[0].dispose();
|
|
var t = this._scene.lensFlareSystems.indexOf(this);
|
|
this._scene.lensFlareSystems.splice(t, 1)
|
|
}, e.Parse = function(t, i, n) {
|
|
var r = i.getLastEntryByID(t.emitterId),
|
|
s = t.name || "lensFlareSystem#" + t.emitterId,
|
|
a = new e(s, r, i);
|
|
a.id = t.id || s, a.borderLimit = t.borderLimit;
|
|
for (var c = 0; c < t.flares.length; c++) {
|
|
var l = t.flares[c];
|
|
Eo.AddFlare(l.size, l.position, o.e.FromArray(l.color), l.textureName ? n + l.textureName : "", a)
|
|
}
|
|
return a
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
e.id = this.id, e.name = this.name, e.emitterId = this.getEmitter().id, e.borderLimit = this.borderLimit, e.flares = [];
|
|
for (var t = 0; t < this.lensFlares.length; t++) {
|
|
var i = this.lensFlares[t];
|
|
e.flares.push({
|
|
size: i.size,
|
|
position: i.position,
|
|
color: i.color.asArray(),
|
|
textureName: ye.h.GetFilename(i.texture ? i.texture.name : "")
|
|
})
|
|
}
|
|
return e
|
|
}, e._SceneComponentInitialization = function(e) {
|
|
throw be.a.WarnImport("LensFlareSystemSceneComponent")
|
|
}, e
|
|
}();
|
|
n.a.AddParser(Ae.a.NAME_LENSFLARESYSTEM, function(e, t, i, n) {
|
|
if (void 0 !== e.lensFlareSystems && null !== e.lensFlareSystems) {
|
|
i.lensFlareSystems || (i.lensFlareSystems = new Array);
|
|
for (var r = 0, o = e.lensFlareSystems.length; r < o; r++) {
|
|
var s = e.lensFlareSystems[r],
|
|
a = Ro.Parse(s, t, n);
|
|
i.lensFlareSystems.push(a)
|
|
}
|
|
}
|
|
}), n.a.prototype.getLensFlareSystemByName = function(e) {
|
|
for (var t = 0; t < this.lensFlareSystems.length; t++)
|
|
if (this.lensFlareSystems[t].name === e) return this.lensFlareSystems[t];
|
|
return null
|
|
}, n.a.prototype.getLensFlareSystemByID = function(e) {
|
|
for (var t = 0; t < this.lensFlareSystems.length; t++)
|
|
if (this.lensFlareSystems[t].id === e) return this.lensFlareSystems[t];
|
|
return null
|
|
}, n.a.prototype.removeLensFlareSystem = function(e) {
|
|
var t = this.lensFlareSystems.indexOf(e);
|
|
return -1 !== t && this.lensFlareSystems.splice(t, 1), t
|
|
}, n.a.prototype.addLensFlareSystem = function(e) {
|
|
this.lensFlareSystems.push(e)
|
|
};
|
|
var Po = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_LENSFLARESYSTEM, this.scene = e, e.lensFlareSystems = new Array
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._afterCameraDrawStage.registerStep(Ae.a.STEP_AFTERCAMERADRAW_LENSFLARESYSTEM, this, this._draw)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.addFromContainer = function(e) {
|
|
var t = this;
|
|
e.lensFlareSystems && e.lensFlareSystems.forEach(function(e) {
|
|
t.scene.addLensFlareSystem(e)
|
|
})
|
|
}, e.prototype.removeFromContainer = function(e, t) {
|
|
var i = this;
|
|
e.lensFlareSystems && e.lensFlareSystems.forEach(function(e) {
|
|
i.scene.removeLensFlareSystem(e), t && e.dispose()
|
|
})
|
|
}, e.prototype.serialize = function(e) {
|
|
e.lensFlareSystems = [];
|
|
for (var t = 0, i = this.scene.lensFlareSystems; t < i.length; t++) {
|
|
var n = i[t];
|
|
e.lensFlareSystems.push(n.serialize())
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
for (var e = this.scene.lensFlareSystems; e.length;) e[0].dispose()
|
|
}, e.prototype._draw = function(e) {
|
|
if (this.scene.lensFlaresEnabled) {
|
|
var t = this.scene.lensFlareSystems;
|
|
ye.h.StartPerformanceCounter("Lens flares", t.length > 0);
|
|
for (var i = 0, n = t; i < n.length; i++) {
|
|
var r = n[i];
|
|
0 != (e.layerMask & r.layerMask) && r.render()
|
|
}
|
|
ye.h.EndPerformanceCounter("Lens flares", t.length > 0)
|
|
}
|
|
}, e
|
|
}();
|
|
Ro._SceneComponentInitialization = function(e) {
|
|
var t = e._getComponent(Ae.a.NAME_LENSFLARESYSTEM);
|
|
t || (t = new Po(e), e._addComponent(t))
|
|
};
|
|
var So = "#ifndef FLOAT\nvec4 pack(float depth)\n{\nconst vec4 bit_shift=vec4(255.0*255.0*255.0,255.0*255.0,255.0,1.0);\nconst vec4 bit_mask=vec4(0.0,1.0/255.0,1.0/255.0,1.0/255.0);\nvec4 res=fract(depth*bit_shift);\nres-=res.xxyz*bit_mask;\nreturn res;\n}\n#endif\nvarying float vDepthMetric;\n#ifdef ALPHATEST\nvarying vec2 vUV;\nuniform sampler2D diffuseSampler;\n#endif\nuniform vec3 biasAndScale;\nuniform vec2 depthValues;\nvoid main(void)\n{\n#ifdef ALPHATEST\nif (texture2D(diffuseSampler,vUV).a<0.4)\ndiscard;\n#endif\nfloat depth=vDepthMetric;\n#ifdef ESM\ndepth=clamp(exp(-min(87.,biasAndScale.z*depth)),0.,1.);\n#endif\n#ifdef FLOAT\ngl_FragColor=vec4(depth,1.0,1.0,1.0);\n#else\ngl_FragColor=pack(depth);\n#endif\n}";
|
|
zt.a.ShadersStore.shadowMapPixelShader = So;
|
|
var Co = "\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\nuniform vec3 lightData;\n#endif\n#include<bonesDeclaration>\n#include<morphTargetsVertexGlobalDeclaration>\n#include<morphTargetsVertexDeclaration>[0..maxSimultaneousMorphTargets]\n\n#include<instancesDeclaration>\n#include<helperFunctions>\nuniform mat4 viewProjection;\nuniform vec3 biasAndScale;\nuniform vec2 depthValues;\nvarying float vDepthMetric;\n#ifdef ALPHATEST\nvarying vec2 vUV;\nuniform mat4 diffuseMatrix;\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#endif\nvoid main(void)\n{\nvec3 positionUpdated=position;\n#include<morphTargetsVertex>[0..maxSimultaneousMorphTargets]\n#include<instancesVertex>\n#include<bonesVertex>\nvec4 worldPos=finalWorld*vec4(positionUpdated,1.0);\n\n#ifdef NORMAL\nmat3 normalWorld=mat3(finalWorld);\n#ifdef NONUNIFORMSCALING\nnormalWorld=transposeMat3(inverseMat3(normalWorld));\n#endif\nvec3 worldNor=normalize(normalWorld*normal);\n#ifdef DIRECTIONINLIGHTDATA\nvec3 worldLightDir=normalize(-lightData.xyz);\n#else\nvec3 directionToLight=lightData.xyz-worldPos.xyz;\nvec3 worldLightDir=normalize(directionToLight);\n#endif\nfloat ndl=dot(worldNor,worldLightDir);\nfloat sinNL=sqrt(1.0-ndl*ndl);\nfloat normalBias=biasAndScale.y*sinNL;\nworldPos.xyz-=worldNor*normalBias;\n#endif\n\ngl_Position=viewProjection*worldPos;\n#ifdef DEPTHTEXTURE\n\ngl_Position.z+=biasAndScale.x*gl_Position.w;\n#endif\n\nvDepthMetric=((gl_Position.z+depthValues.x)/(depthValues.y))+biasAndScale.x;\n#ifdef ALPHATEST\n#ifdef UV1\nvUV=vec2(diffuseMatrix*vec4(uv,1.0,0.0));\n#endif\n#ifdef UV2\nvUV=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));\n#endif\n#endif\n}";
|
|
zt.a.ShadersStore.shadowMapVertexShader = Co;
|
|
var Mo = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\n\nuniform vec2 screenSize;\nvoid main(void)\n{\nvec4 colorDepth=vec4(0.0);\nfor (int x=-OFFSET; x<=OFFSET; x++)\nfor (int y=-OFFSET; y<=OFFSET; y++)\ncolorDepth+=texture2D(textureSampler,vUV+vec2(x,y)/screenSize);\ngl_FragColor=(colorDepth/float((OFFSET*2+1)*(OFFSET*2+1)));\n}";
|
|
zt.a.ShadersStore.depthBoxBlurPixelShader = Mo;
|
|
var Oo = function() {
|
|
function e(t, i, n) {
|
|
this.onBeforeShadowMapRenderObservable = new r.c, this.onBeforeShadowMapRenderMeshObservable = new r.c, this._bias = 5e-5, this._normalBias = 0, this._blurBoxOffset = 1, this._blurScale = 2, this._blurKernel = 1, this._useKernelBlur = !1, this._filter = e.FILTER_NONE, this._filteringQuality = e.QUALITY_HIGH, this._contactHardeningLightSizeUVRatio = .1, this._darkness = 0, this._transparencyShadow = !1, this.frustumEdgeFalloff = 0, this.forceBackFacesOnly = !1, this._lightDirection = o.x.Zero(), this._viewMatrix = o.j.Zero(), this._projectionMatrix = o.j.Zero(), this._transformMatrix = o.j.Zero(), this._cachedPosition = new o.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), this._cachedDirection = new o.x(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE), this._currentFaceIndex = 0, this._currentFaceIndexCache = 0, this._defaultTextureMatrix = o.j.Identity(), this._mapSize = t, this._light = i, this._scene = i.getScene(), i._shadowGenerator = this, e._SceneComponentInitialization(this._scene);
|
|
var s = this._scene.getEngine().getCaps();
|
|
n ? s.textureFloatRender && s.textureFloatLinearFiltering ? this._textureType = _.a.TEXTURETYPE_FLOAT : s.textureHalfFloatRender && s.textureHalfFloatLinearFiltering ? this._textureType = _.a.TEXTURETYPE_HALF_FLOAT : this._textureType = _.a.TEXTURETYPE_UNSIGNED_INT : s.textureHalfFloatRender && s.textureHalfFloatLinearFiltering ? this._textureType = _.a.TEXTURETYPE_HALF_FLOAT : s.textureFloatRender && s.textureFloatLinearFiltering ? this._textureType = _.a.TEXTURETYPE_FLOAT : this._textureType = _.a.TEXTURETYPE_UNSIGNED_INT, this._initializeGenerator(), this._applyFilterValues()
|
|
}
|
|
return Object.defineProperty(e.prototype, "bias", {
|
|
get: function() {
|
|
return this._bias
|
|
},
|
|
set: function(e) {
|
|
this._bias = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "normalBias", {
|
|
get: function() {
|
|
return this._normalBias
|
|
},
|
|
set: function(e) {
|
|
this._normalBias = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "blurBoxOffset", {
|
|
get: function() {
|
|
return this._blurBoxOffset
|
|
},
|
|
set: function(e) {
|
|
this._blurBoxOffset !== e && (this._blurBoxOffset = e, this._disposeBlurPostProcesses())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "blurScale", {
|
|
get: function() {
|
|
return this._blurScale
|
|
},
|
|
set: function(e) {
|
|
this._blurScale !== e && (this._blurScale = e, this._disposeBlurPostProcesses())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "blurKernel", {
|
|
get: function() {
|
|
return this._blurKernel
|
|
},
|
|
set: function(e) {
|
|
this._blurKernel !== e && (this._blurKernel = e, this._disposeBlurPostProcesses())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "useKernelBlur", {
|
|
get: function() {
|
|
return this._useKernelBlur
|
|
},
|
|
set: function(e) {
|
|
this._useKernelBlur !== e && (this._useKernelBlur = e, this._disposeBlurPostProcesses())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "depthScale", {
|
|
get: function() {
|
|
return void 0 !== this._depthScale ? this._depthScale : this._light.getDepthScale()
|
|
},
|
|
set: function(e) {
|
|
this._depthScale = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "filter", {
|
|
get: function() {
|
|
return this._filter
|
|
},
|
|
set: function(t) {
|
|
if (this._light.needCube()) {
|
|
if (t === e.FILTER_BLUREXPONENTIALSHADOWMAP) return void(this.useExponentialShadowMap = !0);
|
|
if (t === e.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP) return void(this.useCloseExponentialShadowMap = !0);
|
|
if (t === e.FILTER_PCF || t === e.FILTER_PCSS) return void(this.usePoissonSampling = !0)
|
|
}
|
|
t !== e.FILTER_PCF && t !== e.FILTER_PCSS || 1 !== this._scene.getEngine().webGLVersion ? this._filter !== t && (this._filter = t, this._disposeBlurPostProcesses(), this._applyFilterValues(), this._light._markMeshesAsLightDirty()) : this.usePoissonSampling = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "usePoissonSampling", {
|
|
get: function() {
|
|
return this.filter === e.FILTER_POISSONSAMPLING
|
|
},
|
|
set: function(t) {
|
|
(t || this.filter === e.FILTER_POISSONSAMPLING) && (this.filter = t ? e.FILTER_POISSONSAMPLING : e.FILTER_NONE)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "useExponentialShadowMap", {
|
|
get: function() {
|
|
return this.filter === e.FILTER_EXPONENTIALSHADOWMAP
|
|
},
|
|
set: function(t) {
|
|
(t || this.filter === e.FILTER_EXPONENTIALSHADOWMAP) && (this.filter = t ? e.FILTER_EXPONENTIALSHADOWMAP : e.FILTER_NONE)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "useBlurExponentialShadowMap", {
|
|
get: function() {
|
|
return this.filter === e.FILTER_BLUREXPONENTIALSHADOWMAP
|
|
},
|
|
set: function(t) {
|
|
(t || this.filter === e.FILTER_BLUREXPONENTIALSHADOWMAP) && (this.filter = t ? e.FILTER_BLUREXPONENTIALSHADOWMAP : e.FILTER_NONE)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "useCloseExponentialShadowMap", {
|
|
get: function() {
|
|
return this.filter === e.FILTER_CLOSEEXPONENTIALSHADOWMAP
|
|
},
|
|
set: function(t) {
|
|
(t || this.filter === e.FILTER_CLOSEEXPONENTIALSHADOWMAP) && (this.filter = t ? e.FILTER_CLOSEEXPONENTIALSHADOWMAP : e.FILTER_NONE)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "useBlurCloseExponentialShadowMap", {
|
|
get: function() {
|
|
return this.filter === e.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP
|
|
},
|
|
set: function(t) {
|
|
(t || this.filter === e.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP) && (this.filter = t ? e.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP : e.FILTER_NONE)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "usePercentageCloserFiltering", {
|
|
get: function() {
|
|
return this.filter === e.FILTER_PCF
|
|
},
|
|
set: function(t) {
|
|
(t || this.filter === e.FILTER_PCF) && (this.filter = t ? e.FILTER_PCF : e.FILTER_NONE)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "filteringQuality", {
|
|
get: function() {
|
|
return this._filteringQuality
|
|
},
|
|
set: function(e) {
|
|
this._filteringQuality = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "useContactHardeningShadow", {
|
|
get: function() {
|
|
return this.filter === e.FILTER_PCSS
|
|
},
|
|
set: function(t) {
|
|
(t || this.filter === e.FILTER_PCSS) && (this.filter = t ? e.FILTER_PCSS : e.FILTER_NONE)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "contactHardeningLightSizeUVRatio", {
|
|
get: function() {
|
|
return this._contactHardeningLightSizeUVRatio
|
|
},
|
|
set: function(e) {
|
|
this._contactHardeningLightSizeUVRatio = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getDarkness = function() {
|
|
return this._darkness
|
|
}, e.prototype.setDarkness = function(e) {
|
|
return this._darkness = e >= 1 ? 1 : e <= 0 ? 0 : e, this
|
|
}, e.prototype.setTransparencyShadow = function(e) {
|
|
return this._transparencyShadow = e, this
|
|
}, e.prototype.getShadowMap = function() {
|
|
return this._shadowMap
|
|
}, e.prototype.getShadowMapForRendering = function() {
|
|
return this._shadowMap2 ? this._shadowMap2 : this._shadowMap
|
|
}, e.prototype.addShadowCaster = function(e, t) {
|
|
var i;
|
|
return void 0 === t && (t = !0), this._shadowMap ? (this._shadowMap.renderList || (this._shadowMap.renderList = []), this._shadowMap.renderList.push(e), t && (i = this._shadowMap.renderList).push.apply(i, e.getChildMeshes()), this) : this
|
|
}, e.prototype.removeShadowCaster = function(e, t) {
|
|
if (void 0 === t && (t = !0), !this._shadowMap || !this._shadowMap.renderList) return this;
|
|
var i = this._shadowMap.renderList.indexOf(e);
|
|
if (-1 !== i && this._shadowMap.renderList.splice(i, 1), t)
|
|
for (var n = 0, r = e.getChildren(); n < r.length; n++) {
|
|
var o = r[n];
|
|
this.removeShadowCaster(o)
|
|
}
|
|
return this
|
|
}, e.prototype.getLight = function() {
|
|
return this._light
|
|
}, e.prototype._initializeGenerator = function() {
|
|
this._light._markMeshesAsLightDirty(), this._initializeShadowMap()
|
|
}, e.prototype._initializeShadowMap = function() {
|
|
var t = this,
|
|
i = this._scene.getEngine();
|
|
i.webGLVersion > 1 ? (this._shadowMap = new _i(this._light.name + "_shadowMap", this._mapSize, this._scene, !1, !0, this._textureType, this._light.needCube(), void 0, !1, !1), this._shadowMap.createDepthStencilTexture(_.a.LESS, !0)) : this._shadowMap = new _i(this._light.name + "_shadowMap", this._mapSize, this._scene, !1, !0, this._textureType, this._light.needCube()), this._shadowMap.wrapU = ke.a.CLAMP_ADDRESSMODE, this._shadowMap.wrapV = ke.a.CLAMP_ADDRESSMODE, this._shadowMap.anisotropicFilteringLevel = 1, this._shadowMap.updateSamplingMode(ke.a.BILINEAR_SAMPLINGMODE), this._shadowMap.renderParticles = !1, this._shadowMap.ignoreCameraViewport = !0, this._shadowMap.onBeforeRenderObservable.add(function(n) {
|
|
t._currentFaceIndex = n, t._filter === e.FILTER_PCF && i.setColorWrite(!1)
|
|
}), this._shadowMap.customRenderFunction = this._renderForShadowMap.bind(this), this._shadowMap.onAfterUnbindObservable.add(function() {
|
|
if (t._filter === e.FILTER_PCF && i.setColorWrite(!0), t.useBlurExponentialShadowMap || t.useBlurCloseExponentialShadowMap) {
|
|
var n = t.getShadowMapForRendering();
|
|
n && t._scene.postProcessManager.directRender(t._blurPostProcesses, n.getInternalTexture(), !0)
|
|
}
|
|
});
|
|
var n = new o.f(0, 0, 0, 0),
|
|
r = new o.f(1, 1, 1, 1);
|
|
this._shadowMap.onClearObservable.add(function(i) {
|
|
t._filter === e.FILTER_PCF ? i.clear(r, !1, !0, !1) : t.useExponentialShadowMap || t.useBlurExponentialShadowMap ? i.clear(n, !0, !0, !1) : i.clear(r, !0, !0, !1)
|
|
})
|
|
}, e.prototype._initializeBlurRTTAndPostProcesses = function() {
|
|
var e = this,
|
|
t = this._scene.getEngine(),
|
|
i = this._mapSize / this.blurScale;
|
|
this.useKernelBlur && 1 === this.blurScale || (this._shadowMap2 = new _i(this._light.name + "_shadowMap2", i, this._scene, !1, !0, this._textureType), this._shadowMap2.wrapU = ke.a.CLAMP_ADDRESSMODE, this._shadowMap2.wrapV = ke.a.CLAMP_ADDRESSMODE, this._shadowMap2.updateSamplingMode(ke.a.BILINEAR_SAMPLINGMODE)), this.useKernelBlur ? (this._kernelBlurXPostprocess = new $n(this._light.name + "KernelBlurX", new o.w(1, 0), this.blurKernel, 1, null, ke.a.BILINEAR_SAMPLINGMODE, t, !1, this._textureType), this._kernelBlurXPostprocess.width = i, this._kernelBlurXPostprocess.height = i, this._kernelBlurXPostprocess.onApplyObservable.add(function(t) {
|
|
t.setTexture("textureSampler", e._shadowMap)
|
|
}), this._kernelBlurYPostprocess = new $n(this._light.name + "KernelBlurY", new o.w(0, 1), this.blurKernel, 1, null, ke.a.BILINEAR_SAMPLINGMODE, t, !1, this._textureType), this._kernelBlurXPostprocess.autoClear = !1, this._kernelBlurYPostprocess.autoClear = !1, this._textureType === _.a.TEXTURETYPE_UNSIGNED_INT && (this._kernelBlurXPostprocess.packedFloat = !0, this._kernelBlurYPostprocess.packedFloat = !0), this._blurPostProcesses = [this._kernelBlurXPostprocess, this._kernelBlurYPostprocess]) : (this._boxBlurPostprocess = new Ht(this._light.name + "DepthBoxBlur", "depthBoxBlur", ["screenSize", "boxOffset"], [], 1, null, ke.a.BILINEAR_SAMPLINGMODE, t, !1, "#define OFFSET " + this._blurBoxOffset, this._textureType), this._boxBlurPostprocess.onApplyObservable.add(function(t) {
|
|
t.setFloat2("screenSize", i, i), t.setTexture("textureSampler", e._shadowMap)
|
|
}), this._boxBlurPostprocess.autoClear = !1, this._blurPostProcesses = [this._boxBlurPostprocess])
|
|
}, e.prototype._renderForShadowMap = function(e, t, i, n) {
|
|
var r, o = this._scene.getEngine();
|
|
if (n.length) {
|
|
for (o.setColorWrite(!1), r = 0; r < n.length; r++) this._renderSubMeshForShadowMap(n.data[r]);
|
|
o.setColorWrite(!0)
|
|
}
|
|
for (r = 0; r < e.length; r++) this._renderSubMeshForShadowMap(e.data[r]);
|
|
for (r = 0; r < t.length; r++) this._renderSubMeshForShadowMap(t.data[r]);
|
|
if (this._transparencyShadow)
|
|
for (r = 0; r < i.length; r++) this._renderSubMeshForShadowMap(i.data[r])
|
|
}, e.prototype._renderSubMeshForShadowMap = function(e) {
|
|
var t = this,
|
|
i = e.getRenderingMesh(),
|
|
n = this._scene,
|
|
r = n.getEngine(),
|
|
o = e.getMaterial();
|
|
if (i._internalAbstractMeshDataInfo._isActiveIntermediate = !1, o && 0 !== e.verticesCount) {
|
|
r.setState(o.backFaceCulling);
|
|
var s = i._getInstancesRenderList(e._id);
|
|
if (!s.mustReturn) {
|
|
var a = r.getCaps().instancedArrays && null !== s.visibleInstances[e._id] && void 0 !== s.visibleInstances[e._id];
|
|
if (this.isReady(e, a)) {
|
|
if (r.enableEffect(this._effect), i._bind(e, this._effect, so.a.TriangleFillMode), this._effect.setFloat3("biasAndScale", this.bias, this.normalBias, this.depthScale), this._effect.setMatrix("viewProjection", this.getTransformMatrix()), this.getLight().getTypeID() === zn.a.LIGHTTYPEID_DIRECTIONALLIGHT ? this._effect.setVector3("lightData", this._cachedDirection) : this._effect.setVector3("lightData", this._cachedPosition), n.activeCamera && this._effect.setFloat2("depthValues", this.getLight().getDepthMinZ(n.activeCamera), this.getLight().getDepthMinZ(n.activeCamera) + this.getLight().getDepthMaxZ(n.activeCamera)), o && o.needAlphaTesting()) {
|
|
var c = o.getAlphaTestTexture();
|
|
c && (this._effect.setTexture("diffuseSampler", c), this._effect.setMatrix("diffuseMatrix", c.getTextureMatrix() || this._defaultTextureMatrix))
|
|
}
|
|
if (i.useBones && i.computeBonesUsingShaders && i.skeleton) {
|
|
var l = i.skeleton;
|
|
if (l.isUsingTextureForMatrices) {
|
|
var u = l.getTransformMatrixTexture();
|
|
if (!u) return;
|
|
this._effect.setTexture("boneSampler", u), this._effect.setFloat("boneTextureWidth", 4 * (l.bones.length + 1))
|
|
} else this._effect.setMatrices("mBones", l.getTransformMatrices(i))
|
|
}
|
|
ir.a.BindMorphTargetParameters(i, this._effect), this.forceBackFacesOnly && r.setState(!0, 0, !1, !0), this.onBeforeShadowMapRenderMeshObservable.notifyObservers(i), this.onBeforeShadowMapRenderObservable.notifyObservers(this._effect), i._processRendering(e, this._effect, so.a.TriangleFillMode, s, a, function(e, i) {
|
|
return t._effect.setMatrix("world", i)
|
|
}), this.forceBackFacesOnly && r.setState(!0, 0, !1, !1)
|
|
} else this._shadowMap && this._shadowMap.resetRefreshCounter()
|
|
}
|
|
}
|
|
}, e.prototype._applyFilterValues = function() {
|
|
this._shadowMap && (this.filter === e.FILTER_NONE || this.filter === e.FILTER_PCSS ? this._shadowMap.updateSamplingMode(ke.a.NEAREST_SAMPLINGMODE) : this._shadowMap.updateSamplingMode(ke.a.BILINEAR_SAMPLINGMODE))
|
|
}, e.prototype.forceCompilation = function(e, t) {
|
|
var i = this,
|
|
n = l.a({
|
|
useInstances: !1
|
|
}, t),
|
|
r = this.getShadowMap();
|
|
if (r) {
|
|
var o = r.renderList;
|
|
if (o) {
|
|
for (var s = new Array, a = 0, c = o; a < c.length; a++) {
|
|
var u = c[a];
|
|
s.push.apply(s, u.subMeshes)
|
|
}
|
|
if (0 !== s.length) {
|
|
var h = 0,
|
|
d = function() {
|
|
if (i._scene && i._scene.getEngine()) {
|
|
for (; i.isReady(s[h], n.useInstances);)
|
|
if (++h >= s.length) return void(e && e(i));
|
|
setTimeout(d, 16)
|
|
}
|
|
};
|
|
d()
|
|
} else e && e(this)
|
|
} else e && e(this)
|
|
} else e && e(this)
|
|
}, e.prototype.forceCompilationAsync = function(e) {
|
|
var t = this;
|
|
return new Promise(function(i) {
|
|
t.forceCompilation(function() {
|
|
i()
|
|
}, e)
|
|
})
|
|
}, e.prototype.isReady = function(e, t) {
|
|
var i = [];
|
|
this._textureType !== _.a.TEXTURETYPE_UNSIGNED_INT && i.push("#define FLOAT"), this.useExponentialShadowMap || this.useBlurExponentialShadowMap ? i.push("#define ESM") : (this.usePercentageCloserFiltering || this.useContactHardeningShadow) && i.push("#define DEPTHTEXTURE");
|
|
var n = [Oi.b.PositionKind],
|
|
r = e.getMesh(),
|
|
o = e.getMaterial();
|
|
if (this.normalBias && r.isVerticesDataPresent(Oi.b.NormalKind) && (n.push(Oi.b.NormalKind), i.push("#define NORMAL"), r.nonUniformScaling && i.push("#define NONUNIFORMSCALING"), this.getLight().getTypeID() === zn.a.LIGHTTYPEID_DIRECTIONALLIGHT && i.push("#define DIRECTIONINLIGHTDATA")), o && o.needAlphaTesting()) {
|
|
var s = o.getAlphaTestTexture();
|
|
s && (i.push("#define ALPHATEST"), r.isVerticesDataPresent(Oi.b.UVKind) && (n.push(Oi.b.UVKind), i.push("#define UV1")), r.isVerticesDataPresent(Oi.b.UV2Kind) && 1 === s.coordinatesIndex && (n.push(Oi.b.UV2Kind), i.push("#define UV2")))
|
|
}
|
|
if (r.useBones && r.computeBonesUsingShaders && r.skeleton) {
|
|
n.push(Oi.b.MatricesIndicesKind), n.push(Oi.b.MatricesWeightsKind), r.numBoneInfluencers > 4 && (n.push(Oi.b.MatricesIndicesExtraKind), n.push(Oi.b.MatricesWeightsExtraKind));
|
|
var a = r.skeleton;
|
|
i.push("#define NUM_BONE_INFLUENCERS " + r.numBoneInfluencers), a.isUsingTextureForMatrices ? i.push("#define BONETEXTURE") : i.push("#define BonesPerMesh " + (a.bones.length + 1))
|
|
} else i.push("#define NUM_BONE_INFLUENCERS 0");
|
|
var c = r.morphTargetManager,
|
|
l = 0;
|
|
if (c && c.numInfluencers > 0 && (i.push("#define MORPHTARGETS"), l = c.numInfluencers, i.push("#define NUM_MORPH_INFLUENCERS " + l), ir.a.PrepareAttributesForMorphTargets(n, r, {
|
|
NUM_MORPH_INFLUENCERS: l
|
|
})), t && (i.push("#define INSTANCES"), n.push("world0"), n.push("world1"), n.push("world2"), n.push("world3")), this.customShaderOptions && this.customShaderOptions.defines)
|
|
for (var u = 0, h = this.customShaderOptions.defines; u < h.length; u++) {
|
|
var d = h[u]; - 1 === i.indexOf(d) && i.push(d)
|
|
}
|
|
var f = i.join("\n");
|
|
if (this._cachedDefines !== f) {
|
|
this._cachedDefines = f;
|
|
var p = "shadowMap",
|
|
g = ["world", "mBones", "viewProjection", "diffuseMatrix", "lightData", "depthValues", "biasAndScale", "morphTargetInfluences", "boneTextureWidth"],
|
|
m = ["diffuseSampler", "boneSampler"];
|
|
if (this.customShaderOptions) {
|
|
if (p = this.customShaderOptions.shaderName, this.customShaderOptions.attributes)
|
|
for (var v = 0, y = this.customShaderOptions.attributes; v < y.length; v++) {
|
|
var b = y[v]; - 1 === n.indexOf(b) && n.push(b)
|
|
}
|
|
if (this.customShaderOptions.uniforms)
|
|
for (var T = 0, E = this.customShaderOptions.uniforms; T < E.length; T++) {
|
|
var A = E[T]; - 1 === g.indexOf(A) && g.push(A)
|
|
}
|
|
if (this.customShaderOptions.samplers)
|
|
for (var x = 0, R = this.customShaderOptions.samplers; x < R.length; x++) {
|
|
var P = R[x]; - 1 === m.indexOf(P) && m.push(P)
|
|
}
|
|
}
|
|
this._effect = this._scene.getEngine().createEffect(p, n, g, m, f, void 0, void 0, void 0, {
|
|
maxSimultaneousMorphTargets: l
|
|
})
|
|
}
|
|
return !!this._effect.isReady() && ((this.useBlurExponentialShadowMap || this.useBlurCloseExponentialShadowMap) && (this._blurPostProcesses && this._blurPostProcesses.length || this._initializeBlurRTTAndPostProcesses()), !(this._kernelBlurXPostprocess && !this._kernelBlurXPostprocess.isReady()) && (!(this._kernelBlurYPostprocess && !this._kernelBlurYPostprocess.isReady()) && !(this._boxBlurPostprocess && !this._boxBlurPostprocess.isReady())))
|
|
}, e.prototype.prepareDefines = function(t, i) {
|
|
var n = this._scene,
|
|
r = this._light;
|
|
n.shadowsEnabled && r.shadowEnabled && (t["SHADOW" + i] = !0, this.useContactHardeningShadow && (t["SHADOWPCSS" + i] = !0, this._filteringQuality === e.QUALITY_LOW ? t["SHADOWLOWQUALITY" + i] = !0 : this._filteringQuality === e.QUALITY_MEDIUM && (t["SHADOWMEDIUMQUALITY" + i] = !0)), this.usePercentageCloserFiltering ? (t["SHADOWPCF" + i] = !0, this._filteringQuality === e.QUALITY_LOW ? t["SHADOWLOWQUALITY" + i] = !0 : this._filteringQuality === e.QUALITY_MEDIUM && (t["SHADOWMEDIUMQUALITY" + i] = !0)) : this.usePoissonSampling ? t["SHADOWPOISSON" + i] = !0 : this.useExponentialShadowMap || this.useBlurExponentialShadowMap ? t["SHADOWESM" + i] = !0 : (this.useCloseExponentialShadowMap || this.useBlurCloseExponentialShadowMap) && (t["SHADOWCLOSEESM" + i] = !0), r.needCube() && (t["SHADOWCUBE" + i] = !0))
|
|
}, e.prototype.bindShadowLight = function(t, i) {
|
|
var n = this._light,
|
|
r = this._scene;
|
|
if (r.shadowsEnabled && n.shadowEnabled) {
|
|
var o = r.activeCamera;
|
|
if (o) {
|
|
var s = this.getShadowMap();
|
|
s && (n.needCube() || i.setMatrix("lightMatrix" + t, this.getTransformMatrix()), this._filter === e.FILTER_PCF ? (i.setDepthStencilTexture("shadowSampler" + t, this.getShadowMapForRendering()), n._uniformBuffer.updateFloat4("shadowsInfo", this.getDarkness(), s.getSize().width, 1 / s.getSize().width, this.frustumEdgeFalloff, t)) : this._filter === e.FILTER_PCSS ? (i.setDepthStencilTexture("shadowSampler" + t, this.getShadowMapForRendering()), i.setTexture("depthSampler" + t, this.getShadowMapForRendering()), n._uniformBuffer.updateFloat4("shadowsInfo", this.getDarkness(), 1 / s.getSize().width, this._contactHardeningLightSizeUVRatio * s.getSize().width, this.frustumEdgeFalloff, t)) : (i.setTexture("shadowSampler" + t, this.getShadowMapForRendering()), n._uniformBuffer.updateFloat4("shadowsInfo", this.getDarkness(), this.blurScale / s.getSize().width, this.depthScale, this.frustumEdgeFalloff, t)), n._uniformBuffer.updateFloat2("depthValues", this.getLight().getDepthMinZ(o), this.getLight().getDepthMinZ(o) + this.getLight().getDepthMaxZ(o), t))
|
|
}
|
|
}
|
|
}, e.prototype.getTransformMatrix = function() {
|
|
var e = this._scene;
|
|
if (this._currentRenderID === e.getRenderId() && this._currentFaceIndexCache === this._currentFaceIndex) return this._transformMatrix;
|
|
this._currentRenderID = e.getRenderId(), this._currentFaceIndexCache = this._currentFaceIndex;
|
|
var t = this._light.position;
|
|
if (this._light.computeTransformedInformation() && (t = this._light.transformedPosition), o.x.NormalizeToRef(this._light.getShadowDirection(this._currentFaceIndex), this._lightDirection), 1 === Math.abs(o.x.Dot(this._lightDirection, o.x.Up())) && (this._lightDirection.z = 1e-13), this._light.needProjectionMatrixCompute() || !this._cachedPosition || !this._cachedDirection || !t.equals(this._cachedPosition) || !this._lightDirection.equals(this._cachedDirection)) {
|
|
this._cachedPosition.copyFrom(t), this._cachedDirection.copyFrom(this._lightDirection), o.j.LookAtLHToRef(t, t.add(this._lightDirection), o.x.Up(), this._viewMatrix);
|
|
var i = this.getShadowMap();
|
|
if (i) {
|
|
var n = i.renderList;
|
|
n && this._light.setShadowProjectionMatrix(this._projectionMatrix, this._viewMatrix, n)
|
|
}
|
|
this._viewMatrix.multiplyToRef(this._projectionMatrix, this._transformMatrix)
|
|
}
|
|
return this._transformMatrix
|
|
}, e.prototype.recreateShadowMap = function() {
|
|
var e = this._shadowMap;
|
|
if (e) {
|
|
var t = e.renderList;
|
|
this._disposeRTTandPostProcesses(), this._initializeGenerator(), this.filter = this.filter, this._applyFilterValues(), this._shadowMap.renderList = t
|
|
}
|
|
}, e.prototype._disposeBlurPostProcesses = function() {
|
|
this._shadowMap2 && (this._shadowMap2.dispose(), this._shadowMap2 = null), this._boxBlurPostprocess && (this._boxBlurPostprocess.dispose(), this._boxBlurPostprocess = null), this._kernelBlurXPostprocess && (this._kernelBlurXPostprocess.dispose(), this._kernelBlurXPostprocess = null), this._kernelBlurYPostprocess && (this._kernelBlurYPostprocess.dispose(), this._kernelBlurYPostprocess = null), this._blurPostProcesses = []
|
|
}, e.prototype._disposeRTTandPostProcesses = function() {
|
|
this._shadowMap && (this._shadowMap.dispose(), this._shadowMap = null), this._disposeBlurPostProcesses()
|
|
}, e.prototype.dispose = function() {
|
|
this._disposeRTTandPostProcesses(), this._light && (this._light._shadowGenerator = null, this._light._markMeshesAsLightDirty())
|
|
}, e.prototype.serialize = function() {
|
|
var e = {},
|
|
t = this.getShadowMap();
|
|
if (!t) return e;
|
|
if (e.lightId = this._light.id, e.mapSize = t.getRenderSize(), e.useExponentialShadowMap = this.useExponentialShadowMap, e.useBlurExponentialShadowMap = this.useBlurExponentialShadowMap, e.useCloseExponentialShadowMap = this.useBlurExponentialShadowMap, e.useBlurCloseExponentialShadowMap = this.useBlurExponentialShadowMap, e.usePoissonSampling = this.usePoissonSampling, e.forceBackFacesOnly = this.forceBackFacesOnly, e.depthScale = this.depthScale, e.darkness = this.getDarkness(), e.blurBoxOffset = this.blurBoxOffset, e.blurKernel = this.blurKernel, e.blurScale = this.blurScale, e.useKernelBlur = this.useKernelBlur, e.transparencyShadow = this._transparencyShadow, e.frustumEdgeFalloff = this.frustumEdgeFalloff, e.bias = this.bias, e.normalBias = this.normalBias, e.usePercentageCloserFiltering = this.usePercentageCloserFiltering, e.useContactHardeningShadow = this.useContactHardeningShadow, e.filteringQuality = this.filteringQuality, e.contactHardeningLightSizeUVRatio = this.contactHardeningLightSizeUVRatio, e.renderList = [], t.renderList)
|
|
for (var i = 0; i < t.renderList.length; i++) {
|
|
var n = t.renderList[i];
|
|
e.renderList.push(n.id)
|
|
}
|
|
return e
|
|
}, e.Parse = function(t, i) {
|
|
for (var n = i.getLightByID(t.lightId), r = new e(t.mapSize, n), o = r.getShadowMap(), s = 0; s < t.renderList.length; s++) {
|
|
i.getMeshesByID(t.renderList[s]).forEach(function(e) {
|
|
o && (o.renderList || (o.renderList = []), o.renderList.push(e))
|
|
})
|
|
}
|
|
return t.usePoissonSampling ? r.usePoissonSampling = !0 : t.useExponentialShadowMap ? r.useExponentialShadowMap = !0 : t.useBlurExponentialShadowMap ? r.useBlurExponentialShadowMap = !0 : t.useCloseExponentialShadowMap ? r.useCloseExponentialShadowMap = !0 : t.useBlurCloseExponentialShadowMap ? r.useBlurCloseExponentialShadowMap = !0 : t.usePercentageCloserFiltering ? r.usePercentageCloserFiltering = !0 : t.useContactHardeningShadow && (r.useContactHardeningShadow = !0), t.filteringQuality && (r.filteringQuality = t.filteringQuality), t.contactHardeningLightSizeUVRatio ? r.contactHardeningLightSizeUVRatio = t.contactHardeningLightSizeUVRatio : t.useVarianceShadowMap ? r.useExponentialShadowMap = !0 : t.useBlurVarianceShadowMap && (r.useBlurExponentialShadowMap = !0), t.depthScale && (r.depthScale = t.depthScale), t.blurScale && (r.blurScale = t.blurScale), t.blurBoxOffset && (r.blurBoxOffset = t.blurBoxOffset), t.useKernelBlur && (r.useKernelBlur = t.useKernelBlur), t.blurKernel && (r.blurKernel = t.blurKernel), void 0 !== t.bias && (r.bias = t.bias), void 0 !== t.normalBias && (r.normalBias = t.normalBias), void 0 !== t.frustumEdgeFalloff && (r.frustumEdgeFalloff = t.frustumEdgeFalloff), t.darkness && r.setDarkness(t.darkness), t.transparencyShadow && r.setTransparencyShadow(!0), r.forceBackFacesOnly = t.forceBackFacesOnly, r
|
|
}, e.FILTER_NONE = 0, e.FILTER_EXPONENTIALSHADOWMAP = 1, e.FILTER_POISSONSAMPLING = 2, e.FILTER_BLUREXPONENTIALSHADOWMAP = 3, e.FILTER_CLOSEEXPONENTIALSHADOWMAP = 4, e.FILTER_BLURCLOSEEXPONENTIALSHADOWMAP = 5, e.FILTER_PCF = 6, e.FILTER_PCSS = 7, e.QUALITY_HIGH = 0, e.QUALITY_MEDIUM = 1, e.QUALITY_LOW = 2, e._SceneComponentInitialization = function(e) {
|
|
throw be.a.WarnImport("ShadowGeneratorSceneComponent")
|
|
}, e
|
|
}();
|
|
n.a.AddParser(Ae.a.NAME_SHADOWGENERATOR, function(e, t) {
|
|
if (void 0 !== e.shadowGenerators && null !== e.shadowGenerators)
|
|
for (var i = 0, n = e.shadowGenerators.length; i < n; i++) {
|
|
var r = e.shadowGenerators[i];
|
|
Oo.Parse(r, t)
|
|
}
|
|
});
|
|
var Io = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_SHADOWGENERATOR, this.scene = e
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._gatherRenderTargetsStage.registerStep(Ae.a.STEP_GATHERRENDERTARGETS_SHADOWGENERATOR, this, this._gatherRenderTargets)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.serialize = function(e) {
|
|
e.shadowGenerators = [];
|
|
for (var t = 0, i = this.scene.lights; t < i.length; t++) {
|
|
var n = i[t].getShadowGenerator();
|
|
n && e.shadowGenerators.push(n.serialize())
|
|
}
|
|
}, e.prototype.addFromContainer = function(e) {}, e.prototype.removeFromContainer = function(e, t) {}, e.prototype.dispose = function() {}, e.prototype._gatherRenderTargets = function(e) {
|
|
var t = this.scene;
|
|
if (this.scene.shadowsEnabled)
|
|
for (var i = 0; i < t.lights.length; i++) {
|
|
var n = t.lights[i],
|
|
r = n.getShadowGenerator();
|
|
if (n.isEnabled() && n.shadowEnabled && r) {
|
|
var o = r.getShadowMap(); - 1 !== t.textures.indexOf(o) && e.push(o)
|
|
}
|
|
}
|
|
}, e
|
|
}();
|
|
Oo._SceneComponentInitialization = function(e) {
|
|
var t = e._getComponent(Ae.a.NAME_SHADOWGENERATOR);
|
|
t || (t = new Io(e), e._addComponent(t))
|
|
}, F.a.AddNodeConstructor("Light_Type_0", function(e, t) {
|
|
return function() {
|
|
return new Do(e, o.x.Zero(), t)
|
|
}
|
|
});
|
|
var Do = function(e) {
|
|
function t(t, i, n) {
|
|
var r = e.call(this, t, n) || this;
|
|
return r._shadowAngle = Math.PI / 2, r.position = i, r
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "shadowAngle", {
|
|
get: function() {
|
|
return this._shadowAngle
|
|
},
|
|
set: function(e) {
|
|
this._shadowAngle = e, this.forceProjectionMatrixCompute()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "direction", {
|
|
get: function() {
|
|
return this._direction
|
|
},
|
|
set: function(e) {
|
|
var t = this.needCube();
|
|
this._direction = e, this.needCube() !== t && this._shadowGenerator && this._shadowGenerator.recreateShadowMap()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "PointLight"
|
|
}, t.prototype.getTypeID = function() {
|
|
return zn.a.LIGHTTYPEID_POINTLIGHT
|
|
}, t.prototype.needCube = function() {
|
|
return !this.direction
|
|
}, t.prototype.getShadowDirection = function(t) {
|
|
if (this.direction) return e.prototype.getShadowDirection.call(this, t);
|
|
switch (t) {
|
|
case 0:
|
|
return new o.x(1, 0, 0);
|
|
case 1:
|
|
return new o.x(-1, 0, 0);
|
|
case 2:
|
|
return new o.x(0, -1, 0);
|
|
case 3:
|
|
return new o.x(0, 1, 0);
|
|
case 4:
|
|
return new o.x(0, 0, 1);
|
|
case 5:
|
|
return new o.x(0, 0, -1)
|
|
}
|
|
return o.x.Zero()
|
|
}, t.prototype._setDefaultShadowProjectionMatrix = function(e, t, i) {
|
|
var n = this.getScene().activeCamera;
|
|
n && o.j.PerspectiveFovLHToRef(this.shadowAngle, 1, this.getDepthMinZ(n), this.getDepthMaxZ(n), e)
|
|
}, t.prototype._buildUniformLayout = function() {
|
|
this._uniformBuffer.addUniform("vLightData", 4), this._uniformBuffer.addUniform("vLightDiffuse", 4), this._uniformBuffer.addUniform("vLightSpecular", 3), this._uniformBuffer.addUniform("vLightFalloff", 4), this._uniformBuffer.addUniform("shadowsInfo", 3), this._uniformBuffer.addUniform("depthValues", 2), this._uniformBuffer.create()
|
|
}, t.prototype.transferToEffect = function(e, t) {
|
|
return this.computeTransformedInformation() ? this._uniformBuffer.updateFloat4("vLightData", this.transformedPosition.x, this.transformedPosition.y, this.transformedPosition.z, 0, t) : this._uniformBuffer.updateFloat4("vLightData", this.position.x, this.position.y, this.position.z, 0, t), this._uniformBuffer.updateFloat4("vLightFalloff", this.range, this._inverseSquaredRange, 0, 0, t), this
|
|
}, t.prototype.prepareLightSpecificDefines = function(e, t) {
|
|
e["POINTLIGHT" + t] = !0
|
|
}, l.c([Object(L.c)()], t.prototype, "shadowAngle", null), t
|
|
}(jn),
|
|
Lo = function() {
|
|
function e(e, t, i) {
|
|
var n = this;
|
|
void 0 === t && (t = ""), void 0 === i && (i = "black"), this._renderingCanvas = e, this._loadingText = t, this._loadingDivBackgroundColor = i, this._resizeLoadingUI = function() {
|
|
var e = n._renderingCanvas.getBoundingClientRect(),
|
|
t = window.getComputedStyle(n._renderingCanvas).position;
|
|
n._loadingDiv && (n._loadingDiv.style.position = "fixed" === t ? "fixed" : "absolute", n._loadingDiv.style.left = e.left + "px", n._loadingDiv.style.top = e.top + "px", n._loadingDiv.style.width = e.width + "px", n._loadingDiv.style.height = e.height + "px")
|
|
}
|
|
}
|
|
return e.prototype.displayLoadingUI = function() {
|
|
if (!this._loadingDiv) {
|
|
this._loadingDiv = document.createElement("div"), this._loadingDiv.id = "babylonjsLoadingDiv", this._loadingDiv.style.opacity = "0", this._loadingDiv.style.transition = "opacity 1.5s ease", this._loadingDiv.style.pointerEvents = "none", this._loadingTextDiv = document.createElement("div"), this._loadingTextDiv.style.position = "absolute", this._loadingTextDiv.style.left = "0", this._loadingTextDiv.style.top = "50%", this._loadingTextDiv.style.marginTop = "80px", this._loadingTextDiv.style.width = "100%", this._loadingTextDiv.style.height = "20px", this._loadingTextDiv.style.fontFamily = "Arial", this._loadingTextDiv.style.fontSize = "14px", this._loadingTextDiv.style.color = "white", this._loadingTextDiv.style.textAlign = "center", this._loadingTextDiv.innerHTML = "Loading", this._loadingDiv.appendChild(this._loadingTextDiv), this._loadingTextDiv.innerHTML = this._loadingText;
|
|
var t = document.createElement("style");
|
|
t.type = "text/css";
|
|
t.innerHTML = "@-webkit-keyframes spin1 { 0% { -webkit-transform: rotate(0deg);}\n 100% { -webkit-transform: rotate(360deg);}\n } @keyframes spin1 { 0% { transform: rotate(0deg);}\n 100% { transform: rotate(360deg);}\n }", document.getElementsByTagName("head")[0].appendChild(t);
|
|
var i = new Image;
|
|
e.DefaultLogoUrl ? i.src = e.DefaultLogoUrl : i.src = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxODAuMTcgMjA4LjA0Ij48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2ZmZjt9LmNscy0ye2ZpbGw6I2UwNjg0Yjt9LmNscy0ze2ZpbGw6I2JiNDY0Yjt9LmNscy00e2ZpbGw6I2UwZGVkODt9LmNscy01e2ZpbGw6I2Q1ZDJjYTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPkJhYnlsb25Mb2dvPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iUGFnZV9FbGVtZW50cyIgZGF0YS1uYW1lPSJQYWdlIEVsZW1lbnRzIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik05MC4wOSwwLDAsNTJWMTU2bDkwLjA5LDUyLDkwLjA4LTUyVjUyWiIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtMiIgcG9pbnRzPSIxODAuMTcgNTIuMDEgMTUxLjk3IDM1LjczIDEyNC44NSA1MS4zOSAxNTMuMDUgNjcuNjcgMTgwLjE3IDUyLjAxIi8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjI3LjEyIDY3LjY3IDExNy4yMSAxNS42NiA5MC4wOCAwIDAgNTIuMDEgMjcuMTIgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTIiIHBvaW50cz0iNjEuODkgMTIwLjMgOTAuMDggMTM2LjU4IDExOC4yOCAxMjAuMyA5MC4wOCAxMDQuMDIgNjEuODkgMTIwLjMiLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDE1My4wNSAxNDAuMzcgOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyAwIDUyLjAxIDAgMTU2LjAzIDkwLjA4IDIwOC4wNCAxODAuMTcgMTU2LjAzIDE4MC4xNyA1Mi4wMSAxNTMuMDUgNjcuNjciLz48cG9seWdvbiBjbGFzcz0iY2xzLTMiIHBvaW50cz0iOTAuMDggNzEuNDYgNjEuODkgODcuNzQgNjEuODkgMTIwLjMgOTAuMDggMTA0LjAyIDExOC4yOCAxMjAuMyAxMTguMjggODcuNzQgOTAuMDggNzEuNDYiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMTUzLjA1IDY3LjY3IDExOC4yOCA4Ny43NCAxMTguMjggMTIwLjMgOTAuMDggMTM2LjU4IDkwLjA4IDE3Ni43MiAxNTMuMDUgMTQwLjM3IDE1My4wNSA2Ny42NyIvPjxwb2x5Z29uIGNsYXNzPSJjbHMtNSIgcG9pbnRzPSIyNy4xMiA2Ny42NyA2MS44OSA4Ny43NCA2MS44OSAxMjAuMyA5MC4wOCAxMzYuNTggOTAuMDggMTc2LjcyIDI3LjEyIDE0MC4zNyAyNy4xMiA2Ny42NyIvPjwvZz48L2c+PC9zdmc+", i.style.position = "absolute", i.style.left = "50%", i.style.top = "50%", i.style.width = "10vw", i.style.height = "10vw", i.style.marginLeft = "-5vw", i.style.marginTop = "-5vw";
|
|
var n = new Image;
|
|
e.DefaultSpinnerUrl ? n.src = e.DefaultSpinnerUrl : n.src = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzOTIgMzkyIj48ZGVmcz48c3R5bGU+LmNscy0xe2ZpbGw6I2UwNjg0Yjt9LmNscy0ye2ZpbGw6bm9uZTt9PC9zdHlsZT48L2RlZnM+PHRpdGxlPlNwaW5uZXJJY29uPC90aXRsZT48ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBpZD0iU3Bpbm5lciI+PHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNDAuMjEsMTI2LjQzYzMuNy03LjMxLDcuNjctMTQuNDQsMTItMjEuMzJsMy4zNi01LjEsMy41Mi01YzEuMjMtMS42MywyLjQxLTMuMjksMy42NS00LjkxczIuNTMtMy4yMSwzLjgyLTQuNzlBMTg1LjIsMTg1LjIsMCwwLDEsODMuNCw2Ny40M2EyMDgsMjA4LDAsMCwxLDE5LTE1LjY2YzMuMzUtMi40MSw2Ljc0LTQuNzgsMTAuMjUtN3M3LjExLTQuMjgsMTAuNzUtNi4zMmM3LjI5LTQsMTQuNzMtOCwyMi41My0xMS40OSwzLjktMS43Miw3Ljg4LTMuMywxMi00LjY0YTEwNC4yMiwxMDQuMjIsMCwwLDEsMTIuNDQtMy4yMyw2Mi40NCw2Mi40NCwwLDAsMSwxMi43OC0xLjM5QTI1LjkyLDI1LjkyLDAsMCwxLDE5NiwyMS40NGE2LjU1LDYuNTUsMCwwLDEsMi4wNSw5LDYuNjYsNi42NiwwLDAsMS0xLjY0LDEuNzhsLS40MS4yOWEyMi4wNywyMi4wNywwLDAsMS01Ljc4LDMsMzAuNDIsMzAuNDIsMCwwLDEtNS42NywxLjYyLDM3LjgyLDM3LjgyLDAsMCwxLTUuNjkuNzFjLTEsMC0xLjkuMTgtMi44NS4yNmwtMi44NS4yNHEtNS43Mi41MS0xMS40OCwxLjFjLTMuODQuNC03LjcxLjgyLTExLjU4LDEuNGExMTIuMzQsMTEyLjM0LDAsMCwwLTIyLjk0LDUuNjFjLTMuNzIsMS4zNS03LjM0LDMtMTAuOTQsNC42NHMtNy4xNCwzLjUxLTEwLjYsNS41MUExNTEuNiwxNTEuNiwwLDAsMCw2OC41Niw4N0M2Ny4yMyw4OC40OCw2Niw5MCw2NC42NCw5MS41NnMtMi41MSwzLjE1LTMuNzUsNC43M2wtMy41NCw0LjljLTEuMTMsMS42Ni0yLjIzLDMuMzUtMy4zMyw1YTEyNywxMjcsMCwwLDAtMTAuOTMsMjEuNDksMS41OCwxLjU4LDAsMSwxLTMtMS4xNVM0MC4xOSwxMjYuNDcsNDAuMjEsMTI2LjQzWiIvPjxyZWN0IGNsYXNzPSJjbHMtMiIgd2lkdGg9IjM5MiIgaGVpZ2h0PSIzOTIiLz48L2c+PC9nPjwvc3ZnPg==", n.style.position = "absolute", n.style.left = "50%", n.style.top = "50%", n.style.width = "18vw", n.style.height = "18vw", n.style.marginLeft = "-9vw", n.style.marginTop = "-9vw", n.style.animation = "spin1 0.75s infinite linear", n.style.webkitAnimation = "spin1 0.75s infinite linear", n.style.transformOrigin = "50% 50%", n.style.webkitTransformOrigin = "50% 50%", this._loadingDiv.appendChild(i), this._loadingDiv.appendChild(n), this._resizeLoadingUI(), window.addEventListener("resize", this._resizeLoadingUI), this._loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor, document.body.appendChild(this._loadingDiv), this._loadingDiv.style.opacity = "1"
|
|
}
|
|
}, e.prototype.hideLoadingUI = function() {
|
|
var e = this;
|
|
if (this._loadingDiv) {
|
|
this._loadingDiv.style.opacity = "0", this._loadingDiv.addEventListener("transitionend", function() {
|
|
e._loadingDiv && (e._loadingDiv.parentElement && e._loadingDiv.parentElement.removeChild(e._loadingDiv), window.removeEventListener("resize", e._resizeLoadingUI), e._loadingDiv = null)
|
|
})
|
|
}
|
|
}, Object.defineProperty(e.prototype, "loadingUIText", {
|
|
get: function() {
|
|
return this._loadingText
|
|
},
|
|
set: function(e) {
|
|
this._loadingText = e, this._loadingTextDiv && (this._loadingTextDiv.innerHTML = this._loadingText)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "loadingUIBackgroundColor", {
|
|
get: function() {
|
|
return this._loadingDivBackgroundColor
|
|
},
|
|
set: function(e) {
|
|
this._loadingDivBackgroundColor = e, this._loadingDiv && (this._loadingDiv.style.backgroundColor = this._loadingDivBackgroundColor)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.DefaultLogoUrl = "", e.DefaultSpinnerUrl = "", e
|
|
}();
|
|
ge.b.DefaultLoadingScreenFactory = function(e) {
|
|
return new Lo(e)
|
|
};
|
|
var wo = i(57),
|
|
Fo = i(66),
|
|
No = function() {
|
|
function e() {}
|
|
return e.ConvertPanoramaToCubemap = function(e, t, i, n) {
|
|
if (!e) throw "ConvertPanoramaToCubemap: input cannot be null";
|
|
if (e.length != t * i * 3) throw "ConvertPanoramaToCubemap: input size is wrong";
|
|
return {
|
|
front: this.CreateCubemapTexture(n, this.FACE_FRONT, e, t, i),
|
|
back: this.CreateCubemapTexture(n, this.FACE_BACK, e, t, i),
|
|
left: this.CreateCubemapTexture(n, this.FACE_LEFT, e, t, i),
|
|
right: this.CreateCubemapTexture(n, this.FACE_RIGHT, e, t, i),
|
|
up: this.CreateCubemapTexture(n, this.FACE_UP, e, t, i),
|
|
down: this.CreateCubemapTexture(n, this.FACE_DOWN, e, t, i),
|
|
size: n,
|
|
type: _.a.TEXTURETYPE_FLOAT,
|
|
format: _.a.TEXTUREFORMAT_RGB,
|
|
gammaSpace: !1
|
|
}
|
|
}, e.CreateCubemapTexture = function(e, t, i, n, r) {
|
|
for (var o = new ArrayBuffer(e * e * 4 * 3), s = new Float32Array(o), a = t[1].subtract(t[0]).scale(1 / e), c = t[3].subtract(t[2]).scale(1 / e), l = 1 / e, u = 0, h = 0; h < e; h++) {
|
|
for (var d = t[0], f = t[2], p = 0; p < e; p++) {
|
|
var _ = f.subtract(d).scale(u).add(d);
|
|
_.normalize();
|
|
var g = this.CalcProjectionSpherical(_, i, n, r);
|
|
s[h * e * 3 + 3 * p + 0] = g.r, s[h * e * 3 + 3 * p + 1] = g.g, s[h * e * 3 + 3 * p + 2] = g.b, d = d.add(a), f = f.add(c)
|
|
}
|
|
u += l
|
|
}
|
|
return s
|
|
}, e.CalcProjectionSpherical = function(e, t, i, n) {
|
|
for (var r = Math.atan2(e.z, e.x), o = Math.acos(e.y); r < -Math.PI;) r += 2 * Math.PI;
|
|
for (; r > Math.PI;) r -= 2 * Math.PI;
|
|
var s = r / Math.PI,
|
|
a = o / Math.PI;
|
|
s = .5 * s + .5;
|
|
var c = Math.round(s * i);
|
|
c < 0 ? c = 0 : c >= i && (c = i - 1);
|
|
var l = Math.round(a * n);
|
|
l < 0 ? l = 0 : l >= n && (l = n - 1);
|
|
var u = n - l - 1;
|
|
return {
|
|
r: t[u * i * 3 + 3 * c + 0],
|
|
g: t[u * i * 3 + 3 * c + 1],
|
|
b: t[u * i * 3 + 3 * c + 2]
|
|
}
|
|
}, e.FACE_FRONT = [new o.x(-1, -1, -1), new o.x(1, -1, -1), new o.x(-1, 1, -1), new o.x(1, 1, -1)], e.FACE_BACK = [new o.x(1, -1, 1), new o.x(-1, -1, 1), new o.x(1, 1, 1), new o.x(-1, 1, 1)], e.FACE_RIGHT = [new o.x(1, -1, -1), new o.x(1, -1, 1), new o.x(1, 1, -1), new o.x(1, 1, 1)], e.FACE_LEFT = [new o.x(-1, -1, 1), new o.x(-1, -1, -1), new o.x(-1, 1, 1), new o.x(-1, 1, -1)], e.FACE_DOWN = [new o.x(-1, 1, -1), new o.x(1, 1, -1), new o.x(-1, 1, 1), new o.x(1, 1, 1)], e.FACE_UP = [new o.x(-1, -1, 1), new o.x(1, -1, 1), new o.x(-1, -1, -1), new o.x(1, -1, -1)], e
|
|
}(),
|
|
Bo = function() {
|
|
function e() {}
|
|
return e.Ldexp = function(e, t) {
|
|
return t > 1023 ? e * Math.pow(2, 1023) * Math.pow(2, t - 1023) : t < -1074 ? e * Math.pow(2, -1074) * Math.pow(2, t + 1074) : e * Math.pow(2, t)
|
|
}, e.Rgbe2float = function(e, t, i, n, r, o) {
|
|
r > 0 ? (r = this.Ldexp(1, r - 136), e[o + 0] = t * r, e[o + 1] = i * r, e[o + 2] = n * r) : (e[o + 0] = 0, e[o + 1] = 0, e[o + 2] = 0)
|
|
}, e.readStringLine = function(e, t) {
|
|
for (var i = "", n = "", r = t; r < e.length - t && "\n" != (n = String.fromCharCode(e[r])); r++) i += n;
|
|
return i
|
|
}, e.RGBE_ReadHeader = function(e) {
|
|
var t, i, n = this.readStringLine(e, 0);
|
|
if ("#" != n[0] || "?" != n[1]) throw "Bad HDR Format.";
|
|
var r = !1,
|
|
o = !1,
|
|
s = 0;
|
|
do {
|
|
s += n.length + 1, "FORMAT=32-bit_rle_rgbe" == (n = this.readStringLine(e, s)) ? o = !0 : 0 == n.length && (r = !0)
|
|
} while (!r);
|
|
if (!o) throw "HDR Bad header format, unsupported FORMAT";
|
|
s += n.length + 1, n = this.readStringLine(e, s);
|
|
var a = /^\-Y (.*) \+X (.*)$/g.exec(n);
|
|
if (!a || a.length < 3) throw "HDR Bad header format, no size";
|
|
if (i = parseInt(a[2]), t = parseInt(a[1]), i < 8 || i > 32767) throw "HDR Bad header format, unsupported size";
|
|
return {
|
|
height: t,
|
|
width: i,
|
|
dataPosition: s += n.length + 1
|
|
}
|
|
}, e.GetCubeMapTextureData = function(e, t) {
|
|
var i = new Uint8Array(e),
|
|
n = this.RGBE_ReadHeader(i),
|
|
r = this.RGBE_ReadPixels_RLE(i, n);
|
|
return No.ConvertPanoramaToCubemap(r, n.width, n.height, t)
|
|
}, e.RGBE_ReadPixels = function(e, t) {
|
|
return this.RGBE_ReadPixels_RLE(e, t)
|
|
}, e.RGBE_ReadPixels_RLE = function(e, t) {
|
|
for (var i, n, r, o, s, a = t.height, c = t.width, l = t.dataPosition, u = 0, h = 0, d = 0, f = new ArrayBuffer(4 * c), p = new Uint8Array(f), _ = new ArrayBuffer(t.width * t.height * 4 * 3), g = new Float32Array(_); a > 0;) {
|
|
if (i = e[l++], n = e[l++], r = e[l++], o = e[l++], 2 != i || 2 != n || 128 & r) throw "HDR Bad header format, not RLE";
|
|
if ((r << 8 | o) != c) throw "HDR Bad header format, wrong scan line width";
|
|
for (u = 0, d = 0; d < 4; d++)
|
|
for (h = (d + 1) * c; u < h;)
|
|
if (i = e[l++], n = e[l++], i > 128) {
|
|
if (0 == (s = i - 128) || s > h - u) throw "HDR Bad Format, bad scanline data (run)";
|
|
for (; s-- > 0;) p[u++] = n
|
|
} else {
|
|
if (0 == (s = i) || s > h - u) throw "HDR Bad Format, bad scanline data (non-run)";
|
|
if (p[u++] = n, --s > 0)
|
|
for (var m = 0; m < s; m++) p[u++] = e[l++]
|
|
} for (d = 0; d < c; d++) i = p[d], n = p[d + c], r = p[d + 2 * c], o = p[d + 3 * c], this.Rgbe2float(g, i, n, r, o, (t.height - a) * c * 3 + 3 * d);
|
|
a--
|
|
}
|
|
return g
|
|
}, e
|
|
}(),
|
|
Uo = function(e) {
|
|
function t(t, i, n, r, s, a, c, l, u) {
|
|
void 0 === r && (r = !1), void 0 === s && (s = !0), void 0 === a && (a = !1), void 0 === c && (c = !1), void 0 === l && (l = null), void 0 === u && (u = null);
|
|
var h = e.call(this, i) || this;
|
|
return h._generateHarmonics = !0, h._onLoad = null, h._onError = null, h.coordinatesMode = ke.a.CUBIC_MODE, h._isBlocking = !0, h._rotationY = 0, h.boundingBoxPosition = o.x.Zero(), t ? (h.name = t, h.url = t, h.hasAlpha = !1, h.isCube = !0, h._textureMatrix = o.j.Identity(), h._onLoad = l, h._onError = u, h.gammaSpace = a, h._noMipmap = r, h._size = n, h._texture = h._getFromCache(t, h._noMipmap), h._texture ? l && (h._texture.isReady ? ye.h.SetImmediate(function() {
|
|
return l()
|
|
}) : h._texture.onLoadedObservable.add(l)) : i.useDelayedTextureLoading ? h.delayLoadState = ge.b.DELAYLOADSTATE_NOTLOADED : h.loadTexture(), h) : h
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "isBlocking", {
|
|
get: function() {
|
|
return this._isBlocking
|
|
},
|
|
set: function(e) {
|
|
this._isBlocking = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "rotationY", {
|
|
get: function() {
|
|
return this._rotationY
|
|
},
|
|
set: function(e) {
|
|
this._rotationY = e, this.setReflectionTextureMatrix(o.j.RotationY(this._rotationY))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "boundingBoxSize", {
|
|
get: function() {
|
|
return this._boundingBoxSize
|
|
},
|
|
set: function(e) {
|
|
if (!this._boundingBoxSize || !this._boundingBoxSize.equals(e)) {
|
|
this._boundingBoxSize = e;
|
|
var t = this.getScene();
|
|
t && t.markAllMaterialsAsDirty(_.a.MATERIAL_TextureDirtyFlag)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "HDRCubeTexture"
|
|
}, t.prototype.loadTexture = function() {
|
|
var e = this,
|
|
i = this.getScene();
|
|
i && (this._texture = i.getEngine().createRawCubeTextureFromUrl(this.url, i, this._size, ge.b.TEXTUREFORMAT_RGB, i.getEngine().getCaps().textureFloat ? ge.b.TEXTURETYPE_FLOAT : ge.b.TEXTURETYPE_UNSIGNED_INT, this._noMipmap, function(i) {
|
|
e.lodGenerationOffset = 0, e.lodGenerationScale = .8;
|
|
var n = e.getScene();
|
|
if (!n) return null;
|
|
var r = Bo.GetCubeMapTextureData(i, e._size);
|
|
if (e._generateHarmonics) {
|
|
var s = jr.a.ConvertCubeMapToSphericalPolynomial(r);
|
|
e.sphericalPolynomial = s
|
|
}
|
|
for (var a = [], c = null, l = 0; l < 6; l++) {
|
|
if (!n.getEngine().getCaps().textureFloat) {
|
|
var u = new ArrayBuffer(e._size * e._size * 3);
|
|
c = new Uint8Array(u)
|
|
}
|
|
var h = r[t._facesMapping[l]];
|
|
if (e.gammaSpace || c)
|
|
for (var d = 0; d < e._size * e._size; d++)
|
|
if (e.gammaSpace && (h[3 * d + 0] = Math.pow(h[3 * d + 0], o.u), h[3 * d + 1] = Math.pow(h[3 * d + 1], o.u), h[3 * d + 2] = Math.pow(h[3 * d + 2], o.u)), c) {
|
|
var f = Math.max(255 * h[3 * d + 0], 0),
|
|
p = Math.max(255 * h[3 * d + 1], 0),
|
|
_ = Math.max(255 * h[3 * d + 2], 0),
|
|
g = Math.max(Math.max(f, p), _);
|
|
if (g > 255) {
|
|
var m = 255 / g;
|
|
f *= m, p *= m, _ *= m
|
|
}
|
|
c[3 * d + 0] = f, c[3 * d + 1] = p, c[3 * d + 2] = _
|
|
} c ? a.push(c) : a.push(h)
|
|
}
|
|
return a
|
|
}, null, this._onLoad, this._onError))
|
|
}, t.prototype.clone = function() {
|
|
var e = this.getScene();
|
|
if (!e) return this;
|
|
var i = new t(this.url, e, this._size, this._noMipmap, this._generateHarmonics, this.gammaSpace);
|
|
return i.level = this.level, i.wrapU = this.wrapU, i.wrapV = this.wrapV, i.coordinatesIndex = this.coordinatesIndex, i.coordinatesMode = this.coordinatesMode, i
|
|
}, t.prototype.delayLoad = function() {
|
|
this.delayLoadState === ge.b.DELAYLOADSTATE_NOTLOADED && (this.delayLoadState = ge.b.DELAYLOADSTATE_LOADED, this._texture = this._getFromCache(this.url, this._noMipmap), this._texture || this.loadTexture())
|
|
}, t.prototype.getReflectionTextureMatrix = function() {
|
|
return this._textureMatrix
|
|
}, t.prototype.setReflectionTextureMatrix = function(e) {
|
|
var t = this;
|
|
this._textureMatrix = e, e.updateFlag !== this._textureMatrix.updateFlag && e.isIdentity() !== this._textureMatrix.isIdentity() && this.getScene().markAllMaterialsAsDirty(_.a.MATERIAL_TextureDirtyFlag, function(e) {
|
|
return -1 !== e.getActiveTextures().indexOf(t)
|
|
})
|
|
}, t.Parse = function(e, i, n) {
|
|
var r = null;
|
|
return e.name && !e.isRenderTarget && ((r = new t(n + e.name, i, e.size, e.noMipmap, e.generateHarmonics, e.useInGammaSpace)).name = e.name, r.hasAlpha = e.hasAlpha, r.level = e.level, r.coordinatesMode = e.coordinatesMode, r.isBlocking = e.isBlocking), r && (e.boundingBoxPosition && (r.boundingBoxPosition = o.x.FromArray(e.boundingBoxPosition)), e.boundingBoxSize && (r.boundingBoxSize = o.x.FromArray(e.boundingBoxSize)), e.rotationY && (r.rotationY = e.rotationY)), r
|
|
}, t.prototype.serialize = function() {
|
|
if (!this.name) return null;
|
|
var e = {};
|
|
return e.name = this.name, e.hasAlpha = this.hasAlpha, e.isCube = !0, e.level = this.level, e.size = this._size, e.coordinatesMode = this.coordinatesMode, e.useInGammaSpace = this.gammaSpace, e.generateHarmonics = this._generateHarmonics, e.customType = "BABYLON.HDRCubeTexture", e.noMipmap = this._noMipmap, e.isBlocking = this._isBlocking, e.rotationY = this._rotationY, e
|
|
}, t._facesMapping = ["right", "left", "up", "down", "front", "back"], t
|
|
}(Kn.a);
|
|
s.a.RegisteredTypes["BABYLON.HDRCubeTexture"] = Uo;
|
|
var Vo = function() {
|
|
function e(e, t, i) {
|
|
void 0 === t && (t = 0), void 0 === i && (i = null), this.name = e, this.animations = new Array, this._positions = null, this._normals = null, this._tangents = null, this.onInfluenceChanged = new r.c, this._onDataLayoutChanged = new r.c, this._animationPropertiesOverride = null, this._scene = i || P.a.LastCreatedScene, this.influence = t
|
|
}
|
|
return Object.defineProperty(e.prototype, "influence", {
|
|
get: function() {
|
|
return this._influence
|
|
},
|
|
set: function(e) {
|
|
if (this._influence !== e) {
|
|
var t = this._influence;
|
|
this._influence = e, this.onInfluenceChanged.hasObservers && this.onInfluenceChanged.notifyObservers(0 === t || 0 === e)
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "animationPropertiesOverride", {
|
|
get: function() {
|
|
return !this._animationPropertiesOverride && this._scene ? this._scene.animationPropertiesOverride : this._animationPropertiesOverride
|
|
},
|
|
set: function(e) {
|
|
this._animationPropertiesOverride = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "hasPositions", {
|
|
get: function() {
|
|
return !!this._positions
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "hasNormals", {
|
|
get: function() {
|
|
return !!this._normals
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "hasTangents", {
|
|
get: function() {
|
|
return !!this._tangents
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.setPositions = function(e) {
|
|
var t = this.hasPositions;
|
|
this._positions = e, t !== this.hasPositions && this._onDataLayoutChanged.notifyObservers(void 0)
|
|
}, e.prototype.getPositions = function() {
|
|
return this._positions
|
|
}, e.prototype.setNormals = function(e) {
|
|
var t = this.hasNormals;
|
|
this._normals = e, t !== this.hasNormals && this._onDataLayoutChanged.notifyObservers(void 0)
|
|
}, e.prototype.getNormals = function() {
|
|
return this._normals
|
|
}, e.prototype.setTangents = function(e) {
|
|
var t = this.hasTangents;
|
|
this._tangents = e, t !== this.hasTangents && this._onDataLayoutChanged.notifyObservers(void 0)
|
|
}, e.prototype.getTangents = function() {
|
|
return this._tangents
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.name = this.name, e.influence = this.influence, e.positions = Array.prototype.slice.call(this.getPositions()), null != this.id && (e.id = this.id), this.hasNormals && (e.normals = Array.prototype.slice.call(this.getNormals())), this.hasTangents && (e.tangents = Array.prototype.slice.call(this.getTangents())), L.a.AppendSerializedAnimations(this, e), e
|
|
}, e.prototype.getClassName = function() {
|
|
return "MorphTarget"
|
|
}, e.Parse = function(t) {
|
|
var i = new e(t.name, t.influence);
|
|
if (i.setPositions(t.positions), null != t.id && (i.id = t.id), t.normals && i.setNormals(t.normals), t.tangents && i.setTangents(t.tangents), t.animations)
|
|
for (var n = 0; n < t.animations.length; n++) {
|
|
var r = t.animations[n],
|
|
o = s.a.GetClass("BABYLON.Animation");
|
|
o && i.animations.push(o.Parse(r))
|
|
}
|
|
return i
|
|
}, e.FromMesh = function(t, i, n) {
|
|
i || (i = t.name);
|
|
var r = new e(i, n, t.getScene());
|
|
return r.setPositions(t.getVerticesData(Oi.b.PositionKind)), t.isVerticesDataPresent(Oi.b.NormalKind) && r.setNormals(t.getVerticesData(Oi.b.NormalKind)), t.isVerticesDataPresent(Oi.b.TangentKind) && r.setTangents(t.getVerticesData(Oi.b.TangentKind)), r
|
|
}, l.c([Object(L.c)()], e.prototype, "id", void 0), e
|
|
}(),
|
|
Go = function() {
|
|
function e(e) {
|
|
void 0 === e && (e = null), this._targets = new Array, this._targetInfluenceChangedObservers = new Array, this._targetDataLayoutChangedObservers = new Array, this._activeTargets = new kt.a(16), this._supportsNormals = !1, this._supportsTangents = !1, this._vertexCount = 0, this._uniqueId = 0, this._tempInfluences = new Array, e || (e = P.a.LastCreatedScene), this._scene = e, this._scene && (this._scene.morphTargetManagers.push(this), this._uniqueId = this._scene.getUniqueId())
|
|
}
|
|
return Object.defineProperty(e.prototype, "uniqueId", {
|
|
get: function() {
|
|
return this._uniqueId
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "vertexCount", {
|
|
get: function() {
|
|
return this._vertexCount
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "supportsNormals", {
|
|
get: function() {
|
|
return this._supportsNormals
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "supportsTangents", {
|
|
get: function() {
|
|
return this._supportsTangents
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "numTargets", {
|
|
get: function() {
|
|
return this._targets.length
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "numInfluencers", {
|
|
get: function() {
|
|
return this._activeTargets.length
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "influences", {
|
|
get: function() {
|
|
return this._influences
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getActiveTarget = function(e) {
|
|
return this._activeTargets.data[e]
|
|
}, e.prototype.getTarget = function(e) {
|
|
return this._targets[e]
|
|
}, e.prototype.addTarget = function(e) {
|
|
var t = this;
|
|
this._targets.push(e), this._targetInfluenceChangedObservers.push(e.onInfluenceChanged.add(function(e) {
|
|
t._syncActiveTargets(e)
|
|
})), this._targetDataLayoutChangedObservers.push(e._onDataLayoutChanged.add(function() {
|
|
t._syncActiveTargets(!0)
|
|
})), this._syncActiveTargets(!0)
|
|
}, e.prototype.removeTarget = function(e) {
|
|
var t = this._targets.indexOf(e);
|
|
t >= 0 && (this._targets.splice(t, 1), e.onInfluenceChanged.remove(this._targetInfluenceChangedObservers.splice(t, 1)[0]), e._onDataLayoutChanged.remove(this._targetDataLayoutChangedObservers.splice(t, 1)[0]), this._syncActiveTargets(!0))
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
e.id = this.uniqueId, e.targets = [];
|
|
for (var t = 0, i = this._targets; t < i.length; t++) {
|
|
var n = i[t];
|
|
e.targets.push(n.serialize())
|
|
}
|
|
return e
|
|
}, e.prototype._syncActiveTargets = function(e) {
|
|
var t = 0;
|
|
this._activeTargets.reset(), this._supportsNormals = !0, this._supportsTangents = !0, this._vertexCount = 0;
|
|
for (var i = 0, n = this._targets; i < n.length; i++) {
|
|
var r = n[i];
|
|
if (0 !== r.influence) {
|
|
this._activeTargets.push(r), this._tempInfluences[t++] = r.influence, this._supportsNormals = this._supportsNormals && r.hasNormals, this._supportsTangents = this._supportsTangents && r.hasTangents;
|
|
var o = r.getPositions();
|
|
if (o) {
|
|
var s = o.length / 3;
|
|
if (0 === this._vertexCount) this._vertexCount = s;
|
|
else if (this._vertexCount !== s) return void p.a.Error("Incompatible target. Targets must all have the same vertices count.")
|
|
}
|
|
}
|
|
}
|
|
this._influences && this._influences.length === t || (this._influences = new Float32Array(t));
|
|
for (var a = 0; a < t; a++) this._influences[a] = this._tempInfluences[a];
|
|
e && this.synchronize()
|
|
}, e.prototype.synchronize = function() {
|
|
if (this._scene)
|
|
for (var e = 0, t = this._scene.meshes; e < t.length; e++) {
|
|
var i = t[e];
|
|
i.morphTargetManager === this && i._syncGeometryWithMorphTargetManager()
|
|
}
|
|
}, e.Parse = function(t, i) {
|
|
var n = new e(i);
|
|
n._uniqueId = t.id;
|
|
for (var r = 0, o = t.targets; r < o.length; r++) {
|
|
var s = o[r];
|
|
n.addTarget(Vo.Parse(s))
|
|
}
|
|
return n
|
|
}, e
|
|
}(),
|
|
ko = i(27),
|
|
zo = i(37),
|
|
jo = function() {
|
|
function e(t, i) {
|
|
if (void 0 === i && (i = e.DefaultPluginFactory()), this._physicsPlugin = i, this._impostors = [], this._joints = [], !this._physicsPlugin.isSupported()) throw new Error("Physics Engine " + this._physicsPlugin.name + " cannot be found. Please make sure it is included.");
|
|
t = t || new o.x(0, -9.807, 0), this.setGravity(t), this.setTimeStep()
|
|
}
|
|
return e.DefaultPluginFactory = function() {
|
|
throw be.a.WarnImport("CannonJSPlugin")
|
|
}, e.prototype.setGravity = function(e) {
|
|
this.gravity = e, this._physicsPlugin.setGravity(this.gravity)
|
|
}, e.prototype.setTimeStep = function(e) {
|
|
void 0 === e && (e = 1 / 60), this._physicsPlugin.setTimeStep(e)
|
|
}, e.prototype.getTimeStep = function() {
|
|
return this._physicsPlugin.getTimeStep()
|
|
}, e.prototype.dispose = function() {
|
|
this._impostors.forEach(function(e) {
|
|
e.dispose()
|
|
}), this._physicsPlugin.dispose()
|
|
}, e.prototype.getPhysicsPluginName = function() {
|
|
return this._physicsPlugin.name
|
|
}, e.prototype.addImpostor = function(e) {
|
|
e.uniqueId = this._impostors.push(e), e.parent || this._physicsPlugin.generatePhysicsBody(e)
|
|
}, e.prototype.removeImpostor = function(e) {
|
|
var t = this._impostors.indexOf(e);
|
|
t > -1 && (this._impostors.splice(t, 1).length && this.getPhysicsPlugin().removePhysicsBody(e))
|
|
}, e.prototype.addJoint = function(e, t, i) {
|
|
var n = {
|
|
mainImpostor: e,
|
|
connectedImpostor: t,
|
|
joint: i
|
|
};
|
|
i.physicsPlugin = this._physicsPlugin, this._joints.push(n), this._physicsPlugin.generateJoint(n)
|
|
}, e.prototype.removeJoint = function(e, t, i) {
|
|
var n = this._joints.filter(function(n) {
|
|
return n.connectedImpostor === t && n.joint === i && n.mainImpostor === e
|
|
});
|
|
n.length && this._physicsPlugin.removeJoint(n[0])
|
|
}, e.prototype._step = function(e) {
|
|
var t = this;
|
|
this._impostors.forEach(function(e) {
|
|
e.isBodyInitRequired() && t._physicsPlugin.generatePhysicsBody(e)
|
|
}), e > .1 ? e = .1 : e <= 0 && (e = 1 / 60), this._physicsPlugin.executeStep(e, this._impostors)
|
|
}, e.prototype.getPhysicsPlugin = function() {
|
|
return this._physicsPlugin
|
|
}, e.prototype.getImpostors = function() {
|
|
return this._impostors
|
|
}, e.prototype.getImpostorForPhysicsObject = function(e) {
|
|
for (var t = 0; t < this._impostors.length; ++t)
|
|
if (this._impostors[t].object === e) return this._impostors[t];
|
|
return null
|
|
}, e.prototype.getImpostorWithPhysicsBody = function(e) {
|
|
for (var t = 0; t < this._impostors.length; ++t)
|
|
if (this._impostors[t].physicsBody === e) return this._impostors[t];
|
|
return null
|
|
}, e.prototype.raycast = function(e, t) {
|
|
return this._physicsPlugin.raycast(e, t)
|
|
}, e.Epsilon = .001, e
|
|
}(),
|
|
Ho = function() {
|
|
function e() {
|
|
this._hasHit = !1, this._hitDistance = 0, this._hitNormalWorld = o.x.Zero(), this._hitPointWorld = o.x.Zero(), this._rayFromWorld = o.x.Zero(), this._rayToWorld = o.x.Zero()
|
|
}
|
|
return Object.defineProperty(e.prototype, "hasHit", {
|
|
get: function() {
|
|
return this._hasHit
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "hitDistance", {
|
|
get: function() {
|
|
return this._hitDistance
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "hitNormalWorld", {
|
|
get: function() {
|
|
return this._hitNormalWorld
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "hitPointWorld", {
|
|
get: function() {
|
|
return this._hitPointWorld
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "rayFromWorld", {
|
|
get: function() {
|
|
return this._rayFromWorld
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "rayToWorld", {
|
|
get: function() {
|
|
return this._rayToWorld
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.setHitData = function(e, t) {
|
|
this._hasHit = !0, this._hitNormalWorld = new o.x(e.x, e.y, e.z), this._hitPointWorld = new o.x(t.x, t.y, t.z)
|
|
}, e.prototype.setHitDistance = function(e) {
|
|
this._hitDistance = e
|
|
}, e.prototype.calculateHitDistance = function() {
|
|
this._hitDistance = o.x.Distance(this._rayFromWorld, this._hitPointWorld)
|
|
}, e.prototype.reset = function(e, t) {
|
|
void 0 === e && (e = o.x.Zero()), void 0 === t && (t = o.x.Zero()), this._rayFromWorld = e, this._rayToWorld = t, this._hasHit = !1, this._hitDistance = 0, this._hitNormalWorld = o.x.Zero(), this._hitPointWorld = o.x.Zero()
|
|
}, e
|
|
}(),
|
|
Wo = function() {
|
|
function e(e, t, i) {
|
|
void 0 === e && (e = !0), void 0 === t && (t = 10), void 0 === i && (i = CANNON), this._useDeltaForWorldStep = e, this.name = "CannonJSPlugin", this._physicsMaterials = new Array, this._fixedTimeStep = 1 / 60, this._removeAfterStep = new Array, this._minus90X = new o.q(-.7071067811865475, 0, 0, .7071067811865475), this._plus90X = new o.q(.7071067811865475, 0, 0, .7071067811865475), this._tmpPosition = o.x.Zero(), this._tmpDeltaPosition = o.x.Zero(), this._tmpUnityRotation = new o.q, this.BJSCANNON = i, this.isSupported() ? (this._extendNamespace(), this.world = new this.BJSCANNON.World, this.world.broadphase = new this.BJSCANNON.NaiveBroadphase, this.world.solver.iterations = t, this._cannonRaycastResult = new this.BJSCANNON.RaycastResult, this._raycastResult = new Ho) : p.a.Error("CannonJS is not available. Please make sure you included the js file.")
|
|
}
|
|
return e.prototype.setGravity = function(e) {
|
|
this.world.gravity.copy(e)
|
|
}, e.prototype.setTimeStep = function(e) {
|
|
this._fixedTimeStep = e
|
|
}, e.prototype.getTimeStep = function() {
|
|
return this._fixedTimeStep
|
|
}, e.prototype.executeStep = function(e) {
|
|
var t = this;
|
|
ig.useTheCorrectBabylon = true;
|
|
this.world.step(this._fixedTimeStep, this._useDeltaForWorldStep ? e * ig.gameScene.physicsDeltaFactor : 0, 3), this._removeAfterStep.length > 0 && (this._removeAfterStep.forEach(function(e) {
|
|
t.world.remove(e.physicsBody)
|
|
}), this._removeAfterStep = [])
|
|
}, e.prototype.applyImpulse = function(e, t, i) {
|
|
var n = new this.BJSCANNON.Vec3(i.x, i.y, i.z),
|
|
r = new this.BJSCANNON.Vec3(t.x, t.y, t.z);
|
|
e.physicsBody.applyImpulse(r, n)
|
|
}, e.prototype.applyForce = function(e, t, i) {
|
|
var n = new this.BJSCANNON.Vec3(i.x, i.y, i.z),
|
|
r = new this.BJSCANNON.Vec3(t.x, t.y, t.z);
|
|
e.physicsBody.applyForce(r, n)
|
|
}, e.prototype.generatePhysicsBody = function(e) {
|
|
if (e.parent) e.physicsBody && (this.removePhysicsBody(e), e.forceUpdate());
|
|
else {
|
|
if (e.isBodyInitRequired()) {
|
|
var t = this._createShape(e),
|
|
i = e.physicsBody;
|
|
i && this.removePhysicsBody(e);
|
|
var n = this._addMaterial("mat-" + e.uniqueId, e.getParam("friction"), e.getParam("restitution")),
|
|
r = {
|
|
mass: e.getParam("mass"),
|
|
material: n
|
|
},
|
|
o = e.getParam("nativeOptions");
|
|
for (var s in o) o.hasOwnProperty(s) && (r[s] = o[s]);
|
|
e.physicsBody = new this.BJSCANNON.Body(r), e.physicsBody.addEventListener("collide", e.onCollide), this.world.addEventListener("preStep", e.beforeStep), this.world.addEventListener("postStep", e.afterStep), e.physicsBody.addShape(t), this.world.add(e.physicsBody), i && ["force", "torque", "velocity", "angularVelocity"].forEach(function(t) {
|
|
e.physicsBody[t].copy(i[t])
|
|
}), this._processChildMeshes(e)
|
|
}
|
|
this._updatePhysicsBodyTransformation(e)
|
|
}
|
|
}, e.prototype._processChildMeshes = function(e) {
|
|
var t = this,
|
|
i = e.object.getChildMeshes ? e.object.getChildMeshes(!0) : [],
|
|
n = e.object.rotationQuaternion;
|
|
if (i.length) {
|
|
var r = function(i, s) {
|
|
if (n && s.rotationQuaternion) {
|
|
var a = s.getPhysicsImpostor();
|
|
if (a)
|
|
if (a.parent !== e) {
|
|
var c = s.getAbsolutePosition().subtract(e.object.getAbsolutePosition()),
|
|
l = s.rotationQuaternion.multiply(o.q.Inverse(n));
|
|
a.physicsBody && (t.removePhysicsBody(a), a.physicsBody = null), a.parent = e, a.resetUpdateFlags(), e.physicsBody.addShape(t._createShape(a), new t.BJSCANNON.Vec3(c.x, c.y, c.z), new t.BJSCANNON.Quaternion(l.x, l.y, l.z, l.w)), e.physicsBody.mass += a.getParam("mass")
|
|
} n.multiplyInPlace(s.rotationQuaternion), s.getChildMeshes(!0).filter(function(e) {
|
|
return !!e.physicsImpostor
|
|
}).forEach(r.bind(t, s.getAbsolutePosition()))
|
|
}
|
|
};
|
|
i.filter(function(e) {
|
|
return !!e.physicsImpostor
|
|
}).forEach(r.bind(this, e.object.getAbsolutePosition()))
|
|
}
|
|
}, e.prototype.removePhysicsBody = function(e) {
|
|
e.physicsBody.removeEventListener("collide", e.onCollide), this.world.removeEventListener("preStep", e.beforeStep), this.world.removeEventListener("postStep", e.afterStep), this._removeAfterStep.push(e)
|
|
}, e.prototype.generateJoint = function(e) {
|
|
var t = e.mainImpostor.physicsBody,
|
|
i = e.connectedImpostor.physicsBody;
|
|
if (t && i) {
|
|
var n, r = e.joint.jointData,
|
|
o = {
|
|
pivotA: r.mainPivot ? (new this.BJSCANNON.Vec3).copy(r.mainPivot) : null,
|
|
pivotB: r.connectedPivot ? (new this.BJSCANNON.Vec3).copy(r.connectedPivot) : null,
|
|
axisA: r.mainAxis ? (new this.BJSCANNON.Vec3).copy(r.mainAxis) : null,
|
|
axisB: r.connectedAxis ? (new this.BJSCANNON.Vec3).copy(r.connectedAxis) : null,
|
|
maxForce: r.nativeParams.maxForce,
|
|
collideConnected: !!r.collision
|
|
};
|
|
switch (e.joint.type) {
|
|
case zo.e.HingeJoint:
|
|
case zo.e.Hinge2Joint:
|
|
n = new this.BJSCANNON.HingeConstraint(t, i, o);
|
|
break;
|
|
case zo.e.DistanceJoint:
|
|
n = new this.BJSCANNON.DistanceConstraint(t, i, r.maxDistance || 2);
|
|
break;
|
|
case zo.e.SpringJoint:
|
|
var s = r;
|
|
n = new this.BJSCANNON.Spring(t, i, {
|
|
restLength: s.length,
|
|
stiffness: s.stiffness,
|
|
damping: s.damping,
|
|
localAnchorA: o.pivotA,
|
|
localAnchorB: o.pivotB
|
|
});
|
|
break;
|
|
case zo.e.LockJoint:
|
|
n = new this.BJSCANNON.LockConstraint(t, i, o);
|
|
break;
|
|
case zo.e.PointToPointJoint:
|
|
case zo.e.BallAndSocketJoint:
|
|
default:
|
|
n = new this.BJSCANNON.PointToPointConstraint(t, o.pivotA, i, o.pivotB, o.maxForce)
|
|
}
|
|
n.collideConnected = !!r.collision, e.joint.physicsJoint = n, e.joint.type !== zo.e.SpringJoint ? this.world.addConstraint(n) : (e.joint.jointData.forceApplicationCallback = e.joint.jointData.forceApplicationCallback || function() {
|
|
n.applyForce()
|
|
}, e.mainImpostor.registerAfterPhysicsStep(e.joint.jointData.forceApplicationCallback))
|
|
}
|
|
}, e.prototype.removeJoint = function(e) {
|
|
e.joint.type !== zo.e.SpringJoint ? this.world.removeConstraint(e.joint.physicsJoint) : e.mainImpostor.unregisterAfterPhysicsStep(e.joint.jointData.forceApplicationCallback)
|
|
}, e.prototype._addMaterial = function(e, t, i) {
|
|
var n, r;
|
|
for (n = 0; n < this._physicsMaterials.length; n++)
|
|
if ((r = this._physicsMaterials[n]).friction === t && r.restitution === i) return r;
|
|
var o = new this.BJSCANNON.Material(e);
|
|
return o.friction = t, o.restitution = i, this._physicsMaterials.push(o), o
|
|
}, e.prototype._checkWithEpsilon = function(e) {
|
|
return e < jo.Epsilon ? jo.Epsilon : e
|
|
}, e.prototype._createShape = function(e) {
|
|
var t, i = e.object,
|
|
n = e.getObjectExtendSize();
|
|
switch (e.type) {
|
|
case ko.a.SphereImpostor:
|
|
var r = n.x,
|
|
s = n.y,
|
|
a = n.z;
|
|
t = new this.BJSCANNON.Sphere(Math.max(this._checkWithEpsilon(r), this._checkWithEpsilon(s), this._checkWithEpsilon(a)) / 2);
|
|
break;
|
|
case ko.a.CylinderImpostor:
|
|
var c = e.getParam("nativeOptions");
|
|
c || (c = {});
|
|
var l = void 0 !== c.radiusTop ? c.radiusTop : this._checkWithEpsilon(n.x) / 2,
|
|
u = void 0 !== c.radiusBottom ? c.radiusBottom : this._checkWithEpsilon(n.x) / 2,
|
|
h = void 0 !== c.height ? c.height : this._checkWithEpsilon(n.y),
|
|
d = void 0 !== c.numSegments ? c.numSegments : 16;
|
|
t = new this.BJSCANNON.Cylinder(l, u, h, d);
|
|
var f = new this.BJSCANNON.Quaternion;
|
|
f.setFromAxisAngle(new this.BJSCANNON.Vec3(1, 0, 0), -Math.PI / 2);
|
|
var _ = new this.BJSCANNON.Vec3(0, 0, 0);
|
|
t.transformAllPoints(_, f);
|
|
break;
|
|
case ko.a.BoxImpostor:
|
|
var g = n.scale(.5);
|
|
t = new this.BJSCANNON.Box(new this.BJSCANNON.Vec3(this._checkWithEpsilon(g.x), this._checkWithEpsilon(g.y), this._checkWithEpsilon(g.z)));
|
|
break;
|
|
case ko.a.PlaneImpostor:
|
|
p.a.Warn("Attention, PlaneImposter might not behave as you expect. Consider using BoxImposter instead"), t = new this.BJSCANNON.Plane;
|
|
break;
|
|
case ko.a.MeshImpostor:
|
|
var m = i.getVerticesData ? i.getVerticesData(Oi.b.PositionKind) : [],
|
|
v = i.getIndices ? i.getIndices() : [];
|
|
if (!m) return;
|
|
var y = i.position.clone(),
|
|
b = i.rotation && i.rotation.clone(),
|
|
T = i.rotationQuaternion && i.rotationQuaternion.clone();
|
|
i.position.copyFromFloats(0, 0, 0), i.rotation && i.rotation.copyFromFloats(0, 0, 0), i.rotationQuaternion && i.rotationQuaternion.copyFrom(e.getParentsRotation()), i.rotationQuaternion && i.parent && i.rotationQuaternion.conjugateInPlace();
|
|
var E, A = i.computeWorldMatrix(!0),
|
|
x = new Array;
|
|
for (E = 0; E < m.length; E += 3) o.x.TransformCoordinates(o.x.FromArray(m, E), A).toArray(x, E);
|
|
p.a.Warn("MeshImpostor only collides against spheres."), t = new this.BJSCANNON.Trimesh(x, v), i.position.copyFrom(y), b && i.rotation && i.rotation.copyFrom(b), T && i.rotationQuaternion && i.rotationQuaternion.copyFrom(T);
|
|
break;
|
|
case ko.a.HeightmapImpostor:
|
|
var R = i.position.clone(),
|
|
P = i.rotation && i.rotation.clone(),
|
|
S = i.rotationQuaternion && i.rotationQuaternion.clone();
|
|
i.position.copyFromFloats(0, 0, 0), i.rotation && i.rotation.copyFromFloats(0, 0, 0), i.rotationQuaternion && i.rotationQuaternion.copyFrom(e.getParentsRotation()), i.rotationQuaternion && i.parent && i.rotationQuaternion.conjugateInPlace(), i.rotationQuaternion && i.rotationQuaternion.multiplyInPlace(this._minus90X), t = this._createHeightmap(i), i.position.copyFrom(R), P && i.rotation && i.rotation.copyFrom(P), S && i.rotationQuaternion && i.rotationQuaternion.copyFrom(S), i.computeWorldMatrix(!0);
|
|
break;
|
|
case ko.a.ParticleImpostor:
|
|
t = new this.BJSCANNON.Particle;
|
|
break;
|
|
case ko.a.NoImpostor:
|
|
t = new this.BJSCANNON.Box(new this.BJSCANNON.Vec3(0, 0, 0))
|
|
}
|
|
return t
|
|
}, e.prototype._createHeightmap = function(e, t) {
|
|
var i, n = e.getVerticesData(Oi.b.PositionKind),
|
|
r = e.computeWorldMatrix(!0),
|
|
s = new Array;
|
|
for (i = 0; i < n.length; i += 3) o.x.TransformCoordinates(o.x.FromArray(n, i), r).toArray(s, i);
|
|
n = s;
|
|
for (var a = new Array, c = t || ~~(Math.sqrt(n.length / 3) - 1), l = e.getBoundingInfo(), u = Math.min(l.boundingBox.extendSizeWorld.x, l.boundingBox.extendSizeWorld.y), h = l.boundingBox.extendSizeWorld.z, d = 2 * u / c, f = 0; f < n.length; f += 3) {
|
|
var p = Math.round(n[f + 0] / d + c / 2),
|
|
_ = Math.round(-1 * (n[f + 1] / d - c / 2)),
|
|
g = -n[f + 2] + h;
|
|
a[p] || (a[p] = []), a[p][_] || (a[p][_] = g), a[p][_] = Math.max(g, a[p][_])
|
|
}
|
|
for (p = 0; p <= c; ++p) {
|
|
if (!a[p]) {
|
|
for (var m = 1; !a[(p + m) % c];) m++;
|
|
a[p] = a[(p + m) % c].slice()
|
|
}
|
|
for (_ = 0; _ <= c; ++_)
|
|
if (!a[p][_]) {
|
|
var v;
|
|
for (m = 1; void 0 === v;) v = a[p][(_ + m++) % c];
|
|
a[p][_] = v
|
|
}
|
|
}
|
|
var y = new this.BJSCANNON.Heightfield(a, {
|
|
elementSize: d
|
|
});
|
|
return y.minY = h, y
|
|
}, e.prototype._updatePhysicsBodyTransformation = function(e) {
|
|
var t = e.object;
|
|
if (t.computeWorldMatrix && t.computeWorldMatrix(!0), t.getBoundingInfo()) {
|
|
var i = e.getObjectCenter();
|
|
this._tmpDeltaPosition.copyFrom(t.getAbsolutePivotPoint().subtract(i)), this._tmpDeltaPosition.divideInPlace(e.object.scaling), this._tmpPosition.copyFrom(i);
|
|
var n = t.rotationQuaternion;
|
|
if (n) {
|
|
if (e.type !== ko.a.PlaneImpostor && e.type !== ko.a.HeightmapImpostor || (n = n.multiply(this._minus90X), e.setDeltaRotation(this._plus90X)), e.type === ko.a.HeightmapImpostor) {
|
|
var r = t,
|
|
s = r.getBoundingInfo(),
|
|
a = r.rotationQuaternion;
|
|
r.rotationQuaternion = this._tmpUnityRotation, r.computeWorldMatrix(!0);
|
|
var c = i.clone(),
|
|
l = r.getPivotMatrix();
|
|
l = l ? l.clone() : o.j.Identity();
|
|
var u = o.j.Translation(s.boundingBox.extendSizeWorld.x, 0, -s.boundingBox.extendSizeWorld.z);
|
|
r.setPreTransformMatrix(u), r.computeWorldMatrix(!0);
|
|
var h = s.boundingBox.centerWorld.subtract(i).subtract(r.position).negate();
|
|
this._tmpPosition.copyFromFloats(h.x, h.y - s.boundingBox.extendSizeWorld.y, h.z), this._tmpDeltaPosition.copyFrom(s.boundingBox.centerWorld.subtract(c)), this._tmpDeltaPosition.y += s.boundingBox.extendSizeWorld.y, r.rotationQuaternion = a, r.setPreTransformMatrix(l), r.computeWorldMatrix(!0)
|
|
} else e.type === ko.a.MeshImpostor && this._tmpDeltaPosition.copyFromFloats(0, 0, 0);
|
|
e.setDeltaPosition(this._tmpDeltaPosition), e.physicsBody.position.copy(this._tmpPosition), e.physicsBody.quaternion.copy(n)
|
|
}
|
|
}
|
|
}, e.prototype.setTransformationFromPhysicsBody = function(e) {
|
|
e.object.position.copyFrom(e.physicsBody.position), e.object.rotationQuaternion && e.object.rotationQuaternion.copyFrom(e.physicsBody.quaternion)
|
|
}, e.prototype.setPhysicsBodyTransformation = function(e, t, i) {
|
|
e.physicsBody.position.copy(t), e.physicsBody.quaternion.copy(i)
|
|
}, e.prototype.isSupported = function() {
|
|
return void 0 !== this.BJSCANNON
|
|
}, e.prototype.setLinearVelocity = function(e, t) {
|
|
e.physicsBody.velocity.copy(t)
|
|
}, e.prototype.setAngularVelocity = function(e, t) {
|
|
e.physicsBody.angularVelocity.copy(t)
|
|
}, e.prototype.getLinearVelocity = function(e) {
|
|
var t = e.physicsBody.velocity;
|
|
return t ? new o.x(t.x, t.y, t.z) : null
|
|
}, e.prototype.getAngularVelocity = function(e) {
|
|
var t = e.physicsBody.angularVelocity;
|
|
return t ? new o.x(t.x, t.y, t.z) : null
|
|
}, e.prototype.setBodyMass = function(e, t) {
|
|
e.physicsBody.mass = t, e.physicsBody.updateMassProperties()
|
|
}, e.prototype.getBodyMass = function(e) {
|
|
return e.physicsBody.mass
|
|
}, e.prototype.getBodyFriction = function(e) {
|
|
return e.physicsBody.material.friction
|
|
}, e.prototype.setBodyFriction = function(e, t) {
|
|
e.physicsBody.material.friction = t
|
|
}, e.prototype.getBodyRestitution = function(e) {
|
|
return e.physicsBody.material.restitution
|
|
}, e.prototype.setBodyRestitution = function(e, t) {
|
|
e.physicsBody.material.restitution = t
|
|
}, e.prototype.sleepBody = function(e) {
|
|
e.physicsBody.sleep()
|
|
}, e.prototype.wakeUpBody = function(e) {
|
|
e.physicsBody.wakeUp()
|
|
}, e.prototype.updateDistanceJoint = function(e, t) {
|
|
e.physicsJoint.distance = t
|
|
}, e.prototype.setMotor = function(e, t, i, n) {
|
|
n || (e.physicsJoint.enableMotor(), e.physicsJoint.setMotorSpeed(t), i && this.setLimit(e, i))
|
|
}, e.prototype.setLimit = function(e, t, i) {
|
|
e.physicsJoint.motorEquation.maxForce = t, e.physicsJoint.motorEquation.minForce = void 0 === i ? -t : i
|
|
}, e.prototype.syncMeshWithImpostor = function(e, t) {
|
|
var i = t.physicsBody;
|
|
e.position.x = i.position.x, e.position.y = i.position.y, e.position.z = i.position.z, e.rotationQuaternion && (e.rotationQuaternion.x = i.quaternion.x, e.rotationQuaternion.y = i.quaternion.y, e.rotationQuaternion.z = i.quaternion.z, e.rotationQuaternion.w = i.quaternion.w)
|
|
}, e.prototype.getRadius = function(e) {
|
|
return e.physicsBody.shapes[0].boundingSphereRadius
|
|
}, e.prototype.getBoxSizeToRef = function(e, t) {
|
|
var i = e.physicsBody.shapes[0];
|
|
t.x = 2 * i.halfExtents.x, t.y = 2 * i.halfExtents.y, t.z = 2 * i.halfExtents.z
|
|
}, e.prototype.dispose = function() {}, e.prototype._extendNamespace = function() {
|
|
var e = new this.BJSCANNON.Vec3,
|
|
t = this.BJSCANNON;
|
|
this.BJSCANNON.World.prototype.step = function(i, n, r) {
|
|
if (r = r || 10, 0 === (n = n || 0)) this.internalStep(i), this.time += i;
|
|
else {
|
|
var o = Math.floor((this.time + n) / i) - Math.floor(this.time / i);
|
|
o = Math.min(o, r) || 1;
|
|
for (var s = performance.now(), a = 0; a !== o && (this.internalStep(i), !(performance.now() - s > 1e3 * i)); a++);
|
|
this.time += n;
|
|
for (var c = this.time % i / i, l = e, u = this.bodies, h = 0; h !== u.length; h++) {
|
|
var d = u[h];
|
|
d.type !== t.Body.STATIC && d.sleepState !== t.Body.SLEEPING ? (d.position.vsub(d.previousPosition, l), l.scale(c, l), d.position.vadd(l, d.interpolatedPosition)) : (d.interpolatedPosition.copy(d.position), d.interpolatedQuaternion.copy(d.quaternion))
|
|
}
|
|
}
|
|
}
|
|
}, e.prototype.raycast = function(e, t) {
|
|
return this._cannonRaycastResult.reset(), this.world.raycastClosest(e, t, {}, this._cannonRaycastResult), this._raycastResult.reset(e, t), this._cannonRaycastResult.hasHit && (this._raycastResult.setHitData({
|
|
x: this._cannonRaycastResult.hitNormalWorld.x,
|
|
y: this._cannonRaycastResult.hitNormalWorld.y,
|
|
z: this._cannonRaycastResult.hitNormalWorld.z
|
|
}, {
|
|
x: this._cannonRaycastResult.hitPointWorld.x,
|
|
y: this._cannonRaycastResult.hitPointWorld.y,
|
|
z: this._cannonRaycastResult.hitPointWorld.z
|
|
}), this._raycastResult.setHitDistance(this._cannonRaycastResult.distance)), this._raycastResult
|
|
}, e
|
|
}();
|
|
jo.DefaultPluginFactory = function() {
|
|
return new Wo
|
|
};
|
|
var Xo = function() {
|
|
function e(e, t) {
|
|
void 0 === t && (t = OIMO), this.name = "OimoJSPlugin", this._tmpImpostorsArray = [], this._tmpPositionVector = o.x.Zero(), this.BJSOIMO = t, this.world = new this.BJSOIMO.World({
|
|
iterations: e
|
|
}), this.world.clear(), this._raycastResult = new Ho
|
|
}
|
|
return e.prototype.setGravity = function(e) {
|
|
this.world.gravity.copy(e)
|
|
}, e.prototype.setTimeStep = function(e) {
|
|
this.world.timeStep = e
|
|
}, e.prototype.getTimeStep = function() {
|
|
return this.world.timeStep
|
|
}, e.prototype.executeStep = function(e, t) {
|
|
var i = this;
|
|
t.forEach(function(e) {
|
|
e.beforeStep()
|
|
}), this.world.step(), t.forEach(function(e) {
|
|
e.afterStep(), i._tmpImpostorsArray[e.uniqueId] = e
|
|
});
|
|
for (var n = this.world.contacts; null !== n;)
|
|
if (!n.touching || n.body1.sleeping || n.body2.sleeping) {
|
|
var r = this._tmpImpostorsArray[+n.body1.name],
|
|
o = this._tmpImpostorsArray[+n.body2.name];
|
|
r && o ? (r.onCollide({
|
|
body: o.physicsBody
|
|
}), o.onCollide({
|
|
body: r.physicsBody
|
|
}), n = n.next) : n = n.next
|
|
} else n = n.next
|
|
}, e.prototype.applyImpulse = function(e, t, i) {
|
|
var n = e.physicsBody.mass;
|
|
e.physicsBody.applyImpulse(i.scale(this.world.invScale), t.scale(this.world.invScale * n))
|
|
}, e.prototype.applyForce = function(e, t, i) {
|
|
p.a.Warn("Oimo doesn't support applying force. Using impule instead."), this.applyImpulse(e, t, i)
|
|
}, e.prototype.generatePhysicsBody = function(e) {
|
|
var t = this;
|
|
if (e.parent) e.physicsBody && (this.removePhysicsBody(e), e.forceUpdate());
|
|
else {
|
|
if (e.isBodyInitRequired()) {
|
|
var i = {
|
|
name: e.uniqueId,
|
|
config: [e.getParam("mass") || 1, e.getParam("friction"), e.getParam("restitution")],
|
|
size: [],
|
|
type: [],
|
|
pos: [],
|
|
posShape: [],
|
|
rot: [],
|
|
rotShape: [],
|
|
move: 0 !== e.getParam("mass"),
|
|
density: e.getParam("mass"),
|
|
friction: e.getParam("friction"),
|
|
restitution: e.getParam("restitution"),
|
|
world: this.world
|
|
},
|
|
n = [e];
|
|
(a = e.object).getChildMeshes && a.getChildMeshes().forEach(function(e) {
|
|
e.physicsImpostor && n.push(e.physicsImpostor)
|
|
});
|
|
var r = function(e) {
|
|
return Math.max(e, jo.Epsilon)
|
|
},
|
|
s = new o.q;
|
|
n.forEach(function(n) {
|
|
if (n.object.rotationQuaternion) {
|
|
var o = n.object.rotationQuaternion;
|
|
s = o.clone();
|
|
var a = o.toEulerAngles(),
|
|
c = n.getObjectExtendSize();
|
|
if (n === e) {
|
|
var l = e.getObjectCenter();
|
|
e.object.getAbsolutePivotPoint().subtractToRef(l, t._tmpPositionVector), t._tmpPositionVector.divideInPlace(e.object.scaling), i.pos.push(l.x), i.pos.push(l.y), i.pos.push(l.z), i.posShape.push(0, 0, 0), i.rotShape.push(0, 0, 0)
|
|
} else {
|
|
var u = n.object.getAbsolutePosition().subtract(e.object.getAbsolutePosition());
|
|
i.posShape.push(u.x), i.posShape.push(u.y), i.posShape.push(u.z), i.pos.push(0, 0, 0), i.rotShape.push(57.29577951308232 * a.x), i.rotShape.push(57.29577951308232 * a.y), i.rotShape.push(57.29577951308232 * a.z)
|
|
}
|
|
switch (n.type) {
|
|
case ko.a.ParticleImpostor:
|
|
p.a.Warn("No Particle support in OIMO.js. using SphereImpostor instead");
|
|
case ko.a.SphereImpostor:
|
|
var h = c.x,
|
|
d = c.y,
|
|
f = c.z,
|
|
_ = Math.max(r(h), r(d), r(f)) / 2;
|
|
i.type.push("sphere"), i.size.push(_), i.size.push(_), i.size.push(_);
|
|
break;
|
|
case ko.a.CylinderImpostor:
|
|
var g = r(c.x) / 2,
|
|
m = r(c.y);
|
|
i.type.push("cylinder"), i.size.push(g), i.size.push(m), i.size.push(m);
|
|
break;
|
|
case ko.a.PlaneImpostor:
|
|
case ko.a.BoxImpostor:
|
|
default:
|
|
g = r(c.x), m = r(c.y);
|
|
var v = r(c.z);
|
|
i.type.push("box"), i.size.push(g), i.size.push(m), i.size.push(v)
|
|
}
|
|
n.object.rotationQuaternion = o
|
|
}
|
|
}), e.physicsBody = this.world.add(i), e.physicsBody.resetQuaternion(s), e.physicsBody.updatePosition(0)
|
|
} else this._tmpPositionVector.copyFromFloats(0, 0, 0);
|
|
var a;
|
|
e.setDeltaPosition(this._tmpPositionVector)
|
|
}
|
|
}, e.prototype.removePhysicsBody = function(e) {
|
|
this.world.removeRigidBody(e.physicsBody)
|
|
}, e.prototype.generateJoint = function(e) {
|
|
var t = e.mainImpostor.physicsBody,
|
|
i = e.connectedImpostor.physicsBody;
|
|
if (t && i) {
|
|
var n, r = e.joint.jointData,
|
|
o = r.nativeParams || {},
|
|
s = {
|
|
body1: t,
|
|
body2: i,
|
|
axe1: o.axe1 || (r.mainAxis ? r.mainAxis.asArray() : null),
|
|
axe2: o.axe2 || (r.connectedAxis ? r.connectedAxis.asArray() : null),
|
|
pos1: o.pos1 || (r.mainPivot ? r.mainPivot.asArray() : null),
|
|
pos2: o.pos2 || (r.connectedPivot ? r.connectedPivot.asArray() : null),
|
|
min: o.min,
|
|
max: o.max,
|
|
collision: o.collision || r.collision,
|
|
spring: o.spring,
|
|
world: this.world
|
|
};
|
|
switch (e.joint.type) {
|
|
case zo.e.BallAndSocketJoint:
|
|
n = "jointBall";
|
|
break;
|
|
case zo.e.SpringJoint:
|
|
p.a.Warn("OIMO.js doesn't support Spring Constraint. Simulating using DistanceJoint instead");
|
|
var a = r;
|
|
s.min = a.length || s.min, s.max = Math.max(s.min, s.max);
|
|
case zo.e.DistanceJoint:
|
|
n = "jointDistance", s.max = r.maxDistance;
|
|
break;
|
|
case zo.e.PrismaticJoint:
|
|
n = "jointPrisme";
|
|
break;
|
|
case zo.e.SliderJoint:
|
|
n = "jointSlide";
|
|
break;
|
|
case zo.e.WheelJoint:
|
|
n = "jointWheel";
|
|
break;
|
|
case zo.e.HingeJoint:
|
|
default:
|
|
n = "jointHinge"
|
|
}
|
|
s.type = n, e.joint.physicsJoint = this.world.add(s)
|
|
}
|
|
}, e.prototype.removeJoint = function(e) {
|
|
try {
|
|
this.world.removeJoint(e.joint.physicsJoint)
|
|
} catch (e) {
|
|
p.a.Warn(e)
|
|
}
|
|
}, e.prototype.isSupported = function() {
|
|
return void 0 !== this.BJSOIMO
|
|
}, e.prototype.setTransformationFromPhysicsBody = function(e) {
|
|
e.physicsBody.sleeping || (e.object.position.copyFrom(e.physicsBody.getPosition()), e.object.rotationQuaternion && e.object.rotationQuaternion.copyFrom(e.physicsBody.getQuaternion()))
|
|
}, e.prototype.setPhysicsBodyTransformation = function(e, t, i) {
|
|
var n = e.physicsBody;
|
|
n.position.copy(t), n.orientation.copy(i), n.syncShapes(), n.awake()
|
|
}, e.prototype.setLinearVelocity = function(e, t) {
|
|
e.physicsBody.linearVelocity.copy(t)
|
|
}, e.prototype.setAngularVelocity = function(e, t) {
|
|
e.physicsBody.angularVelocity.copy(t)
|
|
}, e.prototype.getLinearVelocity = function(e) {
|
|
var t = e.physicsBody.linearVelocity;
|
|
return t ? new o.x(t.x, t.y, t.z) : null
|
|
}, e.prototype.getAngularVelocity = function(e) {
|
|
var t = e.physicsBody.angularVelocity;
|
|
return t ? new o.x(t.x, t.y, t.z) : null
|
|
}, e.prototype.setBodyMass = function(e, t) {
|
|
var i = 0 === t;
|
|
e.physicsBody.shapes.density = i ? 1 : t, e.physicsBody.setupMass(i ? 2 : 1)
|
|
}, e.prototype.getBodyMass = function(e) {
|
|
return e.physicsBody.shapes.density
|
|
}, e.prototype.getBodyFriction = function(e) {
|
|
return e.physicsBody.shapes.friction
|
|
}, e.prototype.setBodyFriction = function(e, t) {
|
|
e.physicsBody.shapes.friction = t
|
|
}, e.prototype.getBodyRestitution = function(e) {
|
|
return e.physicsBody.shapes.restitution
|
|
}, e.prototype.setBodyRestitution = function(e, t) {
|
|
e.physicsBody.shapes.restitution = t
|
|
}, e.prototype.sleepBody = function(e) {
|
|
e.physicsBody.sleep()
|
|
}, e.prototype.wakeUpBody = function(e) {
|
|
e.physicsBody.awake()
|
|
}, e.prototype.updateDistanceJoint = function(e, t, i) {
|
|
e.physicsJoint.limitMotor.upperLimit = t, void 0 !== i && (e.physicsJoint.limitMotor.lowerLimit = i)
|
|
}, e.prototype.setMotor = function(e, t, i, n) {
|
|
void 0 !== i ? p.a.Warn("OimoJS plugin currently has unexpected behavior when using setMotor with force parameter") : i = 1e6, t *= -1;
|
|
var r = n ? e.physicsJoint.rotationalLimitMotor2 : e.physicsJoint.rotationalLimitMotor1 || e.physicsJoint.rotationalLimitMotor || e.physicsJoint.limitMotor;
|
|
r && r.setMotor(t, i)
|
|
}, e.prototype.setLimit = function(e, t, i, n) {
|
|
var r = n ? e.physicsJoint.rotationalLimitMotor2 : e.physicsJoint.rotationalLimitMotor1 || e.physicsJoint.rotationalLimitMotor || e.physicsJoint.limitMotor;
|
|
r && r.setLimit(t, void 0 === i ? -t : i)
|
|
}, e.prototype.syncMeshWithImpostor = function(e, t) {
|
|
var i = t.physicsBody;
|
|
e.position.x = i.position.x, e.position.y = i.position.y, e.position.z = i.position.z, e.rotationQuaternion && (e.rotationQuaternion.x = i.orientation.x, e.rotationQuaternion.y = i.orientation.y, e.rotationQuaternion.z = i.orientation.z, e.rotationQuaternion.w = i.orientation.s)
|
|
}, e.prototype.getRadius = function(e) {
|
|
return e.physicsBody.shapes.radius
|
|
}, e.prototype.getBoxSizeToRef = function(e, t) {
|
|
var i = e.physicsBody.shapes;
|
|
t.x = 2 * i.halfWidth, t.y = 2 * i.halfHeight, t.z = 2 * i.halfDepth
|
|
}, e.prototype.dispose = function() {
|
|
this.world.clear()
|
|
}, e.prototype.raycast = function(e, t) {
|
|
return p.a.Warn("raycast is not currently supported by the Oimo physics plugin"), this._raycastResult.reset(e, t), this._raycastResult
|
|
}, e
|
|
}();
|
|
Mi.a.CreateRibbon = function(e) {
|
|
var t = e.pathArray,
|
|
i = e.closeArray || !1,
|
|
n = e.closePath || !1,
|
|
r = e.invertUV || !1,
|
|
o = Math.floor(t[0].length / 2),
|
|
s = e.offset || o;
|
|
s = s > o ? o : Math.floor(s);
|
|
var a, c, l, u, h = 0 === e.sideOrientation ? 0 : e.sideOrientation || Mi.a.DEFAULTSIDE,
|
|
d = e.uvs,
|
|
f = e.colors,
|
|
p = [],
|
|
_ = [],
|
|
g = [],
|
|
m = [],
|
|
v = [],
|
|
y = [],
|
|
b = [],
|
|
T = [],
|
|
E = [],
|
|
A = [];
|
|
if (t.length < 2) {
|
|
var x = [],
|
|
R = [];
|
|
for (l = 0; l < t[0].length - s; l++) x.push(t[0][l]), R.push(t[0][l + s]);
|
|
t = [x, R]
|
|
}
|
|
var P, S, C, M, O, I = 0,
|
|
D = n ? 1 : 0;
|
|
for (a = t[0].length, c = 0; c < t.length; c++) {
|
|
for (b[c] = 0, v[c] = [0], a = a < (S = (P = t[c]).length) ? a : S, u = 0; u < S;) p.push(P[u].x, P[u].y, P[u].z), u > 0 && (C = P[u].subtract(P[u - 1]).length() + b[c], v[c].push(C), b[c] = C), u++;
|
|
n && (u--, p.push(P[0].x, P[0].y, P[0].z), C = P[u].subtract(P[0]).length() + b[c], v[c].push(C), b[c] = C), E[c] = S + D, A[c] = I, I += S + D
|
|
}
|
|
var L, w, F = null,
|
|
N = null;
|
|
for (l = 0; l < a + D; l++) {
|
|
for (T[l] = 0, y[l] = [0], c = 0; c < t.length - 1; c++) M = t[c], O = t[c + 1], l === a ? (F = M[0], N = O[0]) : (F = M[l], N = O[l]), C = N.subtract(F).length() + T[l], y[l].push(C), T[l] = C;
|
|
i && N && F && (M = t[c], O = t[0], l === a && (N = O[0]), C = N.subtract(F).length() + T[l], T[l] = C)
|
|
}
|
|
if (d)
|
|
for (c = 0; c < d.length; c++) m.push(d[c].x, d[c].y);
|
|
else
|
|
for (c = 0; c < t.length; c++)
|
|
for (l = 0; l < a + D; l++) L = 0 != b[c] ? v[c][l] / b[c] : 0, w = 0 != T[l] ? y[l][c] / T[l] : 0, r ? m.push(w, L) : m.push(L, w);
|
|
for (var B = 0, U = E[c = 0] - 1, V = E[c + 1] - 1, G = U < V ? U : V, k = A[1] - A[0], z = i ? E.length : E.length - 1; B <= G && c < z;) _.push(B, B + k, B + 1), _.push(B + k + 1, B + 1, B + k), (B += 1) === G && (++c === E.length - 1 ? (k = A[0] - A[c], U = E[c] - 1, V = E[0] - 1) : (k = A[c + 1] - A[c], U = E[c] - 1, V = E[c + 1] - 1), B = A[c], G = U < V ? U + B : V + B);
|
|
if (Mi.a.ComputeNormals(p, _, g), n) {
|
|
var j = 0,
|
|
H = 0;
|
|
for (c = 0; c < t.length; c++) j = 3 * A[c], H = c + 1 < t.length ? 3 * (A[c + 1] - 1) : g.length - 3, g[j] = .5 * (g[j] + g[H]), g[j + 1] = .5 * (g[j + 1] + g[H + 1]), g[j + 2] = .5 * (g[j + 2] + g[H + 2]), g[H] = g[j], g[H + 1] = g[j + 1], g[H + 2] = g[j + 2]
|
|
}
|
|
Mi.a._ComputeSides(h, p, _, g, m, e.frontUVs, e.backUVs);
|
|
var W = null;
|
|
if (f) {
|
|
W = new Float32Array(4 * f.length);
|
|
for (var X = 0; X < f.length; X++) W[4 * X] = f[X].r, W[4 * X + 1] = f[X].g, W[4 * X + 2] = f[X].b, W[4 * X + 3] = f[X].a
|
|
}
|
|
var Y = new Mi.a,
|
|
K = new Float32Array(p),
|
|
Q = new Float32Array(g),
|
|
q = new Float32Array(m);
|
|
return Y.indices = _, Y.positions = K, Y.normals = Q, Y.uvs = q, W && Y.set(W, Oi.b.ColorKind), n && (Y._idx = A), Y
|
|
}, fe.a.CreateRibbon = function(e, t, i, n, r, o, s, a, c) {
|
|
return void 0 === i && (i = !1), void 0 === s && (s = !1), Yo.CreateRibbon(e, {
|
|
pathArray: t,
|
|
closeArray: i,
|
|
closePath: n,
|
|
offset: r,
|
|
updatable: s,
|
|
sideOrientation: a,
|
|
instance: c
|
|
}, o)
|
|
};
|
|
var Yo = function() {
|
|
function e() {}
|
|
return e.CreateRibbon = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n = t.pathArray,
|
|
r = t.closeArray,
|
|
s = t.closePath,
|
|
a = fe.a._GetDefaultSideOrientation(t.sideOrientation),
|
|
c = t.instance,
|
|
l = t.updatable;
|
|
if (c) {
|
|
var u = o.t.Vector3[0].setAll(Number.MAX_VALUE),
|
|
h = o.t.Vector3[1].setAll(-Number.MAX_VALUE),
|
|
d = c.getVerticesData(Oi.b.PositionKind);
|
|
if (function(e) {
|
|
for (var t = n[0].length, i = c, r = 0, o = i._originalBuilderSideOrientation === fe.a.DOUBLESIDE ? 2 : 1, s = 1; s <= o; ++s)
|
|
for (var a = 0; a < n.length; ++a) {
|
|
var l = n[a],
|
|
d = l.length;
|
|
t = t < d ? t : d;
|
|
for (var f = 0; f < t; ++f) {
|
|
var p = l[f];
|
|
e[r] = p.x, e[r + 1] = p.y, e[r + 2] = p.z, u.minimizeInPlaceFromFloats(p.x, p.y, p.z), h.maximizeInPlaceFromFloats(p.x, p.y, p.z), r += 3
|
|
}
|
|
i._creationDataStorage && i._creationDataStorage.closePath && (p = l[0], e[r] = p.x, e[r + 1] = p.y, e[r + 2] = p.z, r += 3)
|
|
}
|
|
}(d), c._boundingInfo ? c._boundingInfo.reConstruct(u, h, c._worldMatrix) : c._boundingInfo = new on.a(u, h, c._worldMatrix), c.updateVerticesData(Oi.b.PositionKind, d, !1, !1), t.colors) {
|
|
for (var f = c.getVerticesData(Oi.b.ColorKind), p = 0, _ = 0; p < t.colors.length; p++, _ += 4) {
|
|
var g = t.colors[p];
|
|
f[_] = g.r, f[_ + 1] = g.g, f[_ + 2] = g.b, f[_ + 3] = g.a
|
|
}
|
|
c.updateVerticesData(Oi.b.ColorKind, f, !1, !1)
|
|
}
|
|
if (t.uvs) {
|
|
for (var m = c.getVerticesData(Oi.b.UVKind), v = 0; v < t.uvs.length; v++) m[2 * v] = t.uvs[v].x, m[2 * v + 1] = t.uvs[v].y;
|
|
c.updateVerticesData(Oi.b.UVKind, m, !1, !1)
|
|
}
|
|
if (!c.areNormalsFrozen || c.isFacetDataEnabled) {
|
|
var y = c.getIndices(),
|
|
b = c.getVerticesData(Oi.b.NormalKind),
|
|
T = c.isFacetDataEnabled ? c.getFacetDataParameters() : null;
|
|
if (Mi.a.ComputeNormals(d, y, b, T), c._creationDataStorage && c._creationDataStorage.closePath)
|
|
for (var E = 0, A = 0, x = 0; x < n.length; x++) E = 3 * c._creationDataStorage.idx[x], A = x + 1 < n.length ? 3 * (c._creationDataStorage.idx[x + 1] - 1) : b.length - 3, b[E] = .5 * (b[E] + b[A]), b[E + 1] = .5 * (b[E + 1] + b[A + 1]), b[E + 2] = .5 * (b[E + 2] + b[A + 2]), b[A] = b[E], b[A + 1] = b[E + 1], b[A + 2] = b[E + 2];
|
|
c.areNormalsFrozen || c.updateVerticesData(Oi.b.NormalKind, b, !1, !1)
|
|
}
|
|
return c
|
|
}
|
|
var R = new fe.a(e, i);
|
|
R._originalBuilderSideOrientation = a, R._creationDataStorage = new fe.b;
|
|
var P = Mi.a.CreateRibbon(t);
|
|
return s && (R._creationDataStorage.idx = P._idx), R._creationDataStorage.closePath = s, R._creationDataStorage.closeArray = r, P.applyToMesh(R, l), R
|
|
}, e
|
|
}();
|
|
fe.a.ExtrudeShape = function(e, t, i, n, r, o, s, a, c, l) {
|
|
void 0 === s && (s = null);
|
|
var u = {
|
|
shape: t,
|
|
path: i,
|
|
scale: n,
|
|
rotation: r,
|
|
cap: 0 === o ? 0 : o || fe.a.NO_CAP,
|
|
sideOrientation: c,
|
|
instance: l,
|
|
updatable: a
|
|
};
|
|
return Ko.ExtrudeShape(e, u, s)
|
|
}, fe.a.ExtrudeShapeCustom = function(e, t, i, n, r, o, s, a, c, l, u, h) {
|
|
var d = {
|
|
shape: t,
|
|
path: i,
|
|
scaleFunction: n,
|
|
rotationFunction: r,
|
|
ribbonCloseArray: o,
|
|
ribbonClosePath: s,
|
|
cap: 0 === a ? 0 : a || fe.a.NO_CAP,
|
|
sideOrientation: u,
|
|
instance: h,
|
|
updatable: l
|
|
};
|
|
return Ko.ExtrudeShapeCustom(e, d, c)
|
|
};
|
|
var Ko = function() {
|
|
function e() {}
|
|
return e.ExtrudeShape = function(t, i, n) {
|
|
void 0 === n && (n = null);
|
|
var r = i.path,
|
|
o = i.shape,
|
|
s = i.scale || 1,
|
|
a = i.rotation || 0,
|
|
c = 0 === i.cap ? 0 : i.cap || fe.a.NO_CAP,
|
|
l = i.updatable,
|
|
u = fe.a._GetDefaultSideOrientation(i.sideOrientation),
|
|
h = i.instance || null,
|
|
d = i.invertUV || !1;
|
|
return e._ExtrudeShapeGeneric(t, o, r, s, a, null, null, !1, !1, c, !1, n, !!l, u, h, d, i.frontUVs || null, i.backUVs || null)
|
|
}, e.ExtrudeShapeCustom = function(t, i, n) {
|
|
void 0 === n && (n = null);
|
|
var r = i.path,
|
|
o = i.shape,
|
|
s = i.scaleFunction || function() {
|
|
return 1
|
|
},
|
|
a = i.rotationFunction || function() {
|
|
return 0
|
|
},
|
|
c = i.ribbonCloseArray || !1,
|
|
l = i.ribbonClosePath || !1,
|
|
u = 0 === i.cap ? 0 : i.cap || fe.a.NO_CAP,
|
|
h = i.updatable,
|
|
d = fe.a._GetDefaultSideOrientation(i.sideOrientation),
|
|
f = i.instance,
|
|
p = i.invertUV || !1;
|
|
return e._ExtrudeShapeGeneric(t, o, r, null, null, s, a, c, l, u, !0, n, !!h, d, f || null, p, i.frontUVs || null, i.backUVs || null)
|
|
}, e._ExtrudeShapeGeneric = function(e, t, i, n, r, s, a, c, l, u, h, d, f, p, _, g, m, v) {
|
|
var y, b, T = function(e, t, i, n, r, s, a, c, l, u) {
|
|
for (var h = i.getTangents(), d = i.getNormals(), f = i.getBinormals(), p = i.getDistances(), _ = 0, g = u && c ? c : function() {
|
|
return null !== s ? s : 0
|
|
}, m = u && a ? a : function() {
|
|
return null !== r ? r : 1
|
|
}, v = l === fe.a.NO_CAP || l === fe.a.CAP_END ? 0 : 2, y = o.t.Matrix[0], b = 0; b < t.length; b++) {
|
|
for (var T = new Array, E = g(b, p[b]), A = m(b, p[b]), x = 0; x < e.length; x++) {
|
|
o.j.RotationAxisToRef(h[b], _, y);
|
|
var R = h[b].scale(e[x].z).add(d[b].scale(e[x].x)).add(f[b].scale(e[x].y)),
|
|
P = T[x] ? T[x] : o.x.Zero();
|
|
o.x.TransformCoordinatesToRef(R, y, P), P.scaleInPlace(A).addInPlace(t[b]), T[x] = P
|
|
}
|
|
n[v] = T, _ += E, v++
|
|
}
|
|
var S = function(e) {
|
|
var t, i = Array(),
|
|
n = o.x.Zero();
|
|
for (t = 0; t < e.length; t++) n.addInPlace(e[t]);
|
|
for (n.scaleInPlace(1 / e.length), t = 0; t < e.length; t++) i.push(n);
|
|
return i
|
|
};
|
|
switch (l) {
|
|
case fe.a.NO_CAP:
|
|
break;
|
|
case fe.a.CAP_START:
|
|
n[0] = S(n[2]), n[1] = n[2];
|
|
break;
|
|
case fe.a.CAP_END:
|
|
n[v] = n[v - 1], n[v + 1] = S(n[v - 1]);
|
|
break;
|
|
case fe.a.CAP_ALL:
|
|
n[0] = S(n[2]), n[1] = n[2], n[v] = n[v - 1], n[v + 1] = S(n[v - 1])
|
|
}
|
|
return n
|
|
};
|
|
if (_) {
|
|
var E = _._creationDataStorage;
|
|
return y = E.path3D.update(i), b = T(t, i, E.path3D, E.pathArray, n, r, s, a, E.cap, h), _ = fe.a.CreateRibbon("", b, !1, !1, 0, d || void 0, !1, 0, _)
|
|
}
|
|
b = T(t, i, y = new o.m(i), new Array, n, r, s, a, u = u < 0 || u > 3 ? 0 : u, h);
|
|
var A = Yo.CreateRibbon(e, {
|
|
pathArray: b,
|
|
closeArray: c,
|
|
closePath: l,
|
|
updatable: f,
|
|
sideOrientation: p,
|
|
invertUV: g,
|
|
frontUVs: m || void 0,
|
|
backUVs: v || void 0
|
|
}, d);
|
|
return A._creationDataStorage.pathArray = b, A._creationDataStorage.path3D = y, A._creationDataStorage.cap = u, A
|
|
}, e
|
|
}(),
|
|
Qo = function() {
|
|
function e(e, t) {
|
|
var i = this;
|
|
void 0 === e && (e = !0), void 0 === t && (t = Ammo), this._useDeltaForWorldStep = e, this.bjsAMMO = {}, this.name = "AmmoJSPlugin", this._timeStep = 1 / 60, this._fixedTimeStep = 1 / 60, this._maxSteps = 5, this._tmpQuaternion = new o.q, this._tmpContactCallbackResult = !1, this._tmpVector = new o.x, this._tmpMatrix = new o.j, "function" == typeof t ? t(this.bjsAMMO) : this.bjsAMMO = t, this.isSupported() ? (this._collisionConfiguration = new this.bjsAMMO.btSoftBodyRigidBodyCollisionConfiguration, this._dispatcher = new this.bjsAMMO.btCollisionDispatcher(this._collisionConfiguration), this._overlappingPairCache = new this.bjsAMMO.btDbvtBroadphase, this._solver = new this.bjsAMMO.btSequentialImpulseConstraintSolver, this._softBodySolver = new this.bjsAMMO.btDefaultSoftBodySolver, this.world = new this.bjsAMMO.btSoftRigidDynamicsWorld(this._dispatcher, this._overlappingPairCache, this._solver, this._collisionConfiguration, this._softBodySolver), this._tmpAmmoConcreteContactResultCallback = new this.bjsAMMO.ConcreteContactResultCallback, this._tmpAmmoConcreteContactResultCallback.addSingleResult = function() {
|
|
i._tmpContactCallbackResult = !0
|
|
}, this._raycastResult = new Ho, this._tmpAmmoTransform = new this.bjsAMMO.btTransform, this._tmpAmmoTransform.setIdentity(), this._tmpAmmoQuaternion = new this.bjsAMMO.btQuaternion(0, 0, 0, 1), this._tmpAmmoVectorA = new this.bjsAMMO.btVector3(0, 0, 0), this._tmpAmmoVectorB = new this.bjsAMMO.btVector3(0, 0, 0), this._tmpAmmoVectorC = new this.bjsAMMO.btVector3(0, 0, 0), this._tmpAmmoVectorD = new this.bjsAMMO.btVector3(0, 0, 0)) : p.a.Error("AmmoJS is not available. Please make sure you included the js file.")
|
|
}
|
|
return e.prototype.setGravity = function(e) {
|
|
this._tmpAmmoVectorA.setValue(e.x, e.y, e.z), this.world.setGravity(this._tmpAmmoVectorA), this.world.getWorldInfo().set_m_gravity(this._tmpAmmoVectorA)
|
|
}, e.prototype.setTimeStep = function(e) {
|
|
this._timeStep = e
|
|
}, e.prototype.setFixedTimeStep = function(e) {
|
|
this._fixedTimeStep = e
|
|
}, e.prototype.setMaxSteps = function(e) {
|
|
this._maxSteps = e
|
|
}, e.prototype.getTimeStep = function() {
|
|
return this._timeStep
|
|
}, e.prototype._isImpostorInContact = function(e) {
|
|
return this._tmpContactCallbackResult = !1, this.world.contactTest(e.physicsBody, this._tmpAmmoConcreteContactResultCallback), this._tmpContactCallbackResult
|
|
}, e.prototype._isImpostorPairInContact = function(e, t) {
|
|
return this._tmpContactCallbackResult = !1, this.world.contactPairTest(e.physicsBody, t.physicsBody, this._tmpAmmoConcreteContactResultCallback), this._tmpContactCallbackResult
|
|
}, e.prototype._stepSimulation = function(e, t, i) {
|
|
if (void 0 === e && (e = 1 / 60), void 0 === t && (t = 10), void 0 === i && (i = 1 / 60), 0 == t) this.world.stepSimulation(e, 0);
|
|
else
|
|
for (; t > 0 && e > 0;) e - i < i ? (this.world.stepSimulation(e, 0), e = 0) : (e -= i, this.world.stepSimulation(i, 0)), t--
|
|
}, e.prototype.executeStep = function(e, t) {
|
|
for (var i = 0, n = t; i < n.length; i++) {
|
|
var r = n[i];
|
|
r.soft || r.beforeStep()
|
|
}
|
|
this._stepSimulation(this._useDeltaForWorldStep ? e : this._timeStep, this._maxSteps, this._fixedTimeStep);
|
|
for (var o = 0, s = t; o < s.length; o++) {
|
|
var a = s[o];
|
|
if (a.soft ? this._afterSoftStep(a) : a.afterStep(), a._onPhysicsCollideCallbacks.length > 0 && this._isImpostorInContact(a))
|
|
for (var c = 0, l = a._onPhysicsCollideCallbacks; c < l.length; c++)
|
|
for (var u = 0, h = l[c].otherImpostors; u < h.length; u++) {
|
|
var d = h[u];
|
|
(a.physicsBody.isActive() || d.physicsBody.isActive()) && this._isImpostorPairInContact(a, d) && (a.onCollide({
|
|
body: d.physicsBody
|
|
}), d.onCollide({
|
|
body: a.physicsBody
|
|
}))
|
|
}
|
|
}
|
|
}, e.prototype._afterSoftStep = function(e) {
|
|
e.type === ko.a.RopeImpostor ? this._ropeStep(e) : this._softbodyOrClothStep(e)
|
|
}, e.prototype._ropeStep = function(e) {
|
|
for (var t, i, n, r, s = e.physicsBody.get_m_nodes(), a = s.size(), c = new Array, l = 0; l < a; l++) i = (t = s.at(l).get_m_x()).x(), n = t.y(), r = t.z(), c.push(new o.x(i, n, r));
|
|
var u = e.object,
|
|
h = e.getParam("shape");
|
|
e._isFromLine ? e.object = wn.a.CreateLines("lines", {
|
|
points: c,
|
|
instance: u
|
|
}) : e.object = Ko.ExtrudeShape("ext", {
|
|
shape: h,
|
|
path: c,
|
|
instance: u
|
|
})
|
|
}, e.prototype._softbodyOrClothStep = function(e) {
|
|
var t = e.type === ko.a.ClothImpostor ? 1 : -1,
|
|
i = e.object,
|
|
n = i.getVerticesData(Oi.b.PositionKind);
|
|
n || (n = []);
|
|
var r = i.getVerticesData(Oi.b.NormalKind);
|
|
r || (r = []);
|
|
for (var o, s, a, c, l, u, h, d, f = n.length / 3, p = e.physicsBody.get_m_nodes(), _ = 0; _ < f; _++) {
|
|
var g;
|
|
a = (s = (o = p.at(_)).get_m_x()).x(), c = s.y(), l = s.z() * t, u = (g = o.get_m_n()).x(), h = g.y(), d = g.z() * t, n[3 * _] = a, n[3 * _ + 1] = c, n[3 * _ + 2] = l, r[3 * _] = u, r[3 * _ + 1] = h, r[3 * _ + 2] = d
|
|
}
|
|
var m = new Mi.a;
|
|
m.positions = n, m.normals = r, m.uvs = i.getVerticesData(Oi.b.UVKind), m.colors = i.getVerticesData(Oi.b.ColorKind), i && i.getIndices && (m.indices = i.getIndices()), m.applyToMesh(i)
|
|
}, e.prototype.applyImpulse = function(e, t, i) {
|
|
if (e.soft) p.a.Warn("Cannot be applied to a soft body");
|
|
else {
|
|
e.physicsBody.activate();
|
|
var n = this._tmpAmmoVectorA,
|
|
r = this._tmpAmmoVectorB;
|
|
e.object && e.object.getWorldMatrix && (e.object.getWorldMatrix().invertToRef(this._tmpMatrix), o.x.TransformCoordinatesToRef(i, this._tmpMatrix, this._tmpVector), i = this._tmpVector), n.setValue(i.x, i.y, i.z), r.setValue(t.x, t.y, t.z), e.physicsBody.applyImpulse(r, n)
|
|
}
|
|
}, e.prototype.applyForce = function(e, t, i) {
|
|
if (e.soft) p.a.Warn("Cannot be applied to a soft body");
|
|
else {
|
|
e.physicsBody.activate();
|
|
var n = this._tmpAmmoVectorA,
|
|
r = this._tmpAmmoVectorB;
|
|
e.object && e.object.getWorldMatrix && (e.object.getWorldMatrix().invertToRef(this._tmpMatrix), o.x.TransformCoordinatesToRef(i, this._tmpMatrix, this._tmpVector), i = this._tmpVector), n.setValue(i.x, i.y, i.z), r.setValue(t.x, t.y, t.z), e.physicsBody.applyForce(r, n)
|
|
}
|
|
}, e.prototype.generatePhysicsBody = function(t) {
|
|
if (t._pluginData.toDispose = [], t.parent) t.physicsBody && (this.removePhysicsBody(t), t.forceUpdate());
|
|
else if (t.isBodyInitRequired()) {
|
|
var i = this._createShape(t),
|
|
n = t.getParam("mass");
|
|
if (t._pluginData.mass = n, t.soft) i.get_m_cfg().set_collisions(17), i.get_m_cfg().set_kDP(t.getParam("damping")), Ammo.castObject(i, Ammo.btCollisionObject).getCollisionShape().setMargin(t.getParam("margin")), i.setActivationState(e.DISABLE_DEACTIVATION_FLAG), this.world.addSoftBody(i, 1, -1), t.physicsBody = i, t._pluginData.toDispose.push(i), this.setBodyPressure(t, 0), t.type === ko.a.SoftbodyImpostor && this.setBodyPressure(t, t.getParam("pressure")), this.setBodyStiffness(t, t.getParam("stiffness")), this.setBodyVelocityIterations(t, t.getParam("velocityIterations")), this.setBodyPositionIterations(t, t.getParam("positionIterations"));
|
|
else {
|
|
var r = new Ammo.btVector3(0, 0, 0),
|
|
o = new Ammo.btTransform;
|
|
o.setIdentity(), 0 !== n && i.calculateLocalInertia(n, r), this._tmpAmmoVectorA.setValue(t.object.position.x, t.object.position.y, t.object.position.z), this._tmpAmmoQuaternion.setValue(t.object.rotationQuaternion.x, t.object.rotationQuaternion.y, t.object.rotationQuaternion.z, t.object.rotationQuaternion.w), o.setOrigin(this._tmpAmmoVectorA), o.setRotation(this._tmpAmmoQuaternion);
|
|
var s = new Ammo.btDefaultMotionState(o),
|
|
a = new Ammo.btRigidBodyConstructionInfo(n, s, i, r),
|
|
c = new Ammo.btRigidBody(a);
|
|
0 === n && (c.setCollisionFlags(c.getCollisionFlags() | e.KINEMATIC_FLAG), c.setActivationState(e.DISABLE_DEACTIVATION_FLAG)), t.type != ko.a.NoImpostor || i.getChildShape || c.setCollisionFlags(c.getCollisionFlags() | e.DISABLE_COLLISION_FLAG), this.world.addRigidBody(c), t.physicsBody = c, t._pluginData.toDispose = t._pluginData.toDispose.concat([c, a, s, o, r, i])
|
|
}
|
|
this.setBodyRestitution(t, t.getParam("restitution")), this.setBodyFriction(t, t.getParam("friction"))
|
|
}
|
|
}, e.prototype.removePhysicsBody = function(e) {
|
|
var t = this;
|
|
this.world && (this.world.removeRigidBody(e.physicsBody), e._pluginData && e._pluginData.toDispose.forEach(function(e) {
|
|
t.bjsAMMO.destroy(e)
|
|
}))
|
|
}, e.prototype.generateJoint = function(e) {
|
|
var t = e.mainImpostor.physicsBody,
|
|
i = e.connectedImpostor.physicsBody;
|
|
if (t && i) {
|
|
var n, r = e.joint.jointData;
|
|
switch (r.mainPivot || (r.mainPivot = new o.x(0, 0, 0)), r.connectedPivot || (r.connectedPivot = new o.x(0, 0, 0)), e.joint.type) {
|
|
case zo.e.DistanceJoint:
|
|
var s = r.maxDistance;
|
|
s && (r.mainPivot = new o.x(0, -s / 2, 0), r.connectedPivot = new o.x(0, s / 2, 0)), n = new Ammo.btPoint2PointConstraint(t, i, new Ammo.btVector3(r.mainPivot.x, r.mainPivot.y, r.mainPivot.z), new Ammo.btVector3(r.connectedPivot.x, r.connectedPivot.y, r.connectedPivot.z));
|
|
break;
|
|
case zo.e.HingeJoint:
|
|
r.mainAxis || (r.mainAxis = new o.x(0, 0, 0)), r.connectedAxis || (r.connectedAxis = new o.x(0, 0, 0));
|
|
var a = new Ammo.btVector3(r.mainAxis.x, r.mainAxis.y, r.mainAxis.z),
|
|
c = new Ammo.btVector3(r.connectedAxis.x, r.connectedAxis.y, r.connectedAxis.z);
|
|
n = new Ammo.btHingeConstraint(t, i, new Ammo.btVector3(r.mainPivot.x, r.mainPivot.y, r.mainPivot.z), new Ammo.btVector3(r.connectedPivot.x, r.connectedPivot.y, r.connectedPivot.z), a, c);
|
|
break;
|
|
case zo.e.BallAndSocketJoint:
|
|
n = new Ammo.btPoint2PointConstraint(t, i, new Ammo.btVector3(r.mainPivot.x, r.mainPivot.y, r.mainPivot.z), new Ammo.btVector3(r.connectedPivot.x, r.connectedPivot.y, r.connectedPivot.z));
|
|
break;
|
|
default:
|
|
p.a.Warn("JointType not currently supported by the Ammo plugin, falling back to PhysicsJoint.BallAndSocketJoint"), n = new Ammo.btPoint2PointConstraint(t, i, new Ammo.btVector3(r.mainPivot.x, r.mainPivot.y, r.mainPivot.z), new Ammo.btVector3(r.connectedPivot.x, r.connectedPivot.y, r.connectedPivot.z))
|
|
}
|
|
this.world.addConstraint(n, !e.joint.jointData.collision), e.joint.physicsJoint = n
|
|
}
|
|
}, e.prototype.removeJoint = function(e) {
|
|
this.world && this.world.removeConstraint(e.joint.physicsJoint)
|
|
}, e.prototype._addMeshVerts = function(e, t, i) {
|
|
var n = this,
|
|
r = 0;
|
|
if (i && i.getIndices && i.getWorldMatrix && i.getChildMeshes) {
|
|
var s = i.getIndices();
|
|
s || (s = []);
|
|
var a = i.getVerticesData(Oi.b.PositionKind);
|
|
a || (a = []), i.computeWorldMatrix(!1);
|
|
for (var c = s.length / 3, l = 0; l < c; l++) {
|
|
for (var u = [], h = 0; h < 3; h++) {
|
|
var d, f = new o.x(a[3 * s[3 * l + h] + 0], a[3 * s[3 * l + h] + 1], a[3 * s[3 * l + h] + 2]);
|
|
o.j.ScalingToRef(i.scaling.x, i.scaling.y, i.scaling.z, this._tmpMatrix), f = o.x.TransformCoordinates(f, this._tmpMatrix), (d = 0 == h ? this._tmpAmmoVectorA : 1 == h ? this._tmpAmmoVectorB : this._tmpAmmoVectorC).setValue(f.x, f.y, f.z), u.push(d)
|
|
}
|
|
e.addTriangle(u[0], u[1], u[2]), r++
|
|
}
|
|
i.getChildMeshes().forEach(function(i) {
|
|
r += n._addMeshVerts(e, t, i)
|
|
})
|
|
}
|
|
return r
|
|
}, e.prototype._softVertexData = function(e) {
|
|
var t = e.object;
|
|
if (t && t.getIndices && t.getWorldMatrix && t.getChildMeshes) {
|
|
var i = t.getIndices();
|
|
i || (i = []);
|
|
var n = t.getVerticesData(Oi.b.PositionKind);
|
|
n || (n = []);
|
|
var r = t.getVerticesData(Oi.b.NormalKind);
|
|
r || (r = []), t.computeWorldMatrix(!1);
|
|
for (var s = [], a = [], c = 0; c < n.length; c += 3) {
|
|
var l = new o.x(n[c], n[c + 1], n[c + 2]),
|
|
u = new o.x(r[c], r[c + 1], r[c + 2]);
|
|
l = o.x.TransformCoordinates(l, t.getWorldMatrix()), u = o.x.TransformNormal(u, t.getWorldMatrix()), s.push(l.x, l.y, l.z), a.push(u.x, u.y, u.z)
|
|
}
|
|
var h = new Mi.a;
|
|
return h.positions = s, h.normals = a, h.uvs = t.getVerticesData(Oi.b.UVKind), h.colors = t.getVerticesData(Oi.b.ColorKind), t && t.getIndices && (h.indices = t.getIndices()), h.applyToMesh(t), t.position = o.x.Zero(), t.rotationQuaternion = null, t.rotation = o.x.Zero(), t.computeWorldMatrix(!0), h
|
|
}
|
|
return Mi.a.ExtractFromMesh(t)
|
|
}, e.prototype._createSoftbody = function(e) {
|
|
var t = e.object;
|
|
if (t && t.getIndices) {
|
|
var i = t.getIndices();
|
|
i || (i = []);
|
|
var n = this._softVertexData(e),
|
|
r = n.positions,
|
|
s = n.normals;
|
|
if (null === r || null === s) return new Ammo.btCompoundShape;
|
|
for (var a = [], c = [], l = 0; l < r.length; l += 3) {
|
|
var u = new o.x(r[l], r[l + 1], r[l + 2]),
|
|
h = new o.x(s[l], s[l + 1], s[l + 2]);
|
|
a.push(u.x, u.y, -u.z), c.push(h.x, h.y, -h.z)
|
|
}
|
|
var d = (new Ammo.btSoftBodyHelpers).CreateFromTriMesh(this.world.getWorldInfo(), a, t.getIndices(), i.length / 3, !0),
|
|
f = r.length / 3,
|
|
p = d.get_m_nodes();
|
|
for (l = 0; l < f; l++) {
|
|
var _;
|
|
(_ = p.at(l).get_m_n()).setX(c[3 * l]), _.setY(c[3 * l + 1]), _.setZ(c[3 * l + 2])
|
|
}
|
|
return d
|
|
}
|
|
}, e.prototype._createCloth = function(e) {
|
|
var t = e.object;
|
|
if (t && t.getIndices) {
|
|
var i = t.getIndices();
|
|
i || (i = []);
|
|
var n = this._softVertexData(e),
|
|
r = n.positions,
|
|
o = n.normals;
|
|
if (null === r || null === o) return new Ammo.btCompoundShape;
|
|
var s = r.length,
|
|
a = Math.sqrt(s / 3);
|
|
e.segments = a;
|
|
var c = a - 1;
|
|
return this._tmpAmmoVectorA.setValue(r[0], r[1], r[2]), this._tmpAmmoVectorB.setValue(r[3 * c], r[3 * c + 1], r[3 * c + 2]), this._tmpAmmoVectorD.setValue(r[s - 3], r[s - 2], r[s - 1]), this._tmpAmmoVectorC.setValue(r[s - 3 - 3 * c], r[s - 2 - 3 * c], r[s - 1 - 3 * c]), (new Ammo.btSoftBodyHelpers).CreatePatch(this.world.getWorldInfo(), this._tmpAmmoVectorA, this._tmpAmmoVectorB, this._tmpAmmoVectorC, this._tmpAmmoVectorD, a, a, e.getParam("fixedPoints"), !0)
|
|
}
|
|
}, e.prototype._createRope = function(e) {
|
|
var t, i, n = this._softVertexData(e),
|
|
r = n.positions,
|
|
o = n.normals;
|
|
if (null === r || null === o) return new Ammo.btCompoundShape;
|
|
n.applyToMesh(e.object, !0), e._isFromLine = !0;
|
|
if (0 === o.map(function(e) {
|
|
return e * e
|
|
}).reduce(function(e, t) {
|
|
return e + t
|
|
})) i = (t = r.length) / 3 - 1, this._tmpAmmoVectorA.setValue(r[0], r[1], r[2]), this._tmpAmmoVectorB.setValue(r[t - 3], r[t - 2], r[t - 1]);
|
|
else {
|
|
e._isFromLine = !1;
|
|
var s = e.getParam("path");
|
|
if (null === e.getParam("shape")) return p.a.Warn("No shape available for extruded mesh"), new Ammo.btCompoundShape;
|
|
if (r.length % (3 * s.length) != 0) return p.a.Warn("Path does not match extrusion"), new Ammo.btCompoundShape;
|
|
i = (t = s.length) - 1, this._tmpAmmoVectorA.setValue(s[0].x, s[0].y, s[0].z), this._tmpAmmoVectorB.setValue(s[t - 1].x, s[t - 1].y, s[t - 1].z)
|
|
}
|
|
e.segments = i;
|
|
var a = e.getParam("fixedPoints");
|
|
a = a > 3 ? 3 : a;
|
|
var c = (new Ammo.btSoftBodyHelpers).CreateRope(this.world.getWorldInfo(), this._tmpAmmoVectorA, this._tmpAmmoVectorB, i - 1, a);
|
|
return c.get_m_cfg().set_collisions(17), c
|
|
}, e.prototype._addHullVerts = function(e, t, i) {
|
|
var n = this,
|
|
r = 0;
|
|
if (i && i.getIndices && i.getWorldMatrix && i.getChildMeshes) {
|
|
var s = i.getIndices();
|
|
s || (s = []);
|
|
var a = i.getVerticesData(Oi.b.PositionKind);
|
|
a || (a = []), i.computeWorldMatrix(!1);
|
|
for (var c = s.length / 3, l = 0; l < c; l++) {
|
|
for (var u = [], h = 0; h < 3; h++) {
|
|
var d, f = new o.x(a[3 * s[3 * l + h] + 0], a[3 * s[3 * l + h] + 1], a[3 * s[3 * l + h] + 2]);
|
|
o.j.ScalingToRef(i.scaling.x, i.scaling.y, i.scaling.z, this._tmpMatrix), f = o.x.TransformCoordinates(f, this._tmpMatrix), (d = 0 == h ? this._tmpAmmoVectorA : 1 == h ? this._tmpAmmoVectorB : this._tmpAmmoVectorC).setValue(f.x, f.y, f.z), u.push(d)
|
|
}
|
|
e.addPoint(u[0], !0), e.addPoint(u[1], !0), e.addPoint(u[2], !0), r++
|
|
}
|
|
i.getChildMeshes().forEach(function(i) {
|
|
r += n._addHullVerts(e, t, i)
|
|
})
|
|
}
|
|
return r
|
|
}, e.prototype._createShape = function(e, t) {
|
|
var i = this;
|
|
void 0 === t && (t = !1);
|
|
var n, r = e.object,
|
|
s = e.getObjectExtendSize();
|
|
if (!t) {
|
|
var a = e.object.getChildMeshes ? e.object.getChildMeshes(!0) : [];
|
|
n = new Ammo.btCompoundShape;
|
|
var c = 0;
|
|
if (a.forEach(function(e) {
|
|
var t = e.getPhysicsImpostor();
|
|
if (t) {
|
|
if (t.type == ko.a.MeshImpostor) throw "A child MeshImpostor is not supported. Only primitive impostors are supported as children (eg. box or sphere)";
|
|
var r = i._createShape(t),
|
|
s = e.parent.getWorldMatrix().clone(),
|
|
a = new o.x;
|
|
s.decompose(a), i._tmpAmmoTransform.getOrigin().setValue(e.position.x * a.x, e.position.y * a.y, e.position.z * a.z), i._tmpAmmoQuaternion.setValue(e.rotationQuaternion.x, e.rotationQuaternion.y, e.rotationQuaternion.z, e.rotationQuaternion.w), i._tmpAmmoTransform.setRotation(i._tmpAmmoQuaternion), n.addChildShape(i._tmpAmmoTransform, r), t.dispose(), c++
|
|
}
|
|
}), c > 0) {
|
|
if (e.type != ko.a.NoImpostor) {
|
|
var l = this._createShape(e, !0);
|
|
l && (this._tmpAmmoTransform.getOrigin().setValue(0, 0, 0), this._tmpAmmoQuaternion.setValue(0, 0, 0, 1), this._tmpAmmoTransform.setRotation(this._tmpAmmoQuaternion), n.addChildShape(this._tmpAmmoTransform, l))
|
|
}
|
|
return n
|
|
}
|
|
Ammo.destroy(n), n = null
|
|
}
|
|
switch (e.type) {
|
|
case ko.a.SphereImpostor:
|
|
n = new Ammo.btSphereShape(s.x / 2);
|
|
break;
|
|
case ko.a.CylinderImpostor:
|
|
this._tmpAmmoVectorA.setValue(s.x / 2, s.y / 2, s.z / 2), n = new Ammo.btCylinderShape(this._tmpAmmoVectorA);
|
|
break;
|
|
case ko.a.PlaneImpostor:
|
|
case ko.a.BoxImpostor:
|
|
this._tmpAmmoVectorA.setValue(s.x / 2, s.y / 2, s.z / 2), n = new Ammo.btBoxShape(this._tmpAmmoVectorA);
|
|
break;
|
|
case ko.a.MeshImpostor:
|
|
if (0 == e.getParam("mass")) {
|
|
var u = new Ammo.btTriangleMesh;
|
|
e._pluginData.toDispose.push(u);
|
|
var h = this._addMeshVerts(u, r, r);
|
|
n = 0 == h ? new Ammo.btCompoundShape : new Ammo.btBvhTriangleMeshShape(u);
|
|
break
|
|
}
|
|
case ko.a.ConvexHullImpostor:
|
|
var d = new Ammo.btConvexHullShape;
|
|
0 == (h = this._addHullVerts(d, r, r)) ? (e._pluginData.toDispose.push(d), n = new Ammo.btCompoundShape) : n = d;
|
|
break;
|
|
case ko.a.NoImpostor:
|
|
n = new Ammo.btSphereShape(s.x / 2);
|
|
break;
|
|
case ko.a.SoftbodyImpostor:
|
|
n = this._createSoftbody(e);
|
|
break;
|
|
case ko.a.ClothImpostor:
|
|
n = this._createCloth(e);
|
|
break;
|
|
case ko.a.RopeImpostor:
|
|
n = this._createRope(e);
|
|
break;
|
|
default:
|
|
p.a.Warn("The impostor type is not currently supported by the ammo plugin.")
|
|
}
|
|
return n
|
|
}, e.prototype.setTransformationFromPhysicsBody = function(e) {
|
|
e.physicsBody.getMotionState().getWorldTransform(this._tmpAmmoTransform), e.object.position.set(this._tmpAmmoTransform.getOrigin().x(), this._tmpAmmoTransform.getOrigin().y(), this._tmpAmmoTransform.getOrigin().z()), e.object.rotationQuaternion ? e.object.rotationQuaternion.set(this._tmpAmmoTransform.getRotation().x(), this._tmpAmmoTransform.getRotation().y(), this._tmpAmmoTransform.getRotation().z(), this._tmpAmmoTransform.getRotation().w()) : e.object.rotation && (this._tmpQuaternion.set(this._tmpAmmoTransform.getRotation().x(), this._tmpAmmoTransform.getRotation().y(), this._tmpAmmoTransform.getRotation().z(), this._tmpAmmoTransform.getRotation().w()), this._tmpQuaternion.toEulerAnglesToRef(e.object.rotation))
|
|
}, e.prototype.setPhysicsBodyTransformation = function(e, t, i) {
|
|
var n = e.physicsBody.getWorldTransform();
|
|
if (n.getOrigin().x() != t.x || n.getOrigin().y() != t.y || n.getOrigin().z() != t.z || n.getRotation().x() != i.x || n.getRotation().y() != i.y || n.getRotation().z() != i.z || n.getRotation().w() != i.w)
|
|
if (this._tmpAmmoVectorA.setValue(t.x, t.y, t.z), n.setOrigin(this._tmpAmmoVectorA), this._tmpAmmoQuaternion.setValue(i.x, i.y, i.z, i.w), n.setRotation(this._tmpAmmoQuaternion), e.physicsBody.setWorldTransform(n), 0 == e.mass) {
|
|
var r = e.physicsBody.getMotionState();
|
|
r && r.setWorldTransform(n)
|
|
} else e.physicsBody.activate()
|
|
}, e.prototype.isSupported = function() {
|
|
return void 0 !== this.bjsAMMO
|
|
}, e.prototype.setLinearVelocity = function(e, t) {
|
|
this._tmpAmmoVectorA.setValue(t.x, t.y, t.z), e.soft ? e.physicsBody.linearVelocity(this._tmpAmmoVectorA) : e.physicsBody.setLinearVelocity(this._tmpAmmoVectorA)
|
|
}, e.prototype.setAngularVelocity = function(e, t) {
|
|
this._tmpAmmoVectorA.setValue(t.x, t.y, t.z), e.soft ? e.physicsBody.angularVelocity(this._tmpAmmoVectorA) : e.physicsBody.setAngularVelocity(this._tmpAmmoVectorA)
|
|
}, e.prototype.getLinearVelocity = function(e) {
|
|
if (e.soft) var t = e.physicsBody.linearVelocity();
|
|
else t = e.physicsBody.getLinearVelocity();
|
|
if (!t) return null;
|
|
var i = new o.x(t.x(), t.y(), t.z());
|
|
return Ammo.destroy(t), i
|
|
}, e.prototype.getAngularVelocity = function(e) {
|
|
if (e.soft) var t = e.physicsBody.angularVelocity();
|
|
else t = e.physicsBody.getAngularVelocity();
|
|
if (!t) return null;
|
|
var i = new o.x(t.x(), t.y(), t.z());
|
|
return Ammo.destroy(t), i
|
|
}, e.prototype.setBodyMass = function(e, t) {
|
|
e.soft ? e.physicsBody.setTotalMass(t, !1) : e.physicsBody.setMassProps(t), e._pluginData.mass = t
|
|
}, e.prototype.getBodyMass = function(e) {
|
|
return e._pluginData.mass || 0
|
|
}, e.prototype.getBodyFriction = function(e) {
|
|
return e._pluginData.friction || 0
|
|
}, e.prototype.setBodyFriction = function(e, t) {
|
|
e.soft ? e.physicsBody.get_m_cfg().set_kDF(t) : e.physicsBody.setFriction(t), e._pluginData.friction = t
|
|
}, e.prototype.getBodyRestitution = function(e) {
|
|
return e._pluginData.restitution || 0
|
|
}, e.prototype.setBodyRestitution = function(e, t) {
|
|
e.physicsBody.setRestitution(t), e._pluginData.restitution = t
|
|
}, e.prototype.getBodyPressure = function(e) {
|
|
return e.soft ? e._pluginData.pressure || 0 : (p.a.Warn("Pressure is not a property of a rigid body"), 0)
|
|
}, e.prototype.setBodyPressure = function(e, t) {
|
|
e.soft ? e.type === ko.a.SoftbodyImpostor ? (e.physicsBody.get_m_cfg().set_kPR(t), e._pluginData.pressure = t) : (e.physicsBody.get_m_cfg().set_kPR(0), e._pluginData.pressure = 0) : p.a.Warn("Pressure can only be applied to a softbody")
|
|
}, e.prototype.getBodyStiffness = function(e) {
|
|
return e.soft ? e._pluginData.stiffness || 0 : (p.a.Warn("Stiffness is not a property of a rigid body"), 0)
|
|
}, e.prototype.setBodyStiffness = function(e, t) {
|
|
e.soft ? (t = (t = t < 0 ? 0 : t) > 1 ? 1 : t, e.physicsBody.get_m_materials().at(0).set_m_kLST(t), e._pluginData.stiffness = t) : p.a.Warn("Stiffness cannot be applied to a rigid body")
|
|
}, e.prototype.getBodyVelocityIterations = function(e) {
|
|
return e.soft ? e._pluginData.velocityIterations || 0 : (p.a.Warn("Velocity iterations is not a property of a rigid body"), 0)
|
|
}, e.prototype.setBodyVelocityIterations = function(e, t) {
|
|
e.soft ? (t = t < 0 ? 0 : t, e.physicsBody.get_m_cfg().set_viterations(t), e._pluginData.velocityIterations = t) : p.a.Warn("Velocity iterations cannot be applied to a rigid body")
|
|
}, e.prototype.getBodyPositionIterations = function(e) {
|
|
return e.soft ? e._pluginData.positionIterations || 0 : (p.a.Warn("Position iterations is not a property of a rigid body"), 0)
|
|
}, e.prototype.setBodyPositionIterations = function(e, t) {
|
|
e.soft ? (t = t < 0 ? 0 : t, e.physicsBody.get_m_cfg().set_piterations(t), e._pluginData.positionIterations = t) : p.a.Warn("Position iterations cannot be applied to a rigid body")
|
|
}, e.prototype.appendAnchor = function(e, t, i, n, r, o) {
|
|
void 0 === r && (r = 1), void 0 === o && (o = !1);
|
|
var s = e.segments,
|
|
a = Math.round((s - 1) * i) + s * (s - 1 - Math.round((s - 1) * n));
|
|
e.physicsBody.appendAnchor(a, t.physicsBody, o, r)
|
|
}, e.prototype.appendHook = function(e, t, i, n, r) {
|
|
void 0 === n && (n = 1), void 0 === r && (r = !1);
|
|
var o = Math.round(e.segments * i);
|
|
e.physicsBody.appendAnchor(o, t.physicsBody, r, n)
|
|
}, e.prototype.sleepBody = function(e) {
|
|
p.a.Warn("sleepBody is not currently supported by the Ammo physics plugin")
|
|
}, e.prototype.wakeUpBody = function(e) {
|
|
e.physicsBody.activate()
|
|
}, e.prototype.updateDistanceJoint = function(e, t, i) {
|
|
p.a.Warn("updateDistanceJoint is not currently supported by the Ammo physics plugin")
|
|
}, e.prototype.setMotor = function(e, t, i, n) {
|
|
e.physicsJoint.enableAngularMotor(!0, t, i)
|
|
}, e.prototype.setLimit = function(e, t, i) {
|
|
p.a.Warn("setLimit is not currently supported by the Ammo physics plugin")
|
|
}, e.prototype.syncMeshWithImpostor = function(e, t) {
|
|
t.physicsBody.getMotionState().getWorldTransform(this._tmpAmmoTransform), e.position.x = this._tmpAmmoTransform.getOrigin().x(), e.position.y = this._tmpAmmoTransform.getOrigin().y(), e.position.z = this._tmpAmmoTransform.getOrigin().z(), e.rotationQuaternion && (e.rotationQuaternion.x = this._tmpAmmoTransform.getRotation().x(), e.rotationQuaternion.y = this._tmpAmmoTransform.getRotation().y(), e.rotationQuaternion.z = this._tmpAmmoTransform.getRotation().z(), e.rotationQuaternion.w = this._tmpAmmoTransform.getRotation().w())
|
|
}, e.prototype.getRadius = function(e) {
|
|
return e.getObjectExtendSize().x / 2
|
|
}, e.prototype.getBoxSizeToRef = function(e, t) {
|
|
var i = e.getObjectExtendSize();
|
|
t.x = i.x, t.y = i.y, t.z = i.z
|
|
}, e.prototype.dispose = function() {
|
|
Ammo.destroy(this.world), Ammo.destroy(this._solver), Ammo.destroy(this._overlappingPairCache), Ammo.destroy(this._dispatcher), Ammo.destroy(this._collisionConfiguration), Ammo.destroy(this._tmpAmmoVectorA), Ammo.destroy(this._tmpAmmoVectorB), Ammo.destroy(this._tmpAmmoVectorC), Ammo.destroy(this._tmpAmmoTransform), Ammo.destroy(this._tmpAmmoQuaternion), Ammo.destroy(this._tmpAmmoConcreteContactResultCallback), this.world = null
|
|
}, e.prototype.raycast = function(e, t) {
|
|
this._tmpAmmoVectorRCA = new this.bjsAMMO.btVector3(e.x, e.y, e.z), this._tmpAmmoVectorRCB = new this.bjsAMMO.btVector3(t.x, t.y, t.z);
|
|
var i = new this.bjsAMMO.ClosestRayResultCallback(this._tmpAmmoVectorRCA, this._tmpAmmoVectorRCB);
|
|
return this.world.rayTest(this._tmpAmmoVectorRCA, this._tmpAmmoVectorRCB, i), this._raycastResult.reset(e, t), i.hasHit() && (this._raycastResult.setHitData({
|
|
x: i.get_m_hitNormalWorld().x(),
|
|
y: i.get_m_hitNormalWorld().y(),
|
|
z: i.get_m_hitNormalWorld().z()
|
|
}, {
|
|
x: i.get_m_hitPointWorld().x(),
|
|
y: i.get_m_hitPointWorld().y(),
|
|
z: i.get_m_hitPointWorld().z()
|
|
}), this._raycastResult.calculateHitDistance()), Ammo.destroy(i), Ammo.destroy(this._tmpAmmoVectorRCA), Ammo.destroy(this._tmpAmmoVectorRCB), this._raycastResult
|
|
}, e.DISABLE_COLLISION_FLAG = 4, e.KINEMATIC_FLAG = 2, e.DISABLE_DEACTIVATION_FLAG = 4, e
|
|
}();
|
|
n.a.prototype.removeReflectionProbe = function(e) {
|
|
if (!this.reflectionProbes) return -1;
|
|
var t = this.reflectionProbes.indexOf(e);
|
|
return -1 !== t && this.reflectionProbes.splice(t, 1), t
|
|
}, n.a.prototype.addReflectionProbe = function(e) {
|
|
this.reflectionProbes || (this.reflectionProbes = []), this.reflectionProbes.push(e)
|
|
};
|
|
var qo = function() {
|
|
function e(e, t, i, n, r) {
|
|
var s = this;
|
|
void 0 === n && (n = !0), void 0 === r && (r = !1), this.name = e, this._viewMatrix = o.j.Identity(), this._target = o.x.Zero(), this._add = o.x.Zero(), this._invertYAxis = !1, this.position = o.x.Zero(), this._scene = i, this._scene.reflectionProbes || (this._scene.reflectionProbes = new Array), this._scene.reflectionProbes.push(this), this._renderTargetTexture = new _i(e, t, i, n, !0, r ? _.a.TEXTURETYPE_FLOAT : _.a.TEXTURETYPE_UNSIGNED_INT, !0), this._renderTargetTexture.onBeforeRenderObservable.add(function(e) {
|
|
switch (e) {
|
|
case 0:
|
|
s._add.copyFromFloats(1, 0, 0);
|
|
break;
|
|
case 1:
|
|
s._add.copyFromFloats(-1, 0, 0);
|
|
break;
|
|
case 2:
|
|
s._add.copyFromFloats(0, s._invertYAxis ? 1 : -1, 0);
|
|
break;
|
|
case 3:
|
|
s._add.copyFromFloats(0, s._invertYAxis ? -1 : 1, 0);
|
|
break;
|
|
case 4:
|
|
s._add.copyFromFloats(0, 0, 1);
|
|
break;
|
|
case 5:
|
|
s._add.copyFromFloats(0, 0, -1)
|
|
}
|
|
s._attachedMesh && s.position.copyFrom(s._attachedMesh.getAbsolutePosition()), s.position.addToRef(s._add, s._target), o.j.LookAtLHToRef(s.position, s._target, o.x.Up(), s._viewMatrix), i.activeCamera && (s._projectionMatrix = o.j.PerspectiveFovLH(Math.PI / 2, 1, i.activeCamera.minZ, i.activeCamera.maxZ), i.setTransformMatrix(s._viewMatrix, s._projectionMatrix)), i._forcedViewPosition = s.position
|
|
}), this._renderTargetTexture.onAfterUnbindObservable.add(function() {
|
|
i._forcedViewPosition = null, i.updateTransformMatrix(!0)
|
|
})
|
|
}
|
|
return Object.defineProperty(e.prototype, "samples", {
|
|
get: function() {
|
|
return this._renderTargetTexture.samples
|
|
},
|
|
set: function(e) {
|
|
this._renderTargetTexture.samples = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "refreshRate", {
|
|
get: function() {
|
|
return this._renderTargetTexture.refreshRate
|
|
},
|
|
set: function(e) {
|
|
this._renderTargetTexture.refreshRate = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getScene = function() {
|
|
return this._scene
|
|
}, Object.defineProperty(e.prototype, "cubeTexture", {
|
|
get: function() {
|
|
return this._renderTargetTexture
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "renderList", {
|
|
get: function() {
|
|
return this._renderTargetTexture.renderList
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.attachToMesh = function(e) {
|
|
this._attachedMesh = e
|
|
}, e.prototype.setRenderingAutoClearDepthStencil = function(e, t) {
|
|
this._renderTargetTexture.setRenderingAutoClearDepthStencil(e, t)
|
|
}, e.prototype.dispose = function() {
|
|
var e = this._scene.reflectionProbes.indexOf(this); - 1 !== e && this._scene.reflectionProbes.splice(e, 1), this._renderTargetTexture && (this._renderTargetTexture.dispose(), this._renderTargetTexture = null)
|
|
}, e.prototype.toString = function(e) {
|
|
var t = "Name: " + this.name;
|
|
return e && (t += ", position: " + this.position.toString(), this._attachedMesh && (t += ", attached mesh: " + this._attachedMesh.name)), t
|
|
}, e.prototype.getClassName = function() {
|
|
return "ReflectionProbe"
|
|
}, e.prototype.serialize = function() {
|
|
var e = L.a.Serialize(this, this._renderTargetTexture.serialize());
|
|
return e.isReflectionProbe = !0, e
|
|
}, e.Parse = function(t, i, n) {
|
|
var r = null;
|
|
if (i.reflectionProbes)
|
|
for (var o = 0; o < i.reflectionProbes.length; o++) {
|
|
var s = i.reflectionProbes[o];
|
|
if (s.name === t.name) {
|
|
r = s;
|
|
break
|
|
}
|
|
}
|
|
return (r = L.a.Parse(function() {
|
|
return r || new e(t.name, t.renderTargetSize, i, t._generateMipMaps)
|
|
}, t, i, n)).cubeTexture._waitingRenderList = t.renderList, t._attachedMesh && r.attachToMesh(i.getMeshByID(t._attachedMesh)), r
|
|
}, l.c([Object(L.k)()], e.prototype, "_attachedMesh", void 0), l.c([Object(L.o)()], e.prototype, "position", void 0), e
|
|
}(),
|
|
Zo = function(e, t, i, n) {
|
|
for (var r = 0, o = t.materials.length; r < o; r++) {
|
|
var s = t.materials[r];
|
|
if (s.id === e) return so.a.Parse(s, i, n)
|
|
}
|
|
return null
|
|
},
|
|
Jo = function(e, t, i) {
|
|
for (var n in t)
|
|
if (e.name === t[n]) return i.push(e.id), !0;
|
|
return !(!e.parentId || -1 === i.indexOf(e.parentId)) && (i.push(e.id), !0)
|
|
},
|
|
$o = function(e, t) {
|
|
return e + " of " + (t ? t.file + " from " + t.name + " version: " + t.version + ", exporter version: " + t.exporter_version : "unknown")
|
|
},
|
|
es = function(e, t) {
|
|
var i = t;
|
|
if (t._waitingData.lods) {
|
|
if (t._waitingData.lods.ids && t._waitingData.lods.ids.length > 0) {
|
|
var n = t._waitingData.lods.ids,
|
|
r = i.isEnabled(!1);
|
|
if (t._waitingData.lods.distances) {
|
|
var o = t._waitingData.lods.distances;
|
|
if (o.length >= n.length) {
|
|
var s = o.length > n.length ? o[o.length - 1] : 0;
|
|
i.setEnabled(!1);
|
|
for (var a = 0; a < n.length; a++) {
|
|
var c = n[a],
|
|
l = e.getMeshByID(c);
|
|
null != l && i.addLODLevel(o[a], l)
|
|
}
|
|
s > 0 && i.addLODLevel(s, null), !0 === r && i.setEnabled(!0)
|
|
} else ye.h.Warn("Invalid level of detail distances for " + t.name)
|
|
}
|
|
}
|
|
t._waitingData.lods = null
|
|
}
|
|
},
|
|
ts = function(e, t, i, r, o) {
|
|
void 0 === o && (o = !1);
|
|
var a = new _e(e),
|
|
c = "importScene has failed JSON parse";
|
|
try {
|
|
var l = JSON.parse(t);
|
|
c = "";
|
|
var u, h, d = bn.loggingLevel === bn.DETAILED_LOGGING;
|
|
if (void 0 !== l.environmentTexture && null !== l.environmentTexture) {
|
|
var f = void 0 === l.isPBR || l.isPBR;
|
|
if (l.environmentTextureType && "BABYLON.HDRCubeTexture" === l.environmentTextureType) {
|
|
var _ = l.environmentTextureSize ? l.environmentTextureSize : 128,
|
|
g = new Uo((l.environmentTexture.match(/https?:\/\//g) ? "" : i) + l.environmentTexture, e, _, !0, !f);
|
|
l.environmentTextureRotationY && (g.rotationY = l.environmentTextureRotationY), e.environmentTexture = g
|
|
} else if (ye.h.EndsWith(l.environmentTexture, ".env")) {
|
|
var m = new tr((l.environmentTexture.match(/https?:\/\//g) ? "" : i) + l.environmentTexture, e);
|
|
l.environmentTextureRotationY && (m.rotationY = l.environmentTextureRotationY), e.environmentTexture = m
|
|
} else {
|
|
var v = tr.CreateFromPrefilteredData((l.environmentTexture.match(/https?:\/\//g) ? "" : i) + l.environmentTexture, e);
|
|
l.environmentTextureRotationY && (v.rotationY = l.environmentTextureRotationY), e.environmentTexture = v
|
|
}
|
|
if (!0 === l.createDefaultSkybox) {
|
|
var y = void 0 !== e.activeCamera && null !== e.activeCamera ? (e.activeCamera.maxZ - e.activeCamera.minZ) / 2 : 1e3,
|
|
b = l.skyboxBlurLevel || 0;
|
|
e.createDefaultSkybox(e.environmentTexture, f, y, b)
|
|
}
|
|
a.environmentTexture = e.environmentTexture
|
|
}
|
|
if (void 0 !== l.lights && null !== l.lights)
|
|
for (u = 0, h = l.lights.length; u < h; u++) {
|
|
var T = l.lights[u],
|
|
E = zn.a.Parse(T, e);
|
|
E && (a.lights.push(E), c += 0 === u ? "\n\tLights:" : "", c += "\n\t\t" + E.toString(d))
|
|
}
|
|
if (void 0 !== l.reflectionProbes && null !== l.reflectionProbes)
|
|
for (u = 0, h = l.reflectionProbes.length; u < h; u++) {
|
|
var A = l.reflectionProbes[u],
|
|
x = qo.Parse(A, e, i);
|
|
x && (a.reflectionProbes.push(x), c += 0 === u ? "\n\tReflection Probes:" : "", c += "\n\t\t" + x.toString(d))
|
|
}
|
|
if (void 0 !== l.animations && null !== l.animations)
|
|
for (u = 0, h = l.animations.length; u < h; u++) {
|
|
var R = l.animations[u],
|
|
P = s.a.GetClass("BABYLON.Animation");
|
|
if (P) {
|
|
var S = P.Parse(R);
|
|
e.animations.push(S), a.animations.push(S), c += 0 === u ? "\n\tAnimations:" : "", c += "\n\t\t" + S.toString(d)
|
|
}
|
|
}
|
|
if (void 0 !== l.materials && null !== l.materials)
|
|
for (u = 0, h = l.materials.length; u < h; u++) {
|
|
var M = l.materials[u],
|
|
O = so.a.Parse(M, e, i);
|
|
if (O) a.materials.push(O), c += 0 === u ? "\n\tMaterials:" : "", c += "\n\t\t" + O.toString(d), O.getActiveTextures().forEach(function(e) {
|
|
-1 == a.textures.indexOf(e) && a.textures.push(e)
|
|
})
|
|
}
|
|
if (void 0 !== l.multiMaterials && null !== l.multiMaterials)
|
|
for (u = 0, h = l.multiMaterials.length; u < h; u++) {
|
|
var I = l.multiMaterials[u],
|
|
D = Fo.a.ParseMultiMaterial(I, e);
|
|
a.multiMaterials.push(D), c += 0 === u ? "\n\tMultiMaterials:" : "", c += "\n\t\t" + D.toString(d), D.getActiveTextures().forEach(function(e) {
|
|
-1 == a.textures.indexOf(e) && a.textures.push(e)
|
|
})
|
|
}
|
|
if (void 0 !== l.morphTargetManagers && null !== l.morphTargetManagers)
|
|
for (var L = 0, w = l.morphTargetManagers; L < w.length; L++) {
|
|
var F = w[L];
|
|
a.morphTargetManagers.push(Go.Parse(F, e))
|
|
}
|
|
if (void 0 !== l.skeletons && null !== l.skeletons)
|
|
for (u = 0, h = l.skeletons.length; u < h; u++) {
|
|
var N = l.skeletons[u],
|
|
B = He.Parse(N, e);
|
|
a.skeletons.push(B), c += 0 === u ? "\n\tSkeletons:" : "", c += "\n\t\t" + B.toString(d)
|
|
}
|
|
var U = l.geometries;
|
|
if (null != U) {
|
|
var V = new Array,
|
|
G = U.vertexData;
|
|
if (null != G)
|
|
for (u = 0, h = G.length; u < h; u++) {
|
|
var k = G[u];
|
|
V.push(wo.a.Parse(k, e, i))
|
|
}
|
|
V.forEach(function(e) {
|
|
e && a.geometries.push(e)
|
|
})
|
|
}
|
|
if (void 0 !== l.transformNodes && null !== l.transformNodes)
|
|
for (u = 0, h = l.transformNodes.length; u < h; u++) {
|
|
var z = l.transformNodes[u],
|
|
j = _r.a.Parse(z, e, i);
|
|
a.transformNodes.push(j)
|
|
}
|
|
if (void 0 !== l.meshes && null !== l.meshes)
|
|
for (u = 0, h = l.meshes.length; u < h; u++) {
|
|
var H = l.meshes[u],
|
|
W = fe.a.Parse(H, e, i);
|
|
a.meshes.push(W), c += 0 === u ? "\n\tMeshes:" : "", c += "\n\t\t" + W.toString(d)
|
|
}
|
|
if (void 0 !== l.cameras && null !== l.cameras)
|
|
for (u = 0, h = l.cameras.length; u < h; u++) {
|
|
var X = l.cameras[u],
|
|
Y = Ne.a.Parse(X, e);
|
|
a.cameras.push(Y), c += 0 === u ? "\n\tCameras:" : "", c += "\n\t\t" + Y.toString(d)
|
|
}
|
|
if (void 0 !== l.animationGroups && null !== l.animationGroups)
|
|
for (u = 0, h = l.animationGroups.length; u < h; u++) {
|
|
var K = l.animationGroups[u],
|
|
Q = Z.Parse(K, e);
|
|
a.animationGroups.push(Q), c += 0 === u ? "\n\tAnimationGroups:" : "", c += "\n\t\t" + Q.toString(d)
|
|
}
|
|
for (u = 0, h = e.cameras.length; u < h; u++) {
|
|
(Y = e.cameras[u])._waitingParentId && (Y.parent = e.getLastEntryByID(Y._waitingParentId), Y._waitingParentId = null)
|
|
}
|
|
for (u = 0, h = e.lights.length; u < h; u++) {
|
|
var q = e.lights[u];
|
|
q && q._waitingParentId && (q.parent = e.getLastEntryByID(q._waitingParentId), q._waitingParentId = null)
|
|
}
|
|
for (u = 0, h = e.transformNodes.length; u < h; u++) {
|
|
var J = e.transformNodes[u];
|
|
J._waitingParentId && (J.parent = e.getLastEntryByID(J._waitingParentId), J._waitingParentId = null)
|
|
}
|
|
for (u = 0, h = e.meshes.length; u < h; u++) {
|
|
(W = e.meshes[u])._waitingParentId && (W.parent = e.getLastEntryByID(W._waitingParentId), W._waitingParentId = null), W._waitingData.lods && es(e, W)
|
|
}
|
|
for (u = 0, h = e.skeletons.length; u < h; u++) {
|
|
(B = e.skeletons[u])._hasWaitingData && (null != B.bones && B.bones.forEach(function(t) {
|
|
if (t._waitingTransformNodeId) {
|
|
var i = e.getLastEntryByID(t._waitingTransformNodeId);
|
|
i && t.linkTransformNode(i), t._waitingTransformNodeId = null
|
|
}
|
|
}), B._hasWaitingData = null)
|
|
}
|
|
for (u = 0, h = e.meshes.length; u < h; u++) {
|
|
var $ = e.meshes[u];
|
|
$._waitingData.freezeWorldMatrix ? ($.freezeWorldMatrix(), $._waitingData.freezeWorldMatrix = null) : $.computeWorldMatrix(!0)
|
|
}
|
|
for (u = 0, h = e.lights.length; u < h; u++) {
|
|
var ee = e.lights[u];
|
|
if (ee._excludedMeshesIds.length > 0) {
|
|
for (var te = 0; te < ee._excludedMeshesIds.length; te++) {
|
|
var ie = e.getMeshByID(ee._excludedMeshesIds[te]);
|
|
ie && ee.excludedMeshes.push(ie)
|
|
}
|
|
ee._excludedMeshesIds = []
|
|
}
|
|
if (ee._includedOnlyMeshesIds.length > 0) {
|
|
for (var ne = 0; ne < ee._includedOnlyMeshesIds.length; ne++) {
|
|
var re = e.getMeshByID(ee._includedOnlyMeshesIds[ne]);
|
|
re && ee.includedOnlyMeshes.push(re)
|
|
}
|
|
ee._includedOnlyMeshesIds = []
|
|
}
|
|
}
|
|
for (n.a.Parse(l, e, a, i), u = 0, h = e.meshes.length; u < h; u++) {
|
|
(W = e.meshes[u])._waitingData.actions && (C.Parse(W._waitingData.actions, W, e), W._waitingData.actions = null)
|
|
}
|
|
void 0 !== l.actions && null !== l.actions && C.Parse(l.actions, null, e), o || a.removeAllFromScene()
|
|
} catch (e) {
|
|
var oe = $o("loadAssets", l ? l.producer : "Unknown") + c;
|
|
if (!r) throw p.a.Log(oe), e;
|
|
r(oe, e)
|
|
} finally {
|
|
null !== c && bn.loggingLevel !== bn.NO_LOGGING && p.a.Log($o("loadAssets", l ? l.producer : "Unknown") + (bn.loggingLevel !== bn.MINIMAL_LOGGING ? c : ""))
|
|
}
|
|
return a
|
|
};
|
|
bn.RegisterPlugin({
|
|
name: "babylon.js",
|
|
extensions: ".babylon",
|
|
canDirectLoad: function(e) {
|
|
return -1 !== e.indexOf("babylon")
|
|
},
|
|
importMesh: function(e, t, i, r, o, s, a, c) {
|
|
var l = "importMesh has failed JSON parse";
|
|
try {
|
|
var u = JSON.parse(i);
|
|
l = "";
|
|
var h = bn.loggingLevel === bn.DETAILED_LOGGING;
|
|
e ? Array.isArray(e) || (e = [e]) : e = null;
|
|
var d = new Array;
|
|
if (void 0 !== u.meshes && null !== u.meshes) {
|
|
var f, _, g, m = [],
|
|
v = [];
|
|
for (f = 0, _ = u.meshes.length; f < _; f++) {
|
|
var y = u.meshes[f];
|
|
if (null === e || Jo(y, e, d)) {
|
|
if (null !== e && delete e[e.indexOf(y.name)], void 0 !== y.geometryId && null !== y.geometryId && void 0 !== u.geometries && null !== u.geometries) {
|
|
var b = !1;
|
|
["boxes", "spheres", "cylinders", "toruses", "grounds", "planes", "torusKnots", "vertexData"].forEach(function(e) {
|
|
!0 !== b && u.geometries[e] && Array.isArray(u.geometries[e]) && u.geometries[e].forEach(function(i) {
|
|
if (i.id === y.geometryId) {
|
|
switch (e) {
|
|
case "vertexData":
|
|
wo.a.Parse(i, t, r)
|
|
}
|
|
b = !0
|
|
}
|
|
})
|
|
}), !1 === b && p.a.Warn("Geometry not found for mesh " + y.id)
|
|
}
|
|
if (y.materialId) {
|
|
var T = -1 !== v.indexOf(y.materialId);
|
|
if (!1 === T && void 0 !== u.multiMaterials && null !== u.multiMaterials)
|
|
for (var E = 0, A = u.multiMaterials.length; E < A; E++) {
|
|
var x = u.multiMaterials[E];
|
|
if (x.id === y.materialId) {
|
|
for (var R = 0, P = x.materials.length; R < P; R++) {
|
|
var S, C = x.materials[R];
|
|
v.push(C), (S = Zo(C, u, t, r)) && (l += "\n\tMaterial " + S.toString(h))
|
|
}
|
|
v.push(x.id);
|
|
var M = Fo.a.ParseMultiMaterial(x, t);
|
|
M && (T = !0, l += "\n\tMulti-Material " + M.toString(h));
|
|
break
|
|
}
|
|
}
|
|
if (!1 === T) v.push(y.materialId), (S = Zo(y.materialId, u, t, r)) ? l += "\n\tMaterial " + S.toString(h) : p.a.Warn("Material not found for mesh " + y.id)
|
|
}
|
|
if (y.skeletonId > -1 && void 0 !== u.skeletons && null !== u.skeletons)
|
|
if (!1 === m.indexOf(y.skeletonId) > -1)
|
|
for (var O = 0, I = u.skeletons.length; O < I; O++) {
|
|
var D = u.skeletons[O];
|
|
if (D.id === y.skeletonId) {
|
|
var L = He.Parse(D, t);
|
|
a.push(L), m.push(D.id), l += "\n\tSkeleton " + L.toString(h)
|
|
}
|
|
}
|
|
if (void 0 !== u.morphTargetManagers && null !== u.morphTargetManagers)
|
|
for (var w = 0, F = u.morphTargetManagers; w < F.length; w++) {
|
|
var N = F[w];
|
|
Go.Parse(N, t)
|
|
}
|
|
var B = fe.a.Parse(y, t, r);
|
|
o.push(B), l += "\n\tMesh " + B.toString(h)
|
|
}
|
|
}
|
|
for (f = 0, _ = t.meshes.length; f < _; f++)(g = t.meshes[f])._waitingParentId && (g.parent = t.getLastEntryByID(g._waitingParentId), g._waitingParentId = null), g._waitingData.lods && es(t, g);
|
|
for (f = 0, _ = t.skeletons.length; f < _; f++) {
|
|
(L = t.skeletons[f])._hasWaitingData && (null != L.bones && L.bones.forEach(function(e) {
|
|
if (e._waitingTransformNodeId) {
|
|
var i = t.getLastEntryByID(e._waitingTransformNodeId);
|
|
i && e.linkTransformNode(i), e._waitingTransformNodeId = null
|
|
}
|
|
}), L._hasWaitingData = null)
|
|
}
|
|
for (f = 0, _ = t.meshes.length; f < _; f++)(g = t.meshes[f])._waitingData.freezeWorldMatrix ? (g.freezeWorldMatrix(), g._waitingData.freezeWorldMatrix = null) : g.computeWorldMatrix(!0)
|
|
}
|
|
if (void 0 !== u.particleSystems && null !== u.particleSystems) {
|
|
var U = n.a.GetIndividualParser(Ae.a.NAME_PARTICLESYSTEM);
|
|
if (U)
|
|
for (f = 0, _ = u.particleSystems.length; f < _; f++) {
|
|
var V = u.particleSystems[f]; - 1 !== d.indexOf(V.emitterId) && s.push(U(V, t, r))
|
|
}
|
|
}
|
|
return !0
|
|
} catch (e) {
|
|
var G = $o("importMesh", u ? u.producer : "Unknown") + l;
|
|
if (!c) throw p.a.Log(G), e;
|
|
c(G, e)
|
|
} finally {
|
|
null !== l && bn.loggingLevel !== bn.NO_LOGGING && p.a.Log($o("importMesh", u ? u.producer : "Unknown") + (bn.loggingLevel !== bn.MINIMAL_LOGGING ? l : ""))
|
|
}
|
|
return !1
|
|
},
|
|
load: function(e, t, i, n) {
|
|
var r = "importScene has failed JSON parse";
|
|
try {
|
|
var s = JSON.parse(t);
|
|
if (r = "", void 0 !== s.useDelayedTextureLoading && null !== s.useDelayedTextureLoading && (e.useDelayedTextureLoading = s.useDelayedTextureLoading && !bn.ForceFullSceneLoadingForIncremental), void 0 !== s.autoClear && null !== s.autoClear && (e.autoClear = s.autoClear), void 0 !== s.clearColor && null !== s.clearColor && (e.clearColor = o.f.FromArray(s.clearColor)), void 0 !== s.ambientColor && null !== s.ambientColor && (e.ambientColor = o.e.FromArray(s.ambientColor)), void 0 !== s.gravity && null !== s.gravity && (e.gravity = o.x.FromArray(s.gravity)), s.fogMode && 0 !== s.fogMode) switch (e.fogMode = s.fogMode, e.fogColor = o.e.FromArray(s.fogColor), e.fogStart = s.fogStart, e.fogEnd = s.fogEnd, e.fogDensity = s.fogDensity, r += "\tFog mode for scene: ", e.fogMode) {
|
|
case 1:
|
|
r += "exp\n";
|
|
break;
|
|
case 2:
|
|
r += "exp2\n";
|
|
break;
|
|
case 3:
|
|
r += "linear\n"
|
|
}
|
|
if (s.physicsEnabled) {
|
|
var a;
|
|
"cannon" === s.physicsEngine ? a = new Wo : "oimo" === s.physicsEngine ? a = new Xo : "ammo" === s.physicsEngine && (a = new Qo), r = "\tPhysics engine " + (s.physicsEngine ? s.physicsEngine : "oimo") + " enabled\n";
|
|
var c = s.physicsGravity ? o.x.FromArray(s.physicsGravity) : null;
|
|
e.enablePhysics(c, a)
|
|
}
|
|
if (void 0 !== s.metadata && null !== s.metadata && (e.metadata = s.metadata), void 0 !== s.collisionsEnabled && null !== s.collisionsEnabled && (e.collisionsEnabled = s.collisionsEnabled), !ts(e, t, i, n, !0)) return !1;
|
|
if (s.autoAnimate && e.beginAnimation(e, s.autoAnimateFrom, s.autoAnimateTo, s.autoAnimateLoop, s.autoAnimateSpeed || 1), void 0 !== s.activeCameraID && null !== s.activeCameraID && e.setActiveCameraByID(s.activeCameraID), void 0 !== s.environmentTexture && null !== s.environmentTexture) {
|
|
var l = void 0 === s.isPBR || s.isPBR;
|
|
if (s.environmentTextureType && "BABYLON.HDRCubeTexture" === s.environmentTextureType) {
|
|
var u = s.environmentTextureSize ? s.environmentTextureSize : 128,
|
|
h = new Uo(i + s.environmentTexture, e, u, !0, !l);
|
|
s.environmentTextureRotationY && (h.rotationY = s.environmentTextureRotationY), e.environmentTexture = h
|
|
} else if (ye.h.EndsWith(s.environmentTexture, ".env")) {
|
|
var d = new tr(i + s.environmentTexture, e);
|
|
s.environmentTextureRotationY && (d.rotationY = s.environmentTextureRotationY), e.environmentTexture = d
|
|
} else {
|
|
var f = tr.CreateFromPrefilteredData(i + s.environmentTexture, e);
|
|
s.environmentTextureRotationY && (f.rotationY = s.environmentTextureRotationY), e.environmentTexture = f
|
|
}
|
|
if (!0 === s.createDefaultSkybox) {
|
|
var _ = void 0 !== e.activeCamera && null !== e.activeCamera ? (e.activeCamera.maxZ - e.activeCamera.minZ) / 2 : 1e3,
|
|
g = s.skyboxBlurLevel || 0;
|
|
e.createDefaultSkybox(e.environmentTexture, l, _, g)
|
|
}
|
|
}
|
|
return !0
|
|
} catch (e) {
|
|
var m = $o("importScene", s ? s.producer : "Unknown") + r;
|
|
if (!n) throw p.a.Log(m), e;
|
|
n(m, e)
|
|
} finally {
|
|
null !== r && bn.loggingLevel !== bn.NO_LOGGING && p.a.Log($o("importScene", s ? s.producer : "Unknown") + (bn.loggingLevel !== bn.MINIMAL_LOGGING ? r : ""))
|
|
}
|
|
return !1
|
|
},
|
|
loadAssetContainer: function(e, t, i, n) {
|
|
return ts(e, t, i, n)
|
|
}
|
|
});
|
|
var is = i(93),
|
|
ns = function() {
|
|
function e() {
|
|
this._isEnabled = !0, this.leftColor = o.e.White(), this.rightColor = o.e.Black(), this.bias = 0, this.power = 1
|
|
}
|
|
return Object.defineProperty(e.prototype, "isEnabled", {
|
|
get: function() {
|
|
return this._isEnabled
|
|
},
|
|
set: function(e) {
|
|
this._isEnabled !== e && (this._isEnabled = e, ge.b.MarkAllMaterialsAsDirty(_.a.MATERIAL_FresnelDirtyFlag | _.a.MATERIAL_MiscDirtyFlag))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.clone = function() {
|
|
var t = new e;
|
|
return S.a.DeepCopy(this, t), t
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.isEnabled = this.isEnabled, e.leftColor = this.leftColor.asArray(), e.rightColor = this.rightColor.asArray(), e.bias = this.bias, e.power = this.power, e
|
|
}, e.Parse = function(t) {
|
|
var i = new e;
|
|
return i.isEnabled = t.isEnabled, i.leftColor = o.e.FromArray(t.leftColor), i.rightColor = o.e.FromArray(t.rightColor), i.bias = t.bias, i.power = t.power || 1, i
|
|
}, e
|
|
}();
|
|
L.a._FresnelParametersParser = ns.Parse;
|
|
var rs = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i) || this;
|
|
return n.maxSimultaneousLights = 4, n.disableLighting = !1, n.invertNormalMapX = !1, n.invertNormalMapY = !1, n.emissiveColor = new o.e(0, 0, 0), n.occlusionStrength = 1, n.useLightmapAsShadowmap = !1, n._useAlphaFromAlbedoTexture = !0, n._useAmbientInGrayScale = !0, n
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "doubleSided", {
|
|
get: function() {
|
|
return this._twoSidedLighting
|
|
},
|
|
set: function(e) {
|
|
this._twoSidedLighting !== e && (this._twoSidedLighting = e, this.backFaceCulling = !e, this._markAllSubMeshesAsTexturesDirty())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "PBRBaseSimpleMaterial"
|
|
}, l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsLightsDirty")], t.prototype, "maxSimultaneousLights", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsLightsDirty")], t.prototype, "disableLighting", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_reflectionTexture")], t.prototype, "environmentTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "invertNormalMapX", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "invertNormalMapY", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_bumpTexture")], t.prototype, "normalTexture", void 0), l.c([Object(L.e)("emissive"), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "emissiveColor", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "emissiveTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_ambientTextureStrength")], t.prototype, "occlusionStrength", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_ambientTexture")], t.prototype, "occlusionTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_alphaCutOff")], t.prototype, "alphaCutOff", void 0), l.c([Object(L.c)()], t.prototype, "doubleSided", null), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", null)], t.prototype, "lightmapTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "useLightmapAsShadowmap", void 0), t
|
|
}(Gr),
|
|
os = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i) || this;
|
|
return n._useRoughnessFromMetallicTextureAlpha = !1, n._useRoughnessFromMetallicTextureGreen = !0, n._useMetallnessFromMetallicTextureBlue = !0, n.metallic = 1, n.roughness = 1, n
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "PBRMetallicRoughnessMaterial"
|
|
}, t.prototype.clone = function(e) {
|
|
var i = this,
|
|
n = L.a.Clone(function() {
|
|
return new t(e, i.getScene())
|
|
}, this);
|
|
return n.id = e, n.name = e, this.clearCoat.copyTo(n.clearCoat), this.anisotropy.copyTo(n.anisotropy), this.brdf.copyTo(n.brdf), this.sheen.copyTo(n.sheen), n
|
|
}, t.prototype.serialize = function() {
|
|
var e = L.a.Serialize(this);
|
|
return e.customType = "BABYLON.PBRMetallicRoughnessMaterial", e.clearCoat = this.clearCoat.serialize(), e.anisotropy = this.anisotropy.serialize(), e.brdf = this.brdf.serialize(), e.sheen = this.sheen.serialize(), e
|
|
}, t.Parse = function(e, i, n) {
|
|
var r = L.a.Parse(function() {
|
|
return new t(e.name, i)
|
|
}, e, i, n);
|
|
return e.clearCoat && r.clearCoat.parse(e.clearCoat), e.anisotropy && r.anisotropy.parse(e.anisotropy), e.brdf && r.brdf.parse(e.brdf), e.sheen && r.sheen.parse(e.brdf), r
|
|
}, l.c([Object(L.e)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_albedoColor")], t.prototype, "baseColor", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_albedoTexture")], t.prototype, "baseTexture", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "metallic", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty")], t.prototype, "roughness", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_metallicTexture")], t.prototype, "metallicRoughnessTexture", void 0), t
|
|
}(rs);
|
|
s.a.RegisteredTypes["BABYLON.PBRMetallicRoughnessMaterial"] = os;
|
|
var ss = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i) || this;
|
|
return n._useMicroSurfaceFromReflectivityMapAlpha = !0, n
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "PBRSpecularGlossinessMaterial"
|
|
}, t.prototype.clone = function(e) {
|
|
var i = this,
|
|
n = L.a.Clone(function() {
|
|
return new t(e, i.getScene())
|
|
}, this);
|
|
return n.id = e, n.name = e, this.clearCoat.copyTo(n.clearCoat), this.anisotropy.copyTo(n.anisotropy), this.brdf.copyTo(n.brdf), this.sheen.copyTo(n.sheen), n
|
|
}, t.prototype.serialize = function() {
|
|
var e = L.a.Serialize(this);
|
|
return e.customType = "BABYLON.PBRSpecularGlossinessMaterial", e.clearCoat = this.clearCoat.serialize(), e.anisotropy = this.anisotropy.serialize(), e.brdf = this.brdf.serialize(), e.sheen = this.sheen.serialize(), e
|
|
}, t.Parse = function(e, i, n) {
|
|
var r = L.a.Parse(function() {
|
|
return new t(e.name, i)
|
|
}, e, i, n);
|
|
return e.clearCoat && r.clearCoat.parse(e.clearCoat), e.anisotropy && r.anisotropy.parse(e.anisotropy), e.brdf && r.brdf.parse(e.brdf), e.sheen && r.sheen.parse(e.brdf), r
|
|
}, l.c([Object(L.e)("diffuse"), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_albedoColor")], t.prototype, "diffuseColor", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_albedoTexture")], t.prototype, "diffuseTexture", void 0), l.c([Object(L.e)("specular"), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_reflectivityColor")], t.prototype, "specularColor", void 0), l.c([Object(L.c)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_microSurface")], t.prototype, "glossiness", void 0), l.c([Object(L.m)(), Object(L.b)("_markAllSubMeshesAsTexturesDirty", "_reflectivityTexture")], t.prototype, "specularGlossinessTexture", void 0), t
|
|
}(rs);
|
|
s.a.RegisteredTypes["BABYLON.PBRSpecularGlossinessMaterial"] = ss;
|
|
var as = i(76),
|
|
cs = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, i) || this;
|
|
return t ? (n._engine = i.getEngine(), n._textureMatrix = o.j.Identity(), n.name = t, n.url = t, n.hasAlpha = !1, n.isCube = !1, n.is3D = n._engine.webGLVersion > 1, n.wrapU = _.a.TEXTURE_CLAMP_ADDRESSMODE, n.wrapV = _.a.TEXTURE_CLAMP_ADDRESSMODE, n.wrapR = _.a.TEXTURE_CLAMP_ADDRESSMODE, n.anisotropicFilteringLevel = 1, n._texture = n._getFromCache(t, !0), n._texture || (i.useDelayedTextureLoading ? n.delayLoadState = _.a.DELAYLOADSTATE_NOTLOADED : n.loadTexture()), n) : n
|
|
}
|
|
return l.d(t, e), t.prototype.getTextureMatrix = function() {
|
|
return this._textureMatrix
|
|
}, t.prototype.load3dlTexture = function() {
|
|
var e, i = this._engine;
|
|
e = 1 === i.webGLVersion ? i.createRawTexture(null, 1, 1, _.a.TEXTUREFORMAT_RGBA, !1, !1, _.a.TEXTURE_BILINEAR_SAMPLINGMODE) : i.createRawTexture3D(null, 1, 1, 1, _.a.TEXTUREFORMAT_RGBA, !1, !1, _.a.TEXTURE_BILINEAR_SAMPLINGMODE), this._texture = e;
|
|
var n = function(n) {
|
|
if ("string" == typeof n) {
|
|
for (var r, o = null, s = null, a = n.split("\n"), c = 0, l = 0, u = 0, h = 0, d = 0, f = 0; f < a.length; f++)
|
|
if (r = a[f], t._noneEmptyLineRegex.test(r) && 0 !== r.indexOf("#")) {
|
|
var p = r.split(" ");
|
|
if (0 !== c) {
|
|
if (0 != c) {
|
|
var g = Math.max(parseInt(p[0]), 0),
|
|
m = Math.max(parseInt(p[1]), 0),
|
|
v = Math.max(parseInt(p[2]), 0);
|
|
d = Math.max(g, d), d = Math.max(m, d), d = Math.max(v, d);
|
|
var y = 4 * (l + h * c + u * c * c);
|
|
s && (s[y + 0] = g, s[y + 1] = m, s[y + 2] = v), ++u % c == 0 && (u = 0, ++h % c == 0 && (l++, h = 0))
|
|
}
|
|
} else c = p.length, o = new Uint8Array(c * c * c * 4), s = new Float32Array(c * c * c * 4)
|
|
} if (s && o)
|
|
for (f = 0; f < s.length; f++)
|
|
if (f > 0 && (f + 1) % 4 == 0) o[f] = 255;
|
|
else {
|
|
var b = s[f];
|
|
o[f] = b / d * 255
|
|
} e.is3D ? (e.updateSize(c, c, c), i.updateRawTexture3D(e, o, _.a.TEXTUREFORMAT_RGBA, !1)) : (e.updateSize(c * c, c), i.updateRawTexture(e, o, _.a.TEXTUREFORMAT_RGBA, !1))
|
|
}
|
|
},
|
|
r = this.getScene();
|
|
return r ? r._loadFile(this.url, n) : this._engine._loadFile(this.url, n), this._texture
|
|
}, t.prototype.loadTexture = function() {
|
|
this.url && this.url.toLocaleLowerCase().indexOf(".3dl") == this.url.length - 4 && this.load3dlTexture()
|
|
}, t.prototype.clone = function() {
|
|
var e = new t(this.url, this.getScene());
|
|
return e.level = this.level, e
|
|
}, t.prototype.delayLoad = function() {
|
|
this.delayLoadState === _.a.DELAYLOADSTATE_NOTLOADED && (this.delayLoadState = _.a.DELAYLOADSTATE_LOADED, this._texture = this._getFromCache(this.url, !0), this._texture || this.loadTexture())
|
|
}, t.Parse = function(e, i) {
|
|
var n = null;
|
|
return e.name && !e.isRenderTarget && ((n = new t(e.name, i)).name = e.name, n.level = e.level), n
|
|
}, t.prototype.serialize = function() {
|
|
if (!this.name) return null;
|
|
var e = {};
|
|
return e.name = this.name, e.level = this.level, e.customType = "BABYLON.ColorGradingTexture", e
|
|
}, t._noneEmptyLineRegex = /\S+/, t
|
|
}(Kn.a);
|
|
s.a.RegisteredTypes["BABYLON.ColorGradingTexture"] = cs;
|
|
var ls = function(e) {
|
|
function t(t, i, n, r, o, s, a) {
|
|
void 0 === r && (r = !1), void 0 === o && (o = !0), void 0 === s && (s = null), void 0 === a && (a = null);
|
|
var c = e.call(this, i) || this;
|
|
if (c._onLoad = null, c._onError = null, c.coordinatesMode = ke.a.CUBIC_MODE, !t) throw new Error("Image url is not set");
|
|
return c.name = t, c.url = t, c._size = n, c._noMipmap = r, c.gammaSpace = o, c._onLoad = s, c._onError = a, c.hasAlpha = !1, c.isCube = !0, c._texture = c._getFromCache(t, c._noMipmap), c._texture ? s && (c._texture.isReady ? ye.h.SetImmediate(function() {
|
|
return s()
|
|
}) : c._texture.onLoadedObservable.add(s)) : i.useDelayedTextureLoading ? c.delayLoadState = ge.b.DELAYLOADSTATE_NOTLOADED : c.loadImage(c.loadTexture.bind(c), c._onError), c
|
|
}
|
|
return l.d(t, e), t.prototype.loadImage = function(e, t) {
|
|
var i = this,
|
|
n = document.createElement("canvas"),
|
|
r = new Image;
|
|
r.addEventListener("load", function() {
|
|
i._width = r.width, i._height = r.height, n.width = i._width, n.height = i._height;
|
|
var t = n.getContext("2d");
|
|
t.drawImage(r, 0, 0);
|
|
var o = t.getImageData(0, 0, r.width, r.height);
|
|
i._buffer = o.data.buffer, n.remove(), e()
|
|
}), r.addEventListener("error", function(e) {
|
|
t && t(i.getClassName() + " could not be loaded", e)
|
|
}), r.src = this.url
|
|
}, t.prototype.loadTexture = function() {
|
|
var e = this,
|
|
i = this.getScene();
|
|
i && (this._texture = i.getEngine().createRawCubeTextureFromUrl(this.url, i, this._size, ge.b.TEXTUREFORMAT_RGB, i.getEngine().getCaps().textureFloat ? ge.b.TEXTURETYPE_FLOAT : ge.b.TEXTURETYPE_UNSIGNED_INTEGER, this._noMipmap, function() {
|
|
for (var i = e.getFloat32ArrayFromArrayBuffer(e._buffer), n = No.ConvertPanoramaToCubemap(i, e._width, e._height, e._size), r = [], o = 0; o < 6; o++) {
|
|
var s = n[t._FacesMapping[o]];
|
|
r.push(s)
|
|
}
|
|
return r
|
|
}, null, this._onLoad, this._onError))
|
|
}, t.prototype.getFloat32ArrayFromArrayBuffer = function(e) {
|
|
for (var t = new DataView(e), i = new Float32Array(3 * e.byteLength / 4), n = 0, r = 0; r < e.byteLength; r++)(r + 1) % 4 != 0 && (i[n++] = t.getUint8(r) / 255);
|
|
return i
|
|
}, t.prototype.getClassName = function() {
|
|
return "EquiRectangularCubeTexture"
|
|
}, t.prototype.clone = function() {
|
|
var e = this.getScene();
|
|
if (!e) return this;
|
|
var i = new t(this.url, e, this._size, this._noMipmap, this.gammaSpace);
|
|
return i.level = this.level, i.wrapU = this.wrapU, i.wrapV = this.wrapV, i.coordinatesIndex = this.coordinatesIndex, i.coordinatesMode = this.coordinatesMode, i
|
|
}, t._FacesMapping = ["right", "left", "up", "down", "front", "back"], t
|
|
}(Kn.a),
|
|
us = function() {
|
|
function e() {}
|
|
return e.GetTGAHeader = function(e) {
|
|
var t = 0;
|
|
return {
|
|
id_length: e[t++],
|
|
colormap_type: e[t++],
|
|
image_type: e[t++],
|
|
colormap_index: e[t++] | e[t++] << 8,
|
|
colormap_length: e[t++] | e[t++] << 8,
|
|
colormap_size: e[t++],
|
|
origin: [e[t++] | e[t++] << 8, e[t++] | e[t++] << 8],
|
|
width: e[t++] | e[t++] << 8,
|
|
height: e[t++] | e[t++] << 8,
|
|
pixel_size: e[t++],
|
|
flags: e[t++]
|
|
}
|
|
}, e.UploadContent = function(t, i) {
|
|
if (i.length < 19) p.a.Error("Unable to load TGA file - Not enough data to contain header");
|
|
else {
|
|
var n = 18,
|
|
r = e.GetTGAHeader(i);
|
|
if (r.id_length + n > i.length) p.a.Error("Unable to load TGA file - Not enough data");
|
|
else {
|
|
n += r.id_length;
|
|
var o, s = !1,
|
|
a = !1,
|
|
c = !1;
|
|
switch (r.image_type) {
|
|
case e._TYPE_RLE_INDEXED:
|
|
s = !0;
|
|
case e._TYPE_INDEXED:
|
|
a = !0;
|
|
break;
|
|
case e._TYPE_RLE_RGB:
|
|
s = !0;
|
|
case e._TYPE_RGB:
|
|
break;
|
|
case e._TYPE_RLE_GREY:
|
|
s = !0;
|
|
case e._TYPE_GREY:
|
|
c = !0
|
|
}
|
|
var l, u, h, d, f, _, g, m = r.pixel_size >> 3,
|
|
v = r.width * r.height * m;
|
|
if (a && (l = i.subarray(n, n += r.colormap_length * (r.colormap_size >> 3))), s) {
|
|
var y, b, T;
|
|
o = new Uint8Array(v);
|
|
for (var E = 0, A = new Uint8Array(m); n < v && E < v;)
|
|
if (b = 1 + (127 & (y = i[n++])), 128 & y) {
|
|
for (T = 0; T < m; ++T) A[T] = i[n++];
|
|
for (T = 0; T < b; ++T) o.set(A, E + T * m);
|
|
E += m * b
|
|
} else {
|
|
for (b *= m, T = 0; T < b; ++T) o[E + T] = i[n++];
|
|
E += b
|
|
}
|
|
} else o = i.subarray(n, n += a ? r.width * r.height : v);
|
|
switch ((r.flags & e._ORIGIN_MASK) >> e._ORIGIN_SHIFT) {
|
|
default:
|
|
case e._ORIGIN_UL:
|
|
u = 0, d = 1, g = r.width, h = 0, f = 1, _ = r.height;
|
|
break;
|
|
case e._ORIGIN_BL:
|
|
u = 0, d = 1, g = r.width, h = r.height - 1, f = -1, _ = -1;
|
|
break;
|
|
case e._ORIGIN_UR:
|
|
u = r.width - 1, d = -1, g = -1, h = 0, f = 1, _ = r.height;
|
|
break;
|
|
case e._ORIGIN_BR:
|
|
u = r.width - 1, d = -1, g = -1, h = r.height - 1, f = -1, _ = -1
|
|
}
|
|
var x = e["_getImageData" + (c ? "Grey" : "") + r.pixel_size + "bits"](r, l, o, h, f, _, u, d, g);
|
|
t.getEngine()._uploadDataToTextureDirectly(t, x)
|
|
}
|
|
}
|
|
}, e._getImageData8bits = function(e, t, i, n, r, o, s, a, c) {
|
|
var l, u, h, d = i,
|
|
f = t,
|
|
p = e.width,
|
|
_ = e.height,
|
|
g = 0,
|
|
m = new Uint8Array(p * _ * 4);
|
|
for (h = n; h !== o; h += r)
|
|
for (u = s; u !== c; u += a, g++) l = d[g], m[4 * (u + p * h) + 3] = 255, m[4 * (u + p * h) + 2] = f[3 * l + 0], m[4 * (u + p * h) + 1] = f[3 * l + 1], m[4 * (u + p * h) + 0] = f[3 * l + 2];
|
|
return m
|
|
}, e._getImageData16bits = function(e, t, i, n, r, o, s, a, c) {
|
|
var l, u, h, d = i,
|
|
f = e.width,
|
|
p = e.height,
|
|
_ = 0,
|
|
g = new Uint8Array(f * p * 4);
|
|
for (h = n; h !== o; h += r)
|
|
for (u = s; u !== c; u += a, _ += 2) {
|
|
var m = 255 * ((31744 & (l = d[_ + 0] + (d[_ + 1] << 8))) >> 10) / 31 | 0,
|
|
v = 255 * ((992 & l) >> 5) / 31 | 0,
|
|
y = 255 * (31 & l) / 31 | 0;
|
|
g[4 * (u + f * h) + 0] = m, g[4 * (u + f * h) + 1] = v, g[4 * (u + f * h) + 2] = y, g[4 * (u + f * h) + 3] = 32768 & l ? 0 : 255
|
|
}
|
|
return g
|
|
}, e._getImageData24bits = function(e, t, i, n, r, o, s, a, c) {
|
|
var l, u, h = i,
|
|
d = e.width,
|
|
f = e.height,
|
|
p = 0,
|
|
_ = new Uint8Array(d * f * 4);
|
|
for (u = n; u !== o; u += r)
|
|
for (l = s; l !== c; l += a, p += 3) _[4 * (l + d * u) + 3] = 255, _[4 * (l + d * u) + 2] = h[p + 0], _[4 * (l + d * u) + 1] = h[p + 1], _[4 * (l + d * u) + 0] = h[p + 2];
|
|
return _
|
|
}, e._getImageData32bits = function(e, t, i, n, r, o, s, a, c) {
|
|
var l, u, h = i,
|
|
d = e.width,
|
|
f = e.height,
|
|
p = 0,
|
|
_ = new Uint8Array(d * f * 4);
|
|
for (u = n; u !== o; u += r)
|
|
for (l = s; l !== c; l += a, p += 4) _[4 * (l + d * u) + 2] = h[p + 0], _[4 * (l + d * u) + 1] = h[p + 1], _[4 * (l + d * u) + 0] = h[p + 2], _[4 * (l + d * u) + 3] = h[p + 3];
|
|
return _
|
|
}, e._getImageDataGrey8bits = function(e, t, i, n, r, o, s, a, c) {
|
|
var l, u, h, d = i,
|
|
f = e.width,
|
|
p = e.height,
|
|
_ = 0,
|
|
g = new Uint8Array(f * p * 4);
|
|
for (h = n; h !== o; h += r)
|
|
for (u = s; u !== c; u += a, _++) l = d[_], g[4 * (u + f * h) + 0] = l, g[4 * (u + f * h) + 1] = l, g[4 * (u + f * h) + 2] = l, g[4 * (u + f * h) + 3] = 255;
|
|
return g
|
|
}, e._getImageDataGrey16bits = function(e, t, i, n, r, o, s, a, c) {
|
|
var l, u, h = i,
|
|
d = e.width,
|
|
f = e.height,
|
|
p = 0,
|
|
_ = new Uint8Array(d * f * 4);
|
|
for (u = n; u !== o; u += r)
|
|
for (l = s; l !== c; l += a, p += 2) _[4 * (l + d * u) + 0] = h[p + 0], _[4 * (l + d * u) + 1] = h[p + 0], _[4 * (l + d * u) + 2] = h[p + 0], _[4 * (l + d * u) + 3] = h[p + 1];
|
|
return _
|
|
}, e._TYPE_INDEXED = 1, e._TYPE_RGB = 2, e._TYPE_GREY = 3, e._TYPE_RLE_INDEXED = 9, e._TYPE_RLE_RGB = 10, e._TYPE_RLE_GREY = 11, e._ORIGIN_MASK = 48, e._ORIGIN_SHIFT = 4, e._ORIGIN_BL = 0, e._ORIGIN_BR = 1, e._ORIGIN_UL = 2, e._ORIGIN_UR = 3, e
|
|
}(),
|
|
hs = function() {
|
|
function e() {
|
|
this.supportCascades = !1
|
|
}
|
|
return e.prototype.canLoad = function(e, t, i, n, r) {
|
|
return 0 === e.indexOf(".tga")
|
|
}, e.prototype.transformUrl = function(e, t) {
|
|
return e
|
|
}, e.prototype.getFallbackTextureUrl = function(e, t) {
|
|
return null
|
|
}, e.prototype.loadCubeData = function(e, t, i, n, r) {
|
|
throw ".env not supported in Cube."
|
|
}, e.prototype.loadData = function(e, t, i) {
|
|
var n = new Uint8Array(e),
|
|
r = us.GetTGAHeader(n);
|
|
i(r.width, r.height, t.generateMipMaps, !1, function() {
|
|
us.UploadContent(t, n)
|
|
})
|
|
}, e
|
|
}();
|
|
ge.b._TextureLoaders.push(new hs), ge.b.prototype.unBindMultiColorAttachmentFramebuffer = function(e, t, i) {
|
|
void 0 === t && (t = !1), this._currentRenderTarget = null;
|
|
var n = this._gl;
|
|
if (e[0]._MSAAFramebuffer) {
|
|
n.bindFramebuffer(n.READ_FRAMEBUFFER, e[0]._MSAAFramebuffer), n.bindFramebuffer(n.DRAW_FRAMEBUFFER, e[0]._framebuffer);
|
|
var r = e[0]._attachments;
|
|
r || (r = new Array(e.length), e[0]._attachments = r);
|
|
for (var o = 0; o < e.length; o++) {
|
|
for (var s = e[o], a = 0; a < r.length; a++) r[a] = n.NONE;
|
|
r[o] = n[this.webGLVersion > 1 ? "COLOR_ATTACHMENT" + o : "COLOR_ATTACHMENT" + o + "_WEBGL"], n.readBuffer(r[o]), n.drawBuffers(r), n.blitFramebuffer(0, 0, s.width, s.height, 0, 0, s.width, s.height, n.COLOR_BUFFER_BIT, n.NEAREST)
|
|
}
|
|
for (o = 0; o < r.length; o++) r[o] = n[this.webGLVersion > 1 ? "COLOR_ATTACHMENT" + o : "COLOR_ATTACHMENT" + o + "_WEBGL"];
|
|
n.drawBuffers(r)
|
|
}
|
|
for (o = 0; o < e.length; o++) {
|
|
!(s = e[o]).generateMipMaps || t || s.isCube || (this._bindTextureDirectly(n.TEXTURE_2D, s), n.generateMipmap(n.TEXTURE_2D), this._bindTextureDirectly(n.TEXTURE_2D, null))
|
|
}
|
|
i && (e[0]._MSAAFramebuffer && this._bindUnboundFramebuffer(e[0]._framebuffer), i()), this._bindUnboundFramebuffer(null)
|
|
}, ge.b.prototype.createMultipleRenderTarget = function(e, t) {
|
|
var i = !1,
|
|
n = !0,
|
|
r = !1,
|
|
o = !1,
|
|
s = 1,
|
|
a = ge.b.TEXTURETYPE_UNSIGNED_INT,
|
|
c = ge.b.TEXTURE_TRILINEAR_SAMPLINGMODE,
|
|
l = new Array,
|
|
u = new Array;
|
|
void 0 !== t && (i = void 0 !== t.generateMipMaps && t.generateMipMaps, n = void 0 === t.generateDepthBuffer || t.generateDepthBuffer, r = void 0 !== t.generateStencilBuffer && t.generateStencilBuffer, o = void 0 !== t.generateDepthTexture && t.generateDepthTexture, s = t.textureCount || 1, t.types && (l = t.types), t.samplingModes && (u = t.samplingModes));
|
|
var h = this._gl,
|
|
d = h.createFramebuffer();
|
|
this._bindUnboundFramebuffer(d);
|
|
for (var f = e.width || e, _ = e.height || e, g = [], m = [], v = this._setupFramebufferDepthAttachments(r, n, f, _), y = 0; y < s; y++) {
|
|
var b = u[y] || c,
|
|
T = l[y] || a;
|
|
(T !== ge.b.TEXTURETYPE_FLOAT || this._caps.textureFloatLinearFiltering) && (T !== ge.b.TEXTURETYPE_HALF_FLOAT || this._caps.textureHalfFloatLinearFiltering) || (b = ge.b.TEXTURE_NEAREST_SAMPLINGMODE);
|
|
var E = this._getSamplingParameters(b, i);
|
|
T !== ge.b.TEXTURETYPE_FLOAT || this._caps.textureFloat || (T = ge.b.TEXTURETYPE_UNSIGNED_INT, p.a.Warn("Float textures are not supported. Render target forced to TEXTURETYPE_UNSIGNED_BYTE type"));
|
|
var A = new ze.a(this, ze.a.DATASOURCE_MULTIRENDERTARGET),
|
|
x = h[this.webGLVersion > 1 ? "COLOR_ATTACHMENT" + y : "COLOR_ATTACHMENT" + y + "_WEBGL"];
|
|
g.push(A), m.push(x), h.activeTexture(h["TEXTURE" + y]), h.bindTexture(h.TEXTURE_2D, A._webGLTexture), h.texParameteri(h.TEXTURE_2D, h.TEXTURE_MAG_FILTER, E.mag), h.texParameteri(h.TEXTURE_2D, h.TEXTURE_MIN_FILTER, E.min), h.texParameteri(h.TEXTURE_2D, h.TEXTURE_WRAP_S, h.CLAMP_TO_EDGE), h.texParameteri(h.TEXTURE_2D, h.TEXTURE_WRAP_T, h.CLAMP_TO_EDGE), h.texImage2D(h.TEXTURE_2D, 0, this._getRGBABufferInternalSizedFormat(T), f, _, 0, h.RGBA, this._getWebGLTextureType(T), null), h.framebufferTexture2D(h.DRAW_FRAMEBUFFER, x, h.TEXTURE_2D, A._webGLTexture, 0), i && this._gl.generateMipmap(this._gl.TEXTURE_2D), this._bindTextureDirectly(h.TEXTURE_2D, null), A._framebuffer = d, A._depthStencilBuffer = v, A.baseWidth = f, A.baseHeight = _, A.width = f, A.height = _, A.isReady = !0, A.samples = 1, A.generateMipMaps = i, A.samplingMode = b, A.type = T, A._generateDepthBuffer = n, A._generateStencilBuffer = r, A._attachments = m, this._internalTexturesCache.push(A)
|
|
}
|
|
if (o && this._caps.depthTextureExtension) {
|
|
var R = new ze.a(this, ze.a.DATASOURCE_MULTIRENDERTARGET);
|
|
h.activeTexture(h.TEXTURE0), h.bindTexture(h.TEXTURE_2D, R._webGLTexture), h.texParameteri(h.TEXTURE_2D, h.TEXTURE_MAG_FILTER, h.NEAREST), h.texParameteri(h.TEXTURE_2D, h.TEXTURE_MIN_FILTER, h.NEAREST), h.texParameteri(h.TEXTURE_2D, h.TEXTURE_WRAP_S, h.CLAMP_TO_EDGE), h.texParameteri(h.TEXTURE_2D, h.TEXTURE_WRAP_T, h.CLAMP_TO_EDGE), h.texImage2D(h.TEXTURE_2D, 0, this.webGLVersion < 2 ? h.DEPTH_COMPONENT : h.DEPTH_COMPONENT16, f, _, 0, h.DEPTH_COMPONENT, h.UNSIGNED_SHORT, null), h.framebufferTexture2D(h.FRAMEBUFFER, h.DEPTH_ATTACHMENT, h.TEXTURE_2D, R._webGLTexture, 0), R._framebuffer = d, R.baseWidth = f, R.baseHeight = _, R.width = f, R.height = _, R.isReady = !0, R.samples = 1, R.generateMipMaps = i, R.samplingMode = h.NEAREST, R._generateDepthBuffer = n, R._generateStencilBuffer = r, g.push(R), this._internalTexturesCache.push(R)
|
|
}
|
|
return h.drawBuffers(m), h.bindRenderbuffer(h.RENDERBUFFER, null), this._bindUnboundFramebuffer(null), this.resetTextureCache(), g
|
|
}, ge.b.prototype.updateMultipleRenderTargetTextureSampleCount = function(e, t) {
|
|
if (this.webGLVersion < 2 || !e || 0 == e.length) return 1;
|
|
if (e[0].samples === t) return t;
|
|
var i = this._gl;
|
|
t = Math.min(t, i.getParameter(i.MAX_SAMPLES)), e[0]._depthStencilBuffer && (i.deleteRenderbuffer(e[0]._depthStencilBuffer), e[0]._depthStencilBuffer = null), e[0]._MSAAFramebuffer && (i.deleteFramebuffer(e[0]._MSAAFramebuffer), e[0]._MSAAFramebuffer = null);
|
|
for (var n = 0; n < e.length; n++) e[n]._MSAARenderBuffer && (i.deleteRenderbuffer(e[n]._MSAARenderBuffer), e[n]._MSAARenderBuffer = null);
|
|
if (t > 1) {
|
|
var r = i.createFramebuffer();
|
|
if (!r) throw new Error("Unable to create multi sampled framebuffer");
|
|
this._bindUnboundFramebuffer(r);
|
|
var o = this._setupFramebufferDepthAttachments(e[0]._generateStencilBuffer, e[0]._generateDepthBuffer, e[0].width, e[0].height, t),
|
|
s = [];
|
|
for (n = 0; n < e.length; n++) {
|
|
var a = e[n],
|
|
c = i[this.webGLVersion > 1 ? "COLOR_ATTACHMENT" + n : "COLOR_ATTACHMENT" + n + "_WEBGL"],
|
|
l = i.createRenderbuffer();
|
|
if (!l) throw new Error("Unable to create multi sampled framebuffer");
|
|
i.bindRenderbuffer(i.RENDERBUFFER, l), i.renderbufferStorageMultisample(i.RENDERBUFFER, t, this._getRGBAMultiSampleBufferFormat(a.type), a.width, a.height), i.framebufferRenderbuffer(i.FRAMEBUFFER, c, i.RENDERBUFFER, l), a._MSAAFramebuffer = r, a._MSAARenderBuffer = l, a.samples = t, a._depthStencilBuffer = o, i.bindRenderbuffer(i.RENDERBUFFER, null), s.push(c)
|
|
}
|
|
i.drawBuffers(s)
|
|
} else this._bindUnboundFramebuffer(e[0]._framebuffer);
|
|
return this._bindUnboundFramebuffer(null), t
|
|
};
|
|
var ds = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
var s = this,
|
|
a = !(!o || !o.generateMipMaps) && o.generateMipMaps,
|
|
c = !(!o || !o.generateDepthTexture) && o.generateDepthTexture,
|
|
l = !o || void 0 === o.doNotChangeAspectRatio || o.doNotChangeAspectRatio;
|
|
if ((s = e.call(this, t, i, r, a, l) || this)._engine = r.getEngine(), s.isSupported) {
|
|
for (var u = [], h = [], d = 0; d < n; d++) o && o.types && void 0 !== o.types[d] ? u.push(o.types[d]) : u.push(o && o.defaultType ? o.defaultType : _.a.TEXTURETYPE_UNSIGNED_INT), o && o.samplingModes && void 0 !== o.samplingModes[d] ? h.push(o.samplingModes[d]) : h.push(ke.a.BILINEAR_SAMPLINGMODE);
|
|
var f = !o || void 0 === o.generateDepthBuffer || o.generateDepthBuffer,
|
|
p = !(!o || void 0 === o.generateStencilBuffer) && o.generateStencilBuffer;
|
|
return s._size = i, s._multiRenderTargetOptions = {
|
|
samplingModes: h,
|
|
generateMipMaps: a,
|
|
generateDepthBuffer: f,
|
|
generateStencilBuffer: p,
|
|
generateDepthTexture: c,
|
|
types: u,
|
|
textureCount: n
|
|
}, s._createInternalTextures(), s._createTextures(), s
|
|
}
|
|
s.dispose()
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "isSupported", {
|
|
get: function() {
|
|
return this._engine.webGLVersion > 1 || this._engine.getCaps().drawBuffersExtension
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "textures", {
|
|
get: function() {
|
|
return this._textures
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "depthTexture", {
|
|
get: function() {
|
|
return this._textures[this._textures.length - 1]
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "wrapU", {
|
|
set: function(e) {
|
|
if (this._textures)
|
|
for (var t = 0; t < this._textures.length; t++) this._textures[t].wrapU = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "wrapV", {
|
|
set: function(e) {
|
|
if (this._textures)
|
|
for (var t = 0; t < this._textures.length; t++) this._textures[t].wrapV = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._rebuild = function() {
|
|
this.releaseInternalTextures(), this._createInternalTextures();
|
|
for (var e = 0; e < this._internalTextures.length; e++) {
|
|
this._textures[e]._texture = this._internalTextures[e]
|
|
}
|
|
this._texture = this._internalTextures[0]
|
|
}, t.prototype._createInternalTextures = function() {
|
|
this._internalTextures = this._engine.createMultipleRenderTarget(this._size, this._multiRenderTargetOptions)
|
|
}, t.prototype._createTextures = function() {
|
|
this._textures = [];
|
|
for (var e = 0; e < this._internalTextures.length; e++) {
|
|
var t = new ke.a(null, this.getScene());
|
|
t._texture = this._internalTextures[e], this._textures.push(t)
|
|
}
|
|
this._texture = this._internalTextures[0]
|
|
}, Object.defineProperty(t.prototype, "samples", {
|
|
get: function() {
|
|
return this._samples
|
|
},
|
|
set: function(e) {
|
|
this._samples !== e && (this._samples = this._engine.updateMultipleRenderTargetTextureSampleCount(this._internalTextures, e))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.resize = function(e) {
|
|
this.releaseInternalTextures(), this._internalTextures = this._engine.createMultipleRenderTarget(e, this._multiRenderTargetOptions), this._createInternalTextures()
|
|
}, t.prototype.unbindFrameBuffer = function(e, t) {
|
|
var i = this;
|
|
e.unBindMultiColorAttachmentFramebuffer(this._internalTextures, this.isCube, function() {
|
|
i.onAfterRenderObservable.notifyObservers(t)
|
|
})
|
|
}, t.prototype.dispose = function() {
|
|
this.releaseInternalTextures(), e.prototype.dispose.call(this)
|
|
}, t.prototype.releaseInternalTextures = function() {
|
|
if (this._internalTextures)
|
|
for (var e = this._internalTextures.length - 1; e >= 0; e--) void 0 !== this._internalTextures[e] && (this._internalTextures[e].dispose(), this._internalTextures.splice(e, 1))
|
|
}, t
|
|
}(_i),
|
|
fs = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_PROCEDURALTEXTURE, this.scene = e, this.scene.proceduralTextures = new Array, e.layers = new Array
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._beforeClearStage.registerStep(Ae.a.STEP_BEFORECLEAR_PROCEDURALTEXTURE, this, this._beforeClear)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.dispose = function() {}, e.prototype._beforeClear = function() {
|
|
if (this.scene.proceduralTexturesEnabled) {
|
|
ye.h.StartPerformanceCounter("Procedural textures", this.scene.proceduralTextures.length > 0);
|
|
for (var e = 0; e < this.scene.proceduralTextures.length; e++) {
|
|
var t = this.scene.proceduralTextures[e];
|
|
t._shouldRender() && t.render()
|
|
}
|
|
ye.h.EndPerformanceCounter("Procedural textures", this.scene.proceduralTextures.length > 0)
|
|
}
|
|
}, e
|
|
}(),
|
|
ps = "\nattribute vec2 position;\n\nvarying vec2 vPosition;\nvarying vec2 vUV;\nconst vec2 madd=vec2(0.5,0.5);\nvoid main(void) {\nvPosition=position;\nvUV=position*madd+madd;\ngl_Position=vec4(position,0.0,1.0);\n}";
|
|
zt.a.ShadersStore.proceduralVertexShader = ps;
|
|
var _s = function(e) {
|
|
function t(t, i, n, o, s, a, c) {
|
|
void 0 === s && (s = null), void 0 === a && (a = !0), void 0 === c && (c = !1);
|
|
var l = e.call(this, null, o, !a) || this;
|
|
l.isCube = c, l.isEnabled = !0, l.autoClear = !0, l.onGeneratedObservable = new r.c, l._textures = {}, l._currentRefreshId = -1, l._refreshRate = 1, l._vertexBuffers = {}, l._uniforms = new Array, l._samplers = new Array, l._floats = {}, l._ints = {}, l._floatsArrays = {}, l._colors3 = {}, l._colors4 = {}, l._vectors2 = {}, l._vectors3 = {}, l._matrices = {}, l._fallbackTextureUsed = !1, l._cachedDefines = "", l._contentUpdateId = -1;
|
|
var u = (o = l.getScene())._getComponent(Ae.a.NAME_PROCEDURALTEXTURE);
|
|
u || (u = new fs(o), o._addComponent(u)), o.proceduralTextures.push(l), l._engine = o.getEngine(), l.name = t, l.isRenderTarget = !0, l._size = i, l._generateMipMaps = a, l.setFragment(n), l._fallbackTexture = s, c ? (l._texture = l._engine.createRenderTargetCubeTexture(i, {
|
|
generateMipMaps: a,
|
|
generateDepthBuffer: !1,
|
|
generateStencilBuffer: !1
|
|
}), l.setFloat("face", 0)) : l._texture = l._engine.createRenderTargetTexture(i, {
|
|
generateMipMaps: a,
|
|
generateDepthBuffer: !1,
|
|
generateStencilBuffer: !1
|
|
});
|
|
var h = [];
|
|
return h.push(1, 1), h.push(-1, 1), h.push(-1, -1), h.push(1, -1), l._vertexBuffers[Oi.b.PositionKind] = new Oi.b(l._engine, h, Oi.b.PositionKind, !1, !1, 2), l._createIndexBuffer(), l
|
|
}
|
|
return l.d(t, e), t.prototype.getEffect = function() {
|
|
return this._effect
|
|
}, t.prototype.getContent = function() {
|
|
return this._contentData && this._currentRefreshId == this._contentUpdateId ? this._contentData : (this._contentData = this.readPixels(0, 0, this._contentData), this._contentUpdateId = this._currentRefreshId, this._contentData)
|
|
}, t.prototype._createIndexBuffer = function() {
|
|
var e = this._engine,
|
|
t = [];
|
|
t.push(0), t.push(1), t.push(2), t.push(0), t.push(2), t.push(3), this._indexBuffer = e.createIndexBuffer(t)
|
|
}, t.prototype._rebuild = function() {
|
|
var e = this._vertexBuffers[Oi.b.PositionKind];
|
|
e && e._rebuild(), this._createIndexBuffer(), this.refreshRate === _i.REFRESHRATE_RENDER_ONCE && (this.refreshRate = _i.REFRESHRATE_RENDER_ONCE)
|
|
}, t.prototype.reset = function() {
|
|
void 0 !== this._effect && this._effect.dispose()
|
|
}, t.prototype._getDefines = function() {
|
|
return ""
|
|
}, t.prototype.isReady = function() {
|
|
var e, t = this,
|
|
i = this._engine;
|
|
if (!this._fragment) return !1;
|
|
if (this._fallbackTextureUsed) return !0;
|
|
var n = this._getDefines();
|
|
return !(!this._effect || n !== this._cachedDefines || !this._effect.isReady()) || (e = void 0 !== this._fragment.fragmentElement ? {
|
|
vertex: "procedural",
|
|
fragmentElement: this._fragment.fragmentElement
|
|
} : {
|
|
vertex: "procedural",
|
|
fragment: this._fragment
|
|
}, this._cachedDefines = n, this._effect = i.createEffect(e, [Oi.b.PositionKind], this._uniforms, this._samplers, n, void 0, void 0, function() {
|
|
t.releaseInternalTexture(), t._fallbackTexture && (t._texture = t._fallbackTexture._texture, t._texture && t._texture.incrementReferences()), t._fallbackTextureUsed = !0
|
|
}), this._effect.isReady())
|
|
}, t.prototype.resetRefreshCounter = function() {
|
|
this._currentRefreshId = -1
|
|
}, t.prototype.setFragment = function(e) {
|
|
this._fragment = e
|
|
}, Object.defineProperty(t.prototype, "refreshRate", {
|
|
get: function() {
|
|
return this._refreshRate
|
|
},
|
|
set: function(e) {
|
|
this._refreshRate = e, this.resetRefreshCounter()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._shouldRender = function() {
|
|
return this.isEnabled && this.isReady() && this._texture ? !this._fallbackTextureUsed && (-1 === this._currentRefreshId ? (this._currentRefreshId = 1, !0) : this.refreshRate === this._currentRefreshId ? (this._currentRefreshId = 1, !0) : (this._currentRefreshId++, !1)) : (this._texture && (this._texture.isReady = !1), !1)
|
|
}, t.prototype.getRenderSize = function() {
|
|
return this._size
|
|
}, t.prototype.resize = function(e, t) {
|
|
this._fallbackTextureUsed || (this.releaseInternalTexture(), this._texture = this._engine.createRenderTargetTexture(e, t), this._size = e, this._generateMipMaps = t)
|
|
}, t.prototype._checkUniform = function(e) {
|
|
-1 === this._uniforms.indexOf(e) && this._uniforms.push(e)
|
|
}, t.prototype.setTexture = function(e, t) {
|
|
return -1 === this._samplers.indexOf(e) && this._samplers.push(e), this._textures[e] = t, this
|
|
}, t.prototype.setFloat = function(e, t) {
|
|
return this._checkUniform(e), this._floats[e] = t, this
|
|
}, t.prototype.setInt = function(e, t) {
|
|
return this._checkUniform(e), this._ints[e] = t, this
|
|
}, t.prototype.setFloats = function(e, t) {
|
|
return this._checkUniform(e), this._floatsArrays[e] = t, this
|
|
}, t.prototype.setColor3 = function(e, t) {
|
|
return this._checkUniform(e), this._colors3[e] = t, this
|
|
}, t.prototype.setColor4 = function(e, t) {
|
|
return this._checkUniform(e), this._colors4[e] = t, this
|
|
}, t.prototype.setVector2 = function(e, t) {
|
|
return this._checkUniform(e), this._vectors2[e] = t, this
|
|
}, t.prototype.setVector3 = function(e, t) {
|
|
return this._checkUniform(e), this._vectors3[e] = t, this
|
|
}, t.prototype.setMatrix = function(e, t) {
|
|
return this._checkUniform(e), this._matrices[e] = t, this
|
|
}, t.prototype.render = function(e) {
|
|
var t = this.getScene();
|
|
if (t) {
|
|
var i = this._engine;
|
|
for (var n in i.enableEffect(this._effect), i.setState(!1), this._textures) this._effect.setTexture(n, this._textures[n]);
|
|
for (n in this._ints) this._effect.setInt(n, this._ints[n]);
|
|
for (n in this._floats) this._effect.setFloat(n, this._floats[n]);
|
|
for (n in this._floatsArrays) this._effect.setArray(n, this._floatsArrays[n]);
|
|
for (n in this._colors3) this._effect.setColor3(n, this._colors3[n]);
|
|
for (n in this._colors4) {
|
|
var r = this._colors4[n];
|
|
this._effect.setFloat4(n, r.r, r.g, r.b, r.a)
|
|
}
|
|
for (n in this._vectors2) this._effect.setVector2(n, this._vectors2[n]);
|
|
for (n in this._vectors3) this._effect.setVector3(n, this._vectors3[n]);
|
|
for (n in this._matrices) this._effect.setMatrix(n, this._matrices[n]);
|
|
if (this._texture) {
|
|
if (this.isCube)
|
|
for (var o = 0; o < 6; o++) i.bindFramebuffer(this._texture, o, void 0, void 0, !0), i.bindBuffers(this._vertexBuffers, this._indexBuffer, this._effect), this._effect.setFloat("face", o), this.autoClear && i.clear(t.clearColor, !0, !1, !1), i.drawElementsType(so.a.TriangleFillMode, 0, 6), 5 === o && i.generateMipMapsForCubemap(this._texture);
|
|
else i.bindFramebuffer(this._texture, 0, void 0, void 0, !0), i.bindBuffers(this._vertexBuffers, this._indexBuffer, this._effect), this.autoClear && i.clear(t.clearColor, !0, !1, !1), i.drawElementsType(so.a.TriangleFillMode, 0, 6);
|
|
i.unBindFramebuffer(this._texture, this.isCube), this.onGenerated && this.onGenerated(), this.onGeneratedObservable.notifyObservers(this)
|
|
}
|
|
}
|
|
}, t.prototype.clone = function() {
|
|
var e = this.getSize(),
|
|
i = new t(this.name, e.width, this._fragment, this.getScene(), this._fallbackTexture, this._generateMipMaps);
|
|
return i.hasAlpha = this.hasAlpha, i.level = this.level, i.coordinatesMode = this.coordinatesMode, i
|
|
}, t.prototype.dispose = function() {
|
|
var t = this.getScene();
|
|
if (t) {
|
|
var i = t.proceduralTextures.indexOf(this);
|
|
i >= 0 && t.proceduralTextures.splice(i, 1);
|
|
var n = this._vertexBuffers[Oi.b.PositionKind];
|
|
n && (n.dispose(), this._vertexBuffers[Oi.b.PositionKind] = null), this._indexBuffer && this._engine._releaseBuffer(this._indexBuffer) && (this._indexBuffer = null), e.prototype.dispose.call(this)
|
|
}
|
|
}, l.c([Object(L.c)()], t.prototype, "isEnabled", void 0), l.c([Object(L.c)()], t.prototype, "autoClear", void 0), l.c([Object(L.c)()], t.prototype, "_generateMipMaps", void 0), l.c([Object(L.c)()], t.prototype, "_size", void 0), l.c([Object(L.c)()], t.prototype, "refreshRate", null), t
|
|
}(ke.a),
|
|
gs = i(60),
|
|
ms = function(e) {
|
|
function t(t, i, n, r, o, s) {
|
|
var a = e.call(this, t, n, null, r, o, s) || this;
|
|
return a._animate = !0, a._time = 0, a._texturePath = i, a._loadJson(i), a.refreshRate = 1, a
|
|
}
|
|
return l.d(t, e), t.prototype._loadJson = function(e) {
|
|
var t = this,
|
|
i = function() {
|
|
p.a.Log("No config file found in " + e + " trying to use ShadersStore or DOM element");
|
|
try {
|
|
t.setFragment(t._texturePath)
|
|
} catch (e) {
|
|
p.a.Error("No json or ShaderStore or DOM element found for CustomProceduralTexture")
|
|
}
|
|
},
|
|
n = e + "/config.json",
|
|
r = new gs.a;
|
|
r.open("GET", n), r.addEventListener("load", function() {
|
|
if (200 === r.status || r.responseText && r.responseText.length > 0) try {
|
|
t._config = JSON.parse(r.response), t.updateShaderUniforms(), t.updateTextures(), t.setFragment(t._texturePath + "/custom"), t._animate = t._config.animate, t.refreshRate = t._config.refreshrate
|
|
} catch (e) {
|
|
i()
|
|
} else i()
|
|
}, !1), r.addEventListener("error", function() {
|
|
i()
|
|
}, !1);
|
|
try {
|
|
r.send()
|
|
} catch (e) {
|
|
p.a.Error("CustomProceduralTexture: Error on XHR send request.")
|
|
}
|
|
}, t.prototype.isReady = function() {
|
|
if (!e.prototype.isReady.call(this)) return !1;
|
|
for (var t in this._textures) {
|
|
if (!this._textures[t].isReady()) return !1
|
|
}
|
|
return !0
|
|
}, t.prototype.render = function(t) {
|
|
var i = this.getScene();
|
|
this._animate && i && (this._time += .03 * i.getAnimationRatio(), this.updateShaderUniforms()), e.prototype.render.call(this, t)
|
|
}, t.prototype.updateTextures = function() {
|
|
for (var e = 0; e < this._config.sampler2Ds.length; e++) this.setTexture(this._config.sampler2Ds[e].sample2Dname, new ke.a(this._texturePath + "/" + this._config.sampler2Ds[e].textureRelativeUrl, this.getScene()))
|
|
}, t.prototype.updateShaderUniforms = function() {
|
|
if (this._config)
|
|
for (var e = 0; e < this._config.uniforms.length; e++) {
|
|
var t = this._config.uniforms[e];
|
|
switch (t.type) {
|
|
case "float":
|
|
this.setFloat(t.name, t.value);
|
|
break;
|
|
case "color3":
|
|
this.setColor3(t.name, new o.e(t.r, t.g, t.b));
|
|
break;
|
|
case "color4":
|
|
this.setColor4(t.name, new o.f(t.r, t.g, t.b, t.a));
|
|
break;
|
|
case "vector2":
|
|
this.setVector2(t.name, new o.w(t.x, t.y));
|
|
break;
|
|
case "vector3":
|
|
this.setVector3(t.name, new o.x(t.x, t.y, t.z))
|
|
}
|
|
}
|
|
this.setFloat("time", this._time)
|
|
}, Object.defineProperty(t.prototype, "animate", {
|
|
get: function() {
|
|
return this._animate
|
|
},
|
|
set: function(e) {
|
|
this._animate = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t
|
|
}(_s),
|
|
vs = "\n\nuniform float brightness;\nuniform float persistence;\nuniform float timeScale;\n\nvarying vec2 vUV;\n\nvec2 hash22(vec2 p)\n{\np=p*mat2(127.1,311.7,269.5,183.3);\np=-1.0+2.0*fract(sin(p)*43758.5453123);\nreturn sin(p*6.283+timeScale);\n}\nfloat interpolationNoise(vec2 p)\n{\nvec2 pi=floor(p);\nvec2 pf=p-pi;\nvec2 w=pf*pf*(3.-2.*pf);\nfloat f00=dot(hash22(pi+vec2(.0,.0)),pf-vec2(.0,.0));\nfloat f01=dot(hash22(pi+vec2(.0,1.)),pf-vec2(.0,1.));\nfloat f10=dot(hash22(pi+vec2(1.0,0.)),pf-vec2(1.0,0.));\nfloat f11=dot(hash22(pi+vec2(1.0,1.)),pf-vec2(1.0,1.));\nfloat xm1=mix(f00,f10,w.x);\nfloat xm2=mix(f01,f11,w.x);\nfloat ym=mix(xm1,xm2,w.y);\nreturn ym;\n}\nfloat perlinNoise2D(float x,float y)\n{\nfloat sum=0.0;\nfloat frequency=0.0;\nfloat amplitude=0.0;\nfor(int i=0; i<OCTAVES; i++)\n{\nfrequency=pow(2.0,float(i));\namplitude=pow(persistence,float(i));\nsum=sum+interpolationNoise(vec2(x*frequency,y*frequency))*amplitude;\n}\nreturn sum;\n}\n\nvoid main(void)\n{\nfloat x=abs(vUV.x);\nfloat y=abs(vUV.y);\nfloat noise=brightness+(1.0-brightness)*perlinNoise2D(x,y);\ngl_FragColor=vec4(noise,noise,noise,1.0);\n}\n";
|
|
zt.a.ShadersStore.noisePixelShader = vs;
|
|
var ys = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
void 0 === i && (i = 256), void 0 === n && (n = P.a.LastCreatedScene);
|
|
var s = e.call(this, t, i, "noise", n, r, o) || this;
|
|
return s._time = 0, s.brightness = .2, s.octaves = 3, s.persistence = .8, s.animationSpeedFactor = 1, s.autoClear = !1, s._updateShaderUniforms(), s
|
|
}
|
|
return l.d(t, e), t.prototype._updateShaderUniforms = function() {
|
|
var e = this.getScene();
|
|
e && (this._time += e.getAnimationRatio() * this.animationSpeedFactor * .01, this.setFloat("brightness", this.brightness), this.setFloat("persistence", this.persistence), this.setFloat("timeScale", this._time))
|
|
}, t.prototype._getDefines = function() {
|
|
return "#define OCTAVES " + (0 | this.octaves)
|
|
}, t.prototype.render = function(t) {
|
|
this._updateShaderUniforms(), e.prototype.render.call(this, t)
|
|
}, t.prototype.serialize = function() {
|
|
var e = {
|
|
customType: "BABYLON.NoiseProceduralTexture"
|
|
};
|
|
return e.brightness = this.brightness, e.octaves = this.octaves, e.persistence = this.persistence, e.animationSpeedFactor = this.animationSpeedFactor, e.size = this.getSize().width, e.generateMipMaps = this._generateMipMaps, e
|
|
}, t.Parse = function(e, i) {
|
|
var n = new t(e.name, e.size, i, void 0, e.generateMipMaps);
|
|
return n.brightness = e.brightness, n.octaves = e.octaves, n.persistence = e.persistence, n.animationSpeedFactor = e.animationSpeedFactor, n
|
|
}, t
|
|
}(_s);
|
|
s.a.RegisteredTypes["BABYLON.NoiseProceduralTexture"] = ys;
|
|
var bs = function(e) {
|
|
function t(t, i, n, r, o, s, a, c, l) {
|
|
void 0 === r && (r = _.a.TEXTUREFORMAT_RGBA), void 0 === o && (o = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === s && (s = !1), void 0 === a && (a = !1), void 0 === c && (c = _.a.TEXTURE_TRILINEAR_SAMPLINGMODE), void 0 === l && (l = null);
|
|
var u = e.call(this, "", t) || this;
|
|
return u._texture = t.getEngine().createRawCubeTexture(i, n, r, o, s, a, c, l), u
|
|
}
|
|
return l.d(t, e), t.prototype.update = function(e, t, i, n, r) {
|
|
void 0 === r && (r = null), this._texture.getEngine().updateRawCubeTexture(this._texture, e, t, i, n, r)
|
|
}, t.prototype.updateRGBDAsync = function(e, i, n, r) {
|
|
return void 0 === i && (i = null), void 0 === n && (n = .8), void 0 === r && (r = 0), t._UpdateRGBDAsync(this._texture, e, i, n, r)
|
|
}, t.prototype.clone = function() {
|
|
var e = this;
|
|
return L.a.Clone(function() {
|
|
var i = e.getScene(),
|
|
n = e._texture,
|
|
r = new t(i, n._bufferViewArray, n.width, n.format, n.type, n.generateMipMaps, n.invertY, n.samplingMode, n._compression);
|
|
return n.dataSource === ze.a.DATASOURCE_CUBERAW_RGBD && r.updateRGBDAsync(n._bufferViewArrayArray, n._sphericalPolynomial, n._lodGenerationScale, n._lodGenerationOffset), r
|
|
}, this)
|
|
}, t._UpdateRGBDAsync = function(e, t, i, n, r) {
|
|
return e._dataSource = ze.a.DATASOURCE_CUBERAW_RGBD, e._bufferViewArrayArray = t, e._lodGenerationScale = n, e._lodGenerationOffset = r, e._sphericalPolynomial = i, Jr.UploadLevelsAsync(e, t).then(function() {
|
|
e.isReady = !0
|
|
})
|
|
}, t
|
|
}(tr),
|
|
Ts = function(e) {
|
|
function t(t, i, n, r, o, s, a, c, l, u) {
|
|
void 0 === a && (a = !0), void 0 === c && (c = !1), void 0 === l && (l = ke.a.TRILINEAR_SAMPLINGMODE), void 0 === u && (u = _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
var h = e.call(this, null, s, !a, c) || this;
|
|
return h.format = o, h._engine = s.getEngine(), h._texture = s.getEngine().createRawTexture3D(t, i, n, r, o, a, c, l, void 0, u), h.is3D = !0, h
|
|
}
|
|
return l.d(t, e), t.prototype.update = function(e) {
|
|
this._texture && this._engine.updateRawTexture3D(this._texture, e, this._texture.format, this._texture.invertY, null, this._texture.type)
|
|
}, t
|
|
}(ke.a),
|
|
Es = function(e) {
|
|
function t(t, i, n, r) {
|
|
var s = e.call(this, t, i, n, r, !0) || this;
|
|
return s.refractionPlane = new o.n(0, 1, 0, 1), s.depth = 2, s.onBeforeRenderObservable.add(function() {
|
|
n.clipPlane = s.refractionPlane
|
|
}), s.onAfterRenderObservable.add(function() {
|
|
n.clipPlane = null
|
|
}), s
|
|
}
|
|
return l.d(t, e), t.prototype.clone = function() {
|
|
var e = this.getScene();
|
|
if (!e) return this;
|
|
var i = this.getSize(),
|
|
n = new t(this.name, i.width, e, this._generateMipMaps);
|
|
return n.hasAlpha = this.hasAlpha, n.level = this.level, n.refractionPlane = this.refractionPlane.clone(), this.renderList && (n.renderList = this.renderList.slice(0)), n.depth = this.depth, n
|
|
}, t.prototype.serialize = function() {
|
|
if (!this.name) return null;
|
|
var t = e.prototype.serialize.call(this);
|
|
return t.mirrorPlane = this.refractionPlane.asArray(), t.depth = this.depth, t
|
|
}, t
|
|
}(_i),
|
|
As = function(e) {
|
|
function t(i, n, r) {
|
|
var s = e.call(this, r.scene) || this;
|
|
return n && (r.engine || r.scene) ? (r = l.a({}, t.DefaultOptions, r), s._engine = r.engine || r.scene.getEngine(), s._generateMipMaps = r.generateMipMaps, s._samplingMode = r.samplingMode, s._textureMatrix = o.j.Identity(), s.name = i, s.element = n, s._isVideo = n instanceof HTMLVideoElement, s.anisotropicFilteringLevel = 1, s._createInternalTexture(), s) : s
|
|
}
|
|
return l.d(t, e), t.prototype._createInternalTexture = function() {
|
|
var e = 0,
|
|
t = 0;
|
|
this._isVideo ? (e = this.element.videoWidth, t = this.element.videoHeight) : (e = this.element.width, t = this.element.height), this._texture = this._engine.createDynamicTexture(e, t, this._generateMipMaps, this._samplingMode), this.update()
|
|
}, t.prototype.getTextureMatrix = function() {
|
|
return this._textureMatrix
|
|
}, t.prototype.update = function(e) {
|
|
if (void 0 === e && (e = null), null != this._texture)
|
|
if (this._isVideo) {
|
|
var t = this.element;
|
|
if (t.readyState < t.HAVE_CURRENT_DATA) return;
|
|
this._engine.updateVideoTexture(this._texture, t, null === e || e)
|
|
} else {
|
|
var i = this.element;
|
|
this._engine.updateDynamicTexture(this._texture, i, null === e || e, !1)
|
|
}
|
|
}, t.DefaultOptions = {
|
|
generateMipMaps: !1,
|
|
samplingMode: _.a.TEXTURE_BILINEAR_SAMPLINGMODE,
|
|
engine: null,
|
|
scene: null
|
|
}, t
|
|
}(Kn.a),
|
|
xs = function() {
|
|
function e(e) {
|
|
this._pendingActions = new Array, this._workerInfos = e.map(function(e) {
|
|
return {
|
|
worker: e,
|
|
active: !1
|
|
}
|
|
})
|
|
}
|
|
return e.prototype.dispose = function() {
|
|
for (var e = 0, t = this._workerInfos; e < t.length; e++) {
|
|
t[e].worker.terminate()
|
|
}
|
|
delete this._workerInfos, delete this._pendingActions
|
|
}, e.prototype.push = function(e) {
|
|
for (var t = 0, i = this._workerInfos; t < i.length; t++) {
|
|
var n = i[t];
|
|
if (!n.active) return void this._execute(n, e)
|
|
}
|
|
this._pendingActions.push(e)
|
|
}, e.prototype._execute = function(e, t) {
|
|
var i = this;
|
|
e.active = !0, t(e.worker, function() {
|
|
e.active = !1;
|
|
var t = i._pendingActions.shift();
|
|
t && i._execute(e, t)
|
|
})
|
|
}, e
|
|
}();
|
|
|
|
function Rs(e) {
|
|
return "function" == typeof importScripts ? (importScripts(e), Promise.resolve()) : new Promise(function(t, i) {
|
|
ye.h.LoadScript(e, function() {
|
|
t()
|
|
}, function(e) {
|
|
i(new Error(e))
|
|
})
|
|
})
|
|
}
|
|
|
|
function Ps(e, t, i) {
|
|
var n = t && e || i;
|
|
if (n) return Rs(n).then(function() {
|
|
return new Promise(function(e) {
|
|
DracoDecoderModule({
|
|
wasmBinary: t
|
|
}).then(function(t) {
|
|
e({
|
|
module: t
|
|
})
|
|
})
|
|
})
|
|
})
|
|
}
|
|
|
|
function Ss(e, t, i, n, r) {
|
|
var o = new e.DecoderBuffer;
|
|
o.Init(t, t.byteLength);
|
|
var s, a, c = new e.Decoder;
|
|
try {
|
|
var l = c.GetEncodedGeometryType(o);
|
|
switch (l) {
|
|
case e.TRIANGULAR_MESH:
|
|
s = new e.Mesh, a = c.DecodeBufferToMesh(o, s);
|
|
break;
|
|
case e.POINT_CLOUD:
|
|
s = new e.PointCloud, a = c.DecodeBufferToPointCloud(o, s);
|
|
break;
|
|
default:
|
|
throw new Error("Invalid geometry type " + l)
|
|
}
|
|
if (!a.ok() || !s.ptr) throw new Error(a.error_msg());
|
|
var u = s.num_points();
|
|
if (l === e.TRIANGULAR_MESH) {
|
|
var h = s.num_faces(),
|
|
d = new e.DracoInt32Array;
|
|
try {
|
|
for (var f = new Uint32Array(3 * h), p = 0; p < h; p++) {
|
|
c.GetFaceFromMesh(s, p, d);
|
|
var _ = 3 * p;
|
|
f[_ + 0] = d.GetValue(0), f[_ + 1] = d.GetValue(1), f[_ + 2] = d.GetValue(2)
|
|
}
|
|
n(f)
|
|
} finally {
|
|
e.destroy(d)
|
|
}
|
|
}
|
|
var g = function(t, i) {
|
|
var n = new e.DracoFloat32Array;
|
|
try {
|
|
c.GetAttributeFloatForAllPoints(s, i, n);
|
|
for (var o = new Float32Array(u * i.num_components()), a = 0; a < o.length; a++) o[a] = n.GetValue(a);
|
|
r(t, o)
|
|
} finally {
|
|
e.destroy(n)
|
|
}
|
|
};
|
|
if (i)
|
|
for (var m in i) {
|
|
var v = i[m];
|
|
g(m, c.GetAttributeByUniqueId(s, v))
|
|
} else {
|
|
var y = {
|
|
position: "POSITION",
|
|
normal: "NORMAL",
|
|
color: "COLOR",
|
|
uv: "TEX_COORD"
|
|
};
|
|
for (var m in y) {
|
|
if (-1 !== (v = c.GetAttributeId(s, e[y[m]]))) g(m, c.GetAttribute(s, v))
|
|
}
|
|
}
|
|
} finally {
|
|
s && e.destroy(s), e.destroy(c), e.destroy(o)
|
|
}
|
|
}
|
|
|
|
function Cs(e) {
|
|
return "object" != typeof document || "string" != typeof e ? e : ye.h.GetAbsoluteUrl(e)
|
|
}
|
|
var Ms = function() {
|
|
function e(t) {
|
|
void 0 === t && (t = e.DefaultNumWorkers);
|
|
var i, n = e.Configuration.decoder,
|
|
r = n.wasmUrl && n.wasmBinaryUrl && "object" == typeof WebAssembly ? (i = Cs(n.wasmBinaryUrl), new Promise(function(e, t) {
|
|
ye.h.LoadFile(i, function(t) {
|
|
e(t)
|
|
}, void 0, void 0, !0, function(e, i) {
|
|
t(i)
|
|
})
|
|
})) : Promise.resolve(void 0);
|
|
t && "function" == typeof Worker ? this._workerPoolPromise = r.then(function(e) {
|
|
for (var i = "" + Rs + Ps + Ss + "(" + function() {
|
|
var e;
|
|
onmessage = function(t) {
|
|
var i = t.data;
|
|
switch (i.id) {
|
|
case "init":
|
|
var n = i.decoder;
|
|
e = Ps(n.wasmUrl, n.wasmBinary, n.fallbackUrl), postMessage("done");
|
|
break;
|
|
case "decodeMesh":
|
|
if (!e) throw new Error("Draco decoder module is not available");
|
|
e.then(function(e) {
|
|
Ss(e.module, i.dataView, i.attributes, function(e) {
|
|
postMessage({
|
|
id: "indices",
|
|
value: e
|
|
}, [e.buffer])
|
|
}, function(e, t) {
|
|
postMessage({
|
|
id: e,
|
|
value: t
|
|
}, [t.buffer])
|
|
}), postMessage("done")
|
|
})
|
|
}
|
|
}
|
|
} + ")()", r = URL.createObjectURL(new Blob([i], {
|
|
type: "application/javascript"
|
|
})), o = new Array(t), s = 0; s < o.length; s++) o[s] = new Promise(function(t, i) {
|
|
var o = new Worker(r),
|
|
s = function(e) {
|
|
o.removeEventListener("error", s), o.removeEventListener("message", a), i(e)
|
|
},
|
|
a = function(e) {
|
|
"done" === e.data && (o.removeEventListener("error", s), o.removeEventListener("message", a), t(o))
|
|
};
|
|
o.addEventListener("error", s), o.addEventListener("message", a), o.postMessage({
|
|
id: "init",
|
|
decoder: {
|
|
wasmUrl: Cs(n.wasmUrl),
|
|
wasmBinary: e,
|
|
fallbackUrl: Cs(n.fallbackUrl)
|
|
}
|
|
})
|
|
});
|
|
return Promise.all(o).then(function(e) {
|
|
return new xs(e)
|
|
})
|
|
}) : this._decoderModulePromise = r.then(function(e) {
|
|
return Ps(n.wasmUrl, e, n.fallbackUrl)
|
|
})
|
|
}
|
|
return Object.defineProperty(e, "DecoderAvailable", {
|
|
get: function() {
|
|
var t = e.Configuration.decoder;
|
|
return !!(t.wasmUrl && t.wasmBinaryUrl && "object" == typeof WebAssembly || t.fallbackUrl)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.GetDefaultNumWorkers = function() {
|
|
return "object" == typeof navigator && navigator.hardwareConcurrency ? Math.min(Math.floor(.5 * navigator.hardwareConcurrency), 4) : 1
|
|
}, Object.defineProperty(e, "Default", {
|
|
get: function() {
|
|
return e._Default || (e._Default = new e), e._Default
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.dispose = function() {
|
|
this._workerPoolPromise && this._workerPoolPromise.then(function(e) {
|
|
e.dispose()
|
|
}), delete this._workerPoolPromise, delete this._decoderModulePromise
|
|
}, e.prototype.whenReadyAsync = function() {
|
|
return this._workerPoolPromise ? this._workerPoolPromise.then(function() {}) : this._decoderModulePromise ? this._decoderModulePromise.then(function() {}) : Promise.resolve()
|
|
}, e.prototype.decodeMeshAsync = function(e, t) {
|
|
var i = e instanceof ArrayBuffer ? new Uint8Array(e) : e;
|
|
if (this._workerPoolPromise) return this._workerPoolPromise.then(function(e) {
|
|
return new Promise(function(n, r) {
|
|
e.push(function(e, o) {
|
|
var s = new Mi.a,
|
|
a = function(t) {
|
|
e.removeEventListener("error", a), e.removeEventListener("message", c), r(t), o()
|
|
},
|
|
c = function(t) {
|
|
"done" === t.data ? (e.removeEventListener("error", a), e.removeEventListener("message", c), n(s), o()) : "indices" === t.data.id ? s.indices = t.data.value : s.set(t.data.value, t.data.id)
|
|
};
|
|
e.addEventListener("error", a), e.addEventListener("message", c);
|
|
var l = new Uint8Array(i.byteLength);
|
|
l.set(new Uint8Array(i.buffer, i.byteOffset, i.byteLength)), e.postMessage({
|
|
id: "decodeMesh",
|
|
dataView: l,
|
|
attributes: t
|
|
}, [l.buffer])
|
|
})
|
|
})
|
|
});
|
|
if (this._decoderModulePromise) return this._decoderModulePromise.then(function(e) {
|
|
var n = new Mi.a;
|
|
return Ss(e.module, i, t, function(e) {
|
|
n.indices = e
|
|
}, function(e, t) {
|
|
n.set(t, e)
|
|
}), n
|
|
});
|
|
throw new Error("Draco decoder module is not available")
|
|
}, e.Configuration = {
|
|
decoder: {
|
|
wasmUrl: "https://preview.babylonjs.com/draco_wasm_wrapper_gltf.js",
|
|
wasmBinaryUrl: "https://preview.babylonjs.com/draco_decoder_gltf.wasm",
|
|
fallbackUrl: "https://preview.babylonjs.com/draco_decoder_gltf.js"
|
|
}
|
|
}, e.DefaultNumWorkers = e.GetDefaultNumWorkers(), e._Default = null, e
|
|
}(),
|
|
Os = i(49),
|
|
Is = 0,
|
|
Ds = function() {
|
|
function e(e, t, i) {
|
|
this.pos = e, this.normal = t, this.uv = i
|
|
}
|
|
return e.prototype.clone = function() {
|
|
return new e(this.pos.clone(), this.normal.clone(), this.uv.clone())
|
|
}, e.prototype.flip = function() {
|
|
this.normal = this.normal.scale(-1)
|
|
}, e.prototype.interpolate = function(t, i) {
|
|
return new e(o.x.Lerp(this.pos, t.pos, i), o.x.Lerp(this.normal, t.normal, i), o.w.Lerp(this.uv, t.uv, i))
|
|
}, e
|
|
}(),
|
|
Ls = function() {
|
|
function e(e, t) {
|
|
this.normal = e, this.w = t
|
|
}
|
|
return e.FromPoints = function(t, i, n) {
|
|
var r = n.subtract(t),
|
|
s = i.subtract(t);
|
|
if (0 === r.lengthSquared() || 0 === s.lengthSquared()) return null;
|
|
var a = o.x.Normalize(o.x.Cross(r, s));
|
|
return new e(a, o.x.Dot(a, t))
|
|
}, e.prototype.clone = function() {
|
|
return new e(this.normal.clone(), this.w)
|
|
}, e.prototype.flip = function() {
|
|
this.normal.scaleInPlace(-1), this.w = -this.w
|
|
}, e.prototype.splitPolygon = function(t, i, n, r, s) {
|
|
var a, c, l = 0,
|
|
u = [];
|
|
for (a = 0; a < t.vertices.length; a++) {
|
|
var h = (c = o.x.Dot(this.normal, t.vertices[a].pos) - this.w) < -e.EPSILON ? 2 : c > e.EPSILON ? 1 : 0;
|
|
l |= h, u.push(h)
|
|
}
|
|
switch (l) {
|
|
case 0:
|
|
(o.x.Dot(this.normal, t.plane.normal) > 0 ? i : n).push(t);
|
|
break;
|
|
case 1:
|
|
r.push(t);
|
|
break;
|
|
case 2:
|
|
s.push(t);
|
|
break;
|
|
case 3:
|
|
var d, f = [],
|
|
p = [];
|
|
for (a = 0; a < t.vertices.length; a++) {
|
|
var _ = (a + 1) % t.vertices.length,
|
|
g = u[a],
|
|
m = u[_],
|
|
v = t.vertices[a],
|
|
y = t.vertices[_];
|
|
if (2 !== g && f.push(v), 1 !== g && p.push(2 !== g ? v.clone() : v), 3 == (g | m)) {
|
|
c = (this.w - o.x.Dot(this.normal, v.pos)) / o.x.Dot(this.normal, y.pos.subtract(v.pos));
|
|
var b = v.interpolate(y, c);
|
|
f.push(b), p.push(b.clone())
|
|
}
|
|
}
|
|
f.length >= 3 && (d = new ws(f, t.shared)).plane && r.push(d), p.length >= 3 && (d = new ws(p, t.shared)).plane && s.push(d)
|
|
}
|
|
}, e.EPSILON = 1e-5, e
|
|
}(),
|
|
ws = function() {
|
|
function e(e, t) {
|
|
this.vertices = e, this.shared = t, this.plane = Ls.FromPoints(e[0].pos, e[1].pos, e[2].pos)
|
|
}
|
|
return e.prototype.clone = function() {
|
|
return new e(this.vertices.map(function(e) {
|
|
return e.clone()
|
|
}), this.shared)
|
|
}, e.prototype.flip = function() {
|
|
this.vertices.reverse().map(function(e) {
|
|
e.flip()
|
|
}), this.plane.flip()
|
|
}, e
|
|
}(),
|
|
Fs = function() {
|
|
function e(e) {
|
|
this.plane = null, this.front = null, this.back = null, this.polygons = new Array, e && this.build(e)
|
|
}
|
|
return e.prototype.clone = function() {
|
|
var t = new e;
|
|
return t.plane = this.plane && this.plane.clone(), t.front = this.front && this.front.clone(), t.back = this.back && this.back.clone(), t.polygons = this.polygons.map(function(e) {
|
|
return e.clone()
|
|
}), t
|
|
}, e.prototype.invert = function() {
|
|
for (var e = 0; e < this.polygons.length; e++) this.polygons[e].flip();
|
|
this.plane && this.plane.flip(), this.front && this.front.invert(), this.back && this.back.invert();
|
|
var t = this.front;
|
|
this.front = this.back, this.back = t
|
|
}, e.prototype.clipPolygons = function(e) {
|
|
if (!this.plane) return e.slice();
|
|
for (var t = new Array, i = new Array, n = 0; n < e.length; n++) this.plane.splitPolygon(e[n], t, i, t, i);
|
|
return this.front && (t = this.front.clipPolygons(t)), i = this.back ? this.back.clipPolygons(i) : [], t.concat(i)
|
|
}, e.prototype.clipTo = function(e) {
|
|
this.polygons = e.clipPolygons(this.polygons), this.front && this.front.clipTo(e), this.back && this.back.clipTo(e)
|
|
}, e.prototype.allPolygons = function() {
|
|
var e = this.polygons.slice();
|
|
return this.front && (e = e.concat(this.front.allPolygons())), this.back && (e = e.concat(this.back.allPolygons())), e
|
|
}, e.prototype.build = function(t) {
|
|
if (t.length) {
|
|
this.plane || (this.plane = t[0].plane.clone());
|
|
for (var i = new Array, n = new Array, r = 0; r < t.length; r++) this.plane.splitPolygon(t[r], this.polygons, this.polygons, i, n);
|
|
i.length && (this.front || (this.front = new e), this.front.build(i)), n.length && (this.back || (this.back = new e), this.back.build(n))
|
|
}
|
|
}, e
|
|
}(),
|
|
Ns = function() {
|
|
function e() {
|
|
this.polygons = new Array
|
|
}
|
|
return e.FromMesh = function(t) {
|
|
var i, n, r, s, a, c, l, u, h, d, f = new Array,
|
|
p = null;
|
|
if (!(t instanceof fe.a)) throw "BABYLON.CSG: Wrong Mesh type, must be BABYLON.Mesh";
|
|
t.computeWorldMatrix(!0), l = t.getWorldMatrix(), u = t.position.clone(), h = t.rotation.clone(), t.rotationQuaternion && (p = t.rotationQuaternion.clone()), d = t.scaling.clone();
|
|
for (var _ = t.getIndices(), g = t.getVerticesData(Oi.b.PositionKind), m = t.getVerticesData(Oi.b.NormalKind), v = t.getVerticesData(Oi.b.UVKind), y = t.subMeshes, b = 0, T = y.length; b < T; b++)
|
|
for (var E = y[b].indexStart, A = y[b].indexCount + y[b].indexStart; E < A; E += 3) {
|
|
c = [];
|
|
for (var x = 0; x < 3; x++) {
|
|
var R = new o.x(m[3 * _[E + x]], m[3 * _[E + x] + 1], m[3 * _[E + x] + 2]);
|
|
r = new o.w(v[2 * _[E + x]], v[2 * _[E + x] + 1]);
|
|
var P = new o.x(g[3 * _[E + x]], g[3 * _[E + x] + 1], g[3 * _[E + x] + 2]);
|
|
s = o.x.TransformCoordinates(P, l), n = o.x.TransformNormal(R, l), i = new Ds(s, n, r), c.push(i)
|
|
}(a = new ws(c, {
|
|
subMeshId: b,
|
|
meshId: Is,
|
|
materialIndex: y[b].materialIndex
|
|
})).plane && f.push(a)
|
|
}
|
|
var S = e.FromPolygons(f);
|
|
return S.matrix = l, S.position = u, S.rotation = h, S.scaling = d, S.rotationQuaternion = p, Is++, S
|
|
}, e.FromPolygons = function(t) {
|
|
var i = new e;
|
|
return i.polygons = t, i
|
|
}, e.prototype.clone = function() {
|
|
var t = new e;
|
|
return t.polygons = this.polygons.map(function(e) {
|
|
return e.clone()
|
|
}), t.copyTransformAttributes(this), t
|
|
}, e.prototype.union = function(t) {
|
|
var i = new Fs(this.clone().polygons),
|
|
n = new Fs(t.clone().polygons);
|
|
return i.clipTo(n), n.clipTo(i), n.invert(), n.clipTo(i), n.invert(), i.build(n.allPolygons()), e.FromPolygons(i.allPolygons()).copyTransformAttributes(this)
|
|
}, e.prototype.unionInPlace = function(e) {
|
|
var t = new Fs(this.polygons),
|
|
i = new Fs(e.polygons);
|
|
t.clipTo(i), i.clipTo(t), i.invert(), i.clipTo(t), i.invert(), t.build(i.allPolygons()), this.polygons = t.allPolygons()
|
|
}, e.prototype.subtract = function(t) {
|
|
var i = new Fs(this.clone().polygons),
|
|
n = new Fs(t.clone().polygons);
|
|
return i.invert(), i.clipTo(n), n.clipTo(i), n.invert(), n.clipTo(i), n.invert(), i.build(n.allPolygons()), i.invert(), e.FromPolygons(i.allPolygons()).copyTransformAttributes(this)
|
|
}, e.prototype.subtractInPlace = function(e) {
|
|
var t = new Fs(this.polygons),
|
|
i = new Fs(e.polygons);
|
|
t.invert(), t.clipTo(i), i.clipTo(t), i.invert(), i.clipTo(t), i.invert(), t.build(i.allPolygons()), t.invert(), this.polygons = t.allPolygons()
|
|
}, e.prototype.intersect = function(t) {
|
|
var i = new Fs(this.clone().polygons),
|
|
n = new Fs(t.clone().polygons);
|
|
return i.invert(), n.clipTo(i), n.invert(), i.clipTo(n), n.clipTo(i), i.build(n.allPolygons()), i.invert(), e.FromPolygons(i.allPolygons()).copyTransformAttributes(this)
|
|
}, e.prototype.intersectInPlace = function(e) {
|
|
var t = new Fs(this.polygons),
|
|
i = new Fs(e.polygons);
|
|
t.invert(), i.clipTo(t), i.invert(), t.clipTo(i), i.clipTo(t), t.build(i.allPolygons()), t.invert(), this.polygons = t.allPolygons()
|
|
}, e.prototype.inverse = function() {
|
|
var e = this.clone();
|
|
return e.inverseInPlace(), e
|
|
}, e.prototype.inverseInPlace = function() {
|
|
this.polygons.map(function(e) {
|
|
e.flip()
|
|
})
|
|
}, e.prototype.copyTransformAttributes = function(e) {
|
|
return this.matrix = e.matrix, this.position = e.position, this.rotation = e.rotation, this.scaling = e.scaling, this.rotationQuaternion = e.rotationQuaternion, this
|
|
}, e.prototype.buildMeshGeometry = function(e, t, i) {
|
|
var n = this.matrix.clone();
|
|
n.invert();
|
|
var r, s, a, c = new fe.a(e, t),
|
|
l = [],
|
|
u = [],
|
|
h = [],
|
|
d = [],
|
|
f = o.x.Zero(),
|
|
p = o.x.Zero(),
|
|
_ = o.w.Zero(),
|
|
g = this.polygons,
|
|
m = [0, 0, 0],
|
|
v = {},
|
|
y = 0,
|
|
b = {};
|
|
i && g.sort(function(e, t) {
|
|
return e.shared.meshId === t.shared.meshId ? e.shared.subMeshId - t.shared.subMeshId : e.shared.meshId - t.shared.meshId
|
|
});
|
|
for (var T = 0, E = g.length; T < E; T++) {
|
|
b[(r = g[T]).shared.meshId] || (b[r.shared.meshId] = {}), b[r.shared.meshId][r.shared.subMeshId] || (b[r.shared.meshId][r.shared.subMeshId] = {
|
|
indexStart: 1 / 0,
|
|
indexEnd: -1 / 0,
|
|
materialIndex: r.shared.materialIndex
|
|
}), a = b[r.shared.meshId][r.shared.subMeshId];
|
|
for (var A = 2, x = r.vertices.length; A < x; A++) {
|
|
m[0] = 0, m[1] = A - 1, m[2] = A;
|
|
for (var R = 0; R < 3; R++) {
|
|
f.copyFrom(r.vertices[m[R]].pos), p.copyFrom(r.vertices[m[R]].normal), _.copyFrom(r.vertices[m[R]].uv);
|
|
var P = o.x.TransformCoordinates(f, n),
|
|
S = o.x.TransformNormal(p, n);
|
|
void 0 !== (s = v[P.x + "," + P.y + "," + P.z]) && h[3 * s] === S.x && h[3 * s + 1] === S.y && h[3 * s + 2] === S.z && d[2 * s] === _.x && d[2 * s + 1] === _.y || (l.push(P.x, P.y, P.z), d.push(_.x, _.y), h.push(p.x, p.y, p.z), s = v[P.x + "," + P.y + "," + P.z] = l.length / 3 - 1), u.push(s), a.indexStart = Math.min(y, a.indexStart), a.indexEnd = Math.max(y, a.indexEnd), y++
|
|
}
|
|
}
|
|
}
|
|
if (c.setVerticesData(Oi.b.PositionKind, l), c.setVerticesData(Oi.b.NormalKind, h), c.setVerticesData(Oi.b.UVKind, d), c.setIndices(u, null), i) {
|
|
var C, M = 0;
|
|
for (var O in c.subMeshes = new Array, b) {
|
|
for (var I in C = -1, b[O]) a = b[O][I], Os.b.CreateFromIndices(a.materialIndex + M, a.indexStart, a.indexEnd - a.indexStart + 1, c), C = Math.max(a.materialIndex, C);
|
|
M += ++C
|
|
}
|
|
}
|
|
return c
|
|
}, e.prototype.toMesh = function(e, t, i, n) {
|
|
var r = this.buildMeshGeometry(e, i, n);
|
|
return r.material = t, r.position.copyFrom(this.position), r.rotation.copyFrom(this.rotation), this.rotationQuaternion && (r.rotationQuaternion = this.rotationQuaternion.clone()), r.scaling.copyFrom(this.scaling), r.computeWorldMatrix(!0), r
|
|
}, e
|
|
}(),
|
|
Bs = function(e) {
|
|
function t(t, i, n, r, s, a) {
|
|
void 0 === r && (r = 1), void 0 === s && (s = 60), void 0 === a && (a = !0);
|
|
var c = e.call(this, t, n) || this;
|
|
c._sectionPolygonPointsCount = 4, c._running = !1, c._autoStart = a, c._generator = i, c._diameter = r, c._length = s, c._sectionVectors = [], c._sectionNormalVectors = [];
|
|
for (var l = 0; l < c._sectionPolygonPointsCount; l++) c._sectionVectors[l] = o.x.Zero(), c._sectionNormalVectors[l] = o.x.Zero();
|
|
return c._createMesh(), c
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "TrailMesh"
|
|
}, t.prototype._createMesh = function() {
|
|
var e = new Mi.a,
|
|
t = [],
|
|
i = [],
|
|
n = [],
|
|
r = o.x.Zero();
|
|
this._generator._boundingInfo && (r = this._generator._boundingInfo.boundingBox.centerWorld);
|
|
for (var s = 2 * Math.PI / this._sectionPolygonPointsCount, a = 0; a < this._sectionPolygonPointsCount; a++) t.push(r.x + Math.cos(a * s) * this._diameter, r.y + Math.sin(a * s) * this._diameter, r.z);
|
|
for (a = 1; a <= this._length; a++) {
|
|
for (var c = 0; c < this._sectionPolygonPointsCount; c++) t.push(r.x + Math.cos(c * s) * this._diameter, r.y + Math.sin(c * s) * this._diameter, r.z);
|
|
var l = t.length / 3 - 2 * this._sectionPolygonPointsCount;
|
|
for (c = 0; c < this._sectionPolygonPointsCount - 1; c++) n.push(l + c, l + c + this._sectionPolygonPointsCount, l + c + this._sectionPolygonPointsCount + 1), n.push(l + c, l + c + this._sectionPolygonPointsCount + 1, l + c + 1);
|
|
n.push(l + this._sectionPolygonPointsCount - 1, l + this._sectionPolygonPointsCount - 1 + this._sectionPolygonPointsCount, l + this._sectionPolygonPointsCount), n.push(l + this._sectionPolygonPointsCount - 1, l + this._sectionPolygonPointsCount, l)
|
|
}
|
|
Mi.a.ComputeNormals(t, n, i), e.positions = t, e.normals = i, e.indices = n, e.applyToMesh(this, !0), this._autoStart && this.start()
|
|
}, t.prototype.start = function() {
|
|
var e = this;
|
|
this._running || (this._running = !0, this._beforeRenderObserver = this.getScene().onBeforeRenderObservable.add(function() {
|
|
e.update()
|
|
}))
|
|
}, t.prototype.stop = function() {
|
|
this._beforeRenderObserver && this._running && (this._running = !1, this.getScene().onBeforeRenderObservable.remove(this._beforeRenderObserver))
|
|
}, t.prototype.update = function() {
|
|
var e = this.getVerticesData(Oi.b.PositionKind),
|
|
t = this.getVerticesData(Oi.b.NormalKind),
|
|
i = this._generator.getWorldMatrix();
|
|
if (e && t) {
|
|
for (var n = 3 * this._sectionPolygonPointsCount; n < e.length; n++) e[n - 3 * this._sectionPolygonPointsCount] = e[n] - t[n] / this._length * this._diameter;
|
|
for (n = 3 * this._sectionPolygonPointsCount; n < t.length; n++) t[n - 3 * this._sectionPolygonPointsCount] = t[n];
|
|
var r = e.length - 3 * this._sectionPolygonPointsCount,
|
|
s = 2 * Math.PI / this._sectionPolygonPointsCount;
|
|
for (n = 0; n < this._sectionPolygonPointsCount; n++) this._sectionVectors[n].copyFromFloats(Math.cos(n * s) * this._diameter, Math.sin(n * s) * this._diameter, 0), this._sectionNormalVectors[n].copyFromFloats(Math.cos(n * s), Math.sin(n * s), 0), o.x.TransformCoordinatesToRef(this._sectionVectors[n], i, this._sectionVectors[n]), o.x.TransformNormalToRef(this._sectionNormalVectors[n], i, this._sectionNormalVectors[n]);
|
|
for (n = 0; n < this._sectionPolygonPointsCount; n++) e[r + 3 * n] = this._sectionVectors[n].x, e[r + 3 * n + 1] = this._sectionVectors[n].y, e[r + 3 * n + 2] = this._sectionVectors[n].z, t[r + 3 * n] = this._sectionNormalVectors[n].x, t[r + 3 * n + 1] = this._sectionNormalVectors[n].y, t[r + 3 * n + 2] = this._sectionNormalVectors[n].z;
|
|
this.updateVerticesData(Oi.b.PositionKind, e, !0, !1), this.updateVerticesData(Oi.b.NormalKind, t, !0, !1)
|
|
}
|
|
}, t.prototype.clone = function(e, i) {
|
|
return void 0 === e && (e = ""), new t(e, void 0 === i ? this._generator : i, this.getScene(), this._diameter, this._length, this._autoStart)
|
|
}, t.prototype.serialize = function(t) {
|
|
e.prototype.serialize.call(this, t)
|
|
}, t.Parse = function(e, i) {
|
|
return new t(e.name, e._generator, i, e._diameter, e._length, e._autoStart)
|
|
}, t
|
|
}(fe.a),
|
|
Us = i(111),
|
|
Vs = i(72);
|
|
Mi.a.CreateDisc = function(e) {
|
|
var t = new Array,
|
|
i = new Array,
|
|
n = new Array,
|
|
r = new Array,
|
|
o = e.radius || .5,
|
|
s = e.tessellation || 64,
|
|
a = e.arc && (e.arc <= 0 || e.arc > 1) ? 1 : e.arc || 1,
|
|
c = 0 === e.sideOrientation ? 0 : e.sideOrientation || Mi.a.DEFAULTSIDE;
|
|
t.push(0, 0, 0), r.push(.5, .5);
|
|
for (var l = 2 * Math.PI * a, u = l / s, h = 0; h < l; h += u) {
|
|
var d = Math.cos(h),
|
|
f = Math.sin(h),
|
|
p = (d + 1) / 2,
|
|
_ = (1 - f) / 2;
|
|
t.push(o * d, o * f, 0), r.push(p, _)
|
|
}
|
|
1 === a && (t.push(t[3], t[4], t[5]), r.push(r[2], r[3]));
|
|
for (var g = t.length / 3, m = 1; m < g - 1; m++) i.push(m + 1, 0, m);
|
|
Mi.a.ComputeNormals(t, i, n), Mi.a._ComputeSides(c, t, i, n, r, e.frontUVs, e.backUVs);
|
|
var v = new Mi.a;
|
|
return v.indices = i, v.positions = t, v.normals = n, v.uvs = r, v
|
|
}, fe.a.CreateDisc = function(e, t, i, n, r, o) {
|
|
void 0 === n && (n = null);
|
|
var s = {
|
|
radius: t,
|
|
tessellation: i,
|
|
sideOrientation: o,
|
|
updatable: r
|
|
};
|
|
return Gs.CreateDisc(e, s, n)
|
|
};
|
|
var Gs = function() {
|
|
function e() {}
|
|
return e.CreateDisc = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n = new fe.a(e, i);
|
|
return t.sideOrientation = fe.a._GetDefaultSideOrientation(t.sideOrientation), n._originalBuilderSideOrientation = t.sideOrientation, Mi.a.CreateDisc(t).applyToMesh(n, t.updatable), n
|
|
}, e
|
|
}();
|
|
Mi.a.CreateTorusKnot = function(e) {
|
|
var t, i, n = new Array,
|
|
r = new Array,
|
|
s = new Array,
|
|
a = new Array,
|
|
c = e.radius || 2,
|
|
l = e.tube || .5,
|
|
u = e.radialSegments || 32,
|
|
h = e.tubularSegments || 32,
|
|
d = e.p || 2,
|
|
f = e.q || 3,
|
|
p = 0 === e.sideOrientation ? 0 : e.sideOrientation || Mi.a.DEFAULTSIDE,
|
|
_ = function(e) {
|
|
var t = Math.cos(e),
|
|
i = Math.sin(e),
|
|
n = f / d * e,
|
|
r = Math.cos(n),
|
|
s = c * (2 + r) * .5 * t,
|
|
a = c * (2 + r) * i * .5,
|
|
l = c * Math.sin(n) * .5;
|
|
return new o.x(s, a, l)
|
|
};
|
|
for (t = 0; t <= u; t++) {
|
|
var g = t % u / u * 2 * d * Math.PI,
|
|
m = _(g),
|
|
v = _(g + .01),
|
|
y = v.subtract(m),
|
|
b = v.add(m),
|
|
T = o.x.Cross(y, b);
|
|
for (b = o.x.Cross(T, y), T.normalize(), b.normalize(), i = 0; i < h; i++) {
|
|
var E = i % h / h * 2 * Math.PI,
|
|
A = -l * Math.cos(E),
|
|
x = l * Math.sin(E);
|
|
r.push(m.x + A * b.x + x * T.x), r.push(m.y + A * b.y + x * T.y), r.push(m.z + A * b.z + x * T.z), a.push(t / u), a.push(i / h)
|
|
}
|
|
}
|
|
for (t = 0; t < u; t++)
|
|
for (i = 0; i < h; i++) {
|
|
var R = (i + 1) % h,
|
|
P = t * h + i,
|
|
S = (t + 1) * h + i,
|
|
C = (t + 1) * h + R,
|
|
M = t * h + R;
|
|
n.push(M), n.push(S), n.push(P), n.push(M), n.push(C), n.push(S)
|
|
}
|
|
Mi.a.ComputeNormals(r, n, s), Mi.a._ComputeSides(p, r, n, s, a, e.frontUVs, e.backUVs);
|
|
var O = new Mi.a;
|
|
return O.indices = n, O.positions = r, O.normals = s, O.uvs = a, O
|
|
}, fe.a.CreateTorusKnot = function(e, t, i, n, r, o, s, a, c, l) {
|
|
var u = {
|
|
radius: t,
|
|
tube: i,
|
|
radialSegments: n,
|
|
tubularSegments: r,
|
|
p: o,
|
|
q: s,
|
|
sideOrientation: l,
|
|
updatable: c
|
|
};
|
|
return ks.CreateTorusKnot(e, u, a)
|
|
};
|
|
var ks = function() {
|
|
function e() {}
|
|
return e.CreateTorusKnot = function(e, t, i) {
|
|
var n = new fe.a(e, i);
|
|
return t.sideOrientation = fe.a._GetDefaultSideOrientation(t.sideOrientation), n._originalBuilderSideOrientation = t.sideOrientation, Mi.a.CreateTorusKnot(t).applyToMesh(n, t.updatable), n
|
|
}, e
|
|
}(),
|
|
zs = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t.x, t.y) || this;
|
|
return n.index = i, n
|
|
}
|
|
return l.d(t, e), t
|
|
}(o.w),
|
|
js = function() {
|
|
function e() {
|
|
this.elements = new Array
|
|
}
|
|
return e.prototype.add = function(e) {
|
|
var t = this,
|
|
i = new Array;
|
|
return e.forEach(function(e) {
|
|
if (0 === i.length || !e.equalsWithEpsilon(i[0])) {
|
|
var n = new zs(e, t.elements.length);
|
|
i.push(n), t.elements.push(n)
|
|
}
|
|
}), i
|
|
}, e.prototype.computeBounds = function() {
|
|
var e = new o.w(this.elements[0].x, this.elements[0].y),
|
|
t = new o.w(this.elements[0].x, this.elements[0].y);
|
|
return this.elements.forEach(function(i) {
|
|
i.x < e.x ? e.x = i.x : i.x > t.x && (t.x = i.x), i.y < e.y ? e.y = i.y : i.y > t.y && (t.y = i.y)
|
|
}), {
|
|
min: e,
|
|
max: t,
|
|
width: t.x - e.x,
|
|
height: t.y - e.y
|
|
}
|
|
}, e
|
|
}(),
|
|
Hs = function() {
|
|
function e() {}
|
|
return e.Rectangle = function(e, t, i, n) {
|
|
return [new o.w(e, t), new o.w(i, t), new o.w(i, n), new o.w(e, n)]
|
|
}, e.Circle = function(e, t, i, n) {
|
|
void 0 === t && (t = 0), void 0 === i && (i = 0), void 0 === n && (n = 32);
|
|
for (var r = new Array, s = 0, a = 2 * Math.PI / n, c = 0; c < n; c++) r.push(new o.w(t + Math.cos(s) * e, i + Math.sin(s) * e)), s -= a;
|
|
return r
|
|
}, e.Parse = function(e) {
|
|
var t, i = e.split(/[^-+eE\.\d]+/).map(parseFloat).filter(function(e) {
|
|
return !isNaN(e)
|
|
}),
|
|
n = [];
|
|
for (t = 0; t < (2147483646 & i.length); t += 2) n.push(new o.w(i[t], i[t + 1]));
|
|
return n
|
|
}, e.StartingAt = function(e, t) {
|
|
return o.l.StartingAt(e, t)
|
|
}, e
|
|
}(),
|
|
Ws = function() {
|
|
function e(e, t, i, n) {
|
|
var r;
|
|
void 0 === n && (n = earcut), this._points = new js, this._outlinepoints = new js, this._holes = new Array, this._epoints = new Array, this._eholes = new Array, this.bjsEarcut = n, this._name = e, this._scene = i || ge.b.LastCreatedScene, r = t instanceof o.l ? t.getPoints() : t, this._addToepoint(r), this._points.add(r), this._outlinepoints.add(r), void 0 === this.bjsEarcut && p.a.Warn("Earcut was not found, the polygon will not be built.")
|
|
}
|
|
return e.prototype._addToepoint = function(e) {
|
|
for (var t = 0, i = e; t < i.length; t++) {
|
|
var n = i[t];
|
|
this._epoints.push(n.x, n.y)
|
|
}
|
|
}, e.prototype.addHole = function(e) {
|
|
this._points.add(e);
|
|
var t = new js;
|
|
return t.add(e), this._holes.push(t), this._eholes.push(this._epoints.length / 2), this._addToepoint(e), this
|
|
}, e.prototype.build = function(e, t) {
|
|
void 0 === e && (e = !1), void 0 === t && (t = 0);
|
|
var i = new fe.a(this._name, this._scene),
|
|
n = this.buildVertexData(t);
|
|
return i.setVerticesData(Oi.b.PositionKind, n.positions, e), i.setVerticesData(Oi.b.NormalKind, n.normals, e), i.setVerticesData(Oi.b.UVKind, n.uvs, e), i.setIndices(n.indices), i
|
|
}, e.prototype.buildVertexData = function(e) {
|
|
var t = this;
|
|
void 0 === e && (e = 0);
|
|
var i = new Mi.a,
|
|
n = new Array,
|
|
r = new Array,
|
|
o = new Array,
|
|
s = this._points.computeBounds();
|
|
this._points.elements.forEach(function(e) {
|
|
n.push(0, 1, 0), r.push(e.x, 0, e.y), o.push((e.x - s.min.x) / s.width, (e.y - s.min.y) / s.height)
|
|
});
|
|
for (var a = new Array, c = this.bjsEarcut(this._epoints, this._eholes, 2), l = 0; l < c.length; l++) a.push(c[l]);
|
|
if (e > 0) {
|
|
var u = r.length / 3;
|
|
this._points.elements.forEach(function(t) {
|
|
n.push(0, -1, 0), r.push(t.x, -e, t.y), o.push(1 - (t.x - s.min.x) / s.width, 1 - (t.y - s.min.y) / s.height)
|
|
});
|
|
var h = a.length;
|
|
for (l = 0; l < h; l += 3) {
|
|
var d = a[l + 0],
|
|
f = a[l + 1],
|
|
p = a[l + 2];
|
|
a.push(p + u), a.push(f + u), a.push(d + u)
|
|
}
|
|
this.addSide(r, n, o, a, s, this._outlinepoints, e, !1), this._holes.forEach(function(i) {
|
|
t.addSide(r, n, o, a, s, i, e, !0)
|
|
})
|
|
}
|
|
return i.indices = a, i.positions = r, i.normals = n, i.uvs = o, i
|
|
}, e.prototype.addSide = function(e, t, i, n, r, s, a, c) {
|
|
for (var l = e.length / 3, u = 0, h = 0; h < s.elements.length; h++) {
|
|
var d, f = s.elements[h];
|
|
d = h + 1 > s.elements.length - 1 ? s.elements[0] : s.elements[h + 1], e.push(f.x, 0, f.y), e.push(f.x, -a, f.y), e.push(d.x, 0, d.y), e.push(d.x, -a, d.y);
|
|
var p = new o.x(f.x, 0, f.y),
|
|
_ = new o.x(d.x, 0, d.y).subtract(p),
|
|
g = new o.x(0, 1, 0),
|
|
m = o.x.Cross(_, g);
|
|
m = m.normalize(), i.push(u / r.width, 0), i.push(u / r.width, 1), u += _.length(), i.push(u / r.width, 0), i.push(u / r.width, 1), c ? (t.push(m.x, m.y, m.z), t.push(m.x, m.y, m.z), t.push(m.x, m.y, m.z), t.push(m.x, m.y, m.z), n.push(l), n.push(l + 2), n.push(l + 1), n.push(l + 1), n.push(l + 2), n.push(l + 3)) : (t.push(-m.x, -m.y, -m.z), t.push(-m.x, -m.y, -m.z), t.push(-m.x, -m.y, -m.z), t.push(-m.x, -m.y, -m.z), n.push(l), n.push(l + 1), n.push(l + 2), n.push(l + 1), n.push(l + 3), n.push(l + 2)), l += 4
|
|
}
|
|
}, e
|
|
}();
|
|
Mi.a.CreatePolygon = function(e, t, i, n, r, s) {
|
|
for (var a = i || new Array(3), c = n, l = [], u = 0; u < 3; u++) void 0 === a[u] && (a[u] = new o.y(0, 0, 1, 1)), c && void 0 === c[u] && (c[u] = new o.f(1, 1, 1, 1));
|
|
for (var h = e.getVerticesData(Oi.b.PositionKind), d = e.getVerticesData(Oi.b.NormalKind), f = e.getVerticesData(Oi.b.UVKind), p = e.getIndices(), _ = 0, g = 0, m = 0; m < d.length; m += 3) Math.abs(d[m + 1]) < .001 && (g = 1), Math.abs(d[m + 1] - 1) < .001 && (g = 0), Math.abs(d[m + 1] + 1) < .001 && (g = 2), f[2 * (_ = m / 3)] = (1 - f[2 * _]) * a[g].x + f[2 * _] * a[g].z, f[2 * _ + 1] = (1 - f[2 * _ + 1]) * a[g].y + f[2 * _ + 1] * a[g].w, c && l.push(c[g].r, c[g].g, c[g].b, c[g].a);
|
|
Mi.a._ComputeSides(t, h, p, d, f, r, s);
|
|
var v = new Mi.a;
|
|
if (v.indices = p, v.positions = h, v.normals = d, v.uvs = f, c) {
|
|
var y = t === Mi.a.DOUBLESIDE ? l.concat(l) : l;
|
|
v.colors = y
|
|
}
|
|
return v
|
|
}, fe.a.CreatePolygon = function(e, t, i, n, r, o, s) {
|
|
void 0 === s && (s = earcut);
|
|
var a = {
|
|
shape: t,
|
|
holes: n,
|
|
updatable: r,
|
|
sideOrientation: o
|
|
};
|
|
return Xs.CreatePolygon(e, a, i, s)
|
|
}, fe.a.ExtrudePolygon = function(e, t, i, n, r, o, s, a) {
|
|
void 0 === a && (a = earcut);
|
|
var c = {
|
|
shape: t,
|
|
holes: r,
|
|
depth: i,
|
|
updatable: o,
|
|
sideOrientation: s
|
|
};
|
|
return Xs.ExtrudePolygon(e, c, n, a)
|
|
};
|
|
var Xs = function() {
|
|
function e() {}
|
|
return e.CreatePolygon = function(e, t, i, n) {
|
|
void 0 === i && (i = null), void 0 === n && (n = earcut), t.sideOrientation = fe.a._GetDefaultSideOrientation(t.sideOrientation);
|
|
for (var r = t.shape, s = t.holes || [], a = t.depth || 0, c = [], l = [], u = 0; u < r.length; u++) c[u] = new o.w(r[u].x, r[u].z);
|
|
c[0].equalsWithEpsilon(c[c.length - 1], 1e-8) && c.pop();
|
|
for (var h = new Ws(e, c, i || P.a.LastCreatedScene, n), d = 0; d < s.length; d++) {
|
|
l = [];
|
|
for (var f = 0; f < s[d].length; f++) l.push(new o.w(s[d][f].x, s[d][f].z));
|
|
h.addHole(l)
|
|
}
|
|
var p = h.build(t.updatable, a);
|
|
return p._originalBuilderSideOrientation = t.sideOrientation, Mi.a.CreatePolygon(p, t.sideOrientation, t.faceUV, t.faceColors, t.frontUVs, t.backUVs).applyToMesh(p, t.updatable), p
|
|
}, e.ExtrudePolygon = function(t, i, n, r) {
|
|
return void 0 === n && (n = null), void 0 === r && (r = earcut), e.CreatePolygon(t, i, n, r)
|
|
}, e
|
|
}();
|
|
fe.a.CreateLathe = function(e, t, i, n, r, o, s) {
|
|
var a = {
|
|
shape: t,
|
|
radius: i,
|
|
tessellation: n,
|
|
sideOrientation: s,
|
|
updatable: o
|
|
};
|
|
return Ys.CreateLathe(e, a, r)
|
|
};
|
|
var Ys = function() {
|
|
function e() {}
|
|
return e.CreateLathe = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n, r = t.arc ? t.arc <= 0 || t.arc > 1 ? 1 : t.arc : 1,
|
|
s = void 0 === t.closed || t.closed,
|
|
a = t.shape,
|
|
c = t.radius || 1,
|
|
l = t.tessellation || 64,
|
|
u = t.clip || 0,
|
|
h = t.updatable,
|
|
d = fe.a._GetDefaultSideOrientation(t.sideOrientation),
|
|
f = t.cap || fe.a.NO_CAP,
|
|
p = 2 * Math.PI,
|
|
_ = new Array,
|
|
g = t.invertUV || !1,
|
|
m = 0,
|
|
v = 0,
|
|
y = p / l * r,
|
|
b = new Array;
|
|
for (m = 0; m <= l - u; m++) {
|
|
b = [];
|
|
for (f != fe.a.CAP_START && f != fe.a.CAP_ALL || (b.push(new o.x(0, a[0].y, 0)), b.push(new o.x(Math.cos(m * y) * a[0].x * c, a[0].y, Math.sin(m * y) * a[0].x * c))), v = 0; v < a.length; v++) n = new o.x(Math.cos(m * y) * a[v].x * c, a[v].y, Math.sin(m * y) * a[v].x * c), b.push(n);
|
|
f != fe.a.CAP_END && f != fe.a.CAP_ALL || (b.push(new o.x(Math.cos(m * y) * a[a.length - 1].x * c, a[a.length - 1].y, Math.sin(m * y) * a[a.length - 1].x * c)), b.push(new o.x(0, a[a.length - 1].y, 0))), _.push(b)
|
|
}
|
|
return Yo.CreateRibbon(e, {
|
|
pathArray: _,
|
|
closeArray: s,
|
|
sideOrientation: d,
|
|
updatable: h,
|
|
invertUV: g,
|
|
frontUVs: t.frontUVs,
|
|
backUVs: t.backUVs
|
|
}, i)
|
|
}, e
|
|
}();
|
|
fe.a.CreateTube = function(e, t, i, n, r, o, s, a, c, l) {
|
|
var u = {
|
|
path: t,
|
|
radius: i,
|
|
tessellation: n,
|
|
radiusFunction: r,
|
|
arc: 1,
|
|
cap: o,
|
|
updatable: a,
|
|
sideOrientation: c,
|
|
instance: l
|
|
};
|
|
return Ks.CreateTube(e, u, s)
|
|
};
|
|
var Ks = function() {
|
|
function e() {}
|
|
return e.CreateTube = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n = t.path,
|
|
r = t.instance,
|
|
s = 1;
|
|
void 0 !== t.radius ? s = t.radius : r && (s = r._creationDataStorage.radius);
|
|
var a = t.tessellation || 64,
|
|
c = t.radiusFunction || null,
|
|
l = t.cap || fe.a.NO_CAP,
|
|
u = t.invertUV || !1,
|
|
h = t.updatable,
|
|
d = fe.a._GetDefaultSideOrientation(t.sideOrientation);
|
|
t.arc = t.arc && (t.arc <= 0 || t.arc > 1) ? 1 : t.arc || 1;
|
|
var f, p, _ = function(e, t, i, n, r, s, a, c) {
|
|
for (var l, u, h, d, f = t.getTangents(), p = t.getNormals(), _ = t.getDistances(), g = 2 * Math.PI / r * c, m = s || function() {
|
|
return n
|
|
}, v = o.t.Matrix[0], y = a === fe.a.NO_CAP || a === fe.a.CAP_END ? 0 : 2, b = 0; b < e.length; b++) {
|
|
u = m(b, _[b]), l = Array(), h = p[b];
|
|
for (var T = 0; T < r; T++) o.j.RotationAxisToRef(f[b], g * T, v), d = l[T] ? l[T] : o.x.Zero(), o.x.TransformCoordinatesToRef(h, v, d), d.scaleInPlace(u).addInPlace(e[b]), l[T] = d;
|
|
i[y] = l, y++
|
|
}
|
|
var E = function(t, i) {
|
|
for (var n = Array(), r = 0; r < t; r++) n.push(e[i]);
|
|
return n
|
|
};
|
|
switch (a) {
|
|
case fe.a.NO_CAP:
|
|
break;
|
|
case fe.a.CAP_START:
|
|
i[0] = E(r, 0), i[1] = i[2].slice(0);
|
|
break;
|
|
case fe.a.CAP_END:
|
|
i[y] = i[y - 1].slice(0), i[y + 1] = E(r, e.length - 1);
|
|
break;
|
|
case fe.a.CAP_ALL:
|
|
i[0] = E(r, 0), i[1] = i[2].slice(0), i[y] = i[y - 1].slice(0), i[y + 1] = E(r, e.length - 1)
|
|
}
|
|
return i
|
|
};
|
|
if (r) {
|
|
var g = r._creationDataStorage,
|
|
m = t.arc || g.arc;
|
|
return p = _(n, f = g.path3D.update(n), g.pathArray, s, g.tessellation, c, g.cap, m), r = Yo.CreateRibbon("", {
|
|
pathArray: p,
|
|
instance: r
|
|
}), g.path3D = f, g.pathArray = p, g.arc = m, g.radius = s, r
|
|
}
|
|
p = _(n, f = new o.m(n), new Array, s, a, c, l = l < 0 || l > 3 ? 0 : l, t.arc);
|
|
var v = Yo.CreateRibbon(e, {
|
|
pathArray: p,
|
|
closePath: !0,
|
|
closeArray: !1,
|
|
updatable: h,
|
|
sideOrientation: d,
|
|
invertUV: u,
|
|
frontUVs: t.frontUVs,
|
|
backUVs: t.backUVs
|
|
}, i);
|
|
return v._creationDataStorage.pathArray = p, v._creationDataStorage.path3D = f, v._creationDataStorage.tessellation = a, v._creationDataStorage.cap = l, v._creationDataStorage.arc = t.arc, v._creationDataStorage.radius = s, v
|
|
}, e
|
|
}();
|
|
Mi.a.CreateIcoSphere = function(e) {
|
|
var t, i = e.sideOrientation || Mi.a.DEFAULTSIDE,
|
|
n = e.radius || 1,
|
|
r = void 0 === e.flat || e.flat,
|
|
s = e.subdivisions || 4,
|
|
a = e.radiusX || n,
|
|
c = e.radiusY || n,
|
|
l = e.radiusZ || n,
|
|
u = (1 + Math.sqrt(5)) / 2,
|
|
h = [-1, u, -0, 1, u, 0, -1, -u, 0, 1, -u, 0, 0, -1, -u, 0, 1, -u, 0, -1, u, 0, 1, u, u, 0, 1, u, 0, -1, -u, 0, 1, -u, 0, -1],
|
|
d = [0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 12, 22, 23, 1, 5, 20, 5, 11, 4, 23, 22, 13, 22, 18, 6, 7, 1, 8, 14, 21, 4, 14, 4, 2, 16, 13, 6, 15, 6, 19, 3, 8, 9, 4, 21, 5, 13, 17, 23, 6, 13, 22, 19, 6, 18, 9, 8, 1],
|
|
f = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 2, 3, 3, 3, 4, 7, 8, 9, 9, 10, 11],
|
|
p = [5, 1, 3, 1, 6, 4, 0, 0, 5, 3, 4, 2, 2, 2, 4, 0, 2, 0, 1, 1, 6, 0, 6, 2, 0, 4, 3, 3, 4, 4, 3, 1, 4, 2, 4, 4, 0, 2, 1, 1, 2, 2, 3, 3, 1, 3, 2, 4],
|
|
_ = [0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0],
|
|
g = new Array,
|
|
m = new Array,
|
|
v = new Array,
|
|
y = new Array,
|
|
b = 0,
|
|
T = new Array(3),
|
|
E = new Array(3);
|
|
for (t = 0; t < 3; t++) T[t] = o.x.Zero(), E[t] = o.w.Zero();
|
|
for (var A = 0; A < 20; A++) {
|
|
for (t = 0; t < 3; t++) {
|
|
var x = d[3 * A + t];
|
|
T[t].copyFromFloats(h[3 * f[x]], h[3 * f[x] + 1], h[3 * f[x] + 2]), T[t].normalize().scaleInPlace(n), E[t].copyFromFloats(p[2 * x] * (138 / 1024) + 60 / 1024 + _[A] * (-40 / 1024), p[2 * x + 1] * (239 / 1024) + 26 / 1024 + _[A] * (20 / 1024))
|
|
}
|
|
for (var R = function(e, t, i, n) {
|
|
var u, h = o.x.Lerp(T[0], T[2], t / s),
|
|
d = o.x.Lerp(T[1], T[2], t / s),
|
|
f = s === t ? T[2] : o.x.Lerp(h, d, e / (s - t));
|
|
if (f.normalize(), r) {
|
|
var p = o.x.Lerp(T[0], T[2], n / s),
|
|
_ = o.x.Lerp(T[1], T[2], n / s);
|
|
u = o.x.Lerp(p, _, i / (s - n))
|
|
} else u = new o.x(f.x, f.y, f.z);
|
|
u.x /= a, u.y /= c, u.z /= l, u.normalize();
|
|
var A = o.w.Lerp(E[0], E[2], t / s),
|
|
x = o.w.Lerp(E[1], E[2], t / s),
|
|
R = s === t ? E[2] : o.w.Lerp(A, x, e / (s - t));
|
|
m.push(f.x * a, f.y * c, f.z * l), v.push(u.x, u.y, u.z), y.push(R.x, R.y), g.push(b), b++
|
|
}, P = 0; P < s; P++)
|
|
for (var S = 0; S + P < s; S++) R(S, P, S + 1 / 3, P + 1 / 3), R(S + 1, P, S + 1 / 3, P + 1 / 3), R(S, P + 1, S + 1 / 3, P + 1 / 3), S + P + 1 < s && (R(S + 1, P, S + 2 / 3, P + 2 / 3), R(S + 1, P + 1, S + 2 / 3, P + 2 / 3), R(S, P + 1, S + 2 / 3, P + 2 / 3))
|
|
}
|
|
Mi.a._ComputeSides(i, m, g, v, y, e.frontUVs, e.backUVs);
|
|
var C = new Mi.a;
|
|
return C.indices = g, C.positions = m, C.normals = v, C.uvs = y, C
|
|
}, fe.a.CreateIcoSphere = function(e, t, i) {
|
|
return Qs.CreateIcoSphere(e, t, i)
|
|
};
|
|
var Qs = function() {
|
|
function e() {}
|
|
return e.CreateIcoSphere = function(e, t, i) {
|
|
void 0 === i && (i = null);
|
|
var n = new fe.a(e, i);
|
|
return t.sideOrientation = fe.a._GetDefaultSideOrientation(t.sideOrientation), n._originalBuilderSideOrientation = t.sideOrientation, Mi.a.CreateIcoSphere(t).applyToMesh(n, t.updatable), n
|
|
}, e
|
|
}();
|
|
fe.a.CreateDecal = function(e, t, i, n, r, o) {
|
|
var s = {
|
|
position: i,
|
|
normal: n,
|
|
size: r,
|
|
angle: o
|
|
};
|
|
return Zs.CreateDecal(e, t, s)
|
|
};
|
|
var qs, Zs = function() {
|
|
function e() {}
|
|
return e.CreateDecal = function(e, t, i) {
|
|
var n = t.getIndices(),
|
|
r = t.getVerticesData(Oi.b.PositionKind),
|
|
s = t.getVerticesData(Oi.b.NormalKind),
|
|
a = i.position || o.x.Zero(),
|
|
c = i.normal || o.x.Up(),
|
|
l = i.size || o.x.One(),
|
|
u = i.angle || 0;
|
|
if (!c) {
|
|
var h = new o.x(0, 0, 1),
|
|
d = t.getScene().activeCamera,
|
|
f = o.x.TransformCoordinates(h, d.getWorldMatrix());
|
|
c = d.globalPosition.subtract(f)
|
|
}
|
|
var p = -Math.atan2(c.z, c.x) - Math.PI / 2,
|
|
_ = Math.sqrt(c.x * c.x + c.z * c.z),
|
|
g = Math.atan2(c.y, _),
|
|
m = o.j.RotationYawPitchRoll(p, g, u).multiply(o.j.Translation(a.x, a.y, a.z)),
|
|
v = o.j.Invert(m),
|
|
y = t.getWorldMatrix().multiply(v),
|
|
b = new Mi.a;
|
|
b.indices = [], b.positions = [], b.normals = [], b.uvs = [];
|
|
for (var T = 0, E = function(e) {
|
|
var t = new o.p;
|
|
if (!n || !r || !s) return t;
|
|
var i = n[e];
|
|
return t.position = new o.x(r[3 * i], r[3 * i + 1], r[3 * i + 2]), t.position = o.x.TransformCoordinates(t.position, y), t.normal = new o.x(s[3 * i], s[3 * i + 1], s[3 * i + 2]), t.normal = o.x.TransformNormal(t.normal, y), t
|
|
}, A = function(e, t) {
|
|
if (0 === e.length) return e;
|
|
for (var i = .5 * Math.abs(o.x.Dot(l, t)), n = function(e, n) {
|
|
var r = o.x.GetClipFactor(e.position, n.position, t, i);
|
|
return new o.p(o.x.Lerp(e.position, n.position, r), o.x.Lerp(e.normal, n.normal, r))
|
|
}, r = new Array, s = 0; s < e.length; s += 3) {
|
|
var a, c, u, h = null,
|
|
d = null,
|
|
f = null,
|
|
p = null;
|
|
switch (((a = o.x.Dot(e[s].position, t) - i > 0) ? 1 : 0) + ((c = o.x.Dot(e[s + 1].position, t) - i > 0) ? 1 : 0) + ((u = o.x.Dot(e[s + 2].position, t) - i > 0) ? 1 : 0)) {
|
|
case 0:
|
|
r.push(e[s]), r.push(e[s + 1]), r.push(e[s + 2]);
|
|
break;
|
|
case 1:
|
|
if (a && (h = e[s + 1], d = e[s + 2], f = n(e[s], h), p = n(e[s], d)), c) {
|
|
h = e[s], d = e[s + 2], f = n(e[s + 1], h), p = n(e[s + 1], d), r.push(f), r.push(d.clone()), r.push(h.clone()), r.push(d.clone()), r.push(f.clone()), r.push(p);
|
|
break
|
|
}
|
|
u && (h = e[s], d = e[s + 1], f = n(e[s + 2], h), p = n(e[s + 2], d)), h && d && f && p && (r.push(h.clone()), r.push(d.clone()), r.push(f), r.push(p), r.push(f.clone()), r.push(d.clone()));
|
|
break;
|
|
case 2:
|
|
a || (d = n(h = e[s].clone(), e[s + 1]), f = n(h, e[s + 2]), r.push(h), r.push(d), r.push(f)), c || (d = n(h = e[s + 1].clone(), e[s + 2]), f = n(h, e[s]), r.push(h), r.push(d), r.push(f)), u || (d = n(h = e[s + 2].clone(), e[s]), f = n(h, e[s + 1]), r.push(h), r.push(d), r.push(f))
|
|
}
|
|
}
|
|
return r
|
|
}, x = 0; x < n.length; x += 3) {
|
|
var R = new Array;
|
|
if (R.push(E(x)), R.push(E(x + 1)), R.push(E(x + 2)), R = A(R, new o.x(1, 0, 0)), R = A(R, new o.x(-1, 0, 0)), R = A(R, new o.x(0, 1, 0)), R = A(R, new o.x(0, -1, 0)), R = A(R, new o.x(0, 0, 1)), 0 !== (R = A(R, new o.x(0, 0, -1))).length)
|
|
for (var P = 0; P < R.length; P++) {
|
|
var S = R[P];
|
|
b.indices.push(T), S.position.toArray(b.positions, 3 * T), S.normal.toArray(b.normals, 3 * T), b.uvs.push(.5 + S.position.x / l.x), b.uvs.push(.5 + S.position.y / l.y), T++
|
|
}
|
|
}
|
|
var C = new fe.a(e, t.getScene());
|
|
return b.applyToMesh(C), C.position = a.clone(), C.rotation = new o.x(g, p, u), C
|
|
}, e
|
|
}(),
|
|
Js = function() {
|
|
function e() {}
|
|
return e.CreateBox = function(e, t, i) {
|
|
return void 0 === i && (i = null), Mn.a.CreateBox(e, t, i)
|
|
}, e.CreateSphere = function(e, t, i) {
|
|
return void 0 === i && (i = null), Ln.a.CreateSphere(e, t, i)
|
|
}, e.CreateDisc = function(e, t, i) {
|
|
return void 0 === i && (i = null), Gs.CreateDisc(e, t, i)
|
|
}, e.CreateIcoSphere = function(e, t, i) {
|
|
return void 0 === i && (i = null), Qs.CreateIcoSphere(e, t, i)
|
|
}, e.CreateRibbon = function(e, t, i) {
|
|
return void 0 === i && (i = null), Yo.CreateRibbon(e, t, i)
|
|
}, e.CreateCylinder = function(e, t, i) {
|
|
return void 0 === i && (i = null), Fi.a.CreateCylinder(e, t, i)
|
|
}, e.CreateTorus = function(e, t, i) {
|
|
return void 0 === i && (i = null), wi.CreateTorus(e, t, i)
|
|
}, e.CreateTorusKnot = function(e, t, i) {
|
|
return void 0 === i && (i = null), ks.CreateTorusKnot(e, t, i)
|
|
}, e.CreateLineSystem = function(e, t, i) {
|
|
return wn.a.CreateLineSystem(e, t, i)
|
|
}, e.CreateLines = function(e, t, i) {
|
|
return void 0 === i && (i = null), wn.a.CreateLines(e, t, i)
|
|
}, e.CreateDashedLines = function(e, t, i) {
|
|
return void 0 === i && (i = null), wn.a.CreateDashedLines(e, t, i)
|
|
}, e.ExtrudeShape = function(e, t, i) {
|
|
return void 0 === i && (i = null), Ko.ExtrudeShape(e, t, i)
|
|
}, e.ExtrudeShapeCustom = function(e, t, i) {
|
|
return void 0 === i && (i = null), Ko.ExtrudeShapeCustom(e, t, i)
|
|
}, e.CreateLathe = function(e, t, i) {
|
|
return void 0 === i && (i = null), Ys.CreateLathe(e, t, i)
|
|
}, e.CreatePlane = function(e, t, i) {
|
|
return void 0 === i && (i = null), fr.a.CreatePlane(e, t, i)
|
|
}, e.CreateGround = function(e, t, i) {
|
|
return void 0 === i && (i = null), Di.CreateGround(e, t, i)
|
|
}, e.CreateTiledGround = function(e, t, i) {
|
|
return void 0 === i && (i = null), Di.CreateTiledGround(e, t, i)
|
|
}, e.CreateGroundFromHeightMap = function(e, t, i, n) {
|
|
return void 0 === n && (n = null), Di.CreateGroundFromHeightMap(e, t, i, n)
|
|
}, e.CreatePolygon = function(e, t, i, n) {
|
|
return void 0 === i && (i = null), void 0 === n && (n = earcut), Xs.CreatePolygon(e, t, i, n)
|
|
}, e.ExtrudePolygon = function(e, t, i, n) {
|
|
return void 0 === i && (i = null), void 0 === n && (n = earcut), Xs.ExtrudePolygon(e, t, i, n)
|
|
}, e.CreateTube = function(e, t, i) {
|
|
return void 0 === i && (i = null), Ks.CreateTube(e, t, i)
|
|
}, e.CreatePolyhedron = function(e, t, i) {
|
|
return void 0 === i && (i = null), Vn.CreatePolyhedron(e, t, i)
|
|
}, e.CreateDecal = function(e, t, i) {
|
|
return Zs.CreateDecal(e, t, i)
|
|
}, e
|
|
}(),
|
|
$s = function() {
|
|
return function(e, t, i) {
|
|
this.quality = e, this.distance = t, this.optimizeMesh = i
|
|
}
|
|
}(),
|
|
ea = function() {
|
|
function e() {
|
|
this.running = !1, this._simplificationArray = []
|
|
}
|
|
return e.prototype.addTask = function(e) {
|
|
this._simplificationArray.push(e)
|
|
}, e.prototype.executeNext = function() {
|
|
var e = this._simplificationArray.pop();
|
|
e ? (this.running = !0, this.runSimplification(e)) : this.running = !1
|
|
}, e.prototype.runSimplification = function(e) {
|
|
var t = this;
|
|
if (e.parallelProcessing) e.settings.forEach(function(i) {
|
|
t.getSimplifier(e).simplify(i, function(n) {
|
|
e.mesh.addLODLevel(i.distance, n), n.isVisible = !0, i.quality === e.settings[e.settings.length - 1].quality && e.successCallback && e.successCallback(), t.executeNext()
|
|
})
|
|
});
|
|
else {
|
|
var i = this.getSimplifier(e);
|
|
ye.a.Run(e.settings.length, function(t) {
|
|
var n, r;
|
|
n = e.settings[t.index], r = function() {
|
|
t.executeNext()
|
|
}, i.simplify(n, function(t) {
|
|
e.mesh.addLODLevel(n.distance, t), t.isVisible = !0, r()
|
|
})
|
|
}, function() {
|
|
e.successCallback && e.successCallback(), t.executeNext()
|
|
})
|
|
}
|
|
}, e.prototype.getSimplifier = function(e) {
|
|
switch (e.simplificationType) {
|
|
case qs.QUADRATIC:
|
|
default:
|
|
return new oa(e.mesh)
|
|
}
|
|
}, e
|
|
}();
|
|
! function(e) {
|
|
e[e.QUADRATIC = 0] = "QUADRATIC"
|
|
}(qs || (qs = {}));
|
|
var ta = function() {
|
|
return function(e) {
|
|
this.vertices = e, this.error = new Array(4), this.deleted = !1, this.isDirty = !1, this.deletePending = !1, this.borderFactor = 0
|
|
}
|
|
}(),
|
|
ia = function() {
|
|
function e(e, t) {
|
|
this.position = e, this.id = t, this.isBorder = !0, this.q = new na, this.triangleCount = 0, this.triangleStart = 0, this.originalOffsets = []
|
|
}
|
|
return e.prototype.updatePosition = function(e) {
|
|
this.position.copyFrom(e)
|
|
}, e
|
|
}(),
|
|
na = function() {
|
|
function e(e) {
|
|
this.data = new Array(10);
|
|
for (var t = 0; t < 10; ++t) e && e[t] ? this.data[t] = e[t] : this.data[t] = 0
|
|
}
|
|
return e.prototype.det = function(e, t, i, n, r, o, s, a, c) {
|
|
return this.data[e] * this.data[r] * this.data[c] + this.data[i] * this.data[n] * this.data[a] + this.data[t] * this.data[o] * this.data[s] - this.data[i] * this.data[r] * this.data[s] - this.data[e] * this.data[o] * this.data[a] - this.data[t] * this.data[n] * this.data[c]
|
|
}, e.prototype.addInPlace = function(e) {
|
|
for (var t = 0; t < 10; ++t) this.data[t] += e.data[t]
|
|
}, e.prototype.addArrayInPlace = function(e) {
|
|
for (var t = 0; t < 10; ++t) this.data[t] += e[t]
|
|
}, e.prototype.add = function(t) {
|
|
for (var i = new e, n = 0; n < 10; ++n) i.data[n] = this.data[n] + t.data[n];
|
|
return i
|
|
}, e.FromData = function(t, i, n, r) {
|
|
return new e(e.DataFromNumbers(t, i, n, r))
|
|
}, e.DataFromNumbers = function(e, t, i, n) {
|
|
return [e * e, e * t, e * i, e * n, t * t, t * i, t * n, i * i, i * n, n * n]
|
|
}, e
|
|
}(),
|
|
ra = function() {
|
|
return function(e, t) {
|
|
this.vertexId = e, this.triangleId = t
|
|
}
|
|
}(),
|
|
oa = function() {
|
|
function e(e) {
|
|
this._mesh = e, this.syncIterations = 5e3, this.aggressiveness = 7, this.decimationIterations = 100, this.boundingBoxEpsilon = o.h
|
|
}
|
|
return e.prototype.simplify = function(e, t) {
|
|
var i = this;
|
|
this.initDecimatedMesh(), ye.a.Run(this._mesh.subMeshes.length, function(t) {
|
|
i.initWithMesh(t.index, function() {
|
|
i.runDecimation(e, t.index, function() {
|
|
t.executeNext()
|
|
})
|
|
}, e.optimizeMesh)
|
|
}, function() {
|
|
setTimeout(function() {
|
|
t(i._reconstructedMesh)
|
|
}, 0)
|
|
})
|
|
}, e.prototype.runDecimation = function(e, t, i) {
|
|
var n = this,
|
|
r = ~~(this.triangles.length * e.quality),
|
|
s = 0,
|
|
a = this.triangles.length;
|
|
ye.a.Run(this.decimationIterations, function(e) {
|
|
var t, i;
|
|
a - s <= r ? e.breakLoop() : (t = e.index, i = function() {
|
|
e.executeNext()
|
|
}, setTimeout(function() {
|
|
t % 5 == 0 && n.updateMesh(0 === t);
|
|
for (var e = 0; e < n.triangles.length; ++e) n.triangles[e].isDirty = !1;
|
|
var c = 1e-9 * Math.pow(t + 3, n.aggressiveness);
|
|
ye.a.SyncAsyncForLoop(n.triangles.length, n.syncIterations, function(e) {
|
|
var t = ~~((n.triangles.length / 2 + e) % n.triangles.length),
|
|
i = n.triangles[t];
|
|
if (i && !(i.error[3] > c || i.deleted || i.isDirty))
|
|
for (var r = 0; r < 3; ++r)
|
|
if (i.error[r] < c) {
|
|
var a = [],
|
|
l = [],
|
|
u = i.vertices[r],
|
|
h = i.vertices[(r + 1) % 3];
|
|
if (u.isBorder || h.isBorder) continue;
|
|
var d = o.x.Zero();
|
|
n.calculateError(u, h, d);
|
|
var f = new Array;
|
|
if (n.isFlipped(u, h, d, a, f)) continue;
|
|
if (n.isFlipped(h, u, d, l, f)) continue;
|
|
if (a.indexOf(!0) < 0 || l.indexOf(!0) < 0) continue;
|
|
var p = new Array;
|
|
if (f.forEach(function(e) {
|
|
-1 === p.indexOf(e) && (e.deletePending = !0, p.push(e))
|
|
}), p.length % 2 != 0) continue;
|
|
u.q = h.q.add(u.q), u.updatePosition(d);
|
|
var _ = n.references.length;
|
|
s = n.updateTriangles(u, u, a, s), s = n.updateTriangles(u, h, l, s);
|
|
var g = n.references.length - _;
|
|
if (g <= u.triangleCount) {
|
|
if (g)
|
|
for (var m = 0; m < g; m++) n.references[u.triangleStart + m] = n.references[_ + m]
|
|
} else u.triangleStart = _;
|
|
u.triangleCount = g;
|
|
break
|
|
}
|
|
}, i, function() {
|
|
return a - s <= r
|
|
})
|
|
}, 0))
|
|
}, function() {
|
|
setTimeout(function() {
|
|
n.reconstructMesh(t), i()
|
|
}, 0)
|
|
})
|
|
}, e.prototype.initWithMesh = function(e, t, i) {
|
|
var n = this;
|
|
this.vertices = [], this.triangles = [];
|
|
var r = this._mesh.getVerticesData(Oi.b.PositionKind),
|
|
s = this._mesh.getIndices(),
|
|
a = this._mesh.subMeshes[e],
|
|
c = [],
|
|
l = a.verticesCount;
|
|
ye.a.SyncAsyncForLoop(l, this.syncIterations / 4 >> 0, function(e) {
|
|
if (r) {
|
|
var t = e + a.verticesStart,
|
|
s = o.x.FromArray(r, 3 * t),
|
|
l = function(e) {
|
|
if (i)
|
|
for (var t = 0; t < n.vertices.length; ++t)
|
|
if (n.vertices[t].position.equals(e)) return n.vertices[t];
|
|
return null
|
|
}(s) || new ia(s, n.vertices.length);
|
|
l.originalOffsets.push(t), l.id === n.vertices.length && n.vertices.push(l), c.push(l.id)
|
|
}
|
|
}, function() {
|
|
ye.a.SyncAsyncForLoop(a.indexCount / 3, n.syncIterations, function(e) {
|
|
if (s) {
|
|
var t = 3 * (a.indexStart / 3 + e),
|
|
i = s[t + 0],
|
|
r = s[t + 1],
|
|
o = s[t + 2],
|
|
l = n.vertices[c[i - a.verticesStart]],
|
|
u = n.vertices[c[r - a.verticesStart]],
|
|
h = n.vertices[c[o - a.verticesStart]],
|
|
d = new ta([l, u, h]);
|
|
d.originalOffset = t, n.triangles.push(d)
|
|
}
|
|
}, function() {
|
|
n.init(t)
|
|
})
|
|
})
|
|
}, e.prototype.init = function(e) {
|
|
var t = this;
|
|
ye.a.SyncAsyncForLoop(this.triangles.length, this.syncIterations, function(e) {
|
|
var i = t.triangles[e];
|
|
i.normal = o.x.Cross(i.vertices[1].position.subtract(i.vertices[0].position), i.vertices[2].position.subtract(i.vertices[0].position)).normalize();
|
|
for (var n = 0; n < 3; n++) i.vertices[n].q.addArrayInPlace(na.DataFromNumbers(i.normal.x, i.normal.y, i.normal.z, -o.x.Dot(i.normal, i.vertices[0].position)))
|
|
}, function() {
|
|
ye.a.SyncAsyncForLoop(t.triangles.length, t.syncIterations, function(e) {
|
|
for (var i = t.triangles[e], n = 0; n < 3; ++n) i.error[n] = t.calculateError(i.vertices[n], i.vertices[(n + 1) % 3]);
|
|
i.error[3] = Math.min(i.error[0], i.error[1], i.error[2])
|
|
}, function() {
|
|
e()
|
|
})
|
|
})
|
|
}, e.prototype.reconstructMesh = function(e) {
|
|
var t, i, n, r = [];
|
|
for (t = 0; t < this.vertices.length; ++t) this.vertices[t].triangleCount = 0;
|
|
for (t = 0; t < this.triangles.length; ++t)
|
|
if (!this.triangles[t].deleted) {
|
|
for (i = this.triangles[t], n = 0; n < 3; ++n) i.vertices[n].triangleCount = 1;
|
|
r.push(i)
|
|
} var o = this._reconstructedMesh.getVerticesData(Oi.b.PositionKind) || [],
|
|
s = this._reconstructedMesh.getVerticesData(Oi.b.NormalKind) || [],
|
|
a = this._reconstructedMesh.getVerticesData(Oi.b.UVKind) || [],
|
|
c = this._reconstructedMesh.getVerticesData(Oi.b.ColorKind) || [],
|
|
l = this._mesh.getVerticesData(Oi.b.NormalKind),
|
|
u = this._mesh.getVerticesData(Oi.b.UVKind),
|
|
h = this._mesh.getVerticesData(Oi.b.ColorKind),
|
|
d = 0;
|
|
for (t = 0; t < this.vertices.length; ++t) {
|
|
var f = this.vertices[t];
|
|
f.id = d, f.triangleCount && f.originalOffsets.forEach(function(e) {
|
|
l && (o.push(f.position.x), o.push(f.position.y), o.push(f.position.z), s.push(l[3 * e]), s.push(l[3 * e + 1]), s.push(l[3 * e + 2]), u && u.length && (a.push(u[2 * e]), a.push(u[2 * e + 1])), h && h.length && (c.push(h[4 * e]), c.push(h[4 * e + 1]), c.push(h[4 * e + 2]), c.push(h[4 * e + 3])), ++d)
|
|
})
|
|
}
|
|
var p = this._reconstructedMesh.getTotalIndices(),
|
|
_ = this._reconstructedMesh.getTotalVertices(),
|
|
g = this._reconstructedMesh.subMeshes;
|
|
this._reconstructedMesh.subMeshes = [];
|
|
var m = this._reconstructedMesh.getIndices(),
|
|
v = this._mesh.getIndices();
|
|
for (t = 0; t < r.length; ++t) i = r[t], [0, 1, 2].forEach(function(e) {
|
|
var t = v[i.originalOffset + e],
|
|
n = i.vertices[e].originalOffsets.indexOf(t);
|
|
n < 0 && (n = 0), m.push(i.vertices[e].id + n + _)
|
|
});
|
|
this._reconstructedMesh.setIndices(m), this._reconstructedMesh.setVerticesData(Oi.b.PositionKind, o), this._reconstructedMesh.setVerticesData(Oi.b.NormalKind, s), a.length > 0 && this._reconstructedMesh.setVerticesData(Oi.b.UVKind, a), c.length > 0 && this._reconstructedMesh.setVerticesData(Oi.b.ColorKind, c);
|
|
var y = this._mesh.subMeshes[e];
|
|
e > 0 && (this._reconstructedMesh.subMeshes = [], g.forEach(function(e) {
|
|
Os.b.AddToMesh(e.materialIndex, e.verticesStart, e.verticesCount, e.indexStart, e.indexCount, e.getMesh())
|
|
}), Os.b.AddToMesh(y.materialIndex, _, d, p, 3 * r.length, this._reconstructedMesh))
|
|
}, e.prototype.initDecimatedMesh = function() {
|
|
this._reconstructedMesh = new fe.a(this._mesh.name + "Decimated", this._mesh.getScene()), this._reconstructedMesh.material = this._mesh.material, this._reconstructedMesh.parent = this._mesh.parent, this._reconstructedMesh.isVisible = !1, this._reconstructedMesh.renderingGroupId = this._mesh.renderingGroupId
|
|
}, e.prototype.isFlipped = function(e, t, i, n, r) {
|
|
for (var s = 0; s < e.triangleCount; ++s) {
|
|
var a = this.triangles[this.references[e.triangleStart + s].triangleId];
|
|
if (!a.deleted) {
|
|
var c = this.references[e.triangleStart + s].vertexId,
|
|
l = a.vertices[(c + 1) % 3],
|
|
u = a.vertices[(c + 2) % 3];
|
|
if (l !== t && u !== t) {
|
|
var h = l.position.subtract(i);
|
|
h = h.normalize();
|
|
var d = u.position.subtract(i);
|
|
if (d = d.normalize(), Math.abs(o.x.Dot(h, d)) > .999) return !0;
|
|
var f = o.x.Cross(h, d).normalize();
|
|
if (n[s] = !1, o.x.Dot(f, a.normal) < .2) return !0
|
|
} else n[s] = !0, r.push(a)
|
|
}
|
|
}
|
|
return !1
|
|
}, e.prototype.updateTriangles = function(e, t, i, n) {
|
|
for (var r = n, o = 0; o < t.triangleCount; ++o) {
|
|
var s = this.references[t.triangleStart + o],
|
|
a = this.triangles[s.triangleId];
|
|
a.deleted || (i[o] && a.deletePending ? (a.deleted = !0, r++) : (a.vertices[s.vertexId] = e, a.isDirty = !0, a.error[0] = this.calculateError(a.vertices[0], a.vertices[1]) + a.borderFactor / 2, a.error[1] = this.calculateError(a.vertices[1], a.vertices[2]) + a.borderFactor / 2, a.error[2] = this.calculateError(a.vertices[2], a.vertices[0]) + a.borderFactor / 2, a.error[3] = Math.min(a.error[0], a.error[1], a.error[2]), this.references.push(s)))
|
|
}
|
|
return r
|
|
}, e.prototype.identifyBorder = function() {
|
|
for (var e = 0; e < this.vertices.length; ++e) {
|
|
var t, i = [],
|
|
n = [],
|
|
r = this.vertices[e];
|
|
for (t = 0; t < r.triangleCount; ++t)
|
|
for (var o = this.triangles[this.references[r.triangleStart + t].triangleId], s = 0; s < 3; s++) {
|
|
for (var a = 0, c = o.vertices[s]; a < i.length && n[a] !== c.id;) ++a;
|
|
a === i.length ? (i.push(1), n.push(c.id)) : i[a]++
|
|
}
|
|
for (t = 0; t < i.length; ++t) 1 === i[t] ? this.vertices[n[t]].isBorder = !0 : this.vertices[n[t]].isBorder = !1
|
|
}
|
|
}, e.prototype.updateMesh = function(e) {
|
|
var t, i, n, r;
|
|
if (void 0 === e && (e = !1), !e) {
|
|
var o = [];
|
|
for (t = 0; t < this.triangles.length; ++t) this.triangles[t].deleted || o.push(this.triangles[t]);
|
|
this.triangles = o
|
|
}
|
|
for (t = 0; t < this.vertices.length; ++t) this.vertices[t].triangleCount = 0, this.vertices[t].triangleStart = 0;
|
|
for (t = 0; t < this.triangles.length; ++t)
|
|
for (i = this.triangles[t], n = 0; n < 3; ++n)(r = i.vertices[n]).triangleCount++;
|
|
var s = 0;
|
|
for (t = 0; t < this.vertices.length; ++t) this.vertices[t].triangleStart = s, s += this.vertices[t].triangleCount, this.vertices[t].triangleCount = 0;
|
|
var a = new Array(3 * this.triangles.length);
|
|
for (t = 0; t < this.triangles.length; ++t)
|
|
for (i = this.triangles[t], n = 0; n < 3; ++n) a[(r = i.vertices[n]).triangleStart + r.triangleCount] = new ra(n, t), r.triangleCount++;
|
|
this.references = a, e && this.identifyBorder()
|
|
}, e.prototype.vertexError = function(e, t) {
|
|
var i = t.x,
|
|
n = t.y,
|
|
r = t.z;
|
|
return e.data[0] * i * i + 2 * e.data[1] * i * n + 2 * e.data[2] * i * r + 2 * e.data[3] * i + e.data[4] * n * n + 2 * e.data[5] * n * r + 2 * e.data[6] * n + e.data[7] * r * r + 2 * e.data[8] * r + e.data[9]
|
|
}, e.prototype.calculateError = function(e, t, i) {
|
|
var n = e.q.add(t.q),
|
|
r = e.isBorder && t.isBorder,
|
|
s = 0,
|
|
a = n.det(0, 1, 2, 1, 4, 5, 2, 5, 7);
|
|
if (0 === a || r) {
|
|
var c = e.position.add(t.position).divide(new o.x(2, 2, 2)),
|
|
l = this.vertexError(n, e.position),
|
|
u = this.vertexError(n, t.position),
|
|
h = this.vertexError(n, c);
|
|
(s = Math.min(l, u, h)) === l ? i && i.copyFrom(e.position) : s === u ? i && i.copyFrom(t.position) : i && i.copyFrom(c)
|
|
} else i || (i = o.x.Zero()), i.x = -1 / a * n.det(1, 2, 3, 4, 5, 6, 5, 7, 8), i.y = 1 / a * n.det(0, 2, 3, 1, 5, 6, 2, 7, 8), i.z = -1 / a * n.det(0, 1, 3, 1, 4, 6, 2, 5, 8), s = this.vertexError(n, i);
|
|
return s
|
|
}, e
|
|
}();
|
|
Object.defineProperty(W.a.prototype, "simplificationQueue", {
|
|
get: function() {
|
|
if (!this._simplificationQueue) {
|
|
this._simplificationQueue = new ea;
|
|
var e = this._getComponent(Ae.a.NAME_SIMPLIFICATIONQUEUE);
|
|
e || (e = new sa(this), this._addComponent(e))
|
|
}
|
|
return this._simplificationQueue
|
|
},
|
|
set: function(e) {
|
|
this._simplificationQueue = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), fe.a.prototype.simplify = function(e, t, i, n) {
|
|
return void 0 === t && (t = !0), void 0 === i && (i = qs.QUADRATIC), this.getScene().simplificationQueue.addTask({
|
|
settings: e,
|
|
parallelProcessing: t,
|
|
mesh: this,
|
|
simplificationType: i,
|
|
successCallback: n
|
|
}), this
|
|
};
|
|
var sa = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_SIMPLIFICATIONQUEUE, this.scene = e
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._beforeCameraUpdateStage.registerStep(Ae.a.STEP_BEFORECAMERAUPDATE_SIMPLIFICATIONQUEUE, this, this._beforeCameraUpdate)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.dispose = function() {}, e.prototype._beforeCameraUpdate = function() {
|
|
this.scene._simplificationQueue && !this.scene._simplificationQueue.running && this.scene._simplificationQueue.executeNext()
|
|
}, e
|
|
}(),
|
|
aa = i(110),
|
|
ca = i(78),
|
|
la = i(73);
|
|
ge.b.OfflineProviderFactory = function(e, t, i) {
|
|
return void 0 === i && (i = !1), new ha(e, t, i)
|
|
};
|
|
var ua, ha = function() {
|
|
function e(t, i, n) {
|
|
var r = this;
|
|
void 0 === n && (n = !1), this._idbFactory = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB, this._callbackManifestChecked = i, this._currentSceneUrl = e._ReturnFullUrlLocation(t), this._db = null, this._enableSceneOffline = !1, this._enableTexturesOffline = !1, this._manifestVersionFound = 0, this._mustUpdateRessources = !1, this._hasReachedQuota = !1, e.IDBStorageEnabled ? n ? (this._enableSceneOffline = !0, this._enableTexturesOffline = !0, this._manifestVersionFound = 1, ye.h.SetImmediate(function() {
|
|
r._callbackManifestChecked(!0)
|
|
})) : this._checkManifestFile() : this._callbackManifestChecked(!0)
|
|
}
|
|
return Object.defineProperty(e.prototype, "enableSceneOffline", {
|
|
get: function() {
|
|
return this._enableSceneOffline
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "enableTexturesOffline", {
|
|
get: function() {
|
|
return this._enableTexturesOffline
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._checkManifestFile = function() {
|
|
var t = this,
|
|
i = function() {
|
|
t._enableSceneOffline = !1, t._enableTexturesOffline = !1, t._callbackManifestChecked(!1)
|
|
},
|
|
n = !1,
|
|
r = this._currentSceneUrl + ".manifest",
|
|
o = new gs.a;
|
|
navigator.onLine && (n = !0, r = r + (null == r.match(/\?/) ? "?" : "&") + Date.now()), o.open("GET", r), o.addEventListener("load", function() {
|
|
if (200 === o.status || e._ValidateXHRData(o, 1)) try {
|
|
var n = JSON.parse(o.response);
|
|
t._enableSceneOffline = n.enableSceneOffline, t._enableTexturesOffline = n.enableTexturesOffline && e.IsUASupportingBlobStorage, n.version && !isNaN(parseInt(n.version)) && (t._manifestVersionFound = n.version), t._callbackManifestChecked && t._callbackManifestChecked(!0)
|
|
} catch (e) {
|
|
i()
|
|
} else i()
|
|
}, !1), o.addEventListener("error", function() {
|
|
if (n) {
|
|
n = !1;
|
|
var e = t._currentSceneUrl + ".manifest";
|
|
o.open("GET", e), o.send()
|
|
} else i()
|
|
}, !1);
|
|
try {
|
|
o.send()
|
|
} catch (e) {
|
|
p.a.Error("Error on XHR send request."), this._callbackManifestChecked(!1)
|
|
}
|
|
}, e.prototype.open = function(e, t) {
|
|
var i = this,
|
|
n = function() {
|
|
i._isSupported = !1, t && t()
|
|
};
|
|
if (this._idbFactory && (this._enableSceneOffline || this._enableTexturesOffline))
|
|
if (this._db) e && e();
|
|
else {
|
|
this._hasReachedQuota = !1, this._isSupported = !0;
|
|
var r = this._idbFactory.open("babylonjs", 1);
|
|
r.onerror = function() {
|
|
n()
|
|
}, r.onblocked = function() {
|
|
p.a.Error("IDB request blocked. Please reload the page."), n()
|
|
}, r.onsuccess = function() {
|
|
i._db = r.result, e()
|
|
}, r.onupgradeneeded = function(e) {
|
|
if (i._db = e.target.result, i._db) try {
|
|
i._db.createObjectStore("scenes", {
|
|
keyPath: "sceneUrl"
|
|
}), i._db.createObjectStore("versions", {
|
|
keyPath: "sceneUrl"
|
|
}), i._db.createObjectStore("textures", {
|
|
keyPath: "textureUrl"
|
|
})
|
|
} catch (e) {
|
|
p.a.Error("Error while creating object stores. Exception: " + e.message), n()
|
|
}
|
|
}
|
|
}
|
|
else this._isSupported = !1, t && t()
|
|
}, e.prototype.loadImage = function(t, i) {
|
|
var n = this,
|
|
r = e._ReturnFullUrlLocation(t),
|
|
o = function() {
|
|
n._hasReachedQuota || null === n._db ? i.src = t : n._saveImageIntoDBAsync(r, i)
|
|
};
|
|
this._mustUpdateRessources ? o() : this._loadImageFromDBAsync(r, i, o)
|
|
}, e.prototype._loadImageFromDBAsync = function(e, t, i) {
|
|
if (this._isSupported && null !== this._db) {
|
|
var n, r = this._db.transaction(["textures"]);
|
|
r.onabort = function() {
|
|
t.src = e
|
|
}, r.oncomplete = function() {
|
|
var r;
|
|
if (n) {
|
|
var o = window.URL || window.webkitURL;
|
|
r = o.createObjectURL(n.data), t.onerror = function() {
|
|
p.a.Error("Error loading image from blob URL: " + r + " switching back to web url: " + e), t.src = e
|
|
}, t.src = r
|
|
} else i()
|
|
};
|
|
var o = r.objectStore("textures").get(e);
|
|
o.onsuccess = function(e) {
|
|
n = e.target.result
|
|
}, o.onerror = function() {
|
|
p.a.Error("Error loading texture " + e + " from DB."), t.src = e
|
|
}
|
|
} else p.a.Error("Error: IndexedDB not supported by your browser or BabylonJS Database is not open."), t.src = e
|
|
}, e.prototype._saveImageIntoDBAsync = function(t, i) {
|
|
var n = this;
|
|
if (this._isSupported) {
|
|
var r = function() {
|
|
var e;
|
|
if (o) {
|
|
var t = window.URL || window.webkitURL;
|
|
try {
|
|
e = t.createObjectURL(o)
|
|
} catch (i) {
|
|
e = t.createObjectURL(o)
|
|
}
|
|
}
|
|
e && (i.src = e)
|
|
};
|
|
if (e.IsUASupportingBlobStorage) {
|
|
var o, s = new gs.a;
|
|
s.open("GET", t), s.responseType = "blob", s.addEventListener("load", function() {
|
|
if (200 === s.status && n._db) {
|
|
o = s.response;
|
|
var a = n._db.transaction(["textures"], "readwrite");
|
|
a.onabort = function(e) {
|
|
try {
|
|
var t = (e.srcElement || e.target).error;
|
|
t && "QuotaExceededError" === t.name && (n._hasReachedQuota = !0)
|
|
} catch (e) {}
|
|
r()
|
|
}, a.oncomplete = function() {
|
|
r()
|
|
};
|
|
var c = {
|
|
textureUrl: t,
|
|
data: o
|
|
};
|
|
try {
|
|
var l = a.objectStore("textures").put(c);
|
|
l.onsuccess = function() {}, l.onerror = function() {
|
|
r()
|
|
}
|
|
} catch (r) {
|
|
25 === r.code && (e.IsUASupportingBlobStorage = !1, n._enableTexturesOffline = !1), i.src = t
|
|
}
|
|
} else i.src = t
|
|
}, !1), s.addEventListener("error", function() {
|
|
p.a.Error("Error in XHR request in BABYLON.Database."), i.src = t
|
|
}, !1), s.send()
|
|
} else i.src = t
|
|
} else p.a.Error("Error: IndexedDB not supported by your browser or BabylonJS Database is not open."), i.src = t
|
|
}, e.prototype._checkVersionFromDB = function(e, t) {
|
|
var i = this;
|
|
this._loadVersionFromDBAsync(e, t, function() {
|
|
i._saveVersionIntoDBAsync(e, t)
|
|
})
|
|
}, e.prototype._loadVersionFromDBAsync = function(e, t, i) {
|
|
var n, r = this;
|
|
if (this._isSupported && this._db) try {
|
|
var o = this._db.transaction(["versions"]);
|
|
o.oncomplete = function() {
|
|
n ? r._manifestVersionFound !== n.data ? (r._mustUpdateRessources = !0, i()) : t(n.data) : (r._mustUpdateRessources = !0, i())
|
|
}, o.onabort = function() {
|
|
t(-1)
|
|
};
|
|
var s = o.objectStore("versions").get(e);
|
|
s.onsuccess = function(e) {
|
|
n = e.target.result
|
|
}, s.onerror = function() {
|
|
p.a.Error("Error loading version for scene " + e + " from DB."), t(-1)
|
|
}
|
|
} catch (e) {
|
|
p.a.Error("Error while accessing 'versions' object store (READ OP). Exception: " + e.message), t(-1)
|
|
} else p.a.Error("Error: IndexedDB not supported by your browser or BabylonJS Database is not open."), t(-1)
|
|
}, e.prototype._saveVersionIntoDBAsync = function(e, t) {
|
|
var i = this;
|
|
if (this._isSupported && !this._hasReachedQuota && this._db) try {
|
|
var n = this._db.transaction(["versions"], "readwrite");
|
|
n.onabort = function(e) {
|
|
try {
|
|
var n = e.srcElement.error;
|
|
n && "QuotaExceededError" === n.name && (i._hasReachedQuota = !0)
|
|
} catch (e) {}
|
|
t(-1)
|
|
}, n.oncomplete = function() {
|
|
t(i._manifestVersionFound)
|
|
};
|
|
var r = {
|
|
sceneUrl: e,
|
|
data: this._manifestVersionFound
|
|
},
|
|
o = n.objectStore("versions").put(r);
|
|
o.onsuccess = function() {}, o.onerror = function() {
|
|
p.a.Error("Error in DB add version request in BABYLON.Database.")
|
|
}
|
|
} catch (e) {
|
|
p.a.Error("Error while accessing 'versions' object store (WRITE OP). Exception: " + e.message), t(-1)
|
|
} else t(-1)
|
|
}, e.prototype.loadFile = function(t, i, n, r, o) {
|
|
var s = this,
|
|
a = e._ReturnFullUrlLocation(t),
|
|
c = function() {
|
|
s._saveFileAsync(a, i, n, o, r)
|
|
};
|
|
this._checkVersionFromDB(a, function(e) {
|
|
-1 !== e ? s._mustUpdateRessources ? s._saveFileAsync(a, i, n, o, r) : s._loadFileAsync(a, i, c) : r && r()
|
|
})
|
|
}, e.prototype._loadFileAsync = function(e, t, i) {
|
|
if (this._isSupported && this._db) {
|
|
var n, r;
|
|
n = -1 !== e.indexOf(".babylon") ? "scenes" : "textures";
|
|
var o = this._db.transaction([n]);
|
|
o.oncomplete = function() {
|
|
r ? t(r.data) : i()
|
|
}, o.onabort = function() {
|
|
i()
|
|
};
|
|
var s = o.objectStore(n).get(e);
|
|
s.onsuccess = function(e) {
|
|
r = e.target.result
|
|
}, s.onerror = function() {
|
|
p.a.Error("Error loading file " + e + " from DB."), i()
|
|
}
|
|
} else p.a.Error("Error: IndexedDB not supported by your browser or BabylonJS Database is not open."), t()
|
|
}, e.prototype._saveFileAsync = function(t, i, n, r, o) {
|
|
var s = this;
|
|
if (this._isSupported) {
|
|
var a;
|
|
a = -1 !== t.indexOf(".babylon") ? "scenes" : "textures";
|
|
var c, l = new gs.a;
|
|
l.open("GET", t + "?" + Date.now()), r && (l.responseType = "arraybuffer"), n && (l.onprogress = n), l.addEventListener("load", function() {
|
|
if (200 === l.status || l.status < 400 && e._ValidateXHRData(l, r ? 6 : 1))
|
|
if (c = r ? l.response : l.responseText, !s._hasReachedQuota && s._db) {
|
|
var n, u = s._db.transaction([a], "readwrite");
|
|
u.onabort = function(e) {
|
|
try {
|
|
var t = e.srcElement.error;
|
|
t && "QuotaExceededError" === t.name && (s._hasReachedQuota = !0)
|
|
} catch (e) {}
|
|
i(c)
|
|
}, u.oncomplete = function() {
|
|
i(c)
|
|
}, n = "scenes" === a ? {
|
|
sceneUrl: t,
|
|
data: c,
|
|
version: s._manifestVersionFound
|
|
} : {
|
|
textureUrl: t,
|
|
data: c
|
|
};
|
|
try {
|
|
var h = u.objectStore(a).put(n);
|
|
h.onsuccess = function() {}, h.onerror = function() {
|
|
p.a.Error("Error in DB add file request in BABYLON.Database.")
|
|
}
|
|
} catch (e) {
|
|
i(c)
|
|
}
|
|
} else i(c);
|
|
else l.status >= 400 && o ? o(l) : i()
|
|
}, !1), l.addEventListener("error", function() {
|
|
p.a.Error("error on XHR request."), i()
|
|
}, !1), l.send()
|
|
} else p.a.Error("Error: IndexedDB not supported by your browser or Babylon.js Database is not open."), i()
|
|
}, e._ValidateXHRData = function(e, t) {
|
|
void 0 === t && (t = 7);
|
|
try {
|
|
if (1 & t) {
|
|
if (e.responseText && e.responseText.length > 0) return !0;
|
|
if (1 === t) return !1
|
|
}
|
|
if (2 & t) {
|
|
var i = us.GetTGAHeader(e.response);
|
|
if (i.width && i.height && i.width > 0 && i.height > 0) return !0;
|
|
if (2 === t) return !1
|
|
}
|
|
if (4 & t) {
|
|
var n = new Uint8Array(e.response, 0, 3);
|
|
return 68 === n[0] && 68 === n[1] && 83 === n[2]
|
|
}
|
|
} catch (e) {}
|
|
return !1
|
|
}, e.IsUASupportingBlobStorage = !0, e.IDBStorageEnabled = !1, e._ParseURL = function(e) {
|
|
document.createElement("a").href = e;
|
|
var t = e.substring(0, e.lastIndexOf("#")),
|
|
i = e.substring(t.lastIndexOf("/") + 1, e.length);
|
|
return e.substring(0, e.indexOf(i, 0))
|
|
}, e._ReturnFullUrlLocation = function(t) {
|
|
return -1 === t.indexOf("http:/") && -1 === t.indexOf("https:/") ? e._ParseURL(window.location.href) + t : t
|
|
}, e
|
|
}(),
|
|
da = function() {
|
|
function e() {
|
|
this.direction1 = new o.x(0, 1, 0), this.direction2 = new o.x(0, 1, 0), this.minEmitBox = new o.x(-.5, -.5, -.5), this.maxEmitBox = new o.x(.5, .5, .5)
|
|
}
|
|
return e.prototype.startDirectionFunction = function(e, t, i) {
|
|
var n = D.a.RandomRange(this.direction1.x, this.direction2.x),
|
|
r = D.a.RandomRange(this.direction1.y, this.direction2.y),
|
|
s = D.a.RandomRange(this.direction1.z, this.direction2.z);
|
|
o.x.TransformNormalFromFloatsToRef(n, r, s, e, t)
|
|
}, e.prototype.startPositionFunction = function(e, t, i) {
|
|
var n = D.a.RandomRange(this.minEmitBox.x, this.maxEmitBox.x),
|
|
r = D.a.RandomRange(this.minEmitBox.y, this.maxEmitBox.y),
|
|
s = D.a.RandomRange(this.minEmitBox.z, this.maxEmitBox.z);
|
|
o.x.TransformCoordinatesFromFloatsToRef(n, r, s, e, t)
|
|
}, e.prototype.clone = function() {
|
|
var t = new e;
|
|
return S.a.DeepCopy(this, t), t
|
|
}, e.prototype.applyToShader = function(e) {
|
|
e.setVector3("direction1", this.direction1), e.setVector3("direction2", this.direction2), e.setVector3("minEmitBox", this.minEmitBox), e.setVector3("maxEmitBox", this.maxEmitBox)
|
|
}, e.prototype.getEffectDefines = function() {
|
|
return "#define BOXEMITTER"
|
|
}, e.prototype.getClassName = function() {
|
|
return "BoxParticleEmitter"
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.type = this.getClassName(), e.direction1 = this.direction1.asArray(), e.direction2 = this.direction2.asArray(), e.minEmitBox = this.minEmitBox.asArray(), e.maxEmitBox = this.maxEmitBox.asArray(), e
|
|
}, e.prototype.parse = function(e) {
|
|
o.x.FromArrayToRef(e.direction1, 0, this.direction1), o.x.FromArrayToRef(e.direction2, 0, this.direction2), o.x.FromArrayToRef(e.minEmitBox, 0, this.minEmitBox), o.x.FromArrayToRef(e.maxEmitBox, 0, this.maxEmitBox)
|
|
}, e
|
|
}(),
|
|
fa = function() {
|
|
function e(e, t, i) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = Math.PI), void 0 === i && (i = 0), this.directionRandomizer = i, this.radiusRange = 1, this.heightRange = 1, this.emitFromSpawnPointOnly = !1, this.angle = t, this.radius = e
|
|
}
|
|
return Object.defineProperty(e.prototype, "radius", {
|
|
get: function() {
|
|
return this._radius
|
|
},
|
|
set: function(e) {
|
|
this._radius = e, this._buildHeight()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "angle", {
|
|
get: function() {
|
|
return this._angle
|
|
},
|
|
set: function(e) {
|
|
this._angle = e, this._buildHeight()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._buildHeight = function() {
|
|
0 !== this._angle ? this._height = this._radius / Math.tan(this._angle / 2) : this._height = 1
|
|
}, e.prototype.startDirectionFunction = function(e, t, i) {
|
|
if (1 === Math.abs(Math.cos(this._angle))) o.x.TransformNormalFromFloatsToRef(0, 1, 0, e, t);
|
|
else {
|
|
var n = i.position.subtract(e.getTranslation()).normalize(),
|
|
r = D.a.RandomRange(0, this.directionRandomizer),
|
|
s = D.a.RandomRange(0, this.directionRandomizer),
|
|
a = D.a.RandomRange(0, this.directionRandomizer);
|
|
n.x += r, n.y += s, n.z += a, n.normalize(), o.x.TransformNormalFromFloatsToRef(n.x, n.y, n.z, e, t)
|
|
}
|
|
}, e.prototype.startPositionFunction = function(e, t, i) {
|
|
var n, r = D.a.RandomRange(0, 2 * Math.PI);
|
|
n = this.emitFromSpawnPointOnly ? 1e-4 : 1 - (n = D.a.RandomRange(0, this.heightRange)) * n;
|
|
var s = this._radius - D.a.RandomRange(0, this._radius * this.radiusRange),
|
|
a = (s *= n) * Math.sin(r),
|
|
c = s * Math.cos(r),
|
|
l = n * this._height;
|
|
o.x.TransformCoordinatesFromFloatsToRef(a, l, c, e, t)
|
|
}, e.prototype.clone = function() {
|
|
var t = new e(this._radius, this._angle, this.directionRandomizer);
|
|
return S.a.DeepCopy(this, t), t
|
|
}, e.prototype.applyToShader = function(e) {
|
|
e.setFloat2("radius", this._radius, this.radiusRange), e.setFloat("coneAngle", this._angle), e.setFloat2("height", this._height, this.heightRange), e.setFloat("directionRandomizer", this.directionRandomizer)
|
|
}, e.prototype.getEffectDefines = function() {
|
|
var e = "#define CONEEMITTER";
|
|
return this.emitFromSpawnPointOnly && (e += "\n#define CONEEMITTERSPAWNPOINT"), e
|
|
}, e.prototype.getClassName = function() {
|
|
return "ConeParticleEmitter"
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.type = this.getClassName(), e.radius = this._radius, e.angle = this._angle, e.directionRandomizer = this.directionRandomizer, e
|
|
}, e.prototype.parse = function(e) {
|
|
this.radius = e.radius, this.angle = e.angle, this.directionRandomizer = e.directionRandomizer
|
|
}, e
|
|
}(),
|
|
pa = function() {
|
|
function e(e, t, i, n) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = 1), void 0 === i && (i = 1), void 0 === n && (n = 0), this.radius = e, this.height = t, this.radiusRange = i, this.directionRandomizer = n
|
|
}
|
|
return e.prototype.startDirectionFunction = function(e, t, i) {
|
|
var n = i.position.subtract(e.getTranslation()).normalize(),
|
|
r = D.a.RandomRange(-this.directionRandomizer / 2, this.directionRandomizer / 2),
|
|
s = Math.atan2(n.x, n.z);
|
|
s += D.a.RandomRange(-Math.PI / 2, Math.PI / 2) * this.directionRandomizer, n.y = r, n.x = Math.sin(s), n.z = Math.cos(s), n.normalize(), o.x.TransformNormalFromFloatsToRef(n.x, n.y, n.z, e, t)
|
|
}, e.prototype.startPositionFunction = function(e, t, i) {
|
|
var n = D.a.RandomRange(-this.height / 2, this.height / 2),
|
|
r = D.a.RandomRange(0, 2 * Math.PI),
|
|
s = D.a.RandomRange((1 - this.radiusRange) * (1 - this.radiusRange), 1),
|
|
a = Math.sqrt(s) * this.radius,
|
|
c = a * Math.cos(r),
|
|
l = a * Math.sin(r);
|
|
o.x.TransformCoordinatesFromFloatsToRef(c, n, l, e, t)
|
|
}, e.prototype.clone = function() {
|
|
var t = new e(this.radius, this.directionRandomizer);
|
|
return S.a.DeepCopy(this, t), t
|
|
}, e.prototype.applyToShader = function(e) {
|
|
e.setFloat("radius", this.radius), e.setFloat("height", this.height), e.setFloat("radiusRange", this.radiusRange), e.setFloat("directionRandomizer", this.directionRandomizer)
|
|
}, e.prototype.getEffectDefines = function() {
|
|
return "#define CYLINDEREMITTER"
|
|
}, e.prototype.getClassName = function() {
|
|
return "CylinderParticleEmitter"
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.type = this.getClassName(), e.radius = this.radius, e.height = this.height, e.radiusRange = this.radiusRange, e.directionRandomizer = this.directionRandomizer, e
|
|
}, e.prototype.parse = function(e) {
|
|
this.radius = e.radius, this.height = e.height, this.radiusRange = e.radiusRange, this.directionRandomizer = e.directionRandomizer
|
|
}, e
|
|
}(),
|
|
_a = function(e) {
|
|
function t(t, i, n, r, s) {
|
|
void 0 === t && (t = 1), void 0 === i && (i = 1), void 0 === n && (n = 1), void 0 === r && (r = new o.x(0, 1, 0)), void 0 === s && (s = new o.x(0, 1, 0));
|
|
var a = e.call(this, t, i, n) || this;
|
|
return a.direction1 = r, a.direction2 = s, a
|
|
}
|
|
return l.d(t, e), t.prototype.startDirectionFunction = function(e, t, i) {
|
|
var n = D.a.RandomRange(this.direction1.x, this.direction2.x),
|
|
r = D.a.RandomRange(this.direction1.y, this.direction2.y),
|
|
s = D.a.RandomRange(this.direction1.z, this.direction2.z);
|
|
o.x.TransformNormalFromFloatsToRef(n, r, s, e, t)
|
|
}, t.prototype.clone = function() {
|
|
var e = new t(this.radius, this.height, this.radiusRange, this.direction1, this.direction2);
|
|
return S.a.DeepCopy(this, e), e
|
|
}, t.prototype.applyToShader = function(e) {
|
|
e.setFloat("radius", this.radius), e.setFloat("height", this.height), e.setFloat("radiusRange", this.radiusRange), e.setVector3("direction1", this.direction1), e.setVector3("direction2", this.direction2)
|
|
}, t.prototype.getEffectDefines = function() {
|
|
return "#define CYLINDEREMITTER\n#define DIRECTEDCYLINDEREMITTER"
|
|
}, t.prototype.getClassName = function() {
|
|
return "CylinderDirectedParticleEmitter"
|
|
}, t.prototype.serialize = function() {
|
|
var t = e.prototype.serialize.call(this);
|
|
return t.direction1 = this.direction1.asArray(), t.direction2 = this.direction2.asArray(), t
|
|
}, t.prototype.parse = function(t) {
|
|
e.prototype.parse.call(this, t), this.direction1.copyFrom(t.direction1), this.direction2.copyFrom(t.direction2)
|
|
}, t
|
|
}(pa),
|
|
ga = function() {
|
|
function e(e, t, i) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = 1), void 0 === i && (i = 0), this.radius = e, this.radiusRange = t, this.directionRandomizer = i
|
|
}
|
|
return e.prototype.startDirectionFunction = function(e, t, i) {
|
|
var n = i.position.subtract(e.getTranslation()).normalize(),
|
|
r = D.a.RandomRange(0, this.directionRandomizer),
|
|
s = D.a.RandomRange(0, this.directionRandomizer),
|
|
a = D.a.RandomRange(0, this.directionRandomizer);
|
|
n.x += r, n.y += s, n.z += a, n.normalize(), o.x.TransformNormalFromFloatsToRef(n.x, n.y, n.z, e, t)
|
|
}, e.prototype.startPositionFunction = function(e, t, i) {
|
|
var n = this.radius - D.a.RandomRange(0, this.radius * this.radiusRange),
|
|
r = D.a.RandomRange(0, 1),
|
|
s = D.a.RandomRange(0, 2 * Math.PI),
|
|
a = Math.acos(2 * r - 1),
|
|
c = n * Math.cos(s) * Math.sin(a),
|
|
l = n * Math.cos(a),
|
|
u = n * Math.sin(s) * Math.sin(a);
|
|
o.x.TransformCoordinatesFromFloatsToRef(c, Math.abs(l), u, e, t)
|
|
}, e.prototype.clone = function() {
|
|
var t = new e(this.radius, this.directionRandomizer);
|
|
return S.a.DeepCopy(this, t), t
|
|
}, e.prototype.applyToShader = function(e) {
|
|
e.setFloat("radius", this.radius), e.setFloat("radiusRange", this.radiusRange), e.setFloat("directionRandomizer", this.directionRandomizer)
|
|
}, e.prototype.getEffectDefines = function() {
|
|
return "#define HEMISPHERICEMITTER"
|
|
}, e.prototype.getClassName = function() {
|
|
return "HemisphericParticleEmitter"
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.type = this.getClassName(), e.radius = this.radius, e.radiusRange = this.radiusRange, e.directionRandomizer = this.directionRandomizer, e
|
|
}, e.prototype.parse = function(e) {
|
|
this.radius = e.radius, this.radiusRange = e.radiusRange, this.directionRandomizer = e.directionRandomizer
|
|
}, e
|
|
}(),
|
|
ma = function() {
|
|
function e() {
|
|
this.direction1 = new o.x(0, 1, 0), this.direction2 = new o.x(0, 1, 0)
|
|
}
|
|
return e.prototype.startDirectionFunction = function(e, t, i) {
|
|
var n = D.a.RandomRange(this.direction1.x, this.direction2.x),
|
|
r = D.a.RandomRange(this.direction1.y, this.direction2.y),
|
|
s = D.a.RandomRange(this.direction1.z, this.direction2.z);
|
|
o.x.TransformNormalFromFloatsToRef(n, r, s, e, t)
|
|
}, e.prototype.startPositionFunction = function(e, t, i) {
|
|
o.x.TransformCoordinatesFromFloatsToRef(0, 0, 0, e, t)
|
|
}, e.prototype.clone = function() {
|
|
var t = new e;
|
|
return S.a.DeepCopy(this, t), t
|
|
}, e.prototype.applyToShader = function(e) {
|
|
e.setVector3("direction1", this.direction1), e.setVector3("direction2", this.direction2)
|
|
}, e.prototype.getEffectDefines = function() {
|
|
return "#define POINTEMITTER"
|
|
}, e.prototype.getClassName = function() {
|
|
return "PointParticleEmitter"
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.type = this.getClassName(), e.direction1 = this.direction1.asArray(), e.direction2 = this.direction2.asArray(), e
|
|
}, e.prototype.parse = function(e) {
|
|
o.x.FromArrayToRef(e.direction1, 0, this.direction1), o.x.FromArrayToRef(e.direction2, 0, this.direction2)
|
|
}, e
|
|
}(),
|
|
va = function() {
|
|
function e(e, t, i) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = 1), void 0 === i && (i = 0), this.radius = e, this.radiusRange = t, this.directionRandomizer = i
|
|
}
|
|
return e.prototype.startDirectionFunction = function(e, t, i) {
|
|
var n = i.position.subtract(e.getTranslation()).normalize(),
|
|
r = D.a.RandomRange(0, this.directionRandomizer),
|
|
s = D.a.RandomRange(0, this.directionRandomizer),
|
|
a = D.a.RandomRange(0, this.directionRandomizer);
|
|
n.x += r, n.y += s, n.z += a, n.normalize(), o.x.TransformNormalFromFloatsToRef(n.x, n.y, n.z, e, t)
|
|
}, e.prototype.startPositionFunction = function(e, t, i) {
|
|
var n = this.radius - D.a.RandomRange(0, this.radius * this.radiusRange),
|
|
r = D.a.RandomRange(0, 1),
|
|
s = D.a.RandomRange(0, 2 * Math.PI),
|
|
a = Math.acos(2 * r - 1),
|
|
c = n * Math.cos(s) * Math.sin(a),
|
|
l = n * Math.cos(a),
|
|
u = n * Math.sin(s) * Math.sin(a);
|
|
o.x.TransformCoordinatesFromFloatsToRef(c, l, u, e, t)
|
|
}, e.prototype.clone = function() {
|
|
var t = new e(this.radius, this.directionRandomizer);
|
|
return S.a.DeepCopy(this, t), t
|
|
}, e.prototype.applyToShader = function(e) {
|
|
e.setFloat("radius", this.radius), e.setFloat("radiusRange", this.radiusRange), e.setFloat("directionRandomizer", this.directionRandomizer)
|
|
}, e.prototype.getEffectDefines = function() {
|
|
return "#define SPHEREEMITTER"
|
|
}, e.prototype.getClassName = function() {
|
|
return "SphereParticleEmitter"
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.type = this.getClassName(), e.radius = this.radius, e.radiusRange = this.radiusRange, e.directionRandomizer = this.directionRandomizer, e
|
|
}, e.prototype.parse = function(e) {
|
|
this.radius = e.radius, this.radiusRange = e.radiusRange, this.directionRandomizer = e.directionRandomizer
|
|
}, e
|
|
}(),
|
|
ya = function(e) {
|
|
function t(t, i, n) {
|
|
void 0 === t && (t = 1), void 0 === i && (i = new o.x(0, 1, 0)), void 0 === n && (n = new o.x(0, 1, 0));
|
|
var r = e.call(this, t) || this;
|
|
return r.direction1 = i, r.direction2 = n, r
|
|
}
|
|
return l.d(t, e), t.prototype.startDirectionFunction = function(e, t, i) {
|
|
var n = D.a.RandomRange(this.direction1.x, this.direction2.x),
|
|
r = D.a.RandomRange(this.direction1.y, this.direction2.y),
|
|
s = D.a.RandomRange(this.direction1.z, this.direction2.z);
|
|
o.x.TransformNormalFromFloatsToRef(n, r, s, e, t)
|
|
}, t.prototype.clone = function() {
|
|
var e = new t(this.radius, this.direction1, this.direction2);
|
|
return S.a.DeepCopy(this, e), e
|
|
}, t.prototype.applyToShader = function(e) {
|
|
e.setFloat("radius", this.radius), e.setFloat("radiusRange", this.radiusRange), e.setVector3("direction1", this.direction1), e.setVector3("direction2", this.direction2)
|
|
}, t.prototype.getEffectDefines = function() {
|
|
return "#define SPHEREEMITTER\n#define DIRECTEDSPHEREEMITTER"
|
|
}, t.prototype.getClassName = function() {
|
|
return "SphereDirectedParticleEmitter"
|
|
}, t.prototype.serialize = function() {
|
|
var t = e.prototype.serialize.call(this);
|
|
return t.direction1 = this.direction1.asArray(), t.direction2 = this.direction2.asArray(), t
|
|
}, t.prototype.parse = function(t) {
|
|
e.prototype.parse.call(this, t), this.direction1.copyFrom(t.direction1), this.direction2.copyFrom(t.direction2)
|
|
}, t
|
|
}(va),
|
|
ba = function() {
|
|
function e(t) {
|
|
this.animations = [], this.renderingGroupId = 0, this.emitter = null, this.emitRate = 10, this.manualEmitCount = -1, this.updateSpeed = .01, this.targetStopDuration = 0, this.disposeOnStop = !1, this.minEmitPower = 1, this.maxEmitPower = 1, this.minLifeTime = 1, this.maxLifeTime = 1, this.minSize = 1, this.maxSize = 1, this.minScaleX = 1, this.maxScaleX = 1, this.minScaleY = 1, this.maxScaleY = 1, this.minInitialRotation = 0, this.maxInitialRotation = 0, this.minAngularSpeed = 0, this.maxAngularSpeed = 0, this.layerMask = 268435455, this.customShader = null, this.preventAutoStart = !1, this.noiseStrength = new o.x(10, 10, 10), this.onAnimationEnd = null, this.blendMode = e.BLENDMODE_ONEONE, this.forceDepthWrite = !1, this.preWarmCycles = 0, this.preWarmStepOffset = 1, this.spriteCellChangeSpeed = 1, this.startSpriteCellID = 0, this.endSpriteCellID = 0, this.spriteCellWidth = 0, this.spriteCellHeight = 0, this.spriteRandomStartCell = !1, this.translationPivot = new o.w(0, 0), this.beginAnimationOnStart = !1, this.beginAnimationFrom = 0, this.beginAnimationTo = 60, this.beginAnimationLoop = !1, this.worldOffset = new o.x(0, 0, 0), this.gravity = o.x.Zero(), this._colorGradients = null, this._sizeGradients = null, this._lifeTimeGradients = null, this._angularSpeedGradients = null, this._velocityGradients = null, this._limitVelocityGradients = null, this._dragGradients = null, this._emitRateGradients = null, this._startSizeGradients = null, this._rampGradients = null, this._colorRemapGradients = null, this._alphaRemapGradients = null, this.startDelay = 0, this.limitVelocityDamping = .4, this.color1 = new o.f(1, 1, 1, 1), this.color2 = new o.f(1, 1, 1, 1), this.colorDead = new o.f(0, 0, 0, 1), this.textureMask = new o.f(1, 1, 1, 1), this._isSubEmitter = !1, this.billboardMode = _.a.PARTICLES_BILLBOARDMODE_ALL, this._isBillboardBased = !0, this._imageProcessingConfigurationDefines = new xi.b, this.id = t, this.name = t
|
|
}
|
|
return Object.defineProperty(e.prototype, "noiseTexture", {
|
|
get: function() {
|
|
return this._noiseTexture
|
|
},
|
|
set: function(e) {
|
|
this._noiseTexture !== e && (this._noiseTexture = e, this._reset())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isAnimationSheetEnabled", {
|
|
get: function() {
|
|
return this._isAnimationSheetEnabled
|
|
},
|
|
set: function(e) {
|
|
this._isAnimationSheetEnabled != e && (this._isAnimationSheetEnabled = e, this._reset())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getScene = function() {
|
|
return this._scene
|
|
}, e.prototype._hasTargetStopDurationDependantGradient = function() {
|
|
return this._startSizeGradients && this._startSizeGradients.length > 0 || this._emitRateGradients && this._emitRateGradients.length > 0 || this._lifeTimeGradients && this._lifeTimeGradients.length > 0
|
|
}, e.prototype.getDragGradients = function() {
|
|
return this._dragGradients
|
|
}, e.prototype.getLimitVelocityGradients = function() {
|
|
return this._limitVelocityGradients
|
|
}, e.prototype.getColorGradients = function() {
|
|
return this._colorGradients
|
|
}, e.prototype.getSizeGradients = function() {
|
|
return this._sizeGradients
|
|
}, e.prototype.getColorRemapGradients = function() {
|
|
return this._colorRemapGradients
|
|
}, e.prototype.getAlphaRemapGradients = function() {
|
|
return this._alphaRemapGradients
|
|
}, e.prototype.getLifeTimeGradients = function() {
|
|
return this._lifeTimeGradients
|
|
}, e.prototype.getAngularSpeedGradients = function() {
|
|
return this._angularSpeedGradients
|
|
}, e.prototype.getVelocityGradients = function() {
|
|
return this._velocityGradients
|
|
}, e.prototype.getStartSizeGradients = function() {
|
|
return this._startSizeGradients
|
|
}, e.prototype.getEmitRateGradients = function() {
|
|
return this._emitRateGradients
|
|
}, Object.defineProperty(e.prototype, "direction1", {
|
|
get: function() {
|
|
return this.particleEmitterType.direction1 ? this.particleEmitterType.direction1 : o.x.Zero()
|
|
},
|
|
set: function(e) {
|
|
this.particleEmitterType.direction1 && (this.particleEmitterType.direction1 = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "direction2", {
|
|
get: function() {
|
|
return this.particleEmitterType.direction2 ? this.particleEmitterType.direction2 : o.x.Zero()
|
|
},
|
|
set: function(e) {
|
|
this.particleEmitterType.direction2 && (this.particleEmitterType.direction2 = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "minEmitBox", {
|
|
get: function() {
|
|
return this.particleEmitterType.minEmitBox ? this.particleEmitterType.minEmitBox : o.x.Zero()
|
|
},
|
|
set: function(e) {
|
|
this.particleEmitterType.minEmitBox && (this.particleEmitterType.minEmitBox = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "maxEmitBox", {
|
|
get: function() {
|
|
return this.particleEmitterType.maxEmitBox ? this.particleEmitterType.maxEmitBox : o.x.Zero()
|
|
},
|
|
set: function(e) {
|
|
this.particleEmitterType.maxEmitBox && (this.particleEmitterType.maxEmitBox = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isBillboardBased", {
|
|
get: function() {
|
|
return this._isBillboardBased
|
|
},
|
|
set: function(e) {
|
|
this._isBillboardBased !== e && (this._isBillboardBased = e, this._reset())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "imageProcessingConfiguration", {
|
|
get: function() {
|
|
return this._imageProcessingConfiguration
|
|
},
|
|
set: function(e) {
|
|
this._attachImageProcessingConfiguration(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._attachImageProcessingConfiguration = function(e) {
|
|
e !== this._imageProcessingConfiguration && (this._imageProcessingConfiguration = e || this._scene.imageProcessingConfiguration)
|
|
}, e.prototype._reset = function() {}, e.prototype._removeGradientAndTexture = function(e, t, i) {
|
|
if (!t) return this;
|
|
for (var n = 0, r = 0, o = t; r < o.length; r++) {
|
|
if (o[r].gradient === e) {
|
|
t.splice(n, 1);
|
|
break
|
|
}
|
|
n++
|
|
}
|
|
return i && i.dispose(), this
|
|
}, e.prototype.createPointEmitter = function(e, t) {
|
|
var i = new ma;
|
|
return i.direction1 = e, i.direction2 = t, this.particleEmitterType = i, i
|
|
}, e.prototype.createHemisphericEmitter = function(e, t) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = 1);
|
|
var i = new ga(e, t);
|
|
return this.particleEmitterType = i, i
|
|
}, e.prototype.createSphereEmitter = function(e, t) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = 1);
|
|
var i = new va(e, t);
|
|
return this.particleEmitterType = i, i
|
|
}, e.prototype.createDirectedSphereEmitter = function(e, t, i) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = new o.x(0, 1, 0)), void 0 === i && (i = new o.x(0, 1, 0));
|
|
var n = new ya(e, t, i);
|
|
return this.particleEmitterType = n, n
|
|
}, e.prototype.createCylinderEmitter = function(e, t, i, n) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = 1), void 0 === i && (i = 1), void 0 === n && (n = 0);
|
|
var r = new pa(e, t, i, n);
|
|
return this.particleEmitterType = r, r
|
|
}, e.prototype.createDirectedCylinderEmitter = function(e, t, i, n, r) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = 1), void 0 === i && (i = 1), void 0 === n && (n = new o.x(0, 1, 0)), void 0 === r && (r = new o.x(0, 1, 0));
|
|
var s = new _a(e, t, i, n, r);
|
|
return this.particleEmitterType = s, s
|
|
}, e.prototype.createConeEmitter = function(e, t) {
|
|
void 0 === e && (e = 1), void 0 === t && (t = Math.PI / 4);
|
|
var i = new fa(e, t);
|
|
return this.particleEmitterType = i, i
|
|
}, e.prototype.createBoxEmitter = function(e, t, i, n) {
|
|
var r = new da;
|
|
return this.particleEmitterType = r, this.direction1 = e, this.direction2 = t, this.minEmitBox = i, this.maxEmitBox = n, r
|
|
}, e.BLENDMODE_ONEONE = 0, e.BLENDMODE_STANDARD = 1, e.BLENDMODE_ADD = 2, e.BLENDMODE_MULTIPLY = 3, e.BLENDMODE_MULTIPLYADD = 4, e
|
|
}(),
|
|
Ta = function() {
|
|
function e(t) {
|
|
this.particleSystem = t, this.position = o.x.Zero(), this.direction = o.x.Zero(), this.color = new o.f(0, 0, 0, 0), this.colorStep = new o.f(0, 0, 0, 0), this.lifeTime = 1, this.age = 0, this.size = 0, this.scale = new o.w(1, 1), this.angle = 0, this.angularSpeed = 0, this.cellIndex = 0, this._attachedSubEmitters = null, this._currentColor1 = new o.f(0, 0, 0, 0), this._currentColor2 = new o.f(0, 0, 0, 0), this._currentSize1 = 0, this._currentSize2 = 0, this._currentAngularSpeed1 = 0, this._currentAngularSpeed2 = 0, this._currentVelocity1 = 0, this._currentVelocity2 = 0, this._currentLimitVelocity1 = 0, this._currentLimitVelocity2 = 0, this._currentDrag1 = 0, this._currentDrag2 = 0, this.id = e._Count++, this.particleSystem.isAnimationSheetEnabled && this.updateCellInfoFromSystem()
|
|
}
|
|
return e.prototype.updateCellInfoFromSystem = function() {
|
|
this.cellIndex = this.particleSystem.startSpriteCellID
|
|
}, e.prototype.updateCellIndex = function() {
|
|
var e = this.age,
|
|
t = this.particleSystem.spriteCellChangeSpeed;
|
|
this.particleSystem.spriteRandomStartCell && (void 0 === this._randomCellOffset && (this._randomCellOffset = Math.random() * this.lifeTime), 0 === t ? (t = 1, e = this._randomCellOffset) : e += this._randomCellOffset);
|
|
var i = this._initialEndSpriteCellID - this._initialStartSpriteCellID,
|
|
n = D.a.Clamp(e * t % this.lifeTime / this.lifeTime);
|
|
this.cellIndex = this._initialStartSpriteCellID + n * i | 0
|
|
}, e.prototype._inheritParticleInfoToSubEmitter = function(e) {
|
|
if (e.particleSystem.emitter.position) {
|
|
var t = e.particleSystem.emitter;
|
|
t.position.copyFrom(this.position), e.inheritDirection && (t.position.subtractToRef(this.direction, o.t.Vector3[0]), t.lookAt(o.t.Vector3[0], 0, Math.PI / 2))
|
|
} else {
|
|
e.particleSystem.emitter.copyFrom(this.position)
|
|
}
|
|
this.direction.scaleToRef(e.inheritedVelocityAmount / 2, o.t.Vector3[0]), e.particleSystem._inheritedVelocityOffset.copyFrom(o.t.Vector3[0])
|
|
}, e.prototype._inheritParticleInfoToSubEmitters = function() {
|
|
var e = this;
|
|
this._attachedSubEmitters && this._attachedSubEmitters.length > 0 && this._attachedSubEmitters.forEach(function(t) {
|
|
e._inheritParticleInfoToSubEmitter(t)
|
|
})
|
|
}, e.prototype._reset = function() {
|
|
this.age = 0, this._currentColorGradient = null, this._currentSizeGradient = null, this._currentAngularSpeedGradient = null, this._currentVelocityGradient = null, this._currentLimitVelocityGradient = null, this._currentDragGradient = null, this.cellIndex = this.particleSystem.startSpriteCellID, this._randomCellOffset = void 0
|
|
}, e.prototype.copyTo = function(e) {
|
|
e.position.copyFrom(this.position), this._initialDirection ? e._initialDirection ? e._initialDirection.copyFrom(this._initialDirection) : e._initialDirection = this._initialDirection.clone() : e._initialDirection = null, e.direction.copyFrom(this.direction), e.color.copyFrom(this.color), e.colorStep.copyFrom(this.colorStep), e.lifeTime = this.lifeTime, e.age = this.age, e._randomCellOffset = this._randomCellOffset, e.size = this.size, e.scale.copyFrom(this.scale), e.angle = this.angle, e.angularSpeed = this.angularSpeed, e.particleSystem = this.particleSystem, e.cellIndex = this.cellIndex, e.id = this.id, e._attachedSubEmitters = this._attachedSubEmitters, this._currentColorGradient && (e._currentColorGradient = this._currentColorGradient, e._currentColor1.copyFrom(this._currentColor1), e._currentColor2.copyFrom(this._currentColor2)), this._currentSizeGradient && (e._currentSizeGradient = this._currentSizeGradient, e._currentSize1 = this._currentSize1, e._currentSize2 = this._currentSize2), this._currentAngularSpeedGradient && (e._currentAngularSpeedGradient = this._currentAngularSpeedGradient, e._currentAngularSpeed1 = this._currentAngularSpeed1, e._currentAngularSpeed2 = this._currentAngularSpeed2), this._currentVelocityGradient && (e._currentVelocityGradient = this._currentVelocityGradient, e._currentVelocity1 = this._currentVelocity1, e._currentVelocity2 = this._currentVelocity2), this._currentLimitVelocityGradient && (e._currentLimitVelocityGradient = this._currentLimitVelocityGradient, e._currentLimitVelocity1 = this._currentLimitVelocity1, e._currentLimitVelocity2 = this._currentLimitVelocity2), this._currentDragGradient && (e._currentDragGradient = this._currentDragGradient, e._currentDrag1 = this._currentDrag1, e._currentDrag2 = this._currentDrag2), this.particleSystem.isAnimationSheetEnabled && (e._initialStartSpriteCellID = this._initialStartSpriteCellID, e._initialEndSpriteCellID = this._initialEndSpriteCellID), this.particleSystem.useRampGradients && e.remapData.copyFrom(this.remapData), this._randomNoiseCoordinates1 && (e._randomNoiseCoordinates1 ? (e._randomNoiseCoordinates1.copyFrom(this._randomNoiseCoordinates1), e._randomNoiseCoordinates2.copyFrom(this._randomNoiseCoordinates2)) : (e._randomNoiseCoordinates1 = this._randomNoiseCoordinates1.clone(), e._randomNoiseCoordinates2 = this._randomNoiseCoordinates2.clone()))
|
|
}, e._Count = 0, e
|
|
}();
|
|
! function(e) {
|
|
e[e.ATTACHED = 0] = "ATTACHED", e[e.END = 1] = "END"
|
|
}(ua || (ua = {}));
|
|
var Ea = function() {
|
|
function e(e) {
|
|
this.particleSystem = e, this.type = ua.END, this.inheritDirection = !1, this.inheritedVelocityAmount = 0, e.emitter && e.emitter.dispose || (e.emitter = new Fe.a("SubemitterSystemEmitter", e.getScene())), e.onDisposeObservable.add(function() {
|
|
e.emitter && e.emitter.dispose && e.emitter.dispose()
|
|
})
|
|
}
|
|
return e.prototype.clone = function() {
|
|
var t = this.particleSystem.emitter;
|
|
t ? t instanceof o.x ? t = t.clone() : t instanceof Fe.a && ((t = new fe.a("", t.getScene())).isVisible = !1) : t = new o.x;
|
|
var i = new e(this.particleSystem.clone("", t));
|
|
return i.type = this.type, i.inheritDirection = this.inheritDirection, i.inheritedVelocityAmount = this.inheritedVelocityAmount, i.particleSystem._disposeEmitterOnDispose = !0, i.particleSystem.disposeOnStop = !0, i
|
|
}, e.prototype.serialize = function() {
|
|
var e = {};
|
|
return e.type = this.type, e.inheritDirection = this.inheritDirection, e.inheritedVelocityAmount = this.inheritedVelocityAmount, e.particleSystem = this.particleSystem.serialize(), e
|
|
}, e._ParseParticleSystem = function(e, t, i) {
|
|
throw be.a.WarnImport("ParseParticle")
|
|
}, e.Parse = function(t, i, n) {
|
|
var r = t.particleSystem,
|
|
o = new e(e._ParseParticleSystem(r, i, n));
|
|
return o.type = t.type, o.inheritDirection = t.inheritDirection, o.inheritedVelocityAmount = t.inheritedVelocityAmount, o.particleSystem._isSubEmitter = !0, o
|
|
}, e.prototype.dispose = function() {
|
|
this.particleSystem.dispose()
|
|
}, e
|
|
}(),
|
|
Aa = "\nvarying vec2 vUV;\nvarying vec4 vColor;\nuniform vec4 textureMask;\nuniform sampler2D diffuseSampler;\n#include<clipPlaneFragmentDeclaration>\n#include<imageProcessingDeclaration>\n#include<helperFunctions>\n#include<imageProcessingFunctions>\n#ifdef RAMPGRADIENT\nvarying vec4 remapRanges;\nuniform sampler2D rampSampler;\n#endif\nvoid main(void) {\n#include<clipPlaneFragment>\nvec4 textureColor=texture2D(diffuseSampler,vUV);\nvec4 baseColor=(textureColor*textureMask+(vec4(1.,1.,1.,1.)-textureMask))*vColor;\n#ifdef RAMPGRADIENT\nfloat alpha=baseColor.a;\nfloat remappedColorIndex=clamp((alpha-remapRanges.x)/remapRanges.y,0.0,1.0);\nvec4 rampColor=texture2D(rampSampler,vec2(1.0-remappedColorIndex,0.));\nbaseColor.rgb*=rampColor.rgb;\n\nfloat finalAlpha=baseColor.a;\nbaseColor.a=clamp((alpha*rampColor.a-remapRanges.z)/remapRanges.w,0.0,1.0);\n#endif\n#ifdef BLENDMULTIPLYMODE\nfloat sourceAlpha=vColor.a*textureColor.a;\nbaseColor.rgb=baseColor.rgb*sourceAlpha+vec3(1.0)*(1.0-sourceAlpha);\n#endif\n\n\n#ifdef IMAGEPROCESSINGPOSTPROCESS\nbaseColor.rgb=toLinearSpace(baseColor.rgb);\n#else\n#ifdef IMAGEPROCESSING\nbaseColor.rgb=toLinearSpace(baseColor.rgb);\nbaseColor=applyImageProcessing(baseColor);\n#endif\n#endif\ngl_FragColor=baseColor;\n}";
|
|
zt.a.ShadersStore.particlesPixelShader = Aa;
|
|
var xa = "\nattribute vec3 position;\nattribute vec4 color;\nattribute float angle;\nattribute vec2 size;\n#ifdef ANIMATESHEET\nattribute float cellIndex;\n#endif\n#ifndef BILLBOARD\nattribute vec3 direction;\n#endif\n#ifdef BILLBOARDSTRETCHED\nattribute vec3 direction;\n#endif\n#ifdef RAMPGRADIENT\nattribute vec4 remapData;\n#endif\nattribute vec2 offset;\n\nuniform mat4 view;\nuniform mat4 projection;\nuniform vec2 translationPivot;\n#ifdef ANIMATESHEET\nuniform vec3 particlesInfos;\n#endif\n\nvarying vec2 vUV;\nvarying vec4 vColor;\n#ifdef RAMPGRADIENT\nvarying vec4 remapRanges;\n#endif\n#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4)\nuniform mat4 invView;\n#endif\n#include<clipPlaneVertexDeclaration>\n#ifdef BILLBOARD\nuniform vec3 eyePosition;\n#endif\nvec3 rotate(vec3 yaxis,vec3 rotatedCorner) {\nvec3 xaxis=normalize(cross(vec3(0.,1.0,0.),yaxis));\nvec3 zaxis=normalize(cross(yaxis,xaxis));\nvec3 row0=vec3(xaxis.x,xaxis.y,xaxis.z);\nvec3 row1=vec3(yaxis.x,yaxis.y,yaxis.z);\nvec3 row2=vec3(zaxis.x,zaxis.y,zaxis.z);\nmat3 rotMatrix=mat3(row0,row1,row2);\nvec3 alignedCorner=rotMatrix*rotatedCorner;\nreturn position+alignedCorner;\n}\n#ifdef BILLBOARDSTRETCHED\nvec3 rotateAlign(vec3 toCamera,vec3 rotatedCorner) {\nvec3 normalizedToCamera=normalize(toCamera);\nvec3 normalizedCrossDirToCamera=normalize(cross(normalize(direction),normalizedToCamera));\nvec3 crossProduct=normalize(cross(normalizedToCamera,normalizedCrossDirToCamera));\nvec3 row0=vec3(normalizedCrossDirToCamera.x,normalizedCrossDirToCamera.y,normalizedCrossDirToCamera.z);\nvec3 row1=vec3(crossProduct.x,crossProduct.y,crossProduct.z);\nvec3 row2=vec3(normalizedToCamera.x,normalizedToCamera.y,normalizedToCamera.z);\nmat3 rotMatrix=mat3(row0,row1,row2);\nvec3 alignedCorner=rotMatrix*rotatedCorner;\nreturn position+alignedCorner;\n}\n#endif\nvoid main(void) {\nvec2 cornerPos;\ncornerPos=(vec2(offset.x-0.5,offset.y-0.5)-translationPivot)*size+translationPivot;\n#ifdef BILLBOARD\n\nvec3 rotatedCorner;\n#ifdef BILLBOARDY\nrotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);\nrotatedCorner.z=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);\nrotatedCorner.y=0.;\nvec3 yaxis=position-eyePosition;\nyaxis.y=0.;\nvec3 worldPos=rotate(normalize(yaxis),rotatedCorner);\nvec3 viewPos=(view*vec4(worldPos,1.0)).xyz;\n#elif defined(BILLBOARDSTRETCHED)\nrotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);\nrotatedCorner.y=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);\nrotatedCorner.z=0.;\nvec3 toCamera=position-eyePosition;\nvec3 worldPos=rotateAlign(toCamera,rotatedCorner);\nvec3 viewPos=(view*vec4(worldPos,1.0)).xyz;\n#else\nrotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);\nrotatedCorner.y=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);\nrotatedCorner.z=0.;\nvec3 viewPos=(view*vec4(position,1.0)).xyz+rotatedCorner;\n#endif\n#ifdef RAMPGRADIENT\nremapRanges=remapData;\n#endif\n\ngl_Position=projection*vec4(viewPos,1.0);\n#else\n\nvec3 rotatedCorner;\nrotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);\nrotatedCorner.z=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);\nrotatedCorner.y=0.;\nvec3 yaxis=normalize(direction);\nvec3 worldPos=rotate(yaxis,rotatedCorner);\ngl_Position=projection*view*vec4(worldPos,1.0);\n#endif\nvColor=color;\n#ifdef ANIMATESHEET\nfloat rowOffset=floor(cellIndex/particlesInfos.z);\nfloat columnOffset=cellIndex-rowOffset*particlesInfos.z;\nvec2 uvScale=particlesInfos.xy;\nvec2 uvOffset=vec2(offset.x ,1.0-offset.y);\nvUV=(uvOffset+vec2(columnOffset,rowOffset))*uvScale;\n#else\nvUV=offset;\n#endif\n\n#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4)\nvec4 worldPos=invView*vec4(viewPos,1.0);\n#endif\n#include<clipPlaneVertex>\n}";
|
|
zt.a.ShadersStore.particlesVertexShader = xa;
|
|
var Ra = function(e) {
|
|
function t(t, i, n, s, a, c) {
|
|
void 0 === s && (s = null), void 0 === a && (a = !1), void 0 === c && (c = .01);
|
|
var l = e.call(this, t) || this;
|
|
return l._inheritedVelocityOffset = new o.x, l.onDisposeObservable = new r.c, l._particles = new Array, l._stockParticles = new Array, l._newPartsExcess = 0, l._vertexBuffers = {}, l._scaledColorStep = new o.f(0, 0, 0, 0), l._colorDiff = new o.f(0, 0, 0, 0), l._scaledDirection = o.x.Zero(), l._scaledGravity = o.x.Zero(), l._currentRenderId = -1, l._useInstancing = !1, l._started = !1, l._stopped = !1, l._actualFrame = 0, l._currentEmitRate1 = 0, l._currentEmitRate2 = 0, l._currentStartSize1 = 0, l._currentStartSize2 = 0, l._rawTextureWidth = 256, l._useRampGradients = !1, l._disposeEmitterOnDispose = !1, l.recycleParticle = function(e) {
|
|
var t = l._particles.pop();
|
|
t !== e && t.copyTo(e), l._stockParticles.push(t)
|
|
}, l._createParticle = function() {
|
|
var e;
|
|
if (0 !== l._stockParticles.length ? (e = l._stockParticles.pop())._reset() : e = new Ta(l), l._subEmitters && l._subEmitters.length > 0) {
|
|
var t = l._subEmitters[Math.floor(Math.random() * l._subEmitters.length)];
|
|
e._attachedSubEmitters = [], t.forEach(function(t) {
|
|
if (t.type === ua.ATTACHED) {
|
|
var i = t.clone();
|
|
e._attachedSubEmitters.push(i), i.particleSystem.start()
|
|
}
|
|
})
|
|
}
|
|
return e
|
|
}, l._emitFromParticle = function(e) {
|
|
if (l._subEmitters && 0 !== l._subEmitters.length) {
|
|
var t = Math.floor(Math.random() * l._subEmitters.length);
|
|
l._subEmitters[t].forEach(function(t) {
|
|
if (t.type === ua.END) {
|
|
var i = t.clone();
|
|
e._inheritParticleInfoToSubEmitter(i), i.particleSystem._rootParticleSystem = l, l.activeSubSystems.push(i.particleSystem), i.particleSystem.start()
|
|
}
|
|
})
|
|
}
|
|
}, l._capacity = i, l._epsilon = c, l._isAnimationSheetEnabled = a, l._scene = n || P.a.LastCreatedScene, l._attachImageProcessingConfiguration(null), l._customEffect = s, l._scene.particleSystems.push(l), l._useInstancing = l._scene.getEngine().getCaps().instancedArrays, l._createIndexBuffer(), l._createVertexBuffers(), l.particleEmitterType = new da, l.updateFunction = function(e) {
|
|
var t = null,
|
|
i = null;
|
|
l.noiseTexture && (t = l.noiseTexture.getSize(), i = l.noiseTexture.getContent());
|
|
for (var n, r = function() {
|
|
n = e[s];
|
|
var r = l._scaledUpdateSpeed,
|
|
a = n.age;
|
|
if (n.age += r, n.age > n.lifeTime) {
|
|
var c = n.age - a;
|
|
r = (n.lifeTime - a) * r / c, n.age = n.lifeTime
|
|
}
|
|
var u = n.age / n.lifeTime;
|
|
l._colorGradients && l._colorGradients.length > 0 ? ye.h.GetCurrentGradient(u, l._colorGradients, function(e, t, i) {
|
|
e !== n._currentColorGradient && (n._currentColor1.copyFrom(n._currentColor2), t.getColorToRef(n._currentColor2), n._currentColorGradient = e), o.f.LerpToRef(n._currentColor1, n._currentColor2, i, n.color)
|
|
}) : (n.colorStep.scaleToRef(r, l._scaledColorStep), n.color.addInPlace(l._scaledColorStep), n.color.a < 0 && (n.color.a = 0)), l._angularSpeedGradients && l._angularSpeedGradients.length > 0 && ye.h.GetCurrentGradient(u, l._angularSpeedGradients, function(e, t, i) {
|
|
e !== n._currentAngularSpeedGradient && (n._currentAngularSpeed1 = n._currentAngularSpeed2, n._currentAngularSpeed2 = t.getFactor(), n._currentAngularSpeedGradient = e), n.angularSpeed = D.a.Lerp(n._currentAngularSpeed1, n._currentAngularSpeed2, i)
|
|
}), n.angle += n.angularSpeed * r;
|
|
var h = r;
|
|
if (l._velocityGradients && l._velocityGradients.length > 0 && ye.h.GetCurrentGradient(u, l._velocityGradients, function(e, t, i) {
|
|
e !== n._currentVelocityGradient && (n._currentVelocity1 = n._currentVelocity2, n._currentVelocity2 = t.getFactor(), n._currentVelocityGradient = e), h *= D.a.Lerp(n._currentVelocity1, n._currentVelocity2, i)
|
|
}), n.direction.scaleToRef(h, l._scaledDirection), l._limitVelocityGradients && l._limitVelocityGradients.length > 0 && ye.h.GetCurrentGradient(u, l._limitVelocityGradients, function(e, t, i) {
|
|
e !== n._currentLimitVelocityGradient && (n._currentLimitVelocity1 = n._currentLimitVelocity2, n._currentLimitVelocity2 = t.getFactor(), n._currentLimitVelocityGradient = e);
|
|
var r = D.a.Lerp(n._currentLimitVelocity1, n._currentLimitVelocity2, i);
|
|
n.direction.length() > r && n.direction.scaleInPlace(l.limitVelocityDamping)
|
|
}), l._dragGradients && l._dragGradients.length > 0 && ye.h.GetCurrentGradient(u, l._dragGradients, function(e, t, i) {
|
|
e !== n._currentDragGradient && (n._currentDrag1 = n._currentDrag2, n._currentDrag2 = t.getFactor(), n._currentDragGradient = e);
|
|
var r = D.a.Lerp(n._currentDrag1, n._currentDrag2, i);
|
|
l._scaledDirection.scaleInPlace(1 - r)
|
|
}), n.position.addInPlace(l._scaledDirection), i && t && n._randomNoiseCoordinates1) {
|
|
var d = l._fetchR(n._randomNoiseCoordinates1.x, n._randomNoiseCoordinates1.y, t.width, t.height, i),
|
|
f = l._fetchR(n._randomNoiseCoordinates1.z, n._randomNoiseCoordinates2.x, t.width, t.height, i),
|
|
p = l._fetchR(n._randomNoiseCoordinates2.y, n._randomNoiseCoordinates2.z, t.width, t.height, i),
|
|
_ = o.t.Vector3[0],
|
|
g = o.t.Vector3[1];
|
|
_.copyFromFloats((2 * d - 1) * l.noiseStrength.x, (2 * f - 1) * l.noiseStrength.y, (2 * p - 1) * l.noiseStrength.z), _.scaleToRef(r, g), n.direction.addInPlace(g)
|
|
}
|
|
if (l.gravity.scaleToRef(r, l._scaledGravity), n.direction.addInPlace(l._scaledGravity), l._sizeGradients && l._sizeGradients.length > 0 && ye.h.GetCurrentGradient(u, l._sizeGradients, function(e, t, i) {
|
|
e !== n._currentSizeGradient && (n._currentSize1 = n._currentSize2, n._currentSize2 = t.getFactor(), n._currentSizeGradient = e), n.size = D.a.Lerp(n._currentSize1, n._currentSize2, i)
|
|
}), l._useRampGradients && (l._colorRemapGradients && l._colorRemapGradients.length > 0 && ye.h.GetCurrentGradient(u, l._colorRemapGradients, function(e, t, i) {
|
|
var r = D.a.Lerp(e.factor1, t.factor1, i),
|
|
o = D.a.Lerp(e.factor2, t.factor2, i);
|
|
n.remapData.x = r, n.remapData.y = o - r
|
|
}), l._alphaRemapGradients && l._alphaRemapGradients.length > 0 && ye.h.GetCurrentGradient(u, l._alphaRemapGradients, function(e, t, i) {
|
|
var r = D.a.Lerp(e.factor1, t.factor1, i),
|
|
o = D.a.Lerp(e.factor2, t.factor2, i);
|
|
n.remapData.z = r, n.remapData.w = o - r
|
|
})), l._isAnimationSheetEnabled && n.updateCellIndex(), n._inheritParticleInfoToSubEmitters(), n.age >= n.lifeTime) return l._emitFromParticle(n), n._attachedSubEmitters && (n._attachedSubEmitters.forEach(function(e) {
|
|
e.particleSystem.disposeOnStop = !0, e.particleSystem.stop()
|
|
}), n._attachedSubEmitters = null), l.recycleParticle(n), s--, "continue"
|
|
}, s = 0; s < e.length; s++) r()
|
|
}, l
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "onDispose", {
|
|
set: function(e) {
|
|
this._onDisposeObserver && this.onDisposeObservable.remove(this._onDisposeObserver), this._onDisposeObserver = this.onDisposeObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "useRampGradients", {
|
|
get: function() {
|
|
return this._useRampGradients
|
|
},
|
|
set: function(e) {
|
|
this._useRampGradients !== e && (this._useRampGradients = e, this._resetEffect())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "particles", {
|
|
get: function() {
|
|
return this._particles
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "ParticleSystem"
|
|
}, t.prototype._addFactorGradient = function(e, t, i, n) {
|
|
var r = new ye.d;
|
|
r.gradient = t, r.factor1 = i, r.factor2 = n, e.push(r), e.sort(function(e, t) {
|
|
return e.gradient < t.gradient ? -1 : e.gradient > t.gradient ? 1 : 0
|
|
})
|
|
}, t.prototype._removeFactorGradient = function(e, t) {
|
|
if (e)
|
|
for (var i = 0, n = 0, r = e; n < r.length; n++) {
|
|
if (r[n].gradient === t) {
|
|
e.splice(i, 1);
|
|
break
|
|
}
|
|
i++
|
|
}
|
|
}, t.prototype.addLifeTimeGradient = function(e, t, i) {
|
|
return this._lifeTimeGradients || (this._lifeTimeGradients = []), this._addFactorGradient(this._lifeTimeGradients, e, t, i), this
|
|
}, t.prototype.removeLifeTimeGradient = function(e) {
|
|
return this._removeFactorGradient(this._lifeTimeGradients, e), this
|
|
}, t.prototype.addSizeGradient = function(e, t, i) {
|
|
return this._sizeGradients || (this._sizeGradients = []), this._addFactorGradient(this._sizeGradients, e, t, i), this
|
|
}, t.prototype.removeSizeGradient = function(e) {
|
|
return this._removeFactorGradient(this._sizeGradients, e), this
|
|
}, t.prototype.addColorRemapGradient = function(e, t, i) {
|
|
return this._colorRemapGradients || (this._colorRemapGradients = []), this._addFactorGradient(this._colorRemapGradients, e, t, i), this
|
|
}, t.prototype.removeColorRemapGradient = function(e) {
|
|
return this._removeFactorGradient(this._colorRemapGradients, e), this
|
|
}, t.prototype.addAlphaRemapGradient = function(e, t, i) {
|
|
return this._alphaRemapGradients || (this._alphaRemapGradients = []), this._addFactorGradient(this._alphaRemapGradients, e, t, i), this
|
|
}, t.prototype.removeAlphaRemapGradient = function(e) {
|
|
return this._removeFactorGradient(this._alphaRemapGradients, e), this
|
|
}, t.prototype.addAngularSpeedGradient = function(e, t, i) {
|
|
return this._angularSpeedGradients || (this._angularSpeedGradients = []), this._addFactorGradient(this._angularSpeedGradients, e, t, i), this
|
|
}, t.prototype.removeAngularSpeedGradient = function(e) {
|
|
return this._removeFactorGradient(this._angularSpeedGradients, e), this
|
|
}, t.prototype.addVelocityGradient = function(e, t, i) {
|
|
return this._velocityGradients || (this._velocityGradients = []), this._addFactorGradient(this._velocityGradients, e, t, i), this
|
|
}, t.prototype.removeVelocityGradient = function(e) {
|
|
return this._removeFactorGradient(this._velocityGradients, e), this
|
|
}, t.prototype.addLimitVelocityGradient = function(e, t, i) {
|
|
return this._limitVelocityGradients || (this._limitVelocityGradients = []), this._addFactorGradient(this._limitVelocityGradients, e, t, i), this
|
|
}, t.prototype.removeLimitVelocityGradient = function(e) {
|
|
return this._removeFactorGradient(this._limitVelocityGradients, e), this
|
|
}, t.prototype.addDragGradient = function(e, t, i) {
|
|
return this._dragGradients || (this._dragGradients = []), this._addFactorGradient(this._dragGradients, e, t, i), this
|
|
}, t.prototype.removeDragGradient = function(e) {
|
|
return this._removeFactorGradient(this._dragGradients, e), this
|
|
}, t.prototype.addEmitRateGradient = function(e, t, i) {
|
|
return this._emitRateGradients || (this._emitRateGradients = []), this._addFactorGradient(this._emitRateGradients, e, t, i), this
|
|
}, t.prototype.removeEmitRateGradient = function(e) {
|
|
return this._removeFactorGradient(this._emitRateGradients, e), this
|
|
}, t.prototype.addStartSizeGradient = function(e, t, i) {
|
|
return this._startSizeGradients || (this._startSizeGradients = []), this._addFactorGradient(this._startSizeGradients, e, t, i), this
|
|
}, t.prototype.removeStartSizeGradient = function(e) {
|
|
return this._removeFactorGradient(this._emitRateGradients, e), this
|
|
}, t.prototype._createRampGradientTexture = function() {
|
|
if (this._rampGradients && this._rampGradients.length && !this._rampGradientsTexture) {
|
|
for (var e = new Uint8Array(4 * this._rawTextureWidth), t = o.t.Color3[0], i = 0; i < this._rawTextureWidth; i++) {
|
|
var n = i / this._rawTextureWidth;
|
|
ye.h.GetCurrentGradient(n, this._rampGradients, function(n, r, s) {
|
|
o.e.LerpToRef(n.color, r.color, s, t), e[4 * i] = 255 * t.r, e[4 * i + 1] = 255 * t.g, e[4 * i + 2] = 255 * t.b, e[4 * i + 3] = 255
|
|
})
|
|
}
|
|
this._rampGradientsTexture = je.CreateRGBATexture(e, this._rawTextureWidth, 1, this._scene, !1, !1, ke.a.NEAREST_SAMPLINGMODE)
|
|
}
|
|
}, t.prototype.getRampGradients = function() {
|
|
return this._rampGradients
|
|
}, t.prototype.addRampGradient = function(e, t) {
|
|
this._rampGradients || (this._rampGradients = []);
|
|
var i = new ye.b;
|
|
return i.gradient = e, i.color = t, this._rampGradients.push(i), this._rampGradients.sort(function(e, t) {
|
|
return e.gradient < t.gradient ? -1 : e.gradient > t.gradient ? 1 : 0
|
|
}), this._rampGradientsTexture && (this._rampGradientsTexture.dispose(), this._rampGradientsTexture = null), this._createRampGradientTexture(), this
|
|
}, t.prototype.removeRampGradient = function(e) {
|
|
return this._removeGradientAndTexture(e, this._rampGradients, this._rampGradientsTexture), this._rampGradientsTexture = null, this._rampGradients && this._rampGradients.length > 0 && this._createRampGradientTexture(), this
|
|
}, t.prototype.addColorGradient = function(e, t, i) {
|
|
this._colorGradients || (this._colorGradients = []);
|
|
var n = new ye.c;
|
|
return n.gradient = e, n.color1 = t, n.color2 = i, this._colorGradients.push(n), this._colorGradients.sort(function(e, t) {
|
|
return e.gradient < t.gradient ? -1 : e.gradient > t.gradient ? 1 : 0
|
|
}), this
|
|
}, t.prototype.removeColorGradient = function(e) {
|
|
if (!this._colorGradients) return this;
|
|
for (var t = 0, i = 0, n = this._colorGradients; i < n.length; i++) {
|
|
if (n[i].gradient === e) {
|
|
this._colorGradients.splice(t, 1);
|
|
break
|
|
}
|
|
t++
|
|
}
|
|
return this
|
|
}, t.prototype._fetchR = function(e, t, i, n, r) {
|
|
return r[4 * (((e = .5 * Math.abs(e) + .5) * i % i | 0) + ((t = .5 * Math.abs(t) + .5) * n % n | 0) * i)] / 255
|
|
}, t.prototype._reset = function() {
|
|
this._resetEffect()
|
|
}, t.prototype._resetEffect = function() {
|
|
this._vertexBuffer && (this._vertexBuffer.dispose(), this._vertexBuffer = null), this._spriteBuffer && (this._spriteBuffer.dispose(), this._spriteBuffer = null), this._createVertexBuffers()
|
|
}, t.prototype._createVertexBuffers = function() {
|
|
this._vertexBufferSize = this._useInstancing ? 10 : 12, this._isAnimationSheetEnabled && (this._vertexBufferSize += 1), this._isBillboardBased && this.billboardMode !== t.BILLBOARDMODE_STRETCHED || (this._vertexBufferSize += 3), this._useRampGradients && (this._vertexBufferSize += 4);
|
|
var e = this._scene.getEngine();
|
|
this._vertexData = new Float32Array(this._capacity * this._vertexBufferSize * (this._useInstancing ? 1 : 4)), this._vertexBuffer = new Oi.a(e, this._vertexData, !0, this._vertexBufferSize);
|
|
var i = 0,
|
|
n = this._vertexBuffer.createVertexBuffer(Oi.b.PositionKind, i, 3, this._vertexBufferSize, this._useInstancing);
|
|
this._vertexBuffers[Oi.b.PositionKind] = n, i += 3;
|
|
var r = this._vertexBuffer.createVertexBuffer(Oi.b.ColorKind, i, 4, this._vertexBufferSize, this._useInstancing);
|
|
this._vertexBuffers[Oi.b.ColorKind] = r, i += 4;
|
|
var o = this._vertexBuffer.createVertexBuffer("angle", i, 1, this._vertexBufferSize, this._useInstancing);
|
|
this._vertexBuffers.angle = o, i += 1;
|
|
var s, a = this._vertexBuffer.createVertexBuffer("size", i, 2, this._vertexBufferSize, this._useInstancing);
|
|
if (this._vertexBuffers.size = a, i += 2, this._isAnimationSheetEnabled) {
|
|
var c = this._vertexBuffer.createVertexBuffer("cellIndex", i, 1, this._vertexBufferSize, this._useInstancing);
|
|
this._vertexBuffers.cellIndex = c, i += 1
|
|
}
|
|
if (!this._isBillboardBased || this.billboardMode === t.BILLBOARDMODE_STRETCHED) {
|
|
var l = this._vertexBuffer.createVertexBuffer("direction", i, 3, this._vertexBufferSize, this._useInstancing);
|
|
this._vertexBuffers.direction = l, i += 3
|
|
}
|
|
if (this._useRampGradients) {
|
|
var u = this._vertexBuffer.createVertexBuffer("remapData", i, 4, this._vertexBufferSize, this._useInstancing);
|
|
this._vertexBuffers.remapData = u, i += 4
|
|
}
|
|
if (this._useInstancing) {
|
|
var h = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);
|
|
this._spriteBuffer = new Oi.a(e, h, !1, 2), s = this._spriteBuffer.createVertexBuffer("offset", 0, 2)
|
|
} else s = this._vertexBuffer.createVertexBuffer("offset", i, 2, this._vertexBufferSize, this._useInstancing), i += 2;
|
|
this._vertexBuffers.offset = s
|
|
}, t.prototype._createIndexBuffer = function() {
|
|
if (!this._useInstancing) {
|
|
for (var e = [], t = 0, i = 0; i < this._capacity; i++) e.push(t), e.push(t + 1), e.push(t + 2), e.push(t), e.push(t + 2), e.push(t + 3), t += 4;
|
|
this._indexBuffer = this._scene.getEngine().createIndexBuffer(e)
|
|
}
|
|
}, t.prototype.getCapacity = function() {
|
|
return this._capacity
|
|
}, t.prototype.isAlive = function() {
|
|
return this._alive
|
|
}, t.prototype.isStarted = function() {
|
|
return this._started
|
|
}, t.prototype._prepareSubEmitterInternalArray = function() {
|
|
var e = this;
|
|
this._subEmitters = new Array, this.subEmitters && this.subEmitters.forEach(function(i) {
|
|
i instanceof t ? e._subEmitters.push([new Ea(i)]) : i instanceof Ea ? e._subEmitters.push([i]) : i instanceof Array && e._subEmitters.push(i)
|
|
})
|
|
}, t.prototype.start = function(e) {
|
|
var t = this;
|
|
if (void 0 === e && (e = this.startDelay), !this.targetStopDuration && this._hasTargetStopDurationDependantGradient()) throw "Particle system started with a targetStopDuration dependant gradient (eg. startSizeGradients) but no targetStopDuration set";
|
|
if (e) setTimeout(function() {
|
|
t.start(0)
|
|
}, e);
|
|
else {
|
|
if (this._prepareSubEmitterInternalArray(), this._started = !0, this._stopped = !1, this._actualFrame = 0, this._subEmitters && 0 != this._subEmitters.length && (this.activeSubSystems = new Array), this._emitRateGradients && (this._emitRateGradients.length > 0 && (this._currentEmitRateGradient = this._emitRateGradients[0], this._currentEmitRate1 = this._currentEmitRateGradient.getFactor(), this._currentEmitRate2 = this._currentEmitRate1), this._emitRateGradients.length > 1 && (this._currentEmitRate2 = this._emitRateGradients[1].getFactor())), this._startSizeGradients && (this._startSizeGradients.length > 0 && (this._currentStartSizeGradient = this._startSizeGradients[0], this._currentStartSize1 = this._currentStartSizeGradient.getFactor(), this._currentStartSize2 = this._currentStartSize1), this._startSizeGradients.length > 1 && (this._currentStartSize2 = this._startSizeGradients[1].getFactor())), this.preWarmCycles) {
|
|
this.emitter instanceof Fe.a && this.emitter.computeWorldMatrix(!0);
|
|
var i = this.noiseTexture;
|
|
if (i && i.onGeneratedObservable) i.onGeneratedObservable.addOnce(function() {
|
|
setTimeout(function() {
|
|
for (var e = 0; e < t.preWarmCycles; e++) t.animate(!0), i.render()
|
|
})
|
|
});
|
|
else
|
|
for (var n = 0; n < this.preWarmCycles; n++) this.animate(!0)
|
|
}
|
|
this.beginAnimationOnStart && this.animations && this.animations.length > 0 && this.getScene().beginAnimation(this, this.beginAnimationFrom, this.beginAnimationTo, this.beginAnimationLoop)
|
|
}
|
|
}, t.prototype.stop = function(e) {
|
|
void 0 === e && (e = !0), this._stopped = !0, e && this._stopSubEmitters()
|
|
}, t.prototype.reset = function() {
|
|
this._stockParticles = [], this._particles = []
|
|
}, t.prototype._appendParticleVertex = function(e, i, n, r) {
|
|
var o = e * this._vertexBufferSize;
|
|
this._vertexData[o++] = i.position.x + this.worldOffset.x, this._vertexData[o++] = i.position.y + this.worldOffset.y, this._vertexData[o++] = i.position.z + this.worldOffset.z, this._vertexData[o++] = i.color.r, this._vertexData[o++] = i.color.g, this._vertexData[o++] = i.color.b, this._vertexData[o++] = i.color.a, this._vertexData[o++] = i.angle, this._vertexData[o++] = i.scale.x * i.size, this._vertexData[o++] = i.scale.y * i.size, this._isAnimationSheetEnabled && (this._vertexData[o++] = i.cellIndex), this._isBillboardBased ? this.billboardMode === t.BILLBOARDMODE_STRETCHED && (this._vertexData[o++] = i.direction.x, this._vertexData[o++] = i.direction.y, this._vertexData[o++] = i.direction.z) : i._initialDirection ? (this._vertexData[o++] = i._initialDirection.x, this._vertexData[o++] = i._initialDirection.y, this._vertexData[o++] = i._initialDirection.z) : (this._vertexData[o++] = i.direction.x, this._vertexData[o++] = i.direction.y, this._vertexData[o++] = i.direction.z), this._useRampGradients && (this._vertexData[o++] = i.remapData.x, this._vertexData[o++] = i.remapData.y, this._vertexData[o++] = i.remapData.z, this._vertexData[o++] = i.remapData.w), this._useInstancing || (this._isAnimationSheetEnabled && (0 === n ? n = this._epsilon : 1 === n && (n = 1 - this._epsilon), 0 === r ? r = this._epsilon : 1 === r && (r = 1 - this._epsilon)), this._vertexData[o++] = n, this._vertexData[o++] = r)
|
|
}, t.prototype._stopSubEmitters = function() {
|
|
this.activeSubSystems && (this.activeSubSystems.forEach(function(e) {
|
|
e.stop(!0)
|
|
}), this.activeSubSystems = new Array)
|
|
}, t.prototype._removeFromRoot = function() {
|
|
if (this._rootParticleSystem) {
|
|
var e = this._rootParticleSystem.activeSubSystems.indexOf(this); - 1 !== e && this._rootParticleSystem.activeSubSystems.splice(e, 1), this._rootParticleSystem = null
|
|
}
|
|
}, t.prototype._update = function(e) {
|
|
var t, i = this;
|
|
if (this._alive = this._particles.length > 0, this.emitter.position) {
|
|
var n = this.emitter;
|
|
this._emitterWorldMatrix = n.getWorldMatrix()
|
|
} else {
|
|
var r = this.emitter;
|
|
this._emitterWorldMatrix = o.j.Translation(r.x, r.y, r.z)
|
|
}
|
|
this.updateFunction(this._particles);
|
|
for (var s, a = function() {
|
|
if (c._particles.length === c._capacity) return "break";
|
|
t = c._createParticle(), c._particles.push(t);
|
|
var e = D.a.RandomRange(c.minEmitPower, c.maxEmitPower);
|
|
if (c.startPositionFunction ? c.startPositionFunction(c._emitterWorldMatrix, t.position, t) : c.particleEmitterType.startPositionFunction(c._emitterWorldMatrix, t.position, t), c.startDirectionFunction ? c.startDirectionFunction(c._emitterWorldMatrix, t.direction, t) : c.particleEmitterType.startDirectionFunction(c._emitterWorldMatrix, t.direction, t), 0 === e ? t._initialDirection ? t._initialDirection.copyFrom(t.direction) : t._initialDirection = t.direction.clone() : t._initialDirection = null, t.direction.scaleInPlace(e), c.targetStopDuration && c._lifeTimeGradients && c._lifeTimeGradients.length > 0) {
|
|
var n = D.a.Clamp(c._actualFrame / c.targetStopDuration);
|
|
ye.h.GetCurrentGradient(n, c._lifeTimeGradients, function(e, i) {
|
|
var r = e,
|
|
o = i,
|
|
s = r.getFactor(),
|
|
a = o.getFactor(),
|
|
c = (n - r.gradient) / (o.gradient - r.gradient);
|
|
t.lifeTime = D.a.Lerp(s, a, c)
|
|
})
|
|
} else t.lifeTime = D.a.RandomRange(c.minLifeTime, c.maxLifeTime);
|
|
if (c._sizeGradients && 0 !== c._sizeGradients.length ? (t._currentSizeGradient = c._sizeGradients[0], t._currentSize1 = t._currentSizeGradient.getFactor(), t.size = t._currentSize1, c._sizeGradients.length > 1 ? t._currentSize2 = c._sizeGradients[1].getFactor() : t._currentSize2 = t._currentSize1) : t.size = D.a.RandomRange(c.minSize, c.maxSize), t.scale.copyFromFloats(D.a.RandomRange(c.minScaleX, c.maxScaleX), D.a.RandomRange(c.minScaleY, c.maxScaleY)), c._startSizeGradients && c._startSizeGradients[0] && c.targetStopDuration) {
|
|
var r = c._actualFrame / c.targetStopDuration;
|
|
ye.h.GetCurrentGradient(r, c._startSizeGradients, function(e, n, r) {
|
|
e !== i._currentStartSizeGradient && (i._currentStartSize1 = i._currentStartSize2, i._currentStartSize2 = n.getFactor(), i._currentStartSizeGradient = e);
|
|
var o = D.a.Lerp(i._currentStartSize1, i._currentStartSize2, r);
|
|
t.scale.scaleInPlace(o)
|
|
})
|
|
}
|
|
c._angularSpeedGradients && 0 !== c._angularSpeedGradients.length ? (t._currentAngularSpeedGradient = c._angularSpeedGradients[0], t.angularSpeed = t._currentAngularSpeedGradient.getFactor(), t._currentAngularSpeed1 = t.angularSpeed, c._angularSpeedGradients.length > 1 ? t._currentAngularSpeed2 = c._angularSpeedGradients[1].getFactor() : t._currentAngularSpeed2 = t._currentAngularSpeed1) : t.angularSpeed = D.a.RandomRange(c.minAngularSpeed, c.maxAngularSpeed), t.angle = D.a.RandomRange(c.minInitialRotation, c.maxInitialRotation), c._velocityGradients && c._velocityGradients.length > 0 && (t._currentVelocityGradient = c._velocityGradients[0], t._currentVelocity1 = t._currentVelocityGradient.getFactor(), c._velocityGradients.length > 1 ? t._currentVelocity2 = c._velocityGradients[1].getFactor() : t._currentVelocity2 = t._currentVelocity1), c._limitVelocityGradients && c._limitVelocityGradients.length > 0 && (t._currentLimitVelocityGradient = c._limitVelocityGradients[0], t._currentLimitVelocity1 = t._currentLimitVelocityGradient.getFactor(), c._limitVelocityGradients.length > 1 ? t._currentLimitVelocity2 = c._limitVelocityGradients[1].getFactor() : t._currentLimitVelocity2 = t._currentLimitVelocity1), c._dragGradients && c._dragGradients.length > 0 && (t._currentDragGradient = c._dragGradients[0], t._currentDrag1 = t._currentDragGradient.getFactor(), c._dragGradients.length > 1 ? t._currentDrag2 = c._dragGradients[1].getFactor() : t._currentDrag2 = t._currentDrag1), c._colorGradients && 0 !== c._colorGradients.length ? (t._currentColorGradient = c._colorGradients[0], t._currentColorGradient.getColorToRef(t.color), t._currentColor1.copyFrom(t.color), c._colorGradients.length > 1 ? c._colorGradients[1].getColorToRef(t._currentColor2) : t._currentColor2.copyFrom(t.color)) : (s = D.a.RandomRange(0, 1), o.f.LerpToRef(c.color1, c.color2, s, t.color), c.colorDead.subtractToRef(t.color, c._colorDiff), c._colorDiff.scaleToRef(1 / t.lifeTime, t.colorStep)), c._isAnimationSheetEnabled && (t._initialStartSpriteCellID = c.startSpriteCellID, t._initialEndSpriteCellID = c.endSpriteCellID), t.direction.addInPlace(c._inheritedVelocityOffset), c._useRampGradients && (t.remapData = new o.y(0, 1, 0, 1)), c.noiseTexture && (t._randomNoiseCoordinates1 ? (t._randomNoiseCoordinates1.copyFromFloats(Math.random(), Math.random(), Math.random()), t._randomNoiseCoordinates2.copyFromFloats(Math.random(), Math.random(), Math.random())) : (t._randomNoiseCoordinates1 = new o.x(Math.random(), Math.random(), Math.random()), t._randomNoiseCoordinates2 = new o.x(Math.random(), Math.random(), Math.random()))), t._inheritParticleInfoToSubEmitters()
|
|
}, c = this, l = 0; l < e; l++) {
|
|
if ("break" === a()) break
|
|
}
|
|
}, t._GetAttributeNamesOrOptions = function(e, t, i) {
|
|
void 0 === e && (e = !1), void 0 === t && (t = !1), void 0 === i && (i = !1);
|
|
var n = [Oi.b.PositionKind, Oi.b.ColorKind, "angle", "offset", "size"];
|
|
return e && n.push("cellIndex"), t || n.push("direction"), i && n.push("remapData"), n
|
|
}, t._GetEffectCreationOptions = function(e) {
|
|
void 0 === e && (e = !1);
|
|
var t = ["invView", "view", "projection", "vClipPlane", "vClipPlane2", "vClipPlane3", "vClipPlane4", "textureMask", "translationPivot", "eyePosition"];
|
|
return e && t.push("particlesInfos"), t
|
|
}, t.prototype._getEffect = function(e) {
|
|
if (this._customEffect) return this._customEffect;
|
|
var i = [];
|
|
if (this._scene.clipPlane && i.push("#define CLIPPLANE"), this._scene.clipPlane2 && i.push("#define CLIPPLANE2"), this._scene.clipPlane3 && i.push("#define CLIPPLANE3"), this._scene.clipPlane4 && i.push("#define CLIPPLANE4"), this._isAnimationSheetEnabled && i.push("#define ANIMATESHEET"), e === t.BLENDMODE_MULTIPLY && i.push("#define BLENDMULTIPLYMODE"), this._useRampGradients && i.push("#define RAMPGRADIENT"), this._isBillboardBased) switch (i.push("#define BILLBOARD"), this.billboardMode) {
|
|
case t.BILLBOARDMODE_Y:
|
|
i.push("#define BILLBOARDY");
|
|
break;
|
|
case t.BILLBOARDMODE_STRETCHED:
|
|
i.push("#define BILLBOARDSTRETCHED");
|
|
break;
|
|
case t.BILLBOARDMODE_ALL:
|
|
}
|
|
this._imageProcessingConfiguration && (this._imageProcessingConfiguration.prepareDefines(this._imageProcessingConfigurationDefines), i.push(this._imageProcessingConfigurationDefines.toString()));
|
|
var n = i.join("\n");
|
|
if (this._cachedDefines !== n) {
|
|
this._cachedDefines = n;
|
|
var r = t._GetAttributeNamesOrOptions(this._isAnimationSheetEnabled, this._isBillboardBased && this.billboardMode !== t.BILLBOARDMODE_STRETCHED, this._useRampGradients),
|
|
o = t._GetEffectCreationOptions(this._isAnimationSheetEnabled),
|
|
s = ["diffuseSampler", "rampSampler"];
|
|
xi.a && (xi.a.PrepareUniforms(o, this._imageProcessingConfigurationDefines), xi.a.PrepareSamplers(s, this._imageProcessingConfigurationDefines)), this._effect = this._scene.getEngine().createEffect("particles", r, o, s, n)
|
|
}
|
|
return this._effect
|
|
}, t.prototype.animate = function(e) {
|
|
var t = this;
|
|
if (void 0 === e && (e = !1), this._started) {
|
|
if (!e) {
|
|
if (!this.isReady()) return;
|
|
if (this._currentRenderId === this._scene.getFrameId()) return;
|
|
this._currentRenderId = this._scene.getFrameId()
|
|
}
|
|
var i;
|
|
if (this._scaledUpdateSpeed = this.updateSpeed * (e ? this.preWarmStepOffset : this._scene.getAnimationRatio()), this.manualEmitCount > -1) i = this.manualEmitCount, this._newPartsExcess = 0, this.manualEmitCount = 0;
|
|
else {
|
|
var n = this.emitRate;
|
|
if (this._emitRateGradients && this._emitRateGradients.length > 0 && this.targetStopDuration) {
|
|
var r = this._actualFrame / this.targetStopDuration;
|
|
ye.h.GetCurrentGradient(r, this._emitRateGradients, function(e, i, r) {
|
|
e !== t._currentEmitRateGradient && (t._currentEmitRate1 = t._currentEmitRate2, t._currentEmitRate2 = i.getFactor(), t._currentEmitRateGradient = e), n = D.a.Lerp(t._currentEmitRate1, t._currentEmitRate2, r)
|
|
})
|
|
}
|
|
i = n * this._scaledUpdateSpeed >> 0, this._newPartsExcess += n * this._scaledUpdateSpeed - i
|
|
}
|
|
if (this._newPartsExcess > 1 && (i += this._newPartsExcess >> 0, this._newPartsExcess -= this._newPartsExcess >> 0), this._alive = !1, this._stopped ? i = 0 : (this._actualFrame += this._scaledUpdateSpeed, this.targetStopDuration && this._actualFrame >= this.targetStopDuration && this.stop()), this._update(i), this._stopped && (this._alive || (this._started = !1, this.onAnimationEnd && this.onAnimationEnd(), this.disposeOnStop && this._scene._toBeDisposed.push(this))), !e) {
|
|
for (var o = 0, s = 0; s < this._particles.length; s++) {
|
|
var a = this._particles[s];
|
|
this._appendParticleVertices(o, a), o += this._useInstancing ? 1 : 4
|
|
}
|
|
this._vertexBuffer && this._vertexBuffer.update(this._vertexData)
|
|
}
|
|
0 === this.manualEmitCount && this.disposeOnStop && this.stop()
|
|
}
|
|
}, t.prototype._appendParticleVertices = function(e, t) {
|
|
this._appendParticleVertex(e++, t, 0, 0), this._useInstancing || (this._appendParticleVertex(e++, t, 1, 0), this._appendParticleVertex(e++, t, 1, 1), this._appendParticleVertex(e++, t, 0, 1))
|
|
}, t.prototype.rebuild = function() {
|
|
this._createIndexBuffer(), this._vertexBuffer && this._vertexBuffer._rebuild()
|
|
}, t.prototype.isReady = function() {
|
|
if (!(this.emitter && this._imageProcessingConfiguration.isReady() && this.particleTexture && this.particleTexture.isReady())) return !1;
|
|
if (this.blendMode !== t.BLENDMODE_MULTIPLYADD) {
|
|
if (!this._getEffect(this.blendMode).isReady()) return !1
|
|
} else {
|
|
if (!this._getEffect(t.BLENDMODE_MULTIPLY).isReady()) return !1;
|
|
if (!this._getEffect(t.BLENDMODE_ADD).isReady()) return !1
|
|
}
|
|
return !0
|
|
}, t.prototype._render = function(e) {
|
|
var i = this._getEffect(e),
|
|
n = this._scene.getEngine();
|
|
n.enableEffect(i);
|
|
var r = this._scene.getViewMatrix();
|
|
if (i.setTexture("diffuseSampler", this.particleTexture), i.setMatrix("view", r), i.setMatrix("projection", this._scene.getProjectionMatrix()), this._isAnimationSheetEnabled && this.particleTexture) {
|
|
var o = this.particleTexture.getBaseSize();
|
|
i.setFloat3("particlesInfos", this.spriteCellWidth / o.width, this.spriteCellHeight / o.height, o.width / this.spriteCellWidth)
|
|
}
|
|
if (i.setVector2("translationPivot", this.translationPivot), i.setFloat4("textureMask", this.textureMask.r, this.textureMask.g, this.textureMask.b, this.textureMask.a), this._isBillboardBased) {
|
|
var s = this._scene.activeCamera;
|
|
i.setVector3("eyePosition", s.globalPosition)
|
|
}
|
|
if (this._rampGradientsTexture && i.setTexture("rampSampler", this._rampGradientsTexture), this._scene.clipPlane || this._scene.clipPlane2 || this._scene.clipPlane3 || this._scene.clipPlane4) {
|
|
var a = r.clone();
|
|
a.invert(), i.setMatrix("invView", a), ir.a.BindClipPlane(i, this._scene)
|
|
}
|
|
switch (n.bindBuffers(this._vertexBuffers, this._indexBuffer, i), this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess && this._imageProcessingConfiguration.bind(i), e) {
|
|
case t.BLENDMODE_ADD:
|
|
n.setAlphaMode(_.a.ALPHA_ADD);
|
|
break;
|
|
case t.BLENDMODE_ONEONE:
|
|
n.setAlphaMode(_.a.ALPHA_ONEONE);
|
|
break;
|
|
case t.BLENDMODE_STANDARD:
|
|
n.setAlphaMode(_.a.ALPHA_COMBINE);
|
|
break;
|
|
case t.BLENDMODE_MULTIPLY:
|
|
n.setAlphaMode(_.a.ALPHA_MULTIPLY)
|
|
}
|
|
return this._useInstancing ? n.drawArraysType(so.a.TriangleFanDrawMode, 0, 4, this._particles.length) : n.drawElementsType(so.a.TriangleFillMode, 0, 6 * this._particles.length), this._particles.length
|
|
}, t.prototype.render = function() {
|
|
if (!this.isReady() || !this._particles.length) return 0;
|
|
var e = this._scene.getEngine();
|
|
e.setState(!1), this.forceDepthWrite && e.setDepthWrite(!0);
|
|
var i = 0;
|
|
return this.blendMode === t.BLENDMODE_MULTIPLYADD && (i = this._render(t.BLENDMODE_MULTIPLY) + this._render(t.BLENDMODE_ADD)), i = this._render(this.blendMode), e.unbindInstanceAttributes(), e.setAlphaMode(_.a.ALPHA_DISABLE), i
|
|
}, t.prototype.dispose = function(e) {
|
|
if (void 0 === e && (e = !0), this._vertexBuffer && (this._vertexBuffer.dispose(), this._vertexBuffer = null), this._spriteBuffer && (this._spriteBuffer.dispose(), this._spriteBuffer = null), this._indexBuffer && (this._scene.getEngine()._releaseBuffer(this._indexBuffer), this._indexBuffer = null), e && this.particleTexture && (this.particleTexture.dispose(), this.particleTexture = null), e && this.noiseTexture && (this.noiseTexture.dispose(), this.noiseTexture = null), this._rampGradientsTexture && (this._rampGradientsTexture.dispose(), this._rampGradientsTexture = null), this._removeFromRoot(), this._subEmitters && this._subEmitters.length) {
|
|
for (var t = 0; t < this._subEmitters.length; t++)
|
|
for (var i = 0, n = this._subEmitters[t]; i < n.length; i++) {
|
|
n[i].dispose()
|
|
}
|
|
this._subEmitters = [], this.subEmitters = []
|
|
}
|
|
this._disposeEmitterOnDispose && this.emitter && this.emitter.dispose && this.emitter.dispose(!0), (t = this._scene.particleSystems.indexOf(this)) > -1 && this._scene.particleSystems.splice(t, 1), this._scene._activeParticleSystems.dispose(), this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear(), this.reset()
|
|
}, t.prototype.clone = function(e, i) {
|
|
var n = null,
|
|
r = null;
|
|
if (null != this.customShader) {
|
|
var o = (r = this.customShader).shaderOptions.defines.length > 0 ? r.shaderOptions.defines.join("\n") : "";
|
|
n = this._scene.getEngine().createEffectForParticles(r.shaderPath.fragmentElement, r.shaderOptions.uniforms, r.shaderOptions.samplers, o)
|
|
} else this._customEffect && (n = this._customEffect);
|
|
var s = new t(e, this._capacity, this._scene, n);
|
|
return s.customShader = r, S.a.DeepCopy(this, s, ["particles", "customShader", "noiseTexture"]), void 0 === i && (i = this.emitter), s.noiseTexture = this.noiseTexture, s.emitter = i, this.particleTexture && (s.particleTexture = new ke.a(this.particleTexture.url, this._scene)), this._colorGradients && this._colorGradients.forEach(function(e) {
|
|
s.addColorGradient(e.gradient, e.color1, e.color2)
|
|
}), this._dragGradients && this._dragGradients.forEach(function(e) {
|
|
s.addDragGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this._angularSpeedGradients && this._angularSpeedGradients.forEach(function(e) {
|
|
s.addAngularSpeedGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this._emitRateGradients && this._emitRateGradients.forEach(function(e) {
|
|
s.addEmitRateGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this._lifeTimeGradients && this._lifeTimeGradients.forEach(function(e) {
|
|
s.addLifeTimeGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this._limitVelocityGradients && this._limitVelocityGradients.forEach(function(e) {
|
|
s.addLimitVelocityGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this._sizeGradients && this._sizeGradients.forEach(function(e) {
|
|
s.addSizeGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this._startSizeGradients && this._startSizeGradients.forEach(function(e) {
|
|
s.addStartSizeGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this._velocityGradients && this._velocityGradients.forEach(function(e) {
|
|
s.addVelocityGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this._rampGradients && this._rampGradients.forEach(function(e) {
|
|
s.addRampGradient(e.gradient, e.color)
|
|
}), this._colorRemapGradients && this._colorRemapGradients.forEach(function(e) {
|
|
s.addColorRemapGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this._alphaRemapGradients && this._alphaRemapGradients.forEach(function(e) {
|
|
s.addAlphaRemapGradient(e.gradient, e.factor1, e.factor2)
|
|
}), this.preventAutoStart || s.start(), s
|
|
}, t.prototype.serialize = function() {
|
|
var e = {};
|
|
if (t._Serialize(e, this), e.textureMask = this.textureMask.asArray(), e.customShader = this.customShader, e.preventAutoStart = this.preventAutoStart, this.subEmitters) {
|
|
e.subEmitters = [], this._subEmitters || this._prepareSubEmitterInternalArray();
|
|
for (var i = 0, n = this._subEmitters; i < n.length; i++) {
|
|
for (var r = [], o = 0, s = n[i]; o < s.length; o++) {
|
|
var a = s[o];
|
|
r.push(a.serialize())
|
|
}
|
|
e.subEmitters.push(r)
|
|
}
|
|
}
|
|
return e
|
|
}, t._Serialize = function(e, t) {
|
|
if (e.name = t.name, e.id = t.id, e.capacity = t.getCapacity(), t.emitter.position) {
|
|
var i = t.emitter;
|
|
e.emitterId = i.id
|
|
} else {
|
|
var n = t.emitter;
|
|
e.emitter = n.asArray()
|
|
}
|
|
t.particleEmitterType && (e.particleEmitterType = t.particleEmitterType.serialize()), t.particleTexture && (e.textureName = t.particleTexture.name, e.invertY = t.particleTexture._invertY), L.a.AppendSerializedAnimations(t, e), e.beginAnimationOnStart = t.beginAnimationOnStart, e.beginAnimationFrom = t.beginAnimationFrom, e.beginAnimationTo = t.beginAnimationTo, e.beginAnimationLoop = t.beginAnimationLoop, e.startDelay = t.startDelay, e.renderingGroupId = t.renderingGroupId, e.isBillboardBased = t.isBillboardBased, e.billboardMode = t.billboardMode, e.minAngularSpeed = t.minAngularSpeed, e.maxAngularSpeed = t.maxAngularSpeed, e.minSize = t.minSize, e.maxSize = t.maxSize, e.minScaleX = t.minScaleX, e.maxScaleX = t.maxScaleX, e.minScaleY = t.minScaleY, e.maxScaleY = t.maxScaleY, e.minEmitPower = t.minEmitPower, e.maxEmitPower = t.maxEmitPower, e.minLifeTime = t.minLifeTime, e.maxLifeTime = t.maxLifeTime, e.emitRate = t.emitRate, e.gravity = t.gravity.asArray(), e.noiseStrength = t.noiseStrength.asArray(), e.color1 = t.color1.asArray(), e.color2 = t.color2.asArray(), e.colorDead = t.colorDead.asArray(), e.updateSpeed = t.updateSpeed, e.targetStopDuration = t.targetStopDuration, e.blendMode = t.blendMode, e.preWarmCycles = t.preWarmCycles, e.preWarmStepOffset = t.preWarmStepOffset, e.minInitialRotation = t.minInitialRotation, e.maxInitialRotation = t.maxInitialRotation, e.startSpriteCellID = t.startSpriteCellID, e.endSpriteCellID = t.endSpriteCellID, e.spriteCellChangeSpeed = t.spriteCellChangeSpeed, e.spriteCellWidth = t.spriteCellWidth, e.spriteCellHeight = t.spriteCellHeight, e.spriteRandomStartCell = t.spriteRandomStartCell, e.isAnimationSheetEnabled = t.isAnimationSheetEnabled;
|
|
var r = t.getColorGradients();
|
|
if (r) {
|
|
e.colorGradients = [];
|
|
for (var o = 0, s = r; o < s.length; o++) {
|
|
var a = s[o],
|
|
c = {
|
|
gradient: a.gradient,
|
|
color1: a.color1.asArray()
|
|
};
|
|
a.color2 && (c.color2 = a.color2.asArray()), e.colorGradients.push(c)
|
|
}
|
|
}
|
|
var l = t.getRampGradients();
|
|
if (l) {
|
|
e.rampGradients = [];
|
|
for (var u = 0, h = l; u < h.length; u++) {
|
|
var d = h[u];
|
|
c = {
|
|
gradient: d.gradient,
|
|
color: d.color.asArray()
|
|
};
|
|
e.rampGradients.push(c)
|
|
}
|
|
e.useRampGradients = t.useRampGradients
|
|
}
|
|
var f = t.getColorRemapGradients();
|
|
if (f) {
|
|
e.colorRemapGradients = [];
|
|
for (var p = 0, _ = f; p < _.length; p++) {
|
|
var g = _[p];
|
|
c = {
|
|
gradient: g.gradient,
|
|
factor1: g.factor1
|
|
};
|
|
void 0 !== g.factor2 && (c.factor2 = g.factor2), e.colorRemapGradients.push(c)
|
|
}
|
|
}
|
|
var m = t.getAlphaRemapGradients();
|
|
if (m) {
|
|
e.alphaRemapGradients = [];
|
|
for (var v = 0, y = m; v < y.length; v++) {
|
|
var b = y[v];
|
|
c = {
|
|
gradient: b.gradient,
|
|
factor1: b.factor1
|
|
};
|
|
void 0 !== b.factor2 && (c.factor2 = b.factor2), e.alphaRemapGradients.push(c)
|
|
}
|
|
}
|
|
var T = t.getSizeGradients();
|
|
if (T) {
|
|
e.sizeGradients = [];
|
|
for (var E = 0, A = T; E < A.length; E++) {
|
|
var x = A[E];
|
|
c = {
|
|
gradient: x.gradient,
|
|
factor1: x.factor1
|
|
};
|
|
void 0 !== x.factor2 && (c.factor2 = x.factor2), e.sizeGradients.push(c)
|
|
}
|
|
}
|
|
var R = t.getAngularSpeedGradients();
|
|
if (R) {
|
|
e.angularSpeedGradients = [];
|
|
for (var P = 0, S = R; P < S.length; P++) {
|
|
var C = S[P];
|
|
c = {
|
|
gradient: C.gradient,
|
|
factor1: C.factor1
|
|
};
|
|
void 0 !== C.factor2 && (c.factor2 = C.factor2), e.angularSpeedGradients.push(c)
|
|
}
|
|
}
|
|
var M = t.getVelocityGradients();
|
|
if (M) {
|
|
e.velocityGradients = [];
|
|
for (var O = 0, I = M; O < I.length; O++) {
|
|
var D = I[O];
|
|
c = {
|
|
gradient: D.gradient,
|
|
factor1: D.factor1
|
|
};
|
|
void 0 !== D.factor2 && (c.factor2 = D.factor2), e.velocityGradients.push(c)
|
|
}
|
|
}
|
|
var w = t.getDragGradients();
|
|
if (w) {
|
|
e.dragyGradients = [];
|
|
for (var F = 0, N = w; F < N.length; F++) {
|
|
var B = N[F];
|
|
c = {
|
|
gradient: B.gradient,
|
|
factor1: B.factor1
|
|
};
|
|
void 0 !== B.factor2 && (c.factor2 = B.factor2), e.dragGradients.push(c)
|
|
}
|
|
}
|
|
var U = t.getEmitRateGradients();
|
|
if (U) {
|
|
e.emitRateGradients = [];
|
|
for (var V = 0, G = U; V < G.length; V++) {
|
|
var k = G[V];
|
|
c = {
|
|
gradient: k.gradient,
|
|
factor1: k.factor1
|
|
};
|
|
void 0 !== k.factor2 && (c.factor2 = k.factor2), e.emitRateGradients.push(c)
|
|
}
|
|
}
|
|
var z = t.getStartSizeGradients();
|
|
if (z) {
|
|
e.startSizeGradients = [];
|
|
for (var j = 0, H = z; j < H.length; j++) {
|
|
var W = H[j];
|
|
c = {
|
|
gradient: W.gradient,
|
|
factor1: W.factor1
|
|
};
|
|
void 0 !== W.factor2 && (c.factor2 = W.factor2), e.startSizeGradients.push(c)
|
|
}
|
|
}
|
|
var X = t.getLifeTimeGradients();
|
|
if (X) {
|
|
e.lifeTimeGradients = [];
|
|
for (var Y = 0, K = X; Y < K.length; Y++) {
|
|
var Q = K[Y];
|
|
c = {
|
|
gradient: Q.gradient,
|
|
factor1: Q.factor1
|
|
};
|
|
void 0 !== Q.factor2 && (c.factor2 = Q.factor2), e.lifeTimeGradients.push(c)
|
|
}
|
|
}
|
|
var q = t.getLimitVelocityGradients();
|
|
if (q) {
|
|
e.limitVelocityGradients = [];
|
|
for (var Z = 0, J = q; Z < J.length; Z++) {
|
|
var $ = J[Z];
|
|
c = {
|
|
gradient: $.gradient,
|
|
factor1: $.factor1
|
|
};
|
|
void 0 !== $.factor2 && (c.factor2 = $.factor2), e.limitVelocityGradients.push(c)
|
|
}
|
|
e.limitVelocityDamping = t.limitVelocityDamping
|
|
}
|
|
t.noiseTexture && (e.noiseTexture = t.noiseTexture.serialize())
|
|
}, t._Parse = function(e, t, i, n) {
|
|
if (e.textureName && (t.particleTexture = new ke.a(n + e.textureName, i, !1, void 0 === e.invertY || e.invertY), t.particleTexture.name = e.textureName), e.emitterId || 0 === e.emitterId || void 0 !== e.emitter ? e.emitterId ? t.emitter = i.getLastMeshByID(e.emitterId) : t.emitter = o.x.FromArray(e.emitter) : t.emitter = o.x.Zero(), void 0 !== e.renderingGroupId && (t.renderingGroupId = e.renderingGroupId), void 0 !== e.isBillboardBased && (t.isBillboardBased = e.isBillboardBased), void 0 !== e.billboardMode && (t.billboardMode = e.billboardMode), e.animations) {
|
|
for (var r = 0; r < e.animations.length; r++) {
|
|
var a = e.animations[r],
|
|
c = s.a.GetClass("BABYLON.Animation");
|
|
c && t.animations.push(c.Parse(a))
|
|
}
|
|
t.beginAnimationOnStart = e.beginAnimationOnStart, t.beginAnimationFrom = e.beginAnimationFrom, t.beginAnimationTo = e.beginAnimationTo, t.beginAnimationLoop = e.beginAnimationLoop
|
|
}
|
|
if (e.autoAnimate && i.beginAnimation(t, e.autoAnimateFrom, e.autoAnimateTo, e.autoAnimateLoop, e.autoAnimateSpeed || 1), t.startDelay = 0 | e.startDelay, t.minAngularSpeed = e.minAngularSpeed, t.maxAngularSpeed = e.maxAngularSpeed, t.minSize = e.minSize, t.maxSize = e.maxSize, e.minScaleX && (t.minScaleX = e.minScaleX, t.maxScaleX = e.maxScaleX, t.minScaleY = e.minScaleY, t.maxScaleY = e.maxScaleY), void 0 !== e.preWarmCycles && (t.preWarmCycles = e.preWarmCycles, t.preWarmStepOffset = e.preWarmStepOffset), void 0 !== e.minInitialRotation && (t.minInitialRotation = e.minInitialRotation, t.maxInitialRotation = e.maxInitialRotation), t.minLifeTime = e.minLifeTime, t.maxLifeTime = e.maxLifeTime, t.minEmitPower = e.minEmitPower, t.maxEmitPower = e.maxEmitPower, t.emitRate = e.emitRate, t.gravity = o.x.FromArray(e.gravity), e.noiseStrength && (t.noiseStrength = o.x.FromArray(e.noiseStrength)), t.color1 = o.f.FromArray(e.color1), t.color2 = o.f.FromArray(e.color2), t.colorDead = o.f.FromArray(e.colorDead), t.updateSpeed = e.updateSpeed, t.targetStopDuration = e.targetStopDuration, t.blendMode = e.blendMode, e.colorGradients)
|
|
for (var l = 0, u = e.colorGradients; l < u.length; l++) {
|
|
var h = u[l];
|
|
t.addColorGradient(h.gradient, o.f.FromArray(h.color1), h.color2 ? o.f.FromArray(h.color2) : void 0)
|
|
}
|
|
if (e.rampGradients) {
|
|
for (var d = 0, f = e.rampGradients; d < f.length; d++) {
|
|
var p = f[d];
|
|
t.addRampGradient(p.gradient, o.e.FromArray(p.color))
|
|
}
|
|
t.useRampGradients = e.useRampGradients
|
|
}
|
|
if (e.colorRemapGradients)
|
|
for (var _ = 0, g = e.colorRemapGradients; _ < g.length; _++) {
|
|
var m = g[_];
|
|
t.addColorRemapGradient(m.gradient, void 0 !== m.factor1 ? m.factor1 : m.factor, m.factor2)
|
|
}
|
|
if (e.alphaRemapGradients)
|
|
for (var v = 0, y = e.alphaRemapGradients; v < y.length; v++) {
|
|
var b = y[v];
|
|
t.addAlphaRemapGradient(b.gradient, void 0 !== b.factor1 ? b.factor1 : b.factor, b.factor2)
|
|
}
|
|
if (e.sizeGradients)
|
|
for (var T = 0, E = e.sizeGradients; T < E.length; T++) {
|
|
var A = E[T];
|
|
t.addSizeGradient(A.gradient, void 0 !== A.factor1 ? A.factor1 : A.factor, A.factor2)
|
|
}
|
|
if (e.sizeGradients)
|
|
for (var x = 0, R = e.sizeGradients; x < R.length; x++) {
|
|
A = R[x];
|
|
t.addSizeGradient(A.gradient, void 0 !== A.factor1 ? A.factor1 : A.factor, A.factor2)
|
|
}
|
|
if (e.angularSpeedGradients)
|
|
for (var P = 0, S = e.angularSpeedGradients; P < S.length; P++) {
|
|
var C = S[P];
|
|
t.addAngularSpeedGradient(C.gradient, void 0 !== C.factor1 ? C.factor1 : C.factor, C.factor2)
|
|
}
|
|
if (e.velocityGradients)
|
|
for (var M = 0, O = e.velocityGradients; M < O.length; M++) {
|
|
var I = O[M];
|
|
t.addVelocityGradient(I.gradient, void 0 !== I.factor1 ? I.factor1 : I.factor, I.factor2)
|
|
}
|
|
if (e.dragGradients)
|
|
for (var D = 0, L = e.dragGradients; D < L.length; D++) {
|
|
var w = L[D];
|
|
t.addDragGradient(w.gradient, void 0 !== w.factor1 ? w.factor1 : w.factor, w.factor2)
|
|
}
|
|
if (e.emitRateGradients)
|
|
for (var F = 0, N = e.emitRateGradients; F < N.length; F++) {
|
|
var B = N[F];
|
|
t.addEmitRateGradient(B.gradient, void 0 !== B.factor1 ? B.factor1 : B.factor, B.factor2)
|
|
}
|
|
if (e.startSizeGradients)
|
|
for (var U = 0, V = e.startSizeGradients; U < V.length; U++) {
|
|
var G = V[U];
|
|
t.addStartSizeGradient(G.gradient, void 0 !== G.factor1 ? G.factor1 : G.factor, G.factor2)
|
|
}
|
|
if (e.lifeTimeGradients)
|
|
for (var k = 0, z = e.lifeTimeGradients; k < z.length; k++) {
|
|
var j = z[k];
|
|
t.addLifeTimeGradient(j.gradient, void 0 !== j.factor1 ? j.factor1 : j.factor, j.factor2)
|
|
}
|
|
if (e.limitVelocityGradients) {
|
|
for (var H = 0, W = e.limitVelocityGradients; H < W.length; H++) {
|
|
var X = W[H];
|
|
t.addLimitVelocityGradient(X.gradient, void 0 !== X.factor1 ? X.factor1 : X.factor, X.factor2)
|
|
}
|
|
t.limitVelocityDamping = e.limitVelocityDamping
|
|
}
|
|
var Y;
|
|
if (e.noiseTexture && (t.noiseTexture = _s.Parse(e.noiseTexture, i, n)), e.particleEmitterType) {
|
|
switch (e.particleEmitterType.type) {
|
|
case "SphereParticleEmitter":
|
|
Y = new va;
|
|
break;
|
|
case "SphereDirectedParticleEmitter":
|
|
Y = new ya;
|
|
break;
|
|
case "ConeEmitter":
|
|
case "ConeParticleEmitter":
|
|
Y = new fa;
|
|
break;
|
|
case "CylinderParticleEmitter":
|
|
Y = new pa;
|
|
break;
|
|
case "HemisphericParticleEmitter":
|
|
Y = new ga;
|
|
break;
|
|
case "BoxEmitter":
|
|
case "BoxParticleEmitter":
|
|
default:
|
|
Y = new da
|
|
}
|
|
Y.parse(e.particleEmitterType)
|
|
} else(Y = new da).parse(e);
|
|
t.particleEmitterType = Y, t.startSpriteCellID = e.startSpriteCellID, t.endSpriteCellID = e.endSpriteCellID, t.spriteCellWidth = e.spriteCellWidth, t.spriteCellHeight = e.spriteCellHeight, t.spriteCellChangeSpeed = e.spriteCellChangeSpeed, t.spriteRandomStartCell = e.spriteRandomStartCell
|
|
}, t.Parse = function(e, i, n, r) {
|
|
void 0 === r && (r = !1);
|
|
var s = e.name,
|
|
a = null,
|
|
c = null;
|
|
if (e.customShader) {
|
|
var l = (c = e.customShader).shaderOptions.defines.length > 0 ? c.shaderOptions.defines.join("\n") : "";
|
|
a = i.getEngine().createEffectForParticles(c.shaderPath.fragmentElement, c.shaderOptions.uniforms, c.shaderOptions.samplers, l)
|
|
}
|
|
var u = new t(s, e.capacity, i, a, e.isAnimationSheetEnabled);
|
|
if (u.customShader = c, e.id && (u.id = e.id), e.subEmitters) {
|
|
u.subEmitters = [];
|
|
for (var h = 0, d = e.subEmitters; h < d.length; h++) {
|
|
for (var f = [], p = 0, _ = d[h]; p < _.length; p++) {
|
|
var g = _[p];
|
|
f.push(Ea.Parse(g, i, n))
|
|
}
|
|
u.subEmitters.push(f)
|
|
}
|
|
}
|
|
return t._Parse(e, u, i, n), u.textureMask = o.f.FromArray(e.textureMask), e.preventAutoStart && (u.preventAutoStart = e.preventAutoStart), r || u.preventAutoStart || u.start(), u
|
|
}, t.BILLBOARDMODE_Y = _.a.PARTICLES_BILLBOARDMODE_Y, t.BILLBOARDMODE_ALL = _.a.PARTICLES_BILLBOARDMODE_ALL, t.BILLBOARDMODE_STRETCHED = _.a.PARTICLES_BILLBOARDMODE_STRETCHED, t
|
|
}(ba);
|
|
Ea._ParseParticleSystem = Ra.Parse;
|
|
zt.a.ShadersStore.gpuUpdateParticlesPixelShader = "#version 300 es\nvoid main() {\ndiscard;\n}\n";
|
|
var Pa = "#version 300 es\n#define PI 3.14159\nuniform float currentCount;\nuniform float timeDelta;\nuniform float stopFactor;\nuniform mat4 emitterWM;\nuniform vec2 lifeTime;\nuniform vec2 emitPower;\nuniform vec2 sizeRange;\nuniform vec4 scaleRange;\n#ifndef COLORGRADIENTS\nuniform vec4 color1;\nuniform vec4 color2;\n#endif\nuniform vec3 gravity;\nuniform sampler2D randomSampler;\nuniform sampler2D randomSampler2;\nuniform vec4 angleRange;\n#ifdef BOXEMITTER\nuniform vec3 direction1;\nuniform vec3 direction2;\nuniform vec3 minEmitBox;\nuniform vec3 maxEmitBox;\n#endif\n#ifdef POINTEMITTER\nuniform vec3 direction1;\nuniform vec3 direction2;\n#endif\n#ifdef HEMISPHERICEMITTER\nuniform float radius;\nuniform float radiusRange;\nuniform float directionRandomizer;\n#endif\n#ifdef SPHEREEMITTER\nuniform float radius;\nuniform float radiusRange;\n#ifdef DIRECTEDSPHEREEMITTER\nuniform vec3 direction1;\nuniform vec3 direction2;\n#else\nuniform float directionRandomizer;\n#endif\n#endif\n#ifdef CYLINDEREMITTER\nuniform float radius;\nuniform float height;\nuniform float radiusRange;\n#ifdef DIRECTEDCYLINDEREMITTER\nuniform vec3 direction1;\nuniform vec3 direction2;\n#else\nuniform float directionRandomizer;\n#endif\n#endif\n#ifdef CONEEMITTER\nuniform vec2 radius;\nuniform float coneAngle;\nuniform vec2 height;\nuniform float directionRandomizer;\n#endif\n\nin vec3 position;\nin float age;\nin float life;\nin vec4 seed;\nin vec3 size;\n#ifndef COLORGRADIENTS\nin vec4 color;\n#endif\nin vec3 direction;\n#ifndef BILLBOARD\nin vec3 initialDirection;\n#endif\n#ifdef ANGULARSPEEDGRADIENTS\nin float angle;\n#else\nin vec2 angle;\n#endif\n#ifdef ANIMATESHEET\nin float cellIndex;\n#ifdef ANIMATESHEETRANDOMSTART\nin float cellStartOffset;\n#endif\n#endif\n#ifdef NOISE\nin vec3 noiseCoordinates1;\nin vec3 noiseCoordinates2;\n#endif\n\nout vec3 outPosition;\nout float outAge;\nout float outLife;\nout vec4 outSeed;\nout vec3 outSize;\n#ifndef COLORGRADIENTS\nout vec4 outColor;\n#endif\nout vec3 outDirection;\n#ifndef BILLBOARD\nout vec3 outInitialDirection;\n#endif\n#ifdef ANGULARSPEEDGRADIENTS\nout float outAngle;\n#else\nout vec2 outAngle;\n#endif\n#ifdef ANIMATESHEET\nout float outCellIndex;\n#ifdef ANIMATESHEETRANDOMSTART\nout float outCellStartOffset;\n#endif\n#endif\n#ifdef NOISE\nout vec3 outNoiseCoordinates1;\nout vec3 outNoiseCoordinates2;\n#endif\n#ifdef SIZEGRADIENTS\nuniform sampler2D sizeGradientSampler;\n#endif\n#ifdef ANGULARSPEEDGRADIENTS\nuniform sampler2D angularSpeedGradientSampler;\n#endif\n#ifdef VELOCITYGRADIENTS\nuniform sampler2D velocityGradientSampler;\n#endif\n#ifdef LIMITVELOCITYGRADIENTS\nuniform sampler2D limitVelocityGradientSampler;\nuniform float limitVelocityDamping;\n#endif\n#ifdef DRAGGRADIENTS\nuniform sampler2D dragGradientSampler;\n#endif\n#ifdef NOISE\nuniform vec3 noiseStrength;\nuniform sampler2D noiseSampler;\n#endif\n#ifdef ANIMATESHEET\nuniform vec3 cellInfos;\n#endif\nvec3 getRandomVec3(float offset) {\nreturn texture(randomSampler2,vec2(float(gl_VertexID)*offset/currentCount,0)).rgb;\n}\nvec4 getRandomVec4(float offset) {\nreturn texture(randomSampler,vec2(float(gl_VertexID)*offset/currentCount,0));\n}\nvoid main() {\nfloat newAge=age+timeDelta;\n\nif (newAge>=life && stopFactor != 0.) {\nvec3 position;\nvec3 direction;\n\nvec4 randoms=getRandomVec4(seed.x);\n\noutLife=lifeTime.x+(lifeTime.y-lifeTime.x)*randoms.r;\noutAge=mod(newAge,outLife);\n\noutSeed=seed;\n\n#ifdef SIZEGRADIENTS\noutSize.x=texture(sizeGradientSampler,vec2(0,0)).r;\n#else\noutSize.x=sizeRange.x+(sizeRange.y-sizeRange.x)*randoms.g;\n#endif\noutSize.y=scaleRange.x+(scaleRange.y-scaleRange.x)*randoms.b;\noutSize.z=scaleRange.z+(scaleRange.w-scaleRange.z)*randoms.a;\n#ifndef COLORGRADIENTS\n\noutColor=color1+(color2-color1)*randoms.b;\n#endif\n\n#ifndef ANGULARSPEEDGRADIENTS\noutAngle.y=angleRange.x+(angleRange.y-angleRange.x)*randoms.a;\noutAngle.x=angleRange.z+(angleRange.w-angleRange.z)*randoms.r;\n#else\noutAngle=angleRange.z+(angleRange.w-angleRange.z)*randoms.r;\n#endif\n\n#ifdef POINTEMITTER\nvec3 randoms2=getRandomVec3(seed.y);\nvec3 randoms3=getRandomVec3(seed.z);\nposition=vec3(0,0,0);\ndirection=direction1+(direction2-direction1)*randoms3;\n#elif defined(BOXEMITTER)\nvec3 randoms2=getRandomVec3(seed.y);\nvec3 randoms3=getRandomVec3(seed.z);\nposition=minEmitBox+(maxEmitBox-minEmitBox)*randoms2;\ndirection=direction1+(direction2-direction1)*randoms3;\n#elif defined(HEMISPHERICEMITTER)\nvec3 randoms2=getRandomVec3(seed.y);\nvec3 randoms3=getRandomVec3(seed.z);\n\nfloat phi=2.0*PI*randoms2.x;\nfloat theta=acos(2.0*randoms2.y-1.0);\nfloat randX=cos(phi)*sin(theta);\nfloat randY=cos(theta);\nfloat randZ=sin(phi)*sin(theta);\nposition=(radius-(radius*radiusRange*randoms2.z))*vec3(randX,abs(randY),randZ);\ndirection=position+directionRandomizer*randoms3;\n#elif defined(SPHEREEMITTER)\nvec3 randoms2=getRandomVec3(seed.y);\nvec3 randoms3=getRandomVec3(seed.z);\n\nfloat phi=2.0*PI*randoms2.x;\nfloat theta=acos(2.0*randoms2.y-1.0);\nfloat randX=cos(phi)*sin(theta);\nfloat randY=cos(theta);\nfloat randZ=sin(phi)*sin(theta);\nposition=(radius-(radius*radiusRange*randoms2.z))*vec3(randX,randY,randZ);\n#ifdef DIRECTEDSPHEREEMITTER\ndirection=direction1+(direction2-direction1)*randoms3;\n#else\n\ndirection=position+directionRandomizer*randoms3;\n#endif\n#elif defined(CYLINDEREMITTER)\nvec3 randoms2=getRandomVec3(seed.y);\nvec3 randoms3=getRandomVec3(seed.z);\n\nfloat yPos=(randoms2.x-0.5)*height;\nfloat angle=randoms2.y*PI*2.;\nfloat inverseRadiusRangeSquared=((1.-radiusRange)*(1.-radiusRange));\nfloat positionRadius=radius*sqrt(inverseRadiusRangeSquared+(randoms2.z*(1.-inverseRadiusRangeSquared)));\nfloat xPos=positionRadius*cos(angle);\nfloat zPos=positionRadius*sin(angle);\nposition=vec3(xPos,yPos,zPos);\n#ifdef DIRECTEDCYLINDEREMITTER\ndirection=direction1+(direction2-direction1)*randoms3;\n#else\n\nangle=angle+((randoms3.x-0.5)*PI);\ndirection=vec3(cos(angle),randoms3.y-0.5,sin(angle));\ndirection=normalize(direction);\n#endif\n#elif defined(CONEEMITTER)\nvec3 randoms2=getRandomVec3(seed.y);\nfloat s=2.0*PI*randoms2.x;\n#ifdef CONEEMITTERSPAWNPOINT\nfloat h=0.00001;\n#else\nfloat h=randoms2.y*height.y;\n\nh=1.-h*h;\n#endif\nfloat lRadius=radius.x-radius.x*randoms2.z*radius.y;\nlRadius=lRadius*h;\nfloat randX=lRadius*sin(s);\nfloat randZ=lRadius*cos(s);\nfloat randY=h*height.x;\nposition=vec3(randX,randY,randZ);\n\nif (abs(cos(coneAngle)) == 1.0) {\ndirection=vec3(0.,1.0,0.);\n} else {\nvec3 randoms3=getRandomVec3(seed.z);\ndirection=position+directionRandomizer*randoms3;\n}\n#else\n\nposition=vec3(0.,0.,0.);\n\ndirection=2.0*(getRandomVec3(seed.w)-vec3(0.5,0.5,0.5));\n#endif\nfloat power=emitPower.x+(emitPower.y-emitPower.x)*randoms.a;\noutPosition=(emitterWM*vec4(position,1.)).xyz;\nvec3 initial=(emitterWM*vec4(direction,0.)).xyz;\noutDirection=initial*power;\n#ifndef BILLBOARD\noutInitialDirection=initial;\n#endif\n#ifdef ANIMATESHEET\noutCellIndex=cellInfos.x;\n#ifdef ANIMATESHEETRANDOMSTART\noutCellStartOffset=randoms.a*outLife;\n#endif\n#endif\n#ifdef NOISE\noutNoiseCoordinates1=noiseCoordinates1;\noutNoiseCoordinates2=noiseCoordinates2;\n#endif\n} else {\nfloat directionScale=timeDelta;\noutAge=newAge;\nfloat ageGradient=newAge/life;\n#ifdef VELOCITYGRADIENTS\ndirectionScale*=texture(velocityGradientSampler,vec2(ageGradient,0)).r;\n#endif\n#ifdef DRAGGRADIENTS\ndirectionScale*=1.0-texture(dragGradientSampler,vec2(ageGradient,0)).r;\n#endif\noutPosition=position+direction*directionScale;\noutLife=life;\noutSeed=seed;\n#ifndef COLORGRADIENTS\noutColor=color;\n#endif\n#ifdef SIZEGRADIENTS\noutSize.x=texture(sizeGradientSampler,vec2(ageGradient,0)).r;\noutSize.yz=size.yz;\n#else\noutSize=size;\n#endif\n#ifndef BILLBOARD\noutInitialDirection=initialDirection;\n#endif\nvec3 updatedDirection=direction+gravity*timeDelta;\n#ifdef LIMITVELOCITYGRADIENTS\nfloat limitVelocity=texture(limitVelocityGradientSampler,vec2(ageGradient,0)).r;\nfloat currentVelocity=length(updatedDirection);\nif (currentVelocity>limitVelocity) {\nupdatedDirection=updatedDirection*limitVelocityDamping;\n}\n#endif\noutDirection=updatedDirection;\n#ifdef NOISE\nvec3 localPosition=outPosition-emitterWM[3].xyz;\nfloat fetchedR=texture(noiseSampler,vec2(noiseCoordinates1.x,noiseCoordinates1.y)*vec2(0.5)+vec2(0.5)).r;\nfloat fetchedG=texture(noiseSampler,vec2(noiseCoordinates1.z,noiseCoordinates2.x)*vec2(0.5)+vec2(0.5)).r;\nfloat fetchedB=texture(noiseSampler,vec2(noiseCoordinates2.y,noiseCoordinates2.z)*vec2(0.5)+vec2(0.5)).r;\nvec3 force=vec3(2.*fetchedR-1.,2.*fetchedG-1.,2.*fetchedB-1.)*noiseStrength;\noutDirection=outDirection+force*timeDelta;\noutNoiseCoordinates1=noiseCoordinates1;\noutNoiseCoordinates2=noiseCoordinates2;\n#endif\n#ifdef ANGULARSPEEDGRADIENTS\nfloat angularSpeed=texture(angularSpeedGradientSampler,vec2(ageGradient,0)).r;\noutAngle=angle+angularSpeed*timeDelta;\n#else\noutAngle=vec2(angle.x+angle.y*timeDelta,angle.y);\n#endif\n#ifdef ANIMATESHEET\nfloat offsetAge=outAge;\nfloat dist=cellInfos.y-cellInfos.x;\n#ifdef ANIMATESHEETRANDOMSTART\noutCellStartOffset=cellStartOffset;\noffsetAge+=cellStartOffset;\n#endif\nfloat ratio=clamp(mod(offsetAge*cellInfos.z,life)/life,0.,1.0);\noutCellIndex=float(int(cellInfos.x+ratio*dist));\n#endif\n}\n}";
|
|
zt.a.ShadersStore.gpuUpdateParticlesVertexShader = Pa;
|
|
var Sa = "#ifdef CLIPPLANE\nin float fClipDistance;\n#endif\n#ifdef CLIPPLANE2\nin float fClipDistance2;\n#endif\n#ifdef CLIPPLANE3\nin float fClipDistance3;\n#endif\n#ifdef CLIPPLANE4\nin float fClipDistance4;\n#endif";
|
|
zt.a.IncludesShadersStore.clipPlaneFragmentDeclaration2 = Sa;
|
|
var Ca = "#version 300 es\nuniform sampler2D textureSampler;\nin vec2 vUV;\nin vec4 vColor;\nout vec4 outFragColor;\n#include<clipPlaneFragmentDeclaration2>\n#include<imageProcessingDeclaration>\n#include<helperFunctions>\n#include<imageProcessingFunctions>\nvoid main() {\n#include<clipPlaneFragment>\nvec4 textureColor=texture(textureSampler,vUV);\noutFragColor=textureColor*vColor;\n#ifdef BLENDMULTIPLYMODE\nfloat alpha=vColor.a*textureColor.a;\noutFragColor.rgb=outFragColor.rgb*alpha+vec3(1.0)*(1.0-alpha);\n#endif\n\n\n#ifdef IMAGEPROCESSINGPOSTPROCESS\noutFragColor.rgb=toLinearSpace(outFragColor.rgb);\n#else\n#ifdef IMAGEPROCESSING\noutFragColor.rgb=toLinearSpace(outFragColor.rgb);\noutFragColor=applyImageProcessing(outFragColor);\n#endif\n#endif\n}\n";
|
|
zt.a.ShadersStore.gpuRenderParticlesPixelShader = Ca;
|
|
var Ma = "#ifdef CLIPPLANE\nuniform vec4 vClipPlane;\nout float fClipDistance;\n#endif\n#ifdef CLIPPLANE2\nuniform vec4 vClipPlane2;\nout float fClipDistance2;\n#endif\n#ifdef CLIPPLANE3\nuniform vec4 vClipPlane3;\nout float fClipDistance3;\n#endif\n#ifdef CLIPPLANE4\nuniform vec4 vClipPlane4;\nout float fClipDistance4;\n#endif";
|
|
zt.a.IncludesShadersStore.clipPlaneVertexDeclaration2 = Ma;
|
|
var Oa = "#version 300 es\nuniform mat4 view;\nuniform mat4 projection;\nuniform vec2 translationPivot;\nuniform vec3 worldOffset;\n\nin vec3 position;\nin float age;\nin float life;\nin vec3 size;\n#ifndef BILLBOARD\nin vec3 initialDirection;\n#endif\n#ifdef BILLBOARDSTRETCHED\nin vec3 direction;\n#endif\nin float angle;\n#ifdef ANIMATESHEET\nin float cellIndex;\n#endif\nin vec2 offset;\nin vec2 uv;\nout vec2 vUV;\nout vec4 vColor;\n#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4)\nuniform mat4 invView;\n#endif\n#include<clipPlaneVertexDeclaration2>\n#ifdef COLORGRADIENTS\nuniform sampler2D colorGradientSampler;\n#else\nuniform vec4 colorDead;\nin vec4 color;\n#endif\n#ifdef ANIMATESHEET\nuniform vec3 sheetInfos;\n#endif\n#ifdef BILLBOARD\nuniform vec3 eyePosition;\n#endif\nvec3 rotate(vec3 yaxis,vec3 rotatedCorner) {\nvec3 xaxis=normalize(cross(vec3(0.,1.0,0.),yaxis));\nvec3 zaxis=normalize(cross(yaxis,xaxis));\nvec3 row0=vec3(xaxis.x,xaxis.y,xaxis.z);\nvec3 row1=vec3(yaxis.x,yaxis.y,yaxis.z);\nvec3 row2=vec3(zaxis.x,zaxis.y,zaxis.z);\nmat3 rotMatrix=mat3(row0,row1,row2);\nvec3 alignedCorner=rotMatrix*rotatedCorner;\nreturn (position+worldOffset)+alignedCorner;\n}\n#ifdef BILLBOARDSTRETCHED\nvec3 rotateAlign(vec3 toCamera,vec3 rotatedCorner) {\nvec3 normalizedToCamera=normalize(toCamera);\nvec3 normalizedCrossDirToCamera=normalize(cross(normalize(direction),normalizedToCamera));\nvec3 crossProduct=normalize(cross(normalizedToCamera,normalizedCrossDirToCamera));\nvec3 row0=vec3(normalizedCrossDirToCamera.x,normalizedCrossDirToCamera.y,normalizedCrossDirToCamera.z);\nvec3 row1=vec3(crossProduct.x,crossProduct.y,crossProduct.z);\nvec3 row2=vec3(normalizedToCamera.x,normalizedToCamera.y,normalizedToCamera.z);\nmat3 rotMatrix=mat3(row0,row1,row2);\nvec3 alignedCorner=rotMatrix*rotatedCorner;\nreturn (position+worldOffset)+alignedCorner;\n}\n#endif\nvoid main() {\n#ifdef ANIMATESHEET\nfloat rowOffset=floor(cellIndex/sheetInfos.z);\nfloat columnOffset=cellIndex-rowOffset*sheetInfos.z;\nvec2 uvScale=sheetInfos.xy;\nvec2 uvOffset=vec2(uv.x ,1.0-uv.y);\nvUV=(uvOffset+vec2(columnOffset,rowOffset))*uvScale;\n#else\nvUV=uv;\n#endif\nfloat ratio=age/life;\n#ifdef COLORGRADIENTS\nvColor=texture(colorGradientSampler,vec2(ratio,0));\n#else\nvColor=color*vec4(1.0-ratio)+colorDead*vec4(ratio);\n#endif\nvec2 cornerPos=(offset-translationPivot)*size.yz*size.x+translationPivot;\n#ifdef BILLBOARD\nvec4 rotatedCorner;\nrotatedCorner.w=0.;\n#ifdef BILLBOARDY\nrotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);\nrotatedCorner.z=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);\nrotatedCorner.y=0.;\nvec3 yaxis=(position+worldOffset)-eyePosition;\nyaxis.y=0.;\nvec3 worldPos=rotate(normalize(yaxis),rotatedCorner.xyz);\nvec4 viewPosition=(view*vec4(worldPos,1.0));\n#elif defined(BILLBOARDSTRETCHED)\nrotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);\nrotatedCorner.y=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);\nrotatedCorner.z=0.;\nvec3 toCamera=(position+worldOffset)-eyePosition;\nvec3 worldPos=rotateAlign(toCamera,rotatedCorner.xyz);\nvec4 viewPosition=(view*vec4(worldPos,1.0));\n#else\n\nrotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);\nrotatedCorner.y=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);\nrotatedCorner.z=0.;\n\nvec4 viewPosition=view*vec4((position+worldOffset),1.0)+rotatedCorner;\n#endif\n#else\n\nvec3 rotatedCorner;\nrotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);\nrotatedCorner.y=0.;\nrotatedCorner.z=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);\nvec3 yaxis=normalize(initialDirection);\nvec3 worldPos=rotate(yaxis,rotatedCorner);\n\nvec4 viewPosition=view*vec4(worldPos,1.0);\n#endif\ngl_Position=projection*viewPosition;\n\n#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4)\nvec4 worldPos=invView*viewPosition;\n#endif\n#include<clipPlaneVertex>\n}";
|
|
zt.a.ShadersStore.gpuRenderParticlesVertexShader = Oa;
|
|
var Ia = function(e) {
|
|
function t(t, i, n, o) {
|
|
void 0 === o && (o = !1);
|
|
var s = e.call(this, t) || this;
|
|
s.layerMask = 268435455, s._accumulatedCount = 0, s._targetIndex = 0, s._currentRenderId = -1, s._started = !1, s._stopped = !1, s._timeDelta = 0, s._actualFrame = 0, s._rawTextureWidth = 256, s.onDisposeObservable = new r.c, s.forceDepthWrite = !1, s._preWarmDone = !1, s._scene = n || P.a.LastCreatedScene, s._attachImageProcessingConfiguration(null), s._engine = s._scene.getEngine(), i.randomTextureSize || delete i.randomTextureSize;
|
|
var a = l.a({
|
|
capacity: 5e4,
|
|
randomTextureSize: s._engine.getCaps().maxTextureSize
|
|
}, i),
|
|
c = i;
|
|
isFinite(c) && (a.capacity = c), s._capacity = a.capacity, s._activeCount = a.capacity, s._currentActiveCount = 0, s._isAnimationSheetEnabled = o, s._scene.particleSystems.push(s), s._updateEffectOptions = {
|
|
attributes: ["position", "age", "life", "seed", "size", "color", "direction", "initialDirection", "angle", "cellIndex", "cellStartOffset", "noiseCoordinates1", "noiseCoordinates2"],
|
|
uniformsNames: ["currentCount", "timeDelta", "emitterWM", "lifeTime", "color1", "color2", "sizeRange", "scaleRange", "gravity", "emitPower", "direction1", "direction2", "minEmitBox", "maxEmitBox", "radius", "directionRandomizer", "height", "coneAngle", "stopFactor", "angleRange", "radiusRange", "cellInfos", "noiseStrength", "limitVelocityDamping"],
|
|
uniformBuffersNames: [],
|
|
samplers: ["randomSampler", "randomSampler2", "sizeGradientSampler", "angularSpeedGradientSampler", "velocityGradientSampler", "limitVelocityGradientSampler", "noiseSampler", "dragGradientSampler"],
|
|
defines: "",
|
|
fallbacks: null,
|
|
onCompiled: null,
|
|
onError: null,
|
|
indexParameters: null,
|
|
maxSimultaneousLights: 0,
|
|
transformFeedbackVaryings: []
|
|
}, s.particleEmitterType = new da;
|
|
for (var u = Math.min(s._engine.getCaps().maxTextureSize, a.randomTextureSize), h = [], d = 0; d < u; ++d) h.push(Math.random()), h.push(Math.random()), h.push(Math.random()), h.push(Math.random());
|
|
s._randomTexture = new je(new Float32Array(h), u, 1, _.a.TEXTUREFORMAT_RGBA, s._scene, !1, !1, _.a.TEXTURE_NEAREST_SAMPLINGMODE, _.a.TEXTURETYPE_FLOAT), s._randomTexture.wrapU = ke.a.WRAP_ADDRESSMODE, s._randomTexture.wrapV = ke.a.WRAP_ADDRESSMODE, h = [];
|
|
for (d = 0; d < u; ++d) h.push(Math.random()), h.push(Math.random()), h.push(Math.random()), h.push(Math.random());
|
|
return s._randomTexture2 = new je(new Float32Array(h), u, 1, _.a.TEXTUREFORMAT_RGBA, s._scene, !1, !1, _.a.TEXTURE_NEAREST_SAMPLINGMODE, _.a.TEXTURETYPE_FLOAT), s._randomTexture2.wrapU = ke.a.WRAP_ADDRESSMODE, s._randomTexture2.wrapV = ke.a.WRAP_ADDRESSMODE, s._randomTextureSize = u, s
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t, "IsSupported", {
|
|
get: function() {
|
|
return !!P.a.LastCreatedEngine && P.a.LastCreatedEngine.webGLVersion > 1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getCapacity = function() {
|
|
return this._capacity
|
|
}, Object.defineProperty(t.prototype, "activeParticleCount", {
|
|
get: function() {
|
|
return this._activeCount
|
|
},
|
|
set: function(e) {
|
|
this._activeCount = Math.min(e, this._capacity)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.isReady = function() {
|
|
return this._updateEffect ? !!(this.emitter && this._updateEffect.isReady() && this._imageProcessingConfiguration.isReady() && this._renderEffect.isReady() && this.particleTexture && this.particleTexture.isReady()) : (this._recreateUpdateEffect(), this._recreateRenderEffect(), !1)
|
|
}, t.prototype.isStarted = function() {
|
|
return this._started
|
|
}, t.prototype.start = function(e) {
|
|
var t = this;
|
|
if (void 0 === e && (e = this.startDelay), !this.targetStopDuration && this._hasTargetStopDurationDependantGradient()) throw "Particle system started with a targetStopDuration dependant gradient (eg. startSizeGradients) but no targetStopDuration set";
|
|
e ? setTimeout(function() {
|
|
t.start(0)
|
|
}, e) : (this._started = !0, this._stopped = !1, this._preWarmDone = !1, this.beginAnimationOnStart && this.animations && this.animations.length > 0 && this.getScene().beginAnimation(this, this.beginAnimationFrom, this.beginAnimationTo, this.beginAnimationLoop))
|
|
}, t.prototype.stop = function() {
|
|
this._stopped = !0
|
|
}, t.prototype.reset = function() {
|
|
this._releaseBuffers(), this._releaseVAOs(), this._currentActiveCount = 0, this._targetIndex = 0
|
|
}, t.prototype.getClassName = function() {
|
|
return "GPUParticleSystem"
|
|
}, t.prototype._removeGradientAndTexture = function(t, i, n) {
|
|
return e.prototype._removeGradientAndTexture.call(this, t, i, n), this._releaseBuffers(), this
|
|
}, t.prototype.addColorGradient = function(e, t, i) {
|
|
this._colorGradients || (this._colorGradients = []);
|
|
var n = new ye.c;
|
|
return n.gradient = e, n.color1 = t, this._colorGradients.push(n), this._colorGradients.sort(function(e, t) {
|
|
return e.gradient < t.gradient ? -1 : e.gradient > t.gradient ? 1 : 0
|
|
}), this._colorGradientsTexture && (this._colorGradientsTexture.dispose(), this._colorGradientsTexture = null), this._releaseBuffers(), this
|
|
}, t.prototype.removeColorGradient = function(e) {
|
|
return this._removeGradientAndTexture(e, this._colorGradients, this._colorGradientsTexture), this._colorGradientsTexture = null, this
|
|
}, t.prototype._addFactorGradient = function(e, t, i) {
|
|
var n = new ye.d;
|
|
n.gradient = t, n.factor1 = i, e.push(n), e.sort(function(e, t) {
|
|
return e.gradient < t.gradient ? -1 : e.gradient > t.gradient ? 1 : 0
|
|
}), this._releaseBuffers()
|
|
}, t.prototype.addSizeGradient = function(e, t) {
|
|
return this._sizeGradients || (this._sizeGradients = []), this._addFactorGradient(this._sizeGradients, e, t), this._sizeGradientsTexture && (this._sizeGradientsTexture.dispose(), this._sizeGradientsTexture = null), this._releaseBuffers(), this
|
|
}, t.prototype.removeSizeGradient = function(e) {
|
|
return this._removeGradientAndTexture(e, this._sizeGradients, this._sizeGradientsTexture), this._sizeGradientsTexture = null, this
|
|
}, t.prototype.addAngularSpeedGradient = function(e, t) {
|
|
return this._angularSpeedGradients || (this._angularSpeedGradients = []), this._addFactorGradient(this._angularSpeedGradients, e, t), this._angularSpeedGradientsTexture && (this._angularSpeedGradientsTexture.dispose(), this._angularSpeedGradientsTexture = null), this._releaseBuffers(), this
|
|
}, t.prototype.removeAngularSpeedGradient = function(e) {
|
|
return this._removeGradientAndTexture(e, this._angularSpeedGradients, this._angularSpeedGradientsTexture), this._angularSpeedGradientsTexture = null, this
|
|
}, t.prototype.addVelocityGradient = function(e, t) {
|
|
return this._velocityGradients || (this._velocityGradients = []), this._addFactorGradient(this._velocityGradients, e, t), this._velocityGradientsTexture && (this._velocityGradientsTexture.dispose(), this._velocityGradientsTexture = null), this._releaseBuffers(), this
|
|
}, t.prototype.removeVelocityGradient = function(e) {
|
|
return this._removeGradientAndTexture(e, this._velocityGradients, this._velocityGradientsTexture), this._velocityGradientsTexture = null, this
|
|
}, t.prototype.addLimitVelocityGradient = function(e, t) {
|
|
return this._limitVelocityGradients || (this._limitVelocityGradients = []), this._addFactorGradient(this._limitVelocityGradients, e, t), this._limitVelocityGradientsTexture && (this._limitVelocityGradientsTexture.dispose(), this._limitVelocityGradientsTexture = null), this._releaseBuffers(), this
|
|
}, t.prototype.removeLimitVelocityGradient = function(e) {
|
|
return this._removeGradientAndTexture(e, this._limitVelocityGradients, this._limitVelocityGradientsTexture), this._limitVelocityGradientsTexture = null, this
|
|
}, t.prototype.addDragGradient = function(e, t) {
|
|
return this._dragGradients || (this._dragGradients = []), this._addFactorGradient(this._dragGradients, e, t), this._dragGradientsTexture && (this._dragGradientsTexture.dispose(), this._dragGradientsTexture = null), this._releaseBuffers(), this
|
|
}, t.prototype.removeDragGradient = function(e) {
|
|
return this._removeGradientAndTexture(e, this._dragGradients, this._dragGradientsTexture), this._dragGradientsTexture = null, this
|
|
}, t.prototype.addEmitRateGradient = function(e, t, i) {
|
|
return this
|
|
}, t.prototype.removeEmitRateGradient = function(e) {
|
|
return this
|
|
}, t.prototype.addStartSizeGradient = function(e, t, i) {
|
|
return this
|
|
}, t.prototype.removeStartSizeGradient = function(e) {
|
|
return this
|
|
}, t.prototype.addColorRemapGradient = function(e, t, i) {
|
|
return this
|
|
}, t.prototype.removeColorRemapGradient = function() {
|
|
return this
|
|
}, t.prototype.addAlphaRemapGradient = function(e, t, i) {
|
|
return this
|
|
}, t.prototype.removeAlphaRemapGradient = function() {
|
|
return this
|
|
}, t.prototype.addRampGradient = function(e, t) {
|
|
return this
|
|
}, t.prototype.removeRampGradient = function() {
|
|
return this
|
|
}, t.prototype.getRampGradients = function() {
|
|
return null
|
|
}, Object.defineProperty(t.prototype, "useRampGradients", {
|
|
get: function() {
|
|
return !1
|
|
},
|
|
set: function(e) {},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.addLifeTimeGradient = function(e, t, i) {
|
|
return this
|
|
}, t.prototype.removeLifeTimeGradient = function(e) {
|
|
return this
|
|
}, t.prototype._reset = function() {
|
|
this._releaseBuffers()
|
|
}, t.prototype._createUpdateVAO = function(e) {
|
|
var t = {};
|
|
t.position = e.createVertexBuffer("position", 0, 3), t.age = e.createVertexBuffer("age", 3, 1), t.life = e.createVertexBuffer("life", 4, 1), t.seed = e.createVertexBuffer("seed", 5, 4), t.size = e.createVertexBuffer("size", 9, 3);
|
|
var i = 12;
|
|
this._colorGradientsTexture || (t.color = e.createVertexBuffer("color", i, 4), i += 4), t.direction = e.createVertexBuffer("direction", i, 3), i += 3, this._isBillboardBased || (t.initialDirection = e.createVertexBuffer("initialDirection", i, 3), i += 3), this._angularSpeedGradientsTexture ? (t.angle = e.createVertexBuffer("angle", i, 1), i += 1) : (t.angle = e.createVertexBuffer("angle", i, 2), i += 2), this._isAnimationSheetEnabled && (t.cellIndex = e.createVertexBuffer("cellIndex", i, 1), i += 1, this.spriteRandomStartCell && (t.cellStartOffset = e.createVertexBuffer("cellStartOffset", i, 1), i += 1)), this.noiseTexture && (t.noiseCoordinates1 = e.createVertexBuffer("noiseCoordinates1", i, 3), i += 3, t.noiseCoordinates2 = e.createVertexBuffer("noiseCoordinates2", i, 3), i += 3);
|
|
var n = this._engine.recordVertexArrayObject(t, null, this._updateEffect);
|
|
return this._engine.bindArrayBuffer(null), n
|
|
}, t.prototype._createRenderVAO = function(e, t) {
|
|
var i = {};
|
|
i.position = e.createVertexBuffer("position", 0, 3, this._attributesStrideSize, !0), i.age = e.createVertexBuffer("age", 3, 1, this._attributesStrideSize, !0), i.life = e.createVertexBuffer("life", 4, 1, this._attributesStrideSize, !0), i.size = e.createVertexBuffer("size", 9, 3, this._attributesStrideSize, !0);
|
|
var n = 12;
|
|
this._colorGradientsTexture || (i.color = e.createVertexBuffer("color", n, 4, this._attributesStrideSize, !0), n += 4), this.billboardMode === Ra.BILLBOARDMODE_STRETCHED && (i.direction = e.createVertexBuffer("direction", n, 3, this._attributesStrideSize, !0)), n += 3, this._isBillboardBased || (i.initialDirection = e.createVertexBuffer("initialDirection", n, 3, this._attributesStrideSize, !0), n += 3), i.angle = e.createVertexBuffer("angle", n, 1, this._attributesStrideSize, !0), this._angularSpeedGradientsTexture ? n++ : n += 2, this._isAnimationSheetEnabled && (i.cellIndex = e.createVertexBuffer("cellIndex", n, 1, this._attributesStrideSize, !0), n += 1, this.spriteRandomStartCell && (i.cellStartOffset = e.createVertexBuffer("cellStartOffset", n, 1, this._attributesStrideSize, !0), n += 1)), this.noiseTexture && (i.noiseCoordinates1 = e.createVertexBuffer("noiseCoordinates1", n, 3, this._attributesStrideSize, !0), n += 3, i.noiseCoordinates2 = e.createVertexBuffer("noiseCoordinates2", n, 3, this._attributesStrideSize, !0), n += 3), i.offset = t.createVertexBuffer("offset", 0, 2), i.uv = t.createVertexBuffer("uv", 2, 2);
|
|
var r = this._engine.recordVertexArrayObject(i, null, this._renderEffect);
|
|
return this._engine.bindArrayBuffer(null), r
|
|
}, t.prototype._initialize = function(e) {
|
|
if (void 0 === e && (e = !1), !this._buffer0 || e) {
|
|
var t = this._scene.getEngine(),
|
|
i = new Array;
|
|
this._attributesStrideSize = 21, this._targetIndex = 0, this.isBillboardBased || (this._attributesStrideSize += 3), this._colorGradientsTexture && (this._attributesStrideSize -= 4), this._angularSpeedGradientsTexture && (this._attributesStrideSize -= 1), this._isAnimationSheetEnabled && (this._attributesStrideSize += 1, this.spriteRandomStartCell && (this._attributesStrideSize += 1)), this.noiseTexture && (this._attributesStrideSize += 6);
|
|
for (var n = 0; n < this._capacity; n++) i.push(0), i.push(0), i.push(0), i.push(0), i.push(0), i.push(Math.random()), i.push(Math.random()), i.push(Math.random()), i.push(Math.random()), i.push(0), i.push(0), i.push(0), this._colorGradientsTexture || (i.push(0), i.push(0), i.push(0), i.push(0)), i.push(0), i.push(0), i.push(0), this.isBillboardBased || (i.push(0), i.push(0), i.push(0)), i.push(0), this._angularSpeedGradientsTexture || i.push(0), this._isAnimationSheetEnabled && (i.push(0), this.spriteRandomStartCell && i.push(0)), this.noiseTexture && (i.push(Math.random()), i.push(Math.random()), i.push(Math.random()), i.push(Math.random()), i.push(Math.random()), i.push(Math.random()));
|
|
var r = new Float32Array([.5, .5, 1, 1, -.5, .5, 0, 1, -.5, -.5, 0, 0, .5, -.5, 1, 0]);
|
|
this._buffer0 = new Oi.a(t, i, !1, this._attributesStrideSize), this._buffer1 = new Oi.a(t, i, !1, this._attributesStrideSize), this._spriteBuffer = new Oi.a(t, r, !1, 4), this._updateVAO = [], this._updateVAO.push(this._createUpdateVAO(this._buffer0)), this._updateVAO.push(this._createUpdateVAO(this._buffer1)), this._renderVAO = [], this._renderVAO.push(this._createRenderVAO(this._buffer1, this._spriteBuffer)), this._renderVAO.push(this._createRenderVAO(this._buffer0, this._spriteBuffer)), this._sourceBuffer = this._buffer0, this._targetBuffer = this._buffer1
|
|
}
|
|
}, t.prototype._recreateUpdateEffect = function() {
|
|
var e = this.particleEmitterType ? this.particleEmitterType.getEffectDefines() : "";
|
|
this._isBillboardBased && (e += "\n#define BILLBOARD"), this._colorGradientsTexture && (e += "\n#define COLORGRADIENTS"), this._sizeGradientsTexture && (e += "\n#define SIZEGRADIENTS"), this._angularSpeedGradientsTexture && (e += "\n#define ANGULARSPEEDGRADIENTS"), this._velocityGradientsTexture && (e += "\n#define VELOCITYGRADIENTS"), this._limitVelocityGradientsTexture && (e += "\n#define LIMITVELOCITYGRADIENTS"), this._dragGradientsTexture && (e += "\n#define DRAGGRADIENTS"), this.isAnimationSheetEnabled && (e += "\n#define ANIMATESHEET", this.spriteRandomStartCell && (e += "\n#define ANIMATESHEETRANDOMSTART")), this.noiseTexture && (e += "\n#define NOISE"), this._updateEffect && this._updateEffectOptions.defines === e || (this._updateEffectOptions.transformFeedbackVaryings = ["outPosition", "outAge", "outLife", "outSeed", "outSize"], this._colorGradientsTexture || this._updateEffectOptions.transformFeedbackVaryings.push("outColor"), this._updateEffectOptions.transformFeedbackVaryings.push("outDirection"), this._isBillboardBased || this._updateEffectOptions.transformFeedbackVaryings.push("outInitialDirection"), this._updateEffectOptions.transformFeedbackVaryings.push("outAngle"), this.isAnimationSheetEnabled && (this._updateEffectOptions.transformFeedbackVaryings.push("outCellIndex"), this.spriteRandomStartCell && this._updateEffectOptions.transformFeedbackVaryings.push("outCellStartOffset")), this.noiseTexture && (this._updateEffectOptions.transformFeedbackVaryings.push("outNoiseCoordinates1"), this._updateEffectOptions.transformFeedbackVaryings.push("outNoiseCoordinates2")), this._updateEffectOptions.defines = e, this._updateEffect = new zt.a("gpuUpdateParticles", this._updateEffectOptions, this._scene.getEngine()))
|
|
}, t.prototype._recreateRenderEffect = function() {
|
|
var e = "";
|
|
if (this._scene.clipPlane && (e = "\n#define CLIPPLANE"), this._scene.clipPlane2 && (e = "\n#define CLIPPLANE2"), this._scene.clipPlane3 && (e = "\n#define CLIPPLANE3"), this._scene.clipPlane4 && (e = "\n#define CLIPPLANE4"), this.blendMode === Ra.BLENDMODE_MULTIPLY && (e = "\n#define BLENDMULTIPLYMODE"), this._isBillboardBased) switch (e += "\n#define BILLBOARD", this.billboardMode) {
|
|
case Ra.BILLBOARDMODE_Y:
|
|
e += "\n#define BILLBOARDY";
|
|
break;
|
|
case Ra.BILLBOARDMODE_STRETCHED:
|
|
e += "\n#define BILLBOARDSTRETCHED";
|
|
break;
|
|
case Ra.BILLBOARDMODE_ALL:
|
|
}
|
|
if (this._colorGradientsTexture && (e += "\n#define COLORGRADIENTS"), this.isAnimationSheetEnabled && (e += "\n#define ANIMATESHEET"), this._imageProcessingConfiguration && (this._imageProcessingConfiguration.prepareDefines(this._imageProcessingConfigurationDefines), e += "\n" + this._imageProcessingConfigurationDefines.toString()), !this._renderEffect || this._renderEffect.defines !== e) {
|
|
var t = ["worldOffset", "view", "projection", "colorDead", "invView", "vClipPlane", "vClipPlane2", "vClipPlane3", "vClipPlane4", "sheetInfos", "translationPivot", "eyePosition"],
|
|
i = ["textureSampler", "colorGradientSampler"];
|
|
xi.a && (xi.a.PrepareUniforms(t, this._imageProcessingConfigurationDefines), xi.a.PrepareSamplers(i, this._imageProcessingConfigurationDefines)), this._renderEffect = new zt.a("gpuRenderParticles", ["position", "age", "life", "size", "color", "offset", "uv", "direction", "initialDirection", "angle", "cellIndex"], t, i, this._scene.getEngine(), e)
|
|
}
|
|
}, t.prototype.animate = function(e) {
|
|
void 0 === e && (e = !1), this._timeDelta = this.updateSpeed * (e ? this.preWarmStepOffset : this._scene.getAnimationRatio()), this._actualFrame += this._timeDelta, this._stopped || this.targetStopDuration && this._actualFrame >= this.targetStopDuration && this.stop()
|
|
}, t.prototype._createFactorGradientTexture = function(e, t) {
|
|
var i = this[t];
|
|
if (e && e.length && !i) {
|
|
for (var n = new Float32Array(this._rawTextureWidth), r = 0; r < this._rawTextureWidth; r++) {
|
|
var o = r / this._rawTextureWidth;
|
|
ye.h.GetCurrentGradient(o, e, function(e, t, i) {
|
|
n[r] = D.a.Lerp(e.factor1, t.factor1, i)
|
|
})
|
|
}
|
|
this[t] = je.CreateRTexture(n, this._rawTextureWidth, 1, this._scene, !1, !1, ke.a.NEAREST_SAMPLINGMODE)
|
|
}
|
|
}, t.prototype._createSizeGradientTexture = function() {
|
|
this._createFactorGradientTexture(this._sizeGradients, "_sizeGradientsTexture")
|
|
}, t.prototype._createAngularSpeedGradientTexture = function() {
|
|
this._createFactorGradientTexture(this._angularSpeedGradients, "_angularSpeedGradientsTexture")
|
|
}, t.prototype._createVelocityGradientTexture = function() {
|
|
this._createFactorGradientTexture(this._velocityGradients, "_velocityGradientsTexture")
|
|
}, t.prototype._createLimitVelocityGradientTexture = function() {
|
|
this._createFactorGradientTexture(this._limitVelocityGradients, "_limitVelocityGradientsTexture")
|
|
}, t.prototype._createDragGradientTexture = function() {
|
|
this._createFactorGradientTexture(this._dragGradients, "_dragGradientsTexture")
|
|
}, t.prototype._createColorGradientTexture = function() {
|
|
if (this._colorGradients && this._colorGradients.length && !this._colorGradientsTexture) {
|
|
for (var e = new Uint8Array(4 * this._rawTextureWidth), t = o.t.Color4[0], i = 0; i < this._rawTextureWidth; i++) {
|
|
var n = i / this._rawTextureWidth;
|
|
ye.h.GetCurrentGradient(n, this._colorGradients, function(n, r, s) {
|
|
o.f.LerpToRef(n.color1, r.color1, s, t), e[4 * i] = 255 * t.r, e[4 * i + 1] = 255 * t.g, e[4 * i + 2] = 255 * t.b, e[4 * i + 3] = 255 * t.a
|
|
})
|
|
}
|
|
this._colorGradientsTexture = je.CreateRGBATexture(e, this._rawTextureWidth, 1, this._scene, !1, !1, ke.a.NEAREST_SAMPLINGMODE)
|
|
}
|
|
}, t.prototype.render = function(e) {
|
|
if (void 0 === e && (e = !1), !this._started) return 0;
|
|
if (this._createColorGradientTexture(), this._createSizeGradientTexture(), this._createAngularSpeedGradientTexture(), this._createVelocityGradientTexture(), this._createLimitVelocityGradientTexture(), this._createDragGradientTexture(), this._recreateUpdateEffect(), this._recreateRenderEffect(), !this.isReady()) return 0;
|
|
if (!e) {
|
|
if (!this._preWarmDone && this.preWarmCycles) {
|
|
for (var t = 0; t < this.preWarmCycles; t++) this.animate(!0), this.render(!0);
|
|
this._preWarmDone = !0
|
|
}
|
|
if (this._currentRenderId === this._scene.getFrameId()) return 0;
|
|
this._currentRenderId = this._scene.getFrameId()
|
|
}
|
|
if (this._initialize(), this._accumulatedCount += this.emitRate * this._timeDelta, this._accumulatedCount > 1) {
|
|
var i = 0 | this._accumulatedCount;
|
|
this._accumulatedCount -= i, this._currentActiveCount = Math.min(this._activeCount, this._currentActiveCount + i)
|
|
}
|
|
if (!this._currentActiveCount) return 0;
|
|
var n;
|
|
if (this._engine.enableEffect(this._updateEffect), this._engine.setState(!1), this._updateEffect.setFloat("currentCount", this._currentActiveCount), this._updateEffect.setFloat("timeDelta", this._timeDelta), this._updateEffect.setFloat("stopFactor", this._stopped ? 0 : 1), this._updateEffect.setTexture("randomSampler", this._randomTexture), this._updateEffect.setTexture("randomSampler2", this._randomTexture2), this._updateEffect.setFloat2("lifeTime", this.minLifeTime, this.maxLifeTime), this._updateEffect.setFloat2("emitPower", this.minEmitPower, this.maxEmitPower), this._colorGradientsTexture || (this._updateEffect.setDirectColor4("color1", this.color1), this._updateEffect.setDirectColor4("color2", this.color2)), this._updateEffect.setFloat2("sizeRange", this.minSize, this.maxSize), this._updateEffect.setFloat4("scaleRange", this.minScaleX, this.maxScaleX, this.minScaleY, this.maxScaleY), this._updateEffect.setFloat4("angleRange", this.minAngularSpeed, this.maxAngularSpeed, this.minInitialRotation, this.maxInitialRotation), this._updateEffect.setVector3("gravity", this.gravity), this._sizeGradientsTexture && this._updateEffect.setTexture("sizeGradientSampler", this._sizeGradientsTexture), this._angularSpeedGradientsTexture && this._updateEffect.setTexture("angularSpeedGradientSampler", this._angularSpeedGradientsTexture), this._velocityGradientsTexture && this._updateEffect.setTexture("velocityGradientSampler", this._velocityGradientsTexture), this._limitVelocityGradientsTexture && (this._updateEffect.setTexture("limitVelocityGradientSampler", this._limitVelocityGradientsTexture), this._updateEffect.setFloat("limitVelocityDamping", this.limitVelocityDamping)), this._dragGradientsTexture && this._updateEffect.setTexture("dragGradientSampler", this._dragGradientsTexture), this.particleEmitterType && this.particleEmitterType.applyToShader(this._updateEffect), this._isAnimationSheetEnabled && this._updateEffect.setFloat3("cellInfos", this.startSpriteCellID, this.endSpriteCellID, this.spriteCellChangeSpeed), this.noiseTexture && (this._updateEffect.setTexture("noiseSampler", this.noiseTexture), this._updateEffect.setVector3("noiseStrength", this.noiseStrength)), this.emitter.position) {
|
|
n = this.emitter.getWorldMatrix()
|
|
} else {
|
|
var r = this.emitter;
|
|
n = o.j.Translation(r.x, r.y, r.z)
|
|
}
|
|
if (this._updateEffect.setMatrix("emitterWM", n), this._engine.bindVertexArrayObject(this._updateVAO[this._targetIndex], null), this._engine.bindTransformFeedbackBuffer(this._targetBuffer.getBuffer()), this._engine.setRasterizerState(!1), this._engine.beginTransformFeedback(!0), this._engine.drawArraysType(so.a.PointListDrawMode, 0, this._currentActiveCount), this._engine.endTransformFeedback(), this._engine.setRasterizerState(!0), this._engine.bindTransformFeedbackBuffer(null), !e) {
|
|
this._engine.enableEffect(this._renderEffect);
|
|
var s = this._scene.getViewMatrix();
|
|
if (this._renderEffect.setMatrix("view", s), this._renderEffect.setMatrix("projection", this._scene.getProjectionMatrix()), this._renderEffect.setTexture("textureSampler", this.particleTexture), this._renderEffect.setVector2("translationPivot", this.translationPivot), this._renderEffect.setVector3("worldOffset", this.worldOffset), this._colorGradientsTexture ? this._renderEffect.setTexture("colorGradientSampler", this._colorGradientsTexture) : this._renderEffect.setDirectColor4("colorDead", this.colorDead), this._isAnimationSheetEnabled && this.particleTexture) {
|
|
var a = this.particleTexture.getBaseSize();
|
|
this._renderEffect.setFloat3("sheetInfos", this.spriteCellWidth / a.width, this.spriteCellHeight / a.height, a.width / this.spriteCellWidth)
|
|
}
|
|
if (this._isBillboardBased) {
|
|
var c = this._scene.activeCamera;
|
|
this._renderEffect.setVector3("eyePosition", c.globalPosition)
|
|
}
|
|
if (this._scene.clipPlane || this._scene.clipPlane2 || this._scene.clipPlane3 || this._scene.clipPlane4) {
|
|
var l = s.clone();
|
|
l.invert(), this._renderEffect.setMatrix("invView", l), ir.a.BindClipPlane(this._renderEffect, this._scene)
|
|
}
|
|
switch (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess && this._imageProcessingConfiguration.bind(this._renderEffect), this.blendMode) {
|
|
case Ra.BLENDMODE_ADD:
|
|
this._engine.setAlphaMode(_.a.ALPHA_ADD);
|
|
break;
|
|
case Ra.BLENDMODE_ONEONE:
|
|
this._engine.setAlphaMode(_.a.ALPHA_ONEONE);
|
|
break;
|
|
case Ra.BLENDMODE_STANDARD:
|
|
this._engine.setAlphaMode(_.a.ALPHA_COMBINE);
|
|
break;
|
|
case Ra.BLENDMODE_MULTIPLY:
|
|
this._engine.setAlphaMode(_.a.ALPHA_MULTIPLY)
|
|
}
|
|
this.forceDepthWrite && this._engine.setDepthWrite(!0), this._engine.bindVertexArrayObject(this._renderVAO[this._targetIndex], null), this._engine.drawArraysType(so.a.TriangleFanDrawMode, 0, 4, this._currentActiveCount), this._engine.setAlphaMode(_.a.ALPHA_DISABLE)
|
|
}
|
|
this._targetIndex++, 2 === this._targetIndex && (this._targetIndex = 0);
|
|
var u = this._sourceBuffer;
|
|
return this._sourceBuffer = this._targetBuffer, this._targetBuffer = u, this._currentActiveCount
|
|
}, t.prototype.rebuild = function() {
|
|
this._initialize(!0)
|
|
}, t.prototype._releaseBuffers = function() {
|
|
this._buffer0 && (this._buffer0.dispose(), this._buffer0 = null), this._buffer1 && (this._buffer1.dispose(), this._buffer1 = null), this._spriteBuffer && (this._spriteBuffer.dispose(), this._spriteBuffer = null)
|
|
}, t.prototype._releaseVAOs = function() {
|
|
if (this._updateVAO) {
|
|
for (var e = 0; e < this._updateVAO.length; e++) this._engine.releaseVertexArrayObject(this._updateVAO[e]);
|
|
this._updateVAO = [];
|
|
for (e = 0; e < this._renderVAO.length; e++) this._engine.releaseVertexArrayObject(this._renderVAO[e]);
|
|
this._renderVAO = []
|
|
}
|
|
}, t.prototype.dispose = function(e) {
|
|
void 0 === e && (e = !0);
|
|
var t = this._scene.particleSystems.indexOf(this);
|
|
t > -1 && this._scene.particleSystems.splice(t, 1), this._releaseBuffers(), this._releaseVAOs(), this._colorGradientsTexture && (this._colorGradientsTexture.dispose(), this._colorGradientsTexture = null), this._sizeGradientsTexture && (this._sizeGradientsTexture.dispose(), this._sizeGradientsTexture = null), this._angularSpeedGradientsTexture && (this._angularSpeedGradientsTexture.dispose(), this._angularSpeedGradientsTexture = null), this._velocityGradientsTexture && (this._velocityGradientsTexture.dispose(), this._velocityGradientsTexture = null), this._limitVelocityGradientsTexture && (this._limitVelocityGradientsTexture.dispose(), this._limitVelocityGradientsTexture = null), this._dragGradientsTexture && (this._dragGradientsTexture.dispose(), this._dragGradientsTexture = null), this._randomTexture && (this._randomTexture.dispose(), this._randomTexture = null), this._randomTexture2 && (this._randomTexture2.dispose(), this._randomTexture2 = null), e && this.particleTexture && (this.particleTexture.dispose(), this.particleTexture = null), e && this.noiseTexture && (this.noiseTexture.dispose(), this.noiseTexture = null), this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear()
|
|
}, t.prototype.clone = function(e, i) {
|
|
var n = new t(e, {
|
|
capacity: this._capacity,
|
|
randomTextureSize: this._randomTextureSize
|
|
}, this._scene);
|
|
return S.a.DeepCopy(this, n), void 0 === i && (i = this.emitter), n.emitter = i, this.particleTexture && (n.particleTexture = new ke.a(this.particleTexture.url, this._scene)), n
|
|
}, t.prototype.serialize = function() {
|
|
var e = {};
|
|
return Ra._Serialize(e, this), e.activeParticleCount = this.activeParticleCount, e
|
|
}, t.Parse = function(e, i, n, r) {
|
|
void 0 === r && (r = !1);
|
|
var o = new t(e.name, {
|
|
capacity: e.capacity,
|
|
randomTextureSize: e.randomTextureSize
|
|
}, i);
|
|
return e.activeParticleCount && (o.activeParticleCount = e.activeParticleCount), Ra._Parse(e, o, i, n), e.preventAutoStart && (o.preventAutoStart = e.preventAutoStart), r || o.preventAutoStart || o.start(), o
|
|
}, t
|
|
}(ba),
|
|
Da = (function() {}(), function() {
|
|
function e() {
|
|
this.systems = new Array
|
|
}
|
|
return Object.defineProperty(e.prototype, "emitterNode", {
|
|
get: function() {
|
|
return this._emitterNode
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.setEmitterAsSphere = function(e, t, i) {
|
|
this._emitterNode && this._emitterNode.dispose(), this._emitterCreationOptions = {
|
|
kind: "Sphere",
|
|
options: e,
|
|
renderingGroupId: t
|
|
};
|
|
var n = Ln.a.CreateSphere("emitterSphere", {
|
|
diameter: e.diameter,
|
|
segments: e.segments
|
|
}, i);
|
|
n.renderingGroupId = t;
|
|
var r = new Ri.a("emitterSphereMaterial", i);
|
|
r.emissiveColor = e.color, n.material = r;
|
|
for (var o = 0, s = this.systems; o < s.length; o++) {
|
|
s[o].emitter = n
|
|
}
|
|
this._emitterNode = n
|
|
}, e.prototype.start = function(e) {
|
|
for (var t = 0, i = this.systems; t < i.length; t++) {
|
|
var n = i[t];
|
|
e && (n.emitter = e), n.start()
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
for (var e = 0, t = this.systems; e < t.length; e++) {
|
|
t[e].dispose()
|
|
}
|
|
this.systems = [], this._emitterNode && (this._emitterNode.dispose(), this._emitterNode = null)
|
|
}, e.prototype.serialize = function() {
|
|
for (var e = {
|
|
systems: []
|
|
}, t = 0, i = this.systems; t < i.length; t++) {
|
|
var n = i[t];
|
|
e.systems.push(n.serialize())
|
|
}
|
|
return this._emitterNode && (e.emitter = this._emitterCreationOptions), e
|
|
}, e.Parse = function(t, i, n) {
|
|
void 0 === n && (n = !1);
|
|
var r = new e,
|
|
s = _.a.PARTICLES_BaseAssetsUrl + "/textures/";
|
|
i = i || P.a.LastCreatedScene;
|
|
for (var a = 0, c = t.systems; a < c.length; a++) {
|
|
var l = c[a];
|
|
r.systems.push(n ? Ia.Parse(l, i, s, !0) : Ra.Parse(l, i, s, !0))
|
|
}
|
|
if (t.emitter) {
|
|
var u = t.emitter.options;
|
|
switch (t.emitter.kind) {
|
|
case "Sphere":
|
|
r.setEmitterAsSphere({
|
|
diameter: u.diameter,
|
|
segments: u.segments,
|
|
color: o.e.FromArray(u.color)
|
|
}, t.emitter.renderingGroupId, i)
|
|
}
|
|
}
|
|
return r
|
|
}, e
|
|
}()),
|
|
La = function() {
|
|
function e() {}
|
|
return e.CreateDefault = function(e, t, i, n) {
|
|
var r;
|
|
return void 0 === t && (t = 500), void 0 === n && (n = !1), (r = n ? new Ia("default system", {
|
|
capacity: t
|
|
}, i) : new Ra("default system", t, i)).emitter = e, r.particleTexture = new ke.a("https://www.babylonjs.com/assets/Flare.png", r.getScene()), r.createConeEmitter(.1, Math.PI / 4), r.color1 = new o.f(1, 1, 1, 1), r.color2 = new o.f(1, 1, 1, 1), r.colorDead = new o.f(1, 1, 1, 0), r.minSize = .1, r.maxSize = .1, r.minEmitPower = 2, r.maxEmitPower = 2, r.updateSpeed = 1 / 60, r.emitRate = 30, r
|
|
}, e.CreateAsync = function(t, i, n) {
|
|
void 0 === n && (n = !1), i || (i = P.a.LastCreatedScene);
|
|
var r = {};
|
|
return i._addPendingData(r), new Promise(function(o, s) {
|
|
if (n && !Ia.IsSupported) return i._removePendingData(r), s("Particle system with GPU is not supported.");
|
|
ye.h.LoadFile(e.BaseAssetsUrl + "/systems/" + t + ".json", function(e) {
|
|
i._removePendingData(r);
|
|
var t = JSON.parse(e.toString());
|
|
return o(Da.Parse(t, i, n))
|
|
}, void 0, void 0, void 0, function() {
|
|
return i._removePendingData(r), s("An error occured while the creation of your particle system. Check if your type '" + t + "' exists.")
|
|
})
|
|
})
|
|
}, e.ExportSet = function(e) {
|
|
for (var t = new Da, i = 0, n = e; i < n.length; i++) {
|
|
var r = n[i];
|
|
t.systems.push(r)
|
|
}
|
|
return t
|
|
}, e.BaseAssetsUrl = _.a.PARTICLES_BaseAssetsUrl, e
|
|
}();
|
|
n.a.AddParser(Ae.a.NAME_PARTICLESYSTEM, function(e, t, i, r) {
|
|
var o = n.a.GetIndividualParser(Ae.a.NAME_PARTICLESYSTEM);
|
|
if (o && void 0 !== e.particleSystems && null !== e.particleSystems)
|
|
for (var s = 0, a = e.particleSystems.length; s < a; s++) {
|
|
var c = e.particleSystems[s];
|
|
i.particleSystems.push(o(c, t, r))
|
|
}
|
|
}), n.a.AddIndividualParser(Ae.a.NAME_PARTICLESYSTEM, function(e, t, i) {
|
|
return e.activeParticleCount ? Ia.Parse(e, t, i) : Ra.Parse(e, t, i)
|
|
}), ge.b.prototype.createEffectForParticles = function(e, t, i, n, r, o, s) {
|
|
void 0 === t && (t = []), void 0 === i && (i = []), void 0 === n && (n = "");
|
|
var a = Ra._GetAttributeNamesOrOptions(),
|
|
c = Ra._GetEffectCreationOptions();
|
|
return -1 === n.indexOf(" BILLBOARD") && (n += "\n#define BILLBOARD\n"), -1 === i.indexOf("diffuseSampler") && i.push("diffuseSampler"), this.createEffect({
|
|
vertex: "particles",
|
|
fragmentElement: e
|
|
}, a, c.concat(t), i, n, r, o, s)
|
|
}, fe.a.prototype.getEmittedParticleSystems = function() {
|
|
for (var e = new Array, t = 0; t < this.getScene().particleSystems.length; t++) {
|
|
var i = this.getScene().particleSystems[t];
|
|
i.emitter === this && e.push(i)
|
|
}
|
|
return e
|
|
}, fe.a.prototype.getHierarchyEmittedParticleSystems = function() {
|
|
var e = new Array,
|
|
t = this.getDescendants();
|
|
t.push(this);
|
|
for (var i = 0; i < this.getScene().particleSystems.length; i++) {
|
|
var n = this.getScene().particleSystems[i],
|
|
r = n.emitter;
|
|
r.position && -1 !== t.indexOf(r) && e.push(n)
|
|
}
|
|
return e
|
|
};
|
|
var wa = function() {
|
|
function e(e, t, i, n, r, s, a, c) {
|
|
void 0 === c && (c = null), this.idx = 0, this.color = new o.f(1, 1, 1, 1), this.position = o.x.Zero(), this.rotation = o.x.Zero(), this.scaling = o.x.One(), this.uvs = new o.y(0, 0, 1, 1), this.velocity = o.x.Zero(), this.pivot = o.x.Zero(), this.translateFromPivot = !1, this.alive = !0, this.isVisible = !0, this._pos = 0, this._ind = 0, this.shapeId = 0, this.idxInShape = 0, this._stillInvisible = !1, this._rotationMatrix = [1, 0, 0, 0, 1, 0, 0, 0, 1], this.parentId = null, this.cullingStrategy = Fe.a.CULLINGSTRATEGY_BOUNDINGSPHERE_ONLY, this._globalPosition = o.x.Zero(), this.idx = e, this._pos = t, this._ind = i, this._model = n, this.shapeId = r, this.idxInShape = s, this._sps = a, c && (this._modelBoundingInfo = c, this._boundingInfo = new on.a(c.minimum, c.maximum))
|
|
}
|
|
return Object.defineProperty(e.prototype, "scale", {
|
|
get: function() {
|
|
return this.scaling
|
|
},
|
|
set: function(e) {
|
|
this.scaling = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "quaternion", {
|
|
get: function() {
|
|
return this.rotationQuaternion
|
|
},
|
|
set: function(e) {
|
|
this.rotationQuaternion = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.intersectsMesh = function(e) {
|
|
return !(!this._boundingInfo || !e._boundingInfo) && (this._sps._bSphereOnly ? sn.a.Intersects(this._boundingInfo.boundingSphere, e._boundingInfo.boundingSphere) : this._boundingInfo.intersects(e._boundingInfo, !1))
|
|
}, e.prototype.isInFrustum = function(e) {
|
|
return null !== this._boundingInfo && this._boundingInfo.isInFrustum(e, this.cullingStrategy)
|
|
}, e.prototype.getRotationMatrix = function(e) {
|
|
var t;
|
|
if (this.rotationQuaternion) t = this.rotationQuaternion;
|
|
else {
|
|
t = o.t.Quaternion[0];
|
|
var i = this.rotation;
|
|
o.q.RotationYawPitchRollToRef(i.y, i.x, i.z, t)
|
|
}
|
|
t.toRotationMatrix(e)
|
|
}, e
|
|
}(),
|
|
Fa = function() {
|
|
return function(e, t, i, n, r, o) {
|
|
this._indicesLength = 0, this.shapeID = e, this._shape = t, this._indicesLength = i, this._shapeUV = n, this._positionFunction = r, this._vertexFunction = o
|
|
}
|
|
}(),
|
|
Na = function() {
|
|
return function() {
|
|
this.ind = 0, this.indicesLength = 0, this.sqDistance = 0
|
|
}
|
|
}(),
|
|
Ba = function(e, t) {
|
|
return t.sqDistance - e.sqDistance
|
|
},
|
|
Ua = function() {
|
|
function e(e, t, i) {
|
|
this.particles = new Array, this.nbParticles = 0, this.billboard = !1, this.recomputeNormals = !0, this.counter = 0, this.vars = {}, this._bSphereOnly = !1, this._bSphereRadiusFactor = 1, this._positions = new Array, this._indices = new Array, this._normals = new Array, this._colors = new Array, this._uvs = new Array, this._index = 0, this._updatable = !0, this._pickable = !1, this._isVisibilityBoxLocked = !1, this._alwaysVisible = !1, this._depthSort = !1, this._shapeCounter = 0, this._copy = new wa(0, 0, 0, null, 0, 0, this), this._color = new o.f(0, 0, 0, 0), this._computeParticleColor = !0, this._computeParticleTexture = !0, this._computeParticleRotation = !0, this._computeParticleVertex = !1, this._computeBoundingBox = !1, this._depthSortParticles = !0, this._mustUnrotateFixedNormals = !1, this._particlesIntersect = !1, this._needs32Bits = !1, this.name = e, this._scene = t || P.a.LastCreatedScene, this._camera = t.activeCamera, this._pickable = !!i && i.isPickable, this._depthSort = !!i && i.enableDepthSort, this._particlesIntersect = !!i && i.particleIntersection, this._bSphereOnly = !!i && i.boundingSphereOnly, this._bSphereRadiusFactor = i && i.bSphereRadiusFactor ? i.bSphereRadiusFactor : 1, i && void 0 !== i.updatable ? this._updatable = i.updatable : this._updatable = !0, this._pickable && (this.pickedParticles = []), this._depthSort && (this.depthSortedParticles = [])
|
|
}
|
|
return e.prototype.buildMesh = function() {
|
|
if (0 === this.nbParticles) {
|
|
var e = Gs.CreateDisc("", {
|
|
radius: 1,
|
|
tessellation: 3
|
|
}, this._scene);
|
|
this.addShape(e, 1), e.dispose()
|
|
}
|
|
this._indices32 = this._needs32Bits ? new Uint32Array(this._indices) : new Uint16Array(this._indices), this._positions32 = new Float32Array(this._positions), this._uvs32 = new Float32Array(this._uvs), this._colors32 = new Float32Array(this._colors), this.recomputeNormals && Mi.a.ComputeNormals(this._positions32, this._indices32, this._normals), this._normals32 = new Float32Array(this._normals), this._fixedNormal32 = new Float32Array(this._normals), this._mustUnrotateFixedNormals && this._unrotateFixedNormals();
|
|
var t = new Mi.a;
|
|
t.indices = this._depthSort ? this._indices : this._indices32, t.set(this._positions32, Oi.b.PositionKind), t.set(this._normals32, Oi.b.NormalKind), this._uvs32.length > 0 && t.set(this._uvs32, Oi.b.UVKind), this._colors32.length > 0 && t.set(this._colors32, Oi.b.ColorKind);
|
|
var i = new fe.a(this.name, this._scene);
|
|
return t.applyToMesh(i, this._updatable), this.mesh = i, this.mesh.isPickable = this._pickable, this._depthSort || (this._indices = null), this._positions = null, this._normals = null, this._uvs = null, this._colors = null, this._updatable || (this.particles.length = 0), i
|
|
}, e.prototype.digest = function(e, t) {
|
|
var i = t && t.facetNb || 1,
|
|
n = t && t.number || 0,
|
|
r = t && t.delta || 0,
|
|
s = e.getVerticesData(Oi.b.PositionKind),
|
|
a = e.getIndices(),
|
|
c = e.getVerticesData(Oi.b.UVKind),
|
|
l = e.getVerticesData(Oi.b.ColorKind),
|
|
u = e.getVerticesData(Oi.b.NormalKind),
|
|
h = 0,
|
|
d = a.length / 3;
|
|
n ? (n = n > d ? d : n, i = Math.round(d / n), r = 0) : i = i > d ? d : i;
|
|
for (var f = [], p = [], _ = [], g = [], m = o.x.Zero(), v = i; h < d;) {
|
|
h > d - (i = v + Math.floor((1 + r) * Math.random())) && (i = d - h), f.length = 0, p.length = 0, _.length = 0, g.length = 0;
|
|
for (var y = 0, b = 3 * h; b < 3 * (h + i); b++) {
|
|
p.push(y);
|
|
var T = a[b];
|
|
f.push(s[3 * T], s[3 * T + 1], s[3 * T + 2]), c && _.push(c[2 * T], c[2 * T + 1]), l && g.push(l[4 * T], l[4 * T + 1], l[4 * T + 2], l[4 * T + 3]), y++
|
|
}
|
|
var E, A, x = this.nbParticles,
|
|
R = this._posToShape(f),
|
|
P = this._uvsToShapeUV(_);
|
|
for (E = 0; E < R.length; E++) m.addInPlace(R[E]);
|
|
for (m.scaleInPlace(1 / R.length), E = 0; E < R.length; E++) R[E].subtractInPlace(m);
|
|
this._particlesIntersect && (A = new on.a(m, m));
|
|
var S = new Fa(this._shapeCounter, R, 3 * i, P, null, null),
|
|
C = this._positions.length,
|
|
M = this._indices.length;
|
|
this._meshBuilder(this._index, R, this._positions, p, this._indices, _, this._uvs, g, this._colors, u, this._normals, x, 0, null), this._addParticle(x, C, M, S, this._shapeCounter, 0, A), this.particles[this.nbParticles].position.addInPlace(m), this._index += R.length, x++, this.nbParticles++, this._shapeCounter++, h += i
|
|
}
|
|
return this
|
|
}, e.prototype._unrotateFixedNormals = function() {
|
|
for (var e = 0, t = 0, i = o.t.Vector3[0], n = o.t.Quaternion[0], r = o.t.Matrix[0], s = 0; s < this.particles.length; s++) {
|
|
var a = this.particles[s],
|
|
c = a._model._shape;
|
|
if (a.rotationQuaternion) a.rotationQuaternion.conjugateToRef(n);
|
|
else {
|
|
var l = a.rotation;
|
|
o.q.RotationYawPitchRollToRef(l.y, l.x, l.z, n), n.conjugateInPlace()
|
|
}
|
|
n.toRotationMatrix(r);
|
|
for (var u = 0; u < c.length; u++) t = e + 3 * u, o.x.TransformNormalFromFloatsToRef(this._normals32[t], this._normals32[t + 1], this._normals32[t + 2], r, i), i.toArray(this._fixedNormal32, t);
|
|
e = t + 3
|
|
}
|
|
}, e.prototype._resetCopy = function() {
|
|
var e = this._copy;
|
|
e.position.setAll(0), e.rotation.setAll(0), e.rotationQuaternion = null, e.scaling.setAll(1), e.uvs.copyFromFloats(0, 0, 1, 1), e.color = null, e.translateFromPivot = !1
|
|
}, e.prototype._meshBuilder = function(e, t, i, n, r, s, a, c, l, u, h, d, f, p) {
|
|
var _, g = 0,
|
|
m = 0,
|
|
v = 0;
|
|
this._resetCopy();
|
|
var y = this._copy;
|
|
p && p.positionFunction && (p.positionFunction(y, d, f), this._mustUnrotateFixedNormals = !0);
|
|
var b = o.t.Matrix[0],
|
|
T = o.t.Vector3[0],
|
|
E = o.t.Vector3[1],
|
|
A = o.t.Vector3[2],
|
|
x = o.t.Vector3[3];
|
|
for (y.getRotationMatrix(b), y.pivot.multiplyToRef(y.scaling, x), y.translateFromPivot ? A.setAll(0) : A.copyFrom(x), _ = 0; _ < t.length; _++) {
|
|
if (T.copyFrom(t[_]), p && p.vertexFunction && p.vertexFunction(y, T, _), T.multiplyInPlace(y.scaling).subtractInPlace(x), o.x.TransformCoordinatesToRef(T, b, E), E.addInPlace(A).addInPlace(y.position), i.push(E.x, E.y, E.z), s) {
|
|
var R = y.uvs;
|
|
a.push((R.z - R.x) * s[g] + R.x, (R.w - R.y) * s[g + 1] + R.y), g += 2
|
|
}
|
|
if (y.color) this._color = y.color;
|
|
else {
|
|
var P = this._color;
|
|
c && void 0 !== c[m] ? (P.r = c[m], P.g = c[m + 1], P.b = c[m + 2], P.a = c[m + 3]) : (P.r = 1, P.g = 1, P.b = 1, P.a = 1)
|
|
}
|
|
l.push(this._color.r, this._color.g, this._color.b, this._color.a), m += 4, !this.recomputeNormals && u && (T.x = u[v], T.y = u[v + 1], T.z = u[v + 2], o.x.TransformNormalToRef(T, b, T), h.push(T.x, T.y, T.z), v += 3)
|
|
}
|
|
for (_ = 0; _ < n.length; _++) {
|
|
var S = e + n[_];
|
|
r.push(S), S > 65535 && (this._needs32Bits = !0)
|
|
}
|
|
if (this._pickable) {
|
|
var C = n.length / 3;
|
|
for (_ = 0; _ < C; _++) this.pickedParticles.push({
|
|
idx: d,
|
|
faceId: _
|
|
})
|
|
}
|
|
return this._depthSort && this.depthSortedParticles.push(new Na), y
|
|
}, e.prototype._posToShape = function(e) {
|
|
for (var t = [], i = 0; i < e.length; i += 3) t.push(o.x.FromArray(e, i));
|
|
return t
|
|
}, e.prototype._uvsToShapeUV = function(e) {
|
|
var t = [];
|
|
if (e)
|
|
for (var i = 0; i < e.length; i++) t.push(e[i]);
|
|
return t
|
|
}, e.prototype._addParticle = function(e, t, i, n, r, o, s) {
|
|
void 0 === s && (s = null);
|
|
var a = new wa(e, t, i, n, r, o, this, s);
|
|
return this.particles.push(a), a
|
|
}, e.prototype.addShape = function(e, t, i) {
|
|
var n, r = e.getVerticesData(Oi.b.PositionKind),
|
|
o = e.getIndices(),
|
|
s = e.getVerticesData(Oi.b.UVKind),
|
|
a = e.getVerticesData(Oi.b.ColorKind),
|
|
c = e.getVerticesData(Oi.b.NormalKind);
|
|
this._particlesIntersect && (n = e.getBoundingInfo());
|
|
for (var l, u, h = this._posToShape(r), d = this._uvsToShapeUV(s), f = i ? i.positionFunction : null, p = i ? i.vertexFunction : null, _ = new Fa(this._shapeCounter, h, o.length, d, f, p), g = this.nbParticles, m = 0; m < t; m++) {
|
|
var v = this._positions.length,
|
|
y = this._indices.length;
|
|
u = this._meshBuilder(this._index, h, this._positions, o, this._indices, s, this._uvs, a, this._colors, c, this._normals, g, m, i), this._updatable && ((l = this._addParticle(g, v, y, _, this._shapeCounter, m, n)).position.copyFrom(u.position), l.rotation.copyFrom(u.rotation), u.rotationQuaternion && l.rotationQuaternion && l.rotationQuaternion.copyFrom(u.rotationQuaternion), u.color && l.color && l.color.copyFrom(u.color), l.scaling.copyFrom(u.scaling), l.uvs.copyFrom(u.uvs)), this._index += h.length, g++
|
|
}
|
|
return this.nbParticles += t, this._shapeCounter++, this._shapeCounter - 1
|
|
}, e.prototype._rebuildParticle = function(e) {
|
|
this._resetCopy();
|
|
var t = this._copy;
|
|
e._model._positionFunction && e._model._positionFunction(t, e.idx, e.idxInShape);
|
|
var i = o.t.Matrix[0],
|
|
n = o.t.Vector3[0],
|
|
r = o.t.Vector3[1],
|
|
s = o.t.Vector3[2],
|
|
a = o.t.Vector3[3];
|
|
t.getRotationMatrix(i), e.pivot.multiplyToRef(e.scaling, a), t.translateFromPivot ? s.copyFromFloats(0, 0, 0) : s.copyFrom(a);
|
|
for (var c = e._model._shape, l = 0; l < c.length; l++) n.copyFrom(c[l]), e._model._vertexFunction && e._model._vertexFunction(t, n, l), n.multiplyInPlace(t.scaling).subtractInPlace(a), o.x.TransformCoordinatesToRef(n, i, r), r.addInPlace(s).addInPlace(t.position).toArray(this._positions32, e._pos + 3 * l);
|
|
e.position.setAll(0), e.rotation.setAll(0), e.rotationQuaternion = null, e.scaling.setAll(1), e.uvs.setAll(0), e.pivot.setAll(0), e.translateFromPivot = !1, e.parentId = null
|
|
}, e.prototype.rebuildMesh = function() {
|
|
for (var e = 0; e < this.particles.length; e++) this._rebuildParticle(this.particles[e]);
|
|
return this.mesh.updateVerticesData(Oi.b.PositionKind, this._positions32, !1, !1), this
|
|
}, e.prototype.setParticles = function(e, t, i) {
|
|
if (void 0 === e && (e = 0), void 0 === t && (t = this.nbParticles - 1), void 0 === i && (i = !0), !this._updatable) return this;
|
|
this.beforeUpdateParticles(e, t, i);
|
|
var n = o.t.Matrix[0],
|
|
r = o.t.Matrix[1],
|
|
s = this.mesh,
|
|
a = this._colors32,
|
|
c = this._positions32,
|
|
l = this._normals32,
|
|
u = this._uvs32,
|
|
h = this._indices32,
|
|
d = this._indices,
|
|
f = this._fixedNormal32,
|
|
p = o.t.Vector3,
|
|
_ = p[5].copyFromFloats(1, 0, 0),
|
|
g = p[6].copyFromFloats(0, 1, 0),
|
|
m = p[7].copyFromFloats(0, 0, 1),
|
|
v = p[8].setAll(Number.MAX_VALUE),
|
|
y = p[9].setAll(-Number.MAX_VALUE),
|
|
b = p[10].setAll(0);
|
|
if ((this.billboard || this._depthSort) && (this.mesh.computeWorldMatrix(!0), this.mesh._worldMatrix.invertToRef(r)), this.billboard) {
|
|
var T = p[0];
|
|
this._camera.getDirectionToRef(o.c.Z, T), o.x.TransformNormalToRef(T, r, m), m.normalize();
|
|
var E = this._camera.getViewMatrix(!0);
|
|
o.x.TransformNormalFromFloatsToRef(E.m[1], E.m[5], E.m[9], r, g), o.x.CrossToRef(g, m, _), g.normalize(), _.normalize()
|
|
}
|
|
this._depthSort && o.x.TransformCoordinatesToRef(this._camera.globalPosition, r, b), o.j.IdentityToRef(n);
|
|
var A = 0,
|
|
x = 0,
|
|
R = 0,
|
|
P = 0,
|
|
S = 0,
|
|
C = 0,
|
|
M = 0;
|
|
if (this.mesh.isFacetDataEnabled && (this._computeBoundingBox = !0), t = t >= this.nbParticles ? this.nbParticles - 1 : t, this._computeBoundingBox && (0 != e || t != this.nbParticles - 1)) {
|
|
var O = this.mesh._boundingInfo;
|
|
O && (v.copyFrom(O.minimum), y.copyFrom(O.maximum))
|
|
}
|
|
var I = (x = this.particles[e]._pos) / 3 | 0;
|
|
P = 4 * I, C = 2 * I;
|
|
for (var D = e; D <= t; D++) {
|
|
var L = this.particles[D];
|
|
this.updateParticle(L);
|
|
var w = L._model._shape,
|
|
F = L._model._shapeUV,
|
|
N = L._rotationMatrix,
|
|
B = L.position,
|
|
U = L.rotation,
|
|
V = L.scaling,
|
|
G = L._globalPosition;
|
|
if (this._depthSort && this._depthSortParticles) {
|
|
var k = this.depthSortedParticles[D];
|
|
k.ind = L._ind, k.indicesLength = L._model._indicesLength, k.sqDistance = o.x.DistanceSquared(L.position, b)
|
|
}
|
|
if (!L.alive || L._stillInvisible && !L.isVisible) x += 3 * (M = w.length), P += 4 * M, C += 2 * M;
|
|
else {
|
|
if (L.isVisible) {
|
|
L._stillInvisible = !1;
|
|
var z = p[12];
|
|
if (L.pivot.multiplyToRef(V, z), this.billboard && (U.x = 0, U.y = 0), (this._computeParticleRotation || this.billboard) && L.getRotationMatrix(n), null !== L.parentId) {
|
|
var j = this.particles[L.parentId],
|
|
H = j._rotationMatrix,
|
|
W = j._globalPosition,
|
|
X = B.x * H[1] + B.y * H[4] + B.z * H[7],
|
|
Y = B.x * H[0] + B.y * H[3] + B.z * H[6],
|
|
K = B.x * H[2] + B.y * H[5] + B.z * H[8];
|
|
if (G.x = W.x + Y, G.y = W.y + X, G.z = W.z + K, this._computeParticleRotation || this.billboard) {
|
|
var Q = n.m;
|
|
N[0] = Q[0] * H[0] + Q[1] * H[3] + Q[2] * H[6], N[1] = Q[0] * H[1] + Q[1] * H[4] + Q[2] * H[7], N[2] = Q[0] * H[2] + Q[1] * H[5] + Q[2] * H[8], N[3] = Q[4] * H[0] + Q[5] * H[3] + Q[6] * H[6], N[4] = Q[4] * H[1] + Q[5] * H[4] + Q[6] * H[7], N[5] = Q[4] * H[2] + Q[5] * H[5] + Q[6] * H[8], N[6] = Q[8] * H[0] + Q[9] * H[3] + Q[10] * H[6], N[7] = Q[8] * H[1] + Q[9] * H[4] + Q[10] * H[7], N[8] = Q[8] * H[2] + Q[9] * H[5] + Q[10] * H[8]
|
|
}
|
|
} else if (G.x = B.x, G.y = B.y, G.z = B.z, this._computeParticleRotation || this.billboard) {
|
|
Q = n.m;
|
|
N[0] = Q[0], N[1] = Q[1], N[2] = Q[2], N[3] = Q[4], N[4] = Q[5], N[5] = Q[6], N[6] = Q[8], N[7] = Q[9], N[8] = Q[10]
|
|
}
|
|
var q = p[11];
|
|
for (L.translateFromPivot ? q.setAll(0) : q.copyFrom(z), M = 0; M < w.length; M++) {
|
|
A = x + 3 * M, R = P + 4 * M, S = C + 2 * M, (T = p[0]).copyFrom(w[M]), this._computeParticleVertex && this.updateParticleVertex(L, T, M);
|
|
var Z = T.x * V.x - z.x,
|
|
J = T.y * V.y - z.y,
|
|
$ = T.z * V.z - z.z;
|
|
Y = Z * N[0] + J * N[3] + $ * N[6], X = Z * N[1] + J * N[4] + $ * N[7], K = Z * N[2] + J * N[5] + $ * N[8];
|
|
Y += q.x, X += q.y, K += q.z;
|
|
var ee = c[A] = G.x + _.x * Y + g.x * X + m.x * K,
|
|
te = c[A + 1] = G.y + _.y * Y + g.y * X + m.y * K,
|
|
ie = c[A + 2] = G.z + _.z * Y + g.z * X + m.z * K;
|
|
if (this._computeBoundingBox && (v.minimizeInPlaceFromFloats(ee, te, ie), y.maximizeInPlaceFromFloats(ee, te, ie)), !this._computeParticleVertex) {
|
|
var ne = f[A],
|
|
re = f[A + 1],
|
|
oe = f[A + 2],
|
|
se = ne * N[0] + re * N[3] + oe * N[6],
|
|
ae = ne * N[1] + re * N[4] + oe * N[7],
|
|
ce = ne * N[2] + re * N[5] + oe * N[8];
|
|
l[A] = _.x * se + g.x * ae + m.x * ce, l[A + 1] = _.y * se + g.y * ae + m.y * ce, l[A + 2] = _.z * se + g.z * ae + m.z * ce
|
|
}
|
|
if (this._computeParticleColor && L.color) {
|
|
var le = L.color,
|
|
ue = this._colors32;
|
|
ue[R] = le.r, ue[R + 1] = le.g, ue[R + 2] = le.b, ue[R + 3] = le.a
|
|
}
|
|
if (this._computeParticleTexture) {
|
|
var he = L.uvs;
|
|
u[S] = F[2 * M] * (he.z - he.x) + he.x, u[S + 1] = F[2 * M + 1] * (he.w - he.y) + he.y
|
|
}
|
|
}
|
|
} else
|
|
for (L._stillInvisible = !0, M = 0; M < w.length; M++) {
|
|
if (R = P + 4 * M, S = C + 2 * M, c[A = x + 3 * M] = c[A + 1] = c[A + 2] = 0, l[A] = l[A + 1] = l[A + 2] = 0, this._computeParticleColor && L.color) {
|
|
le = L.color;
|
|
a[R] = le.r, a[R + 1] = le.g, a[R + 2] = le.b, a[R + 3] = le.a
|
|
}
|
|
if (this._computeParticleTexture) {
|
|
he = L.uvs;
|
|
u[S] = F[2 * M] * (he.z - he.x) + he.x, u[S + 1] = F[2 * M + 1] * (he.w - he.y) + he.y
|
|
}
|
|
}
|
|
if (this._particlesIntersect) {
|
|
var de = L._boundingInfo,
|
|
fe = de.boundingBox,
|
|
pe = de.boundingSphere,
|
|
_e = L._modelBoundingInfo;
|
|
if (!this._bSphereOnly) {
|
|
var ge = _e.boundingBox.vectors,
|
|
me = p[1],
|
|
ve = p[2];
|
|
me.setAll(Number.MAX_VALUE), ve.setAll(-Number.MAX_VALUE);
|
|
for (var ye = 0; ye < 8; ye++) {
|
|
var be = ge[ye].x * V.x,
|
|
Te = ge[ye].y * V.y,
|
|
Ee = ge[ye].z * V.z,
|
|
Ae = (Y = be * N[0] + Te * N[3] + Ee * N[6], X = be * N[1] + Te * N[4] + Ee * N[7], K = be * N[2] + Te * N[5] + Ee * N[8], B.x + _.x * Y + g.x * X + m.x * K),
|
|
xe = B.y + _.y * Y + g.y * X + m.y * K,
|
|
Re = B.z + _.z * Y + g.z * X + m.z * K;
|
|
me.minimizeInPlaceFromFloats(Ae, xe, Re), ve.maximizeInPlaceFromFloats(Ae, xe, Re)
|
|
}
|
|
fe.reConstruct(me, ve, s._worldMatrix)
|
|
}
|
|
var Pe = _e.minimum.multiplyToRef(V, p[1]),
|
|
Se = _e.maximum.multiplyToRef(V, p[2]),
|
|
Ce = Se.addToRef(Pe, p[3]).scaleInPlace(.5).addInPlace(G),
|
|
Me = Se.subtractToRef(Pe, p[4]).scaleInPlace(.5 * this._bSphereRadiusFactor),
|
|
Oe = Ce.subtractToRef(Me, p[1]),
|
|
Ie = Ce.addToRef(Me, p[2]);
|
|
pe.reConstruct(Oe, Ie, s._worldMatrix)
|
|
}
|
|
x = A + 3, P = R + 4, C = S + 2
|
|
}
|
|
}
|
|
if (i) {
|
|
if (this._computeParticleColor && s.updateVerticesData(Oi.b.ColorKind, a, !1, !1), this._computeParticleTexture && s.updateVerticesData(Oi.b.UVKind, u, !1, !1), s.updateVerticesData(Oi.b.PositionKind, c, !1, !1), !s.areNormalsFrozen || s.isFacetDataEnabled) {
|
|
if (this._computeParticleVertex || s.isFacetDataEnabled) {
|
|
var De = s.isFacetDataEnabled ? s.getFacetDataParameters() : null;
|
|
Mi.a.ComputeNormals(c, h, l, De);
|
|
for (var Le = 0; Le < l.length; Le++) f[Le] = l[Le]
|
|
}
|
|
s.areNormalsFrozen || s.updateVerticesData(Oi.b.NormalKind, l, !1, !1)
|
|
}
|
|
if (this._depthSort && this._depthSortParticles) {
|
|
var we = this.depthSortedParticles;
|
|
we.sort(Ba);
|
|
for (var Fe = we.length, Ne = 0, Be = 0; Be < Fe; Be++) {
|
|
var Ue = we[Be].indicesLength,
|
|
Ve = we[Be].ind;
|
|
for (Le = 0; Le < Ue; Le++) h[Ne] = d[Ve + Le], Ne++
|
|
}
|
|
s.updateIndices(h)
|
|
}
|
|
}
|
|
return this._computeBoundingBox && (s._boundingInfo ? s._boundingInfo.reConstruct(v, y, s._worldMatrix) : s._boundingInfo = new on.a(v, y, s._worldMatrix)), this.afterUpdateParticles(e, t, i), this
|
|
}, e.prototype.dispose = function() {
|
|
this.mesh.dispose(), this.vars = null, this._positions = null, this._indices = null, this._normals = null, this._uvs = null, this._colors = null, this._indices32 = null, this._positions32 = null, this._normals32 = null, this._fixedNormal32 = null, this._uvs32 = null, this._colors32 = null, this.pickedParticles = null
|
|
}, e.prototype.refreshVisibleSize = function() {
|
|
return this._isVisibilityBoxLocked || this.mesh.refreshBoundingInfo(), this
|
|
}, e.prototype.setVisibilityBox = function(e) {
|
|
var t = e / 2;
|
|
this.mesh._boundingInfo = new on.a(new o.x(-t, -t, -t), new o.x(t, t, t))
|
|
}, Object.defineProperty(e.prototype, "isAlwaysVisible", {
|
|
get: function() {
|
|
return this._alwaysVisible
|
|
},
|
|
set: function(e) {
|
|
this._alwaysVisible = e, this.mesh.alwaysSelectAsActiveMesh = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isVisibilityBoxLocked", {
|
|
get: function() {
|
|
return this._isVisibilityBoxLocked
|
|
},
|
|
set: function(e) {
|
|
this._isVisibilityBoxLocked = e, this.mesh.getBoundingInfo().isLocked = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "computeParticleRotation", {
|
|
get: function() {
|
|
return this._computeParticleRotation
|
|
},
|
|
set: function(e) {
|
|
this._computeParticleRotation = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "computeParticleColor", {
|
|
get: function() {
|
|
return this._computeParticleColor
|
|
},
|
|
set: function(e) {
|
|
this._computeParticleColor = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "computeParticleTexture", {
|
|
get: function() {
|
|
return this._computeParticleTexture
|
|
},
|
|
set: function(e) {
|
|
this._computeParticleTexture = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "computeParticleVertex", {
|
|
get: function() {
|
|
return this._computeParticleVertex
|
|
},
|
|
set: function(e) {
|
|
this._computeParticleVertex = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "computeBoundingBox", {
|
|
get: function() {
|
|
return this._computeBoundingBox
|
|
},
|
|
set: function(e) {
|
|
this._computeBoundingBox = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "depthSortParticles", {
|
|
get: function() {
|
|
return this._depthSortParticles
|
|
},
|
|
set: function(e) {
|
|
this._depthSortParticles = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.initParticles = function() {}, e.prototype.recycleParticle = function(e) {
|
|
return e
|
|
}, e.prototype.updateParticle = function(e) {
|
|
return e
|
|
}, e.prototype.updateParticleVertex = function(e, t, i) {
|
|
return t
|
|
}, e.prototype.beforeUpdateParticles = function(e, t, i) {}, e.prototype.afterUpdateParticles = function(e, t, i) {}, e
|
|
}();
|
|
W.a.prototype.getPhysicsEngine = function() {
|
|
return this._physicsEngine
|
|
}, W.a.prototype.enablePhysics = function(e, t) {
|
|
if (void 0 === e && (e = null), this._physicsEngine) return !0;
|
|
var i = this._getComponent(Ae.a.NAME_PHYSICSENGINE);
|
|
i || (i = new ka(this), this._addComponent(i));
|
|
try {
|
|
return this._physicsEngine = new jo(e, t), !0
|
|
} catch (e) {
|
|
return p.a.Error(e.message), !1
|
|
}
|
|
}, W.a.prototype.disablePhysicsEngine = function() {
|
|
this._physicsEngine && (this._physicsEngine.dispose(), this._physicsEngine = null)
|
|
}, W.a.prototype.isPhysicsEnabled = function() {
|
|
return void 0 !== this._physicsEngine
|
|
}, W.a.prototype.deleteCompoundImpostor = function(e) {
|
|
var t = e.parts[0].mesh;
|
|
t.physicsImpostor && (t.physicsImpostor.dispose(), t.physicsImpostor = null)
|
|
}, W.a.prototype._advancePhysicsEngineStep = function(e) {
|
|
this._physicsEngine && (this.onBeforePhysicsObservable.notifyObservers(this), this._physicsEngine._step(e / 1e3), this.onAfterPhysicsObservable.notifyObservers(this))
|
|
}, Object.defineProperty(Fe.a.prototype, "physicsImpostor", {
|
|
get: function() {
|
|
return this._physicsImpostor
|
|
},
|
|
set: function(e) {
|
|
var t = this;
|
|
this._physicsImpostor !== e && (this._disposePhysicsObserver && this.onDisposeObservable.remove(this._disposePhysicsObserver), this._physicsImpostor = e, e && (this._disposePhysicsObserver = this.onDisposeObservable.add(function() {
|
|
t.physicsImpostor && (t.physicsImpostor.dispose(), t.physicsImpostor = null)
|
|
})))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Fe.a.prototype.getPhysicsImpostor = function() {
|
|
return this.physicsImpostor
|
|
}, Fe.a.prototype.applyImpulse = function(e, t) {
|
|
return this.physicsImpostor ? (this.physicsImpostor.applyImpulse(e, t), this) : this
|
|
}, Fe.a.prototype.setPhysicsLinkWith = function(e, t, i, n) {
|
|
return this.physicsImpostor && e.physicsImpostor ? (this.physicsImpostor.createJoint(e.physicsImpostor, zo.e.HingeJoint, {
|
|
mainPivot: t,
|
|
connectedPivot: i,
|
|
nativeParams: n
|
|
}), this) : this
|
|
};
|
|
var Va, Ga, ka = function() {
|
|
function e(e) {
|
|
var t = this;
|
|
this.name = Ae.a.NAME_PHYSICSENGINE, this.scene = e, this.scene.onBeforePhysicsObservable = new r.c, this.scene.onAfterPhysicsObservable = new r.c, this.scene.getDeterministicFrameTime = function() {
|
|
return t.scene._physicsEngine ? 1e3 * t.scene._physicsEngine.getTimeStep() : 1e3 / 60
|
|
}
|
|
}
|
|
return e.prototype.register = function() {}, e.prototype.rebuild = function() {}, e.prototype.dispose = function() {
|
|
this.scene.onBeforePhysicsObservable.clear(), this.scene.onAfterPhysicsObservable.clear(), this.scene._physicsEngine && this.scene.disablePhysicsEngine()
|
|
}, e
|
|
}(),
|
|
za = function() {
|
|
function e(e) {
|
|
this._scene = e, this._physicsEngine = this._scene.getPhysicsEngine(), this._physicsEngine || p.a.Warn("Physics engine not enabled. Please enable the physics before you can use the methods.")
|
|
}
|
|
return e.prototype.applyRadialExplosionImpulse = function(e, t, i, n) {
|
|
if (!this._physicsEngine) return p.a.Warn("Physics engine not enabled. Please enable the physics before you call this method."), null;
|
|
var r = this._physicsEngine.getImpostors();
|
|
if (0 === r.length) return null;
|
|
"number" == typeof t && ((t = new Ya).radius = t, t.strength = i || t.strength, t.falloff = n || t.falloff);
|
|
var o = new ja(this._scene, t),
|
|
s = Array();
|
|
return r.forEach(function(t) {
|
|
var i = o.getImpostorHitData(t, e);
|
|
i && (t.applyImpulse(i.force, i.contactPoint), s.push({
|
|
impostor: t,
|
|
hitData: i
|
|
}))
|
|
}), o.triggerAffectedImpostorsCallback(s), o.dispose(!1), o
|
|
}, e.prototype.applyRadialExplosionForce = function(e, t, i, n) {
|
|
if (!this._physicsEngine) return p.a.Warn("Physics engine not enabled. Please enable the physics before you call the PhysicsHelper."), null;
|
|
var r = this._physicsEngine.getImpostors();
|
|
if (0 === r.length) return null;
|
|
"number" == typeof t && ((t = new Ya).radius = t, t.strength = i || t.strength, t.falloff = n || t.falloff);
|
|
var o = new ja(this._scene, t),
|
|
s = Array();
|
|
return r.forEach(function(t) {
|
|
var i = o.getImpostorHitData(t, e);
|
|
i && (t.applyForce(i.force, i.contactPoint), s.push({
|
|
impostor: t,
|
|
hitData: i
|
|
}))
|
|
}), o.triggerAffectedImpostorsCallback(s), o.dispose(!1), o
|
|
}, e.prototype.gravitationalField = function(e, t, i, n) {
|
|
if (!this._physicsEngine) return p.a.Warn("Physics engine not enabled. Please enable the physics before you call the PhysicsHelper."), null;
|
|
if (0 === this._physicsEngine.getImpostors().length) return null;
|
|
"number" == typeof t && ((t = new Ya).radius = t, t.strength = i || t.strength, t.falloff = n || t.falloff);
|
|
var r = new Ha(this, this._scene, e, t);
|
|
return r.dispose(!1), r
|
|
}, e.prototype.updraft = function(e, t, i, n, r) {
|
|
if (!this._physicsEngine) return p.a.Warn("Physics engine not enabled. Please enable the physics before you call the PhysicsHelper."), null;
|
|
if (0 === this._physicsEngine.getImpostors().length) return null;
|
|
"number" == typeof t && ((t = new Ka).radius = t, t.strength = i || t.strength, t.height = n || t.height, t.updraftMode = r || t.updraftMode);
|
|
var o = new Wa(this._scene, e, t);
|
|
return o.dispose(!1), o
|
|
}, e.prototype.vortex = function(e, t, i, n) {
|
|
if (!this._physicsEngine) return p.a.Warn("Physics engine not enabled. Please enable the physics before you call the PhysicsHelper."), null;
|
|
if (0 === this._physicsEngine.getImpostors().length) return null;
|
|
"number" == typeof t && ((t = new Qa).radius = t, t.strength = i || t.strength, t.height = n || t.height);
|
|
var r = new Xa(this._scene, e, t);
|
|
return r.dispose(!1), r
|
|
}, e
|
|
}(),
|
|
ja = function() {
|
|
function e(e, t) {
|
|
this._scene = e, this._options = t, this._dataFetched = !1, this._options = l.a({}, new Ya, this._options)
|
|
}
|
|
return e.prototype.getData = function() {
|
|
return this._dataFetched = !0, {
|
|
sphere: this._sphere
|
|
}
|
|
}, e.prototype.getImpostorHitData = function(e, t) {
|
|
if (0 === e.mass) return null;
|
|
if (!this._intersectsWithSphere(e, t, this._options.radius)) return null;
|
|
if ("Mesh" !== e.object.getClassName() && "InstancedMesh" !== e.object.getClassName()) return null;
|
|
var i = e.getObjectCenter().subtract(t),
|
|
n = new It.a(t, i, this._options.radius).intersectsMesh(e.object).pickedPoint;
|
|
if (!n) return null;
|
|
var r = o.x.Distance(t, n);
|
|
if (r > this._options.radius) return null;
|
|
var s = this._options.falloff === Va.Constant ? this._options.strength : this._options.strength * (1 - r / this._options.radius);
|
|
return {
|
|
force: i.multiplyByFloats(s, s, s),
|
|
contactPoint: n,
|
|
distanceFromOrigin: r
|
|
}
|
|
}, e.prototype.triggerAffectedImpostorsCallback = function(e) {
|
|
this._options.affectedImpostorsCallback && this._options.affectedImpostorsCallback(e)
|
|
}, e.prototype.dispose = function(e) {
|
|
var t = this;
|
|
void 0 === e && (e = !0), e ? this._sphere.dispose() : setTimeout(function() {
|
|
t._dataFetched || t._sphere.dispose()
|
|
}, 0)
|
|
}, e.prototype._prepareSphere = function() {
|
|
this._sphere || (this._sphere = Ln.a.CreateSphere("radialExplosionEventSphere", this._options.sphere, this._scene), this._sphere.isVisible = !1)
|
|
}, e.prototype._intersectsWithSphere = function(e, t, i) {
|
|
var n = e.object;
|
|
return this._prepareSphere(), this._sphere.position = t, this._sphere.scaling = new o.x(2 * i, 2 * i, 2 * i), this._sphere._updateBoundingInfo(), this._sphere.computeWorldMatrix(!0), this._sphere.intersectsMesh(n, !0)
|
|
}, e
|
|
}(),
|
|
Ha = function() {
|
|
function e(e, t, i, n) {
|
|
this._physicsHelper = e, this._scene = t, this._origin = i, this._options = n, this._dataFetched = !1, this._options = l.a({}, new Ya, this._options), this._tickCallback = this._tick.bind(this), this._options.strength = -1 * this._options.strength
|
|
}
|
|
return e.prototype.getData = function() {
|
|
return this._dataFetched = !0, {
|
|
sphere: this._sphere
|
|
}
|
|
}, e.prototype.enable = function() {
|
|
this._tickCallback.call(this), this._scene.registerBeforeRender(this._tickCallback)
|
|
}, e.prototype.disable = function() {
|
|
this._scene.unregisterBeforeRender(this._tickCallback)
|
|
}, e.prototype.dispose = function(e) {
|
|
var t = this;
|
|
void 0 === e && (e = !0), e ? this._sphere.dispose() : setTimeout(function() {
|
|
t._dataFetched || t._sphere.dispose()
|
|
}, 0)
|
|
}, e.prototype._tick = function() {
|
|
if (this._sphere) this._physicsHelper.applyRadialExplosionForce(this._origin, this._options);
|
|
else {
|
|
var e = this._physicsHelper.applyRadialExplosionForce(this._origin, this._options);
|
|
e && (this._sphere = e.getData().sphere.clone("radialExplosionEventSphereClone"))
|
|
}
|
|
}, e
|
|
}(),
|
|
Wa = function() {
|
|
function e(e, t, i) {
|
|
this._scene = e, this._origin = t, this._options = i, this._originTop = o.x.Zero(), this._originDirection = o.x.Zero(), this._cylinderPosition = o.x.Zero(), this._dataFetched = !1, this._physicsEngine = this._scene.getPhysicsEngine(), this._options = l.a({}, new Ka, this._options), this._origin.addToRef(new o.x(0, this._options.height / 2, 0), this._cylinderPosition), this._origin.addToRef(new o.x(0, this._options.height, 0), this._originTop), this._options.updraftMode === Ga.Perpendicular && (this._originDirection = this._origin.subtract(this._originTop).normalize()), this._tickCallback = this._tick.bind(this), this._prepareCylinder()
|
|
}
|
|
return e.prototype.getData = function() {
|
|
return this._dataFetched = !0, {
|
|
cylinder: this._cylinder
|
|
}
|
|
}, e.prototype.enable = function() {
|
|
this._tickCallback.call(this), this._scene.registerBeforeRender(this._tickCallback)
|
|
}, e.prototype.disable = function() {
|
|
this._scene.unregisterBeforeRender(this._tickCallback)
|
|
}, e.prototype.dispose = function(e) {
|
|
var t = this;
|
|
void 0 === e && (e = !0), this._cylinder && (e ? this._cylinder.dispose() : setTimeout(function() {
|
|
t._dataFetched || t._cylinder.dispose()
|
|
}, 0))
|
|
}, e.prototype.getImpostorHitData = function(e) {
|
|
if (0 === e.mass) return null;
|
|
if (!this._intersectsWithCylinder(e)) return null;
|
|
var t = e.getObjectCenter();
|
|
if (this._options.updraftMode === Ga.Perpendicular) var i = this._originDirection;
|
|
else i = t.subtract(this._originTop);
|
|
var n = o.x.Distance(this._origin, t),
|
|
r = -1 * this._options.strength;
|
|
return {
|
|
force: i.multiplyByFloats(r, r, r),
|
|
contactPoint: t,
|
|
distanceFromOrigin: n
|
|
}
|
|
}, e.prototype._tick = function() {
|
|
var e = this;
|
|
this._physicsEngine.getImpostors().forEach(function(t) {
|
|
var i = e.getImpostorHitData(t);
|
|
i && t.applyForce(i.force, i.contactPoint)
|
|
})
|
|
}, e.prototype._prepareCylinder = function() {
|
|
this._cylinder || (this._cylinder = Fi.a.CreateCylinder("updraftEventCylinder", {
|
|
height: this._options.height,
|
|
diameter: 2 * this._options.radius
|
|
}, this._scene), this._cylinder.isVisible = !1)
|
|
}, e.prototype._intersectsWithCylinder = function(e) {
|
|
var t = e.object;
|
|
return this._cylinder.position = this._cylinderPosition, this._cylinder.intersectsMesh(t, !0)
|
|
}, e
|
|
}(),
|
|
Xa = function() {
|
|
function e(e, t, i) {
|
|
this._scene = e, this._origin = t, this._options = i, this._originTop = o.x.Zero(), this._cylinderPosition = o.x.Zero(), this._dataFetched = !1, this._physicsEngine = this._scene.getPhysicsEngine(), this._options = l.a({}, new Qa, this._options), this._origin.addToRef(new o.x(0, this._options.height / 2, 0), this._cylinderPosition), this._origin.addToRef(new o.x(0, this._options.height, 0), this._originTop), this._tickCallback = this._tick.bind(this), this._prepareCylinder()
|
|
}
|
|
return e.prototype.getData = function() {
|
|
return this._dataFetched = !0, {
|
|
cylinder: this._cylinder
|
|
}
|
|
}, e.prototype.enable = function() {
|
|
this._tickCallback.call(this), this._scene.registerBeforeRender(this._tickCallback)
|
|
}, e.prototype.disable = function() {
|
|
this._scene.unregisterBeforeRender(this._tickCallback)
|
|
}, e.prototype.dispose = function(e) {
|
|
var t = this;
|
|
void 0 === e && (e = !0), e ? this._cylinder.dispose() : setTimeout(function() {
|
|
t._dataFetched || t._cylinder.dispose()
|
|
}, 0)
|
|
}, e.prototype.getImpostorHitData = function(e) {
|
|
if (0 === e.mass) return null;
|
|
if (!this._intersectsWithCylinder(e)) return null;
|
|
if ("Mesh" !== e.object.getClassName() && "InstancedMesh" !== e.object.getClassName()) return null;
|
|
var t = e.getObjectCenter(),
|
|
i = new o.x(this._origin.x, t.y, this._origin.z),
|
|
n = t.subtract(i),
|
|
r = new It.a(i, n, this._options.radius).intersectsMesh(e.object),
|
|
s = r.pickedPoint;
|
|
if (!s) return null;
|
|
var a = r.distance / this._options.radius,
|
|
c = s.normalize();
|
|
if (a > this._options.centripetalForceThreshold && (c = c.negate()), a > this._options.centripetalForceThreshold) var l = c.x * this._options.centripetalForceMultiplier,
|
|
u = c.y * this._options.updraftForceMultiplier,
|
|
h = c.z * this._options.centripetalForceMultiplier;
|
|
else {
|
|
var d = o.x.Cross(i, t).normalize();
|
|
l = (d.x + c.x) * this._options.centrifugalForceMultiplier, u = this._originTop.y * this._options.updraftForceMultiplier, h = (d.z + c.z) * this._options.centrifugalForceMultiplier
|
|
}
|
|
var f = new o.x(l, u, h);
|
|
return {
|
|
force: f = f.multiplyByFloats(this._options.strength, this._options.strength, this._options.strength),
|
|
contactPoint: t,
|
|
distanceFromOrigin: a
|
|
}
|
|
}, e.prototype._tick = function() {
|
|
var e = this;
|
|
this._physicsEngine.getImpostors().forEach(function(t) {
|
|
var i = e.getImpostorHitData(t);
|
|
i && t.applyForce(i.force, i.contactPoint)
|
|
})
|
|
}, e.prototype._prepareCylinder = function() {
|
|
this._cylinder || (this._cylinder = Fi.a.CreateCylinder("vortexEventCylinder", {
|
|
height: this._options.height,
|
|
diameter: 2 * this._options.radius
|
|
}, this._scene), this._cylinder.isVisible = !1)
|
|
}, e.prototype._intersectsWithCylinder = function(e) {
|
|
var t = e.object;
|
|
return this._cylinder.position = this._cylinderPosition, this._cylinder.intersectsMesh(t, !0)
|
|
}, e
|
|
}(),
|
|
Ya = function() {
|
|
return function() {
|
|
this.radius = 5, this.strength = 10, this.falloff = Va.Constant, this.sphere = {
|
|
segments: 32,
|
|
diameter: 1
|
|
}
|
|
}
|
|
}(),
|
|
Ka = function() {
|
|
return function() {
|
|
this.radius = 5, this.strength = 10, this.height = 10, this.updraftMode = Ga.Center
|
|
}
|
|
}(),
|
|
Qa = function() {
|
|
return function() {
|
|
this.radius = 5, this.strength = 10, this.height = 10, this.centripetalForceThreshold = .7, this.centripetalForceMultiplier = 5, this.centrifugalForceMultiplier = .5, this.updraftForceMultiplier = .02
|
|
}
|
|
}();
|
|
! function(e) {
|
|
e[e.Constant = 0] = "Constant", e[e.Linear = 1] = "Linear"
|
|
}(Va || (Va = {})),
|
|
function(e) {
|
|
e[e.Center = 0] = "Center", e[e.Perpendicular = 1] = "Perpendicular"
|
|
}(Ga || (Ga = {}));
|
|
var qa = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform float degree;\nvoid main(void)\n{\nvec3 color=texture2D(textureSampler,vUV).rgb;\nfloat luminance=dot(color,vec3(0.3,0.59,0.11));\nvec3 blackAndWhite=vec3(luminance,luminance,luminance);\ngl_FragColor=vec4(color-((color-blackAndWhite)*degree),1.0);\n}";
|
|
zt.a.ShadersStore.blackAndWhitePixelShader = qa;
|
|
var Za = function(e) {
|
|
function t(t, i, n, r, o, s) {
|
|
var a = e.call(this, t, "blackAndWhite", ["degree"], null, i, n, r, o, s) || this;
|
|
return a.degree = 1, a.onApplyObservable.add(function(e) {
|
|
e.setFloat("degree", a.degree)
|
|
}), a
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
Ja = function() {
|
|
function e(e, t, i, n) {
|
|
this._name = t, this._singleInstance = n || !0, this._getPostProcesses = i, this._cameras = {}, this._indicesForCamera = {}, this._postProcesses = {}
|
|
}
|
|
return Object.defineProperty(e.prototype, "isSupported", {
|
|
get: function() {
|
|
for (var e in this._postProcesses)
|
|
if (this._postProcesses.hasOwnProperty(e))
|
|
for (var t = this._postProcesses[e], i = 0; i < t.length; i++)
|
|
if (!t[i].isSupported) return !1;
|
|
return !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._update = function() {}, e.prototype._attachCameras = function(e) {
|
|
var t, i = this,
|
|
n = ye.h.MakeArray(e || this._cameras);
|
|
if (n)
|
|
for (var r = 0; r < n.length; r++) {
|
|
var o = n[r],
|
|
s = o.name;
|
|
if (t = this._singleInstance ? 0 : s, !this._postProcesses[t]) {
|
|
var a = this._getPostProcesses();
|
|
a && (this._postProcesses[t] = Array.isArray(a) ? a : [a])
|
|
}
|
|
this._indicesForCamera[s] || (this._indicesForCamera[s] = []), this._postProcesses[t].forEach(function(e) {
|
|
var t = o.attachPostProcess(e);
|
|
i._indicesForCamera[s].push(t)
|
|
}), this._cameras[s] || (this._cameras[s] = o)
|
|
}
|
|
}, e.prototype._detachCameras = function(e) {
|
|
var t = ye.h.MakeArray(e || this._cameras);
|
|
if (t)
|
|
for (var i = 0; i < t.length; i++) {
|
|
var n = t[i],
|
|
r = n.name,
|
|
o = this._postProcesses[this._singleInstance ? 0 : r];
|
|
o && o.forEach(function(e) {
|
|
n.detachPostProcess(e)
|
|
}), this._cameras[r] && (this._cameras[r] = null)
|
|
}
|
|
}, e.prototype._enable = function(e) {
|
|
var t = this,
|
|
i = ye.h.MakeArray(e || this._cameras);
|
|
if (i)
|
|
for (var n = 0; n < i.length; n++)
|
|
for (var r = i[n], o = r.name, s = 0; s < this._indicesForCamera[o].length; s++) void 0 !== r._postProcesses[this._indicesForCamera[o][s]] && null !== r._postProcesses[this._indicesForCamera[o][s]] || this._postProcesses[this._singleInstance ? 0 : o].forEach(function(e) {
|
|
i[n].attachPostProcess(e, t._indicesForCamera[o][s])
|
|
})
|
|
}, e.prototype._disable = function(e) {
|
|
var t = ye.h.MakeArray(e || this._cameras);
|
|
if (t)
|
|
for (var i = 0; i < t.length; i++) {
|
|
var n = t[i],
|
|
r = n.name;
|
|
this._postProcesses[this._singleInstance ? 0 : r].forEach(function(e) {
|
|
n.detachPostProcess(e)
|
|
})
|
|
}
|
|
}, e.prototype.getPostProcesses = function(e) {
|
|
return this._singleInstance ? this._postProcesses[0] : e ? this._postProcesses[e.name] : null
|
|
}, e
|
|
}(),
|
|
$a = "#include<helperFunctions>\n\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform float threshold;\nuniform float exposure;\nvoid main(void)\n{\ngl_FragColor=texture2D(textureSampler,vUV);\nfloat luma=getLuminance(gl_FragColor.rgb*exposure);\ngl_FragColor.rgb=step(threshold,luma)*gl_FragColor.rgb;\n}";
|
|
zt.a.ShadersStore.extractHighlightsPixelShader = $a;
|
|
var ec = function(e) {
|
|
function t(t, i, n, r, s, a, c, l) {
|
|
void 0 === c && (c = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === l && (l = !1);
|
|
var u = e.call(this, t, "extractHighlights", ["threshold", "exposure"], null, i, n, r, s, a, null, c, void 0, null, l) || this;
|
|
return u.threshold = .9, u._exposure = 1, u._inputPostProcess = null, u.onApplyObservable.add(function(e) {
|
|
u._inputPostProcess && e.setTextureFromPostProcess("textureSampler", u._inputPostProcess), e.setFloat("threshold", Math.pow(u.threshold, o.u)), e.setFloat("exposure", u._exposure)
|
|
}), u
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
tc = "uniform sampler2D textureSampler;\nuniform sampler2D bloomBlur;\nvarying vec2 vUV;\nuniform float bloomWeight;\nvoid main(void)\n{\ngl_FragColor=texture2D(textureSampler,vUV);\nvec3 blurred=texture2D(bloomBlur,vUV).rgb;\ngl_FragColor.rgb=gl_FragColor.rgb+(blurred.rgb*bloomWeight);\n}\n";
|
|
zt.a.ShadersStore.bloomMergePixelShader = tc;
|
|
var ic = function(e) {
|
|
function t(t, i, n, r, o, s, a, c, l, u, h) {
|
|
void 0 === u && (u = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === h && (h = !1);
|
|
var d = e.call(this, t, "bloomMerge", ["bloomWeight"], ["circleOfConfusionSampler", "blurStep0", "blurStep1", "blurStep2", "bloomBlur"], o, s, a, c, l, null, u, void 0, null, !0) || this;
|
|
return d.weight = r, d.onApplyObservable.add(function(e) {
|
|
e.setTextureFromPostProcess("textureSampler", i), e.setTextureFromPostProcessOutput("bloomBlur", n), e.setFloat("bloomWeight", d.weight)
|
|
}), h || d.updateEffect(), d
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
nc = function(e) {
|
|
function t(t, i, n, r, s, a) {
|
|
void 0 === s && (s = 0), void 0 === a && (a = !1);
|
|
var c = e.call(this, t.getEngine(), "bloom", function() {
|
|
return c._effects
|
|
}, !0) || this;
|
|
return c.bloomScale = i, c._effects = [], c._downscale = new ec("highlights", 1, null, ke.a.BILINEAR_SAMPLINGMODE, t.getEngine(), !1, s, a), c._blurX = new $n("horizontal blur", new o.w(1, 0), 10, i, null, ke.a.BILINEAR_SAMPLINGMODE, t.getEngine(), !1, s, void 0, a), c._blurX.alwaysForcePOT = !0, c._blurX.autoClear = !1, c._blurY = new $n("vertical blur", new o.w(0, 1), 10, i, null, ke.a.BILINEAR_SAMPLINGMODE, t.getEngine(), !1, s, void 0, a), c._blurY.alwaysForcePOT = !0, c._blurY.autoClear = !1, c.kernel = r, c._effects = [c._downscale, c._blurX, c._blurY], c._merge = new ic("bloomMerge", c._downscale, c._blurY, n, i, null, ke.a.BILINEAR_SAMPLINGMODE, t.getEngine(), !1, s, a), c._merge.autoClear = !1, c._effects.push(c._merge), c
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "threshold", {
|
|
get: function() {
|
|
return this._downscale.threshold
|
|
},
|
|
set: function(e) {
|
|
this._downscale.threshold = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "weight", {
|
|
get: function() {
|
|
return this._merge.weight
|
|
},
|
|
set: function(e) {
|
|
this._merge.weight = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "kernel", {
|
|
get: function() {
|
|
return this._blurX.kernel / this.bloomScale
|
|
},
|
|
set: function(e) {
|
|
this._blurX.kernel = e * this.bloomScale, this._blurY.kernel = e * this.bloomScale
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.disposeEffects = function(e) {
|
|
for (var t = 0; t < this._effects.length; t++) this._effects[t].dispose(e)
|
|
}, t.prototype._updateEffects = function() {
|
|
for (var e = 0; e < this._effects.length; e++) this._effects[e].updateEffect()
|
|
}, t.prototype._isReady = function() {
|
|
for (var e = 0; e < this._effects.length; e++)
|
|
if (!this._effects[e].isReady()) return !1;
|
|
return !0
|
|
}, t
|
|
}(Ja),
|
|
rc = "\nuniform sampler2D textureSampler;\n\nuniform float chromatic_aberration;\nuniform float radialIntensity;\nuniform vec2 direction;\nuniform vec2 centerPosition;\nuniform float screen_width;\nuniform float screen_height;\n\nvarying vec2 vUV;\nvoid main(void)\n{\nvec2 centered_screen_pos=vec2(vUV.x-centerPosition.x,vUV.y-centerPosition.y);\nvec2 directionOfEffect=direction;\nif(directionOfEffect.x == 0. && directionOfEffect.y == 0.){\ndirectionOfEffect=normalize(centered_screen_pos);\n}\nfloat radius2=centered_screen_pos.x*centered_screen_pos.x\n+centered_screen_pos.y*centered_screen_pos.y;\nfloat radius=sqrt(radius2);\nvec4 original=texture2D(textureSampler,vUV);\n\nvec3 ref_indices=vec3(-0.3,0.0,0.3);\nfloat ref_shiftX=chromatic_aberration*pow(radius,radialIntensity)*directionOfEffect.x/screen_width;\nfloat ref_shiftY=chromatic_aberration*pow(radius,radialIntensity)*directionOfEffect.y/screen_height;\n\nvec2 ref_coords_r=vec2(vUV.x+ref_indices.r*ref_shiftX,vUV.y+ref_indices.r*ref_shiftY*0.5);\nvec2 ref_coords_g=vec2(vUV.x+ref_indices.g*ref_shiftX,vUV.y+ref_indices.g*ref_shiftY*0.5);\nvec2 ref_coords_b=vec2(vUV.x+ref_indices.b*ref_shiftX,vUV.y+ref_indices.b*ref_shiftY*0.5);\noriginal.r=texture2D(textureSampler,ref_coords_r).r;\noriginal.g=texture2D(textureSampler,ref_coords_g).g;\noriginal.b=texture2D(textureSampler,ref_coords_b).b;\noriginal.a=clamp(texture2D(textureSampler,ref_coords_r).a+texture2D(textureSampler,ref_coords_g).a+texture2D(textureSampler,ref_coords_b).a,0.,1.);\ngl_FragColor=original;\n}";
|
|
zt.a.ShadersStore.chromaticAberrationPixelShader = rc;
|
|
var oc = function(e) {
|
|
function t(t, i, n, r, s, a, c, l, u, h) {
|
|
void 0 === u && (u = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === h && (h = !1);
|
|
var d = e.call(this, t, "chromaticAberration", ["chromatic_aberration", "screen_width", "screen_height", "direction", "radialIntensity", "centerPosition"], [], r, s, a, c, l, null, u, void 0, null, h) || this;
|
|
return d.aberrationAmount = 30, d.radialIntensity = 0, d.direction = new o.w(.707, .707), d.centerPosition = new o.w(.5, .5), d.onApplyObservable.add(function(e) {
|
|
e.setFloat("chromatic_aberration", d.aberrationAmount), e.setFloat("screen_width", i), e.setFloat("screen_height", n), e.setFloat("radialIntensity", d.radialIntensity), e.setFloat2("direction", d.direction.x, d.direction.y), e.setFloat2("centerPosition", d.centerPosition.x, d.centerPosition.y)
|
|
}), d
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
sc = "\nuniform sampler2D depthSampler;\n\nvarying vec2 vUV;\n\nuniform vec2 cameraMinMaxZ;\n\nuniform float focusDistance;\nuniform float cocPrecalculation;\nvoid main(void)\n{\nfloat depth=texture2D(depthSampler,vUV).r;\nfloat pixelDistance=(cameraMinMaxZ.x+(cameraMinMaxZ.y-cameraMinMaxZ.x)*depth)*1000.0;\nfloat coc=abs(cocPrecalculation* ((focusDistance-pixelDistance)/pixelDistance));\ncoc=clamp(coc,0.0,1.0);\ngl_FragColor=vec4(coc,depth,coc,1.0);\n}\n";
|
|
zt.a.ShadersStore.circleOfConfusionPixelShader = sc;
|
|
var ac = function(e) {
|
|
function t(t, i, n, r, o, s, a, c, l) {
|
|
void 0 === c && (c = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === l && (l = !1);
|
|
var u = e.call(this, t, "circleOfConfusion", ["cameraMinMaxZ", "focusDistance", "cocPrecalculation"], ["depthSampler"], n, r, o, s, a, null, c, void 0, null, l) || this;
|
|
return u.lensSize = 50, u.fStop = 1.4, u.focusDistance = 2e3, u.focalLength = 50, u._depthTexture = null, u._depthTexture = i, u.onApplyObservable.add(function(e) {
|
|
if (u._depthTexture) {
|
|
e.setTexture("depthSampler", u._depthTexture);
|
|
var t = u.lensSize / u.fStop * u.focalLength / (u.focusDistance - u.focalLength);
|
|
e.setFloat("focusDistance", u.focusDistance), e.setFloat("cocPrecalculation", t), e.setFloat2("cameraMinMaxZ", u._depthTexture.activeCamera.minZ, u._depthTexture.activeCamera.maxZ)
|
|
} else p.a.Warn("No depth texture set on CircleOfConfusionPostProcess")
|
|
}), u
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "depthTexture", {
|
|
set: function(e) {
|
|
this._depthTexture = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t
|
|
}(Ht),
|
|
cc = "\nuniform sampler2D textureSampler;\nuniform sampler2D colorTable;\n\nvarying vec2 vUV;\n\nconst float SLICE_COUNT=16.0;\n\nvec4 sampleAs3DTexture(sampler2D textureSampler,vec3 uv,float width) {\nfloat sliceSize=1.0/width;\nfloat slicePixelSize=sliceSize/width;\nfloat sliceInnerSize=slicePixelSize*(width-1.0);\nfloat zSlice0=min(floor(uv.z*width),width-1.0);\nfloat zSlice1=min(zSlice0+1.0,width-1.0);\nfloat xOffset=slicePixelSize*0.5+uv.x*sliceInnerSize;\nfloat s0=xOffset+(zSlice0*sliceSize);\nfloat s1=xOffset+(zSlice1*sliceSize);\nvec4 slice0Color=texture2D(textureSampler,vec2(s0,uv.y));\nvec4 slice1Color=texture2D(textureSampler,vec2(s1,uv.y));\nfloat zOffset=mod(uv.z*width,1.0);\nvec4 result=mix(slice0Color,slice1Color,zOffset);\nreturn result;\n}\nvoid main(void)\n{\nvec4 screen_color=texture2D(textureSampler,vUV);\ngl_FragColor=sampleAs3DTexture(colorTable,screen_color.rgb,SLICE_COUNT);\n}";
|
|
zt.a.ShadersStore.colorCorrectionPixelShader = cc;
|
|
var lc = function(e) {
|
|
function t(t, i, n, r, o, s, a) {
|
|
var c = e.call(this, t, "colorCorrection", null, ["colorTable"], n, r, o, s, a) || this;
|
|
return c._colorTableTexture = new ke.a(i, r.getScene(), !0, !1, ke.a.TRILINEAR_SAMPLINGMODE), c._colorTableTexture.anisotropicFilteringLevel = 1, c._colorTableTexture.wrapU = ke.a.CLAMP_ADDRESSMODE, c._colorTableTexture.wrapV = ke.a.CLAMP_ADDRESSMODE, c.onApply = function(e) {
|
|
e.setTexture("colorTable", c._colorTableTexture)
|
|
}, c
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
uc = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform vec2 screenSize;\nuniform float kernel[9];\nvoid main(void)\n{\nvec2 onePixel=vec2(1.0,1.0)/screenSize;\nvec4 colorSum =\ntexture2D(textureSampler,vUV+onePixel*vec2(-1,-1))*kernel[0] +\ntexture2D(textureSampler,vUV+onePixel*vec2(0,-1))*kernel[1] +\ntexture2D(textureSampler,vUV+onePixel*vec2(1,-1))*kernel[2] +\ntexture2D(textureSampler,vUV+onePixel*vec2(-1,0))*kernel[3] +\ntexture2D(textureSampler,vUV+onePixel*vec2(0,0))*kernel[4] +\ntexture2D(textureSampler,vUV+onePixel*vec2(1,0))*kernel[5] +\ntexture2D(textureSampler,vUV+onePixel*vec2(-1,1))*kernel[6] +\ntexture2D(textureSampler,vUV+onePixel*vec2(0,1))*kernel[7] +\ntexture2D(textureSampler,vUV+onePixel*vec2(1,1))*kernel[8];\nfloat kernelWeight =\nkernel[0] +\nkernel[1] +\nkernel[2] +\nkernel[3] +\nkernel[4] +\nkernel[5] +\nkernel[6] +\nkernel[7] +\nkernel[8];\nif (kernelWeight<=0.0) {\nkernelWeight=1.0;\n}\ngl_FragColor=vec4((colorSum/kernelWeight).rgb,1);\n}";
|
|
zt.a.ShadersStore.convolutionPixelShader = uc;
|
|
var hc = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
void 0 === c && (c = _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
var l = e.call(this, t, "convolution", ["kernel", "screenSize"], null, n, r, o, s, a, null, c) || this;
|
|
return l.kernel = i, l.onApply = function(e) {
|
|
e.setFloat2("screenSize", l.width, l.height), e.setArray("kernel", l.kernel)
|
|
}, l
|
|
}
|
|
return l.d(t, e), t.EdgeDetect0Kernel = [1, 0, -1, 0, 0, 0, -1, 0, 1], t.EdgeDetect1Kernel = [0, 1, 0, 1, -4, 1, 0, 1, 0], t.EdgeDetect2Kernel = [-1, -1, -1, -1, 8, -1, -1, -1, -1], t.SharpenKernel = [0, -1, 0, -1, 5, -1, 0, -1, 0], t.EmbossKernel = [-2, -1, 0, -1, 1, 1, 0, 1, 2], t.GaussianKernel = [0, 1, 0, 1, 1, 1, 0, 1, 0], t
|
|
}(Ht),
|
|
dc = function(e) {
|
|
function t(t, i, n, r, o, s, a, c, l, u, h, d, f) {
|
|
void 0 === c && (c = null), void 0 === l && (l = ke.a.BILINEAR_SAMPLINGMODE), void 0 === d && (d = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === f && (f = !1);
|
|
var p = e.call(this, t, n, r, o, s, l = _.a.TEXTURE_BILINEAR_SAMPLINGMODE, u, h, d = _.a.TEXTURETYPE_UNSIGNED_INT, "#define DOF 1\r\n", f) || this;
|
|
return p.direction = n, p.onApplyObservable.add(function(e) {
|
|
null != c && e.setTextureFromPostProcess("textureSampler", c), e.setTextureFromPostProcessOutput("circleOfConfusionSampler", a), i.activeCamera && e.setFloat2("cameraMinMaxZ", i.activeCamera.minZ, i.activeCamera.maxZ)
|
|
}), p
|
|
}
|
|
return l.d(t, e), t
|
|
}($n),
|
|
fc = "uniform sampler2D textureSampler;\nvarying vec2 vUV;\nuniform sampler2D circleOfConfusionSampler;\nuniform sampler2D blurStep0;\n#if BLUR_LEVEL>0\nuniform sampler2D blurStep1;\n#endif\n#if BLUR_LEVEL>1\nuniform sampler2D blurStep2;\n#endif\nvoid main(void)\n{\nfloat coc=texture2D(circleOfConfusionSampler,vUV).r;\n#if BLUR_LEVEL == 0\nvec4 original=texture2D(textureSampler,vUV);\nvec4 blurred0=texture2D(blurStep0,vUV);\ngl_FragColor=mix(original,blurred0,coc);\n#endif\n#if BLUR_LEVEL == 1\nif(coc<0.5){\nvec4 original=texture2D(textureSampler,vUV);\nvec4 blurred1=texture2D(blurStep1,vUV);\ngl_FragColor=mix(original,blurred1,coc/0.5);\n}else{\nvec4 blurred0=texture2D(blurStep0,vUV);\nvec4 blurred1=texture2D(blurStep1,vUV);\ngl_FragColor=mix(blurred1,blurred0,(coc-0.5)/0.5);\n}\n#endif\n#if BLUR_LEVEL == 2\nif(coc<0.33){\nvec4 original=texture2D(textureSampler,vUV);\nvec4 blurred2=texture2D(blurStep2,vUV);\ngl_FragColor=mix(original,blurred2,coc/0.33);\n}else if(coc<0.66){\nvec4 blurred1=texture2D(blurStep1,vUV);\nvec4 blurred2=texture2D(blurStep2,vUV);\ngl_FragColor=mix(blurred2,blurred1,(coc-0.33)/0.33);\n}else{\nvec4 blurred0=texture2D(blurStep0,vUV);\nvec4 blurred1=texture2D(blurStep1,vUV);\ngl_FragColor=mix(blurred1,blurred0,(coc-0.66)/0.34);\n}\n#endif\n}\n";
|
|
zt.a.ShadersStore.depthOfFieldMergePixelShader = fc;
|
|
var pc, _c = function() {
|
|
return function() {}
|
|
}(),
|
|
gc = function(e) {
|
|
function t(t, i, n, r, o, s, a, c, l, u, h) {
|
|
void 0 === u && (u = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === h && (h = !1);
|
|
var d = e.call(this, t, "depthOfFieldMerge", [], ["circleOfConfusionSampler", "blurStep0", "blurStep1", "blurStep2"], o, s, a, c, l, null, u, void 0, null, !0) || this;
|
|
return d.blurSteps = r, d.onApplyObservable.add(function(e) {
|
|
e.setTextureFromPostProcess("textureSampler", i), e.setTextureFromPostProcessOutput("circleOfConfusionSampler", n), r.forEach(function(t, i) {
|
|
e.setTextureFromPostProcessOutput("blurStep" + (r.length - i - 1), t)
|
|
})
|
|
}), h || d.updateEffect(), d
|
|
}
|
|
return l.d(t, e), t.prototype.updateEffect = function(t, i, n, r, o, s) {
|
|
void 0 === t && (t = null), void 0 === i && (i = null), void 0 === n && (n = null), t || (t = "", t += "#define BLUR_LEVEL " + (this.blurSteps.length - 1) + "\n"), e.prototype.updateEffect.call(this, t, i, n, r, o, s)
|
|
}, t
|
|
}(Ht);
|
|
! function(e) {
|
|
e[e.Low = 0] = "Low", e[e.Medium = 1] = "Medium", e[e.High = 2] = "High"
|
|
}(pc || (pc = {}));
|
|
var mc = function(e) {
|
|
function t(t, i, n, r, s) {
|
|
void 0 === n && (n = pc.Low), void 0 === r && (r = 0), void 0 === s && (s = !1);
|
|
var a = e.call(this, t.getEngine(), "depth of field", function() {
|
|
return a._effects
|
|
}, !0) || this;
|
|
a._effects = [], a._circleOfConfusion = new ac("circleOfConfusion", i, 1, null, ke.a.BILINEAR_SAMPLINGMODE, t.getEngine(), !1, r, s), a._depthOfFieldBlurY = [], a._depthOfFieldBlurX = [];
|
|
var c = 1,
|
|
l = 15;
|
|
switch (n) {
|
|
case pc.High:
|
|
c = 3, l = 51;
|
|
break;
|
|
case pc.Medium:
|
|
c = 2, l = 31;
|
|
break;
|
|
default:
|
|
l = 15, c = 1
|
|
}
|
|
for (var u = l / Math.pow(2, c - 1), h = 1, d = 0; d < c; d++) {
|
|
var f = new dc("verticle blur", t, new o.w(0, 1), u, h, null, a._circleOfConfusion, 0 == d ? a._circleOfConfusion : null, ke.a.BILINEAR_SAMPLINGMODE, t.getEngine(), !1, r, s);
|
|
f.autoClear = !1, h = .75 / Math.pow(2, d);
|
|
var p = new dc("horizontal blur", t, new o.w(1, 0), u, h, null, a._circleOfConfusion, null, ke.a.BILINEAR_SAMPLINGMODE, t.getEngine(), !1, r, s);
|
|
p.autoClear = !1, a._depthOfFieldBlurY.push(f), a._depthOfFieldBlurX.push(p)
|
|
}
|
|
a._effects = [a._circleOfConfusion];
|
|
for (d = 0; d < a._depthOfFieldBlurX.length; d++) a._effects.push(a._depthOfFieldBlurY[d]), a._effects.push(a._depthOfFieldBlurX[d]);
|
|
return a._dofMerge = new gc("dofMerge", a._circleOfConfusion, a._circleOfConfusion, a._depthOfFieldBlurX, h, null, ke.a.BILINEAR_SAMPLINGMODE, t.getEngine(), !1, r, s), a._dofMerge.autoClear = !1, a._effects.push(a._dofMerge), a
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "focalLength", {
|
|
get: function() {
|
|
return this._circleOfConfusion.focalLength
|
|
},
|
|
set: function(e) {
|
|
this._circleOfConfusion.focalLength = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "fStop", {
|
|
get: function() {
|
|
return this._circleOfConfusion.fStop
|
|
},
|
|
set: function(e) {
|
|
this._circleOfConfusion.fStop = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "focusDistance", {
|
|
get: function() {
|
|
return this._circleOfConfusion.focusDistance
|
|
},
|
|
set: function(e) {
|
|
this._circleOfConfusion.focusDistance = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "lensSize", {
|
|
get: function() {
|
|
return this._circleOfConfusion.lensSize
|
|
},
|
|
set: function(e) {
|
|
this._circleOfConfusion.lensSize = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "DepthOfFieldEffect"
|
|
}, Object.defineProperty(t.prototype, "depthTexture", {
|
|
set: function(e) {
|
|
this._circleOfConfusion.depthTexture = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.disposeEffects = function(e) {
|
|
for (var t = 0; t < this._effects.length; t++) this._effects[t].dispose(e)
|
|
}, t.prototype._updateEffects = function() {
|
|
for (var e = 0; e < this._effects.length; e++) this._effects[e].updateEffect()
|
|
}, t.prototype._isReady = function() {
|
|
for (var e = 0; e < this._effects.length; e++)
|
|
if (!this._effects[e].isReady()) return !1;
|
|
return !0
|
|
}, t
|
|
}(Ja),
|
|
vc = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform sampler2D passSampler;\nvoid main(void)\n{\ngl_FragColor=texture2D(passSampler,vUV);\n}";
|
|
zt.a.ShadersStore.displayPassPixelShader = vc;
|
|
var yc = function(e) {
|
|
function t(t, i, n, r, o, s) {
|
|
return e.call(this, t, "displayPass", ["passSampler"], ["passSampler"], i, n, r, o, s) || this
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
bc = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform mat4 kernelMatrix;\nvoid main(void)\n{\nvec3 baseColor=texture2D(textureSampler,vUV).rgb;\nvec3 updatedColor=(kernelMatrix*vec4(baseColor,1.0)).rgb;\ngl_FragColor=vec4(updatedColor,1.0);\n}";
|
|
zt.a.ShadersStore.filterPixelShader = bc;
|
|
var Tc = function(e) {
|
|
function t(t, i, n, r, o, s, a) {
|
|
var c = e.call(this, t, "filter", ["kernelMatrix"], null, n, r, o, s, a) || this;
|
|
return c.kernelMatrix = i, c.onApply = function(e) {
|
|
e.setMatrix("kernelMatrix", c.kernelMatrix)
|
|
}, c
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
Ec = "uniform sampler2D textureSampler;\nuniform vec2 texelSize;\nvarying vec2 vUV;\nvarying vec2 sampleCoordS;\nvarying vec2 sampleCoordE;\nvarying vec2 sampleCoordN;\nvarying vec2 sampleCoordW;\nvarying vec2 sampleCoordNW;\nvarying vec2 sampleCoordSE;\nvarying vec2 sampleCoordNE;\nvarying vec2 sampleCoordSW;\nconst float fxaaQualitySubpix=1.0;\nconst float fxaaQualityEdgeThreshold=0.166;\nconst float fxaaQualityEdgeThresholdMin=0.0833;\nconst vec3 kLumaCoefficients=vec3(0.2126,0.7152,0.0722);\n#define FxaaLuma(rgba) dot(rgba.rgb,kLumaCoefficients)\nvoid main(){\nvec2 posM;\nposM.x=vUV.x;\nposM.y=vUV.y;\nvec4 rgbyM=texture2D(textureSampler,vUV,0.0);\nfloat lumaM=FxaaLuma(rgbyM);\nfloat lumaS=FxaaLuma(texture2D(textureSampler,sampleCoordS,0.0));\nfloat lumaE=FxaaLuma(texture2D(textureSampler,sampleCoordE,0.0));\nfloat lumaN=FxaaLuma(texture2D(textureSampler,sampleCoordN,0.0));\nfloat lumaW=FxaaLuma(texture2D(textureSampler,sampleCoordW,0.0));\nfloat maxSM=max(lumaS,lumaM);\nfloat minSM=min(lumaS,lumaM);\nfloat maxESM=max(lumaE,maxSM);\nfloat minESM=min(lumaE,minSM);\nfloat maxWN=max(lumaN,lumaW);\nfloat minWN=min(lumaN,lumaW);\nfloat rangeMax=max(maxWN,maxESM);\nfloat rangeMin=min(minWN,minESM);\nfloat rangeMaxScaled=rangeMax*fxaaQualityEdgeThreshold;\nfloat range=rangeMax-rangeMin;\nfloat rangeMaxClamped=max(fxaaQualityEdgeThresholdMin,rangeMaxScaled);\n#ifndef MALI\nif(range<rangeMaxClamped)\n{\ngl_FragColor=rgbyM;\nreturn;\n}\n#endif\nfloat lumaNW=FxaaLuma(texture2D(textureSampler,sampleCoordNW,0.0));\nfloat lumaSE=FxaaLuma(texture2D(textureSampler,sampleCoordSE,0.0));\nfloat lumaNE=FxaaLuma(texture2D(textureSampler,sampleCoordNE,0.0));\nfloat lumaSW=FxaaLuma(texture2D(textureSampler,sampleCoordSW,0.0));\nfloat lumaNS=lumaN+lumaS;\nfloat lumaWE=lumaW+lumaE;\nfloat subpixRcpRange=1.0/range;\nfloat subpixNSWE=lumaNS+lumaWE;\nfloat edgeHorz1=(-2.0*lumaM)+lumaNS;\nfloat edgeVert1=(-2.0*lumaM)+lumaWE;\nfloat lumaNESE=lumaNE+lumaSE;\nfloat lumaNWNE=lumaNW+lumaNE;\nfloat edgeHorz2=(-2.0*lumaE)+lumaNESE;\nfloat edgeVert2=(-2.0*lumaN)+lumaNWNE;\nfloat lumaNWSW=lumaNW+lumaSW;\nfloat lumaSWSE=lumaSW+lumaSE;\nfloat edgeHorz4=(abs(edgeHorz1)*2.0)+abs(edgeHorz2);\nfloat edgeVert4=(abs(edgeVert1)*2.0)+abs(edgeVert2);\nfloat edgeHorz3=(-2.0*lumaW)+lumaNWSW;\nfloat edgeVert3=(-2.0*lumaS)+lumaSWSE;\nfloat edgeHorz=abs(edgeHorz3)+edgeHorz4;\nfloat edgeVert=abs(edgeVert3)+edgeVert4;\nfloat subpixNWSWNESE=lumaNWSW+lumaNESE;\nfloat lengthSign=texelSize.x;\nbool horzSpan=edgeHorz>=edgeVert;\nfloat subpixA=subpixNSWE*2.0+subpixNWSWNESE;\nif (!horzSpan)\n{\nlumaN=lumaW;\n}\nif (!horzSpan)\n{\nlumaS=lumaE;\n}\nif (horzSpan)\n{\nlengthSign=texelSize.y;\n}\nfloat subpixB=(subpixA*(1.0/12.0))-lumaM;\nfloat gradientN=lumaN-lumaM;\nfloat gradientS=lumaS-lumaM;\nfloat lumaNN=lumaN+lumaM;\nfloat lumaSS=lumaS+lumaM;\nbool pairN=abs(gradientN)>=abs(gradientS);\nfloat gradient=max(abs(gradientN),abs(gradientS));\nif (pairN)\n{\nlengthSign=-lengthSign;\n}\nfloat subpixC=clamp(abs(subpixB)*subpixRcpRange,0.0,1.0);\nvec2 posB;\nposB.x=posM.x;\nposB.y=posM.y;\nvec2 offNP;\noffNP.x=(!horzSpan) ? 0.0 : texelSize.x;\noffNP.y=(horzSpan) ? 0.0 : texelSize.y;\nif (!horzSpan)\n{\nposB.x+=lengthSign*0.5;\n}\nif (horzSpan)\n{\nposB.y+=lengthSign*0.5;\n}\nvec2 posN;\nposN.x=posB.x-offNP.x*1.5;\nposN.y=posB.y-offNP.y*1.5;\nvec2 posP;\nposP.x=posB.x+offNP.x*1.5;\nposP.y=posB.y+offNP.y*1.5;\nfloat subpixD=((-2.0)*subpixC)+3.0;\nfloat lumaEndN=FxaaLuma(texture2D(textureSampler,posN,0.0));\nfloat subpixE=subpixC*subpixC;\nfloat lumaEndP=FxaaLuma(texture2D(textureSampler,posP,0.0));\nif (!pairN)\n{\nlumaNN=lumaSS;\n}\nfloat gradientScaled=gradient*1.0/4.0;\nfloat lumaMM=lumaM-lumaNN*0.5;\nfloat subpixF=subpixD*subpixE;\nbool lumaMLTZero=lumaMM<0.0;\nlumaEndN-=lumaNN*0.5;\nlumaEndP-=lumaNN*0.5;\nbool doneN=abs(lumaEndN)>=gradientScaled;\nbool doneP=abs(lumaEndP)>=gradientScaled;\nif (!doneN)\n{\nposN.x-=offNP.x*3.0;\n}\nif (!doneN)\n{\nposN.y-=offNP.y*3.0;\n}\nbool doneNP=(!doneN) || (!doneP);\nif (!doneP)\n{\nposP.x+=offNP.x*3.0;\n}\nif (!doneP)\n{\nposP.y+=offNP.y*3.0;\n}\nif (doneNP)\n{\nif (!doneN) lumaEndN=FxaaLuma(texture2D(textureSampler,posN.xy,0.0));\nif (!doneP) lumaEndP=FxaaLuma(texture2D(textureSampler,posP.xy,0.0));\nif (!doneN) lumaEndN=lumaEndN-lumaNN*0.5;\nif (!doneP) lumaEndP=lumaEndP-lumaNN*0.5;\ndoneN=abs(lumaEndN)>=gradientScaled;\ndoneP=abs(lumaEndP)>=gradientScaled;\nif (!doneN) posN.x-=offNP.x*12.0;\nif (!doneN) posN.y-=offNP.y*12.0;\ndoneNP=(!doneN) || (!doneP);\nif (!doneP) posP.x+=offNP.x*12.0;\nif (!doneP) posP.y+=offNP.y*12.0;\n}\nfloat dstN=posM.x-posN.x;\nfloat dstP=posP.x-posM.x;\nif (!horzSpan)\n{\ndstN=posM.y-posN.y;\n}\nif (!horzSpan)\n{\ndstP=posP.y-posM.y;\n}\nbool goodSpanN=(lumaEndN<0.0) != lumaMLTZero;\nfloat spanLength=(dstP+dstN);\nbool goodSpanP=(lumaEndP<0.0) != lumaMLTZero;\nfloat spanLengthRcp=1.0/spanLength;\nbool directionN=dstN<dstP;\nfloat dst=min(dstN,dstP);\nbool goodSpan=directionN ? goodSpanN : goodSpanP;\nfloat subpixG=subpixF*subpixF;\nfloat pixelOffset=(dst*(-spanLengthRcp))+0.5;\nfloat subpixH=subpixG*fxaaQualitySubpix;\nfloat pixelOffsetGood=goodSpan ? pixelOffset : 0.0;\nfloat pixelOffsetSubpix=max(pixelOffsetGood,subpixH);\nif (!horzSpan)\n{\nposM.x+=pixelOffsetSubpix*lengthSign;\n}\nif (horzSpan)\n{\nposM.y+=pixelOffsetSubpix*lengthSign;\n}\n#ifdef MALI\nif(range<rangeMaxClamped)\n{\ngl_FragColor=rgbyM;\n}\nelse\n{\ngl_FragColor=texture2D(textureSampler,posM,0.0);\n}\n#else\ngl_FragColor=texture2D(textureSampler,posM,0.0);\n#endif\n}";
|
|
zt.a.ShadersStore.fxaaPixelShader = Ec;
|
|
var Ac = "\nattribute vec2 position;\nuniform vec2 texelSize;\n\nvarying vec2 vUV;\nvarying vec2 sampleCoordS;\nvarying vec2 sampleCoordE;\nvarying vec2 sampleCoordN;\nvarying vec2 sampleCoordW;\nvarying vec2 sampleCoordNW;\nvarying vec2 sampleCoordSE;\nvarying vec2 sampleCoordNE;\nvarying vec2 sampleCoordSW;\nconst vec2 madd=vec2(0.5,0.5);\nvoid main(void) {\nvUV=(position*madd+madd);\nsampleCoordS=vUV+vec2( 0.0,1.0)*texelSize;\nsampleCoordE=vUV+vec2( 1.0,0.0)*texelSize;\nsampleCoordN=vUV+vec2( 0.0,-1.0)*texelSize;\nsampleCoordW=vUV+vec2(-1.0,0.0)*texelSize;\nsampleCoordNW=vUV+vec2(-1.0,-1.0)*texelSize;\nsampleCoordSE=vUV+vec2( 1.0,1.0)*texelSize;\nsampleCoordNE=vUV+vec2( 1.0,-1.0)*texelSize;\nsampleCoordSW=vUV+vec2(-1.0,1.0)*texelSize;\ngl_Position=vec4(position,0.0,1.0);\n}";
|
|
zt.a.ShadersStore.fxaaVertexShader = Ac;
|
|
var xc = function(e) {
|
|
function t(t, i, n, r, o, s, a) {
|
|
void 0 === n && (n = null), void 0 === a && (a = _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
var c = e.call(this, t, "fxaa", ["texelSize"], null, i, n, r || ke.a.BILINEAR_SAMPLINGMODE, o, s, null, a, "fxaa", void 0, !0) || this,
|
|
l = c._getDefines();
|
|
return c.updateEffect(l), c.onApplyObservable.add(function(e) {
|
|
var t = c.texelSize;
|
|
e.setFloat2("texelSize", t.x, t.y)
|
|
}), c
|
|
}
|
|
return l.d(t, e), t.prototype._getDefines = function() {
|
|
var e = this.getEngine();
|
|
if (!e) return null;
|
|
var t = e.getGlInfo();
|
|
return t && t.renderer && t.renderer.toLowerCase().indexOf("mali") > -1 ? "#define MALI 1\n" : null
|
|
}, t
|
|
}(Ht),
|
|
Rc = "#include<helperFunctions>\n\nuniform sampler2D textureSampler;\n\nuniform float intensity;\nuniform float animatedSeed;\n\nvarying vec2 vUV;\nvoid main(void)\n{\ngl_FragColor=texture2D(textureSampler,vUV);\nvec2 seed=vUV*(animatedSeed);\nfloat grain=dither(seed,intensity);\n\nfloat lum=getLuminance(gl_FragColor.rgb);\nfloat grainAmount=(cos(-PI+(lum*PI*2.))+1.)/2.;\ngl_FragColor.rgb+=grain*grainAmount;\ngl_FragColor.rgb=max(gl_FragColor.rgb,0.0);\n}";
|
|
zt.a.ShadersStore.grainPixelShader = Rc;
|
|
var Pc = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
void 0 === a && (a = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === c && (c = !1);
|
|
var l = e.call(this, t, "grain", ["intensity", "animatedSeed"], [], i, n, r, o, s, null, a, void 0, null, c) || this;
|
|
return l.intensity = 30, l.animated = !1, l.onApplyObservable.add(function(e) {
|
|
e.setFloat("intensity", l.intensity), e.setFloat("animatedSeed", l.animated ? Math.random() + 1 : 1)
|
|
}), l
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
Sc = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nconst vec3 RGBLuminanceCoefficients=vec3(0.2126,0.7152,0.0722);\nvoid main(void)\n{\nvec4 tex=texture2D(textureSampler,vUV);\nvec3 c=tex.rgb;\nfloat luma=dot(c.rgb,RGBLuminanceCoefficients);\n\n\ngl_FragColor=vec4(pow(c,vec3(25.0-luma*15.0)),tex.a);\n}";
|
|
zt.a.ShadersStore.highlightsPixelShader = Sc;
|
|
var Cc = function(e) {
|
|
function t(t, i, n, r, o, s, a) {
|
|
return void 0 === a && (a = _.a.TEXTURETYPE_UNSIGNED_INT), e.call(this, t, "highlights", null, null, i, n, r, o, s, null, a) || this
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht);
|
|
zt.a.IncludesShadersStore.mrtFragmentDeclaration = "#if __VERSION__>=200\nlayout(location=0) out vec4 glFragData[{X}];\n#endif\n";
|
|
var Mc = "#extension GL_EXT_draw_buffers : require\nprecision highp float;\nprecision highp int;\nvarying vec3 vNormalV;\nvarying vec4 vViewPos;\n#ifdef POSITION\nvarying vec3 vPosition;\n#endif\n#ifdef VELOCITY\nvarying vec4 vCurrentPosition;\nvarying vec4 vPreviousPosition;\n#endif\n#ifdef ALPHATEST\nvarying vec2 vUV;\nuniform sampler2D diffuseSampler;\n#endif\n#include<mrtFragmentDeclaration>[RENDER_TARGET_COUNT]\nvoid main() {\n#ifdef ALPHATEST\nif (texture2D(diffuseSampler,vUV).a<0.4)\ndiscard;\n#endif\ngl_FragData[0]=vec4(vViewPos.z/vViewPos.w,0.0,0.0,1.0);\n\ngl_FragData[1]=vec4(normalize(vNormalV),1.0);\n\n#ifdef POSITION\ngl_FragData[POSITION_INDEX]=vec4(vPosition,1.0);\n#endif\n#ifdef VELOCITY\nvec2 a=(vCurrentPosition.xy/vCurrentPosition.w)*0.5+0.5;\nvec2 b=(vPreviousPosition.xy/vPreviousPosition.w)*0.5+0.5;\nvec2 velocity=abs(a-b);\nvelocity=vec2(pow(velocity.x,1.0/3.0),pow(velocity.y,1.0/3.0))*sign(a-b)*0.5+0.5;\ngl_FragData[VELOCITY_INDEX]=vec4(velocity,0.0,1.0);\n#endif\n}";
|
|
zt.a.ShadersStore.geometryPixelShader = Mc;
|
|
var Oc = "precision highp float;\nprecision highp int;\n#include<bonesDeclaration>\n#include<instancesDeclaration>\nattribute vec3 position;\nattribute vec3 normal;\n#if defined(ALPHATEST) || defined(NEED_UV)\nvarying vec2 vUV;\nuniform mat4 diffuseMatrix;\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#endif\n\nuniform mat4 viewProjection;\nuniform mat4 view;\nvarying vec3 vNormalV;\nvarying vec4 vViewPos;\n#ifdef POSITION\nvarying vec3 vPosition;\n#endif\n#ifdef VELOCITY\nuniform mat4 previousWorld;\nuniform mat4 previousViewProjection;\n#ifdef BONES_VELOCITY_ENABLED\n#if NUM_BONE_INFLUENCERS>0\nuniform mat4 mPreviousBones[BonesPerMesh];\n#endif\n#endif\nvarying vec4 vCurrentPosition;\nvarying vec4 vPreviousPosition;\n#endif\nvoid main(void)\n{\n#include<instancesVertex>\n#if defined(VELOCITY) && !defined(BONES_VELOCITY_ENABLED)\n\nvCurrentPosition=viewProjection*finalWorld*vec4(position,1.0);\nvPreviousPosition=previousViewProjection*previousWorld*vec4(position,1.0);\n#endif\n#include<bonesVertex>\nvec4 pos=vec4(finalWorld*vec4(position,1.0));\nvNormalV=normalize(vec3((view*finalWorld)*vec4(normal,0.0)));\nvViewPos=view*pos;\n#if defined(VELOCITY) && defined(BONES_VELOCITY_ENABLED)\nvCurrentPosition=viewProjection*finalWorld*vec4(position,1.0);\n#if NUM_BONE_INFLUENCERS>0\nmat4 previousInfluence;\npreviousInfluence=mPreviousBones[int(matricesIndices[0])]*matricesWeights[0];\n#if NUM_BONE_INFLUENCERS>1\npreviousInfluence+=mPreviousBones[int(matricesIndices[1])]*matricesWeights[1];\n#endif\n#if NUM_BONE_INFLUENCERS>2\npreviousInfluence+=mPreviousBones[int(matricesIndices[2])]*matricesWeights[2];\n#endif\n#if NUM_BONE_INFLUENCERS>3\npreviousInfluence+=mPreviousBones[int(matricesIndices[3])]*matricesWeights[3];\n#endif\n#if NUM_BONE_INFLUENCERS>4\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[0])]*matricesWeightsExtra[0];\n#endif\n#if NUM_BONE_INFLUENCERS>5\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[1])]*matricesWeightsExtra[1];\n#endif\n#if NUM_BONE_INFLUENCERS>6\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[2])]*matricesWeightsExtra[2];\n#endif\n#if NUM_BONE_INFLUENCERS>7\npreviousInfluence+=mPreviousBones[int(matricesIndicesExtra[3])]*matricesWeightsExtra[3];\n#endif\nvPreviousPosition=previousViewProjection*previousWorld*previousInfluence*vec4(position,1.0);\n#else\nvPreviousPosition=previousViewProjection*previousWorld*vec4(position,1.0);\n#endif\n#endif\n#ifdef POSITION\nvPosition=pos.xyz/pos.w;\n#endif\ngl_Position=viewProjection*finalWorld*vec4(position,1.0);\n#if defined(ALPHATEST) || defined(BASIC_RENDER)\n#ifdef UV1\nvUV=vec2(diffuseMatrix*vec4(uv,1.0,0.0));\n#endif\n#ifdef UV2\nvUV=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));\n#endif\n#endif\n}";
|
|
zt.a.ShadersStore.geometryVertexShader = Oc;
|
|
var Ic = function() {
|
|
function e(t, i) {
|
|
void 0 === i && (i = 1), this._previousTransformationMatrices = {}, this._previousBonesTransformationMatrices = {}, this.excludedSkinnedMeshesFromVelocity = [], this._enablePosition = !1, this._enableVelocity = !1, this._positionIndex = -1, this._velocityIndex = -1, this._scene = t, this._ratio = i, e._SceneComponentInitialization(this._scene), this._createRenderTargets()
|
|
}
|
|
return Object.defineProperty(e.prototype, "renderList", {
|
|
set: function(e) {
|
|
this._multiRenderTarget.renderList = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isSupported", {
|
|
get: function() {
|
|
return this._multiRenderTarget.isSupported
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getTextureIndex = function(t) {
|
|
switch (t) {
|
|
case e.POSITION_TEXTURE_TYPE:
|
|
return this._positionIndex;
|
|
case e.VELOCITY_TEXTURE_TYPE:
|
|
return this._velocityIndex;
|
|
default:
|
|
return -1
|
|
}
|
|
}, Object.defineProperty(e.prototype, "enablePosition", {
|
|
get: function() {
|
|
return this._enablePosition
|
|
},
|
|
set: function(e) {
|
|
this._enablePosition = e, this.dispose(), this._createRenderTargets()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "enableVelocity", {
|
|
get: function() {
|
|
return this._enableVelocity
|
|
},
|
|
set: function(e) {
|
|
this._enableVelocity = e, e || (this._previousTransformationMatrices = {}), this.dispose(), this._createRenderTargets()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "scene", {
|
|
get: function() {
|
|
return this._scene
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "ratio", {
|
|
get: function() {
|
|
return this._ratio
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.isReady = function(e, t) {
|
|
var i = e.getMaterial();
|
|
if (i && i.disableDepthWrite) return !1;
|
|
var n = [],
|
|
r = [Oi.b.PositionKind, Oi.b.NormalKind],
|
|
o = e.getMesh();
|
|
i && i.needAlphaTesting() && (n.push("#define ALPHATEST"), o.isVerticesDataPresent(Oi.b.UVKind) && (r.push(Oi.b.UVKind), n.push("#define UV1")), o.isVerticesDataPresent(Oi.b.UV2Kind) && (r.push(Oi.b.UV2Kind), n.push("#define UV2"))), this._enablePosition && (n.push("#define POSITION"), n.push("#define POSITION_INDEX " + this._positionIndex)), this._enableVelocity && (n.push("#define VELOCITY"), n.push("#define VELOCITY_INDEX " + this._velocityIndex), -1 === this.excludedSkinnedMeshesFromVelocity.indexOf(o) && n.push("#define BONES_VELOCITY_ENABLED")), o.useBones && o.computeBonesUsingShaders ? (r.push(Oi.b.MatricesIndicesKind), r.push(Oi.b.MatricesWeightsKind), o.numBoneInfluencers > 4 && (r.push(Oi.b.MatricesIndicesExtraKind), r.push(Oi.b.MatricesWeightsExtraKind)), n.push("#define NUM_BONE_INFLUENCERS " + o.numBoneInfluencers), n.push("#define BonesPerMesh " + (o.skeleton ? o.skeleton.bones.length + 1 : 0))) : n.push("#define NUM_BONE_INFLUENCERS 0"), t && (n.push("#define INSTANCES"), r.push("world0"), r.push("world1"), r.push("world2"), r.push("world3")), n.push("#define RENDER_TARGET_COUNT " + this._multiRenderTarget.textures.length);
|
|
var s = n.join("\n");
|
|
return this._cachedDefines !== s && (this._cachedDefines = s, this._effect = this._scene.getEngine().createEffect("geometry", r, ["world", "mBones", "viewProjection", "diffuseMatrix", "view", "previousWorld", "previousViewProjection", "mPreviousBones"], ["diffuseSampler"], s, void 0, void 0, void 0, {
|
|
buffersCount: this._enablePosition ? 3 : 2
|
|
})), this._effect.isReady()
|
|
}, e.prototype.getGBuffer = function() {
|
|
return this._multiRenderTarget
|
|
}, Object.defineProperty(e.prototype, "samples", {
|
|
get: function() {
|
|
return this._multiRenderTarget.samples
|
|
},
|
|
set: function(e) {
|
|
this._multiRenderTarget.samples = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.dispose = function() {
|
|
this.getGBuffer().dispose()
|
|
}, e.prototype._createRenderTargets = function() {
|
|
var e = this,
|
|
t = this._scene.getEngine(),
|
|
i = 2;
|
|
if (this._enablePosition && (this._positionIndex = i, i++), this._enableVelocity && (this._velocityIndex = i, i++), this._multiRenderTarget = new ds("gBuffer", {
|
|
width: t.getRenderWidth() * this._ratio,
|
|
height: t.getRenderHeight() * this._ratio
|
|
}, i, this._scene, {
|
|
generateMipMaps: !1,
|
|
generateDepthTexture: !0,
|
|
defaultType: _.a.TEXTURETYPE_FLOAT
|
|
}), this.isSupported) {
|
|
this._multiRenderTarget.wrapU = ke.a.CLAMP_ADDRESSMODE, this._multiRenderTarget.wrapV = ke.a.CLAMP_ADDRESSMODE, this._multiRenderTarget.refreshRate = 1, this._multiRenderTarget.renderParticles = !1, this._multiRenderTarget.renderList = null, this._multiRenderTarget.onClearObservable.add(function(e) {
|
|
e.clear(new o.f(0, 0, 0, 1), !0, !0, !0)
|
|
});
|
|
var n = function(t) {
|
|
var i = t.getRenderingMesh(),
|
|
n = e._scene,
|
|
r = n.getEngine(),
|
|
s = t.getMaterial();
|
|
if (s) {
|
|
if (e._enableVelocity && !e._previousTransformationMatrices[i.uniqueId] && (e._previousTransformationMatrices[i.uniqueId] = {
|
|
world: o.j.Identity(),
|
|
viewProjection: n.getTransformMatrix()
|
|
}, i.skeleton)) {
|
|
var a = i.skeleton.getTransformMatrices(i);
|
|
e._previousBonesTransformationMatrices[i.uniqueId] = e._copyBonesTransformationMatrices(a, new Float32Array(a.length))
|
|
}
|
|
r.setState(s.backFaceCulling, 0, !1, n.useRightHandedSystem);
|
|
var c = i._getInstancesRenderList(t._id);
|
|
if (!c.mustReturn) {
|
|
var l = r.getCaps().instancedArrays && null !== c.visibleInstances[t._id];
|
|
if (e.isReady(t, l)) {
|
|
if (r.enableEffect(e._effect), i._bind(t, e._effect, so.a.TriangleFillMode), e._effect.setMatrix("viewProjection", n.getTransformMatrix()), e._effect.setMatrix("view", n.getViewMatrix()), s && s.needAlphaTesting()) {
|
|
var u = s.getAlphaTestTexture();
|
|
u && (e._effect.setTexture("diffuseSampler", u), e._effect.setMatrix("diffuseMatrix", u.getTextureMatrix()))
|
|
}
|
|
i.useBones && i.computeBonesUsingShaders && i.skeleton && (e._effect.setMatrices("mBones", i.skeleton.getTransformMatrices(i)), e._enableVelocity && e._effect.setMatrices("mPreviousBones", e._previousBonesTransformationMatrices[i.uniqueId])), e._enableVelocity && (e._effect.setMatrix("previousWorld", e._previousTransformationMatrices[i.uniqueId].world), e._effect.setMatrix("previousViewProjection", e._previousTransformationMatrices[i.uniqueId].viewProjection)), i._processRendering(t, e._effect, so.a.TriangleFillMode, c, l, function(t, i) {
|
|
return e._effect.setMatrix("world", i)
|
|
})
|
|
}
|
|
e._enableVelocity && (e._previousTransformationMatrices[i.uniqueId].world = i.getWorldMatrix().clone(), e._previousTransformationMatrices[i.uniqueId].viewProjection = e._scene.getTransformMatrix().clone(), i.skeleton && e._copyBonesTransformationMatrices(i.skeleton.getTransformMatrices(i), e._previousBonesTransformationMatrices[i.uniqueId]))
|
|
}
|
|
}
|
|
};
|
|
this._multiRenderTarget.customRenderFunction = function(e, i, r, o) {
|
|
var s;
|
|
if (o.length) {
|
|
for (t.setColorWrite(!1), s = 0; s < o.length; s++) n(o.data[s]);
|
|
t.setColorWrite(!0)
|
|
}
|
|
for (s = 0; s < e.length; s++) n(e.data[s]);
|
|
for (s = 0; s < i.length; s++) n(i.data[s])
|
|
}
|
|
}
|
|
}, e.prototype._copyBonesTransformationMatrices = function(e, t) {
|
|
for (var i = 0; i < e.length; i++) t[i] = e[i];
|
|
return t
|
|
}, e.POSITION_TEXTURE_TYPE = 1, e.VELOCITY_TEXTURE_TYPE = 2, e._SceneComponentInitialization = function(e) {
|
|
throw be.a.WarnImport("GeometryBufferRendererSceneComponent")
|
|
}, e
|
|
}();
|
|
Object.defineProperty(W.a.prototype, "geometryBufferRenderer", {
|
|
get: function() {
|
|
this._geometryBufferRenderer
|
|
},
|
|
set: function(e) {
|
|
e && e.isSupported && (this._geometryBufferRenderer = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), W.a.prototype.enableGeometryBufferRenderer = function(e) {
|
|
return void 0 === e && (e = 1), this._geometryBufferRenderer ? this._geometryBufferRenderer : (this._geometryBufferRenderer = new Ic(this, e), this._geometryBufferRenderer.isSupported || (this._geometryBufferRenderer = null), this._geometryBufferRenderer)
|
|
}, W.a.prototype.disableGeometryBufferRenderer = function() {
|
|
this._geometryBufferRenderer && (this._geometryBufferRenderer.dispose(), this._geometryBufferRenderer = null)
|
|
};
|
|
var Dc = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_GEOMETRYBUFFERRENDERER, this.scene = e
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._gatherRenderTargetsStage.registerStep(Ae.a.STEP_GATHERRENDERTARGETS_GEOMETRYBUFFERRENDERER, this, this._gatherRenderTargets)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.dispose = function() {}, e.prototype._gatherRenderTargets = function(e) {
|
|
this.scene._geometryBufferRenderer && e.push(this.scene._geometryBufferRenderer.getGBuffer())
|
|
}, e
|
|
}();
|
|
Ic._SceneComponentInitialization = function(e) {
|
|
var t = e._getComponent(Ae.a.NAME_GEOMETRYBUFFERRENDERER);
|
|
t || (t = new Dc(e), e._addComponent(t))
|
|
};
|
|
var Lc = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform sampler2D velocitySampler;\nuniform float motionStrength;\nuniform float motionScale;\nuniform vec2 screenSize;\nvoid main(void)\n{\n#ifdef GEOMETRY_SUPPORTED\nvec2 texelSize=1.0/screenSize;\nvec2 velocityColor=texture2D(velocitySampler,vUV).rg*2.0-1.0;\nvec2 velocity=vec2(pow(velocityColor.r,3.0),pow(velocityColor.g,3.0));\nvelocity*=motionScale*motionStrength;\nfloat speed=length(velocity/texelSize);\nint samplesCount=int(clamp(speed,1.0,SAMPLES));\nvelocity=normalize(velocity)*texelSize;\nfloat hlim=float(-samplesCount)*0.5+0.5;\nvec4 result=texture2D(textureSampler,vUV);\nfor (int i=1; i<int(SAMPLES); ++i)\n{\nif (i>=samplesCount)\nbreak;\nvec2 offset=vUV+velocity*(hlim+float(i));\nresult+=texture2D(textureSampler,offset);\n}\ngl_FragColor=result/float(samplesCount);\ngl_FragColor.a=1.0;\n#else\ngl_FragColor=texture2D(textureSampler,vUV);\n#endif\n}\n";
|
|
zt.a.ShadersStore.motionBlurPixelShader = Lc;
|
|
var wc = function(e) {
|
|
function t(t, i, n, r, s, a, c, l, u) {
|
|
void 0 === l && (l = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === u && (u = !1);
|
|
var h = e.call(this, t, "motionBlur", ["motionStrength", "motionScale", "screenSize"], ["velocitySampler"], n, r, s, a, c, "#define GEOMETRY_SUPPORTED\n#define SAMPLES 64.0", l, void 0, null, u) || this;
|
|
return h.motionStrength = 1, h._motionBlurSamples = 32, h._geometryBufferRenderer = i.enableGeometryBufferRenderer(), h._geometryBufferRenderer ? (h._geometryBufferRenderer.enableVelocity = !0, h.onApply = function(e) {
|
|
if (e.setVector2("screenSize", new o.w(h.width, h.height)), e.setFloat("motionScale", i.getAnimationRatio()), e.setFloat("motionStrength", h.motionStrength), h._geometryBufferRenderer) {
|
|
var t = h._geometryBufferRenderer.getTextureIndex(Ic.VELOCITY_TEXTURE_TYPE);
|
|
e.setTexture("velocitySampler", h._geometryBufferRenderer.getGBuffer().textures[t])
|
|
}
|
|
}) : (p.a.Warn("Multiple Render Target support needed to compute object based motion blur"), h.updateEffect()), h
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "motionBlurSamples", {
|
|
get: function() {
|
|
return this._motionBlurSamples
|
|
},
|
|
set: function(e) {
|
|
this._motionBlurSamples = e, this._geometryBufferRenderer && this.updateEffect("#define GEOMETRY_SUPPORTED\n#define SAMPLES " + e.toFixed(1))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.excludeSkinnedMesh = function(e) {
|
|
this._geometryBufferRenderer && e.skeleton && this._geometryBufferRenderer.excludedSkinnedMeshesFromVelocity.push(e)
|
|
}, t.prototype.removeExcludedSkinnedMesh = function(e) {
|
|
if (this._geometryBufferRenderer && e.skeleton) {
|
|
var t = this._geometryBufferRenderer.excludedSkinnedMeshesFromVelocity.indexOf(e); - 1 !== t && this._geometryBufferRenderer.excludedSkinnedMeshesFromVelocity.splice(t, 1)
|
|
}
|
|
}, t.prototype.dispose = function(t) {
|
|
this._geometryBufferRenderer && (this._geometryBufferRenderer._previousTransformationMatrices = {}, this._geometryBufferRenderer._previousBonesTransformationMatrices = {}, this._geometryBufferRenderer.excludedSkinnedMeshesFromVelocity = []), e.prototype.dispose.call(this, t)
|
|
}, t
|
|
}(Ht),
|
|
Fc = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform sampler2D refractionSampler;\n\nuniform vec3 baseColor;\nuniform float depth;\nuniform float colorLevel;\nvoid main() {\nfloat ref=1.0-texture2D(refractionSampler,vUV).r;\nvec2 uv=vUV-vec2(0.5);\nvec2 offset=uv*depth*ref;\nvec3 sourceColor=texture2D(textureSampler,vUV-offset).rgb;\ngl_FragColor=vec4(sourceColor+sourceColor*ref*colorLevel,1.0);\n}";
|
|
zt.a.ShadersStore.refractionPixelShader = Fc;
|
|
var Nc = function(e) {
|
|
function t(t, i, n, r, o, s, a, c, l, u) {
|
|
var h = e.call(this, t, "refraction", ["baseColor", "depth", "colorLevel"], ["refractionSampler"], s, a, c, l, u) || this;
|
|
return h.color = n, h.depth = r, h.colorLevel = o, h._ownRefractionTexture = !0, h.onActivateObservable.add(function(e) {
|
|
h._refTexture = h._refTexture || new ke.a(i, e.getScene())
|
|
}), h.onApplyObservable.add(function(e) {
|
|
e.setColor3("baseColor", h.color), e.setFloat("depth", h.depth), e.setFloat("colorLevel", h.colorLevel), e.setTexture("refractionSampler", h._refTexture)
|
|
}), h
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "refractionTexture", {
|
|
get: function() {
|
|
return this._refTexture
|
|
},
|
|
set: function(e) {
|
|
this._refTexture && this._ownRefractionTexture && this._refTexture.dispose(), this._refTexture = e, this._ownRefractionTexture = !1
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.dispose = function(t) {
|
|
this._refTexture && this._ownRefractionTexture && (this._refTexture.dispose(), this._refTexture = null), e.prototype.dispose.call(this, t)
|
|
}, t
|
|
}(Ht),
|
|
Bc = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\nuniform vec2 screenSize;\nuniform vec2 sharpnessAmounts;\nvoid main(void)\n{\nvec2 onePixel=vec2(1.0,1.0)/screenSize;\nvec4 color=texture2D(textureSampler,vUV);\nvec4 edgeDetection=texture2D(textureSampler,vUV+onePixel*vec2(0,-1)) +\ntexture2D(textureSampler,vUV+onePixel*vec2(-1,0)) +\ntexture2D(textureSampler,vUV+onePixel*vec2(1,0)) +\ntexture2D(textureSampler,vUV+onePixel*vec2(0,1)) -\ncolor*4.0;\ngl_FragColor=max(vec4(color.rgb*sharpnessAmounts.y,color.a)-(sharpnessAmounts.x*vec4(edgeDetection.rgb,0)),0.);\n}";
|
|
zt.a.ShadersStore.sharpenPixelShader = Bc;
|
|
var Uc = function(e) {
|
|
function t(t, i, n, r, o, s, a, c) {
|
|
void 0 === a && (a = _.a.TEXTURETYPE_UNSIGNED_INT), void 0 === c && (c = !1);
|
|
var l = e.call(this, t, "sharpen", ["sharpnessAmounts", "screenSize"], null, i, n, r, o, s, null, a, void 0, null, c) || this;
|
|
return l.colorAmount = 1, l.edgeAmount = .3, l.onApply = function(e) {
|
|
e.setFloat2("screenSize", l.width, l.height), e.setFloat2("sharpnessAmounts", l.edgeAmount, l.colorAmount)
|
|
}, l
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
Vc = function() {
|
|
function e(e, t) {
|
|
this.engine = e, this._name = t, this._renderEffects = {}, this._renderEffectsForIsolatedPass = new Array, this._cameras = []
|
|
}
|
|
return Object.defineProperty(e.prototype, "name", {
|
|
get: function() {
|
|
return this._name
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.getClassName = function() {
|
|
return "PostProcessRenderPipeline"
|
|
}, Object.defineProperty(e.prototype, "isSupported", {
|
|
get: function() {
|
|
for (var e in this._renderEffects)
|
|
if (this._renderEffects.hasOwnProperty(e) && !this._renderEffects[e].isSupported) return !1;
|
|
return !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.addEffect = function(e) {
|
|
this._renderEffects[e._name] = e
|
|
}, e.prototype._rebuild = function() {}, e.prototype._enableEffect = function(e, t) {
|
|
var i = this._renderEffects[e];
|
|
i && i._enable(ye.h.MakeArray(t || this._cameras))
|
|
}, e.prototype._disableEffect = function(e, t) {
|
|
var i = this._renderEffects[e];
|
|
i && i._disable(ye.h.MakeArray(t || this._cameras))
|
|
}, e.prototype._attachCameras = function(e, t) {
|
|
var i = ye.h.MakeArray(e || this._cameras);
|
|
if (i) {
|
|
var n, r = [];
|
|
for (n = 0; n < i.length; n++) {
|
|
var o = i[n],
|
|
s = o.name; - 1 === this._cameras.indexOf(o) ? this._cameras[s] = o : t && r.push(n)
|
|
}
|
|
for (n = 0; n < r.length; n++) e.splice(r[n], 1);
|
|
for (var a in this._renderEffects) this._renderEffects.hasOwnProperty(a) && this._renderEffects[a]._attachCameras(i)
|
|
}
|
|
}, e.prototype._detachCameras = function(e) {
|
|
var t = ye.h.MakeArray(e || this._cameras);
|
|
if (t) {
|
|
for (var i in this._renderEffects) this._renderEffects.hasOwnProperty(i) && this._renderEffects[i]._detachCameras(t);
|
|
for (var n = 0; n < t.length; n++) this._cameras.splice(this._cameras.indexOf(t[n]), 1)
|
|
}
|
|
}, e.prototype._update = function() {
|
|
for (var e in this._renderEffects) this._renderEffects.hasOwnProperty(e) && this._renderEffects[e]._update();
|
|
for (var t = 0; t < this._cameras.length; t++) {
|
|
var i = this._cameras[t].name;
|
|
this._renderEffectsForIsolatedPass[i] && this._renderEffectsForIsolatedPass[i]._update()
|
|
}
|
|
}, e.prototype._reset = function() {
|
|
this._renderEffects = {}, this._renderEffectsForIsolatedPass = new Array
|
|
}, e.prototype._enableMSAAOnFirstPostProcess = function(e) {
|
|
var t = Object.keys(this._renderEffects);
|
|
if (1 === this.engine.webGLVersion) return !1;
|
|
if (t.length > 0) {
|
|
var i = this._renderEffects[t[0]].getPostProcesses();
|
|
i && (i[0].samples = e)
|
|
}
|
|
return !0
|
|
}, e.prototype.dispose = function() {}, l.c([Object(L.c)()], e.prototype, "_name", void 0), e
|
|
}(),
|
|
Gc = function() {
|
|
function e() {
|
|
this._renderPipelines = {}
|
|
}
|
|
return Object.defineProperty(e.prototype, "supportedPipelines", {
|
|
get: function() {
|
|
var e = [];
|
|
for (var t in this._renderPipelines)
|
|
if (this._renderPipelines.hasOwnProperty(t)) {
|
|
var i = this._renderPipelines[t];
|
|
i.isSupported && e.push(i)
|
|
} return e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.addPipeline = function(e) {
|
|
this._renderPipelines[e._name] = e
|
|
}, e.prototype.attachCamerasToRenderPipeline = function(e, t, i) {
|
|
void 0 === i && (i = !1);
|
|
var n = this._renderPipelines[e];
|
|
n && n._attachCameras(t, i)
|
|
}, e.prototype.detachCamerasFromRenderPipeline = function(e, t) {
|
|
var i = this._renderPipelines[e];
|
|
i && i._detachCameras(t)
|
|
}, e.prototype.enableEffectInPipeline = function(e, t, i) {
|
|
var n = this._renderPipelines[e];
|
|
n && n._enableEffect(t, i)
|
|
}, e.prototype.disableEffectInPipeline = function(e, t, i) {
|
|
var n = this._renderPipelines[e];
|
|
n && n._disableEffect(t, i)
|
|
}, e.prototype.update = function() {
|
|
for (var e in this._renderPipelines)
|
|
if (this._renderPipelines.hasOwnProperty(e)) {
|
|
var t = this._renderPipelines[e];
|
|
t.isSupported ? t._update() : (t.dispose(), delete this._renderPipelines[e])
|
|
}
|
|
}, e.prototype._rebuild = function() {
|
|
for (var e in this._renderPipelines) {
|
|
if (this._renderPipelines.hasOwnProperty(e)) this._renderPipelines[e]._rebuild()
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
for (var e in this._renderPipelines) {
|
|
if (this._renderPipelines.hasOwnProperty(e)) this._renderPipelines[e].dispose()
|
|
}
|
|
}, e
|
|
}();
|
|
Object.defineProperty(W.a.prototype, "postProcessRenderPipelineManager", {
|
|
get: function() {
|
|
if (!this._postProcessRenderPipelineManager) {
|
|
var e = this._getComponent(Ae.a.NAME_POSTPROCESSRENDERPIPELINEMANAGER);
|
|
e || (e = new kc(this), this._addComponent(e)), this._postProcessRenderPipelineManager = new Gc
|
|
}
|
|
return this._postProcessRenderPipelineManager
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
});
|
|
var kc = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_POSTPROCESSRENDERPIPELINEMANAGER, this.scene = e
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._gatherRenderTargetsStage.registerStep(Ae.a.STEP_GATHERRENDERTARGETS_POSTPROCESSRENDERPIPELINEMANAGER, this, this._gatherRenderTargets)
|
|
}, e.prototype.rebuild = function() {
|
|
this.scene._postProcessRenderPipelineManager && this.scene._postProcessRenderPipelineManager._rebuild()
|
|
}, e.prototype.dispose = function() {
|
|
this.scene._postProcessRenderPipelineManager && this.scene._postProcessRenderPipelineManager.dispose()
|
|
}, e.prototype._gatherRenderTargets = function() {
|
|
this.scene._postProcessRenderPipelineManager && this.scene._postProcessRenderPipelineManager.update()
|
|
}, e
|
|
}(),
|
|
zc = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
void 0 === t && (t = ""), void 0 === i && (i = !0), void 0 === n && (n = P.a.LastCreatedScene), void 0 === o && (o = !0);
|
|
var s = e.call(this, n.getEngine(), t) || this;
|
|
s._camerasToBeAttached = [], s.SharpenPostProcessId = "SharpenPostProcessEffect", s.ImageProcessingPostProcessId = "ImageProcessingPostProcessEffect", s.FxaaPostProcessId = "FxaaPostProcessEffect", s.ChromaticAberrationPostProcessId = "ChromaticAberrationPostProcessEffect", s.GrainPostProcessId = "GrainPostProcessEffect", s._glowLayer = null, s.animations = [], s._imageProcessingConfigurationObserver = null, s._sharpenEnabled = !1, s._bloomEnabled = !1, s._depthOfFieldEnabled = !1, s._depthOfFieldBlurLevel = pc.Low, s._fxaaEnabled = !1, s._imageProcessingEnabled = !0, s._bloomScale = .5, s._chromaticAberrationEnabled = !1, s._grainEnabled = !1, s._buildAllowed = !0, s._resizeObserver = null, s._hardwareScaleLevel = 1, s._bloomKernel = 64, s._bloomWeight = .15, s._bloomThreshold = .9, s._samples = 1, s._hasCleared = !1, s._prevPostProcess = null, s._prevPrevPostProcess = null, s._depthOfFieldSceneObserver = null, s._cameras = r || n.cameras, s._cameras = s._cameras.slice(), s._camerasToBeAttached = s._cameras.slice(), s._buildAllowed = o, s._scene = n;
|
|
var a = s._scene.getEngine().getCaps();
|
|
s._hdr = i && (a.textureHalfFloatRender || a.textureFloatRender), s._hdr ? a.textureHalfFloatRender ? s._defaultPipelineTextureType = _.a.TEXTURETYPE_HALF_FLOAT : a.textureFloatRender && (s._defaultPipelineTextureType = _.a.TEXTURETYPE_FLOAT) : s._defaultPipelineTextureType = _.a.TEXTURETYPE_UNSIGNED_INT, n.postProcessRenderPipelineManager.addPipeline(s);
|
|
var c = s._scene.getEngine();
|
|
return s.sharpen = new Uc("sharpen", 1, null, ke.a.BILINEAR_SAMPLINGMODE, c, !1, s._defaultPipelineTextureType, !0), s._sharpenEffect = new Ja(c, s.SharpenPostProcessId, function() {
|
|
return s.sharpen
|
|
}, !0), s.depthOfField = new mc(s._scene, null, s._depthOfFieldBlurLevel, s._defaultPipelineTextureType, !0), s.bloom = new nc(s._scene, s._bloomScale, s._bloomWeight, s.bloomKernel, s._defaultPipelineTextureType, !0), s.chromaticAberration = new oc("ChromaticAberration", c.getRenderWidth(), c.getRenderHeight(), 1, null, ke.a.BILINEAR_SAMPLINGMODE, c, !1, s._defaultPipelineTextureType, !0), s._chromaticAberrationEffect = new Ja(c, s.ChromaticAberrationPostProcessId, function() {
|
|
return s.chromaticAberration
|
|
}, !0), s.grain = new Pc("Grain", 1, null, ke.a.BILINEAR_SAMPLINGMODE, c, !1, s._defaultPipelineTextureType, !0), s._grainEffect = new Ja(c, s.GrainPostProcessId, function() {
|
|
return s.grain
|
|
}, !0), s._resizeObserver = c.onResizeObservable.add(function() {
|
|
s._hardwareScaleLevel = c.getHardwareScalingLevel(), s.bloomKernel = s.bloomKernel
|
|
}), s._imageProcessingConfigurationObserver = s._scene.imageProcessingConfiguration.onUpdateParameters.add(function() {
|
|
s.bloom._downscale._exposure = s._scene.imageProcessingConfiguration.exposure
|
|
}), s._buildPipeline(), s
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "scene", {
|
|
get: function() {
|
|
return this._scene
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "sharpenEnabled", {
|
|
get: function() {
|
|
return this._sharpenEnabled
|
|
},
|
|
set: function(e) {
|
|
this._sharpenEnabled !== e && (this._sharpenEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "bloomKernel", {
|
|
get: function() {
|
|
return this._bloomKernel
|
|
},
|
|
set: function(e) {
|
|
this._bloomKernel = e, this.bloom.kernel = e / this._hardwareScaleLevel
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "bloomWeight", {
|
|
get: function() {
|
|
return this._bloomWeight
|
|
},
|
|
set: function(e) {
|
|
this._bloomWeight !== e && (this.bloom.weight = e, this._bloomWeight = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "bloomThreshold", {
|
|
get: function() {
|
|
return this._bloomThreshold
|
|
},
|
|
set: function(e) {
|
|
this._bloomThreshold !== e && (this.bloom.threshold = e, this._bloomThreshold = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "bloomScale", {
|
|
get: function() {
|
|
return this._bloomScale
|
|
},
|
|
set: function(e) {
|
|
this._bloomScale !== e && (this._bloomScale = e, this._rebuildBloom(), this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "bloomEnabled", {
|
|
get: function() {
|
|
return this._bloomEnabled
|
|
},
|
|
set: function(e) {
|
|
this._bloomEnabled !== e && (this._bloomEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._rebuildBloom = function() {
|
|
var e = this.bloom;
|
|
this.bloom = new nc(this._scene, this.bloomScale, this._bloomWeight, this.bloomKernel, this._defaultPipelineTextureType, !1), this.bloom.threshold = e.threshold;
|
|
for (var t = 0; t < this._cameras.length; t++) e.disposeEffects(this._cameras[t])
|
|
}, Object.defineProperty(t.prototype, "depthOfFieldEnabled", {
|
|
get: function() {
|
|
return this._depthOfFieldEnabled
|
|
},
|
|
set: function(e) {
|
|
this._depthOfFieldEnabled !== e && (this._depthOfFieldEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "depthOfFieldBlurLevel", {
|
|
get: function() {
|
|
return this._depthOfFieldBlurLevel
|
|
},
|
|
set: function(e) {
|
|
if (this._depthOfFieldBlurLevel !== e) {
|
|
this._depthOfFieldBlurLevel = e;
|
|
var t = this.depthOfField;
|
|
this.depthOfField = new mc(this._scene, null, this._depthOfFieldBlurLevel, this._defaultPipelineTextureType, !1), this.depthOfField.focalLength = t.focalLength, this.depthOfField.focusDistance = t.focusDistance, this.depthOfField.fStop = t.fStop, this.depthOfField.lensSize = t.lensSize;
|
|
for (var i = 0; i < this._cameras.length; i++) t.disposeEffects(this._cameras[i]);
|
|
this._buildPipeline()
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "fxaaEnabled", {
|
|
get: function() {
|
|
return this._fxaaEnabled
|
|
},
|
|
set: function(e) {
|
|
this._fxaaEnabled !== e && (this._fxaaEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "samples", {
|
|
get: function() {
|
|
return this._samples
|
|
},
|
|
set: function(e) {
|
|
this._samples !== e && (this._samples = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "imageProcessingEnabled", {
|
|
get: function() {
|
|
return this._imageProcessingEnabled
|
|
},
|
|
set: function(e) {
|
|
this._imageProcessingEnabled !== e && (this._imageProcessingEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "glowLayerEnabled", {
|
|
get: function() {
|
|
return null != this._glowLayer
|
|
},
|
|
set: function(e) {
|
|
e && !this._glowLayer ? this._glowLayer = new po("", this._scene) : !e && this._glowLayer && (this._glowLayer.dispose(), this._glowLayer = null)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "glowLayer", {
|
|
get: function() {
|
|
return this._glowLayer
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "chromaticAberrationEnabled", {
|
|
get: function() {
|
|
return this._chromaticAberrationEnabled
|
|
},
|
|
set: function(e) {
|
|
this._chromaticAberrationEnabled !== e && (this._chromaticAberrationEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "grainEnabled", {
|
|
get: function() {
|
|
return this._grainEnabled
|
|
},
|
|
set: function(e) {
|
|
this._grainEnabled !== e && (this._grainEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "DefaultRenderingPipeline"
|
|
}, t.prototype.prepare = function() {
|
|
var e = this._buildAllowed;
|
|
this._buildAllowed = !0, this._buildPipeline(), this._buildAllowed = e
|
|
}, t.prototype._setAutoClearAndTextureSharing = function(e, t) {
|
|
void 0 === t && (t = !1), this._hasCleared ? e.autoClear = !1 : (e.autoClear = !0, this._scene.autoClear = !1, this._hasCleared = !0), t || (this._prevPrevPostProcess ? e.shareOutputWith(this._prevPrevPostProcess) : e.useOwnOutput(), this._prevPostProcess && (this._prevPrevPostProcess = this._prevPostProcess), this._prevPostProcess = e)
|
|
}, t.prototype._buildPipeline = function() {
|
|
var e = this;
|
|
if (this._buildAllowed) {
|
|
this._scene.autoClear = !0;
|
|
var t = this._scene.getEngine();
|
|
if (this._disposePostProcesses(), null !== this._cameras && (this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras), this._cameras = this._camerasToBeAttached.slice()), this._reset(), this._prevPostProcess = null, this._prevPrevPostProcess = null, this._hasCleared = !1, this.depthOfFieldEnabled) {
|
|
if (this._cameras.length > 1) {
|
|
for (var i = 0, n = this._cameras; i < n.length; i++) {
|
|
var r = n[i];
|
|
(o = this._scene.enableDepthRenderer(r)).useOnlyInActiveCamera = !0
|
|
}
|
|
this._depthOfFieldSceneObserver = this._scene.onAfterRenderTargetsRenderObservable.add(function(t) {
|
|
e._cameras.indexOf(t.activeCamera) > -1 && (e.depthOfField.depthTexture = t.enableDepthRenderer(t.activeCamera).getDepthMap())
|
|
})
|
|
} else {
|
|
this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);
|
|
var o = this._scene.enableDepthRenderer(this._cameras[0]);
|
|
this.depthOfField.depthTexture = o.getDepthMap()
|
|
}
|
|
this.depthOfField._isReady() || this.depthOfField._updateEffects(), this.addEffect(this.depthOfField), this._setAutoClearAndTextureSharing(this.depthOfField._effects[0], !0)
|
|
} else this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver);
|
|
this.bloomEnabled && (this.bloom._isReady() || this.bloom._updateEffects(), this.addEffect(this.bloom), this._setAutoClearAndTextureSharing(this.bloom._effects[0], !0)), this._imageProcessingEnabled && (this.imageProcessing = new Ci("imageProcessing", 1, null, ke.a.BILINEAR_SAMPLINGMODE, t, !1, this._defaultPipelineTextureType), this._hdr ? (this.addEffect(new Ja(t, this.ImageProcessingPostProcessId, function() {
|
|
return e.imageProcessing
|
|
}, !0)), this._setAutoClearAndTextureSharing(this.imageProcessing)) : this._scene.imageProcessingConfiguration.applyByPostProcess = !1), this.sharpenEnabled && (this.sharpen.isReady() || this.sharpen.updateEffect(), this.addEffect(this._sharpenEffect), this._setAutoClearAndTextureSharing(this.sharpen)), this.grainEnabled && (this.grain.isReady() || this.grain.updateEffect(), this.addEffect(this._grainEffect), this._setAutoClearAndTextureSharing(this.grain)), this.chromaticAberrationEnabled && (this.chromaticAberration.isReady() || this.chromaticAberration.updateEffect(), this.addEffect(this._chromaticAberrationEffect), this._setAutoClearAndTextureSharing(this.chromaticAberration)), this.fxaaEnabled && (this.fxaa = new xc("fxaa", 1, null, ke.a.BILINEAR_SAMPLINGMODE, t, !1, this._defaultPipelineTextureType), this.addEffect(new Ja(t, this.FxaaPostProcessId, function() {
|
|
return e.fxaa
|
|
}, !0)), this._setAutoClearAndTextureSharing(this.fxaa, !0)), null !== this._cameras && this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras), !this._enableMSAAOnFirstPostProcess(this.samples) && this.samples > 1 && p.a.Warn("MSAA failed to enable, MSAA is only supported in browsers that support webGL >= 2.0")
|
|
}
|
|
}, t.prototype._disposePostProcesses = function(e) {
|
|
void 0 === e && (e = !1);
|
|
for (var t = 0; t < this._cameras.length; t++) {
|
|
var i = this._cameras[t];
|
|
this.imageProcessing && this.imageProcessing.dispose(i), this.fxaa && this.fxaa.dispose(i), e && (this.sharpen && this.sharpen.dispose(i), this.depthOfField && (this._scene.onAfterRenderTargetsRenderObservable.remove(this._depthOfFieldSceneObserver), this.depthOfField.disposeEffects(i)), this.bloom && this.bloom.disposeEffects(i), this.chromaticAberration && this.chromaticAberration.dispose(i), this.grain && this.grain.dispose(i), this._glowLayer && this._glowLayer.dispose())
|
|
}
|
|
this.imageProcessing = null, this.fxaa = null, e && (this.sharpen = null, this._sharpenEffect = null, this.depthOfField = null, this.bloom = null, this.chromaticAberration = null, this._chromaticAberrationEffect = null, this.grain = null, this._grainEffect = null, this._glowLayer = null)
|
|
}, t.prototype.addCamera = function(e) {
|
|
this._camerasToBeAttached.push(e), this._buildPipeline()
|
|
}, t.prototype.removeCamera = function(e) {
|
|
var t = this._camerasToBeAttached.indexOf(e);
|
|
this._camerasToBeAttached.splice(t, 1), this._buildPipeline()
|
|
}, t.prototype.dispose = function() {
|
|
this._disposePostProcesses(!0), this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras), this._scene.autoClear = !0, this._resizeObserver && (this._scene.getEngine().onResizeObservable.remove(this._resizeObserver), this._resizeObserver = null), this._scene.imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingConfigurationObserver), e.prototype.dispose.call(this)
|
|
}, t.prototype.serialize = function() {
|
|
var e = L.a.Serialize(this);
|
|
return e.customType = "DefaultRenderingPipeline", e
|
|
}, t.Parse = function(e, i, n) {
|
|
return L.a.Parse(function() {
|
|
return new t(e._name, e._name._hdr, i)
|
|
}, e, i, n)
|
|
}, l.c([Object(L.c)()], t.prototype, "sharpenEnabled", null), l.c([Object(L.c)()], t.prototype, "bloomKernel", null), l.c([Object(L.c)()], t.prototype, "_bloomWeight", void 0), l.c([Object(L.c)()], t.prototype, "_bloomThreshold", void 0), l.c([Object(L.c)()], t.prototype, "_hdr", void 0), l.c([Object(L.c)()], t.prototype, "bloomWeight", null), l.c([Object(L.c)()], t.prototype, "bloomThreshold", null), l.c([Object(L.c)()], t.prototype, "bloomScale", null), l.c([Object(L.c)()], t.prototype, "bloomEnabled", null), l.c([Object(L.c)()], t.prototype, "depthOfFieldEnabled", null), l.c([Object(L.c)()], t.prototype, "depthOfFieldBlurLevel", null), l.c([Object(L.c)()], t.prototype, "fxaaEnabled", null), l.c([Object(L.c)()], t.prototype, "samples", null), l.c([Object(L.c)()], t.prototype, "imageProcessingEnabled", null), l.c([Object(L.c)()], t.prototype, "glowLayerEnabled", null), l.c([Object(L.c)()], t.prototype, "chromaticAberrationEnabled", null), l.c([Object(L.c)()], t.prototype, "grainEnabled", null), t
|
|
}(Vc);
|
|
s.a.RegisteredTypes["BABYLON.DefaultRenderingPipeline"] = zc;
|
|
var jc = "\nuniform sampler2D textureSampler;\n\nuniform float gain;\nuniform float threshold;\nuniform float screen_width;\nuniform float screen_height;\n\nvarying vec2 vUV;\n\nvec4 highlightColor(vec4 color) {\nvec4 highlight=color;\nfloat luminance=dot(highlight.rgb,vec3(0.2125,0.7154,0.0721));\nfloat lum_threshold;\nif (threshold>1.0) { lum_threshold=0.94+0.01*threshold; }\nelse { lum_threshold=0.5+0.44*threshold; }\nluminance=clamp((luminance-lum_threshold)*(1.0/(1.0-lum_threshold)),0.0,1.0);\nhighlight*=luminance*gain;\nhighlight.a=1.0;\nreturn highlight;\n}\nvoid main(void)\n{\nvec4 original=texture2D(textureSampler,vUV);\n\nif (gain == -1.0) {\ngl_FragColor=vec4(0.0,0.0,0.0,1.0);\nreturn;\n}\nfloat w=2.0/screen_width;\nfloat h=2.0/screen_height;\nfloat weight=1.0;\n\nvec4 blurred=vec4(0.0,0.0,0.0,0.0);\n#ifdef PENTAGON\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.84*w,0.43*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(0.48*w,-1.29*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(0.61*w,1.51*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.55*w,-0.74*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.71*w,-0.52*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.94*w,1.59*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.40*w,-1.87*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.62*w,1.16*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.09*w,0.25*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.46*w,-1.71*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(0.08*w,2.42*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.85*w,-1.89*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.89*w,0.16*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.29*w,1.88*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(0.40*w,-2.81*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.54*w,2.26*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.60*w,-0.61*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.31*w,-1.30*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.83*w,2.53*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.12*w,-2.48*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.60*w,1.11*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.82*w,0.99*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.50*w,-2.81*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(0.85*w,3.33*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.94*w,-1.92*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(3.27*w,-0.53*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.95*w,2.48*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.23*w,-3.04*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.17*w,2.05*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.97*w,-0.04*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.25*w,-2.00*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.31*w,3.08*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.94*w,-2.59*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(3.37*w,0.64*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-3.13*w,1.93*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.03*w,-3.65*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.60*w,3.17*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-3.14*w,-1.19*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(3.00*w,-1.19*h)));\n#else\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.85*w,0.36*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(0.52*w,-1.14*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(0.46*w,1.42*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.46*w,-0.83*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.79*w,-0.42*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.11*w,1.62*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.29*w,-2.07*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.69*w,1.39*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.28*w,0.12*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.65*w,-1.69*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.08*w,2.44*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.63*w,-1.90*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.55*w,0.31*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.13*w,1.52*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(0.56*w,-2.61*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.38*w,2.34*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.64*w,-0.81*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.53*w,-1.21*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.06*w,2.63*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.00*w,-2.69*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.59*w,1.32*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.82*w,0.78*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.57*w,-2.50*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(0.54*w,2.93*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.39*w,-1.81*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(3.01*w,-0.28*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.04*w,2.25*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.02*w,-3.05*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.09*w,2.25*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-3.07*w,-0.25*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.44*w,-1.90*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-0.52*w,3.05*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-1.68*w,-2.61*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(3.01*w,0.79*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.76*w,1.46*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.05*w,-2.94*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(1.21*w,2.88*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(-2.84*w,-1.30*h)));\nblurred+=highlightColor(texture2D(textureSampler,vUV+vec2(2.98*w,-0.96*h)));\n#endif\nblurred/=39.0;\ngl_FragColor=blurred;\n\n}";
|
|
zt.a.ShadersStore.lensHighlightsPixelShader = jc;
|
|
var Hc = "\n\n\n\n\nuniform sampler2D textureSampler;\nuniform sampler2D highlightsSampler;\nuniform sampler2D depthSampler;\nuniform sampler2D grainSampler;\n\nuniform float grain_amount;\nuniform bool blur_noise;\nuniform float screen_width;\nuniform float screen_height;\nuniform float distortion;\nuniform bool dof_enabled;\n\nuniform float screen_distance;\nuniform float aperture;\nuniform float darken;\nuniform float edge_blur;\nuniform bool highlights;\n\nuniform float near;\nuniform float far;\n\nvarying vec2 vUV;\n\n#define PI 3.14159265\n#define TWOPI 6.28318530\n#define inverse_focal_length 0.1\n\nvec2 centered_screen_pos;\nvec2 distorted_coords;\nfloat radius2;\nfloat radius;\n\nvec2 rand(vec2 co)\n{\nfloat noise1=(fract(sin(dot(co,vec2(12.9898,78.233)))*43758.5453));\nfloat noise2=(fract(sin(dot(co,vec2(12.9898,78.233)*2.0))*43758.5453));\nreturn clamp(vec2(noise1,noise2),0.0,1.0);\n}\n\nvec2 getDistortedCoords(vec2 coords) {\nif (distortion == 0.0) { return coords; }\nvec2 direction=1.0*normalize(centered_screen_pos);\nvec2 dist_coords=vec2(0.5,0.5);\ndist_coords.x=0.5+direction.x*radius2*1.0;\ndist_coords.y=0.5+direction.y*radius2*1.0;\nfloat dist_amount=clamp(distortion*0.23,0.0,1.0);\ndist_coords=mix(coords,dist_coords,dist_amount);\nreturn dist_coords;\n}\n\nfloat sampleScreen(inout vec4 color,const in vec2 offset,const in float weight) {\n\nvec2 coords=distorted_coords;\nfloat angle=rand(coords*100.0).x*TWOPI;\ncoords+=vec2(offset.x*cos(angle)-offset.y*sin(angle),offset.x*sin(angle)+offset.y*cos(angle));\ncolor+=texture2D(textureSampler,coords)*weight;\nreturn weight;\n}\n\nfloat getBlurLevel(float size) {\nreturn min(3.0,ceil(size/1.0));\n}\n\nvec4 getBlurColor(float size) {\nvec4 col=texture2D(textureSampler,distorted_coords);\nif (size == 0.0) { return col; }\n\n\nfloat blur_level=getBlurLevel(size);\nfloat w=(size/screen_width);\nfloat h=(size/screen_height);\nfloat total_weight=1.0;\nvec2 sample_coords;\ntotal_weight+=sampleScreen(col,vec2(-0.50*w,0.24*h),0.93);\ntotal_weight+=sampleScreen(col,vec2(0.30*w,-0.75*h),0.90);\ntotal_weight+=sampleScreen(col,vec2(0.36*w,0.96*h),0.87);\ntotal_weight+=sampleScreen(col,vec2(-1.08*w,-0.55*h),0.85);\ntotal_weight+=sampleScreen(col,vec2(1.33*w,-0.37*h),0.83);\ntotal_weight+=sampleScreen(col,vec2(-0.82*w,1.31*h),0.80);\ntotal_weight+=sampleScreen(col,vec2(-0.31*w,-1.67*h),0.78);\ntotal_weight+=sampleScreen(col,vec2(1.47*w,1.11*h),0.76);\ntotal_weight+=sampleScreen(col,vec2(-1.97*w,0.19*h),0.74);\ntotal_weight+=sampleScreen(col,vec2(1.42*w,-1.57*h),0.72);\nif (blur_level>1.0) {\ntotal_weight+=sampleScreen(col,vec2(0.01*w,2.25*h),0.70);\ntotal_weight+=sampleScreen(col,vec2(-1.62*w,-1.74*h),0.67);\ntotal_weight+=sampleScreen(col,vec2(2.49*w,0.20*h),0.65);\ntotal_weight+=sampleScreen(col,vec2(-2.07*w,1.61*h),0.63);\ntotal_weight+=sampleScreen(col,vec2(0.46*w,-2.70*h),0.61);\ntotal_weight+=sampleScreen(col,vec2(1.55*w,2.40*h),0.59);\ntotal_weight+=sampleScreen(col,vec2(-2.88*w,-0.75*h),0.56);\ntotal_weight+=sampleScreen(col,vec2(2.73*w,-1.44*h),0.54);\ntotal_weight+=sampleScreen(col,vec2(-1.08*w,3.02*h),0.52);\ntotal_weight+=sampleScreen(col,vec2(-1.28*w,-3.05*h),0.49);\n}\nif (blur_level>2.0) {\ntotal_weight+=sampleScreen(col,vec2(3.11*w,1.43*h),0.46);\ntotal_weight+=sampleScreen(col,vec2(-3.36*w,1.08*h),0.44);\ntotal_weight+=sampleScreen(col,vec2(1.80*w,-3.16*h),0.41);\ntotal_weight+=sampleScreen(col,vec2(0.83*w,3.65*h),0.38);\ntotal_weight+=sampleScreen(col,vec2(-3.16*w,-2.19*h),0.34);\ntotal_weight+=sampleScreen(col,vec2(3.92*w,-0.53*h),0.31);\ntotal_weight+=sampleScreen(col,vec2(-2.59*w,3.12*h),0.26);\ntotal_weight+=sampleScreen(col,vec2(-0.20*w,-4.15*h),0.22);\ntotal_weight+=sampleScreen(col,vec2(3.02*w,3.00*h),0.15);\n}\ncol/=total_weight;\n\nif (darken>0.0) {\ncol.rgb*=clamp(0.3,1.0,1.05-size*0.5*darken);\n}\n\n\n\n\nreturn col;\n}\nvoid main(void)\n{\n\ncentered_screen_pos=vec2(vUV.x-0.5,vUV.y-0.5);\nradius2=centered_screen_pos.x*centered_screen_pos.x+centered_screen_pos.y*centered_screen_pos.y;\nradius=sqrt(radius2);\ndistorted_coords=getDistortedCoords(vUV);\nvec2 texels_coords=vec2(vUV.x*screen_width,vUV.y*screen_height);\nfloat depth=texture2D(depthSampler,distorted_coords).r;\nfloat distance=near+(far-near)*depth;\nvec4 color=texture2D(textureSampler,vUV);\n\n\nfloat coc=abs(aperture*(screen_distance*(inverse_focal_length-1.0/distance)-1.0));\n\nif (dof_enabled == false || coc<0.07) { coc=0.0; }\n\nfloat edge_blur_amount=0.0;\nif (edge_blur>0.0) {\nedge_blur_amount=clamp((radius*2.0-1.0+0.15*edge_blur)*1.5,0.0,1.0)*1.3;\n}\n\nfloat blur_amount=max(edge_blur_amount,coc);\n\nif (blur_amount == 0.0) {\ngl_FragColor=texture2D(textureSampler,distorted_coords);\n}\nelse {\n\ngl_FragColor=getBlurColor(blur_amount*1.7);\n\nif (highlights) {\ngl_FragColor.rgb+=clamp(coc,0.0,1.0)*texture2D(highlightsSampler,distorted_coords).rgb;\n}\nif (blur_noise) {\n\nvec2 noise=rand(distorted_coords)*0.01*blur_amount;\nvec2 blurred_coord=vec2(distorted_coords.x+noise.x,distorted_coords.y+noise.y);\ngl_FragColor=0.04*texture2D(textureSampler,blurred_coord)+0.96*gl_FragColor;\n}\n}\n\nif (grain_amount>0.0) {\nvec4 grain_color=texture2D(grainSampler,texels_coords*0.003);\ngl_FragColor.rgb+=(-0.5+grain_color.rgb)*0.30*grain_amount;\n}\n}\n";
|
|
zt.a.ShadersStore.depthOfFieldPixelShader = Hc;
|
|
var Wc = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
void 0 === r && (r = 1);
|
|
var s = e.call(this, n.getEngine(), t) || this;
|
|
return s.LensChromaticAberrationEffect = "LensChromaticAberrationEffect", s.HighlightsEnhancingEffect = "HighlightsEnhancingEffect", s.LensDepthOfFieldEffect = "LensDepthOfFieldEffect", s._pentagonBokehIsEnabled = !1, s._scene = n, s._depthTexture = n.enableDepthRenderer().getDepthMap(), i.grain_texture ? s._grainTexture = i.grain_texture : s._createGrainTexture(), s._edgeBlur = i.edge_blur ? i.edge_blur : 0, s._grainAmount = i.grain_amount ? i.grain_amount : 0, s._chromaticAberration = i.chromatic_aberration ? i.chromatic_aberration : 0, s._distortion = i.distortion ? i.distortion : 0, s._highlightsGain = void 0 !== i.dof_gain ? i.dof_gain : -1, s._highlightsThreshold = i.dof_threshold ? i.dof_threshold : 1, s._dofDistance = void 0 !== i.dof_focus_distance ? i.dof_focus_distance : -1, s._dofAperture = i.dof_aperture ? i.dof_aperture : 1, s._dofDarken = i.dof_darken ? i.dof_darken : 0, s._dofPentagon = void 0 === i.dof_pentagon || i.dof_pentagon, s._blurNoise = void 0 === i.blur_noise || i.blur_noise, s._createChromaticAberrationPostProcess(r), s._createHighlightsPostProcess(r), s._createDepthOfFieldPostProcess(r / 4), s.addEffect(new Ja(n.getEngine(), s.LensChromaticAberrationEffect, function() {
|
|
return s._chromaticAberrationPostProcess
|
|
}, !0)), s.addEffect(new Ja(n.getEngine(), s.HighlightsEnhancingEffect, function() {
|
|
return s._highlightsPostProcess
|
|
}, !0)), s.addEffect(new Ja(n.getEngine(), s.LensDepthOfFieldEffect, function() {
|
|
return s._depthOfFieldPostProcess
|
|
}, !0)), -1 === s._highlightsGain && s._disableEffect(s.HighlightsEnhancingEffect, null), n.postProcessRenderPipelineManager.addPipeline(s), o && n.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(t, o), s
|
|
}
|
|
return l.d(t, e), t.prototype.getClassName = function() {
|
|
return "LensRenderingPipeline"
|
|
}, Object.defineProperty(t.prototype, "scene", {
|
|
get: function() {
|
|
return this._scene
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "edgeBlur", {
|
|
get: function() {
|
|
return this._edgeBlur
|
|
},
|
|
set: function(e) {
|
|
this.setEdgeBlur(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "grainAmount", {
|
|
get: function() {
|
|
return this._grainAmount
|
|
},
|
|
set: function(e) {
|
|
this.setGrainAmount(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "chromaticAberration", {
|
|
get: function() {
|
|
return this._chromaticAberration
|
|
},
|
|
set: function(e) {
|
|
this.setChromaticAberration(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "dofAperture", {
|
|
get: function() {
|
|
return this._dofAperture
|
|
},
|
|
set: function(e) {
|
|
this.setAperture(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "edgeDistortion", {
|
|
get: function() {
|
|
return this._distortion
|
|
},
|
|
set: function(e) {
|
|
this.setEdgeDistortion(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "dofDistortion", {
|
|
get: function() {
|
|
return this._dofDistance
|
|
},
|
|
set: function(e) {
|
|
this.setFocusDistance(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "darkenOutOfFocus", {
|
|
get: function() {
|
|
return this._dofDarken
|
|
},
|
|
set: function(e) {
|
|
this.setDarkenOutOfFocus(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "blurNoise", {
|
|
get: function() {
|
|
return this._blurNoise
|
|
},
|
|
set: function(e) {
|
|
this._blurNoise = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "pentagonBokeh", {
|
|
get: function() {
|
|
return this._pentagonBokehIsEnabled
|
|
},
|
|
set: function(e) {
|
|
e ? this.enablePentagonBokeh() : this.disablePentagonBokeh()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "highlightsGain", {
|
|
get: function() {
|
|
return this._highlightsGain
|
|
},
|
|
set: function(e) {
|
|
this.setHighlightsGain(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "highlightsThreshold", {
|
|
get: function() {
|
|
return this._highlightsThreshold
|
|
},
|
|
set: function(e) {
|
|
this.setHighlightsThreshold(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.setEdgeBlur = function(e) {
|
|
this._edgeBlur = e
|
|
}, t.prototype.disableEdgeBlur = function() {
|
|
this._edgeBlur = 0
|
|
}, t.prototype.setGrainAmount = function(e) {
|
|
this._grainAmount = e
|
|
}, t.prototype.disableGrain = function() {
|
|
this._grainAmount = 0
|
|
}, t.prototype.setChromaticAberration = function(e) {
|
|
this._chromaticAberration = e
|
|
}, t.prototype.disableChromaticAberration = function() {
|
|
this._chromaticAberration = 0
|
|
}, t.prototype.setEdgeDistortion = function(e) {
|
|
this._distortion = e
|
|
}, t.prototype.disableEdgeDistortion = function() {
|
|
this._distortion = 0
|
|
}, t.prototype.setFocusDistance = function(e) {
|
|
this._dofDistance = e
|
|
}, t.prototype.disableDepthOfField = function() {
|
|
this._dofDistance = -1
|
|
}, t.prototype.setAperture = function(e) {
|
|
this._dofAperture = e
|
|
}, t.prototype.setDarkenOutOfFocus = function(e) {
|
|
this._dofDarken = e
|
|
}, t.prototype.enablePentagonBokeh = function() {
|
|
this._highlightsPostProcess.updateEffect("#define PENTAGON\n"), this._pentagonBokehIsEnabled = !0
|
|
}, t.prototype.disablePentagonBokeh = function() {
|
|
this._pentagonBokehIsEnabled = !1, this._highlightsPostProcess.updateEffect()
|
|
}, t.prototype.enableNoiseBlur = function() {
|
|
this._blurNoise = !0
|
|
}, t.prototype.disableNoiseBlur = function() {
|
|
this._blurNoise = !1
|
|
}, t.prototype.setHighlightsGain = function(e) {
|
|
this._highlightsGain = e
|
|
}, t.prototype.setHighlightsThreshold = function(e) {
|
|
-1 === this._highlightsGain && (this._highlightsGain = 1), this._highlightsThreshold = e
|
|
}, t.prototype.disableHighlights = function() {
|
|
this._highlightsGain = -1
|
|
}, t.prototype.dispose = function(e) {
|
|
void 0 === e && (e = !1), this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._scene.cameras), this._chromaticAberrationPostProcess = null, this._highlightsPostProcess = null, this._depthOfFieldPostProcess = null, this._grainTexture.dispose(), e && this._scene.disableDepthRenderer()
|
|
}, t.prototype._createChromaticAberrationPostProcess = function(e) {
|
|
var t = this;
|
|
this._chromaticAberrationPostProcess = new Ht("LensChromaticAberration", "chromaticAberration", ["chromatic_aberration", "screen_width", "screen_height", "direction", "radialIntensity", "centerPosition"], [], e, null, ke.a.TRILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1), this._chromaticAberrationPostProcess.onApply = function(e) {
|
|
e.setFloat("chromatic_aberration", t._chromaticAberration), e.setFloat("screen_width", t._scene.getEngine().getRenderWidth()), e.setFloat("screen_height", t._scene.getEngine().getRenderHeight()), e.setFloat("radialIntensity", 1), e.setFloat2("direction", 17, 17), e.setFloat2("centerPosition", .5, .5)
|
|
}
|
|
}, t.prototype._createHighlightsPostProcess = function(e) {
|
|
var t = this;
|
|
this._highlightsPostProcess = new Ht("LensHighlights", "lensHighlights", ["gain", "threshold", "screen_width", "screen_height"], [], e, null, ke.a.TRILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, this._dofPentagon ? "#define PENTAGON\n" : ""), this._highlightsPostProcess.onApply = function(e) {
|
|
e.setFloat("gain", t._highlightsGain), e.setFloat("threshold", t._highlightsThreshold), e.setTextureFromPostProcess("textureSampler", t._chromaticAberrationPostProcess), e.setFloat("screen_width", t._scene.getEngine().getRenderWidth()), e.setFloat("screen_height", t._scene.getEngine().getRenderHeight())
|
|
}
|
|
}, t.prototype._createDepthOfFieldPostProcess = function(e) {
|
|
var t = this;
|
|
this._depthOfFieldPostProcess = new Ht("LensDepthOfField", "depthOfField", ["grain_amount", "blur_noise", "screen_width", "screen_height", "distortion", "dof_enabled", "screen_distance", "aperture", "darken", "edge_blur", "highlights", "near", "far"], ["depthSampler", "grainSampler", "highlightsSampler"], e, null, ke.a.TRILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1), this._depthOfFieldPostProcess.onApply = function(e) {
|
|
e.setTexture("depthSampler", t._depthTexture), e.setTexture("grainSampler", t._grainTexture), e.setTextureFromPostProcess("textureSampler", t._highlightsPostProcess), e.setTextureFromPostProcess("highlightsSampler", t._depthOfFieldPostProcess), e.setFloat("grain_amount", t._grainAmount), e.setBool("blur_noise", t._blurNoise), e.setFloat("screen_width", t._scene.getEngine().getRenderWidth()), e.setFloat("screen_height", t._scene.getEngine().getRenderHeight()), e.setFloat("distortion", t._distortion), e.setBool("dof_enabled", -1 !== t._dofDistance), e.setFloat("screen_distance", 1 / (.1 - 1 / t._dofDistance)), e.setFloat("aperture", t._dofAperture), e.setFloat("darken", t._dofDarken), e.setFloat("edge_blur", t._edgeBlur), e.setBool("highlights", -1 !== t._highlightsGain), t._scene.activeCamera && (e.setFloat("near", t._scene.activeCamera.minZ), e.setFloat("far", t._scene.activeCamera.maxZ))
|
|
}
|
|
}, t.prototype._createGrainTexture = function() {
|
|
this._grainTexture = new Pi("LensNoiseTexture", 512, this._scene, !1, ke.a.BILINEAR_SAMPLINGMODE), this._grainTexture.wrapU = ke.a.WRAP_ADDRESSMODE, this._grainTexture.wrapV = ke.a.WRAP_ADDRESSMODE;
|
|
for (var e, t, i, n = this._grainTexture.getContext(), r = 0; r < 512; r++)
|
|
for (var o = 0; o < 512; o++) e = Math.floor(255 * (t = .42, i = .58, Math.random() * (i - t) + t)), n.fillStyle = "rgb(" + e + ", " + e + ", " + e + ")", n.fillRect(r, o, 1, 1);
|
|
this._grainTexture.update(!1)
|
|
}, t
|
|
}(Vc),
|
|
Xc = "\nprecision highp float;\nuniform sampler2D textureSampler;\nuniform float near;\nuniform float far;\nuniform float radius;\nfloat scales[16]=float[16](\n0.1,\n0.11406250000000001,\n0.131640625,\n0.15625,\n0.187890625,\n0.2265625,\n0.272265625,\n0.325,\n0.384765625,\n0.4515625,\n0.525390625,\n0.60625,\n0.694140625,\n0.7890625,\n0.891015625,\n1.0\n);\nvarying vec2 vUV;\nfloat perspectiveDepthToViewZ( const in float invClipZ,const in float near,const in float far ) {\nreturn ( near*far )/( ( far-near )*invClipZ-far );\n}\nfloat viewZToPerspectiveDepth( const in float viewZ,const in float near,const in float far ) {\nreturn ( near*far/viewZ+far)/( far-near );\n}\nfloat viewZToOrthographicDepth( const in float viewZ,const in float near,const in float far ) {\nreturn ( viewZ+near )/( near-far );\n}\n#ifdef SSAO\nuniform sampler2D randomSampler;\nuniform sampler2D normalSampler;\nuniform float randTextureTiles;\nuniform float samplesFactor;\nuniform vec3 sampleSphere[SAMPLES];\nuniform float totalStrength;\nuniform float base;\nuniform float xViewport;\nuniform float yViewport;\nuniform float maxZ;\nuniform float minZAspect;\nuniform vec2 texelSize;\nuniform mat4 projection;\nvoid main()\n{\nvec3 random=texture2D(randomSampler,vUV*randTextureTiles).rgb;\nfloat depth=texture2D(textureSampler,vUV).r;\nfloat depthSign=depth/abs(depth);\ndepth=depth*depthSign;\nvec3 normal=texture2D(normalSampler,vUV).rgb;\nfloat occlusion=0.0;\nfloat correctedRadius=min(radius,minZAspect*depth/near);\nvec3 vViewRay=vec3((vUV.x*2.0-1.0)*xViewport,(vUV.y*2.0-1.0)*yViewport,depthSign);\nvec3 origin=vViewRay*depth;\nvec3 rvec=random*2.0-1.0;\nrvec.z=0.0;\n\nfloat dotProduct=dot(rvec,normal);\nrvec=1.0-abs(dotProduct)>1e-2 ? rvec : vec3(-rvec.y,0.0,rvec.x);\nvec3 tangent=normalize(rvec-normal*dot(rvec,normal));\nvec3 bitangent=cross(normal,tangent);\nmat3 tbn=mat3(tangent,bitangent,normal);\nfloat difference;\nfor (int i=0; i<SAMPLES; ++i) {\n\nvec3 samplePosition=scales[(i+int(random.x*16.0)) % 16]*tbn*sampleSphere[(i+int(random.y*16.0)) % 16];\nsamplePosition=samplePosition*correctedRadius+origin;\n\nvec4 offset=vec4(samplePosition,1.0);\noffset=projection*offset;\noffset.xyz/=offset.w;\noffset.xy=offset.xy*0.5+0.5;\nif (offset.x<0.0 || offset.y<0.0 || offset.x>1.0 || offset.y>1.0) {\ncontinue;\n}\n\nfloat sampleDepth=abs(texture2D(textureSampler,offset.xy).r);\n\ndifference=depthSign*samplePosition.z-sampleDepth;\nfloat rangeCheck=1.0-smoothstep(correctedRadius*0.5,correctedRadius,difference);\nocclusion+=(difference>=0.0 ? 1.0 : 0.0)*rangeCheck;\n}\nocclusion=occlusion*(1.0-smoothstep(maxZ*0.75,maxZ,depth));\nfloat ao=1.0-totalStrength*occlusion*samplesFactor;\nfloat result=clamp(ao+base,0.0,1.0);\ngl_FragColor=vec4(vec3(result),1.0);\n}\n#endif\n#ifdef BILATERAL_BLUR\nuniform sampler2D depthSampler;\nuniform float outSize;\nuniform float samplerOffsets[SAMPLES];\nvec4 blur9(sampler2D image,vec2 uv,float resolution,vec2 direction) {\nvec4 color=vec4(0.0);\nvec2 off1=vec2(1.3846153846)*direction;\nvec2 off2=vec2(3.2307692308)*direction;\ncolor+=texture2D(image,uv)*0.2270270270;\ncolor+=texture2D(image,uv+(off1/resolution))*0.3162162162;\ncolor+=texture2D(image,uv-(off1/resolution))*0.3162162162;\ncolor+=texture2D(image,uv+(off2/resolution))*0.0702702703;\ncolor+=texture2D(image,uv-(off2/resolution))*0.0702702703;\nreturn color;\n}\nvec4 blur13(sampler2D image,vec2 uv,float resolution,vec2 direction) {\nvec4 color=vec4(0.0);\nvec2 off1=vec2(1.411764705882353)*direction;\nvec2 off2=vec2(3.2941176470588234)*direction;\nvec2 off3=vec2(5.176470588235294)*direction;\ncolor+=texture2D(image,uv)*0.1964825501511404;\ncolor+=texture2D(image,uv+(off1/resolution))*0.2969069646728344;\ncolor+=texture2D(image,uv-(off1/resolution))*0.2969069646728344;\ncolor+=texture2D(image,uv+(off2/resolution))*0.09447039785044732;\ncolor+=texture2D(image,uv-(off2/resolution))*0.09447039785044732;\ncolor+=texture2D(image,uv+(off3/resolution))*0.010381362401148057;\ncolor+=texture2D(image,uv-(off3/resolution))*0.010381362401148057;\nreturn color;\n}\nvec4 blur13Bilateral(sampler2D image,vec2 uv,float resolution,vec2 direction) {\nvec4 color=vec4(0.0);\nvec2 off1=vec2(1.411764705882353)*direction;\nvec2 off2=vec2(3.2941176470588234)*direction;\nvec2 off3=vec2(5.176470588235294)*direction;\nfloat compareDepth=abs(texture2D(depthSampler,uv).r);\nfloat sampleDepth;\nfloat weight;\nfloat weightSum=30.0;\ncolor+=texture2D(image,uv)*30.0;\nsampleDepth=abs(texture2D(depthSampler,uv+(off1/resolution)).r);\nweight=clamp(1.0/( 0.003+abs(compareDepth-sampleDepth)),0.0,30.0);\nweightSum+=weight;\ncolor+=texture2D(image,uv+(off1/resolution))*weight;\nsampleDepth=abs(texture2D(depthSampler,uv-(off1/resolution)).r);\nweight=clamp(1.0/( 0.003+abs(compareDepth-sampleDepth)),0.0,30.0);\nweightSum+=weight;\ncolor+=texture2D(image,uv-(off1/resolution))*weight;\nsampleDepth=abs(texture2D(depthSampler,uv+(off2/resolution)).r);\nweight=clamp(1.0/( 0.003+abs(compareDepth-sampleDepth)),0.0,30.0);\nweightSum+=weight;\ncolor+=texture2D(image,uv+(off2/resolution))*weight;\nsampleDepth=abs(texture2D(depthSampler,uv-(off2/resolution)).r);\nweight=clamp(1.0/( 0.003+abs(compareDepth-sampleDepth)),0.0,30.0);\nweightSum+=weight;\ncolor+=texture2D(image,uv-(off2/resolution))*weight;\nsampleDepth=abs(texture2D(depthSampler,uv+(off3/resolution)).r);\nweight=clamp(1.0/( 0.003+abs(compareDepth-sampleDepth)),0.0,30.0);\nweightSum+=weight;\ncolor+=texture2D(image,uv+(off3/resolution))*weight;\nsampleDepth=abs(texture2D(depthSampler,uv-(off3/resolution)).r);\nweight=clamp(1.0/( 0.003+abs(compareDepth-sampleDepth)),0.0,30.0);\nweightSum+=weight;\ncolor+=texture2D(image,uv-(off3/resolution))*weight;\nreturn color/weightSum;\n}\nvoid main()\n{\n#if EXPENSIVE\nfloat compareDepth=abs(texture2D(depthSampler,vUV).r);\nfloat texelsize=1.0/outSize;\nfloat result=0.0;\nfloat weightSum=0.0;\nfor (int i=0; i<SAMPLES; ++i)\n{\n#ifdef BILATERAL_BLUR_H\nvec2 direction=vec2(1.0,0.0);\nvec2 sampleOffset=vec2(texelsize*samplerOffsets[i],0.0);\n#else\nvec2 direction=vec2(0.0,1.0);\nvec2 sampleOffset=vec2(0.0,texelsize*samplerOffsets[i]);\n#endif\nvec2 samplePos=vUV+sampleOffset;\nfloat sampleDepth=abs(texture2D(depthSampler,samplePos).r);\nfloat weight=clamp(1.0/( 0.003+abs(compareDepth-sampleDepth)),0.0,30000.0);\nresult+=texture2D(textureSampler,samplePos).r*weight;\nweightSum+=weight;\n}\nresult/=weightSum;\ngl_FragColor.rgb=vec3(result);\ngl_FragColor.a=1.0;\n#else\nvec4 color;\n#ifdef BILATERAL_BLUR_H\nvec2 direction=vec2(1.0,0.0);\ncolor=blur13Bilateral(textureSampler,vUV,outSize,direction);\n#else\nvec2 direction=vec2(0.0,1.0);\ncolor=blur13Bilateral(textureSampler,vUV,outSize,direction);\n#endif\ngl_FragColor.rgb=vec3(color.r);\ngl_FragColor.a=1.0;\n#endif\n}\n#endif\n";
|
|
zt.a.ShadersStore.ssao2PixelShader = Xc;
|
|
var Yc = "uniform sampler2D textureSampler;\nuniform sampler2D originalColor;\nuniform vec4 viewport;\nvarying vec2 vUV;\nvoid main(void) {\nvec4 ssaoColor=texture2D(textureSampler,viewport.xy+vUV*viewport.zw);\nvec4 sceneColor=texture2D(originalColor,vUV);\ngl_FragColor=sceneColor*ssaoColor;\n}\n";
|
|
zt.a.ShadersStore.ssaoCombinePixelShader = Yc;
|
|
var Kc = function(e) {
|
|
function t(t, i, n, r) {
|
|
var o = e.call(this, i.getEngine(), t) || this;
|
|
if (o.SSAOOriginalSceneColorEffect = "SSAOOriginalSceneColorEffect", o.SSAORenderEffect = "SSAORenderEffect", o.SSAOBlurHRenderEffect = "SSAOBlurHRenderEffect", o.SSAOBlurVRenderEffect = "SSAOBlurVRenderEffect", o.SSAOCombineRenderEffect = "SSAOCombineRenderEffect", o.totalStrength = 1, o.maxZ = 100, o.minZAspect = .2, o._samples = 8, o._textureSamples = 1, o._expensiveBlur = !0, o.radius = 2, o.base = 0, o._firstUpdate = !0, o._bits = new Uint32Array(1), o._scene = i, o._ratio = n, !o.isSupported) return p.a.Error("SSAO 2 needs WebGL 2 support."), o;
|
|
var s = o._ratio.ssaoRatio || n,
|
|
a = o._ratio.blurRatio || n,
|
|
c = i.enableGeometryBufferRenderer();
|
|
return o._createRandomTexture(), o._depthTexture = c.getGBuffer().textures[0], o._normalTexture = c.getGBuffer().textures[1], o._originalColorPostProcess = new Yt("SSAOOriginalSceneColor", 1, null, ke.a.BILINEAR_SAMPLINGMODE, i.getEngine(), !1), o._originalColorPostProcess.samples = o.textureSamples, o._createSSAOPostProcess(1), o._createBlurPostProcess(s, a), o._createSSAOCombinePostProcess(a), o.addEffect(new Ja(i.getEngine(), o.SSAOOriginalSceneColorEffect, function() {
|
|
return o._originalColorPostProcess
|
|
}, !0)), o.addEffect(new Ja(i.getEngine(), o.SSAORenderEffect, function() {
|
|
return o._ssaoPostProcess
|
|
}, !0)), o.addEffect(new Ja(i.getEngine(), o.SSAOBlurHRenderEffect, function() {
|
|
return o._blurHPostProcess
|
|
}, !0)), o.addEffect(new Ja(i.getEngine(), o.SSAOBlurVRenderEffect, function() {
|
|
return o._blurVPostProcess
|
|
}, !0)), o.addEffect(new Ja(i.getEngine(), o.SSAOCombineRenderEffect, function() {
|
|
return o._ssaoCombinePostProcess
|
|
}, !0)), i.postProcessRenderPipelineManager.addPipeline(o), r && i.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(t, r), o
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "samples", {
|
|
get: function() {
|
|
return this._samples
|
|
},
|
|
set: function(e) {
|
|
this._ssaoPostProcess.updateEffect("#define SAMPLES " + e + "\n#define SSAO"), this._samples = e, this._sampleSphere = this._generateHemisphere(), this._firstUpdate = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "textureSamples", {
|
|
get: function() {
|
|
return this._textureSamples
|
|
},
|
|
set: function(e) {
|
|
this._textureSamples = e, this._originalColorPostProcess.samples = e, this._blurHPostProcess.samples = e, this._blurVPostProcess.samples = e, this._ssaoPostProcess.samples = e, this._ssaoCombinePostProcess.samples = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "expensiveBlur", {
|
|
get: function() {
|
|
return this._expensiveBlur
|
|
},
|
|
set: function(e) {
|
|
this._blurHPostProcess.updateEffect("#define BILATERAL_BLUR\n#define BILATERAL_BLUR_H\n#define SAMPLES 16\n#define EXPENSIVE " + (e ? "1" : "0") + "\n", null, ["textureSampler", "depthSampler"]), this._blurVPostProcess.updateEffect("#define BILATERAL_BLUR\n#define SAMPLES 16\n#define EXPENSIVE " + (e ? "1" : "0") + "\n", null, ["textureSampler", "depthSampler"]), this._expensiveBlur = e, this._firstUpdate = !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t, "IsSupported", {
|
|
get: function() {
|
|
var e = P.a.LastCreatedEngine;
|
|
return !!e && e.getCaps().drawBuffersExtension
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "scene", {
|
|
get: function() {
|
|
return this._scene
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "SSAO2RenderingPipeline"
|
|
}, t.prototype.dispose = function(t) {
|
|
void 0 === t && (t = !1);
|
|
for (var i = 0; i < this._scene.cameras.length; i++) {
|
|
var n = this._scene.cameras[i];
|
|
this._originalColorPostProcess.dispose(n), this._ssaoPostProcess.dispose(n), this._blurHPostProcess.dispose(n), this._blurVPostProcess.dispose(n), this._ssaoCombinePostProcess.dispose(n)
|
|
}
|
|
this._randomTexture.dispose(), t && this._scene.disableGeometryBufferRenderer(), this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._scene.cameras), e.prototype.dispose.call(this)
|
|
}, t.prototype._createBlurPostProcess = function(e, t) {
|
|
var i = this;
|
|
this._samplerOffsets = [];
|
|
for (var n = this.expensiveBlur, r = -8; r < 8; r++) this._samplerOffsets.push(2 * r + .5);
|
|
this._blurHPostProcess = new Ht("BlurH", "ssao2", ["outSize", "samplerOffsets", "near", "far", "radius"], ["depthSampler"], e, null, ke.a.TRILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, "#define BILATERAL_BLUR\n#define BILATERAL_BLUR_H\n#define SAMPLES 16\n#define EXPENSIVE " + (n ? "1" : "0") + "\n"), this._blurHPostProcess.onApply = function(e) {
|
|
i._scene.activeCamera && (e.setFloat("outSize", i._ssaoCombinePostProcess.width > 0 ? i._ssaoCombinePostProcess.width : i._originalColorPostProcess.width), e.setFloat("near", i._scene.activeCamera.minZ), e.setFloat("far", i._scene.activeCamera.maxZ), e.setFloat("radius", i.radius), e.setTexture("depthSampler", i._depthTexture), i._firstUpdate && e.setArray("samplerOffsets", i._samplerOffsets))
|
|
}, this._blurVPostProcess = new Ht("BlurV", "ssao2", ["outSize", "samplerOffsets", "near", "far", "radius"], ["depthSampler"], t, null, ke.a.TRILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, "#define BILATERAL_BLUR\n#define BILATERAL_BLUR_V\n#define SAMPLES 16\n#define EXPENSIVE " + (n ? "1" : "0") + "\n"), this._blurVPostProcess.onApply = function(e) {
|
|
i._scene.activeCamera && (e.setFloat("outSize", i._ssaoCombinePostProcess.height > 0 ? i._ssaoCombinePostProcess.height : i._originalColorPostProcess.height), e.setFloat("near", i._scene.activeCamera.minZ), e.setFloat("far", i._scene.activeCamera.maxZ), e.setFloat("radius", i.radius), e.setTexture("depthSampler", i._depthTexture), i._firstUpdate && (e.setArray("samplerOffsets", i._samplerOffsets), i._firstUpdate = !1))
|
|
}, this._blurHPostProcess.samples = this.textureSamples, this._blurVPostProcess.samples = this.textureSamples
|
|
}, t.prototype._rebuild = function() {
|
|
this._firstUpdate = !0, e.prototype._rebuild.call(this)
|
|
}, t.prototype._radicalInverse_VdC = function(e) {
|
|
return this._bits[0] = e, this._bits[0] = (this._bits[0] << 16 | this._bits[0] >> 16) >>> 0, this._bits[0] = (1431655765 & this._bits[0]) << 1 | (2863311530 & this._bits[0]) >>> 1 >>> 0, this._bits[0] = (858993459 & this._bits[0]) << 2 | (3435973836 & this._bits[0]) >>> 2 >>> 0, this._bits[0] = (252645135 & this._bits[0]) << 4 | (4042322160 & this._bits[0]) >>> 4 >>> 0, this._bits[0] = (16711935 & this._bits[0]) << 8 | (4278255360 & this._bits[0]) >>> 8 >>> 0, 2.3283064365386963e-10 * this._bits[0]
|
|
}, t.prototype._hammersley = function(e, t) {
|
|
return [e / t, this._radicalInverse_VdC(e)]
|
|
}, t.prototype._hemisphereSample_uniform = function(e, t) {
|
|
var i = 2 * t * Math.PI,
|
|
n = 1 - (.85 * e + .15),
|
|
r = Math.sqrt(1 - n * n);
|
|
return new o.x(Math.cos(i) * r, Math.sin(i) * r, n)
|
|
}, t.prototype._generateHemisphere = function() {
|
|
for (var e, t = this.samples, i = [], n = 0; n < t;) {
|
|
if (t < 16) e = this._hemisphereSample_uniform(Math.random(), Math.random());
|
|
else {
|
|
var r = this._hammersley(n, t);
|
|
e = this._hemisphereSample_uniform(r[0], r[1])
|
|
}
|
|
i.push(e.x, e.y, e.z), n++
|
|
}
|
|
return i
|
|
}, t.prototype._createSSAOPostProcess = function(e) {
|
|
var t = this,
|
|
i = this.samples;
|
|
this._sampleSphere = this._generateHemisphere(), this._ssaoPostProcess = new Ht("ssao2", "ssao2", ["sampleSphere", "samplesFactor", "randTextureTiles", "totalStrength", "radius", "base", "range", "projection", "near", "far", "texelSize", "xViewport", "yViewport", "maxZ", "minZAspect"], ["randomSampler", "normalSampler"], e, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, "#define SAMPLES " + i + "\n#define SSAO"), this._ssaoPostProcess.onApply = function(e) {
|
|
t._firstUpdate && (e.setArray3("sampleSphere", t._sampleSphere), e.setFloat("randTextureTiles", 32)), t._scene.activeCamera && (e.setFloat("samplesFactor", 1 / t.samples), e.setFloat("totalStrength", t.totalStrength), e.setFloat2("texelSize", 1 / t._ssaoPostProcess.width, 1 / t._ssaoPostProcess.height), e.setFloat("radius", t.radius), e.setFloat("maxZ", t.maxZ), e.setFloat("minZAspect", t.minZAspect), e.setFloat("base", t.base), e.setFloat("near", t._scene.activeCamera.minZ), e.setFloat("far", t._scene.activeCamera.maxZ), e.setFloat("xViewport", Math.tan(t._scene.activeCamera.fov / 2) * t._scene.getEngine().getAspectRatio(t._scene.activeCamera, !0)), e.setFloat("yViewport", Math.tan(t._scene.activeCamera.fov / 2)), e.setMatrix("projection", t._scene.getProjectionMatrix()), e.setTexture("textureSampler", t._depthTexture), e.setTexture("normalSampler", t._normalTexture), e.setTexture("randomSampler", t._randomTexture))
|
|
}, this._ssaoPostProcess.samples = this.textureSamples
|
|
}, t.prototype._createSSAOCombinePostProcess = function(e) {
|
|
var t = this;
|
|
this._ssaoCombinePostProcess = new Ht("ssaoCombine", "ssaoCombine", [], ["originalColor", "viewport"], e, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1), this._ssaoCombinePostProcess.onApply = function(e) {
|
|
var i = t._scene.activeCamera.viewport;
|
|
e.setVector4("viewport", o.t.Vector4[0].copyFromFloats(i.x, i.y, i.width, i.height)), e.setTextureFromPostProcess("originalColor", t._originalColorPostProcess)
|
|
}, this._ssaoCombinePostProcess.samples = this.textureSamples
|
|
}, t.prototype._createRandomTexture = function() {
|
|
this._randomTexture = new Pi("SSAORandomTexture", 128, this._scene, !1, ke.a.TRILINEAR_SAMPLINGMODE), this._randomTexture.wrapU = ke.a.WRAP_ADDRESSMODE, this._randomTexture.wrapV = ke.a.WRAP_ADDRESSMODE;
|
|
for (var e = this._randomTexture.getContext(), t = function(e, t) {
|
|
return Math.random() * (t - e) + e
|
|
}, i = o.x.Zero(), n = 0; n < 128; n++)
|
|
for (var r = 0; r < 128; r++) i.x = t(0, 1), i.y = t(0, 1), i.z = 0, i.normalize(), i.scaleInPlace(255), i.x = Math.floor(i.x), i.y = Math.floor(i.y), e.fillStyle = "rgb(" + i.x + ", " + i.y + ", " + i.z + ")", e.fillRect(n, r, 1, 1);
|
|
this._randomTexture.update(!1)
|
|
}, t.prototype.serialize = function() {
|
|
var e = L.a.Serialize(this);
|
|
return e.customType = "SSAO2RenderingPipeline", e
|
|
}, t.Parse = function(e, i, n) {
|
|
return L.a.Parse(function() {
|
|
return new t(e._name, i, e._ratio)
|
|
}, e, i, n)
|
|
}, l.c([Object(L.c)()], t.prototype, "totalStrength", void 0), l.c([Object(L.c)()], t.prototype, "maxZ", void 0), l.c([Object(L.c)()], t.prototype, "minZAspect", void 0), l.c([Object(L.c)("samples")], t.prototype, "_samples", void 0), l.c([Object(L.c)("textureSamples")], t.prototype, "_textureSamples", void 0), l.c([Object(L.c)()], t.prototype, "_ratio", void 0), l.c([Object(L.c)("expensiveBlur")], t.prototype, "_expensiveBlur", void 0), l.c([Object(L.c)()], t.prototype, "radius", void 0), l.c([Object(L.c)()], t.prototype, "base", void 0), t
|
|
}(Vc);
|
|
s.a.RegisteredTypes["BABYLON.SSAO2RenderingPipeline"] = Kc;
|
|
var Qc = "\nuniform sampler2D textureSampler;\nvarying vec2 vUV;\n#ifdef SSAO\nuniform sampler2D randomSampler;\nuniform float randTextureTiles;\nuniform float samplesFactor;\nuniform vec3 sampleSphere[SAMPLES];\nuniform float totalStrength;\nuniform float radius;\nuniform float area;\nuniform float fallOff;\nuniform float base;\nvec3 normalFromDepth(float depth,vec2 coords)\n{\nvec2 offset1=vec2(0.0,radius);\nvec2 offset2=vec2(radius,0.0);\nfloat depth1=texture2D(textureSampler,coords+offset1).r;\nfloat depth2=texture2D(textureSampler,coords+offset2).r;\nvec3 p1=vec3(offset1,depth1-depth);\nvec3 p2=vec3(offset2,depth2-depth);\nvec3 normal=cross(p1,p2);\nnormal.z=-normal.z;\nreturn normalize(normal);\n}\nvoid main()\n{\nvec3 random=normalize(texture2D(randomSampler,vUV*randTextureTiles).rgb);\nfloat depth=texture2D(textureSampler,vUV).r;\nvec3 position=vec3(vUV,depth);\nvec3 normal=normalFromDepth(depth,vUV);\nfloat radiusDepth=radius/depth;\nfloat occlusion=0.0;\nvec3 ray;\nvec3 hemiRay;\nfloat occlusionDepth;\nfloat difference;\nfor (int i=0; i<SAMPLES; i++)\n{\nray=radiusDepth*reflect(sampleSphere[i],random);\nhemiRay=position+sign(dot(ray,normal))*ray;\nocclusionDepth=texture2D(textureSampler,clamp(hemiRay.xy,vec2(0.001,0.001),vec2(0.999,0.999))).r;\ndifference=depth-occlusionDepth;\nocclusion+=step(fallOff,difference)*(1.0-smoothstep(fallOff,area,difference));\n}\nfloat ao=1.0-totalStrength*occlusion*samplesFactor;\nfloat result=clamp(ao+base,0.0,1.0);\ngl_FragColor.r=result;\ngl_FragColor.g=result;\ngl_FragColor.b=result;\ngl_FragColor.a=1.0;\n}\n#endif\n";
|
|
zt.a.ShadersStore.ssaoPixelShader = Qc;
|
|
var qc = function(e) {
|
|
function t(t, i, n, r) {
|
|
var o = e.call(this, i.getEngine(), t) || this;
|
|
o.SSAOOriginalSceneColorEffect = "SSAOOriginalSceneColorEffect", o.SSAORenderEffect = "SSAORenderEffect", o.SSAOBlurHRenderEffect = "SSAOBlurHRenderEffect", o.SSAOBlurVRenderEffect = "SSAOBlurVRenderEffect", o.SSAOCombineRenderEffect = "SSAOCombineRenderEffect", o.totalStrength = 1, o.radius = 1e-4, o.area = .0075, o.fallOff = 1e-6, o.base = .5, o._firstUpdate = !0, o._scene = i, o._createRandomTexture(), o._depthTexture = i.enableDepthRenderer().getDepthMap();
|
|
var s = n.ssaoRatio || n,
|
|
a = n.combineRatio || n;
|
|
return o._originalColorPostProcess = new Yt("SSAOOriginalSceneColor", a, null, ke.a.BILINEAR_SAMPLINGMODE, i.getEngine(), !1), o._createSSAOPostProcess(s), o._createBlurPostProcess(s), o._createSSAOCombinePostProcess(a), o.addEffect(new Ja(i.getEngine(), o.SSAOOriginalSceneColorEffect, function() {
|
|
return o._originalColorPostProcess
|
|
}, !0)), o.addEffect(new Ja(i.getEngine(), o.SSAORenderEffect, function() {
|
|
return o._ssaoPostProcess
|
|
}, !0)), o.addEffect(new Ja(i.getEngine(), o.SSAOBlurHRenderEffect, function() {
|
|
return o._blurHPostProcess
|
|
}, !0)), o.addEffect(new Ja(i.getEngine(), o.SSAOBlurVRenderEffect, function() {
|
|
return o._blurVPostProcess
|
|
}, !0)), o.addEffect(new Ja(i.getEngine(), o.SSAOCombineRenderEffect, function() {
|
|
return o._ssaoCombinePostProcess
|
|
}, !0)), i.postProcessRenderPipelineManager.addPipeline(o), r && i.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(t, r), o
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "scene", {
|
|
get: function() {
|
|
return this._scene
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "SSAORenderingPipeline"
|
|
}, t.prototype.dispose = function(t) {
|
|
void 0 === t && (t = !1);
|
|
for (var i = 0; i < this._scene.cameras.length; i++) {
|
|
var n = this._scene.cameras[i];
|
|
this._originalColorPostProcess.dispose(n), this._ssaoPostProcess.dispose(n), this._blurHPostProcess.dispose(n), this._blurVPostProcess.dispose(n), this._ssaoCombinePostProcess.dispose(n)
|
|
}
|
|
this._randomTexture.dispose(), t && this._scene.disableDepthRenderer(), this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._scene.cameras), e.prototype.dispose.call(this)
|
|
}, t.prototype._createBlurPostProcess = function(e) {
|
|
var t = this;
|
|
this._blurHPostProcess = new $n("BlurH", new o.w(1, 0), 16, e, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, _.a.TEXTURETYPE_UNSIGNED_INT), this._blurVPostProcess = new $n("BlurV", new o.w(0, 1), 16, e, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, _.a.TEXTURETYPE_UNSIGNED_INT), this._blurHPostProcess.onActivateObservable.add(function() {
|
|
var e = t._blurHPostProcess.width / t._scene.getEngine().getRenderWidth();
|
|
t._blurHPostProcess.kernel = 16 * e
|
|
}), this._blurVPostProcess.onActivateObservable.add(function() {
|
|
var e = t._blurVPostProcess.height / t._scene.getEngine().getRenderHeight();
|
|
t._blurVPostProcess.kernel = 16 * e
|
|
})
|
|
}, t.prototype._rebuild = function() {
|
|
this._firstUpdate = !0, e.prototype._rebuild.call(this)
|
|
}, t.prototype._createSSAOPostProcess = function(e) {
|
|
var t = this,
|
|
i = [.5381, .1856, -.4319, .1379, .2486, .443, .3371, .5679, -.0057, -.6999, -.0451, -.0019, .0689, -.1598, -.8547, .056, .0069, -.1843, -.0146, .1402, .0762, .01, -.1924, -.0344, -.3577, -.5301, -.4358, -.3169, .1063, .0158, .0103, -.5869, .0046, -.0897, -.494, .3287, .7119, -.0154, -.0918, -.0533, .0596, -.5411, .0352, -.0631, .546, -.4776, .2847, -.0271];
|
|
this._ssaoPostProcess = new Ht("ssao", "ssao", ["sampleSphere", "samplesFactor", "randTextureTiles", "totalStrength", "radius", "area", "fallOff", "base", "range", "viewport"], ["randomSampler"], e, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1, "#define SAMPLES 16\n#define SSAO"), this._ssaoPostProcess.onApply = function(e) {
|
|
t._firstUpdate && (e.setArray3("sampleSphere", i), e.setFloat("samplesFactor", 1 / 16), e.setFloat("randTextureTiles", 4)), e.setFloat("totalStrength", t.totalStrength), e.setFloat("radius", t.radius), e.setFloat("area", t.area), e.setFloat("fallOff", t.fallOff), e.setFloat("base", t.base), e.setTexture("textureSampler", t._depthTexture), e.setTexture("randomSampler", t._randomTexture)
|
|
}
|
|
}, t.prototype._createSSAOCombinePostProcess = function(e) {
|
|
var t = this;
|
|
this._ssaoCombinePostProcess = new Ht("ssaoCombine", "ssaoCombine", [], ["originalColor", "viewport"], e, null, ke.a.BILINEAR_SAMPLINGMODE, this._scene.getEngine(), !1), this._ssaoCombinePostProcess.onApply = function(e) {
|
|
e.setVector4("viewport", o.t.Vector4[0].copyFromFloats(0, 0, 1, 1)), e.setTextureFromPostProcess("originalColor", t._originalColorPostProcess)
|
|
}
|
|
}, t.prototype._createRandomTexture = function() {
|
|
this._randomTexture = new Pi("SSAORandomTexture", 512, this._scene, !1, ke.a.TRILINEAR_SAMPLINGMODE), this._randomTexture.wrapU = ke.a.WRAP_ADDRESSMODE, this._randomTexture.wrapV = ke.a.WRAP_ADDRESSMODE;
|
|
for (var e = this._randomTexture.getContext(), t = function(e, t) {
|
|
return Math.random() * (t - e) + e
|
|
}, i = o.x.Zero(), n = 0; n < 512; n++)
|
|
for (var r = 0; r < 512; r++) i.x = Math.floor(255 * t(-1, 1)), i.y = Math.floor(255 * t(-1, 1)), i.z = Math.floor(255 * t(-1, 1)), e.fillStyle = "rgb(" + i.x + ", " + i.y + ", " + i.z + ")", e.fillRect(n, r, 1, 1);
|
|
this._randomTexture.update(!1)
|
|
}, l.c([Object(L.c)()], t.prototype, "totalStrength", void 0), l.c([Object(L.c)()], t.prototype, "radius", void 0), l.c([Object(L.c)()], t.prototype, "area", void 0), l.c([Object(L.c)()], t.prototype, "fallOff", void 0), l.c([Object(L.c)()], t.prototype, "base", void 0), t
|
|
}(Vc),
|
|
Zc = "uniform sampler2D textureSampler;\nvarying vec2 vUV;\n#if defined(PASS_POST_PROCESS)\nvoid main(void)\n{\nvec4 color=texture2D(textureSampler,vUV);\ngl_FragColor=color;\n}\n#endif\n#if defined(DOWN_SAMPLE_X4)\nuniform vec2 dsOffsets[16];\nvoid main(void)\n{\nvec4 average=vec4(0.0,0.0,0.0,0.0);\naverage=texture2D(textureSampler,vUV+dsOffsets[0]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[1]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[2]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[3]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[4]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[5]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[6]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[7]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[8]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[9]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[10]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[11]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[12]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[13]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[14]);\naverage+=texture2D(textureSampler,vUV+dsOffsets[15]);\naverage/=16.0;\ngl_FragColor=average;\n}\n#endif\n#if defined(BRIGHT_PASS)\nuniform vec2 dsOffsets[4];\nuniform float brightThreshold;\nvoid main(void)\n{\nvec4 average=vec4(0.0,0.0,0.0,0.0);\naverage=texture2D(textureSampler,vUV+vec2(dsOffsets[0].x,dsOffsets[0].y));\naverage+=texture2D(textureSampler,vUV+vec2(dsOffsets[1].x,dsOffsets[1].y));\naverage+=texture2D(textureSampler,vUV+vec2(dsOffsets[2].x,dsOffsets[2].y));\naverage+=texture2D(textureSampler,vUV+vec2(dsOffsets[3].x,dsOffsets[3].y));\naverage*=0.25;\nfloat luminance=length(average.rgb);\nif (luminance<brightThreshold) {\naverage=vec4(0.0,0.0,0.0,1.0);\n}\ngl_FragColor=average;\n}\n#endif\n#if defined(TEXTURE_ADDER)\nuniform sampler2D otherSampler;\nuniform sampler2D lensSampler;\nuniform float exposure;\nvoid main(void)\n{\nvec3 colour=texture2D(textureSampler,vUV).rgb;\ncolour*=exposure;\nvec3 X=max(vec3(0.0,0.0,0.0),colour-0.004);\nvec3 retColor=(X*(6.2*X+0.5))/(X*(6.2*X+1.7)+0.06);\ncolour=retColor*retColor;\ncolour+=colour*texture2D(lensSampler,vUV).rgb;\nvec4 finalColor=vec4(colour.rgb,1.0)+texture2D(otherSampler,vUV);\ngl_FragColor=finalColor;\n}\n#endif\n#if defined(VLS)\n#define PI 3.1415926535897932384626433832795\nuniform mat4 shadowViewProjection;\nuniform mat4 lightWorld;\nuniform vec3 cameraPosition;\nuniform vec3 sunDirection;\nuniform vec3 sunColor;\nuniform vec2 depthValues;\nuniform float scatteringCoefficient;\nuniform float scatteringPower;\nuniform sampler2D shadowMapSampler;\nuniform sampler2D positionSampler;\nfloat computeScattering(float lightDotView)\n{\nfloat result=1.0-scatteringCoefficient*scatteringCoefficient;\nresult/=(4.0*PI*pow(1.0+scatteringCoefficient*scatteringCoefficient-(2.0*scatteringCoefficient)*lightDotView,1.5));\nreturn result;\n}\nvoid main(void)\n{\n\nvec3 worldPos=texture2D(positionSampler,vUV).rgb;\nvec3 startPosition=cameraPosition;\nvec3 rayVector=worldPos-startPosition;\nfloat rayLength=length(rayVector);\nvec3 rayDirection=rayVector/rayLength;\nfloat stepLength=rayLength/NB_STEPS;\nvec3 stepL=rayDirection*stepLength;\nvec3 currentPosition=startPosition;\nvec3 accumFog=vec3(0.0);\nfor (int i=0; i<int(NB_STEPS); i++)\n{\nvec4 worldInShadowCameraSpace=shadowViewProjection*vec4(currentPosition,1.0);\nfloat depthMetric=(worldInShadowCameraSpace.z+depthValues.x)/(depthValues.y);\nfloat shadowPixelDepth=clamp(depthMetric,0.0,1.0);\nworldInShadowCameraSpace.xyz/=worldInShadowCameraSpace.w;\nworldInShadowCameraSpace.xyz=0.5*worldInShadowCameraSpace.xyz+vec3(0.5);\nfloat shadowMapValue=texture2D(shadowMapSampler,worldInShadowCameraSpace.xy).r;\nif (shadowMapValue>shadowPixelDepth)\naccumFog+=sunColor*computeScattering(dot(rayDirection,sunDirection));\ncurrentPosition+=stepL;\n}\naccumFog/=NB_STEPS;\nvec3 color=accumFog*scatteringPower;\ngl_FragColor=vec4(color*exp(color) ,1.0);\n}\n#endif\n#if defined(VLSMERGE)\nuniform sampler2D originalSampler;\nvoid main(void)\n{\ngl_FragColor=texture2D(originalSampler,vUV)+texture2D(textureSampler,vUV);\n}\n#endif\n#if defined(LUMINANCE)\nuniform vec2 lumOffsets[4];\nvoid main()\n{\nfloat average=0.0;\nvec4 color=vec4(0.0);\nfloat maximum=-1e20;\nvec3 weight=vec3(0.299,0.587,0.114);\nfor (int i=0; i<4; i++)\n{\ncolor=texture2D(textureSampler,vUV+ lumOffsets[i]);\n\nfloat GreyValue=dot(color.rgb,vec3(0.33,0.33,0.33));\n\n#ifdef WEIGHTED_AVERAGE\nfloat GreyValue=dot(color.rgb,weight);\n#endif\n#ifdef BRIGHTNESS\nfloat GreyValue=max(color.r,max(color.g,color.b));\n#endif\n#ifdef HSL_COMPONENT\nfloat GreyValue=0.5*(max(color.r,max(color.g,color.b))+min(color.r,min(color.g,color.b)));\n#endif\n#ifdef MAGNITUDE\nfloat GreyValue=length(color.rgb);\n#endif\nmaximum=max(maximum,GreyValue);\naverage+=(0.25*log(1e-5+GreyValue));\n}\naverage=exp(average);\ngl_FragColor=vec4(average,maximum,0.0,1.0);\n}\n#endif\n#if defined(LUMINANCE_DOWN_SAMPLE)\nuniform vec2 dsOffsets[9];\nuniform float halfDestPixelSize;\n#ifdef FINAL_DOWN_SAMPLER\nvec4 pack(float value) {\nconst vec4 bit_shift=vec4(255.0*255.0*255.0,255.0*255.0,255.0,1.0);\nconst vec4 bit_mask=vec4(0.0,1.0/255.0,1.0/255.0,1.0/255.0);\nvec4 res=fract(value*bit_shift);\nres-=res.xxyz*bit_mask;\nreturn res;\n}\n#endif\nvoid main()\n{\nvec4 color=vec4(0.0);\nfloat average=0.0;\nfor (int i=0; i<9; i++)\n{\ncolor=texture2D(textureSampler,vUV+vec2(halfDestPixelSize,halfDestPixelSize)+dsOffsets[i]);\naverage+=color.r;\n}\naverage/=9.0;\n#ifdef FINAL_DOWN_SAMPLER\ngl_FragColor=pack(average);\n#else\ngl_FragColor=vec4(average,average,0.0,1.0);\n#endif\n}\n#endif\n#if defined(HDR)\nuniform sampler2D textureAdderSampler;\nuniform float averageLuminance;\nvoid main()\n{\nvec4 color=texture2D(textureAdderSampler,vUV);\n#ifndef AUTO_EXPOSURE\nvec4 adjustedColor=color/averageLuminance;\ncolor=adjustedColor;\ncolor.a=1.0;\n#endif\ngl_FragColor=color;\n}\n#endif\n#if defined(LENS_FLARE)\n#define GHOSTS 3\nuniform sampler2D lensColorSampler;\nuniform float strength;\nuniform float ghostDispersal;\nuniform float haloWidth;\nuniform vec2 resolution;\nuniform float distortionStrength;\nfloat hash(vec2 p)\n{\nfloat h=dot(p,vec2(127.1,311.7));\nreturn -1.0+2.0*fract(sin(h)*43758.5453123);\n}\nfloat noise(in vec2 p)\n{\nvec2 i=floor(p);\nvec2 f=fract(p);\nvec2 u=f*f*(3.0-2.0*f);\nreturn mix(mix(hash(i+vec2(0.0,0.0)),\nhash(i+vec2(1.0,0.0)),u.x),\nmix(hash(i+vec2(0.0,1.0)),\nhash(i+vec2(1.0,1.0)),u.x),u.y);\n}\nfloat fbm(vec2 p)\n{\nfloat f=0.0;\nf+=0.5000*noise(p); p*=2.02;\nf+=0.2500*noise(p); p*=2.03;\nf+=0.1250*noise(p); p*=2.01;\nf+=0.0625*noise(p); p*=2.04;\nf/=0.9375;\nreturn f;\n}\nvec3 pattern(vec2 uv)\n{\nvec2 p=-1.0+2.0*uv;\nfloat p2=dot(p,p);\nfloat f=fbm(vec2(15.0*p2))/2.0;\nfloat r=0.2+0.6*sin(12.5*length(uv-vec2(0.5)));\nfloat g=0.2+0.6*sin(20.5*length(uv-vec2(0.5)));\nfloat b=0.2+0.6*sin(17.2*length(uv-vec2(0.5)));\nreturn (1.0-f)*vec3(r,g,b);\n}\nfloat luminance(vec3 color)\n{\nreturn dot(color.rgb,vec3(0.2126,0.7152,0.0722));\n}\nvec4 textureDistorted(sampler2D tex,vec2 texcoord,vec2 direction,vec3 distortion)\n{\nreturn vec4(\ntexture2D(tex,texcoord+direction*distortion.r).r,\ntexture2D(tex,texcoord+direction*distortion.g).g,\ntexture2D(tex,texcoord+direction*distortion.b).b,\n1.0\n);\n}\nvoid main(void)\n{\nvec2 uv=-vUV+vec2(1.0);\nvec2 ghostDir=(vec2(0.5)-uv)*ghostDispersal;\nvec2 texelSize=1.0/resolution;\nvec3 distortion=vec3(-texelSize.x*distortionStrength,0.0,texelSize.x*distortionStrength);\nvec4 result=vec4(0.0);\nfloat ghostIndice=1.0;\nfor (int i=0; i<GHOSTS; ++i)\n{\nvec2 offset=fract(uv+ghostDir*ghostIndice);\nfloat weight=length(vec2(0.5)-offset)/length(vec2(0.5));\nweight=pow(1.0-weight,10.0);\nresult+=textureDistorted(textureSampler,offset,normalize(ghostDir),distortion)*weight*strength;\nghostIndice+=1.0;\n}\nvec2 haloVec=normalize(ghostDir)*haloWidth;\nfloat weight=length(vec2(0.5)-fract(uv+haloVec))/length(vec2(0.5));\nweight=pow(1.0-weight,10.0);\nresult+=textureDistorted(textureSampler,fract(uv+haloVec),normalize(ghostDir),distortion)*weight*strength;\nresult*=texture2D(lensColorSampler,vec2(length(vec2(0.5)-uv)/length(vec2(0.5))));\ngl_FragColor=result;\n}\n#endif\n#if defined(LENS_FLARE_COMPOSE)\nuniform sampler2D otherSampler;\nuniform sampler2D lensDirtSampler;\nuniform sampler2D lensStarSampler;\nuniform mat4 lensStarMatrix;\nvoid main(void)\n{\nvec2 lensFlareCoords=(lensStarMatrix*vec4(vUV,1.0,1.0)).xy;\nvec4 lensMod=texture2D(lensDirtSampler,vUV);\nlensMod+=texture2D(lensStarSampler,vUV);\nvec4 result=texture2D(textureSampler,vUV)*lensMod;\ngl_FragColor=texture2D(otherSampler,vUV)+result;\n}\n#endif\n#if defined(DEPTH_OF_FIELD)\nuniform sampler2D otherSampler;\nuniform sampler2D depthSampler;\nuniform float distance;\nvoid main(void)\n{\nvec4 sharp=texture2D(otherSampler,vUV);\nvec4 blur=texture2D(textureSampler,vUV);\nfloat dist=clamp(texture2D(depthSampler,vUV).r*distance,0.0,1.0);\nfloat factor=0.0;\nif (dist<0.05)\nfactor=1.0;\nelse if (dist<0.1)\nfactor=20.0*(0.1-dist);\nelse if (dist<0.5)\nfactor=0.0;\nelse\nfactor=2.0*(dist-0.5);\nfactor=clamp(factor,0.0,0.90);\ngl_FragColor=mix(sharp,blur,factor);\n}\n#endif\n#if defined(MOTION_BLUR)\nuniform mat4 inverseViewProjection;\nuniform mat4 prevViewProjection;\nuniform vec2 screenSize;\nuniform float motionScale;\nuniform float motionStrength;\nuniform sampler2D depthSampler;\nvoid main(void)\n{\nvec2 texelSize=1.0/screenSize;\nfloat depth=texture2D(depthSampler,vUV).r;\nvec4 cpos=vec4(vUV*2.0-1.0,depth,1.0);\ncpos=cpos*inverseViewProjection;\nvec4 ppos=cpos*prevViewProjection;\nppos.xyz/=ppos.w;\nppos.xy=ppos.xy*0.5+0.5;\nvec2 velocity=(ppos.xy-vUV)*motionScale*motionStrength;\nfloat speed=length(velocity/texelSize);\nint nSamples=int(clamp(speed,1.0,MAX_MOTION_SAMPLES));\nvec4 result=texture2D(textureSampler,vUV);\nfor (int i=1; i<int(MAX_MOTION_SAMPLES); ++i) {\nif (i>=nSamples)\nbreak;\nvec2 offset1=vUV+velocity*(float(i)/float(nSamples-1)-0.5);\nresult+=texture2D(textureSampler,offset1);\n}\ngl_FragColor=result/float(nSamples);\n}\n#endif\n";
|
|
zt.a.ShadersStore.standardPixelShader = Zc;
|
|
var Jc = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
void 0 === r && (r = null);
|
|
var s = e.call(this, i.getEngine(), t) || this;
|
|
return s.downSampleX4PostProcess = null, s.brightPassPostProcess = null, s.blurHPostProcesses = [], s.blurVPostProcesses = [], s.textureAdderPostProcess = null, s.volumetricLightPostProcess = null, s.volumetricLightSmoothXPostProcess = null, s.volumetricLightSmoothYPostProcess = null, s.volumetricLightMergePostProces = null, s.volumetricLightFinalPostProcess = null, s.luminancePostProcess = null, s.luminanceDownSamplePostProcesses = [], s.hdrPostProcess = null, s.textureAdderFinalPostProcess = null, s.lensFlareFinalPostProcess = null, s.hdrFinalPostProcess = null, s.lensFlarePostProcess = null, s.lensFlareComposePostProcess = null, s.motionBlurPostProcess = null, s.depthOfFieldPostProcess = null, s.fxaaPostProcess = null, s.brightThreshold = 1, s.blurWidth = 512, s.horizontalBlur = !1, s.lensTexture = null, s.volumetricLightCoefficient = .2, s.volumetricLightPower = 4, s.volumetricLightBlurScale = 64, s.sourceLight = null, s.hdrMinimumLuminance = 1, s.hdrDecreaseRate = .5, s.hdrIncreaseRate = .5, s.lensColorTexture = null, s.lensFlareStrength = 20, s.lensFlareGhostDispersal = 1.4, s.lensFlareHaloWidth = .7, s.lensFlareDistortionStrength = 16, s.lensStarTexture = null, s.lensFlareDirtTexture = null, s.depthOfFieldDistance = 10, s.depthOfFieldBlurWidth = 64, s.motionStrength = 1, s.animations = [], s._currentDepthOfFieldSource = null, s._fixedExposure = 1, s._currentExposure = 1, s._hdrAutoExposure = !1, s._hdrCurrentLuminance = 1, s._bloomEnabled = !1, s._depthOfFieldEnabled = !1, s._vlsEnabled = !1, s._lensFlareEnabled = !1, s._hdrEnabled = !1, s._motionBlurEnabled = !1, s._fxaaEnabled = !1, s._motionBlurSamples = 64, s._volumetricLightStepsCount = 50, s._samples = 1, s._cameras = o || [], s._scene = i, s._basePostProcess = r, s._ratio = n, s._floatTextureType = i.getEngine().getCaps().textureFloatRender ? _.a.TEXTURETYPE_FLOAT : _.a.TEXTURETYPE_HALF_FLOAT, i.postProcessRenderPipelineManager.addPipeline(s), s._buildPipeline(), s
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "exposure", {
|
|
get: function() {
|
|
return this._fixedExposure
|
|
},
|
|
set: function(e) {
|
|
this._fixedExposure = e, this._currentExposure = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "hdrAutoExposure", {
|
|
get: function() {
|
|
return this._hdrAutoExposure
|
|
},
|
|
set: function(e) {
|
|
if (this._hdrAutoExposure = e, this.hdrPostProcess) {
|
|
var t = ["#define HDR"];
|
|
e && t.push("#define AUTO_EXPOSURE"), this.hdrPostProcess.updateEffect(t.join("\n"))
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "BloomEnabled", {
|
|
get: function() {
|
|
return this._bloomEnabled
|
|
},
|
|
set: function(e) {
|
|
this._bloomEnabled !== e && (this._bloomEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "DepthOfFieldEnabled", {
|
|
get: function() {
|
|
return this._depthOfFieldEnabled
|
|
},
|
|
set: function(e) {
|
|
this._depthOfFieldEnabled !== e && (this._depthOfFieldEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "LensFlareEnabled", {
|
|
get: function() {
|
|
return this._lensFlareEnabled
|
|
},
|
|
set: function(e) {
|
|
this._lensFlareEnabled !== e && (this._lensFlareEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "HDREnabled", {
|
|
get: function() {
|
|
return this._hdrEnabled
|
|
},
|
|
set: function(e) {
|
|
this._hdrEnabled !== e && (this._hdrEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "VLSEnabled", {
|
|
get: function() {
|
|
return this._vlsEnabled
|
|
},
|
|
set: function(e) {
|
|
if (this._vlsEnabled !== e) {
|
|
if (e)
|
|
if (!this._scene.enableGeometryBufferRenderer()) return void p.a.Warn("Geometry renderer is not supported, cannot create volumetric lights in Standard Rendering Pipeline");
|
|
this._vlsEnabled = e, this._buildPipeline()
|
|
}
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "MotionBlurEnabled", {
|
|
get: function() {
|
|
return this._motionBlurEnabled
|
|
},
|
|
set: function(e) {
|
|
this._motionBlurEnabled !== e && (this._motionBlurEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "fxaaEnabled", {
|
|
get: function() {
|
|
return this._fxaaEnabled
|
|
},
|
|
set: function(e) {
|
|
this._fxaaEnabled !== e && (this._fxaaEnabled = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "volumetricLightStepsCount", {
|
|
get: function() {
|
|
return this._volumetricLightStepsCount
|
|
},
|
|
set: function(e) {
|
|
this.volumetricLightPostProcess && this.volumetricLightPostProcess.updateEffect("#define VLS\n#define NB_STEPS " + e.toFixed(1)), this._volumetricLightStepsCount = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "motionBlurSamples", {
|
|
get: function() {
|
|
return this._motionBlurSamples
|
|
},
|
|
set: function(e) {
|
|
this.motionBlurPostProcess && this.motionBlurPostProcess.updateEffect("#define MOTION_BLUR\n#define MAX_MOTION_SAMPLES " + e.toFixed(1)), this._motionBlurSamples = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "samples", {
|
|
get: function() {
|
|
return this._samples
|
|
},
|
|
set: function(e) {
|
|
this._samples !== e && (this._samples = e, this._buildPipeline())
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._buildPipeline = function() {
|
|
var e = this,
|
|
t = this._ratio,
|
|
i = this._scene;
|
|
this._disposePostProcesses(), this._reset(), this._basePostProcess ? this.originalPostProcess = this._basePostProcess : (this.originalPostProcess = new Ht("HDRPass", "standard", [], [], t, null, _.a.TEXTURE_BILINEAR_SAMPLINGMODE, i.getEngine(), !1, "#define PASS_POST_PROCESS", this._floatTextureType), this.originalPostProcess.onApply = function() {
|
|
e._currentDepthOfFieldSource = e.originalPostProcess
|
|
}), (this._bloomEnabled || this._vlsEnabled || this._lensFlareEnabled || this._depthOfFieldEnabled || this._motionBlurEnabled) && this.addEffect(new Ja(i.getEngine(), "HDRPassPostProcess", function() {
|
|
return e.originalPostProcess
|
|
}, !0)), this._currentDepthOfFieldSource = this.originalPostProcess, this._bloomEnabled && (this._createDownSampleX4PostProcess(i, t / 2), this._createBrightPassPostProcess(i, t / 2), this._createBlurPostProcesses(i, t / 4, 1), this._createTextureAdderPostProcess(i, t), this.textureAdderFinalPostProcess = new Ht("HDRDepthOfFieldSource", "standard", [], [], t, null, ke.a.BILINEAR_SAMPLINGMODE, i.getEngine(), !1, "#define PASS_POST_PROCESS", _.a.TEXTURETYPE_UNSIGNED_INT), this.addEffect(new Ja(i.getEngine(), "HDRBaseDepthOfFieldSource", function() {
|
|
return e.textureAdderFinalPostProcess
|
|
}, !0))), this._vlsEnabled && (this._createVolumetricLightPostProcess(i, t), this.volumetricLightFinalPostProcess = new Ht("HDRVLSFinal", "standard", [], [], t, null, ke.a.BILINEAR_SAMPLINGMODE, i.getEngine(), !1, "#define PASS_POST_PROCESS", _.a.TEXTURETYPE_UNSIGNED_INT), this.addEffect(new Ja(i.getEngine(), "HDRVLSFinal", function() {
|
|
return e.volumetricLightFinalPostProcess
|
|
}, !0))), this._lensFlareEnabled && (this._createLensFlarePostProcess(i, t), this.lensFlareFinalPostProcess = new Ht("HDRPostLensFlareDepthOfFieldSource", "standard", [], [], t, null, ke.a.BILINEAR_SAMPLINGMODE, i.getEngine(), !1, "#define PASS_POST_PROCESS", _.a.TEXTURETYPE_UNSIGNED_INT), this.addEffect(new Ja(i.getEngine(), "HDRPostLensFlareDepthOfFieldSource", function() {
|
|
return e.lensFlareFinalPostProcess
|
|
}, !0))), this._hdrEnabled && (this._createLuminancePostProcesses(i, this._floatTextureType), this._createHdrPostProcess(i, t), this.hdrFinalPostProcess = new Ht("HDRPostHDReDepthOfFieldSource", "standard", [], [], t, null, ke.a.BILINEAR_SAMPLINGMODE, i.getEngine(), !1, "#define PASS_POST_PROCESS", _.a.TEXTURETYPE_UNSIGNED_INT), this.addEffect(new Ja(i.getEngine(), "HDRPostHDReDepthOfFieldSource", function() {
|
|
return e.hdrFinalPostProcess
|
|
}, !0))), this._depthOfFieldEnabled && (this._createBlurPostProcesses(i, t / 2, 3, "depthOfFieldBlurWidth"), this._createDepthOfFieldPostProcess(i, t)), this._motionBlurEnabled && this._createMotionBlurPostProcess(i, t), this._fxaaEnabled && (this.fxaaPostProcess = new xc("fxaa", 1, null, ke.a.BILINEAR_SAMPLINGMODE, i.getEngine(), !1, _.a.TEXTURETYPE_UNSIGNED_INT), this.addEffect(new Ja(i.getEngine(), "HDRFxaa", function() {
|
|
return e.fxaaPostProcess
|
|
}, !0))), null !== this._cameras && this._scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(this._name, this._cameras), !this._enableMSAAOnFirstPostProcess(this._samples) && this._samples > 1 && p.a.Warn("MSAA failed to enable, MSAA is only supported in browsers that support webGL >= 2.0")
|
|
}, t.prototype._createDownSampleX4PostProcess = function(e, t) {
|
|
var i = this,
|
|
n = new Array(32);
|
|
this.downSampleX4PostProcess = new Ht("HDRDownSampleX4", "standard", ["dsOffsets"], [], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define DOWN_SAMPLE_X4", _.a.TEXTURETYPE_UNSIGNED_INT), this.downSampleX4PostProcess.onApply = function(e) {
|
|
for (var t = 0, r = i.downSampleX4PostProcess.width, o = i.downSampleX4PostProcess.height, s = -2; s < 2; s++)
|
|
for (var a = -2; a < 2; a++) n[t] = (s + .5) * (1 / r), n[t + 1] = (a + .5) * (1 / o), t += 2;
|
|
e.setArray2("dsOffsets", n)
|
|
}, this.addEffect(new Ja(e.getEngine(), "HDRDownSampleX4", function() {
|
|
return i.downSampleX4PostProcess
|
|
}, !0))
|
|
}, t.prototype._createBrightPassPostProcess = function(e, t) {
|
|
var i = this,
|
|
n = new Array(8);
|
|
this.brightPassPostProcess = new Ht("HDRBrightPass", "standard", ["dsOffsets", "brightThreshold"], [], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define BRIGHT_PASS", _.a.TEXTURETYPE_UNSIGNED_INT), this.brightPassPostProcess.onApply = function(e) {
|
|
var t = 1 / i.brightPassPostProcess.width,
|
|
r = 1 / i.brightPassPostProcess.height;
|
|
n[0] = -.5 * t, n[1] = .5 * r, n[2] = .5 * t, n[3] = .5 * r, n[4] = -.5 * t, n[5] = -.5 * r, n[6] = .5 * t, n[7] = -.5 * r, e.setArray2("dsOffsets", n), e.setFloat("brightThreshold", i.brightThreshold)
|
|
}, this.addEffect(new Ja(e.getEngine(), "HDRBrightPass", function() {
|
|
return i.brightPassPostProcess
|
|
}, !0))
|
|
}, t.prototype._createBlurPostProcesses = function(e, t, i, n) {
|
|
var r = this;
|
|
void 0 === n && (n = "blurWidth");
|
|
var s = e.getEngine(),
|
|
a = new $n("HDRBlurH_" + i, new o.w(1, 0), this[n], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, _.a.TEXTURETYPE_UNSIGNED_INT),
|
|
c = new $n("HDRBlurV_" + i, new o.w(0, 1), this[n], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
a.onActivateObservable.add(function() {
|
|
var e = a.width / s.getRenderWidth();
|
|
a.kernel = r[n] * e
|
|
}), c.onActivateObservable.add(function() {
|
|
var e = c.height / s.getRenderHeight();
|
|
c.kernel = r.horizontalBlur ? 64 * e : r[n] * e
|
|
}), this.addEffect(new Ja(e.getEngine(), "HDRBlurH" + i, function() {
|
|
return a
|
|
}, !0)), this.addEffect(new Ja(e.getEngine(), "HDRBlurV" + i, function() {
|
|
return c
|
|
}, !0)), this.blurHPostProcesses.push(a), this.blurVPostProcesses.push(c)
|
|
}, t.prototype._createTextureAdderPostProcess = function(e, t) {
|
|
var i = this;
|
|
this.textureAdderPostProcess = new Ht("HDRTextureAdder", "standard", ["exposure"], ["otherSampler", "lensSampler"], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define TEXTURE_ADDER", _.a.TEXTURETYPE_UNSIGNED_INT), this.textureAdderPostProcess.onApply = function(e) {
|
|
e.setTextureFromPostProcess("otherSampler", i._vlsEnabled ? i._currentDepthOfFieldSource : i.originalPostProcess), e.setTexture("lensSampler", i.lensTexture), e.setFloat("exposure", i._currentExposure), i._currentDepthOfFieldSource = i.textureAdderFinalPostProcess
|
|
}, this.addEffect(new Ja(e.getEngine(), "HDRTextureAdder", function() {
|
|
return i.textureAdderPostProcess
|
|
}, !0))
|
|
}, t.prototype._createVolumetricLightPostProcess = function(e, t) {
|
|
var i = this,
|
|
n = e.enableGeometryBufferRenderer();
|
|
n.enablePosition = !0;
|
|
var r = n.getGBuffer();
|
|
this.volumetricLightPostProcess = new Ht("HDRVLS", "standard", ["shadowViewProjection", "cameraPosition", "sunDirection", "sunColor", "scatteringCoefficient", "scatteringPower", "depthValues"], ["shadowMapSampler", "positionSampler"], t / 8, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define VLS\n#define NB_STEPS " + this._volumetricLightStepsCount.toFixed(1));
|
|
var s = o.w.Zero();
|
|
this.volumetricLightPostProcess.onApply = function(e) {
|
|
if (i.sourceLight && i.sourceLight.getShadowGenerator() && i._scene.activeCamera) {
|
|
var t = i.sourceLight.getShadowGenerator();
|
|
e.setTexture("shadowMapSampler", t.getShadowMap()), e.setTexture("positionSampler", r.textures[2]), e.setColor3("sunColor", i.sourceLight.diffuse), e.setVector3("sunDirection", i.sourceLight.getShadowDirection()), e.setVector3("cameraPosition", i._scene.activeCamera.globalPosition), e.setMatrix("shadowViewProjection", t.getTransformMatrix()), e.setFloat("scatteringCoefficient", i.volumetricLightCoefficient), e.setFloat("scatteringPower", i.volumetricLightPower), s.x = i.sourceLight.getDepthMinZ(i._scene.activeCamera), s.y = i.sourceLight.getDepthMaxZ(i._scene.activeCamera), e.setVector2("depthValues", s)
|
|
}
|
|
}, this.addEffect(new Ja(e.getEngine(), "HDRVLS", function() {
|
|
return i.volumetricLightPostProcess
|
|
}, !0)), this._createBlurPostProcesses(e, t / 4, 0, "volumetricLightBlurScale"), this.volumetricLightMergePostProces = new Ht("HDRVLSMerge", "standard", [], ["originalSampler"], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define VLSMERGE"), this.volumetricLightMergePostProces.onApply = function(e) {
|
|
e.setTextureFromPostProcess("originalSampler", i._bloomEnabled ? i.textureAdderFinalPostProcess : i.originalPostProcess), i._currentDepthOfFieldSource = i.volumetricLightFinalPostProcess
|
|
}, this.addEffect(new Ja(e.getEngine(), "HDRVLSMerge", function() {
|
|
return i.volumetricLightMergePostProces
|
|
}, !0))
|
|
}, t.prototype._createLuminancePostProcesses = function(e, i) {
|
|
var n = this,
|
|
r = Math.pow(3, t.LuminanceSteps);
|
|
this.luminancePostProcess = new Ht("HDRLuminance", "standard", ["lumOffsets"], [], {
|
|
width: r,
|
|
height: r
|
|
}, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define LUMINANCE", i);
|
|
var s = [];
|
|
this.luminancePostProcess.onApply = function(e) {
|
|
var t = 1 / n.luminancePostProcess.width,
|
|
i = 1 / n.luminancePostProcess.height;
|
|
s[0] = -.5 * t, s[1] = .5 * i, s[2] = .5 * t, s[3] = .5 * i, s[4] = -.5 * t, s[5] = -.5 * i, s[6] = .5 * t, s[7] = -.5 * i, e.setArray2("lumOffsets", s)
|
|
}, this.addEffect(new Ja(e.getEngine(), "HDRLuminance", function() {
|
|
return n.luminancePostProcess
|
|
}, !0));
|
|
for (var a = t.LuminanceSteps - 1; a >= 0; a--) {
|
|
r = Math.pow(3, a);
|
|
var c = "#define LUMINANCE_DOWN_SAMPLE\n";
|
|
0 === a && (c += "#define FINAL_DOWN_SAMPLER");
|
|
var l = new Ht("HDRLuminanceDownSample" + a, "standard", ["dsOffsets", "halfDestPixelSize"], [], {
|
|
width: r,
|
|
height: r
|
|
}, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, c, i);
|
|
this.luminanceDownSamplePostProcesses.push(l)
|
|
}
|
|
var u = this.luminancePostProcess;
|
|
this.luminanceDownSamplePostProcesses.forEach(function(t, i) {
|
|
var r = new Array(18);
|
|
t.onApply = function(e) {
|
|
if (u) {
|
|
for (var o = 0, s = -1; s < 2; s++)
|
|
for (var a = -1; a < 2; a++) r[o] = s / u.width, r[o + 1] = a / u.height, o += 2;
|
|
e.setArray2("dsOffsets", r), e.setFloat("halfDestPixelSize", .5 / u.width), u = i === n.luminanceDownSamplePostProcesses.length - 1 ? n.luminancePostProcess : t
|
|
}
|
|
}, i === n.luminanceDownSamplePostProcesses.length - 1 && (t.onAfterRender = function() {
|
|
var t = e.getEngine().readPixels(0, 0, 1, 1),
|
|
i = new o.y(1 / 16581375, 1 / 65025, 1 / 255, 1);
|
|
n._hdrCurrentLuminance = (t[0] * i.x + t[1] * i.y + t[2] * i.z + t[3] * i.w) / 100
|
|
}), n.addEffect(new Ja(e.getEngine(), "HDRLuminanceDownSample" + i, function() {
|
|
return t
|
|
}, !0))
|
|
})
|
|
}, t.prototype._createHdrPostProcess = function(e, t) {
|
|
var i = this,
|
|
n = ["#define HDR"];
|
|
this._hdrAutoExposure && n.push("#define AUTO_EXPOSURE"), this.hdrPostProcess = new Ht("HDR", "standard", ["averageLuminance"], ["textureAdderSampler"], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, n.join("\n"), _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
var r = 1,
|
|
o = 0,
|
|
s = 0;
|
|
this.hdrPostProcess.onApply = function(t) {
|
|
if (t.setTextureFromPostProcess("textureAdderSampler", i._currentDepthOfFieldSource), o += e.getEngine().getDeltaTime(), r < 0) r = i._hdrCurrentLuminance;
|
|
else {
|
|
var n = (s - o) / 1e3;
|
|
i._hdrCurrentLuminance < r + i.hdrDecreaseRate * n ? r += i.hdrDecreaseRate * n : i._hdrCurrentLuminance > r - i.hdrIncreaseRate * n ? r -= i.hdrIncreaseRate * n : r = i._hdrCurrentLuminance
|
|
}
|
|
i.hdrAutoExposure ? i._currentExposure = i._fixedExposure / r : (r = D.a.Clamp(r, i.hdrMinimumLuminance, 1e20), t.setFloat("averageLuminance", r)), s = o, i._currentDepthOfFieldSource = i.hdrFinalPostProcess
|
|
}, this.addEffect(new Ja(e.getEngine(), "HDR", function() {
|
|
return i.hdrPostProcess
|
|
}, !0))
|
|
}, t.prototype._createLensFlarePostProcess = function(e, t) {
|
|
var i = this;
|
|
this.lensFlarePostProcess = new Ht("HDRLensFlare", "standard", ["strength", "ghostDispersal", "haloWidth", "resolution", "distortionStrength"], ["lensColorSampler"], t / 2, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define LENS_FLARE", _.a.TEXTURETYPE_UNSIGNED_INT), this.addEffect(new Ja(e.getEngine(), "HDRLensFlare", function() {
|
|
return i.lensFlarePostProcess
|
|
}, !0)), this._createBlurPostProcesses(e, t / 4, 2), this.lensFlareComposePostProcess = new Ht("HDRLensFlareCompose", "standard", ["lensStarMatrix"], ["otherSampler", "lensDirtSampler", "lensStarSampler"], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define LENS_FLARE_COMPOSE", _.a.TEXTURETYPE_UNSIGNED_INT), this.addEffect(new Ja(e.getEngine(), "HDRLensFlareCompose", function() {
|
|
return i.lensFlareComposePostProcess
|
|
}, !0));
|
|
var n = new o.w(0, 0);
|
|
this.lensFlarePostProcess.onApply = function(e) {
|
|
e.setTextureFromPostProcess("textureSampler", i._bloomEnabled ? i.blurHPostProcesses[0] : i.originalPostProcess), e.setTexture("lensColorSampler", i.lensColorTexture), e.setFloat("strength", i.lensFlareStrength), e.setFloat("ghostDispersal", i.lensFlareGhostDispersal), e.setFloat("haloWidth", i.lensFlareHaloWidth), n.x = i.lensFlarePostProcess.width, n.y = i.lensFlarePostProcess.height, e.setVector2("resolution", n), e.setFloat("distortionStrength", i.lensFlareDistortionStrength)
|
|
};
|
|
var r = o.j.FromValues(2, 0, -1, 0, 0, 2, -1, 0, 0, 0, 1, 0, 0, 0, 0, 1),
|
|
s = o.j.FromValues(.5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
this.lensFlareComposePostProcess.onApply = function(e) {
|
|
if (i._scene.activeCamera) {
|
|
e.setTextureFromPostProcess("otherSampler", i._currentDepthOfFieldSource), e.setTexture("lensDirtSampler", i.lensFlareDirtTexture), e.setTexture("lensStarSampler", i.lensStarTexture);
|
|
var t = i._scene.activeCamera.getViewMatrix().getRow(0),
|
|
n = i._scene.activeCamera.getViewMatrix().getRow(2),
|
|
a = o.x.Dot(t.toVector3(), new o.x(1, 0, 0)) + o.x.Dot(n.toVector3(), new o.x(0, 0, 1));
|
|
a *= 4;
|
|
var c = o.j.FromValues(.5 * Math.cos(a), -Math.sin(a), 0, 0, Math.sin(a), .5 * Math.cos(a), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1),
|
|
l = s.multiply(c).multiply(r);
|
|
e.setMatrix("lensStarMatrix", l), i._currentDepthOfFieldSource = i.lensFlareFinalPostProcess
|
|
}
|
|
}
|
|
}, t.prototype._createDepthOfFieldPostProcess = function(e, t) {
|
|
var i = this;
|
|
this.depthOfFieldPostProcess = new Ht("HDRDepthOfField", "standard", ["distance"], ["otherSampler", "depthSampler"], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define DEPTH_OF_FIELD", _.a.TEXTURETYPE_UNSIGNED_INT), this.depthOfFieldPostProcess.onApply = function(e) {
|
|
e.setTextureFromPostProcess("otherSampler", i._currentDepthOfFieldSource), e.setTexture("depthSampler", i._getDepthTexture()), e.setFloat("distance", i.depthOfFieldDistance)
|
|
}, this.addEffect(new Ja(e.getEngine(), "HDRDepthOfField", function() {
|
|
return i.depthOfFieldPostProcess
|
|
}, !0))
|
|
}, t.prototype._createMotionBlurPostProcess = function(e, t) {
|
|
var i = this;
|
|
this.motionBlurPostProcess = new Ht("HDRMotionBlur", "standard", ["inverseViewProjection", "prevViewProjection", "screenSize", "motionScale", "motionStrength"], ["depthSampler"], t, null, ke.a.BILINEAR_SAMPLINGMODE, e.getEngine(), !1, "#define MOTION_BLUR\n#define MAX_MOTION_SAMPLES " + this.motionBlurSamples.toFixed(1), _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
var n = 0,
|
|
r = o.j.Identity(),
|
|
s = o.j.Identity(),
|
|
a = o.j.Identity(),
|
|
c = o.w.Zero();
|
|
this.motionBlurPostProcess.onApply = function(t) {
|
|
(a = e.getProjectionMatrix().multiply(e.getViewMatrix())).invertToRef(s), t.setMatrix("inverseViewProjection", s), t.setMatrix("prevViewProjection", r), r = a, c.x = i.motionBlurPostProcess.width, c.y = i.motionBlurPostProcess.height, t.setVector2("screenSize", c), n = e.getEngine().getFps() / 60, t.setFloat("motionScale", n), t.setFloat("motionStrength", i.motionStrength), t.setTexture("depthSampler", i._getDepthTexture())
|
|
}, this.addEffect(new Ja(e.getEngine(), "HDRMotionBlur", function() {
|
|
return i.motionBlurPostProcess
|
|
}, !0))
|
|
}, t.prototype._getDepthTexture = function() {
|
|
return this._scene.getEngine().getCaps().drawBuffersExtension ? this._scene.enableGeometryBufferRenderer().getGBuffer().textures[0] : this._scene.enableDepthRenderer().getDepthMap()
|
|
}, t.prototype._disposePostProcesses = function() {
|
|
for (var e = 0; e < this._cameras.length; e++) {
|
|
var t = this._cameras[e];
|
|
this.originalPostProcess && this.originalPostProcess.dispose(t), this.downSampleX4PostProcess && this.downSampleX4PostProcess.dispose(t), this.brightPassPostProcess && this.brightPassPostProcess.dispose(t), this.textureAdderPostProcess && this.textureAdderPostProcess.dispose(t), this.textureAdderFinalPostProcess && this.textureAdderFinalPostProcess.dispose(t), this.volumetricLightPostProcess && this.volumetricLightPostProcess.dispose(t), this.volumetricLightSmoothXPostProcess && this.volumetricLightSmoothXPostProcess.dispose(t), this.volumetricLightSmoothYPostProcess && this.volumetricLightSmoothYPostProcess.dispose(t), this.volumetricLightMergePostProces && this.volumetricLightMergePostProces.dispose(t), this.volumetricLightFinalPostProcess && this.volumetricLightFinalPostProcess.dispose(t), this.lensFlarePostProcess && this.lensFlarePostProcess.dispose(t), this.lensFlareComposePostProcess && this.lensFlareComposePostProcess.dispose(t);
|
|
for (var i = 0; i < this.luminanceDownSamplePostProcesses.length; i++) this.luminanceDownSamplePostProcesses[i].dispose(t);
|
|
this.luminancePostProcess && this.luminancePostProcess.dispose(t), this.hdrPostProcess && this.hdrPostProcess.dispose(t), this.hdrFinalPostProcess && this.hdrFinalPostProcess.dispose(t), this.depthOfFieldPostProcess && this.depthOfFieldPostProcess.dispose(t), this.motionBlurPostProcess && this.motionBlurPostProcess.dispose(t), this.fxaaPostProcess && this.fxaaPostProcess.dispose(t);
|
|
for (i = 0; i < this.blurHPostProcesses.length; i++) this.blurHPostProcesses[i].dispose(t);
|
|
for (i = 0; i < this.blurVPostProcesses.length; i++) this.blurVPostProcesses[i].dispose(t)
|
|
}
|
|
this.originalPostProcess = null, this.downSampleX4PostProcess = null, this.brightPassPostProcess = null, this.textureAdderPostProcess = null, this.textureAdderFinalPostProcess = null, this.volumetricLightPostProcess = null, this.volumetricLightSmoothXPostProcess = null, this.volumetricLightSmoothYPostProcess = null, this.volumetricLightMergePostProces = null, this.volumetricLightFinalPostProcess = null, this.lensFlarePostProcess = null, this.lensFlareComposePostProcess = null, this.luminancePostProcess = null, this.hdrPostProcess = null, this.hdrFinalPostProcess = null, this.depthOfFieldPostProcess = null, this.motionBlurPostProcess = null, this.fxaaPostProcess = null, this.luminanceDownSamplePostProcesses = [], this.blurHPostProcesses = [], this.blurVPostProcesses = []
|
|
}, t.prototype.dispose = function() {
|
|
this._disposePostProcesses(), this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._cameras), e.prototype.dispose.call(this)
|
|
}, t.prototype.serialize = function() {
|
|
var e = L.a.Serialize(this);
|
|
return this.sourceLight && (e.sourceLightId = this.sourceLight.id), e.customType = "StandardRenderingPipeline", e
|
|
}, t.Parse = function(e, i, n) {
|
|
var r = L.a.Parse(function() {
|
|
return new t(e._name, i, e._ratio)
|
|
}, e, i, n);
|
|
return e.sourceLightId && (r.sourceLight = i.getLightByID(e.sourceLightId)), r
|
|
}, t.LuminanceSteps = 6, l.c([Object(L.c)()], t.prototype, "brightThreshold", void 0), l.c([Object(L.c)()], t.prototype, "blurWidth", void 0), l.c([Object(L.c)()], t.prototype, "horizontalBlur", void 0), l.c([Object(L.c)()], t.prototype, "exposure", null), l.c([Object(L.m)("lensTexture")], t.prototype, "lensTexture", void 0), l.c([Object(L.c)()], t.prototype, "volumetricLightCoefficient", void 0), l.c([Object(L.c)()], t.prototype, "volumetricLightPower", void 0), l.c([Object(L.c)()], t.prototype, "volumetricLightBlurScale", void 0), l.c([Object(L.c)()], t.prototype, "hdrMinimumLuminance", void 0), l.c([Object(L.c)()], t.prototype, "hdrDecreaseRate", void 0), l.c([Object(L.c)()], t.prototype, "hdrIncreaseRate", void 0), l.c([Object(L.c)()], t.prototype, "hdrAutoExposure", null), l.c([Object(L.m)("lensColorTexture")], t.prototype, "lensColorTexture", void 0), l.c([Object(L.c)()], t.prototype, "lensFlareStrength", void 0), l.c([Object(L.c)()], t.prototype, "lensFlareGhostDispersal", void 0), l.c([Object(L.c)()], t.prototype, "lensFlareHaloWidth", void 0), l.c([Object(L.c)()], t.prototype, "lensFlareDistortionStrength", void 0), l.c([Object(L.m)("lensStarTexture")], t.prototype, "lensStarTexture", void 0), l.c([Object(L.m)("lensFlareDirtTexture")], t.prototype, "lensFlareDirtTexture", void 0), l.c([Object(L.c)()], t.prototype, "depthOfFieldDistance", void 0), l.c([Object(L.c)()], t.prototype, "depthOfFieldBlurWidth", void 0), l.c([Object(L.c)()], t.prototype, "motionStrength", void 0), l.c([Object(L.c)()], t.prototype, "_ratio", void 0), l.c([Object(L.c)()], t.prototype, "BloomEnabled", null), l.c([Object(L.c)()], t.prototype, "DepthOfFieldEnabled", null), l.c([Object(L.c)()], t.prototype, "LensFlareEnabled", null), l.c([Object(L.c)()], t.prototype, "HDREnabled", null), l.c([Object(L.c)()], t.prototype, "VLSEnabled", null), l.c([Object(L.c)()], t.prototype, "MotionBlurEnabled", null), l.c([Object(L.c)()], t.prototype, "fxaaEnabled", null), l.c([Object(L.c)()], t.prototype, "volumetricLightStepsCount", null), l.c([Object(L.c)()], t.prototype, "motionBlurSamples", null), l.c([Object(L.c)()], t.prototype, "samples", null), t
|
|
}(Vc);
|
|
s.a.RegisteredTypes["BABYLON.StandardRenderingPipeline"] = Jc;
|
|
var $c = "\nvarying vec2 vUV;\nuniform sampler2D textureSampler;\n\nuniform float _ExposureAdjustment;\n#if defined(HABLE_TONEMAPPING)\nconst float A=0.15;\nconst float B=0.50;\nconst float C=0.10;\nconst float D=0.20;\nconst float E=0.02;\nconst float F=0.30;\nconst float W=11.2;\n#endif\nfloat Luminance(vec3 c)\n{\nreturn dot(c,vec3(0.22,0.707,0.071));\n}\nvoid main(void)\n{\nvec3 colour=texture2D(textureSampler,vUV).rgb;\n#if defined(REINHARD_TONEMAPPING)\nfloat lum=Luminance(colour.rgb);\nfloat lumTm=lum*_ExposureAdjustment;\nfloat scale=lumTm/(1.0+lumTm);\ncolour*=scale/lum;\n#elif defined(HABLE_TONEMAPPING)\ncolour*=_ExposureAdjustment;\nconst float ExposureBias=2.0;\nvec3 x=ExposureBias*colour;\nvec3 curr=((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;\nx=vec3(W,W,W);\nvec3 whiteScale=1.0/(((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F);\ncolour=curr*whiteScale;\n#elif defined(OPTIMIZED_HEJIDAWSON_TONEMAPPING)\ncolour*=_ExposureAdjustment;\nvec3 X=max(vec3(0.0,0.0,0.0),colour-0.004);\nvec3 retColor=(X*(6.2*X+0.5))/(X*(6.2*X+1.7)+0.06);\ncolour=retColor*retColor;\n#elif defined(PHOTOGRAPHIC_TONEMAPPING)\ncolour=vec3(1.0,1.0,1.0)-exp2(-_ExposureAdjustment*colour);\n#endif\ngl_FragColor=vec4(colour.rgb,1.0);\n}";
|
|
zt.a.ShadersStore.tonemapPixelShader = $c;
|
|
var el;
|
|
! function(e) {
|
|
e[e.Hable = 0] = "Hable", e[e.Reinhard = 1] = "Reinhard", e[e.HejiDawson = 2] = "HejiDawson", e[e.Photographic = 3] = "Photographic"
|
|
}(el || (el = {}));
|
|
var tl = function(e) {
|
|
function t(t, i, n, r, o, s, a) {
|
|
void 0 === o && (o = _.a.TEXTURE_BILINEAR_SAMPLINGMODE), void 0 === a && (a = _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
var c = e.call(this, t, "tonemap", ["_ExposureAdjustment"], null, 1, r, o, s, !0, null, a) || this;
|
|
c._operator = i, c.exposureAdjustment = n;
|
|
var l = "#define ";
|
|
return c._operator === el.Hable ? l += "HABLE_TONEMAPPING" : c._operator === el.Reinhard ? l += "REINHARD_TONEMAPPING" : c._operator === el.HejiDawson ? l += "OPTIMIZED_HEJIDAWSON_TONEMAPPING" : c._operator === el.Photographic && (l += "PHOTOGRAPHIC_TONEMAPPING"), c.updateEffect(l), c.onApply = function(e) {
|
|
e.setFloat("_ExposureAdjustment", c.exposureAdjustment)
|
|
}, c
|
|
}
|
|
return l.d(t, e), t
|
|
}(Ht),
|
|
il = "\nattribute vec3 position;\n#include<bonesDeclaration>\n\n#include<instancesDeclaration>\nuniform mat4 viewProjection;\nuniform vec2 depthValues;\n#if defined(ALPHATEST) || defined(NEED_UV)\nvarying vec2 vUV;\nuniform mat4 diffuseMatrix;\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#endif\nvarying float vDepthMetric;\nvoid main(void)\n{\n#include<instancesVertex>\n#include<bonesVertex>\ngl_Position=viewProjection*finalWorld*vec4(position,1.0);\nvDepthMetric=((gl_Position.z+depthValues.x)/(depthValues.y));\n#if defined(ALPHATEST) || defined(BASIC_RENDER)\n#ifdef UV1\nvUV=vec2(diffuseMatrix*vec4(uv,1.0,0.0));\n#endif\n#ifdef UV2\nvUV=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));\n#endif\n#endif\n}";
|
|
zt.a.ShadersStore.depthVertexShader = il;
|
|
var nl = "uniform sampler2D textureSampler;\nuniform sampler2D lightScatteringSampler;\nuniform float decay;\nuniform float exposure;\nuniform float weight;\nuniform float density;\nuniform vec2 meshPositionOnScreen;\nvarying vec2 vUV;\nvoid main(void) {\nvec2 tc=vUV;\nvec2 deltaTexCoord=(tc-meshPositionOnScreen.xy);\ndeltaTexCoord*=1.0/float(NUM_SAMPLES)*density;\nfloat illuminationDecay=1.0;\nvec4 color=texture2D(lightScatteringSampler,tc)*0.4;\nfor(int i=0; i<NUM_SAMPLES; i++) {\ntc-=deltaTexCoord;\nvec4 dataSample=texture2D(lightScatteringSampler,tc)*0.4;\ndataSample*=illuminationDecay*weight;\ncolor+=dataSample;\nilluminationDecay*=decay;\n}\nvec4 realColor=texture2D(textureSampler,vUV);\ngl_FragColor=((vec4((vec3(color.r,color.g,color.b)*exposure),1))+(realColor*(1.5-0.4)));\n}\n";
|
|
zt.a.ShadersStore.volumetricLightScatteringPixelShader = nl;
|
|
var rl = "#if defined(ALPHATEST) || defined(NEED_UV)\nvarying vec2 vUV;\n#endif\n#if defined(ALPHATEST)\nuniform sampler2D diffuseSampler;\n#endif\nvoid main(void)\n{\n#if defined(ALPHATEST)\nvec4 diffuseColor=texture2D(diffuseSampler,vUV);\nif (diffuseColor.a<0.4)\ndiscard;\n#endif\ngl_FragColor=vec4(0.0,0.0,0.0,1.0);\n}\n";
|
|
zt.a.ShadersStore.volumetricLightScatteringPassPixelShader = rl;
|
|
var ol = function(e) {
|
|
function t(i, n, r, s, a, c, l, u, h) {
|
|
void 0 === a && (a = 100), void 0 === c && (c = ke.a.BILINEAR_SAMPLINGMODE);
|
|
var d = e.call(this, i, "volumetricLightScattering", ["decay", "exposure", "weight", "meshPositionOnScreen", "density"], ["lightScatteringSampler"], n.postProcessRatio || n, r, c, l, u, "#define NUM_SAMPLES " + a) || this;
|
|
return d._screenCoordinates = o.w.Zero(), d.customMeshPosition = o.x.Zero(), d.useCustomMeshPosition = !1, d.invert = !0, d.excludedMeshes = new Array, d.exposure = .3, d.decay = .96815, d.weight = .58767, d.density = .926, l = (h = null === r ? h : r.getScene()).getEngine(), d._viewPort = new o.z(0, 0, 1, 1).toGlobal(l.getRenderWidth(), l.getRenderHeight()), d.mesh = null !== s ? s : t.CreateDefaultMesh("VolumetricLightScatteringMesh", h), d._createPass(h, n.passRatio || n), d.onActivate = function(e) {
|
|
d.isSupported || d.dispose(e), d.onActivate = null
|
|
}, d.onApplyObservable.add(function(e) {
|
|
d._updateMeshScreenCoordinates(h), e.setTexture("lightScatteringSampler", d._volumetricLightScatteringRTT), e.setFloat("exposure", d.exposure), e.setFloat("decay", d.decay), e.setFloat("weight", d.weight), e.setFloat("density", d.density), e.setVector2("meshPositionOnScreen", d._screenCoordinates)
|
|
}), d
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t.prototype, "useDiffuseColor", {
|
|
get: function() {
|
|
return p.a.Warn("VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead"), !1
|
|
},
|
|
set: function(e) {
|
|
p.a.Warn("VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead")
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getClassName = function() {
|
|
return "VolumetricLightScatteringPostProcess"
|
|
}, t.prototype._isReady = function(e, t) {
|
|
var i = e.getMesh();
|
|
if (i === this.mesh && i.material) return i.material.isReady(i);
|
|
var n = [],
|
|
r = [Oi.b.PositionKind],
|
|
o = e.getMaterial();
|
|
o && (o.needAlphaTesting() && n.push("#define ALPHATEST"), i.isVerticesDataPresent(Oi.b.UVKind) && (r.push(Oi.b.UVKind), n.push("#define UV1")), i.isVerticesDataPresent(Oi.b.UV2Kind) && (r.push(Oi.b.UV2Kind), n.push("#define UV2"))), i.useBones && i.computeBonesUsingShaders ? (r.push(Oi.b.MatricesIndicesKind), r.push(Oi.b.MatricesWeightsKind), n.push("#define NUM_BONE_INFLUENCERS " + i.numBoneInfluencers), n.push("#define BonesPerMesh " + (i.skeleton ? i.skeleton.bones.length + 1 : 0))) : n.push("#define NUM_BONE_INFLUENCERS 0"), t && (n.push("#define INSTANCES"), r.push("world0"), r.push("world1"), r.push("world2"), r.push("world3"));
|
|
var s = n.join("\n");
|
|
return this._cachedDefines !== s && (this._cachedDefines = s, this._volumetricLightScatteringPass = i.getScene().getEngine().createEffect({
|
|
vertexElement: "depth",
|
|
fragmentElement: "volumetricLightScatteringPass"
|
|
}, r, ["world", "mBones", "viewProjection", "diffuseMatrix"], ["diffuseSampler"], s)), this._volumetricLightScatteringPass.isReady()
|
|
}, t.prototype.setCustomMeshPosition = function(e) {
|
|
this.customMeshPosition = e
|
|
}, t.prototype.getCustomMeshPosition = function() {
|
|
return this.customMeshPosition
|
|
}, t.prototype.dispose = function(t) {
|
|
var i = t.getScene().customRenderTargets.indexOf(this._volumetricLightScatteringRTT); - 1 !== i && t.getScene().customRenderTargets.splice(i, 1), this._volumetricLightScatteringRTT.dispose(), e.prototype.dispose.call(this, t)
|
|
}, t.prototype.getPass = function() {
|
|
return this._volumetricLightScatteringRTT
|
|
}, t.prototype._meshExcluded = function(e) {
|
|
return this.excludedMeshes.length > 0 && -1 !== this.excludedMeshes.indexOf(e)
|
|
}, t.prototype._createPass = function(e, t) {
|
|
var i = this,
|
|
n = e.getEngine();
|
|
this._volumetricLightScatteringRTT = new _i("volumetricLightScatteringMap", {
|
|
width: n.getRenderWidth() * t,
|
|
height: n.getRenderHeight() * t
|
|
}, e, !1, !0, _.a.TEXTURETYPE_UNSIGNED_INT), this._volumetricLightScatteringRTT.wrapU = ke.a.CLAMP_ADDRESSMODE, this._volumetricLightScatteringRTT.wrapV = ke.a.CLAMP_ADDRESSMODE, this._volumetricLightScatteringRTT.renderList = null, this._volumetricLightScatteringRTT.renderParticles = !1, this._volumetricLightScatteringRTT.ignoreCameraViewport = !0;
|
|
var r = this.getCamera();
|
|
r ? r.customRenderTargets.push(this._volumetricLightScatteringRTT) : e.customRenderTargets.push(this._volumetricLightScatteringRTT);
|
|
var s, a = function(e) {
|
|
var t = e.getRenderingMesh();
|
|
if (!i._meshExcluded(t)) {
|
|
var n = e.getMaterial();
|
|
if (n) {
|
|
var r = t.getScene(),
|
|
o = r.getEngine();
|
|
o.setState(n.backFaceCulling);
|
|
var s = t._getInstancesRenderList(e._id);
|
|
if (!s.mustReturn) {
|
|
var a = o.getCaps().instancedArrays && null !== s.visibleInstances[e._id];
|
|
if (i._isReady(e, a)) {
|
|
var c = i._volumetricLightScatteringPass;
|
|
if (t === i.mesh && (c = e.effect ? e.effect : n.getEffect()), o.enableEffect(c), t._bind(e, c, so.a.TriangleFillMode), t === i.mesh) n.bind(t.getWorldMatrix(), t);
|
|
else {
|
|
if (i._volumetricLightScatteringPass.setMatrix("viewProjection", r.getTransformMatrix()), n && n.needAlphaTesting()) {
|
|
var l = n.getAlphaTestTexture();
|
|
i._volumetricLightScatteringPass.setTexture("diffuseSampler", l), l && i._volumetricLightScatteringPass.setMatrix("diffuseMatrix", l.getTextureMatrix())
|
|
}
|
|
t.useBones && t.computeBonesUsingShaders && t.skeleton && i._volumetricLightScatteringPass.setMatrices("mBones", t.skeleton.getTransformMatrices(t))
|
|
}
|
|
t._processRendering(e, i._volumetricLightScatteringPass, so.a.TriangleFillMode, s, a, function(e, t) {
|
|
return c.setMatrix("world", t)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
c = new o.f(0, 0, 0, 1);
|
|
this._volumetricLightScatteringRTT.onBeforeRenderObservable.add(function() {
|
|
s = e.clearColor, e.clearColor = c
|
|
}), this._volumetricLightScatteringRTT.onAfterRenderObservable.add(function() {
|
|
e.clearColor = s
|
|
}), this._volumetricLightScatteringRTT.customRenderFunction = function(t, i, n, r) {
|
|
var o, s = e.getEngine();
|
|
if (r.length) {
|
|
for (s.setColorWrite(!1), o = 0; o < r.length; o++) a(r.data[o]);
|
|
s.setColorWrite(!0)
|
|
}
|
|
for (o = 0; o < t.length; o++) a(t.data[o]);
|
|
for (o = 0; o < i.length; o++) a(i.data[o]);
|
|
if (n.length) {
|
|
for (o = 0; o < n.length; o++) {
|
|
var c = n.data[o],
|
|
l = c.getBoundingInfo();
|
|
l && e.activeCamera && (c._alphaIndex = c.getMesh().alphaIndex, c._distanceToCamera = l.boundingSphere.centerWorld.subtract(e.activeCamera.position).length())
|
|
}
|
|
var u = n.data.slice(0, n.length);
|
|
for (u.sort(function(e, t) {
|
|
return e._alphaIndex > t._alphaIndex ? 1 : e._alphaIndex < t._alphaIndex ? -1 : e._distanceToCamera < t._distanceToCamera ? 1 : e._distanceToCamera > t._distanceToCamera ? -1 : 0
|
|
}), s.setAlphaMode(_.a.ALPHA_COMBINE), o = 0; o < u.length; o++) a(u[o]);
|
|
s.setAlphaMode(_.a.ALPHA_DISABLE)
|
|
}
|
|
}
|
|
}, t.prototype._updateMeshScreenCoordinates = function(e) {
|
|
var t, i = e.getTransformMatrix();
|
|
t = this.useCustomMeshPosition ? this.customMeshPosition : this.attachedNode ? this.attachedNode.position : this.mesh.parent ? this.mesh.getAbsolutePosition() : this.mesh.position;
|
|
var n = o.x.Project(t, o.j.Identity(), i, this._viewPort);
|
|
this._screenCoordinates.x = n.x / this._viewPort.width, this._screenCoordinates.y = n.y / this._viewPort.height, this.invert && (this._screenCoordinates.y = 1 - this._screenCoordinates.y)
|
|
}, t.CreateDefaultMesh = function(e, t) {
|
|
var i = fe.a.CreatePlane(e, 1, t);
|
|
i.billboardMode = Fe.a.BILLBOARDMODE_ALL;
|
|
var n = new Ri.a(e + "Material", t);
|
|
return n.emissiveColor = new o.e(1, 1, 1), i.material = n, i
|
|
}, l.c([Object(L.o)()], t.prototype, "customMeshPosition", void 0), l.c([Object(L.c)()], t.prototype, "useCustomMeshPosition", void 0), l.c([Object(L.c)()], t.prototype, "invert", void 0), l.c([Object(L.k)()], t.prototype, "mesh", void 0), l.c([Object(L.c)()], t.prototype, "excludedMeshes", void 0), l.c([Object(L.c)()], t.prototype, "exposure", void 0), l.c([Object(L.c)()], t.prototype, "decay", void 0), l.c([Object(L.c)()], t.prototype, "weight", void 0), l.c([Object(L.c)()], t.prototype, "density", void 0), t
|
|
}(Ht);
|
|
i(126), i(127);
|
|
Object.defineProperty(W.a.prototype, "forceShowBoundingBoxes", {
|
|
get: function() {
|
|
return this._forceShowBoundingBoxes || !1
|
|
},
|
|
set: function(e) {
|
|
this._forceShowBoundingBoxes = e, e && this.getBoundingBoxRenderer()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), W.a.prototype.getBoundingBoxRenderer = function() {
|
|
return this._boundingBoxRenderer || (this._boundingBoxRenderer = new sl(this)), this._boundingBoxRenderer
|
|
}, Object.defineProperty(Fe.a.prototype, "showBoundingBox", {
|
|
get: function() {
|
|
return this._showBoundingBox || !1
|
|
},
|
|
set: function(e) {
|
|
this._showBoundingBox = e, e && this.getScene().getBoundingBoxRenderer()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
});
|
|
var sl = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_BOUNDINGBOXRENDERER, this.frontColor = new o.e(1, 1, 1), this.backColor = new o.e(.1, .1, .1), this.showBackLines = !0, this.renderList = new kt.a(32), this._vertexBuffers = {}, this.scene = e, e._addComponent(this)
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._beforeEvaluateActiveMeshStage.registerStep(Ae.a.STEP_BEFOREEVALUATEACTIVEMESH_BOUNDINGBOXRENDERER, this, this.reset), this.scene._activeMeshStage.registerStep(Ae.a.STEP_ACTIVEMESH_BOUNDINGBOXRENDERER, this, this._activeMesh), this.scene._evaluateSubMeshStage.registerStep(Ae.a.STEP_EVALUATESUBMESH_BOUNDINGBOXRENDERER, this, this._evaluateSubMesh), this.scene._afterRenderingGroupDrawStage.registerStep(Ae.a.STEP_AFTERRENDERINGGROUPDRAW_BOUNDINGBOXRENDERER, this, this.render)
|
|
}, e.prototype._evaluateSubMesh = function(e, t) {
|
|
if (e.showSubMeshesBoundingBox) {
|
|
var i = t.getBoundingInfo();
|
|
null != i && (i.boundingBox._tag = e.renderingGroupId, this.renderList.push(i.boundingBox))
|
|
}
|
|
}, e.prototype._activeMesh = function(e, t) {
|
|
if (e.showBoundingBox || this.scene.forceShowBoundingBoxes) {
|
|
var i = e.getBoundingInfo();
|
|
i.boundingBox._tag = t.renderingGroupId, this.renderList.push(i.boundingBox)
|
|
}
|
|
}, e.prototype._prepareRessources = function() {
|
|
if (!this._colorShader) {
|
|
this._colorShader = new as.a("colorShader", this.scene, "color", {
|
|
attributes: [Oi.b.PositionKind],
|
|
uniforms: ["world", "viewProjection", "color"]
|
|
});
|
|
var e = this.scene.getEngine(),
|
|
t = Mi.a.CreateBox({
|
|
size: 1
|
|
});
|
|
this._vertexBuffers[Oi.b.PositionKind] = new Oi.b(e, t.positions, Oi.b.PositionKind, !1), this._createIndexBuffer()
|
|
}
|
|
}, e.prototype._createIndexBuffer = function() {
|
|
var e = this.scene.getEngine();
|
|
this._indexBuffer = e.createIndexBuffer([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 7, 1, 6, 2, 5, 3, 4])
|
|
}, e.prototype.rebuild = function() {
|
|
var e = this._vertexBuffers[Oi.b.PositionKind];
|
|
e && e._rebuild(), this._createIndexBuffer()
|
|
}, e.prototype.reset = function() {
|
|
this.renderList.reset()
|
|
}, e.prototype.render = function(e) {
|
|
if (0 !== this.renderList.length && (this._prepareRessources(), this._colorShader.isReady())) {
|
|
var t = this.scene.getEngine();
|
|
t.setDepthWrite(!1), this._colorShader._preBind();
|
|
for (var i = 0; i < this.renderList.length; i++) {
|
|
var n = this.renderList.data[i];
|
|
if (n._tag === e) {
|
|
var r = n.minimum,
|
|
s = n.maximum.subtract(r),
|
|
a = r.add(s.scale(.5)),
|
|
c = o.j.Scaling(s.x, s.y, s.z).multiply(o.j.Translation(a.x, a.y, a.z)).multiply(n.getWorldMatrix());
|
|
t.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect()), this.showBackLines && (t.setDepthFunctionToGreaterOrEqual(), this.scene.resetCachedMaterial(), this._colorShader.setColor4("color", this.backColor.toColor4()), this._colorShader.bind(c), t.drawElementsType(so.a.LineListDrawMode, 0, 24)), t.setDepthFunctionToLess(), this.scene.resetCachedMaterial(), this._colorShader.setColor4("color", this.frontColor.toColor4()), this._colorShader.bind(c), t.drawElementsType(so.a.LineListDrawMode, 0, 24)
|
|
}
|
|
}
|
|
this._colorShader.unbind(), t.setDepthFunctionToLessOrEqual(), t.setDepthWrite(!0)
|
|
}
|
|
}, e.prototype.renderOcclusionBoundingBox = function(e) {
|
|
if (this._prepareRessources(), this._colorShader.isReady() && e._boundingInfo) {
|
|
var t = this.scene.getEngine();
|
|
t.setDepthWrite(!1), t.setColorWrite(!1), this._colorShader._preBind();
|
|
var i = e._boundingInfo.boundingBox,
|
|
n = i.minimum,
|
|
r = i.maximum.subtract(n),
|
|
s = n.add(r.scale(.5)),
|
|
a = o.j.Scaling(r.x, r.y, r.z).multiply(o.j.Translation(s.x, s.y, s.z)).multiply(i.getWorldMatrix());
|
|
t.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect()), t.setDepthFunctionToLess(), this.scene.resetCachedMaterial(), this._colorShader.bind(a), t.drawElementsType(so.a.LineListDrawMode, 0, 24), this._colorShader.unbind(), t.setDepthFunctionToLessOrEqual(), t.setDepthWrite(!0), t.setColorWrite(!0)
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
if (this._colorShader) {
|
|
this.renderList.dispose(), this._colorShader.dispose();
|
|
var e = this._vertexBuffers[Oi.b.PositionKind];
|
|
e && (e.dispose(), this._vertexBuffers[Oi.b.PositionKind] = null), this.scene.getEngine()._releaseBuffer(this._indexBuffer)
|
|
}
|
|
}, e
|
|
}(),
|
|
al = "#ifdef ALPHATEST\nvarying vec2 vUV;\nuniform sampler2D diffuseSampler;\n#endif\nvarying float vDepthMetric;\nvoid main(void)\n{\n#ifdef ALPHATEST\nif (texture2D(diffuseSampler,vUV).a<0.4)\ndiscard;\n#endif\ngl_FragColor=vec4(vDepthMetric,vDepthMetric*vDepthMetric,0.0,1.0);\n}";
|
|
zt.a.ShadersStore.depthPixelShader = al;
|
|
var cl = function() {
|
|
function e(t, i, n) {
|
|
var r = this;
|
|
void 0 === i && (i = _.a.TEXTURETYPE_FLOAT), void 0 === n && (n = null), this.useOnlyInActiveCamera = !1, this._scene = t, e._SceneComponentInitialization(this._scene), this._camera = n;
|
|
var s = t.getEngine();
|
|
this._depthMap = new _i("depthMap", {
|
|
width: s.getRenderWidth(),
|
|
height: s.getRenderHeight()
|
|
}, this._scene, !1, !0, i), this._depthMap.wrapU = ke.a.CLAMP_ADDRESSMODE, this._depthMap.wrapV = ke.a.CLAMP_ADDRESSMODE, this._depthMap.refreshRate = 1, this._depthMap.renderParticles = !1, this._depthMap.renderList = null, this._depthMap.activeCamera = this._camera, this._depthMap.ignoreCameraViewport = !0, this._depthMap.useCameraPostProcesses = !1, this._depthMap.onClearObservable.add(function(e) {
|
|
e.clear(new o.f(1, 1, 1, 1), !0, !0, !0)
|
|
});
|
|
var a = function(e) {
|
|
var t = e.getRenderingMesh(),
|
|
i = r._scene,
|
|
n = i.getEngine(),
|
|
o = e.getMaterial();
|
|
if (o) {
|
|
n.setState(o.backFaceCulling, 0, !1, i.useRightHandedSystem);
|
|
var s = t._getInstancesRenderList(e._id);
|
|
if (!s.mustReturn) {
|
|
var a = n.getCaps().instancedArrays && null !== s.visibleInstances[e._id],
|
|
c = r._camera || i.activeCamera;
|
|
if (r.isReady(e, a) && c) {
|
|
if (n.enableEffect(r._effect), t._bind(e, r._effect, so.a.TriangleFillMode), r._effect.setMatrix("viewProjection", i.getTransformMatrix()), r._effect.setFloat2("depthValues", c.minZ, c.minZ + c.maxZ), o && o.needAlphaTesting()) {
|
|
var l = o.getAlphaTestTexture();
|
|
l && (r._effect.setTexture("diffuseSampler", l), r._effect.setMatrix("diffuseMatrix", l.getTextureMatrix()))
|
|
}
|
|
t.useBones && t.computeBonesUsingShaders && t.skeleton && r._effect.setMatrices("mBones", t.skeleton.getTransformMatrices(t)), t._processRendering(e, r._effect, so.a.TriangleFillMode, s, a, function(e, t) {
|
|
return r._effect.setMatrix("world", t)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
};
|
|
this._depthMap.customRenderFunction = function(e, t, i, n) {
|
|
var r;
|
|
if (n.length) {
|
|
for (s.setColorWrite(!1), r = 0; r < n.length; r++) a(n.data[r]);
|
|
s.setColorWrite(!0)
|
|
}
|
|
for (r = 0; r < e.length; r++) a(e.data[r]);
|
|
for (r = 0; r < t.length; r++) a(t.data[r])
|
|
}
|
|
}
|
|
return e.prototype.isReady = function(e, t) {
|
|
var i = e.getMaterial();
|
|
if (i.disableDepthWrite) return !1;
|
|
var n = [],
|
|
r = [Oi.b.PositionKind],
|
|
o = e.getMesh();
|
|
i && i.needAlphaTesting() && i.getAlphaTestTexture() && (n.push("#define ALPHATEST"), o.isVerticesDataPresent(Oi.b.UVKind) && (r.push(Oi.b.UVKind), n.push("#define UV1")), o.isVerticesDataPresent(Oi.b.UV2Kind) && (r.push(Oi.b.UV2Kind), n.push("#define UV2"))), o.useBones && o.computeBonesUsingShaders ? (r.push(Oi.b.MatricesIndicesKind), r.push(Oi.b.MatricesWeightsKind), o.numBoneInfluencers > 4 && (r.push(Oi.b.MatricesIndicesExtraKind), r.push(Oi.b.MatricesWeightsExtraKind)), n.push("#define NUM_BONE_INFLUENCERS " + o.numBoneInfluencers), n.push("#define BonesPerMesh " + (o.skeleton ? o.skeleton.bones.length + 1 : 0))) : n.push("#define NUM_BONE_INFLUENCERS 0"), t && (n.push("#define INSTANCES"), r.push("world0"), r.push("world1"), r.push("world2"), r.push("world3"));
|
|
var s = n.join("\n");
|
|
return this._cachedDefines !== s && (this._cachedDefines = s, this._effect = this._scene.getEngine().createEffect("depth", r, ["world", "mBones", "viewProjection", "diffuseMatrix", "depthValues"], ["diffuseSampler"], s)), this._effect.isReady()
|
|
}, e.prototype.getDepthMap = function() {
|
|
return this._depthMap
|
|
}, e.prototype.dispose = function() {
|
|
this._depthMap.dispose()
|
|
}, e._SceneComponentInitialization = function(e) {
|
|
throw be.a.WarnImport("DepthRendererSceneComponent")
|
|
}, e
|
|
}();
|
|
W.a.prototype.enableDepthRenderer = function(e) {
|
|
if (!(e = e || this.activeCamera)) throw "No camera available to enable depth renderer";
|
|
if (this._depthRenderer || (this._depthRenderer = {}), !this._depthRenderer[e.id]) {
|
|
var t = 0;
|
|
if (this.getEngine().getCaps().textureHalfFloatRender) t = _.a.TEXTURETYPE_HALF_FLOAT;
|
|
else {
|
|
if (!this.getEngine().getCaps().textureFloatRender) throw "Depth renderer does not support int texture type";
|
|
t = _.a.TEXTURETYPE_FLOAT
|
|
}
|
|
this._depthRenderer[e.id] = new cl(this, t, e)
|
|
}
|
|
return this._depthRenderer[e.id]
|
|
}, W.a.prototype.disableDepthRenderer = function(e) {
|
|
(e = e || this.activeCamera) && this._depthRenderer && this._depthRenderer[e.id] && (this._depthRenderer[e.id].dispose(), delete this._depthRenderer[e.id])
|
|
};
|
|
var ll = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_DEPTHRENDERER, this.scene = e
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._gatherRenderTargetsStage.registerStep(Ae.a.STEP_GATHERRENDERTARGETS_DEPTHRENDERER, this, this._gatherRenderTargets), this.scene._gatherActiveCameraRenderTargetsStage.registerStep(Ae.a.STEP_GATHERACTIVECAMERARENDERTARGETS_DEPTHRENDERER, this, this._gatherActiveCameraRenderTargets)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.dispose = function() {
|
|
for (var e in this.scene._depthRenderer) this.scene._depthRenderer[e].dispose()
|
|
}, e.prototype._gatherRenderTargets = function(e) {
|
|
if (this.scene._depthRenderer)
|
|
for (var t in this.scene._depthRenderer) {
|
|
var i = this.scene._depthRenderer[t];
|
|
i.useOnlyInActiveCamera || e.push(i.getDepthMap())
|
|
}
|
|
}, e.prototype._gatherActiveCameraRenderTargets = function(e) {
|
|
if (this.scene._depthRenderer)
|
|
for (var t in this.scene._depthRenderer) {
|
|
var i = this.scene._depthRenderer[t];
|
|
i.useOnlyInActiveCamera && this.scene.activeCamera.id === t && e.push(i.getDepthMap())
|
|
}
|
|
}, e
|
|
}();
|
|
cl._SceneComponentInitialization = function(e) {
|
|
var t = e._getComponent(Ae.a.NAME_DEPTHRENDERER);
|
|
t || (t = new ll(e), e._addComponent(t))
|
|
};
|
|
var ul = "uniform vec4 color;\nvoid main(void) {\ngl_FragColor=color;\n}";
|
|
zt.a.ShadersStore.linePixelShader = ul;
|
|
var hl = "\nattribute vec3 position;\nattribute vec4 normal;\n\nuniform mat4 worldViewProjection;\nuniform float width;\nuniform float aspectRatio;\nvoid main(void) {\nvec4 viewPosition=worldViewProjection*vec4(position,1.0);\nvec4 viewPositionNext=worldViewProjection*vec4(normal.xyz,1.0);\nvec2 currentScreen=viewPosition.xy/viewPosition.w;\nvec2 nextScreen=viewPositionNext.xy/viewPositionNext.w;\ncurrentScreen.x*=aspectRatio;\nnextScreen.x*=aspectRatio;\nvec2 dir=normalize(nextScreen-currentScreen);\nvec2 normalDir=vec2(-dir.y,dir.x);\nnormalDir*=width/2.0;\nnormalDir.x/=aspectRatio;\nvec4 offset=vec4(normalDir*normal.w,0.0,0.0);\ngl_Position=viewPosition+offset;\n}";
|
|
zt.a.ShadersStore.lineVertexShader = hl;
|
|
Fe.a.prototype.disableEdgesRendering = function() {
|
|
return this._edgesRenderer && (this._edgesRenderer.dispose(), this._edgesRenderer = null), this
|
|
}, Fe.a.prototype.enableEdgesRendering = function(e, t) {
|
|
return void 0 === e && (e = .95), void 0 === t && (t = !1), this.disableEdgesRendering(), this._edgesRenderer = new fl(this, e, t), this
|
|
}, Object.defineProperty(Fe.a.prototype, "edgesRenderer", {
|
|
get: function() {
|
|
return this._edgesRenderer
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Vs.b.prototype.enableEdgesRendering = function(e, t) {
|
|
return void 0 === e && (e = .95), void 0 === t && (t = !1), this.disableEdgesRendering(), this._edgesRenderer = new pl(this, e, t), this
|
|
}, Vs.a.prototype.enableEdgesRendering = function(e, t) {
|
|
return void 0 === e && (e = .95), void 0 === t && (t = !1), Vs.b.prototype.enableEdgesRendering.apply(this, arguments), this
|
|
};
|
|
var dl = function() {
|
|
return function() {
|
|
this.edges = new Array, this.edgesConnectedCount = 0
|
|
}
|
|
}(),
|
|
fl = function() {
|
|
function e(e, t, i, n) {
|
|
var r = this;
|
|
void 0 === t && (t = .95), void 0 === i && (i = !1), void 0 === n && (n = !0), this.edgesWidthScalerForOrthographic = 1e3, this.edgesWidthScalerForPerspective = 50, this._linesPositions = new Array, this._linesNormals = new Array, this._linesIndices = new Array, this._buffers = {}, this._checkVerticesInsteadOfIndices = !1, this.isEnabled = !0, this._source = e, this._checkVerticesInsteadOfIndices = i, this._epsilon = t, this._prepareRessources(), n && this._generateEdgesLines(), this._meshRebuildObserver = this._source.onRebuildObservable.add(function() {
|
|
r._rebuild()
|
|
}), this._meshDisposeObserver = this._source.onDisposeObservable.add(function() {
|
|
r.dispose()
|
|
})
|
|
}
|
|
return e.prototype._prepareRessources = function() {
|
|
this._lineShader || (this._lineShader = new as.a("lineShader", this._source.getScene(), "line", {
|
|
attributes: ["position", "normal"],
|
|
uniforms: ["worldViewProjection", "color", "width", "aspectRatio"]
|
|
}), this._lineShader.disableDepthWrite = !0, this._lineShader.backFaceCulling = !1)
|
|
}, e.prototype._rebuild = function() {
|
|
var e = this._buffers[Oi.b.PositionKind];
|
|
e && e._rebuild(), (e = this._buffers[Oi.b.NormalKind]) && e._rebuild();
|
|
var t = this._source.getScene().getEngine();
|
|
this._ib = t.createIndexBuffer(this._linesIndices)
|
|
}, e.prototype.dispose = function() {
|
|
this._source.onRebuildObservable.remove(this._meshRebuildObserver), this._source.onDisposeObservable.remove(this._meshDisposeObserver);
|
|
var e = this._buffers[Oi.b.PositionKind];
|
|
e && (e.dispose(), this._buffers[Oi.b.PositionKind] = null), (e = this._buffers[Oi.b.NormalKind]) && (e.dispose(), this._buffers[Oi.b.NormalKind] = null), this._source.getScene().getEngine()._releaseBuffer(this._ib), this._lineShader.dispose()
|
|
}, e.prototype._processEdgeForAdjacencies = function(e, t, i, n, r) {
|
|
return e === i && t === n || e === n && t === i ? 0 : e === n && t === r || e === r && t === n ? 1 : e === r && t === i || e === i && t === r ? 2 : -1
|
|
}, e.prototype._processEdgeForAdjacenciesWithVertices = function(e, t, i, n, r) {
|
|
return e.equalsWithEpsilon(i) && t.equalsWithEpsilon(n) || e.equalsWithEpsilon(n) && t.equalsWithEpsilon(i) ? 0 : e.equalsWithEpsilon(n) && t.equalsWithEpsilon(r) || e.equalsWithEpsilon(r) && t.equalsWithEpsilon(n) ? 1 : e.equalsWithEpsilon(r) && t.equalsWithEpsilon(i) || e.equalsWithEpsilon(i) && t.equalsWithEpsilon(r) ? 2 : -1
|
|
}, e.prototype._checkEdge = function(e, t, i, n, r) {
|
|
var s;
|
|
void 0 === t ? s = !0 : s = o.x.Dot(i[e], i[t]) < this._epsilon;
|
|
s && this.createLine(n, r, this._linesPositions.length / 3)
|
|
}, e.prototype.createLine = function(e, t, i) {
|
|
this._linesPositions.push(e.x, e.y, e.z, e.x, e.y, e.z, t.x, t.y, t.z, t.x, t.y, t.z), this._linesNormals.push(t.x, t.y, t.z, -1, t.x, t.y, t.z, 1, e.x, e.y, e.z, -1, e.x, e.y, e.z, 1), this._linesIndices.push(i, i + 1, i + 2, i, i + 2, i + 3)
|
|
}, e.prototype._generateEdgesLines = function() {
|
|
var e = this._source.getVerticesData(Oi.b.PositionKind),
|
|
t = this._source.getIndices();
|
|
if (t && e) {
|
|
var i, n, r = new Array,
|
|
s = new Array;
|
|
for (i = 0; i < t.length; i += 3) {
|
|
n = new dl;
|
|
var a = t[i],
|
|
c = t[i + 1],
|
|
l = t[i + 2];
|
|
n.p0 = new o.x(e[3 * a], e[3 * a + 1], e[3 * a + 2]), n.p1 = new o.x(e[3 * c], e[3 * c + 1], e[3 * c + 2]), n.p2 = new o.x(e[3 * l], e[3 * l + 1], e[3 * l + 2]);
|
|
var u = o.x.Cross(n.p1.subtract(n.p0), n.p2.subtract(n.p1));
|
|
u.normalize(), s.push(u), r.push(n)
|
|
}
|
|
for (i = 0; i < r.length; i++) {
|
|
n = r[i];
|
|
for (var h = i + 1; h < r.length; h++) {
|
|
var d = r[h];
|
|
if (3 === n.edgesConnectedCount) break;
|
|
if (3 !== d.edgesConnectedCount)
|
|
for (var f = t[3 * h], p = t[3 * h + 1], _ = t[3 * h + 2], g = 0; g < 3; g++) {
|
|
var m = 0;
|
|
if (void 0 === n.edges[g]) {
|
|
switch (g) {
|
|
case 0:
|
|
m = this._checkVerticesInsteadOfIndices ? this._processEdgeForAdjacenciesWithVertices(n.p0, n.p1, d.p0, d.p1, d.p2) : this._processEdgeForAdjacencies(t[3 * i], t[3 * i + 1], f, p, _);
|
|
break;
|
|
case 1:
|
|
m = this._checkVerticesInsteadOfIndices ? this._processEdgeForAdjacenciesWithVertices(n.p1, n.p2, d.p0, d.p1, d.p2) : this._processEdgeForAdjacencies(t[3 * i + 1], t[3 * i + 2], f, p, _);
|
|
break;
|
|
case 2:
|
|
m = this._checkVerticesInsteadOfIndices ? this._processEdgeForAdjacenciesWithVertices(n.p2, n.p0, d.p0, d.p1, d.p2) : this._processEdgeForAdjacencies(t[3 * i + 2], t[3 * i], f, p, _)
|
|
}
|
|
if (-1 !== m && (n.edges[g] = h, d.edges[m] = i, n.edgesConnectedCount++, d.edgesConnectedCount++, 3 === n.edgesConnectedCount)) break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (i = 0; i < r.length; i++) {
|
|
var v = r[i];
|
|
this._checkEdge(i, v.edges[0], s, v.p0, v.p1), this._checkEdge(i, v.edges[1], s, v.p1, v.p2), this._checkEdge(i, v.edges[2], s, v.p2, v.p0)
|
|
}
|
|
var y = this._source.getScene().getEngine();
|
|
this._buffers[Oi.b.PositionKind] = new Oi.b(y, this._linesPositions, Oi.b.PositionKind, !1), this._buffers[Oi.b.NormalKind] = new Oi.b(y, this._linesNormals, Oi.b.NormalKind, !1, !1, 4), this._ib = y.createIndexBuffer(this._linesIndices), this._indicesCount = this._linesIndices.length
|
|
}
|
|
}, e.prototype.isReady = function() {
|
|
return this._lineShader.isReady()
|
|
}, e.prototype.render = function() {
|
|
var e = this._source.getScene();
|
|
if (this.isReady() && e.activeCamera) {
|
|
var t = e.getEngine();
|
|
this._lineShader._preBind(), 1 !== this._source.edgesColor.a ? t.setAlphaMode(_.a.ALPHA_COMBINE) : t.setAlphaMode(_.a.ALPHA_DISABLE), t.bindBuffers(this._buffers, this._ib, this._lineShader.getEffect()), e.resetCachedMaterial(), this._lineShader.setColor4("color", this._source.edgesColor), e.activeCamera.mode === Ne.a.ORTHOGRAPHIC_CAMERA ? this._lineShader.setFloat("width", this._source.edgesWidth / this.edgesWidthScalerForOrthographic) : this._lineShader.setFloat("width", this._source.edgesWidth / this.edgesWidthScalerForPerspective), this._lineShader.setFloat("aspectRatio", t.getAspectRatio(e.activeCamera)), this._lineShader.bind(this._source.getWorldMatrix()), t.drawElementsType(so.a.TriangleFillMode, 0, this._indicesCount), this._lineShader.unbind()
|
|
}
|
|
}, e
|
|
}(),
|
|
pl = function(e) {
|
|
function t(t, i, n) {
|
|
void 0 === i && (i = .95), void 0 === n && (n = !1);
|
|
var r = e.call(this, t, i, n, !1) || this;
|
|
return r._generateEdgesLines(), r
|
|
}
|
|
return l.d(t, e), t.prototype._generateEdgesLines = function() {
|
|
var e = this._source.getVerticesData(Oi.b.PositionKind),
|
|
t = this._source.getIndices();
|
|
if (t && e) {
|
|
for (var i = o.t.Vector3[0], n = o.t.Vector3[1], r = t.length - 1, s = 0, a = 0; s < r; s += 2, a += 4) o.x.FromArrayToRef(e, 3 * t[s], i), o.x.FromArrayToRef(e, 3 * t[s + 1], n), this.createLine(i, n, a);
|
|
var c = this._source.getScene().getEngine();
|
|
this._buffers[Oi.b.PositionKind] = new Oi.b(c, this._linesPositions, Oi.b.PositionKind, !1), this._buffers[Oi.b.NormalKind] = new Oi.b(c, this._linesNormals, Oi.b.NormalKind, !1, !1, 4), this._ib = c.createIndexBuffer(this._linesIndices), this._indicesCount = this._linesIndices.length
|
|
}
|
|
}, t
|
|
}(fl),
|
|
_l = "#ifdef LOGARITHMICDEPTH\n#extension GL_EXT_frag_depth : enable\n#endif\nuniform vec4 color;\n#ifdef ALPHATEST\nvarying vec2 vUV;\nuniform sampler2D diffuseSampler;\n#endif\n#include<logDepthDeclaration>\nvoid main(void) {\n#ifdef ALPHATEST\nif (texture2D(diffuseSampler,vUV).a<0.4)\ndiscard;\n#endif\n#include<logDepthFragment>\ngl_FragColor=color;\n}";
|
|
zt.a.ShadersStore.outlinePixelShader = _l;
|
|
var gl = "\nattribute vec3 position;\nattribute vec3 normal;\n#include<bonesDeclaration>\n\nuniform float offset;\n#include<instancesDeclaration>\nuniform mat4 viewProjection;\n#ifdef ALPHATEST\nvarying vec2 vUV;\nuniform mat4 diffuseMatrix;\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#endif\n#include<logDepthDeclaration>\nvoid main(void)\n{\nvec3 offsetPosition=position+normal*offset;\n#include<instancesVertex>\n#include<bonesVertex>\ngl_Position=viewProjection*finalWorld*vec4(offsetPosition,1.0);\n#ifdef ALPHATEST\n#ifdef UV1\nvUV=vec2(diffuseMatrix*vec4(uv,1.0,0.0));\n#endif\n#ifdef UV2\nvUV=vec2(diffuseMatrix*vec4(uv2,1.0,0.0));\n#endif\n#endif\n#include<logDepthVertex>\n}\n";
|
|
zt.a.ShadersStore.outlineVertexShader = gl;
|
|
W.a.prototype.getOutlineRenderer = function() {
|
|
return this._outlineRenderer || (this._outlineRenderer = new ml(this)), this._outlineRenderer
|
|
}, Object.defineProperty(Fe.a.prototype, "renderOutline", {
|
|
get: function() {
|
|
return this._renderOutline
|
|
},
|
|
set: function(e) {
|
|
e && this.getScene().getOutlineRenderer(), this._renderOutline = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(Fe.a.prototype, "renderOverlay", {
|
|
get: function() {
|
|
return this._renderOverlay
|
|
},
|
|
set: function(e) {
|
|
e && this.getScene().getOutlineRenderer(), this._renderOverlay = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
});
|
|
var ml = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_OUTLINERENDERER, this.zOffset = 1, this.scene = e, this._engine = e.getEngine(), this.scene._addComponent(this)
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._beforeRenderingMeshStage.registerStep(Ae.a.STEP_BEFORERENDERINGMESH_OUTLINE, this, this._beforeRenderingMesh), this.scene._afterRenderingMeshStage.registerStep(Ae.a.STEP_AFTERRENDERINGMESH_OUTLINE, this, this._afterRenderingMesh)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.dispose = function() {}, e.prototype.render = function(e, t, i) {
|
|
var n = this;
|
|
void 0 === i && (i = !1);
|
|
var r = this.scene,
|
|
o = r.getEngine(),
|
|
s = o.getCaps().instancedArrays && null !== t.visibleInstances[e._id] && void 0 !== t.visibleInstances[e._id];
|
|
if (this.isReady(e, s)) {
|
|
var a = e.getRenderingMesh(),
|
|
c = e.getMaterial();
|
|
if (c && r.activeCamera) {
|
|
if (o.enableEffect(this._effect), c.useLogarithmicDepth && this._effect.setFloat("logarithmicDepthConstant", 2 / (Math.log(r.activeCamera.maxZ + 1) / Math.LN2)), this._effect.setFloat("offset", i ? 0 : a.outlineWidth), this._effect.setColor4("color", i ? a.overlayColor : a.outlineColor, i ? a.overlayAlpha : c.alpha), this._effect.setMatrix("viewProjection", r.getTransformMatrix()), a.useBones && a.computeBonesUsingShaders && a.skeleton && this._effect.setMatrices("mBones", a.skeleton.getTransformMatrices(a)), a._bind(e, this._effect, so.a.TriangleFillMode), c && c.needAlphaTesting()) {
|
|
var l = c.getAlphaTestTexture();
|
|
l && (this._effect.setTexture("diffuseSampler", l), this._effect.setMatrix("diffuseMatrix", l.getTextureMatrix()))
|
|
}
|
|
o.setZOffset(-this.zOffset), a._processRendering(e, this._effect, so.a.TriangleFillMode, t, s, function(e, t) {
|
|
n._effect.setMatrix("world", t)
|
|
}), o.setZOffset(0)
|
|
}
|
|
}
|
|
}, e.prototype.isReady = function(e, t) {
|
|
var i = [],
|
|
n = [Oi.b.PositionKind, Oi.b.NormalKind],
|
|
r = e.getMesh(),
|
|
o = e.getMaterial();
|
|
o && (o.needAlphaTesting() && (i.push("#define ALPHATEST"), r.isVerticesDataPresent(Oi.b.UVKind) && (n.push(Oi.b.UVKind), i.push("#define UV1")), r.isVerticesDataPresent(Oi.b.UV2Kind) && (n.push(Oi.b.UV2Kind), i.push("#define UV2"))), o.useLogarithmicDepth && i.push("#define LOGARITHMICDEPTH")), r.useBones && r.computeBonesUsingShaders ? (n.push(Oi.b.MatricesIndicesKind), n.push(Oi.b.MatricesWeightsKind), r.numBoneInfluencers > 4 && (n.push(Oi.b.MatricesIndicesExtraKind), n.push(Oi.b.MatricesWeightsExtraKind)), i.push("#define NUM_BONE_INFLUENCERS " + r.numBoneInfluencers), i.push("#define BonesPerMesh " + (r.skeleton ? r.skeleton.bones.length + 1 : 0))) : i.push("#define NUM_BONE_INFLUENCERS 0"), t && (i.push("#define INSTANCES"), n.push("world0"), n.push("world1"), n.push("world2"), n.push("world3"));
|
|
var s = i.join("\n");
|
|
return this._cachedDefines !== s && (this._cachedDefines = s, this._effect = this.scene.getEngine().createEffect("outline", n, ["world", "mBones", "viewProjection", "diffuseMatrix", "offset", "color", "logarithmicDepthConstant"], ["diffuseSampler"], s)), this._effect.isReady()
|
|
}, e.prototype._beforeRenderingMesh = function(t, i, n) {
|
|
if (this._savedDepthWrite = this._engine.getDepthWrite(), t.renderOutline) {
|
|
var r = i.getMaterial();
|
|
r && r.needAlphaBlending && (this._engine.cacheStencilState(), this._engine.setDepthWrite(!1), this._engine.setColorWrite(!1), this._engine.setStencilBuffer(!0), this._engine.setStencilOperationPass(_.a.REPLACE), this._engine.setStencilFunction(_.a.ALWAYS), this._engine.setStencilMask(e._StencilReference), this._engine.setStencilFunctionReference(e._StencilReference), this.render(i, n, !0), this._engine.setColorWrite(!0), this._engine.setStencilFunction(_.a.NOTEQUAL)), this._engine.setDepthWrite(!1), this.render(i, n), this._engine.setDepthWrite(this._savedDepthWrite), r && r.needAlphaBlending && this._engine.restoreStencilState()
|
|
}
|
|
}, e.prototype._afterRenderingMesh = function(e, t, i) {
|
|
if (e.renderOverlay) {
|
|
var n = this._engine.getAlphaMode();
|
|
this._engine.setAlphaMode(_.a.ALPHA_COMBINE), this.render(t, i, !0), this._engine.setAlphaMode(n)
|
|
}
|
|
e.renderOutline && this._savedDepthWrite && (this._engine.setDepthWrite(!0), this._engine.setColorWrite(!1), this.render(t, i), this._engine.setColorWrite(!0))
|
|
}, e._StencilReference = 4, e
|
|
}(),
|
|
vl = i(109),
|
|
yl = function() {
|
|
function e(e, t) {
|
|
this.name = e, this.color = new o.f(1, 1, 1, 1), this.width = 1, this.height = 1, this.angle = 0, this.cellIndex = 0, this.invertU = 0, this.invertV = 0, this.animations = new Array, this.isPickable = !1, this._animationStarted = !1, this._loopAnimation = !1, this._fromIndex = 0, this._toIndex = 0, this._delay = 0, this._direction = 1, this._time = 0, this.isVisible = !0, this._manager = t, this._manager.sprites.push(this), this.position = o.x.Zero()
|
|
}
|
|
return Object.defineProperty(e.prototype, "size", {
|
|
get: function() {
|
|
return this.width
|
|
},
|
|
set: function(e) {
|
|
this.width = e, this.height = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.playAnimation = function(e, t, i, n, r) {
|
|
this._fromIndex = e, this._toIndex = t, this._loopAnimation = i, this._delay = n, this._animationStarted = !0, e < t ? this._direction = 1 : (this._direction = -1, this._toIndex = e, this._fromIndex = t), this.cellIndex = e, this._time = 0, this._onAnimationEnd = r
|
|
}, e.prototype.stopAnimation = function() {
|
|
this._animationStarted = !1
|
|
}, e.prototype._animate = function(e) {
|
|
this._animationStarted && (this._time += e, this._time > this._delay && (this._time = this._time % this._delay, this.cellIndex += this._direction, (this._direction > 0 && this.cellIndex > this._toIndex || this._direction < 0 && this.cellIndex < this._fromIndex) && (this._loopAnimation ? this.cellIndex = this._direction > 0 ? this._fromIndex : this._toIndex : (this.cellIndex = this._toIndex, this._animationStarted = !1, this._onAnimationEnd && this._onAnimationEnd(), this.disposeWhenFinishedAnimating && this.dispose()))))
|
|
}, e.prototype.dispose = function() {
|
|
for (var e = 0; e < this._manager.sprites.length; e++) this._manager.sprites[e] == this && this._manager.sprites.splice(e, 1)
|
|
}, e
|
|
}();
|
|
W.a.prototype._internalPickSprites = function(e, t, i, n) {
|
|
if (!en.a) return null;
|
|
var r = null;
|
|
if (!n) {
|
|
if (!this.activeCamera) return null;
|
|
n = this.activeCamera
|
|
}
|
|
if (this.spriteManagers.length > 0)
|
|
for (var o = 0; o < this.spriteManagers.length; o++) {
|
|
var s = this.spriteManagers[o];
|
|
if (s.isPickable) {
|
|
var a = s.intersects(e, n, t, i);
|
|
if (a && a.hit && (i || null == r || !(a.distance >= r.distance)) && (r = a, i)) break
|
|
}
|
|
}
|
|
return r || new en.a
|
|
}, W.a.prototype.pickSprite = function(e, t, i, n, r) {
|
|
return this.createPickingRayInCameraSpaceToRef(e, t, this._tempSpritePickingRay, r), this._internalPickSprites(this._tempSpritePickingRay, i, n, r)
|
|
}, W.a.prototype.pickSpriteWithRay = function(e, t, i, n) {
|
|
if (!this._tempSpritePickingRay) return null;
|
|
if (!n) {
|
|
if (!this.activeCamera) return null;
|
|
n = this.activeCamera
|
|
}
|
|
return It.a.TransformToRef(e, n.getViewMatrix(), this._tempSpritePickingRay), this._internalPickSprites(this._tempSpritePickingRay, t, i, n)
|
|
}, W.a.prototype.setPointerOverSprite = function(e) {
|
|
this._pointerOverSprite !== e && (this._pointerOverSprite && this._pointerOverSprite.actionManager && this._pointerOverSprite.actionManager.processTrigger(_.a.ACTION_OnPointerOutTrigger, c.a.CreateNewFromSprite(this._pointerOverSprite, this)), this._pointerOverSprite = e, this._pointerOverSprite && this._pointerOverSprite.actionManager && this._pointerOverSprite.actionManager.processTrigger(_.a.ACTION_OnPointerOverTrigger, c.a.CreateNewFromSprite(this._pointerOverSprite, this)))
|
|
}, W.a.prototype.getPointerOverSprite = function() {
|
|
return this._pointerOverSprite
|
|
};
|
|
var bl = function() {
|
|
function e(e) {
|
|
this.name = Ae.a.NAME_SPRITE, this.scene = e, this.scene.spriteManagers = new Array, this.scene._tempSpritePickingRay = It.a ? It.a.Zero() : null, this.scene.onBeforeSpritesRenderingObservable = new r.c, this.scene.onAfterSpritesRenderingObservable = new r.c, this._spritePredicate = function(e) {
|
|
return !!e.actionManager && (e.isPickable && e.actionManager.hasPointerTriggers)
|
|
}
|
|
}
|
|
return e.prototype.register = function() {
|
|
this.scene._pointerMoveStage.registerStep(Ae.a.STEP_POINTERMOVE_SPRITE, this, this._pointerMove), this.scene._pointerDownStage.registerStep(Ae.a.STEP_POINTERDOWN_SPRITE, this, this._pointerDown), this.scene._pointerUpStage.registerStep(Ae.a.STEP_POINTERUP_SPRITE, this, this._pointerUp)
|
|
}, e.prototype.rebuild = function() {}, e.prototype.dispose = function() {
|
|
this.scene.onBeforeSpritesRenderingObservable.clear(), this.scene.onAfterSpritesRenderingObservable.clear();
|
|
for (var e = this.scene.spriteManagers; e.length;) e[0].dispose()
|
|
}, e.prototype._pickSpriteButKeepRay = function(e, t, i, n, r) {
|
|
var o = this.scene.pickSprite(t, i, this._spritePredicate, n, r);
|
|
return o && (o.ray = e ? e.ray : null), o
|
|
}, e.prototype._pointerMove = function(e, t, i, n, r) {
|
|
var o = this.scene;
|
|
return n ? o.setPointerOverSprite(null) : (i = this._pickSpriteButKeepRay(i, e, t, !1, o.cameraToUseForPointers || void 0)) && i.hit && i.pickedSprite ? (o.setPointerOverSprite(i.pickedSprite), o._pointerOverSprite && o._pointerOverSprite.actionManager && o._pointerOverSprite.actionManager.hoverCursor ? r.style.cursor = o._pointerOverSprite.actionManager.hoverCursor : r.style.cursor = o.hoverCursor) : o.setPointerOverSprite(null), i
|
|
}, e.prototype._pointerDown = function(e, t, i, n) {
|
|
var r = this.scene;
|
|
if (r._pickedDownSprite = null, r.spriteManagers.length > 0 && (i = r.pickSprite(e, t, this._spritePredicate, !1, r.cameraToUseForPointers || void 0)) && i.hit && i.pickedSprite && i.pickedSprite.actionManager) {
|
|
switch (r._pickedDownSprite = i.pickedSprite, n.button) {
|
|
case 0:
|
|
i.pickedSprite.actionManager.processTrigger(_.a.ACTION_OnLeftPickTrigger, c.a.CreateNewFromSprite(i.pickedSprite, r, n));
|
|
break;
|
|
case 1:
|
|
i.pickedSprite.actionManager.processTrigger(_.a.ACTION_OnCenterPickTrigger, c.a.CreateNewFromSprite(i.pickedSprite, r, n));
|
|
break;
|
|
case 2:
|
|
i.pickedSprite.actionManager.processTrigger(_.a.ACTION_OnRightPickTrigger, c.a.CreateNewFromSprite(i.pickedSprite, r, n))
|
|
}
|
|
i.pickedSprite.actionManager && i.pickedSprite.actionManager.processTrigger(_.a.ACTION_OnPickDownTrigger, c.a.CreateNewFromSprite(i.pickedSprite, r, n))
|
|
}
|
|
return i
|
|
}, e.prototype._pointerUp = function(e, t, i, n) {
|
|
var r = this.scene;
|
|
if (r.spriteManagers.length > 0) {
|
|
var o = r.pickSprite(e, t, this._spritePredicate, !1, r.cameraToUseForPointers || void 0);
|
|
o && (o.hit && o.pickedSprite && o.pickedSprite.actionManager && (o.pickedSprite.actionManager.processTrigger(_.a.ACTION_OnPickUpTrigger, c.a.CreateNewFromSprite(o.pickedSprite, r, n)), o.pickedSprite.actionManager && (this.scene._inputManager._isPointerSwiping() || o.pickedSprite.actionManager.processTrigger(_.a.ACTION_OnPickTrigger, c.a.CreateNewFromSprite(o.pickedSprite, r, n)))), r._pickedDownSprite && r._pickedDownSprite.actionManager && r._pickedDownSprite !== o.pickedSprite && r._pickedDownSprite.actionManager.processTrigger(_.a.ACTION_OnPickOutTrigger, c.a.CreateNewFromSprite(r._pickedDownSprite, r, n)))
|
|
}
|
|
return i
|
|
}, e
|
|
}(),
|
|
Tl = "uniform bool alphaTest;\nvarying vec4 vColor;\n\nvarying vec2 vUV;\nuniform sampler2D diffuseSampler;\n\n#include<fogFragmentDeclaration>\nvoid main(void) {\nvec4 color=texture2D(diffuseSampler,vUV);\nif (alphaTest)\n{\nif (color.a<0.95)\ndiscard;\n}\ncolor*=vColor;\n#include<fogFragment>\ngl_FragColor=color;\n}";
|
|
zt.a.ShadersStore.spritesPixelShader = Tl;
|
|
var El = "\nattribute vec4 position;\nattribute vec4 options;\nattribute vec4 cellInfo;\nattribute vec4 color;\n\nuniform vec2 textureInfos;\nuniform mat4 view;\nuniform mat4 projection;\n\nvarying vec2 vUV;\nvarying vec4 vColor;\n#include<fogVertexDeclaration>\nvoid main(void) {\nvec3 viewPos=(view*vec4(position.xyz,1.0)).xyz;\nvec2 cornerPos;\nfloat angle=position.w;\nvec2 size=vec2(options.x,options.y);\nvec2 offset=options.zw;\nvec2 uvScale=textureInfos.xy;\ncornerPos=vec2(offset.x-0.5,offset.y-0.5)*size;\n\nvec3 rotatedCorner;\nrotatedCorner.x=cornerPos.x*cos(angle)-cornerPos.y*sin(angle);\nrotatedCorner.y=cornerPos.x*sin(angle)+cornerPos.y*cos(angle);\nrotatedCorner.z=0.;\n\nviewPos+=rotatedCorner;\ngl_Position=projection*vec4(viewPos,1.0);\n\nvColor=color;\n\nvec2 uvOffset=vec2(abs(offset.x-cellInfo.x),1.0-abs(offset.y-cellInfo.y));\nvUV=(uvOffset+cellInfo.zw)*uvScale;\n\n#ifdef FOG\nvFogDistance=viewPos;\n#endif\n}";
|
|
zt.a.ShadersStore.spritesVertexShader = El;
|
|
var Al, xl = function() {
|
|
function e(e, t, i, n, o, s, a) {
|
|
if (void 0 === s && (s = .01), void 0 === a && (a = ke.a.TRILINEAR_SAMPLINGMODE), this.name = e, this.sprites = new Array, this.renderingGroupId = 0, this.layerMask = 268435455, this.fogEnabled = !0, this.isPickable = !1, this.onDisposeObservable = new r.c, this._vertexBuffers = {}, o._getComponent(Ae.a.NAME_SPRITE) || o._addComponent(new bl(o)), this._capacity = i, this._spriteTexture = new ke.a(t, o, !0, !1, a), this._spriteTexture.wrapU = ke.a.CLAMP_ADDRESSMODE, this._spriteTexture.wrapV = ke.a.CLAMP_ADDRESSMODE, n.width && n.height) this.cellWidth = n.width, this.cellHeight = n.height;
|
|
else {
|
|
if (void 0 === n) return;
|
|
this.cellWidth = n, this.cellHeight = n
|
|
}
|
|
this._epsilon = s, this._scene = o, this._scene.spriteManagers.push(this);
|
|
for (var c = [], l = 0, u = 0; u < i; u++) c.push(l), c.push(l + 1), c.push(l + 2), c.push(l), c.push(l + 2), c.push(l + 3), l += 4;
|
|
this._indexBuffer = o.getEngine().createIndexBuffer(c), this._vertexData = new Float32Array(16 * i * 4), this._buffer = new Oi.a(o.getEngine(), this._vertexData, !0, 16);
|
|
var h = this._buffer.createVertexBuffer(Oi.b.PositionKind, 0, 4),
|
|
d = this._buffer.createVertexBuffer("options", 4, 4),
|
|
f = this._buffer.createVertexBuffer("cellInfo", 8, 4),
|
|
p = this._buffer.createVertexBuffer(Oi.b.ColorKind, 12, 4);
|
|
this._vertexBuffers[Oi.b.PositionKind] = h, this._vertexBuffers.options = d, this._vertexBuffers.cellInfo = f, this._vertexBuffers[Oi.b.ColorKind] = p, this._effectBase = this._scene.getEngine().createEffect("sprites", [Oi.b.PositionKind, "options", "cellInfo", Oi.b.ColorKind], ["view", "projection", "textureInfos", "alphaTest"], ["diffuseSampler"], ""), this._effectFog = this._scene.getEngine().createEffect("sprites", [Oi.b.PositionKind, "options", "cellInfo", Oi.b.ColorKind], ["view", "projection", "textureInfos", "alphaTest", "vFogInfos", "vFogColor"], ["diffuseSampler"], "#define FOG")
|
|
}
|
|
return Object.defineProperty(e.prototype, "onDispose", {
|
|
set: function(e) {
|
|
this._onDisposeObserver && this.onDisposeObservable.remove(this._onDisposeObserver), this._onDisposeObserver = this.onDisposeObservable.add(e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "texture", {
|
|
get: function() {
|
|
return this._spriteTexture
|
|
},
|
|
set: function(e) {
|
|
this._spriteTexture = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._appendSpriteVertex = function(e, t, i, n, r) {
|
|
var o = 16 * e;
|
|
0 === i ? i = this._epsilon : 1 === i && (i = 1 - this._epsilon), 0 === n ? n = this._epsilon : 1 === n && (n = 1 - this._epsilon), this._vertexData[o] = t.position.x, this._vertexData[o + 1] = t.position.y, this._vertexData[o + 2] = t.position.z, this._vertexData[o + 3] = t.angle, this._vertexData[o + 4] = t.width, this._vertexData[o + 5] = t.height, this._vertexData[o + 6] = i, this._vertexData[o + 7] = n, this._vertexData[o + 8] = t.invertU ? 1 : 0, this._vertexData[o + 9] = t.invertV ? 1 : 0;
|
|
var s = t.cellIndex / r >> 0;
|
|
this._vertexData[o + 10] = t.cellIndex - s * r, this._vertexData[o + 11] = s, this._vertexData[o + 12] = t.color.r, this._vertexData[o + 13] = t.color.g, this._vertexData[o + 14] = t.color.b, this._vertexData[o + 15] = t.color.a
|
|
}, e.prototype.intersects = function(e, t, i, n) {
|
|
for (var r = Math.min(this._capacity, this.sprites.length), s = o.x.Zero(), a = o.x.Zero(), c = Number.MAX_VALUE, l = null, u = o.x.Zero(), h = o.x.Zero(), d = t.getViewMatrix(), f = 0; f < r; f++) {
|
|
var p = this.sprites[f];
|
|
if (p) {
|
|
if (i) {
|
|
if (!i(p)) continue
|
|
} else if (!p.isPickable) continue;
|
|
if (o.x.TransformCoordinatesToRef(p.position, d, h), s.copyFromFloats(h.x - p.width / 2, h.y - p.height / 2, h.z), a.copyFromFloats(h.x + p.width / 2, h.y + p.height / 2, h.z), e.intersectsBoxMinMax(s, a)) {
|
|
var _ = o.x.Distance(h, e.origin);
|
|
if (c > _ && (c = _, l = p, n)) break
|
|
}
|
|
}
|
|
}
|
|
if (l) {
|
|
var g = new en.a;
|
|
d.invertToRef(o.t.Matrix[0]), g.hit = !0, g.pickedSprite = l, g.distance = c;
|
|
var m = o.t.Vector3[0];
|
|
return m.copyFrom(e.direction), m.normalize(), m.scaleInPlace(c), e.origin.addToRef(m, u), g.pickedPoint = o.x.TransformCoordinates(u, o.t.Matrix[0]), g
|
|
}
|
|
return null
|
|
}, e.prototype.render = function() {
|
|
if (this._effectBase.isReady() && this._effectFog.isReady() && this._spriteTexture && this._spriteTexture.isReady() && this.sprites.length) {
|
|
for (var e = this._scene.getEngine(), t = this._spriteTexture.getBaseSize(), i = e.getDeltaTime(), n = Math.min(this._capacity, this.sprites.length), r = t.width / this.cellWidth, o = 0, s = !0, a = 0; a < n; a++) {
|
|
var c = this.sprites[a];
|
|
c && c.isVisible && (s = !1, c._animate(i), this._appendSpriteVertex(o++, c, 0, 0, r), this._appendSpriteVertex(o++, c, 1, 0, r), this._appendSpriteVertex(o++, c, 1, 1, r), this._appendSpriteVertex(o++, c, 0, 1, r))
|
|
}
|
|
if (!s) {
|
|
this._buffer.update(this._vertexData);
|
|
var l = this._effectBase;
|
|
this._scene.fogEnabled && this._scene.fogMode !== W.a.FOGMODE_NONE && this.fogEnabled && (l = this._effectFog), e.enableEffect(l);
|
|
var u = this._scene.getViewMatrix();
|
|
l.setTexture("diffuseSampler", this._spriteTexture), l.setMatrix("view", u), l.setMatrix("projection", this._scene.getProjectionMatrix()), l.setFloat2("textureInfos", this.cellWidth / t.width, this.cellHeight / t.height), this._scene.fogEnabled && this._scene.fogMode !== W.a.FOGMODE_NONE && this.fogEnabled && (l.setFloat4("vFogInfos", this._scene.fogMode, this._scene.fogStart, this._scene.fogEnd, this._scene.fogDensity), l.setColor3("vFogColor", this._scene.fogColor)), e.bindBuffers(this._vertexBuffers, this._indexBuffer, l), e.setDepthFunctionToLessOrEqual(), l.setBool("alphaTest", !0), e.setColorWrite(!1), e.drawElementsType(so.a.TriangleFillMode, 0, o / 4 * 6), e.setColorWrite(!0), l.setBool("alphaTest", !1), e.setAlphaMode(_.a.ALPHA_COMBINE), e.drawElementsType(so.a.TriangleFillMode, 0, o / 4 * 6), e.setAlphaMode(_.a.ALPHA_DISABLE)
|
|
}
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
this._buffer && (this._buffer.dispose(), this._buffer = null), this._indexBuffer && (this._scene.getEngine()._releaseBuffer(this._indexBuffer), this._indexBuffer = null), this._spriteTexture && (this._spriteTexture.dispose(), this._spriteTexture = null);
|
|
var e = this._scene.spriteManagers.indexOf(this);
|
|
this._scene.spriteManagers.splice(e, 1), this.onDisposeObservable.notifyObservers(this), this.onDisposeObservable.clear()
|
|
}, e
|
|
}(),
|
|
Rl = i(94),
|
|
Pl = i(104);
|
|
! function(e) {
|
|
e[e.INIT = 0] = "INIT", e[e.RUNNING = 1] = "RUNNING", e[e.DONE = 2] = "DONE", e[e.ERROR = 3] = "ERROR"
|
|
}(Al || (Al = {}));
|
|
var Sl, Cl = function() {
|
|
function e(e) {
|
|
this.name = e, this._isCompleted = !1, this._taskState = Al.INIT
|
|
}
|
|
return Object.defineProperty(e.prototype, "isCompleted", {
|
|
get: function() {
|
|
return this._isCompleted
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "taskState", {
|
|
get: function() {
|
|
return this._taskState
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "errorObject", {
|
|
get: function() {
|
|
return this._errorObject
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._setErrorObject = function(e, t) {
|
|
this._errorObject || (this._errorObject = {
|
|
message: e,
|
|
exception: t
|
|
})
|
|
}, e.prototype.run = function(e, t, i) {
|
|
var n = this;
|
|
this._taskState = Al.RUNNING, this.runTask(e, function() {
|
|
n.onDoneCallback(t, i)
|
|
}, function(e, t) {
|
|
n.onErrorCallback(i, e, t)
|
|
})
|
|
}, e.prototype.runTask = function(e, t, i) {
|
|
throw new Error("runTask is not implemented")
|
|
}, e.prototype.reset = function() {
|
|
this._taskState = Al.INIT
|
|
}, e.prototype.onErrorCallback = function(e, t, i) {
|
|
this._taskState = Al.ERROR, this._errorObject = {
|
|
message: t,
|
|
exception: i
|
|
}, this.onError && this.onError(this, t, i), e()
|
|
}, e.prototype.onDoneCallback = function(e, t) {
|
|
try {
|
|
this._taskState = Al.DONE, this._isCompleted = !0, this.onSuccess && this.onSuccess(this), e()
|
|
} catch (e) {
|
|
this.onErrorCallback(t, "Task is done, error executing success callback(s)", e)
|
|
}
|
|
}, e
|
|
}(),
|
|
Ml = function() {
|
|
return function(e, t, i) {
|
|
this.remainingCount = e, this.totalCount = t, this.task = i
|
|
}
|
|
}(),
|
|
Ol = function(e) {
|
|
function t(t, i, n, r) {
|
|
var o = e.call(this, t) || this;
|
|
return o.name = t, o.meshesNames = i, o.rootUrl = n, o.sceneFilename = r, o
|
|
}
|
|
return l.d(t, e), t.prototype.runTask = function(e, t, i) {
|
|
var n = this;
|
|
bn.ImportMesh(this.meshesNames, this.rootUrl, this.sceneFilename, e, function(e, i, r, o) {
|
|
n.loadedMeshes = e, n.loadedParticleSystems = i, n.loadedSkeletons = r, n.loadedAnimationGroups = o, t()
|
|
}, null, function(e, t, n) {
|
|
i(t, n)
|
|
})
|
|
}, t
|
|
}(Cl),
|
|
Il = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t) || this;
|
|
return n.name = t, n.url = i, n
|
|
}
|
|
return l.d(t, e), t.prototype.runTask = function(e, t, i) {
|
|
var n = this;
|
|
e._loadFile(this.url, function(e) {
|
|
n.text = e, t()
|
|
}, void 0, !1, !1, function(e, t) {
|
|
e && i(e.status + " " + e.statusText, t)
|
|
})
|
|
}, t
|
|
}(Cl),
|
|
Dl = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t) || this;
|
|
return n.name = t, n.url = i, n
|
|
}
|
|
return l.d(t, e), t.prototype.runTask = function(e, t, i) {
|
|
var n = this;
|
|
e._loadFile(this.url, function(e) {
|
|
n.data = e, t()
|
|
}, void 0, !0, !0, function(e, t) {
|
|
e && i(e.status + " " + e.statusText, t)
|
|
})
|
|
}, t
|
|
}(Cl),
|
|
Ll = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t) || this;
|
|
return n.name = t, n.url = i, n
|
|
}
|
|
return l.d(t, e), t.prototype.runTask = function(e, t, i) {
|
|
var n = this,
|
|
r = new Image;
|
|
ye.h.SetCorsBehavior(this.url, r), r.onload = function() {
|
|
n.image = r, t()
|
|
}, r.onerror = function(e) {
|
|
i("Error loading image", e)
|
|
}, r.src = this.url
|
|
}, t
|
|
}(Cl),
|
|
wl = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
void 0 === o && (o = ke.a.TRILINEAR_SAMPLINGMODE);
|
|
var s = e.call(this, t) || this;
|
|
return s.name = t, s.url = i, s.noMipmap = n, s.invertY = r, s.samplingMode = o, s
|
|
}
|
|
return l.d(t, e), t.prototype.runTask = function(e, t, i) {
|
|
this.texture = new ke.a(this.url, e, this.noMipmap, this.invertY, this.samplingMode, function() {
|
|
t()
|
|
}, function(e, t) {
|
|
i(e, t)
|
|
})
|
|
}, t
|
|
}(Cl),
|
|
Fl = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
var s = e.call(this, t) || this;
|
|
return s.name = t, s.url = i, s.extensions = n, s.noMipmap = r, s.files = o, s
|
|
}
|
|
return l.d(t, e), t.prototype.runTask = function(e, t, i) {
|
|
this.texture = new tr(this.url, e, this.extensions, this.noMipmap, this.files, function() {
|
|
t()
|
|
}, function(e, t) {
|
|
i(e, t)
|
|
})
|
|
}, t
|
|
}(Cl),
|
|
Nl = function(e) {
|
|
function t(t, i, n, r, o, s, a) {
|
|
void 0 === r && (r = !1), void 0 === o && (o = !0), void 0 === s && (s = !1), void 0 === a && (a = !1);
|
|
var c = e.call(this, t) || this;
|
|
return c.name = t, c.url = i, c.size = n, c.noMipmap = r, c.generateHarmonics = o, c.gammaSpace = s, c.reserved = a, c
|
|
}
|
|
return l.d(t, e), t.prototype.runTask = function(e, t, i) {
|
|
this.texture = new Uo(this.url, e, this.size, this.noMipmap, this.generateHarmonics, this.gammaSpace, this.reserved, function() {
|
|
t()
|
|
}, function(e, t) {
|
|
i(e, t)
|
|
})
|
|
}, t
|
|
}(Cl),
|
|
Bl = function(e) {
|
|
function t(t, i, n, r, o) {
|
|
void 0 === r && (r = !1), void 0 === o && (o = !0);
|
|
var s = e.call(this, t) || this;
|
|
return s.name = t, s.url = i, s.size = n, s.noMipmap = r, s.gammaSpace = o, s
|
|
}
|
|
return l.d(t, e), t.prototype.runTask = function(e, t, i) {
|
|
this.texture = new ls(this.url, e, this.size, this.noMipmap, this.gammaSpace, function() {
|
|
t()
|
|
}, function(e, t) {
|
|
i(e, t)
|
|
})
|
|
}, t
|
|
}(Cl),
|
|
Ul = function() {
|
|
function e(e) {
|
|
this._isLoading = !1, this._tasks = new Array, this._waitingTasksCount = 0, this._totalTasksCount = 0, this.onTaskSuccessObservable = new r.c, this.onTaskErrorObservable = new r.c, this.onTasksDoneObservable = new r.c, this.onProgressObservable = new r.c, this.useDefaultLoadingScreen = !0, this._scene = e
|
|
}
|
|
return e.prototype.addMeshTask = function(e, t, i, n) {
|
|
var r = new Ol(e, t, i, n);
|
|
return this._tasks.push(r), r
|
|
}, e.prototype.addTextFileTask = function(e, t) {
|
|
var i = new Il(e, t);
|
|
return this._tasks.push(i), i
|
|
}, e.prototype.addBinaryFileTask = function(e, t) {
|
|
var i = new Dl(e, t);
|
|
return this._tasks.push(i), i
|
|
}, e.prototype.addImageTask = function(e, t) {
|
|
var i = new Ll(e, t);
|
|
return this._tasks.push(i), i
|
|
}, e.prototype.addTextureTask = function(e, t, i, n, r) {
|
|
void 0 === r && (r = ke.a.TRILINEAR_SAMPLINGMODE);
|
|
var o = new wl(e, t, i, n, r);
|
|
return this._tasks.push(o), o
|
|
}, e.prototype.addCubeTextureTask = function(e, t, i, n, r) {
|
|
var o = new Fl(e, t, i, n, r);
|
|
return this._tasks.push(o), o
|
|
}, e.prototype.addHDRCubeTextureTask = function(e, t, i, n, r, o, s) {
|
|
void 0 === n && (n = !1), void 0 === r && (r = !0), void 0 === o && (o = !1), void 0 === s && (s = !1);
|
|
var a = new Nl(e, t, i, n, r, o, s);
|
|
return this._tasks.push(a), a
|
|
}, e.prototype.addEquiRectangularCubeTextureAssetTask = function(e, t, i, n, r) {
|
|
void 0 === n && (n = !1), void 0 === r && (r = !0);
|
|
var o = new Bl(e, t, i, n, r);
|
|
return this._tasks.push(o), o
|
|
}, e.prototype.removeTask = function(e) {
|
|
var t = this._tasks.indexOf(e);
|
|
t > -1 && this._tasks.splice(t, 1)
|
|
}, e.prototype._decreaseWaitingTasksCount = function(e) {
|
|
this._waitingTasksCount--;
|
|
try {
|
|
this.onProgress && this.onProgress(this._waitingTasksCount, this._totalTasksCount, e), this.onProgressObservable.notifyObservers(new Ml(this._waitingTasksCount, this._totalTasksCount, e))
|
|
} catch (e) {
|
|
p.a.Error("Error running progress callbacks."), console.log(e)
|
|
}
|
|
if (0 === this._waitingTasksCount) {
|
|
try {
|
|
this.onFinish && this.onFinish(this._tasks);
|
|
for (var t = this._tasks.slice(), i = 0, n = t; i < n.length; i++) {
|
|
if ((e = n[i]).taskState === Al.DONE) {
|
|
var r = this._tasks.indexOf(e);
|
|
r > -1 && this._tasks.splice(r, 1)
|
|
}
|
|
}
|
|
this.onTasksDoneObservable.notifyObservers(this._tasks)
|
|
} catch (e) {
|
|
p.a.Error("Error running tasks-done callbacks."), console.log(e)
|
|
}
|
|
this._isLoading = !1, this._scene.getEngine().hideLoadingUI()
|
|
}
|
|
}, e.prototype._runTask = function(e) {
|
|
var t = this,
|
|
i = function(i, n) {
|
|
e._setErrorObject(i, n), t.onTaskError && t.onTaskError(e), t.onTaskErrorObservable.notifyObservers(e), t._decreaseWaitingTasksCount(e)
|
|
};
|
|
e.run(this._scene, function() {
|
|
try {
|
|
t.onTaskSuccess && t.onTaskSuccess(e), t.onTaskSuccessObservable.notifyObservers(e), t._decreaseWaitingTasksCount(e)
|
|
} catch (e) {
|
|
i("Error executing task success callbacks", e)
|
|
}
|
|
}, i)
|
|
}, e.prototype.reset = function() {
|
|
return this._isLoading = !1, this._tasks = new Array, this
|
|
}, e.prototype.load = function() {
|
|
if (this._isLoading) return this;
|
|
if (this._isLoading = !0, this._waitingTasksCount = this._tasks.length, this._totalTasksCount = this._tasks.length, 0 === this._waitingTasksCount) return this._isLoading = !1, this.onFinish && this.onFinish(this._tasks), this.onTasksDoneObservable.notifyObservers(this._tasks), this;
|
|
this.useDefaultLoadingScreen && this._scene.getEngine().displayLoadingUI();
|
|
for (var e = 0; e < this._tasks.length; e++) {
|
|
var t = this._tasks[e];
|
|
t.taskState === Al.INIT && this._runTask(t)
|
|
}
|
|
return this
|
|
}, e.prototype.loadAsync = function() {
|
|
var e = this;
|
|
return new Promise(function(t, i) {
|
|
e.onTasksDoneObservable.addOnce(function(e) {
|
|
e && e.length ? i(e) : t()
|
|
})
|
|
})
|
|
}, e
|
|
}(),
|
|
Vl = function() {
|
|
function e() {
|
|
var e = this;
|
|
this.promise = new Promise(function(t, i) {
|
|
e._resolve = t, e._reject = i
|
|
})
|
|
}
|
|
return Object.defineProperty(e.prototype, "resolve", {
|
|
get: function() {
|
|
return this._resolve
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "reject", {
|
|
get: function() {
|
|
return this._reject
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e
|
|
}(),
|
|
Gl = function() {
|
|
function e(e, t) {
|
|
this._meshesOrigins = [], this._toCenterVectors = [], this._scaledDirection = o.x.Zero(), this._newPosition = o.x.Zero(), this._centerPosition = o.x.Zero(), this._meshes = e.slice(), t ? this._centerMesh = t : this._setCenterMesh();
|
|
var i = this._meshes.indexOf(this._centerMesh);
|
|
i >= 0 && this._meshes.splice(i, 1), this._centerPosition = this._centerMesh.getAbsolutePosition().clone();
|
|
for (var n = 0; n < this._meshes.length; n++)
|
|
if (this._meshes[n]) {
|
|
var r = this._meshes[n];
|
|
this._meshesOrigins[n] = r.getAbsolutePosition().clone(), this._toCenterVectors[n] = o.x.Zero(), r._boundingInfo && this._centerMesh._boundingInfo && r._boundingInfo.boundingBox.centerWorld.subtractToRef(this._centerMesh._boundingInfo.boundingBox.centerWorld, this._toCenterVectors[n])
|
|
}
|
|
}
|
|
return e.prototype._setCenterMesh = function() {
|
|
for (var e = o.x.Zero(), t = o.x.Zero(), i = Number.MAX_VALUE, n = 0; n < this._meshes.length; n++) {
|
|
if (this._meshes[n])(s = (r = this._meshes[n]).getBoundingInfo()) && t.addInPlace(s.boundingBox.centerWorld)
|
|
}
|
|
e = t.scale(1 / this._meshes.length);
|
|
for (n = 0; n < this._meshes.length; n++) {
|
|
var r, s;
|
|
if (this._meshes[n])
|
|
if (s = (r = this._meshes[n]).getBoundingInfo()) {
|
|
var a = s.boundingBox.centerWorld.subtract(e).lengthSquared();
|
|
a < i && (this._centerMesh = r, i = a)
|
|
}
|
|
}
|
|
}, e.prototype.getClassName = function() {
|
|
return "MeshExploder"
|
|
}, e.prototype.getMeshes = function() {
|
|
var e = this._meshes.slice();
|
|
return e.unshift(this._centerMesh), e
|
|
}, e.prototype.explode = function(e) {
|
|
void 0 === e && (e = 1);
|
|
for (var t = 0; t < this._meshes.length; t++) this._meshes[t] && this._meshesOrigins[t] && this._toCenterVectors[t] && (this._toCenterVectors[t].scaleToRef(e, this._scaledDirection), this._meshesOrigins[t].addToRef(this._scaledDirection, this._newPosition), this._meshes[t].setAbsolutePosition(this._newPosition));
|
|
this._centerMesh.setAbsolutePosition(this._centerPosition)
|
|
}, e
|
|
}(),
|
|
kl = function() {
|
|
function e(e, t, i, n, r, o, s, a, c) {
|
|
this.onProcessFileCallback = function() {
|
|
return !0
|
|
}, this._engine = e, this._currentScene = t, this._sceneLoadedCallback = i, this._progressCallback = n, this._additionalRenderLoopLogicCallback = r, this._textureLoadingCallback = o, this._startingProcessingFilesCallback = s, this._onReloadCallback = a, this._errorCallback = c
|
|
}
|
|
return Object.defineProperty(e, "FilesToLoad", {
|
|
get: function() {
|
|
return mn.a.FilesToLoad
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.monitorElementForDragNDrop = function(e) {
|
|
var t = this;
|
|
e && (this._elementToMonitor = e, this._dragEnterHandler = function(e) {
|
|
t.drag(e)
|
|
}, this._dragOverHandler = function(e) {
|
|
t.drag(e)
|
|
}, this._dropHandler = function(e) {
|
|
t.drop(e)
|
|
}, this._elementToMonitor.addEventListener("dragenter", this._dragEnterHandler, !1), this._elementToMonitor.addEventListener("dragover", this._dragOverHandler, !1), this._elementToMonitor.addEventListener("drop", this._dropHandler, !1))
|
|
}, e.prototype.dispose = function() {
|
|
this._elementToMonitor && (this._elementToMonitor.removeEventListener("dragenter", this._dragEnterHandler), this._elementToMonitor.removeEventListener("dragover", this._dragOverHandler), this._elementToMonitor.removeEventListener("drop", this._dropHandler))
|
|
}, e.prototype.renderFunction = function() {
|
|
if (this._additionalRenderLoopLogicCallback && this._additionalRenderLoopLogicCallback(), this._currentScene) {
|
|
if (this._textureLoadingCallback) {
|
|
var e = this._currentScene.getWaitingItemsCount();
|
|
e > 0 && this._textureLoadingCallback(e)
|
|
}
|
|
this._currentScene.render()
|
|
}
|
|
}, e.prototype.drag = function(e) {
|
|
e.stopPropagation(), e.preventDefault()
|
|
}, e.prototype.drop = function(e) {
|
|
e.stopPropagation(), e.preventDefault(), this.loadFiles(e)
|
|
}, e.prototype._traverseFolder = function(e, t, i, n) {
|
|
var r = this,
|
|
o = e.createReader(),
|
|
s = e.fullPath.replace(/^\//, "").replace(/(.+?)\/?$/, "$1/");
|
|
o.readEntries(function(e) {
|
|
i.count += e.length;
|
|
for (var o = 0, a = e; o < a.length; o++) {
|
|
var c = a[o];
|
|
c.isFile ? c.file(function(e) {
|
|
e.correctName = s + e.name, t.push(e), 0 == --i.count && n()
|
|
}) : c.isDirectory && r._traverseFolder(c, t, i, n)
|
|
}--i.count && n()
|
|
})
|
|
}, e.prototype._processFiles = function(t) {
|
|
for (var i = 0; i < t.length; i++) {
|
|
var n = t[i].correctName.toLowerCase(),
|
|
r = n.split(".").pop();
|
|
this.onProcessFileCallback(t[i], n, r) && ("babylon" !== r && "stl" !== r && "obj" !== r && "gltf" !== r && "glb" !== r || -1 !== n.indexOf(".binary.babylon") || -1 !== n.indexOf(".incremental.babylon") || (this._sceneFileToLoad = t[i]), e.FilesToLoad[n] = t[i])
|
|
}
|
|
}, e.prototype.loadFiles = function(e) {
|
|
var t = this;
|
|
if (e && e.dataTransfer && e.dataTransfer.files && (this._filesToLoad = e.dataTransfer.files), e && e.target && e.target.files && (this._filesToLoad = e.target.files), this._filesToLoad && 0 !== this._filesToLoad.length && (this._startingProcessingFilesCallback && this._startingProcessingFilesCallback(this._filesToLoad), this._filesToLoad && this._filesToLoad.length > 0)) {
|
|
for (var i = new Array, n = [], r = e.dataTransfer ? e.dataTransfer.items : null, o = 0; o < this._filesToLoad.length; o++) {
|
|
var s = this._filesToLoad[o],
|
|
a = s.name.toLowerCase(),
|
|
c = void 0;
|
|
if (s.correctName = a, r) {
|
|
var l = r[o];
|
|
l.getAsEntry ? c = l.getAsEntry() : l.webkitGetAsEntry && (c = l.webkitGetAsEntry())
|
|
}
|
|
c && c.isDirectory ? n.push(c) : i.push(s)
|
|
}
|
|
if (0 === n.length) this._processFiles(i), this._processReload();
|
|
else
|
|
for (var u = {
|
|
count: n.length
|
|
}, h = 0, d = n; h < d.length; h++) {
|
|
var f = d[h];
|
|
this._traverseFolder(f, i, u, function() {
|
|
t._processFiles(i), 0 === u.count && t._processReload()
|
|
})
|
|
}
|
|
}
|
|
}, e.prototype._processReload = function() {
|
|
this._onReloadCallback ? this._onReloadCallback(this._sceneFileToLoad) : this.reload()
|
|
}, e.prototype.reload = function() {
|
|
var e = this;
|
|
this._sceneFileToLoad ? (this._currentScene && (p.a.errorsCount > 0 && p.a.ClearLogCache(), this._engine.stopRenderLoop()), bn.LoadAsync("file:", this._sceneFileToLoad, this._engine, function(t) {
|
|
e._progressCallback && e._progressCallback(t)
|
|
}).then(function(t) {
|
|
e._currentScene && e._currentScene.dispose(), e._currentScene = t, e._sceneLoadedCallback && e._sceneLoadedCallback(e._sceneFileToLoad, e._currentScene), e._currentScene.executeWhenReady(function() {
|
|
e._engine.runRenderLoop(function() {
|
|
e.renderFunction()
|
|
})
|
|
})
|
|
}).catch(function(t) {
|
|
e._errorCallback && e._errorCallback(e._sceneFileToLoad, e._currentScene, t.message)
|
|
})) : p.a.Error("Please provide a valid .babylon file.")
|
|
}, e
|
|
}(),
|
|
zl = i(105),
|
|
jl = i(106),
|
|
Hl = function() {
|
|
function e(e) {
|
|
void 0 === e && (e = 0), this.priority = e
|
|
}
|
|
return e.prototype.getDescription = function() {
|
|
return ""
|
|
}, e.prototype.apply = function(e, t) {
|
|
return !0
|
|
}, e
|
|
}(),
|
|
Wl = function(e) {
|
|
function t(t, i, n) {
|
|
void 0 === t && (t = 0), void 0 === i && (i = 1024), void 0 === n && (n = .5);
|
|
var r = e.call(this, t) || this;
|
|
return r.priority = t, r.maximumSize = i, r.step = n, r
|
|
}
|
|
return l.d(t, e), t.prototype.getDescription = function() {
|
|
return "Reducing render target texture size to " + this.maximumSize
|
|
}, t.prototype.apply = function(e, t) {
|
|
for (var i = !0, n = 0; n < e.textures.length; n++) {
|
|
var r = e.textures[n];
|
|
if (r.canRescale && !r.getContext) {
|
|
var o = r.getSize();
|
|
Math.max(o.width, o.height) > this.maximumSize && (r.scale(this.step), i = !1)
|
|
}
|
|
}
|
|
return i
|
|
}, t
|
|
}(Hl),
|
|
Xl = function(e) {
|
|
function t(t, i, n) {
|
|
void 0 === t && (t = 0), void 0 === i && (i = 2), void 0 === n && (n = .25);
|
|
var r = e.call(this, t) || this;
|
|
return r.priority = t, r.maximumScale = i, r.step = n, r._currentScale = -1, r._directionOffset = 1, r
|
|
}
|
|
return l.d(t, e), t.prototype.getDescription = function() {
|
|
return "Setting hardware scaling level to " + this._currentScale
|
|
}, t.prototype.apply = function(e, t) {
|
|
return -1 === this._currentScale && (this._currentScale = e.getEngine().getHardwareScalingLevel(), this._currentScale > this.maximumScale && (this._directionOffset = -1)), this._currentScale += this._directionOffset * this.step, e.getEngine().setHardwareScalingLevel(this._currentScale), 1 === this._directionOffset ? this._currentScale >= this.maximumScale : this._currentScale <= this.maximumScale
|
|
}, t
|
|
}(Hl),
|
|
Yl = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.getDescription = function() {
|
|
return "Turning shadows on/off"
|
|
}, t.prototype.apply = function(e, t) {
|
|
return e.shadowsEnabled = t.isInImprovementMode, !0
|
|
}, t
|
|
}(Hl),
|
|
Kl = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.getDescription = function() {
|
|
return "Turning post-processes on/off"
|
|
}, t.prototype.apply = function(e, t) {
|
|
return e.postProcessesEnabled = t.isInImprovementMode, !0
|
|
}, t
|
|
}(Hl),
|
|
Ql = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.getDescription = function() {
|
|
return "Turning lens flares on/off"
|
|
}, t.prototype.apply = function(e, t) {
|
|
return e.lensFlaresEnabled = t.isInImprovementMode, !0
|
|
}, t
|
|
}(Hl),
|
|
ql = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.getDescription = function() {
|
|
return this.onGetDescription ? this.onGetDescription() : "Running user defined callback"
|
|
}, t.prototype.apply = function(e, t) {
|
|
return !this.onApply || this.onApply(e, t)
|
|
}, t
|
|
}(Hl),
|
|
Zl = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.getDescription = function() {
|
|
return "Turning particles on/off"
|
|
}, t.prototype.apply = function(e, t) {
|
|
return e.particlesEnabled = t.isInImprovementMode, !0
|
|
}, t
|
|
}(Hl),
|
|
Jl = function(e) {
|
|
function t() {
|
|
return null !== e && e.apply(this, arguments) || this
|
|
}
|
|
return l.d(t, e), t.prototype.getDescription = function() {
|
|
return "Turning render targets off"
|
|
}, t.prototype.apply = function(e, t) {
|
|
return e.renderTargetsEnabled = t.isInImprovementMode, !0
|
|
}, t
|
|
}(Hl),
|
|
$l = function(e) {
|
|
function t() {
|
|
var t = null !== e && e.apply(this, arguments) || this;
|
|
return t._canBeMerged = function(e) {
|
|
if (!(e instanceof fe.a)) return !1;
|
|
var t = e;
|
|
return !t.isDisposed() && (!(!t.isVisible || !t.isEnabled()) && (!(t.instances.length > 0) && (!t.skeleton && !t.hasLODLevels)))
|
|
}, t
|
|
}
|
|
return l.d(t, e), Object.defineProperty(t, "UpdateSelectionTree", {
|
|
get: function() {
|
|
return t._UpdateSelectionTree
|
|
},
|
|
set: function(e) {
|
|
t._UpdateSelectionTree = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getDescription = function() {
|
|
return "Merging similar meshes together"
|
|
}, t.prototype.apply = function(e, i, n) {
|
|
for (var r = e.meshes.slice(0), o = r.length, s = 0; s < o; s++) {
|
|
var a = new Array,
|
|
c = r[s];
|
|
if (this._canBeMerged(c)) {
|
|
a.push(c);
|
|
for (var l = s + 1; l < o; l++) {
|
|
var u = r[l];
|
|
this._canBeMerged(u) && (u.material === c.material && u.checkCollisions === c.checkCollisions && (a.push(u), o--, r.splice(l, 1), l--))
|
|
}
|
|
a.length < 2 || fe.a.MergeMeshes(a, void 0, !0)
|
|
}
|
|
}
|
|
var h = e;
|
|
return h.createOrUpdateSelectionOctree && (null != n ? n && h.createOrUpdateSelectionOctree() : t.UpdateSelectionTree && h.createOrUpdateSelectionOctree()), !0
|
|
}, t._UpdateSelectionTree = !1, t
|
|
}(Hl),
|
|
eu = function() {
|
|
function e(e, t) {
|
|
void 0 === e && (e = 60), void 0 === t && (t = 2e3), this.targetFrameRate = e, this.trackerDuration = t, this.optimizations = new Array
|
|
}
|
|
return e.prototype.addOptimization = function(e) {
|
|
return this.optimizations.push(e), this
|
|
}, e.prototype.addCustomOptimization = function(e, t, i) {
|
|
void 0 === i && (i = 0);
|
|
var n = new ql(i);
|
|
return n.onApply = e, n.onGetDescription = t, this.optimizations.push(n), this
|
|
}, e.LowDegradationAllowed = function(t) {
|
|
var i = new e(t),
|
|
n = 0;
|
|
return i.addOptimization(new $l(n)), i.addOptimization(new Yl(n)), i.addOptimization(new Ql(n)), n++, i.addOptimization(new Kl(n)), i.addOptimization(new Zl(n)), n++, i.addOptimization(new Wl(n, 1024)), i
|
|
}, e.ModerateDegradationAllowed = function(t) {
|
|
var i = new e(t),
|
|
n = 0;
|
|
return i.addOptimization(new $l(n)), i.addOptimization(new Yl(n)), i.addOptimization(new Ql(n)), n++, i.addOptimization(new Kl(n)), i.addOptimization(new Zl(n)), n++, i.addOptimization(new Wl(n, 512)), n++, i.addOptimization(new Jl(n)), n++, i.addOptimization(new Xl(n, 2)), i
|
|
}, e.HighDegradationAllowed = function(t) {
|
|
var i = new e(t),
|
|
n = 0;
|
|
return i.addOptimization(new $l(n)), i.addOptimization(new Yl(n)), i.addOptimization(new Ql(n)), n++, i.addOptimization(new Kl(n)), i.addOptimization(new Zl(n)), n++, i.addOptimization(new Wl(n, 256)), n++, i.addOptimization(new Jl(n)), n++, i.addOptimization(new Xl(n, 4)), i
|
|
}, e
|
|
}(),
|
|
tu = function() {
|
|
function e(e, t, i, n) {
|
|
var o = this;
|
|
if (void 0 === i && (i = !0), void 0 === n && (n = !1), this._isRunning = !1, this._currentPriorityLevel = 0, this._targetFrameRate = 60, this._trackerDuration = 2e3, this._currentFrameRate = 0, this._improvementMode = !1, this.onSuccessObservable = new r.c, this.onNewOptimizationAppliedObservable = new r.c, this.onFailureObservable = new r.c, this._options = t || new eu, this._options.targetFrameRate && (this._targetFrameRate = this._options.targetFrameRate), this._options.trackerDuration && (this._trackerDuration = this._options.trackerDuration), i)
|
|
for (var s = 0, a = 0, c = this._options.optimizations; a < c.length; a++) {
|
|
c[a].priority = s++
|
|
}
|
|
this._improvementMode = n, this._scene = e || P.a.LastCreatedScene, this._sceneDisposeObserver = this._scene.onDisposeObservable.add(function() {
|
|
o._sceneDisposeObserver = null, o.dispose()
|
|
})
|
|
}
|
|
return Object.defineProperty(e.prototype, "isInImprovementMode", {
|
|
get: function() {
|
|
return this._improvementMode
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "currentPriorityLevel", {
|
|
get: function() {
|
|
return this._currentPriorityLevel
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "currentFrameRate", {
|
|
get: function() {
|
|
return this._currentFrameRate
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "targetFrameRate", {
|
|
get: function() {
|
|
return this._targetFrameRate
|
|
},
|
|
set: function(e) {
|
|
this._targetFrameRate = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "trackerDuration", {
|
|
get: function() {
|
|
return this._trackerDuration
|
|
},
|
|
set: function(e) {
|
|
this._trackerDuration = e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "optimizations", {
|
|
get: function() {
|
|
return this._options.optimizations
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.stop = function() {
|
|
this._isRunning = !1
|
|
}, e.prototype.reset = function() {
|
|
this._currentPriorityLevel = 0
|
|
}, e.prototype.start = function() {
|
|
var e = this;
|
|
this._isRunning || (this._isRunning = !0, this._scene.executeWhenReady(function() {
|
|
setTimeout(function() {
|
|
e._checkCurrentState()
|
|
}, e._trackerDuration)
|
|
}))
|
|
}, e.prototype._checkCurrentState = function() {
|
|
var e = this;
|
|
if (this._isRunning) {
|
|
var t = this._scene,
|
|
i = this._options;
|
|
if (this._currentFrameRate = Math.round(t.getEngine().getFps()), this._improvementMode && this._currentFrameRate <= this._targetFrameRate || !this._improvementMode && this._currentFrameRate >= this._targetFrameRate) return this._isRunning = !1, void this.onSuccessObservable.notifyObservers(this);
|
|
for (var n = !0, r = !0, o = 0; o < i.optimizations.length; o++) {
|
|
var s = i.optimizations[o];
|
|
s.priority === this._currentPriorityLevel && (r = !1, n = n && s.apply(t, this), this.onNewOptimizationAppliedObservable.notifyObservers(s))
|
|
}
|
|
if (r) return this._isRunning = !1, void this.onFailureObservable.notifyObservers(this);
|
|
n && this._currentPriorityLevel++, t.executeWhenReady(function() {
|
|
setTimeout(function() {
|
|
e._checkCurrentState()
|
|
}, e._trackerDuration)
|
|
})
|
|
}
|
|
}, e.prototype.dispose = function() {
|
|
this.stop(), this.onSuccessObservable.clear(), this.onFailureObservable.clear(), this.onNewOptimizationAppliedObservable.clear(), this._sceneDisposeObserver && this._scene.onDisposeObservable.remove(this._sceneDisposeObserver)
|
|
}, e.OptimizeAsync = function(t, i, n, r) {
|
|
var o = new e(t, i || eu.ModerateDegradationAllowed(), !1);
|
|
return n && o.onSuccessObservable.add(function() {
|
|
n()
|
|
}), r && o.onFailureObservable.add(function() {
|
|
r()
|
|
}), o.start(), o
|
|
}, e
|
|
}(),
|
|
iu = [],
|
|
nu = function(e, t) {
|
|
iu[e.id] || e.doNotSerialize || (t.vertexData.push(e.serializeVerticeData()), iu[e.id] = !0)
|
|
},
|
|
ru = function(e, t) {
|
|
var i = {},
|
|
n = e._geometry;
|
|
return n && (e.getScene().getGeometryByID(n.id) || nu(n, t.geometries)), e.serialize && e.serialize(i), i
|
|
},
|
|
ou = function() {
|
|
function e() {}
|
|
return e.ClearCache = function() {
|
|
iu = []
|
|
}, e.Serialize = function(t) {
|
|
var i, n, r, o = {};
|
|
if (e.ClearCache(), o.useDelayedTextureLoading = t.useDelayedTextureLoading, o.autoClear = t.autoClear, o.clearColor = t.clearColor.asArray(), o.ambientColor = t.ambientColor.asArray(), o.gravity = t.gravity.asArray(), o.collisionsEnabled = t.collisionsEnabled, t.fogMode && 0 !== t.fogMode && (o.fogMode = t.fogMode, o.fogColor = t.fogColor.asArray(), o.fogStart = t.fogStart, o.fogEnd = t.fogEnd, o.fogDensity = t.fogDensity), t.isPhysicsEnabled()) {
|
|
var s = t.getPhysicsEngine();
|
|
s && (o.physicsEnabled = !0, o.physicsGravity = s.gravity.asArray(), o.physicsEngine = s.getPhysicsPluginName())
|
|
}
|
|
t.metadata && (o.metadata = t.metadata), o.morphTargetManagers = [];
|
|
for (var a = 0, c = t.meshes; a < c.length; a++) {
|
|
var l = (m = c[a]).morphTargetManager;
|
|
l && o.morphTargetManagers.push(l.serialize())
|
|
}
|
|
for (o.lights = [], i = 0; i < t.lights.length; i++)(n = t.lights[i]).doNotSerialize || o.lights.push(n.serialize());
|
|
for (o.cameras = [], i = 0; i < t.cameras.length; i++) {
|
|
var u = t.cameras[i];
|
|
u.doNotSerialize || o.cameras.push(u.serialize())
|
|
}
|
|
if (t.activeCamera && (o.activeCameraID = t.activeCamera.id), L.a.AppendSerializedAnimations(t, o), t.reflectionProbes && t.reflectionProbes.length > 0)
|
|
for (o.reflectionProbes = [], i = 0; i < t.reflectionProbes.length; i++) {
|
|
var h = t.reflectionProbes[i];
|
|
o.reflectionProbes.push(h.serialize())
|
|
}
|
|
for (o.materials = [], o.multiMaterials = [], i = 0; i < t.materials.length; i++)(r = t.materials[i]).doNotSerialize || o.materials.push(r.serialize());
|
|
for (o.multiMaterials = [], i = 0; i < t.multiMaterials.length; i++) {
|
|
var d = t.multiMaterials[i];
|
|
o.multiMaterials.push(d.serialize())
|
|
}
|
|
for (t.environmentTexture && (o.environmentTexture = t.environmentTexture.name), o.skeletons = [], i = 0; i < t.skeletons.length; i++) {
|
|
var f = t.skeletons[i];
|
|
f.doNotSerialize || o.skeletons.push(f.serialize())
|
|
}
|
|
for (o.transformNodes = [], i = 0; i < t.transformNodes.length; i++) o.transformNodes.push(t.transformNodes[i].serialize());
|
|
o.geometries = {}, o.geometries.boxes = [], o.geometries.spheres = [], o.geometries.cylinders = [], o.geometries.toruses = [], o.geometries.grounds = [], o.geometries.planes = [], o.geometries.torusKnots = [], o.geometries.vertexData = [], iu = [];
|
|
var p = t.getGeometries();
|
|
for (i = 0; i < p.length; i++) {
|
|
var g = p[i];
|
|
g.isReady() && nu(g, o.geometries)
|
|
}
|
|
for (o.meshes = [], i = 0; i < t.meshes.length; i++) {
|
|
var m;
|
|
if ((m = t.meshes[i]) instanceof fe.a) {
|
|
var v = m;
|
|
v.doNotSerialize || v.delayLoadState !== _.a.DELAYLOADSTATE_LOADED && v.delayLoadState !== _.a.DELAYLOADSTATE_NONE || o.meshes.push(ru(v, o))
|
|
}
|
|
}
|
|
for (o.particleSystems = [], i = 0; i < t.particleSystems.length; i++) o.particleSystems.push(t.particleSystems[i].serialize());
|
|
t.actionManager && (o.actions = t.actionManager.serialize("scene"));
|
|
for (var y = 0, b = t._serializableComponents; y < b.length; y++) {
|
|
b[y].serialize(o)
|
|
}
|
|
return o
|
|
}, e.SerializeMesh = function(t, i, n) {
|
|
void 0 === i && (i = !1), void 0 === n && (n = !1);
|
|
var r = {};
|
|
if (e.ClearCache(), t = t instanceof Array ? t : [t], i || n)
|
|
for (var o = 0; o < t.length; ++o) n && t[o].getDescendants().forEach(function(e) {
|
|
e instanceof fe.a && t.indexOf(e) < 0 && t.push(e)
|
|
}), i && t[o].parent && t.indexOf(t[o].parent) < 0 && t.push(t[o].parent);
|
|
return t.forEach(function(e) {
|
|
! function(e, t) {
|
|
if (e.delayLoadState === _.a.DELAYLOADSTATE_LOADED || e.delayLoadState === _.a.DELAYLOADSTATE_NONE) {
|
|
if (e.material)
|
|
if (e.material instanceof Fo.a) {
|
|
if (t.multiMaterials = t.multiMaterials || [], t.materials = t.materials || [], !t.multiMaterials.some(function(t) {
|
|
return t.id === e.material.id
|
|
})) {
|
|
t.multiMaterials.push(e.material.serialize());
|
|
for (var i = function(e) {
|
|
e && (t.materials.some(function(t) {
|
|
return t.id === e.id
|
|
}) || t.materials.push(e.serialize()))
|
|
}, n = 0, r = e.material.subMaterials; n < r.length; n++) i(r[n])
|
|
}
|
|
} else t.materials = t.materials || [], t.materials.some(function(t) {
|
|
return t.id === e.material.id
|
|
}) || t.materials.push(e.material.serialize());
|
|
var o = e._geometry;
|
|
o && (t.geometries || (t.geometries = {}, t.geometries.boxes = [], t.geometries.spheres = [], t.geometries.cylinders = [], t.geometries.toruses = [], t.geometries.grounds = [], t.geometries.planes = [], t.geometries.torusKnots = [], t.geometries.vertexData = []), nu(o, t.geometries)), e.skeleton && (t.skeletons = t.skeletons || [], t.skeletons.push(e.skeleton.serialize())), t.meshes = t.meshes || [], t.meshes.push(ru(e, t))
|
|
}
|
|
}(e, r)
|
|
}), r
|
|
}, e
|
|
}(),
|
|
su = i(29),
|
|
au = function() {
|
|
function e() {}
|
|
return e.CreateResizedCopy = function(e, t, i, n) {
|
|
void 0 === n && (n = !0);
|
|
var r = e.getScene(),
|
|
o = r.getEngine(),
|
|
s = new _i("resized" + e.name, {
|
|
width: t,
|
|
height: i
|
|
}, r, !e.noMipmap, !0, e._texture.type, !1, e.samplingMode, !1);
|
|
s.wrapU = e.wrapU, s.wrapV = e.wrapV, s.uOffset = e.uOffset, s.vOffset = e.vOffset, s.uScale = e.uScale, s.vScale = e.vScale, s.uAng = e.uAng, s.vAng = e.vAng, s.wAng = e.wAng, s.coordinatesIndex = e.coordinatesIndex, s.level = e.level, s.anisotropicFilteringLevel = e.anisotropicFilteringLevel, s._texture.isReady = !1, e.wrapU = ke.a.CLAMP_ADDRESSMODE, e.wrapV = ke.a.CLAMP_ADDRESSMODE;
|
|
var a = new Yt("pass", 1, null, n ? ke.a.BILINEAR_SAMPLINGMODE : ke.a.NEAREST_SAMPLINGMODE, o, !1, _.a.TEXTURETYPE_UNSIGNED_INT);
|
|
return a.getEffect().executeWhenCompiled(function() {
|
|
a.onApply = function(t) {
|
|
t.setTexture("textureSampler", e)
|
|
};
|
|
var t = s.getInternalTexture();
|
|
t && (r.postProcessManager.directRender([a], t), o.unBindFramebuffer(t), s.disposeFramebufferObjects(), a.dispose(), t.isReady = !0)
|
|
}), s
|
|
}, e
|
|
}(),
|
|
cu = function() {
|
|
function e(t, i) {
|
|
if (void 0 === i && (i = null), !e.IsSupported(t)) throw "Your browser does not support recording so far.";
|
|
var n = t.getRenderingCanvas();
|
|
if (!n) throw "The babylon engine must have a canvas to be recorded";
|
|
this._canvas = n, this._canvas.isRecording = !1, this._options = l.a({}, e._defaultOptions, i);
|
|
var r = this._canvas.captureStream(this._options.fps);
|
|
if (this._options.audioTracks)
|
|
for (var o = 0, s = this._options.audioTracks; o < s.length; o++) {
|
|
var a = s[o];
|
|
r.addTrack(a)
|
|
}
|
|
this._mediaRecorder = new MediaRecorder(r, {
|
|
mimeType: this._options.mimeType
|
|
}), this._mediaRecorder.ondataavailable = this._handleDataAvailable.bind(this), this._mediaRecorder.onerror = this._handleError.bind(this), this._mediaRecorder.onstop = this._handleStop.bind(this)
|
|
}
|
|
return e.IsSupported = function(e) {
|
|
var t = e.getRenderingCanvas();
|
|
return !!t && "function" == typeof t.captureStream
|
|
}, Object.defineProperty(e.prototype, "isRecording", {
|
|
get: function() {
|
|
return !!this._canvas && this._canvas.isRecording
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.stopRecording = function() {
|
|
this._canvas && this._mediaRecorder && this.isRecording && (this._canvas.isRecording = !1, this._mediaRecorder.stop())
|
|
}, e.prototype.startRecording = function(e, t) {
|
|
var i = this;
|
|
if (void 0 === e && (e = "babylonjs.webm"), void 0 === t && (t = 7), !this._canvas || !this._mediaRecorder) throw "Recorder has already been disposed";
|
|
if (this.isRecording) throw "Recording already in progress";
|
|
return t > 0 && setTimeout(function() {
|
|
i.stopRecording()
|
|
}, 1e3 * t), this._fileName = e, this._recordedChunks = [], this._resolve = null, this._reject = null, this._canvas.isRecording = !0, this._mediaRecorder.start(this._options.recordChunckSize), new Promise(function(e, t) {
|
|
i._resolve = e, i._reject = t
|
|
})
|
|
}, e.prototype.dispose = function() {
|
|
this._canvas = null, this._mediaRecorder = null, this._recordedChunks = [], this._fileName = null, this._resolve = null, this._reject = null
|
|
}, e.prototype._handleDataAvailable = function(e) {
|
|
e.data.size > 0 && this._recordedChunks.push(e.data)
|
|
}, e.prototype._handleError = function(e) {
|
|
if (this.stopRecording(), !this._reject) throw new e.error;
|
|
this._reject(e.error)
|
|
}, e.prototype._handleStop = function() {
|
|
this.stopRecording();
|
|
var e = new Blob(this._recordedChunks);
|
|
this._resolve && this._resolve(e), window.URL.createObjectURL(e), this._fileName && ye.h.Download(e, this._fileName)
|
|
}, e._defaultOptions = {
|
|
mimeType: "video/webm",
|
|
fps: 25,
|
|
recordChunckSize: 3e3
|
|
}, e
|
|
}(),
|
|
lu = function() {
|
|
function e() {}
|
|
return e.CreateScreenshot = function(e, t, i, n, r) {
|
|
var o, s;
|
|
if (void 0 === r && (r = "image/png"), i.precision) o = Math.round(e.getRenderWidth() * i.precision), s = Math.round(o / e.getAspectRatio(t));
|
|
else if (i.width && i.height) o = i.width, s = i.height;
|
|
else if (i.width && !i.height) o = i.width, s = Math.round(o / e.getAspectRatio(t));
|
|
else if (i.height && !i.width) s = i.height, o = Math.round(s * e.getAspectRatio(t));
|
|
else {
|
|
if (isNaN(i)) return void p.a.Error("Invalid 'size' parameter !");
|
|
s = i, o = i
|
|
}
|
|
ye.h._ScreenshotCanvas || (ye.h._ScreenshotCanvas = document.createElement("canvas")), ye.h._ScreenshotCanvas.width = o, ye.h._ScreenshotCanvas.height = s;
|
|
var a = ye.h._ScreenshotCanvas.getContext("2d"),
|
|
c = e.getRenderWidth() / e.getRenderHeight(),
|
|
l = o,
|
|
u = l / c;
|
|
u > s && (l = (u = s) * c);
|
|
var h = Math.max(0, o - l) / 2,
|
|
d = Math.max(0, s - u) / 2,
|
|
f = e.getRenderingCanvas();
|
|
a && f && a.drawImage(f, h, d, l, u), ye.h.EncodeScreenshotCanvasData(n, r)
|
|
}, e.CreateScreenshotUsingRenderTarget = function(e, t, i, n, r, o, s, a) {
|
|
var c, l;
|
|
if (void 0 === r && (r = "image/png"), void 0 === o && (o = 1), void 0 === s && (s = !1), i.precision) c = Math.round(e.getRenderWidth() * i.precision), l = Math.round(c / e.getAspectRatio(t)), i = {
|
|
width: c,
|
|
height: l
|
|
};
|
|
else if (i.width && i.height) c = i.width, l = i.height;
|
|
else if (i.width && !i.height) c = i.width, l = Math.round(c / e.getAspectRatio(t)), i = {
|
|
width: c,
|
|
height: l
|
|
};
|
|
else if (i.height && !i.width) l = i.height, i = {
|
|
width: c = Math.round(l * e.getAspectRatio(t)),
|
|
height: l
|
|
};
|
|
else {
|
|
if (isNaN(i)) return void p.a.Error("Invalid 'size' parameter !");
|
|
l = i, c = i
|
|
}
|
|
var u = t.getScene(),
|
|
h = null;
|
|
u.activeCamera !== t && (h = u.activeCamera, u.activeCamera = t);
|
|
var d = e.getRenderingCanvas();
|
|
if (d) {
|
|
var f = {
|
|
width: d.width,
|
|
height: d.height
|
|
};
|
|
e.setSize(c, l), u.render();
|
|
var g = new _i("screenShot", i, u, !1, !1, _.a.TEXTURETYPE_UNSIGNED_INT, !1, ke.a.NEAREST_SAMPLINGMODE);
|
|
g.renderList = null, g.samples = o, s && g.addPostProcess(new xc("antialiasing", 1, u.activeCamera)), g.onAfterRenderObservable.add(function() {
|
|
ye.h.DumpFramebuffer(c, l, e, n, r, a)
|
|
}), u.incrementRenderId(), u.resetCachedMaterial(), g.render(!0), g.dispose(), h && (u.activeCamera = h), e.setSize(f.width, f.height), t.getProjectionMatrix(!0)
|
|
} else p.a.Error("No rendering canvas found !")
|
|
}, e
|
|
}();
|
|
ye.h.CreateScreenshot = lu.CreateScreenshot, ye.h.CreateScreenshotUsingRenderTarget = lu.CreateScreenshotUsingRenderTarget,
|
|
function(e) {
|
|
e[e.Checkbox = 0] = "Checkbox", e[e.Slider = 1] = "Slider", e[e.Vector3 = 2] = "Vector3", e[e.Quaternion = 3] = "Quaternion", e[e.Color3 = 4] = "Color3"
|
|
}(Sl || (Sl = {})), i.d(t, "AbstractScene", function() {
|
|
return n.a
|
|
}), i.d(t, "Action", function() {
|
|
return a
|
|
}), i.d(t, "ActionEvent", function() {
|
|
return c.a
|
|
}), i.d(t, "ActionManager", function() {
|
|
return C
|
|
}), i.d(t, "Condition", function() {
|
|
return u
|
|
}), i.d(t, "ValueCondition", function() {
|
|
return h
|
|
}), i.d(t, "PredicateCondition", function() {
|
|
return d
|
|
}), i.d(t, "StateCondition", function() {
|
|
return f
|
|
}), i.d(t, "SwitchBooleanAction", function() {
|
|
return g
|
|
}), i.d(t, "SetStateAction", function() {
|
|
return m
|
|
}), i.d(t, "SetValueAction", function() {
|
|
return v
|
|
}), i.d(t, "IncrementValueAction", function() {
|
|
return y
|
|
}), i.d(t, "PlayAnimationAction", function() {
|
|
return b
|
|
}), i.d(t, "StopAnimationAction", function() {
|
|
return T
|
|
}), i.d(t, "DoNothingAction", function() {
|
|
return E
|
|
}), i.d(t, "CombineAction", function() {
|
|
return A
|
|
}), i.d(t, "ExecuteCodeAction", function() {
|
|
return x
|
|
}), i.d(t, "SetParentAction", function() {
|
|
return R
|
|
}), i.d(t, "PlaySoundAction", function() {
|
|
return M
|
|
}), i.d(t, "StopSoundAction", function() {
|
|
return O
|
|
}), i.d(t, "InterpolateValueAction", function() {
|
|
return U
|
|
}), i.d(t, "Animatable", function() {
|
|
return Q
|
|
}), i.d(t, "_IAnimationState", function() {
|
|
return N
|
|
}), i.d(t, "Animation", function() {
|
|
return B
|
|
}), i.d(t, "TargetedAnimation", function() {
|
|
return q
|
|
}), i.d(t, "AnimationGroup", function() {
|
|
return Z
|
|
}), i.d(t, "AnimationPropertiesOverride", function() {
|
|
return J
|
|
}), i.d(t, "EasingFunction", function() {
|
|
return $
|
|
}), i.d(t, "CircleEase", function() {
|
|
return ee
|
|
}), i.d(t, "BackEase", function() {
|
|
return te
|
|
}), i.d(t, "BounceEase", function() {
|
|
return ie
|
|
}), i.d(t, "CubicEase", function() {
|
|
return ne
|
|
}), i.d(t, "ElasticEase", function() {
|
|
return re
|
|
}), i.d(t, "ExponentialEase", function() {
|
|
return oe
|
|
}), i.d(t, "PowerEase", function() {
|
|
return se
|
|
}), i.d(t, "QuadraticEase", function() {
|
|
return ae
|
|
}), i.d(t, "QuarticEase", function() {
|
|
return ce
|
|
}), i.d(t, "QuinticEase", function() {
|
|
return le
|
|
}), i.d(t, "SineEase", function() {
|
|
return ue
|
|
}), i.d(t, "BezierCurveEase", function() {
|
|
return he
|
|
}), i.d(t, "RuntimeAnimation", function() {
|
|
return H
|
|
}), i.d(t, "AnimationEvent", function() {
|
|
return de
|
|
}), i.d(t, "AnimationKeyInterpolation", function() {
|
|
return I
|
|
}), i.d(t, "AnimationRange", function() {
|
|
return w
|
|
}), i.d(t, "KeepAssets", function() {
|
|
return pe
|
|
}), i.d(t, "AssetContainer", function() {
|
|
return _e
|
|
}), i.d(t, "Analyser", function() {
|
|
return me
|
|
}), i.d(t, "AudioEngine", function() {
|
|
return ve
|
|
}), i.d(t, "AudioSceneComponent", function() {
|
|
return xe
|
|
}), i.d(t, "Sound", function() {
|
|
return Te
|
|
}), i.d(t, "SoundTrack", function() {
|
|
return Ee
|
|
}), i.d(t, "WeightedSound", function() {
|
|
return Re
|
|
}), i.d(t, "AutoRotationBehavior", function() {
|
|
return Se
|
|
}), i.d(t, "BouncingBehavior", function() {
|
|
return Ce
|
|
}), i.d(t, "FramingBehavior", function() {
|
|
return Me
|
|
}), i.d(t, "AttachToBoxBehavior", function() {
|
|
return Ie
|
|
}), i.d(t, "FadeInOutBehavior", function() {
|
|
return De
|
|
}), i.d(t, "MultiPointerScaleBehavior", function() {
|
|
return we
|
|
}), i.d(t, "PointerDragBehavior", function() {
|
|
return Le.a
|
|
}), i.d(t, "SixDofDragBehavior", function() {
|
|
return Ue
|
|
}), i.d(t, "Bone", function() {
|
|
return K
|
|
}), i.d(t, "BoneIKController", function() {
|
|
return Ve
|
|
}), i.d(t, "BoneLookController", function() {
|
|
return Ge
|
|
}), i.d(t, "Skeleton", function() {
|
|
return He
|
|
}), i.d(t, "CameraInputTypes", function() {
|
|
return We
|
|
}), i.d(t, "CameraInputsManager", function() {
|
|
return Xe
|
|
}), i.d(t, "Camera", function() {
|
|
return Ne.a
|
|
}), i.d(t, "TargetCamera", function() {
|
|
return yt
|
|
}), i.d(t, "FreeCamera", function() {
|
|
return bt
|
|
}), i.d(t, "FreeCameraInputsManager", function() {
|
|
return dt
|
|
}), i.d(t, "TouchCamera", function() {
|
|
return Tt
|
|
}), i.d(t, "ArcRotateCamera", function() {
|
|
return Et
|
|
}), i.d(t, "ArcRotateCameraInputsManager", function() {
|
|
return it
|
|
}), i.d(t, "DeviceOrientationCamera", function() {
|
|
return At
|
|
}), i.d(t, "FlyCamera", function() {
|
|
return Rt
|
|
}), i.d(t, "FlyCameraInputsManager", function() {
|
|
return xt
|
|
}), i.d(t, "FollowCamera", function() {
|
|
return Ct
|
|
}), i.d(t, "ArcFollowCamera", function() {
|
|
return Mt
|
|
}), i.d(t, "GamepadCamera", function() {
|
|
return Gt
|
|
}), i.d(t, "UniversalCamera", function() {
|
|
return Vt
|
|
}), i.d(t, "VirtualJoysticksCamera", function() {
|
|
return ai
|
|
}), i.d(t, "ArcRotateCameraGamepadInput", function() {
|
|
return qe
|
|
}), i.d(t, "ArcRotateCameraKeyboardMoveInput", function() {
|
|
return Je
|
|
}), i.d(t, "ArcRotateCameraMouseWheelInput", function() {
|
|
return $e
|
|
}), i.d(t, "ArcRotateCameraPointersInput", function() {
|
|
return tt
|
|
}), i.d(t, "ArcRotateCameraVRDeviceOrientationInput", function() {
|
|
return nt
|
|
}), i.d(t, "FlyCameraKeyboardInput", function() {
|
|
return rt
|
|
}), i.d(t, "FlyCameraMouseInput", function() {
|
|
return ot
|
|
}), i.d(t, "FollowCameraKeyboardMoveInput", function() {
|
|
return st
|
|
}), i.d(t, "FollowCameraMouseWheelInput", function() {
|
|
return at
|
|
}), i.d(t, "FollowCameraPointersInput", function() {
|
|
return ct
|
|
}), i.d(t, "FreeCameraDeviceOrientationInput", function() {
|
|
return ft
|
|
}), i.d(t, "FreeCameraGamepadInput", function() {
|
|
return pt
|
|
}), i.d(t, "FreeCameraKeyboardMoveInput", function() {
|
|
return lt
|
|
}), i.d(t, "FreeCameraMouseInput", function() {
|
|
return ut
|
|
}), i.d(t, "FreeCameraTouchInput", function() {
|
|
return ht
|
|
}), i.d(t, "FreeCameraVirtualJoystickInput", function() {
|
|
return vt
|
|
}), i.d(t, "AnaglyphArcRotateCamera", function() {
|
|
return Zt
|
|
}), i.d(t, "AnaglyphFreeCamera", function() {
|
|
return Jt
|
|
}), i.d(t, "AnaglyphGamepadCamera", function() {
|
|
return $t
|
|
}), i.d(t, "AnaglyphUniversalCamera", function() {
|
|
return ei
|
|
}), i.d(t, "StereoscopicArcRotateCamera", function() {
|
|
return ni
|
|
}), i.d(t, "StereoscopicFreeCamera", function() {
|
|
return ri
|
|
}), i.d(t, "StereoscopicGamepadCamera", function() {
|
|
return oi
|
|
}), i.d(t, "StereoscopicUniversalCamera", function() {
|
|
return si
|
|
}), i.d(t, "VRCameraMetrics", function() {
|
|
return ci
|
|
}), i.d(t, "VRDeviceOrientationArcRotateCamera", function() {
|
|
return vi
|
|
}), i.d(t, "VRDeviceOrientationFreeCamera", function() {
|
|
return yi
|
|
}), i.d(t, "VRDeviceOrientationGamepadCamera", function() {
|
|
return bi
|
|
}), i.d(t, "OnAfterEnteringVRObservableEvent", function() {
|
|
return Vi
|
|
}), i.d(t, "VRExperienceHelper", function() {
|
|
return Gi
|
|
}), i.d(t, "WebVRFreeCamera", function() {
|
|
return Ei
|
|
}), i.d(t, "WebXRCamera", function() {
|
|
return ki
|
|
}), i.d(t, "WebXREnterExitUIButton", function() {
|
|
return Wi
|
|
}), i.d(t, "WebXREnterExitUIOptions", function() {
|
|
return Xi
|
|
}), i.d(t, "WebXREnterExitUI", function() {
|
|
return Yi
|
|
}), i.d(t, "WebXRState", function() {
|
|
return Li
|
|
}), i.d(t, "WebXRExperienceHelper", function() {
|
|
return Hi
|
|
}), i.d(t, "WebXRController", function() {
|
|
return Ki
|
|
}), i.d(t, "WebXRInput", function() {
|
|
return Qi
|
|
}), i.d(t, "WebXRManagedOutputCanvas", function() {
|
|
return qi
|
|
}), i.d(t, "WebXRSessionManager", function() {
|
|
return zi
|
|
}), i.d(t, "Collider", function() {
|
|
return Ji
|
|
}), i.d(t, "DefaultCollisionCoordinator", function() {
|
|
return $i
|
|
}), i.d(t, "PickingInfo", function() {
|
|
return en.a
|
|
}), i.d(t, "IntersectionInfo", function() {
|
|
return tn.a
|
|
}), i.d(t, "_MeshCollisionData", function() {
|
|
return nn.a
|
|
}), i.d(t, "BoundingBox", function() {
|
|
return rn.a
|
|
}), i.d(t, "BoundingInfo", function() {
|
|
return on.a
|
|
}), i.d(t, "BoundingSphere", function() {
|
|
return sn.a
|
|
}), i.d(t, "Ray", function() {
|
|
return It.a
|
|
}), i.d(t, "Octree", function() {
|
|
return cn
|
|
}), i.d(t, "OctreeBlock", function() {
|
|
return an
|
|
}), i.d(t, "OctreeSceneComponent", function() {
|
|
return ln
|
|
}), i.d(t, "AxesViewer", function() {
|
|
return un.AxesViewer
|
|
}), i.d(t, "BoneAxesViewer", function() {
|
|
return un.BoneAxesViewer
|
|
}), i.d(t, "DebugLayer", function() {
|
|
return un.DebugLayer
|
|
}), i.d(t, "PhysicsViewer", function() {
|
|
return un.PhysicsViewer
|
|
}), i.d(t, "RayHelper", function() {
|
|
return un.RayHelper
|
|
}), i.d(t, "SkeletonViewer", function() {
|
|
return un.SkeletonViewer
|
|
}), i.d(t, "Constants", function() {
|
|
return _.a
|
|
}), i.d(t, "InstancingAttributeInfo", function() {
|
|
return ge.d
|
|
}), i.d(t, "DepthTextureCreationOptions", function() {
|
|
return ge.a
|
|
}), i.d(t, "EngineCapabilities", function() {
|
|
return ge.c
|
|
}), i.d(t, "Engine", function() {
|
|
return ge.b
|
|
}), i.d(t, "EngineStore", function() {
|
|
return P.a
|
|
}), i.d(t, "NullEngineOptions", function() {
|
|
return hn.b
|
|
}), i.d(t, "NullEngine", function() {
|
|
return hn.a
|
|
}), i.d(t, "WebGLPipelineContext", function() {
|
|
return pn.a
|
|
}), i.d(t, "_OcclusionDataStorage", function() {
|
|
return fn
|
|
}), i.d(t, "_forceTransformFeedbackToBundle", function() {
|
|
return !0
|
|
}), i.d(t, "KeyboardEventTypes", function() {
|
|
return Ze.a
|
|
}), i.d(t, "KeyboardInfo", function() {
|
|
return Ze.b
|
|
}), i.d(t, "KeyboardInfoPre", function() {
|
|
return Ze.c
|
|
}), i.d(t, "PointerEventTypes", function() {
|
|
return Pe.a
|
|
}), i.d(t, "PointerInfoBase", function() {
|
|
return Pe.c
|
|
}), i.d(t, "PointerInfoPre", function() {
|
|
return Pe.d
|
|
}), i.d(t, "PointerInfo", function() {
|
|
return Pe.b
|
|
}), i.d(t, "ClipboardEventTypes", function() {
|
|
return _n
|
|
}), i.d(t, "ClipboardInfo", function() {
|
|
return gn
|
|
}), i.d(t, "DaydreamController", function() {
|
|
return Tn
|
|
}), i.d(t, "GearVRController", function() {
|
|
return En
|
|
}), i.d(t, "GenericController", function() {
|
|
return An
|
|
}), i.d(t, "OculusTouchController", function() {
|
|
return xn
|
|
}), i.d(t, "PoseEnabledControllerType", function() {
|
|
return St
|
|
}), i.d(t, "PoseEnabledControllerHelper", function() {
|
|
return wt
|
|
}), i.d(t, "PoseEnabledController", function() {
|
|
return Ft
|
|
}), i.d(t, "ViveController", function() {
|
|
return Rn
|
|
}), i.d(t, "WebVRController", function() {
|
|
return Ai
|
|
}), i.d(t, "WindowsMotionController", function() {
|
|
return Sn
|
|
}), i.d(t, "StickValues", function() {
|
|
return Ye
|
|
}), i.d(t, "Gamepad", function() {
|
|
return Ke
|
|
}), i.d(t, "GenericPad", function() {
|
|
return Qe
|
|
}), i.d(t, "GamepadManager", function() {
|
|
return Bt
|
|
}), i.d(t, "GamepadSystemSceneComponent", function() {
|
|
return Ut
|
|
}), i.d(t, "Xbox360Button", function() {
|
|
return Dt
|
|
}), i.d(t, "Xbox360Dpad", function() {
|
|
return Lt
|
|
}), i.d(t, "Xbox360Pad", function() {
|
|
return Nt
|
|
}), i.d(t, "AxisDragGizmo", function() {
|
|
return Cn.a
|
|
}), i.d(t, "AxisScaleGizmo", function() {
|
|
return Dn
|
|
}), i.d(t, "BoundingBoxGizmo", function() {
|
|
return Fn
|
|
}), i.d(t, "Gizmo", function() {
|
|
return On.a
|
|
}), i.d(t, "GizmoManager", function() {
|
|
return kn
|
|
}), i.d(t, "PlaneRotationGizmo", function() {
|
|
return Nn
|
|
}), i.d(t, "PositionGizmo", function() {
|
|
return Un
|
|
}), i.d(t, "RotationGizmo", function() {
|
|
return Bn
|
|
}), i.d(t, "ScaleGizmo", function() {
|
|
return Gn
|
|
}), i.d(t, "LightGizmo", function() {
|
|
return Yn
|
|
}), i.d(t, "EnvironmentHelper", function() {
|
|
return pr
|
|
}), i.d(t, "PhotoDome", function() {
|
|
return gr
|
|
}), i.d(t, "_forceSceneHelpersToBundle", function() {
|
|
return !0
|
|
}), i.d(t, "VideoDome", function() {
|
|
return no
|
|
}), i.d(t, "EngineInstrumentation", function() {
|
|
return ro
|
|
}), i.d(t, "SceneInstrumentation", function() {
|
|
return oo
|
|
}), i.d(t, "_TimeToken", function() {
|
|
return dn
|
|
}), i.d(t, "EffectLayer", function() {
|
|
return lo
|
|
}), i.d(t, "EffectLayerSceneComponent", function() {
|
|
return uo
|
|
}), i.d(t, "GlowLayer", function() {
|
|
return po
|
|
}), i.d(t, "HighlightLayer", function() {
|
|
return mo
|
|
}), i.d(t, "Layer", function() {
|
|
return To
|
|
}), i.d(t, "LayerSceneComponent", function() {
|
|
return vo
|
|
}), i.d(t, "LensFlare", function() {
|
|
return Eo
|
|
}), i.d(t, "LensFlareSystem", function() {
|
|
return Ro
|
|
}), i.d(t, "LensFlareSystemSceneComponent", function() {
|
|
return Po
|
|
}), i.d(t, "Light", function() {
|
|
return zn.a
|
|
}), i.d(t, "ShadowLight", function() {
|
|
return jn
|
|
}), i.d(t, "DirectionalLight", function() {
|
|
return Hn
|
|
}), i.d(t, "HemisphericLight", function() {
|
|
return Ti.a
|
|
}), i.d(t, "PointLight", function() {
|
|
return Do
|
|
}), i.d(t, "SpotLight", function() {
|
|
return Xn
|
|
}), i.d(t, "ShadowGenerator", function() {
|
|
return Oo
|
|
}), i.d(t, "ShadowGeneratorSceneComponent", function() {
|
|
return Io
|
|
}), i.d(t, "DefaultLoadingScreen", function() {
|
|
return Lo
|
|
}), i.d(t, "SceneLoaderProgressEvent", function() {
|
|
return yn
|
|
}), i.d(t, "SceneLoader", function() {
|
|
return bn
|
|
}), i.d(t, "SceneLoaderFlags", function() {
|
|
return vn.a
|
|
}), i.d(t, "_BabylonLoaderRegistered", function() {
|
|
return !0
|
|
}), i.d(t, "ColorCurves", function() {
|
|
return is.a
|
|
}), i.d(t, "EffectFallbacks", function() {
|
|
return zt.c
|
|
}), i.d(t, "EffectCreationOptions", function() {
|
|
return zt.b
|
|
}), i.d(t, "Effect", function() {
|
|
return zt.a
|
|
}), i.d(t, "FresnelParameters", function() {
|
|
return ns
|
|
}), i.d(t, "ImageProcessingConfigurationDefines", function() {
|
|
return xi.b
|
|
}), i.d(t, "ImageProcessingConfiguration", function() {
|
|
return xi.a
|
|
}), i.d(t, "Material", function() {
|
|
return so.a
|
|
}), i.d(t, "MaterialDefines", function() {
|
|
return nr.a
|
|
}), i.d(t, "MaterialHelper", function() {
|
|
return ir.a
|
|
}), i.d(t, "MultiMaterial", function() {
|
|
return Fo.a
|
|
}), i.d(t, "PushMaterial", function() {
|
|
return rr.a
|
|
}), i.d(t, "ShaderMaterial", function() {
|
|
return as.a
|
|
}), i.d(t, "StandardMaterialDefines", function() {
|
|
return Ri.b
|
|
}), i.d(t, "StandardMaterial", function() {
|
|
return Ri.a
|
|
}), i.d(t, "BaseTexture", function() {
|
|
return Kn.a
|
|
}), i.d(t, "CubeTexture", function() {
|
|
return tr
|
|
}), i.d(t, "EquiRectangularCubeTexture", function() {
|
|
return ls
|
|
}), i.d(t, "HDRCubeTexture", function() {
|
|
return Uo
|
|
}), i.d(t, "InternalTexture", function() {
|
|
return ze.a
|
|
}), i.d(t, "MirrorTexture", function() {
|
|
return er
|
|
}), i.d(t, "MultiRenderTarget", function() {
|
|
return ds
|
|
}), i.d(t, "RenderTargetTexture", function() {
|
|
return _i
|
|
}), i.d(t, "Texture", function() {
|
|
return ke.a
|
|
}), i.d(t, "UniformBuffer", function() {
|
|
return di.a
|
|
}), i.d(t, "MaterialFlags", function() {
|
|
return or.a
|
|
}), i.d(t, "BackgroundMaterial", function() {
|
|
return dr
|
|
}), i.d(t, "PBRMaterialDefines", function() {
|
|
return Vr
|
|
}), i.d(t, "PBRBaseMaterial", function() {
|
|
return Gr
|
|
}), i.d(t, "PBRBaseSimpleMaterial", function() {
|
|
return rs
|
|
}), i.d(t, "PBRMaterial", function() {
|
|
return kr
|
|
}), i.d(t, "PBRMetallicRoughnessMaterial", function() {
|
|
return os
|
|
}), i.d(t, "PBRSpecularGlossinessMaterial", function() {
|
|
return ss
|
|
}), i.d(t, "ColorGradingTexture", function() {
|
|
return cs
|
|
}), i.d(t, "DynamicTexture", function() {
|
|
return Pi
|
|
}), i.d(t, "ProceduralTexture", function() {
|
|
return _s
|
|
}), i.d(t, "RawCubeTexture", function() {
|
|
return bs
|
|
}), i.d(t, "RawTexture", function() {
|
|
return je
|
|
}), i.d(t, "RawTexture3D", function() {
|
|
return Ts
|
|
}), i.d(t, "RefractionTexture", function() {
|
|
return Es
|
|
}), i.d(t, "VideoTexture", function() {
|
|
return io
|
|
}), i.d(t, "HtmlElementTexture", function() {
|
|
return As
|
|
}), i.d(t, "_DDSTextureLoader", function() {
|
|
return qr
|
|
}), i.d(t, "_ENVTextureLoader", function() {
|
|
return $r
|
|
}), i.d(t, "_KTXTextureLoader", function() {
|
|
return to
|
|
}), i.d(t, "_TGATextureLoader", function() {
|
|
return hs
|
|
}), i.d(t, "CustomProceduralTexture", function() {
|
|
return ms
|
|
}), i.d(t, "NoiseProceduralTexture", function() {
|
|
return ys
|
|
}), i.d(t, "ProceduralTextureSceneComponent", function() {
|
|
return fs
|
|
}), i.d(t, "Scalar", function() {
|
|
return D.a
|
|
}), i.d(t, "ToGammaSpace", function() {
|
|
return o.u
|
|
}), i.d(t, "ToLinearSpace", function() {
|
|
return o.v
|
|
}), i.d(t, "Epsilon", function() {
|
|
return o.h
|
|
}), i.d(t, "Color3", function() {
|
|
return o.e
|
|
}), i.d(t, "Color4", function() {
|
|
return o.f
|
|
}), i.d(t, "Vector2", function() {
|
|
return o.w
|
|
}), i.d(t, "Vector3", function() {
|
|
return o.x
|
|
}), i.d(t, "Vector4", function() {
|
|
return o.y
|
|
}), i.d(t, "Size", function() {
|
|
return o.r
|
|
}), i.d(t, "Quaternion", function() {
|
|
return o.q
|
|
}), i.d(t, "Matrix", function() {
|
|
return o.j
|
|
}), i.d(t, "Plane", function() {
|
|
return o.n
|
|
}), i.d(t, "Viewport", function() {
|
|
return o.z
|
|
}), i.d(t, "Frustum", function() {
|
|
return o.i
|
|
}), i.d(t, "Space", function() {
|
|
return o.s
|
|
}), i.d(t, "Axis", function() {
|
|
return o.c
|
|
}), i.d(t, "BezierCurve", function() {
|
|
return o.d
|
|
}), i.d(t, "Orientation", function() {
|
|
return o.k
|
|
}), i.d(t, "Angle", function() {
|
|
return o.a
|
|
}), i.d(t, "Arc2", function() {
|
|
return o.b
|
|
}), i.d(t, "Path2", function() {
|
|
return o.l
|
|
}), i.d(t, "Path3D", function() {
|
|
return o.m
|
|
}), i.d(t, "Curve3", function() {
|
|
return o.g
|
|
}), i.d(t, "PositionNormalVertex", function() {
|
|
return o.p
|
|
}), i.d(t, "PositionNormalTextureVertex", function() {
|
|
return o.o
|
|
}), i.d(t, "Tmp", function() {
|
|
return o.t
|
|
}), i.d(t, "SphericalHarmonics", function() {
|
|
return zr.a
|
|
}), i.d(t, "SphericalPolynomial", function() {
|
|
return zr.b
|
|
}), i.d(t, "AbstractMesh", function() {
|
|
return Fe.a
|
|
}), i.d(t, "Buffer", function() {
|
|
return Oi.a
|
|
}), i.d(t, "VertexBuffer", function() {
|
|
return Oi.b
|
|
}), i.d(t, "CSG", function() {
|
|
return Ns
|
|
}), i.d(t, "Geometry", function() {
|
|
return wo.a
|
|
}), i.d(t, "GroundMesh", function() {
|
|
return Ii
|
|
}), i.d(t, "TrailMesh", function() {
|
|
return Bs
|
|
}), i.d(t, "InstancedMesh", function() {
|
|
return Us.a
|
|
}), i.d(t, "LinesMesh", function() {
|
|
return Vs.b
|
|
}), i.d(t, "InstancedLinesMesh", function() {
|
|
return Vs.a
|
|
}), i.d(t, "_CreationDataStorage", function() {
|
|
return fe.b
|
|
}), i.d(t, "_InstancesBatch", function() {
|
|
return fe.c
|
|
}), i.d(t, "Mesh", function() {
|
|
return fe.a
|
|
}), i.d(t, "VertexData", function() {
|
|
return Mi.a
|
|
}), i.d(t, "MeshBuilder", function() {
|
|
return Js
|
|
}), i.d(t, "SimplificationSettings", function() {
|
|
return $s
|
|
}), i.d(t, "SimplificationQueue", function() {
|
|
return ea
|
|
}), i.d(t, "SimplificationType", function() {
|
|
return qs
|
|
}), i.d(t, "SimplicationQueueSceneComponent", function() {
|
|
return sa
|
|
}), i.d(t, "Polygon", function() {
|
|
return Hs
|
|
}), i.d(t, "PolygonMeshBuilder", function() {
|
|
return Ws
|
|
}), i.d(t, "BaseSubMesh", function() {
|
|
return Os.a
|
|
}), i.d(t, "SubMesh", function() {
|
|
return Os.b
|
|
}), i.d(t, "MeshLODLevel", function() {
|
|
return aa.a
|
|
}), i.d(t, "TransformNode", function() {
|
|
return _r.a
|
|
}), i.d(t, "BoxBuilder", function() {
|
|
return Mn.a
|
|
}), i.d(t, "SphereBuilder", function() {
|
|
return Ln.a
|
|
}), i.d(t, "CylinderBuilder", function() {
|
|
return Fi.a
|
|
}), i.d(t, "LinesBuilder", function() {
|
|
return wn.a
|
|
}), i.d(t, "PlaneBuilder", function() {
|
|
return fr.a
|
|
}), i.d(t, "DataBuffer", function() {
|
|
return ca.a
|
|
}), i.d(t, "WebGLDataBuffer", function() {
|
|
return la.a
|
|
}), i.d(t, "DracoCompression", function() {
|
|
return Ms
|
|
}), i.d(t, "DiscBuilder", function() {
|
|
return Gs
|
|
}), i.d(t, "RibbonBuilder", function() {
|
|
return Yo
|
|
}), i.d(t, "HemisphereBuilder", function() {
|
|
return Wn
|
|
}), i.d(t, "TorusBuilder", function() {
|
|
return wi
|
|
}), i.d(t, "TorusKnotBuilder", function() {
|
|
return ks
|
|
}), i.d(t, "PolygonBuilder", function() {
|
|
return Xs
|
|
}), i.d(t, "ShapeBuilder", function() {
|
|
return Ko
|
|
}), i.d(t, "LatheBuilder", function() {
|
|
return Ys
|
|
}), i.d(t, "GroundBuilder", function() {
|
|
return Di
|
|
}), i.d(t, "TubeBuilder", function() {
|
|
return Ks
|
|
}), i.d(t, "PolyhedronBuilder", function() {
|
|
return Vn
|
|
}), i.d(t, "IcoSphereBuilder", function() {
|
|
return Qs
|
|
}), i.d(t, "DecalBuilder", function() {
|
|
return Zs
|
|
}), i.d(t, "MorphTarget", function() {
|
|
return Vo
|
|
}), i.d(t, "MorphTargetManager", function() {
|
|
return Go
|
|
}), i.d(t, "Node", function() {
|
|
return F.a
|
|
}), i.d(t, "Database", function() {
|
|
return ha
|
|
}), i.d(t, "BaseParticleSystem", function() {
|
|
return ba
|
|
}), i.d(t, "GPUParticleSystem", function() {
|
|
return Ia
|
|
}), i.d(t, "Particle", function() {
|
|
return Ta
|
|
}), i.d(t, "ParticleHelper", function() {
|
|
return La
|
|
}), i.d(t, "ParticleSystem", function() {
|
|
return Ra
|
|
}), i.d(t, "_IDoNeedToBeInTheBuild", function() {
|
|
return 42
|
|
}), i.d(t, "ParticleSystemSet", function() {
|
|
return Da
|
|
}), i.d(t, "SolidParticle", function() {
|
|
return wa
|
|
}), i.d(t, "ModelShape", function() {
|
|
return Fa
|
|
}), i.d(t, "DepthSortedParticle", function() {
|
|
return Na
|
|
}), i.d(t, "SolidParticleSystem", function() {
|
|
return Ua
|
|
}), i.d(t, "SubEmitterType", function() {
|
|
return ua
|
|
}), i.d(t, "SubEmitter", function() {
|
|
return Ea
|
|
}), i.d(t, "BoxParticleEmitter", function() {
|
|
return da
|
|
}), i.d(t, "ConeParticleEmitter", function() {
|
|
return fa
|
|
}), i.d(t, "CylinderParticleEmitter", function() {
|
|
return pa
|
|
}), i.d(t, "CylinderDirectedParticleEmitter", function() {
|
|
return _a
|
|
}), i.d(t, "HemisphericParticleEmitter", function() {
|
|
return ga
|
|
}), i.d(t, "PointParticleEmitter", function() {
|
|
return ma
|
|
}), i.d(t, "SphereParticleEmitter", function() {
|
|
return va
|
|
}), i.d(t, "SphereDirectedParticleEmitter", function() {
|
|
return ya
|
|
}), i.d(t, "PhysicsEngine", function() {
|
|
return jo
|
|
}), i.d(t, "PhysicsEngineSceneComponent", function() {
|
|
return ka
|
|
}), i.d(t, "PhysicsHelper", function() {
|
|
return za
|
|
}), i.d(t, "PhysicsRadialExplosionEventOptions", function() {
|
|
return Ya
|
|
}), i.d(t, "PhysicsUpdraftEventOptions", function() {
|
|
return Ka
|
|
}), i.d(t, "PhysicsVortexEventOptions", function() {
|
|
return Qa
|
|
}), i.d(t, "PhysicsRadialImpulseFalloff", function() {
|
|
return Va
|
|
}), i.d(t, "PhysicsUpdraftMode", function() {
|
|
return Ga
|
|
}), i.d(t, "PhysicsImpostor", function() {
|
|
return ko.a
|
|
}), i.d(t, "PhysicsJoint", function() {
|
|
return zo.e
|
|
}), i.d(t, "DistanceJoint", function() {
|
|
return zo.a
|
|
}), i.d(t, "MotorEnabledJoint", function() {
|
|
return zo.d
|
|
}), i.d(t, "HingeJoint", function() {
|
|
return zo.c
|
|
}), i.d(t, "Hinge2Joint", function() {
|
|
return zo.b
|
|
}), i.d(t, "CannonJSPlugin", function() {
|
|
return Wo
|
|
}), i.d(t, "AmmoJSPlugin", function() {
|
|
return Qo
|
|
}), i.d(t, "OimoJSPlugin", function() {
|
|
return Xo
|
|
}), i.d(t, "AnaglyphPostProcess", function() {
|
|
return qt
|
|
}), i.d(t, "BlackAndWhitePostProcess", function() {
|
|
return Za
|
|
}), i.d(t, "BloomEffect", function() {
|
|
return nc
|
|
}), i.d(t, "BloomMergePostProcess", function() {
|
|
return ic
|
|
}), i.d(t, "BlurPostProcess", function() {
|
|
return $n
|
|
}), i.d(t, "ChromaticAberrationPostProcess", function() {
|
|
return oc
|
|
}), i.d(t, "CircleOfConfusionPostProcess", function() {
|
|
return ac
|
|
}), i.d(t, "ColorCorrectionPostProcess", function() {
|
|
return lc
|
|
}), i.d(t, "ConvolutionPostProcess", function() {
|
|
return hc
|
|
}), i.d(t, "DepthOfFieldBlurPostProcess", function() {
|
|
return dc
|
|
}), i.d(t, "DepthOfFieldEffectBlurLevel", function() {
|
|
return pc
|
|
}), i.d(t, "DepthOfFieldEffect", function() {
|
|
return mc
|
|
}), i.d(t, "DepthOfFieldMergePostProcessOptions", function() {
|
|
return _c
|
|
}), i.d(t, "DepthOfFieldMergePostProcess", function() {
|
|
return gc
|
|
}), i.d(t, "DisplayPassPostProcess", function() {
|
|
return yc
|
|
}), i.d(t, "ExtractHighlightsPostProcess", function() {
|
|
return ec
|
|
}), i.d(t, "FilterPostProcess", function() {
|
|
return Tc
|
|
}), i.d(t, "FxaaPostProcess", function() {
|
|
return xc
|
|
}), i.d(t, "GrainPostProcess", function() {
|
|
return Pc
|
|
}), i.d(t, "HighlightsPostProcess", function() {
|
|
return Cc
|
|
}), i.d(t, "ImageProcessingPostProcess", function() {
|
|
return Ci
|
|
}), i.d(t, "MotionBlurPostProcess", function() {
|
|
return wc
|
|
}), i.d(t, "PassPostProcess", function() {
|
|
return Yt
|
|
}), i.d(t, "PassCubePostProcess", function() {
|
|
return Kt
|
|
}), i.d(t, "PostProcess", function() {
|
|
return Ht
|
|
}), i.d(t, "PostProcessManager", function() {
|
|
return fi.a
|
|
}), i.d(t, "RefractionPostProcess", function() {
|
|
return Nc
|
|
}), i.d(t, "SharpenPostProcess", function() {
|
|
return Uc
|
|
}), i.d(t, "StereoscopicInterlacePostProcess", function() {
|
|
return ii
|
|
}), i.d(t, "TonemappingOperator", function() {
|
|
return el
|
|
}), i.d(t, "TonemapPostProcess", function() {
|
|
return tl
|
|
}), i.d(t, "VolumetricLightScatteringPostProcess", function() {
|
|
return ol
|
|
}), i.d(t, "VRDistortionCorrectionPostProcess", function() {
|
|
return ui
|
|
}), i.d(t, "VRMultiviewToSingleviewPostProcess", function() {
|
|
return mi
|
|
}), i.d(t, "PostProcessRenderEffect", function() {
|
|
return Ja
|
|
}), i.d(t, "PostProcessRenderPipeline", function() {
|
|
return Vc
|
|
}), i.d(t, "PostProcessRenderPipelineManager", function() {
|
|
return Gc
|
|
}), i.d(t, "PostProcessRenderPipelineManagerSceneComponent", function() {
|
|
return kc
|
|
}), i.d(t, "DefaultRenderingPipeline", function() {
|
|
return zc
|
|
}), i.d(t, "LensRenderingPipeline", function() {
|
|
return Wc
|
|
}), i.d(t, "SSAO2RenderingPipeline", function() {
|
|
return Kc
|
|
}), i.d(t, "SSAORenderingPipeline", function() {
|
|
return qc
|
|
}), i.d(t, "StandardRenderingPipeline", function() {
|
|
return Jc
|
|
}), i.d(t, "ReflectionProbe", function() {
|
|
return qo
|
|
}), i.d(t, "BoundingBoxRenderer", function() {
|
|
return sl
|
|
}), i.d(t, "DepthRenderer", function() {
|
|
return cl
|
|
}), i.d(t, "DepthRendererSceneComponent", function() {
|
|
return ll
|
|
}), i.d(t, "EdgesRenderer", function() {
|
|
return fl
|
|
}), i.d(t, "LineEdgesRenderer", function() {
|
|
return pl
|
|
}), i.d(t, "GeometryBufferRenderer", function() {
|
|
return Ic
|
|
}), i.d(t, "GeometryBufferRendererSceneComponent", function() {
|
|
return Dc
|
|
}), i.d(t, "OutlineRenderer", function() {
|
|
return ml
|
|
}), i.d(t, "RenderingGroup", function() {
|
|
return vl.a
|
|
}), i.d(t, "RenderingGroupInfo", function() {
|
|
return pi.a
|
|
}), i.d(t, "RenderingManager", function() {
|
|
return pi.b
|
|
}), i.d(t, "UtilityLayerRenderer", function() {
|
|
return In.a
|
|
}), i.d(t, "Scene", function() {
|
|
return W.a
|
|
}), i.d(t, "SceneComponentConstants", function() {
|
|
return Ae.a
|
|
}), i.d(t, "Stage", function() {
|
|
return Ae.b
|
|
}), i.d(t, "Sprite", function() {
|
|
return yl
|
|
}), i.d(t, "SpriteManager", function() {
|
|
return xl
|
|
}), i.d(t, "SpriteSceneComponent", function() {
|
|
return bl
|
|
}), i.d(t, "_AlphaState", function() {
|
|
return Rl.a
|
|
}), i.d(t, "_DepthCullingState", function() {
|
|
return Rl.b
|
|
}), i.d(t, "_StencilState", function() {
|
|
return Rl.c
|
|
}), i.d(t, "AndOrNotEvaluator", function() {
|
|
return Pl.a
|
|
}), i.d(t, "AssetTaskState", function() {
|
|
return Al
|
|
}), i.d(t, "AbstractAssetTask", function() {
|
|
return Cl
|
|
}), i.d(t, "AssetsProgressEvent", function() {
|
|
return Ml
|
|
}), i.d(t, "MeshAssetTask", function() {
|
|
return Ol
|
|
}), i.d(t, "TextFileAssetTask", function() {
|
|
return Il
|
|
}), i.d(t, "BinaryFileAssetTask", function() {
|
|
return Dl
|
|
}), i.d(t, "ImageAssetTask", function() {
|
|
return Ll
|
|
}), i.d(t, "TextureAssetTask", function() {
|
|
return wl
|
|
}), i.d(t, "CubeTextureAssetTask", function() {
|
|
return Fl
|
|
}), i.d(t, "HDRCubeTextureAssetTask", function() {
|
|
return Nl
|
|
}), i.d(t, "EquiRectangularCubeTextureAssetTask", function() {
|
|
return Bl
|
|
}), i.d(t, "AssetsManager", function() {
|
|
return Ul
|
|
}), i.d(t, "DDSTools", function() {
|
|
return Qr
|
|
}), i.d(t, "expandToProperty", function() {
|
|
return L.b
|
|
}), i.d(t, "serialize", function() {
|
|
return L.c
|
|
}), i.d(t, "serializeAsTexture", function() {
|
|
return L.m
|
|
}), i.d(t, "serializeAsColor3", function() {
|
|
return L.e
|
|
}), i.d(t, "serializeAsFresnelParameters", function() {
|
|
return L.h
|
|
}), i.d(t, "serializeAsVector2", function() {
|
|
return L.n
|
|
}), i.d(t, "serializeAsVector3", function() {
|
|
return L.o
|
|
}), i.d(t, "serializeAsMeshReference", function() {
|
|
return L.k
|
|
}), i.d(t, "serializeAsColorCurves", function() {
|
|
return L.g
|
|
}), i.d(t, "serializeAsColor4", function() {
|
|
return L.f
|
|
}), i.d(t, "serializeAsImageProcessingConfiguration", function() {
|
|
return L.i
|
|
}), i.d(t, "serializeAsQuaternion", function() {
|
|
return L.l
|
|
}), i.d(t, "serializeAsMatrix", function() {
|
|
return L.j
|
|
}), i.d(t, "serializeAsCameraReference", function() {
|
|
return L.d
|
|
}), i.d(t, "SerializationHelper", function() {
|
|
return L.a
|
|
}), i.d(t, "Deferred", function() {
|
|
return Vl
|
|
}), i.d(t, "EnvironmentTextureTools", function() {
|
|
return Jr
|
|
}), i.d(t, "MeshExploder", function() {
|
|
return Gl
|
|
}), i.d(t, "FilesInput", function() {
|
|
return kl
|
|
}), i.d(t, "KhronosTextureContainer", function() {
|
|
return eo
|
|
}), i.d(t, "EventState", function() {
|
|
return r.a
|
|
}), i.d(t, "Observer", function() {
|
|
return r.d
|
|
}), i.d(t, "MultiObserver", function() {
|
|
return r.b
|
|
}), i.d(t, "Observable", function() {
|
|
return r.c
|
|
}), i.d(t, "PerformanceMonitor", function() {
|
|
return zl.a
|
|
}), i.d(t, "RollingAverage", function() {
|
|
return zl.b
|
|
}), i.d(t, "PromisePolyfill", function() {
|
|
return jl.a
|
|
}), i.d(t, "SceneOptimization", function() {
|
|
return Hl
|
|
}), i.d(t, "TextureOptimization", function() {
|
|
return Wl
|
|
}), i.d(t, "HardwareScalingOptimization", function() {
|
|
return Xl
|
|
}), i.d(t, "ShadowsOptimization", function() {
|
|
return Yl
|
|
}), i.d(t, "PostProcessesOptimization", function() {
|
|
return Kl
|
|
}), i.d(t, "LensFlaresOptimization", function() {
|
|
return Ql
|
|
}), i.d(t, "CustomOptimization", function() {
|
|
return ql
|
|
}), i.d(t, "ParticlesOptimization", function() {
|
|
return Zl
|
|
}), i.d(t, "RenderTargetsOptimization", function() {
|
|
return Jl
|
|
}), i.d(t, "MergeMeshesOptimization", function() {
|
|
return $l
|
|
}), i.d(t, "SceneOptimizerOptions", function() {
|
|
return eu
|
|
}), i.d(t, "SceneOptimizer", function() {
|
|
return tu
|
|
}), i.d(t, "SceneSerializer", function() {
|
|
return ou
|
|
}), i.d(t, "SmartArray", function() {
|
|
return kt.a
|
|
}), i.d(t, "SmartArrayNoDuplicate", function() {
|
|
return kt.b
|
|
}), i.d(t, "StringDictionary", function() {
|
|
return gt.a
|
|
}), i.d(t, "Tags", function() {
|
|
return su.a
|
|
}), i.d(t, "TextureTools", function() {
|
|
return au
|
|
}), i.d(t, "TGATools", function() {
|
|
return us
|
|
}), i.d(t, "ColorGradient", function() {
|
|
return ye.c
|
|
}), i.d(t, "Color3Gradient", function() {
|
|
return ye.b
|
|
}), i.d(t, "FactorGradient", function() {
|
|
return ye.d
|
|
}), i.d(t, "LoadFileError", function() {
|
|
return ye.e
|
|
}), i.d(t, "RetryStrategy", function() {
|
|
return ye.g
|
|
}), i.d(t, "Tools", function() {
|
|
return ye.h
|
|
}), i.d(t, "PerfCounter", function() {
|
|
return ye.f
|
|
}), i.d(t, "className", function() {
|
|
return ye.i
|
|
}), i.d(t, "AsyncLoop", function() {
|
|
return ye.a
|
|
}), i.d(t, "VideoRecorder", function() {
|
|
return cu
|
|
}), i.d(t, "JoystickAxis", function() {
|
|
return _t
|
|
}), i.d(t, "VirtualJoystick", function() {
|
|
return mt
|
|
}), i.d(t, "WorkerPool", function() {
|
|
return xs
|
|
}), i.d(t, "Logger", function() {
|
|
return p.a
|
|
}), i.d(t, "_TypeStore", function() {
|
|
return s.a
|
|
}), i.d(t, "FilesInputStore", function() {
|
|
return mn.a
|
|
}), i.d(t, "DeepCopier", function() {
|
|
return S.a
|
|
}), i.d(t, "PivotTools", function() {
|
|
return Be.a
|
|
}), i.d(t, "PrecisionDate", function() {
|
|
return X.a
|
|
}), i.d(t, "ScreenshotTools", function() {
|
|
return lu
|
|
}), i.d(t, "WebRequest", function() {
|
|
return gs.a
|
|
}), i.d(t, "InspectableType", function() {
|
|
return Sl
|
|
}), i.d(t, "CubeMapToSphericalPolynomialTools", function() {
|
|
return jr.a
|
|
}), i.d(t, "HDRTools", function() {
|
|
return Bo
|
|
}), i.d(t, "PanoramaToCubeMapTools", function() {
|
|
return No
|
|
})
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "fogFragmentDeclaration",
|
|
r = "#ifdef FOG\n#define FOGMODE_NONE 0.\n#define FOGMODE_EXP 1.\n#define FOGMODE_EXP2 2.\n#define FOGMODE_LINEAR 3.\n#define E 2.71828\nuniform vec4 vFogInfos;\nuniform vec3 vFogColor;\nvarying vec3 vFogDistance;\nfloat CalcFogFactor()\n{\nfloat fogCoeff=1.0;\nfloat fogStart=vFogInfos.y;\nfloat fogEnd=vFogInfos.z;\nfloat fogDensity=vFogInfos.w;\nfloat fogDistance=length(vFogDistance);\nif (FOGMODE_LINEAR == vFogInfos.x)\n{\nfogCoeff=(fogEnd-fogDistance)/(fogEnd-fogStart);\n}\nelse if (FOGMODE_EXP == vFogInfos.x)\n{\nfogCoeff=1.0/pow(E,fogDistance*fogDensity);\n}\nelse if (FOGMODE_EXP2 == vFogInfos.x)\n{\nfogCoeff=1.0/pow(E,fogDistance*fogDistance*fogDensity*fogDensity);\n}\nreturn clamp(fogCoeff,0.0,1.0);\n}\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "#ifdef FOG\nfloat fog=CalcFogFactor();\ncolor.rgb=fog*color.rgb+(1.0-fog)*vFogColor;\n#endif";
|
|
i(5).a.IncludesShadersStore.fogFragment = n
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "fogVertexDeclaration",
|
|
r = "#ifdef FOG\nvarying vec3 vFogDistance;\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "morphTargetsVertexGlobalDeclaration",
|
|
r = "#ifdef MORPHTARGETS\nuniform float morphTargetInfluences[NUM_MORPH_INFLUENCERS];\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "morphTargetsVertexDeclaration",
|
|
r = "#ifdef MORPHTARGETS\nattribute vec3 position{X};\n#ifdef MORPHTARGETS_NORMAL\nattribute vec3 normal{X};\n#endif\n#ifdef MORPHTARGETS_TANGENT\nattribute vec3 tangent{X};\n#endif\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "morphTargetsVertex",
|
|
r = "#ifdef MORPHTARGETS\npositionUpdated+=(position{X}-position)*morphTargetInfluences[{X}];\n#ifdef MORPHTARGETS_NORMAL\nnormalUpdated+=(normal{X}-normal)*morphTargetInfluences[{X}];\n#endif\n#ifdef MORPHTARGETS_TANGENT\ntangentUpdated.xyz+=(tangent{X}-tangent.xyz)*morphTargetInfluences[{X}];\n#endif\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return e.Eval = function(t, i) {
|
|
return "true" === (t = t.match(/\([^\(\)]*\)/g) ? t.replace(/\([^\(\)]*\)/g, function(t) {
|
|
return t = t.slice(1, t.length - 1), e._HandleParenthesisContent(t, i)
|
|
}) : e._HandleParenthesisContent(t, i)) || "false" !== t && e.Eval(t, i)
|
|
}, e._HandleParenthesisContent = function(t, i) {
|
|
var n;
|
|
i = i || function(e) {
|
|
return "true" === e
|
|
};
|
|
var r = t.split("||");
|
|
for (var o in r)
|
|
if (r.hasOwnProperty(o)) {
|
|
var s = e._SimplifyNegation(r[o].trim()),
|
|
a = s.split("&&");
|
|
if (a.length > 1)
|
|
for (var c = 0; c < a.length; ++c) {
|
|
var l = e._SimplifyNegation(a[c].trim());
|
|
if (!(n = "true" !== l && "false" !== l ? "!" === l[0] ? !i(l.substring(1)) : i(l) : "true" === l)) {
|
|
s = "false";
|
|
break
|
|
}
|
|
}
|
|
if (n || "true" === s) {
|
|
n = !0;
|
|
break
|
|
}
|
|
n = "true" !== s && "false" !== s ? "!" === s[0] ? !i(s.substring(1)) : i(s) : "true" === s
|
|
} return n ? "true" : "false"
|
|
}, e._SimplifyNegation = function(e) {
|
|
return "!true" === (e = (e = e.replace(/^[\s!]+/, function(e) {
|
|
return (e = e.replace(/[\s]/g, function() {
|
|
return ""
|
|
})).length % 2 ? "!" : ""
|
|
})).trim()) ? e = "false" : "!false" === e && (e = "true"), e
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
}), i.d(t, "b", function() {
|
|
return o
|
|
});
|
|
var n = i(47),
|
|
r = function() {
|
|
function e(e) {
|
|
void 0 === e && (e = 30), this._enabled = !0, this._rollingFrameTime = new o(e)
|
|
}
|
|
return e.prototype.sampleFrame = function(e) {
|
|
if (void 0 === e && (e = n.a.Now), this._enabled) {
|
|
if (null != this._lastFrameTimeMs) {
|
|
var t = e - this._lastFrameTimeMs;
|
|
this._rollingFrameTime.add(t)
|
|
}
|
|
this._lastFrameTimeMs = e
|
|
}
|
|
}, Object.defineProperty(e.prototype, "averageFrameTime", {
|
|
get: function() {
|
|
return this._rollingFrameTime.average
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "averageFrameTimeVariance", {
|
|
get: function() {
|
|
return this._rollingFrameTime.variance
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "instantaneousFrameTime", {
|
|
get: function() {
|
|
return this._rollingFrameTime.history(0)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "averageFPS", {
|
|
get: function() {
|
|
return 1e3 / this._rollingFrameTime.average
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "instantaneousFPS", {
|
|
get: function() {
|
|
var e = this._rollingFrameTime.history(0);
|
|
return 0 === e ? 0 : 1e3 / e
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isSaturated", {
|
|
get: function() {
|
|
return this._rollingFrameTime.isSaturated()
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.enable = function() {
|
|
this._enabled = !0
|
|
}, e.prototype.disable = function() {
|
|
this._enabled = !1, this._lastFrameTimeMs = null
|
|
}, Object.defineProperty(e.prototype, "isEnabled", {
|
|
get: function() {
|
|
return this._enabled
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.reset = function() {
|
|
this._lastFrameTimeMs = null, this._rollingFrameTime.reset()
|
|
}, e
|
|
}(),
|
|
o = function() {
|
|
function e(e) {
|
|
this._samples = new Array(e), this.reset()
|
|
}
|
|
return e.prototype.add = function(e) {
|
|
var t;
|
|
if (this.isSaturated()) {
|
|
var i = this._samples[this._pos];
|
|
t = i - this.average, this.average -= t / (this._sampleCount - 1), this._m2 -= t * (i - this.average)
|
|
} else this._sampleCount++;
|
|
t = e - this.average, this.average += t / this._sampleCount, this._m2 += t * (e - this.average), this.variance = this._m2 / (this._sampleCount - 1), this._samples[this._pos] = e, this._pos++, this._pos %= this._samples.length
|
|
}, e.prototype.history = function(e) {
|
|
if (e >= this._sampleCount || e >= this._samples.length) return 0;
|
|
var t = this._wrapPosition(this._pos - 1);
|
|
return this._samples[this._wrapPosition(t - e)]
|
|
}, e.prototype.isSaturated = function() {
|
|
return this._sampleCount >= this._samples.length
|
|
}, e.prototype.reset = function() {
|
|
this.average = 0, this.variance = 0, this._sampleCount = 0, this._pos = 0, this._m2 = 0
|
|
}, e.prototype._wrapPosition = function(e) {
|
|
var t = this._samples.length;
|
|
return (e % t + t) % t
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return a
|
|
});
|
|
var n, r = i(9);
|
|
! function(e) {
|
|
e[e.Pending = 0] = "Pending", e[e.Fulfilled = 1] = "Fulfilled", e[e.Rejected = 2] = "Rejected"
|
|
}(n || (n = {}));
|
|
var o = function() {
|
|
return function() {
|
|
this.count = 0, this.target = 0, this.results = []
|
|
}
|
|
}(),
|
|
s = function() {
|
|
function e(e) {
|
|
var t = this;
|
|
if (this._state = n.Pending, this._children = new Array, this._rejectWasConsumed = !1, e) try {
|
|
e(function(e) {
|
|
t._resolve(e)
|
|
}, function(e) {
|
|
t._reject(e)
|
|
})
|
|
} catch (e) {
|
|
this._reject(e)
|
|
}
|
|
}
|
|
return Object.defineProperty(e.prototype, "_result", {
|
|
get: function() {
|
|
return this._resultValue
|
|
},
|
|
set: function(e) {
|
|
this._resultValue = e, this._parent && void 0 === this._parent._result && (this._parent._result = e)
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.catch = function(e) {
|
|
return this.then(void 0, e)
|
|
}, e.prototype.then = function(t, i) {
|
|
var o = this,
|
|
s = new e;
|
|
return s._onFulfilled = t, s._onRejected = i, this._children.push(s), s._parent = this, this._state !== n.Pending && r.h.SetImmediate(function() {
|
|
if (o._state === n.Fulfilled || o._rejectWasConsumed) {
|
|
var e = s._resolve(o._result);
|
|
if (null != e)
|
|
if (void 0 !== e._state) {
|
|
var t = e;
|
|
s._children.push(t), t._parent = s, s = t
|
|
} else s._result = e
|
|
} else s._reject(o._reason)
|
|
}), s
|
|
}, e.prototype._moveChildren = function(e) {
|
|
var t, i = this;
|
|
if ((t = this._children).push.apply(t, e.splice(0, e.length)), this._children.forEach(function(e) {
|
|
e._parent = i
|
|
}), this._state === n.Fulfilled)
|
|
for (var r = 0, o = this._children; r < o.length; r++) {
|
|
o[r]._resolve(this._result)
|
|
} else if (this._state === n.Rejected)
|
|
for (var s = 0, a = this._children; s < a.length; s++) {
|
|
a[s]._reject(this._reason)
|
|
}
|
|
}, e.prototype._resolve = function(e) {
|
|
try {
|
|
this._state = n.Fulfilled;
|
|
var t = null;
|
|
if (this._onFulfilled && (t = this._onFulfilled(e)), null != t)
|
|
if (void 0 !== t._state) {
|
|
var i = t;
|
|
i._parent = this, i._moveChildren(this._children), e = i._result
|
|
} else e = t;
|
|
this._result = e;
|
|
for (var r = 0, o = this._children; r < o.length; r++) {
|
|
o[r]._resolve(e)
|
|
}
|
|
this._children.length = 0, delete this._onFulfilled, delete this._onRejected
|
|
} catch (e) {
|
|
this._reject(e, !0)
|
|
}
|
|
}, e.prototype._reject = function(e, t) {
|
|
if (void 0 === t && (t = !1), this._state = n.Rejected, this._reason = e, this._onRejected && !t) try {
|
|
this._onRejected(e), this._rejectWasConsumed = !0
|
|
} catch (t) {
|
|
e = t
|
|
}
|
|
for (var i = 0, r = this._children; i < r.length; i++) {
|
|
var o = r[i];
|
|
this._rejectWasConsumed ? o._resolve(null) : o._reject(e)
|
|
}
|
|
this._children.length = 0, delete this._onFulfilled, delete this._onRejected
|
|
}, e.resolve = function(t) {
|
|
var i = new e;
|
|
return i._resolve(t), i
|
|
}, e._RegisterForFulfillment = function(e, t, i) {
|
|
e.then(function(e) {
|
|
return t.results[i] = e, t.count++, t.count === t.target && t.rootPromise._resolve(t.results), null
|
|
}, function(e) {
|
|
t.rootPromise._state !== n.Rejected && t.rootPromise._reject(e)
|
|
})
|
|
}, e.all = function(t) {
|
|
var i = new e,
|
|
n = new o;
|
|
if (n.target = t.length, n.rootPromise = i, t.length)
|
|
for (var r = 0; r < t.length; r++) e._RegisterForFulfillment(t[r], n, r);
|
|
else i._resolve([]);
|
|
return i
|
|
}, e.race = function(t) {
|
|
var i = new e;
|
|
if (t.length)
|
|
for (var n = 0, r = t; n < r.length; n++) {
|
|
r[n].then(function(e) {
|
|
return i && (i._resolve(e), i = null), null
|
|
}, function(e) {
|
|
i && (i._reject(e), i = null)
|
|
})
|
|
}
|
|
return i
|
|
}, e
|
|
}(),
|
|
a = function() {
|
|
function e() {}
|
|
return e.Apply = function(e) {
|
|
(void 0 === e && (e = !1), e || "undefined" == typeof Promise) && (window.Promise = s)
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
function e() {}
|
|
return Object.defineProperty(e.prototype, "isAsync", {
|
|
get: function() {
|
|
return this.isParallelCompiled
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "isReady", {
|
|
get: function() {
|
|
return !!this.program && (!this.isParallelCompiled || this.engine._isRenderingStateCompiled(this))
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype._handlesSpectorRebuildCallback = function(e) {
|
|
e && this.program && e(this.program)
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return r
|
|
});
|
|
var n = i(0),
|
|
r = function() {
|
|
return function() {
|
|
this._checkCollisions = !1, this._collisionMask = -1, this._collisionGroup = -1, this._collider = null, this._oldPositionForCollisions = new n.x(0, 0, 0), this._diffPositionForCollisions = new n.x(0, 0, 0)
|
|
}
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return s
|
|
});
|
|
var n = i(28),
|
|
r = i(0),
|
|
o = i(3),
|
|
s = function() {
|
|
function e(e, t, i, r, o) {
|
|
void 0 === i && (i = null), void 0 === r && (r = null), void 0 === o && (o = null), this.index = e, this._opaqueSubMeshes = new n.a(256), this._transparentSubMeshes = new n.a(256), this._alphaTestSubMeshes = new n.a(256), this._depthOnlySubMeshes = new n.a(256), this._particleSystems = new n.a(256), this._spriteManagers = new n.a(256), this._edgesRenderers = new n.a(16), this._scene = t, this.opaqueSortCompareFn = i, this.alphaTestSortCompareFn = r, this.transparentSortCompareFn = o
|
|
}
|
|
return Object.defineProperty(e.prototype, "opaqueSortCompareFn", {
|
|
set: function(t) {
|
|
this._opaqueSortCompareFn = t, this._renderOpaque = t ? this.renderOpaqueSorted : e.renderUnsorted
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "alphaTestSortCompareFn", {
|
|
set: function(t) {
|
|
this._alphaTestSortCompareFn = t, this._renderAlphaTest = t ? this.renderAlphaTestSorted : e.renderUnsorted
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(e.prototype, "transparentSortCompareFn", {
|
|
set: function(t) {
|
|
this._transparentSortCompareFn = t || e.defaultTransparentSortCompare, this._renderTransparent = this.renderTransparentSorted
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), e.prototype.render = function(e, t, i, n) {
|
|
if (e) e(this._opaqueSubMeshes, this._alphaTestSubMeshes, this._transparentSubMeshes, this._depthOnlySubMeshes);
|
|
else {
|
|
var r = this._scene.getEngine();
|
|
0 !== this._depthOnlySubMeshes.length && (r.setColorWrite(!1), this._renderAlphaTest(this._depthOnlySubMeshes), r.setColorWrite(!0)), 0 !== this._opaqueSubMeshes.length && this._renderOpaque(this._opaqueSubMeshes), 0 !== this._alphaTestSubMeshes.length && this._renderAlphaTest(this._alphaTestSubMeshes);
|
|
var s = r.getStencilBuffer();
|
|
if (r.setStencilBuffer(!1), t && this._renderSprites(), i && this._renderParticles(n), this.onBeforeTransparentRendering && this.onBeforeTransparentRendering(), 0 !== this._transparentSubMeshes.length && (this._renderTransparent(this._transparentSubMeshes), r.setAlphaMode(o.a.ALPHA_DISABLE)), r.setStencilBuffer(!1), this._edgesRenderers.length) {
|
|
for (var a = 0; a < this._edgesRenderers.length; a++) this._edgesRenderers.data[a].render();
|
|
r.setAlphaMode(o.a.ALPHA_DISABLE)
|
|
}
|
|
r.setStencilBuffer(s)
|
|
}
|
|
}, e.prototype.renderOpaqueSorted = function(t) {
|
|
return e.renderSorted(t, this._opaqueSortCompareFn, this._scene.activeCamera, !1)
|
|
}, e.prototype.renderAlphaTestSorted = function(t) {
|
|
return e.renderSorted(t, this._alphaTestSortCompareFn, this._scene.activeCamera, !1)
|
|
}, e.prototype.renderTransparentSorted = function(t) {
|
|
return e.renderSorted(t, this._transparentSortCompareFn, this._scene.activeCamera, !0)
|
|
}, e.renderSorted = function(e, t, i, n) {
|
|
for (var s, a = 0, c = i ? i.globalPosition : r.x.Zero(); a < e.length; a++)(s = e.data[a])._alphaIndex = s.getMesh().alphaIndex, s._distanceToCamera = s.getBoundingInfo().boundingSphere.centerWorld.subtract(c).length();
|
|
var l = e.data.slice(0, e.length);
|
|
for (t && l.sort(t), a = 0; a < l.length; a++) {
|
|
if (s = l[a], n) {
|
|
var u = s.getMaterial();
|
|
if (u && u.needDepthPrePass) {
|
|
var h = u.getScene().getEngine();
|
|
h.setColorWrite(!1), h.setAlphaMode(o.a.ALPHA_DISABLE), s.render(!1), h.setColorWrite(!0)
|
|
}
|
|
}
|
|
s.render(n)
|
|
}
|
|
}, e.renderUnsorted = function(e) {
|
|
for (var t = 0; t < e.length; t++) {
|
|
e.data[t].render(!1)
|
|
}
|
|
}, e.defaultTransparentSortCompare = function(t, i) {
|
|
return t._alphaIndex > i._alphaIndex ? 1 : t._alphaIndex < i._alphaIndex ? -1 : e.backToFrontSortCompare(t, i)
|
|
}, e.backToFrontSortCompare = function(e, t) {
|
|
return e._distanceToCamera < t._distanceToCamera ? 1 : e._distanceToCamera > t._distanceToCamera ? -1 : 0
|
|
}, e.frontToBackSortCompare = function(e, t) {
|
|
return e._distanceToCamera < t._distanceToCamera ? -1 : e._distanceToCamera > t._distanceToCamera ? 1 : 0
|
|
}, e.prototype.prepare = function() {
|
|
this._opaqueSubMeshes.reset(), this._transparentSubMeshes.reset(), this._alphaTestSubMeshes.reset(), this._depthOnlySubMeshes.reset(), this._particleSystems.reset(), this._spriteManagers.reset(), this._edgesRenderers.reset()
|
|
}, e.prototype.dispose = function() {
|
|
this._opaqueSubMeshes.dispose(), this._transparentSubMeshes.dispose(), this._alphaTestSubMeshes.dispose(), this._depthOnlySubMeshes.dispose(), this._particleSystems.dispose(), this._spriteManagers.dispose(), this._edgesRenderers.dispose()
|
|
}, e.prototype.dispatch = function(e, t, i) {
|
|
void 0 === t && (t = e.getMesh()), void 0 === i && (i = e.getMaterial()), null != i && (i.needAlphaBlendingForMesh(t) ? this._transparentSubMeshes.push(e) : i.needAlphaTesting() ? (i.needDepthPrePass && this._depthOnlySubMeshes.push(e), this._alphaTestSubMeshes.push(e)) : (i.needDepthPrePass && this._depthOnlySubMeshes.push(e), this._opaqueSubMeshes.push(e)), t._renderingGroup = this, t._edgesRenderer && t._edgesRenderer.isEnabled && this._edgesRenderers.push(t._edgesRenderer))
|
|
}, e.prototype.dispatchSprites = function(e) {
|
|
this._spriteManagers.push(e)
|
|
}, e.prototype.dispatchParticles = function(e) {
|
|
this._particleSystems.push(e)
|
|
}, e.prototype._renderParticles = function(e) {
|
|
if (0 !== this._particleSystems.length) {
|
|
var t = this._scene.activeCamera;
|
|
this._scene.onBeforeParticlesRenderingObservable.notifyObservers(this._scene);
|
|
for (var i = 0; i < this._particleSystems.length; i++) {
|
|
var n = this._particleSystems.data[i];
|
|
if (0 !== (t && t.layerMask & n.layerMask)) {
|
|
var r = n.emitter;
|
|
r.position && e && -1 === e.indexOf(r) || this._scene._activeParticles.addCount(n.render(), !1)
|
|
}
|
|
}
|
|
this._scene.onAfterParticlesRenderingObservable.notifyObservers(this._scene)
|
|
}
|
|
}, e.prototype._renderSprites = function() {
|
|
if (this._scene.spritesEnabled && 0 !== this._spriteManagers.length) {
|
|
var e = this._scene.activeCamera;
|
|
this._scene.onBeforeSpritesRenderingObservable.notifyObservers(this._scene);
|
|
for (var t = 0; t < this._spriteManagers.length; t++) {
|
|
var i = this._spriteManagers.data[t];
|
|
0 !== (e && e.layerMask & i.layerMask) && i.render()
|
|
}
|
|
this._scene.onAfterSpritesRenderingObservable.notifyObservers(this._scene)
|
|
}
|
|
}, e
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return n
|
|
});
|
|
var n = function() {
|
|
return function(e, t) {
|
|
this.distance = e, this.mesh = t
|
|
}
|
|
}()
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.d(t, "a", function() {
|
|
return u
|
|
});
|
|
var n = i(1),
|
|
r = i(0),
|
|
o = i(6),
|
|
s = i(24),
|
|
a = i(11),
|
|
c = i(32),
|
|
l = i(42);
|
|
a.a._instancedMeshFactory = function(e, t) {
|
|
return new u(e, t)
|
|
};
|
|
var u = function(e) {
|
|
function t(t, i) {
|
|
var n = e.call(this, t, i.getScene()) || this;
|
|
return n._indexInSourceMeshInstanceArray = -1, i.addInstance(n), n._sourceMesh = i, n.position.copyFrom(i.position), n.rotation.copyFrom(i.rotation), n.scaling.copyFrom(i.scaling), i.rotationQuaternion && (n.rotationQuaternion = i.rotationQuaternion.clone()), n.infiniteDistance = i.infiniteDistance, n.setPivotMatrix(i.getPivotMatrix()), n.refreshBoundingInfo(), n._syncSubMeshes(), n
|
|
}
|
|
return n.d(t, e), t.prototype.getClassName = function() {
|
|
return "InstancedMesh"
|
|
}, Object.defineProperty(t.prototype, "lightSources", {
|
|
get: function() {
|
|
return this._sourceMesh._lightSources
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype._resyncLightSources = function() {}, t.prototype._resyncLighSource = function(e) {}, t.prototype._removeLightSource = function(e) {}, Object.defineProperty(t.prototype, "receiveShadows", {
|
|
get: function() {
|
|
return this._sourceMesh.receiveShadows
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "material", {
|
|
get: function() {
|
|
return this._sourceMesh.material
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "visibility", {
|
|
get: function() {
|
|
return this._sourceMesh.visibility
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "skeleton", {
|
|
get: function() {
|
|
return this._sourceMesh.skeleton
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), Object.defineProperty(t.prototype, "renderingGroupId", {
|
|
get: function() {
|
|
return this._sourceMesh.renderingGroupId
|
|
},
|
|
set: function(e) {
|
|
this._sourceMesh && e !== this._sourceMesh.renderingGroupId && o.a.Warn("Note - setting renderingGroupId of an instanced mesh has no effect on the scene")
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getTotalVertices = function() {
|
|
return this._sourceMesh.getTotalVertices()
|
|
}, t.prototype.getTotalIndices = function() {
|
|
return this._sourceMesh.getTotalIndices()
|
|
}, Object.defineProperty(t.prototype, "sourceMesh", {
|
|
get: function() {
|
|
return this._sourceMesh
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.isReady = function(e) {
|
|
return void 0 === e && (e = !1), this._sourceMesh.isReady(e, !0)
|
|
}, t.prototype.getVerticesData = function(e, t) {
|
|
return this._sourceMesh.getVerticesData(e, t)
|
|
}, t.prototype.setVerticesData = function(e, t, i, n) {
|
|
return this.sourceMesh && this.sourceMesh.setVerticesData(e, t, i, n), this.sourceMesh
|
|
}, t.prototype.updateVerticesData = function(e, t, i, n) {
|
|
return this.sourceMesh && this.sourceMesh.updateVerticesData(e, t, i, n), this.sourceMesh
|
|
}, t.prototype.setIndices = function(e, t) {
|
|
return void 0 === t && (t = null), this.sourceMesh && this.sourceMesh.setIndices(e, t), this.sourceMesh
|
|
}, t.prototype.isVerticesDataPresent = function(e) {
|
|
return this._sourceMesh.isVerticesDataPresent(e)
|
|
}, t.prototype.getIndices = function() {
|
|
return this._sourceMesh.getIndices()
|
|
}, Object.defineProperty(t.prototype, "_positions", {
|
|
get: function() {
|
|
return this._sourceMesh._positions
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.refreshBoundingInfo = function(e) {
|
|
if (void 0 === e && (e = !1), this._boundingInfo && this._boundingInfo.isLocked) return this;
|
|
var t = this._sourceMesh.geometry ? this._sourceMesh.geometry.boundingBias : null;
|
|
return this._refreshBoundingInfo(this._sourceMesh._getPositionData(e), t), this
|
|
}, t.prototype._preActivate = function() {
|
|
return this._currentLOD && this._currentLOD._preActivate(), this
|
|
}, t.prototype._activate = function(e, t) {
|
|
if (this._currentLOD && this._currentLOD._registerInstanceForRenderId(this, e), t) {
|
|
if (!this._currentLOD._internalAbstractMeshDataInfo._isActiveIntermediate) return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstancesIntermediate = !0, !0
|
|
} else if (!this._currentLOD._internalAbstractMeshDataInfo._isActive) return this._currentLOD._internalAbstractMeshDataInfo._onlyForInstances = !0, !0;
|
|
return !1
|
|
}, t.prototype._postActivate = function() {
|
|
this._edgesRenderer && this._edgesRenderer.isEnabled && this._sourceMesh._renderingGroup && this._sourceMesh._renderingGroup._edgesRenderers.push(this._edgesRenderer)
|
|
}, t.prototype.getWorldMatrix = function() {
|
|
if (this._currentLOD && this._currentLOD.billboardMode !== l.a.BILLBOARDMODE_NONE && this._currentLOD._masterMesh !== this) {
|
|
var t = this._currentLOD._masterMesh;
|
|
return this._currentLOD._masterMesh = this, r.t.Matrix[0].copyFrom(this._currentLOD.computeWorldMatrix(!0)), this._currentLOD._masterMesh = t, r.t.Matrix[0]
|
|
}
|
|
return e.prototype.getWorldMatrix.call(this)
|
|
}, Object.defineProperty(t.prototype, "isAnInstance", {
|
|
get: function() {
|
|
return !0
|
|
},
|
|
enumerable: !0,
|
|
configurable: !0
|
|
}), t.prototype.getLOD = function(e) {
|
|
if (!e) return this;
|
|
var t = this.getBoundingInfo();
|
|
return this._currentLOD = this.sourceMesh.getLOD(e, t.boundingSphere), this._currentLOD === this.sourceMesh ? this.sourceMesh : this._currentLOD
|
|
}, t.prototype._syncSubMeshes = function() {
|
|
if (this.releaseSubMeshes(), this._sourceMesh.subMeshes)
|
|
for (var e = 0; e < this._sourceMesh.subMeshes.length; e++) this._sourceMesh.subMeshes[e].clone(this, this._sourceMesh);
|
|
return this
|
|
}, t.prototype._generatePointsArray = function() {
|
|
return this._sourceMesh._generatePointsArray()
|
|
}, t.prototype.clone = function(e, t, i) {
|
|
var n = this._sourceMesh.createInstance(e);
|
|
if (c.a.DeepCopy(this, n, ["name", "subMeshes", "uniqueId"], []), this.refreshBoundingInfo(), t && (n.parent = t), !i)
|
|
for (var r = 0; r < this.getScene().meshes.length; r++) {
|
|
var o = this.getScene().meshes[r];
|
|
o.parent === this && o.clone(o.name, n)
|
|
}
|
|
return n.computeWorldMatrix(!0), n
|
|
}, t.prototype.dispose = function(t, i) {
|
|
void 0 === i && (i = !1), this._sourceMesh.removeInstance(this), e.prototype.dispose.call(this, t, i)
|
|
}, t
|
|
}(s.a)
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "shadowsFragmentFunctions",
|
|
r = "#ifdef SHADOWS\n#ifndef SHADOWFLOAT\nfloat unpack(vec4 color)\n{\nconst vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);\nreturn dot(color,bit_shift);\n}\n#endif\nfloat computeFallOff(float value,vec2 clipSpace,float frustumEdgeFalloff)\n{\nfloat mask=smoothstep(1.0-frustumEdgeFalloff,1.0,clamp(dot(clipSpace,clipSpace),0.,1.));\nreturn mix(value,1.0,mask);\n}\nfloat computeShadowCube(vec3 lightPosition,samplerCube shadowSampler,float darkness,vec2 depthValues)\n{\nvec3 directionToLight=vPositionW-lightPosition;\nfloat depth=length(directionToLight);\ndepth=(depth+depthValues.x)/(depthValues.y);\ndepth=clamp(depth,0.,1.0);\ndirectionToLight=normalize(directionToLight);\ndirectionToLight.y=-directionToLight.y;\n#ifndef SHADOWFLOAT\nfloat shadow=unpack(textureCube(shadowSampler,directionToLight));\n#else\nfloat shadow=textureCube(shadowSampler,directionToLight).x;\n#endif\nif (depth>shadow)\n{\nreturn darkness;\n}\nreturn 1.0;\n}\nfloat computeShadowWithPoissonSamplingCube(vec3 lightPosition,samplerCube shadowSampler,float mapSize,float darkness,vec2 depthValues)\n{\nvec3 directionToLight=vPositionW-lightPosition;\nfloat depth=length(directionToLight);\ndepth=(depth+depthValues.x)/(depthValues.y);\ndepth=clamp(depth,0.,1.0);\ndirectionToLight=normalize(directionToLight);\ndirectionToLight.y=-directionToLight.y;\nfloat visibility=1.;\nvec3 poissonDisk[4];\npoissonDisk[0]=vec3(-1.0,1.0,-1.0);\npoissonDisk[1]=vec3(1.0,-1.0,-1.0);\npoissonDisk[2]=vec3(-1.0,-1.0,-1.0);\npoissonDisk[3]=vec3(1.0,-1.0,1.0);\n\n#ifndef SHADOWFLOAT\nif (unpack(textureCube(shadowSampler,directionToLight+poissonDisk[0]*mapSize))<depth) visibility-=0.25;\nif (unpack(textureCube(shadowSampler,directionToLight+poissonDisk[1]*mapSize))<depth) visibility-=0.25;\nif (unpack(textureCube(shadowSampler,directionToLight+poissonDisk[2]*mapSize))<depth) visibility-=0.25;\nif (unpack(textureCube(shadowSampler,directionToLight+poissonDisk[3]*mapSize))<depth) visibility-=0.25;\n#else\nif (textureCube(shadowSampler,directionToLight+poissonDisk[0]*mapSize).x<depth) visibility-=0.25;\nif (textureCube(shadowSampler,directionToLight+poissonDisk[1]*mapSize).x<depth) visibility-=0.25;\nif (textureCube(shadowSampler,directionToLight+poissonDisk[2]*mapSize).x<depth) visibility-=0.25;\nif (textureCube(shadowSampler,directionToLight+poissonDisk[3]*mapSize).x<depth) visibility-=0.25;\n#endif\nreturn min(1.0,visibility+darkness);\n}\nfloat computeShadowWithESMCube(vec3 lightPosition,samplerCube shadowSampler,float darkness,float depthScale,vec2 depthValues)\n{\nvec3 directionToLight=vPositionW-lightPosition;\nfloat depth=length(directionToLight);\ndepth=(depth+depthValues.x)/(depthValues.y);\nfloat shadowPixelDepth=clamp(depth,0.,1.0);\ndirectionToLight=normalize(directionToLight);\ndirectionToLight.y=-directionToLight.y;\n#ifndef SHADOWFLOAT\nfloat shadowMapSample=unpack(textureCube(shadowSampler,directionToLight));\n#else\nfloat shadowMapSample=textureCube(shadowSampler,directionToLight).x;\n#endif\nfloat esm=1.0-clamp(exp(min(87.,depthScale*shadowPixelDepth))*shadowMapSample,0.,1.-darkness);\nreturn esm;\n}\nfloat computeShadowWithCloseESMCube(vec3 lightPosition,samplerCube shadowSampler,float darkness,float depthScale,vec2 depthValues)\n{\nvec3 directionToLight=vPositionW-lightPosition;\nfloat depth=length(directionToLight);\ndepth=(depth+depthValues.x)/(depthValues.y);\nfloat shadowPixelDepth=clamp(depth,0.,1.0);\ndirectionToLight=normalize(directionToLight);\ndirectionToLight.y=-directionToLight.y;\n#ifndef SHADOWFLOAT\nfloat shadowMapSample=unpack(textureCube(shadowSampler,directionToLight));\n#else\nfloat shadowMapSample=textureCube(shadowSampler,directionToLight).x;\n#endif\nfloat esm=clamp(exp(min(87.,-depthScale*(shadowPixelDepth-shadowMapSample))),darkness,1.);\nreturn esm;\n}\nfloat computeShadow(vec4 vPositionFromLight,float depthMetric,sampler2D shadowSampler,float darkness,float frustumEdgeFalloff)\n{\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec2 uv=0.5*clipSpace.xy+vec2(0.5);\nif (uv.x<0. || uv.x>1.0 || uv.y<0. || uv.y>1.0)\n{\nreturn 1.0;\n}\nfloat shadowPixelDepth=clamp(depthMetric,0.,1.0);\n#ifndef SHADOWFLOAT\nfloat shadow=unpack(texture2D(shadowSampler,uv));\n#else\nfloat shadow=texture2D(shadowSampler,uv).x;\n#endif\nif (shadowPixelDepth>shadow)\n{\nreturn computeFallOff(darkness,clipSpace.xy,frustumEdgeFalloff);\n}\nreturn 1.;\n}\nfloat computeShadowWithPoissonSampling(vec4 vPositionFromLight,float depthMetric,sampler2D shadowSampler,float mapSize,float darkness,float frustumEdgeFalloff)\n{\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec2 uv=0.5*clipSpace.xy+vec2(0.5);\nif (uv.x<0. || uv.x>1.0 || uv.y<0. || uv.y>1.0)\n{\nreturn 1.0;\n}\nfloat shadowPixelDepth=clamp(depthMetric,0.,1.0);\nfloat visibility=1.;\nvec2 poissonDisk[4];\npoissonDisk[0]=vec2(-0.94201624,-0.39906216);\npoissonDisk[1]=vec2(0.94558609,-0.76890725);\npoissonDisk[2]=vec2(-0.094184101,-0.92938870);\npoissonDisk[3]=vec2(0.34495938,0.29387760);\n\n#ifndef SHADOWFLOAT\nif (unpack(texture2D(shadowSampler,uv+poissonDisk[0]*mapSize))<shadowPixelDepth) visibility-=0.25;\nif (unpack(texture2D(shadowSampler,uv+poissonDisk[1]*mapSize))<shadowPixelDepth) visibility-=0.25;\nif (unpack(texture2D(shadowSampler,uv+poissonDisk[2]*mapSize))<shadowPixelDepth) visibility-=0.25;\nif (unpack(texture2D(shadowSampler,uv+poissonDisk[3]*mapSize))<shadowPixelDepth) visibility-=0.25;\n#else\nif (texture2D(shadowSampler,uv+poissonDisk[0]*mapSize).x<shadowPixelDepth) visibility-=0.25;\nif (texture2D(shadowSampler,uv+poissonDisk[1]*mapSize).x<shadowPixelDepth) visibility-=0.25;\nif (texture2D(shadowSampler,uv+poissonDisk[2]*mapSize).x<shadowPixelDepth) visibility-=0.25;\nif (texture2D(shadowSampler,uv+poissonDisk[3]*mapSize).x<shadowPixelDepth) visibility-=0.25;\n#endif\nreturn computeFallOff(min(1.0,visibility+darkness),clipSpace.xy,frustumEdgeFalloff);\n}\nfloat computeShadowWithESM(vec4 vPositionFromLight,float depthMetric,sampler2D shadowSampler,float darkness,float depthScale,float frustumEdgeFalloff)\n{\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec2 uv=0.5*clipSpace.xy+vec2(0.5);\nif (uv.x<0. || uv.x>1.0 || uv.y<0. || uv.y>1.0)\n{\nreturn 1.0;\n}\nfloat shadowPixelDepth=clamp(depthMetric,0.,1.0);\n#ifndef SHADOWFLOAT\nfloat shadowMapSample=unpack(texture2D(shadowSampler,uv));\n#else\nfloat shadowMapSample=texture2D(shadowSampler,uv).x;\n#endif\nfloat esm=1.0-clamp(exp(min(87.,depthScale*shadowPixelDepth))*shadowMapSample,0.,1.-darkness);\nreturn computeFallOff(esm,clipSpace.xy,frustumEdgeFalloff);\n}\nfloat computeShadowWithCloseESM(vec4 vPositionFromLight,float depthMetric,sampler2D shadowSampler,float darkness,float depthScale,float frustumEdgeFalloff)\n{\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec2 uv=0.5*clipSpace.xy+vec2(0.5);\nif (uv.x<0. || uv.x>1.0 || uv.y<0. || uv.y>1.0)\n{\nreturn 1.0;\n}\nfloat shadowPixelDepth=clamp(depthMetric,0.,1.0);\n#ifndef SHADOWFLOAT\nfloat shadowMapSample=unpack(texture2D(shadowSampler,uv));\n#else\nfloat shadowMapSample=texture2D(shadowSampler,uv).x;\n#endif\nfloat esm=clamp(exp(min(87.,-depthScale*(shadowPixelDepth-shadowMapSample))),darkness,1.);\nreturn computeFallOff(esm,clipSpace.xy,frustumEdgeFalloff);\n}\n#ifdef WEBGL2\n\nfloat computeShadowWithPCF1(vec4 vPositionFromLight,float depthMetric,sampler2DShadow shadowSampler,float darkness,float frustumEdgeFalloff)\n{\nif (depthMetric>1.0 || depthMetric<0.0) {\nreturn 1.0;\n}\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec3 uvDepth=vec3(0.5*clipSpace.xyz+vec3(0.5));\nfloat shadow=texture2D(shadowSampler,uvDepth);\nshadow=mix(darkness,1.,shadow);\nreturn computeFallOff(shadow,clipSpace.xy,frustumEdgeFalloff);\n}\n\n\n\nfloat computeShadowWithPCF3(vec4 vPositionFromLight,float depthMetric,sampler2DShadow shadowSampler,vec2 shadowMapSizeAndInverse,float darkness,float frustumEdgeFalloff)\n{\nif (depthMetric>1.0 || depthMetric<0.0) {\nreturn 1.0;\n}\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec3 uvDepth=vec3(0.5*clipSpace.xyz+vec3(0.5));\nvec2 uv=uvDepth.xy*shadowMapSizeAndInverse.x;\nuv+=0.5;\nvec2 st=fract(uv);\nvec2 base_uv=floor(uv)-0.5;\nbase_uv*=shadowMapSizeAndInverse.y;\n\n\n\n\nvec2 uvw0=3.-2.*st;\nvec2 uvw1=1.+2.*st;\nvec2 u=vec2((2.-st.x)/uvw0.x-1.,st.x/uvw1.x+1.)*shadowMapSizeAndInverse.y;\nvec2 v=vec2((2.-st.y)/uvw0.y-1.,st.y/uvw1.y+1.)*shadowMapSizeAndInverse.y;\nfloat shadow=0.;\nshadow+=uvw0.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[0]),uvDepth.z));\nshadow+=uvw1.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[0]),uvDepth.z));\nshadow+=uvw0.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[1]),uvDepth.z));\nshadow+=uvw1.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[1]),uvDepth.z));\nshadow=shadow/16.;\nshadow=mix(darkness,1.,shadow);\nreturn computeFallOff(shadow,clipSpace.xy,frustumEdgeFalloff);\n}\n\n\n\nfloat computeShadowWithPCF5(vec4 vPositionFromLight,float depthMetric,sampler2DShadow shadowSampler,vec2 shadowMapSizeAndInverse,float darkness,float frustumEdgeFalloff)\n{\nif (depthMetric>1.0 || depthMetric<0.0) {\nreturn 1.0;\n}\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec3 uvDepth=vec3(0.5*clipSpace.xyz+vec3(0.5));\nvec2 uv=uvDepth.xy*shadowMapSizeAndInverse.x;\nuv+=0.5;\nvec2 st=fract(uv);\nvec2 base_uv=floor(uv)-0.5;\nbase_uv*=shadowMapSizeAndInverse.y;\n\n\nvec2 uvw0=4.-3.*st;\nvec2 uvw1=vec2(7.);\nvec2 uvw2=1.+3.*st;\nvec3 u=vec3((3.-2.*st.x)/uvw0.x-2.,(3.+st.x)/uvw1.x,st.x/uvw2.x+2.)*shadowMapSizeAndInverse.y;\nvec3 v=vec3((3.-2.*st.y)/uvw0.y-2.,(3.+st.y)/uvw1.y,st.y/uvw2.y+2.)*shadowMapSizeAndInverse.y;\nfloat shadow=0.;\nshadow+=uvw0.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[0]),uvDepth.z));\nshadow+=uvw1.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[0]),uvDepth.z));\nshadow+=uvw2.x*uvw0.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[2],v[0]),uvDepth.z));\nshadow+=uvw0.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[1]),uvDepth.z));\nshadow+=uvw1.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[1]),uvDepth.z));\nshadow+=uvw2.x*uvw1.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[2],v[1]),uvDepth.z));\nshadow+=uvw0.x*uvw2.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[0],v[2]),uvDepth.z));\nshadow+=uvw1.x*uvw2.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[1],v[2]),uvDepth.z));\nshadow+=uvw2.x*uvw2.y*texture2D(shadowSampler,vec3(base_uv.xy+vec2(u[2],v[2]),uvDepth.z));\nshadow=shadow/144.;\nshadow=mix(darkness,1.,shadow);\nreturn computeFallOff(shadow,clipSpace.xy,frustumEdgeFalloff);\n}\nconst vec3 PoissonSamplers32[64]=vec3[64](\nvec3(0.06407013,0.05409927,0.),\nvec3(0.7366577,0.5789394,0.),\nvec3(-0.6270542,-0.5320278,0.),\nvec3(-0.4096107,0.8411095,0.),\nvec3(0.6849564,-0.4990818,0.),\nvec3(-0.874181,-0.04579735,0.),\nvec3(0.9989998,0.0009880066,0.),\nvec3(-0.004920578,-0.9151649,0.),\nvec3(0.1805763,0.9747483,0.),\nvec3(-0.2138451,0.2635818,0.),\nvec3(0.109845,0.3884785,0.),\nvec3(0.06876755,-0.3581074,0.),\nvec3(0.374073,-0.7661266,0.),\nvec3(0.3079132,-0.1216763,0.),\nvec3(-0.3794335,-0.8271583,0.),\nvec3(-0.203878,-0.07715034,0.),\nvec3(0.5912697,0.1469799,0.),\nvec3(-0.88069,0.3031784,0.),\nvec3(0.5040108,0.8283722,0.),\nvec3(-0.5844124,0.5494877,0.),\nvec3(0.6017799,-0.1726654,0.),\nvec3(-0.5554981,0.1559997,0.),\nvec3(-0.3016369,-0.3900928,0.),\nvec3(-0.5550632,-0.1723762,0.),\nvec3(0.925029,0.2995041,0.),\nvec3(-0.2473137,0.5538505,0.),\nvec3(0.9183037,-0.2862392,0.),\nvec3(0.2469421,0.6718712,0.),\nvec3(0.3916397,-0.4328209,0.),\nvec3(-0.03576927,-0.6220032,0.),\nvec3(-0.04661255,0.7995201,0.),\nvec3(0.4402924,0.3640312,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.),\nvec3(0.,0.,0.)\n);\nconst vec3 PoissonSamplers64[64]=vec3[64](\nvec3(-0.613392,0.617481,0.),\nvec3(0.170019,-0.040254,0.),\nvec3(-0.299417,0.791925,0.),\nvec3(0.645680,0.493210,0.),\nvec3(-0.651784,0.717887,0.),\nvec3(0.421003,0.027070,0.),\nvec3(-0.817194,-0.271096,0.),\nvec3(-0.705374,-0.668203,0.),\nvec3(0.977050,-0.108615,0.),\nvec3(0.063326,0.142369,0.),\nvec3(0.203528,0.214331,0.),\nvec3(-0.667531,0.326090,0.),\nvec3(-0.098422,-0.295755,0.),\nvec3(-0.885922,0.215369,0.),\nvec3(0.566637,0.605213,0.),\nvec3(0.039766,-0.396100,0.),\nvec3(0.751946,0.453352,0.),\nvec3(0.078707,-0.715323,0.),\nvec3(-0.075838,-0.529344,0.),\nvec3(0.724479,-0.580798,0.),\nvec3(0.222999,-0.215125,0.),\nvec3(-0.467574,-0.405438,0.),\nvec3(-0.248268,-0.814753,0.),\nvec3(0.354411,-0.887570,0.),\nvec3(0.175817,0.382366,0.),\nvec3(0.487472,-0.063082,0.),\nvec3(-0.084078,0.898312,0.),\nvec3(0.488876,-0.783441,0.),\nvec3(0.470016,0.217933,0.),\nvec3(-0.696890,-0.549791,0.),\nvec3(-0.149693,0.605762,0.),\nvec3(0.034211,0.979980,0.),\nvec3(0.503098,-0.308878,0.),\nvec3(-0.016205,-0.872921,0.),\nvec3(0.385784,-0.393902,0.),\nvec3(-0.146886,-0.859249,0.),\nvec3(0.643361,0.164098,0.),\nvec3(0.634388,-0.049471,0.),\nvec3(-0.688894,0.007843,0.),\nvec3(0.464034,-0.188818,0.),\nvec3(-0.440840,0.137486,0.),\nvec3(0.364483,0.511704,0.),\nvec3(0.034028,0.325968,0.),\nvec3(0.099094,-0.308023,0.),\nvec3(0.693960,-0.366253,0.),\nvec3(0.678884,-0.204688,0.),\nvec3(0.001801,0.780328,0.),\nvec3(0.145177,-0.898984,0.),\nvec3(0.062655,-0.611866,0.),\nvec3(0.315226,-0.604297,0.),\nvec3(-0.780145,0.486251,0.),\nvec3(-0.371868,0.882138,0.),\nvec3(0.200476,0.494430,0.),\nvec3(-0.494552,-0.711051,0.),\nvec3(0.612476,0.705252,0.),\nvec3(-0.578845,-0.768792,0.),\nvec3(-0.772454,-0.090976,0.),\nvec3(0.504440,0.372295,0.),\nvec3(0.155736,0.065157,0.),\nvec3(0.391522,0.849605,0.),\nvec3(-0.620106,-0.328104,0.),\nvec3(0.789239,-0.419965,0.),\nvec3(-0.545396,0.538133,0.),\nvec3(-0.178564,-0.596057,0.)\n);\n\n\n\n\n\nfloat computeShadowWithPCSS(vec4 vPositionFromLight,float depthMetric,sampler2D depthSampler,sampler2DShadow shadowSampler,float shadowMapSizeInverse,float lightSizeUV,float darkness,float frustumEdgeFalloff,int searchTapCount,int pcfTapCount,vec3[64] poissonSamplers)\n{\nif (depthMetric>1.0 || depthMetric<0.0) {\nreturn 1.0;\n}\nvec3 clipSpace=vPositionFromLight.xyz/vPositionFromLight.w;\nvec3 uvDepth=vec3(0.5*clipSpace.xyz+vec3(0.5));\nfloat blockerDepth=0.0;\nfloat sumBlockerDepth=0.0;\nfloat numBlocker=0.0;\nfor (int i=0; i<searchTapCount; i ++) {\nblockerDepth=texture(depthSampler,uvDepth.xy+(lightSizeUV*shadowMapSizeInverse*PoissonSamplers32[i].xy)).r;\nif (blockerDepth<depthMetric) {\nsumBlockerDepth+=blockerDepth;\nnumBlocker++;\n}\n}\nif (numBlocker<1.0) {\nreturn 1.0;\n}\nfloat avgBlockerDepth=sumBlockerDepth/numBlocker;\n\nfloat AAOffset=shadowMapSizeInverse*10.;\n\n\nfloat penumbraRatio=((depthMetric-avgBlockerDepth)+AAOffset);\nfloat filterRadius=penumbraRatio*lightSizeUV*shadowMapSizeInverse;\nfloat random=getRand(vPositionFromLight.xy);\nfloat rotationAngle=random*3.1415926;\nvec2 rotationVector=vec2(cos(rotationAngle),sin(rotationAngle));\nfloat shadow=0.;\nfor (int i=0; i<pcfTapCount; i++) {\nvec3 offset=poissonSamplers[i];\n\noffset=vec3(offset.x*rotationVector.x-offset.y*rotationVector.y,offset.y*rotationVector.x+offset.x*rotationVector.y,0.);\nshadow+=texture2D(shadowSampler,uvDepth+offset*filterRadius);\n}\nshadow/=float(pcfTapCount);\n\nshadow=mix(shadow,1.,depthMetric-avgBlockerDepth);\n\nshadow=mix(darkness,1.,shadow);\n\nreturn computeFallOff(shadow,clipSpace.xy,frustumEdgeFalloff);\n}\nfloat computeShadowWithPCSS16(vec4 vPositionFromLight,float depthMetric,sampler2D depthSampler,sampler2DShadow shadowSampler,float shadowMapSizeInverse,float lightSizeUV,float darkness,float frustumEdgeFalloff)\n{\nreturn computeShadowWithPCSS(vPositionFromLight,depthMetric,depthSampler,shadowSampler,shadowMapSizeInverse,lightSizeUV,darkness,frustumEdgeFalloff,16,16,PoissonSamplers32);\n}\nfloat computeShadowWithPCSS32(vec4 vPositionFromLight,float depthMetric,sampler2D depthSampler,sampler2DShadow shadowSampler,float shadowMapSizeInverse,float lightSizeUV,float darkness,float frustumEdgeFalloff)\n{\nreturn computeShadowWithPCSS(vPositionFromLight,depthMetric,depthSampler,shadowSampler,shadowMapSizeInverse,lightSizeUV,darkness,frustumEdgeFalloff,16,32,PoissonSamplers32);\n}\nfloat computeShadowWithPCSS64(vec4 vPositionFromLight,float depthMetric,sampler2D depthSampler,sampler2DShadow shadowSampler,float shadowMapSizeInverse,float lightSizeUV,float darkness,float frustumEdgeFalloff)\n{\nreturn computeShadowWithPCSS(vPositionFromLight,depthMetric,depthSampler,shadowSampler,shadowMapSizeInverse,lightSizeUV,darkness,frustumEdgeFalloff,32,64,PoissonSamplers64);\n}\n#endif\n#endif\n";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "reflectionFunction",
|
|
r = "#ifdef USE_LOCAL_REFLECTIONMAP_CUBIC\nvec3 parallaxCorrectNormal( vec3 vertexPos,vec3 origVec,vec3 cubeSize,vec3 cubePos ) {\n\nvec3 invOrigVec=vec3(1.0,1.0,1.0)/origVec;\nvec3 halfSize=cubeSize*0.5;\nvec3 intersecAtMaxPlane=(cubePos+halfSize-vertexPos)*invOrigVec;\nvec3 intersecAtMinPlane=(cubePos-halfSize-vertexPos)*invOrigVec;\n\nvec3 largestIntersec=max(intersecAtMaxPlane,intersecAtMinPlane);\n\nfloat distance=min(min(largestIntersec.x,largestIntersec.y),largestIntersec.z);\n\nvec3 intersectPositionWS=vertexPos+origVec*distance;\n\nreturn intersectPositionWS-cubePos;\n}\n#endif\nvec3 computeReflectionCoords(vec4 worldPos,vec3 worldNormal)\n{\n#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)\nvec3 direction=normalize(vDirectionW);\nfloat lon=atan(direction.z,direction.x);\nfloat lat=acos(direction.y);\nvec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;\nfloat s=sphereCoords.x*0.5+0.5;\nfloat t=sphereCoords.y;\n#ifdef REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED\nreturn vec3(1.0-s,t,0);\n#else\nreturn vec3(s,t,0);\n#endif\n#endif\n#ifdef REFLECTIONMAP_EQUIRECTANGULAR\nvec3 cameraToVertex=normalize(worldPos.xyz-vEyePosition.xyz);\nvec3 r=normalize(reflect(cameraToVertex,worldNormal));\nr=vec3(reflectionMatrix*vec4(r,0));\nfloat lon=atan(r.z,r.x);\nfloat lat=acos(r.y);\nvec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;\nfloat s=sphereCoords.x*0.5+0.5;\nfloat t=sphereCoords.y;\nreturn vec3(s,t,0);\n#endif\n#ifdef REFLECTIONMAP_SPHERICAL\nvec3 viewDir=normalize(vec3(view*worldPos));\nvec3 viewNormal=normalize(vec3(view*vec4(worldNormal,0.0)));\nvec3 r=reflect(viewDir,viewNormal);\nr=vec3(reflectionMatrix*vec4(r,0));\nr.z=r.z-1.0;\nfloat m=2.0*length(r);\nreturn vec3(r.x/m+0.5,1.0-r.y/m-0.5,0);\n#endif\n#ifdef REFLECTIONMAP_PLANAR\nvec3 viewDir=worldPos.xyz-vEyePosition.xyz;\nvec3 coords=normalize(reflect(viewDir,worldNormal));\nreturn vec3(reflectionMatrix*vec4(coords,1));\n#endif\n#ifdef REFLECTIONMAP_CUBIC\nvec3 viewDir=normalize(worldPos.xyz-vEyePosition.xyz);\n\nvec3 coords=reflect(viewDir,worldNormal);\n#ifdef USE_LOCAL_REFLECTIONMAP_CUBIC\ncoords=parallaxCorrectNormal(worldPos.xyz,coords,vReflectionSize,vReflectionPosition);\n#endif\ncoords=vec3(reflectionMatrix*vec4(coords,0));\n#ifdef INVERTCUBICMAP\ncoords.y*=-1.0;\n#endif\nreturn coords;\n#endif\n#ifdef REFLECTIONMAP_PROJECTION\nreturn vec3(reflectionMatrix*(view*worldPos));\n#endif\n#ifdef REFLECTIONMAP_SKYBOX\nreturn vec3(reflectionMatrix*vec4(vPositionUVW,0));\n#endif\n#ifdef REFLECTIONMAP_EXPLICIT\nreturn vec3(0,0,0);\n#endif\n}";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "lightFragment",
|
|
r = "#ifdef LIGHT{X}\n#if defined(SHADOWONLY) || (defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X}) && defined(LIGHTMAPNOSPECULAR{X}))\n\n#else\n#ifdef PBR\n\n#ifdef SPOTLIGHT{X}\npreInfo=computePointAndSpotPreLightingInfo(light{X}.vLightData,viewDirectionW,normalW);\n#elif defined(POINTLIGHT{X})\npreInfo=computePointAndSpotPreLightingInfo(light{X}.vLightData,viewDirectionW,normalW);\n#elif defined(HEMILIGHT{X})\npreInfo=computeHemisphericPreLightingInfo(light{X}.vLightData,viewDirectionW,normalW);\n#elif defined(DIRLIGHT{X})\npreInfo=computeDirectionalPreLightingInfo(light{X}.vLightData,viewDirectionW,normalW);\n#endif\npreInfo.NdotV=NdotV;\n\n#ifdef SPOTLIGHT{X}\n#ifdef LIGHT_FALLOFF_GLTF{X}\npreInfo.attenuation=computeDistanceLightFalloff_GLTF(preInfo.lightDistanceSquared,light{X}.vLightFalloff.y);\npreInfo.attenuation*=computeDirectionalLightFalloff_GLTF(light{X}.vLightDirection.xyz,preInfo.L,light{X}.vLightFalloff.z,light{X}.vLightFalloff.w);\n#elif defined(LIGHT_FALLOFF_PHYSICAL{X})\npreInfo.attenuation=computeDistanceLightFalloff_Physical(preInfo.lightDistanceSquared);\npreInfo.attenuation*=computeDirectionalLightFalloff_Physical(light{X}.vLightDirection.xyz,preInfo.L,light{X}.vLightDirection.w);\n#elif defined(LIGHT_FALLOFF_STANDARD{X})\npreInfo.attenuation=computeDistanceLightFalloff_Standard(preInfo.lightOffset,light{X}.vLightFalloff.x);\npreInfo.attenuation*=computeDirectionalLightFalloff_Standard(light{X}.vLightDirection.xyz,preInfo.L,light{X}.vLightDirection.w,light{X}.vLightData.w);\n#else\npreInfo.attenuation=computeDistanceLightFalloff(preInfo.lightOffset,preInfo.lightDistanceSquared,light{X}.vLightFalloff.x,light{X}.vLightFalloff.y);\npreInfo.attenuation*=computeDirectionalLightFalloff(light{X}.vLightDirection.xyz,preInfo.L,light{X}.vLightDirection.w,light{X}.vLightData.w,light{X}.vLightFalloff.z,light{X}.vLightFalloff.w);\n#endif\n#elif defined(POINTLIGHT{X})\n#ifdef LIGHT_FALLOFF_GLTF{X}\npreInfo.attenuation=computeDistanceLightFalloff_GLTF(preInfo.lightDistanceSquared,light{X}.vLightFalloff.y);\n#elif defined(LIGHT_FALLOFF_PHYSICAL{X})\npreInfo.attenuation=computeDistanceLightFalloff_Physical(preInfo.lightDistanceSquared);\n#elif defined(LIGHT_FALLOFF_STANDARD{X})\npreInfo.attenuation=computeDistanceLightFalloff_Standard(preInfo.lightOffset,light{X}.vLightFalloff.x);\n#else\npreInfo.attenuation=computeDistanceLightFalloff(preInfo.lightOffset,preInfo.lightDistanceSquared,light{X}.vLightFalloff.x,light{X}.vLightFalloff.y);\n#endif\n#else\npreInfo.attenuation=1.0;\n#endif\n\n\n#ifdef HEMILIGHT{X}\npreInfo.roughness=roughness;\n#else\npreInfo.roughness=adjustRoughnessFromLightProperties(roughness,light{X}.vLightDiffuse.a,preInfo.lightDistance);\n#endif\n\n#ifdef HEMILIGHT{X}\ninfo.diffuse=computeHemisphericDiffuseLighting(preInfo,light{X}.vLightDiffuse.rgb,light{X}.vLightGround);\n#elif defined(SS_TRANSLUCENCY)\ninfo.diffuse=computeDiffuseAndTransmittedLighting(preInfo,light{X}.vLightDiffuse.rgb,transmittance);\n#else\ninfo.diffuse=computeDiffuseLighting(preInfo,light{X}.vLightDiffuse.rgb);\n#endif\n\n#ifdef SPECULARTERM\n#ifdef ANISOTROPIC\ninfo.specular=computeAnisotropicSpecularLighting(preInfo,viewDirectionW,normalW,anisotropicTangent,anisotropicBitangent,anisotropy,specularEnvironmentR0,specularEnvironmentR90,AARoughnessFactors.x,light{X}.vLightDiffuse.rgb);\n#else\ninfo.specular=computeSpecularLighting(preInfo,normalW,specularEnvironmentR0,specularEnvironmentR90,AARoughnessFactors.x,light{X}.vLightDiffuse.rgb);\n#endif\n#endif\n\n#ifdef SHEEN\n#ifdef SHEEN_LINKWITHALBEDO\n\npreInfo.roughness=sheenIntensity;\n#endif\ninfo.sheen=computeSheenLighting(preInfo,normalW,sheenColor,specularEnvironmentR90,AARoughnessFactors.x,light{X}.vLightDiffuse.rgb);\n#endif\n\n#ifdef CLEARCOAT\n\n#ifdef HEMILIGHT{X}\npreInfo.roughness=clearCoatRoughness;\n#else\npreInfo.roughness=adjustRoughnessFromLightProperties(clearCoatRoughness,light{X}.vLightDiffuse.a,preInfo.lightDistance);\n#endif\ninfo.clearCoat=computeClearCoatLighting(preInfo,clearCoatNormalW,clearCoatAARoughnessFactors.x,clearCoatIntensity,light{X}.vLightDiffuse.rgb);\n#ifdef CLEARCOAT_TINT\n\nabsorption=computeClearCoatLightingAbsorption(clearCoatNdotVRefract,preInfo.L,clearCoatNormalW,clearCoatColor,clearCoatThickness,clearCoatIntensity);\ninfo.diffuse*=absorption;\n#ifdef SPECULARTERM\ninfo.specular*=absorption;\n#endif\n#endif\n\ninfo.diffuse*=info.clearCoat.w;\n#ifdef SPECULARTERM\ninfo.specular*=info.clearCoat.w*info.clearCoat.w;\n#endif\n#ifdef SHEEN\ninfo.sheen*=info.clearCoat.w*info.clearCoat.w;\n#endif\n#endif\n#else\n#ifdef SPOTLIGHT{X}\ninfo=computeSpotLighting(viewDirectionW,normalW,light{X}.vLightData,light{X}.vLightDirection,light{X}.vLightDiffuse.rgb,light{X}.vLightSpecular,light{X}.vLightDiffuse.a,glossiness);\n#elif defined(HEMILIGHT{X})\ninfo=computeHemisphericLighting(viewDirectionW,normalW,light{X}.vLightData,light{X}.vLightDiffuse.rgb,light{X}.vLightSpecular,light{X}.vLightGround,glossiness);\n#elif defined(POINTLIGHT{X}) || defined(DIRLIGHT{X})\ninfo=computeLighting(viewDirectionW,normalW,light{X}.vLightData,light{X}.vLightDiffuse.rgb,light{X}.vLightSpecular,light{X}.vLightDiffuse.a,glossiness);\n#endif\n#endif\n#ifdef PROJECTEDLIGHTTEXTURE{X}\ninfo.diffuse*=computeProjectionTextureDiffuseLighting(projectionLightSampler{X},textureProjectionMatrix{X});\n#endif\n#endif\n#ifdef SHADOW{X}\n#ifdef SHADOWCLOSEESM{X}\n#if defined(SHADOWCUBE{X})\nshadow=computeShadowWithCloseESMCube(light{X}.vLightData.xyz,shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.z,light{X}.depthValues);\n#else\nshadow=computeShadowWithCloseESM(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.z,light{X}.shadowsInfo.w);\n#endif\n#elif defined(SHADOWESM{X})\n#if defined(SHADOWCUBE{X})\nshadow=computeShadowWithESMCube(light{X}.vLightData.xyz,shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.z,light{X}.depthValues);\n#else\nshadow=computeShadowWithESM(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.z,light{X}.shadowsInfo.w);\n#endif\n#elif defined(SHADOWPOISSON{X})\n#if defined(SHADOWCUBE{X})\nshadow=computeShadowWithPoissonSamplingCube(light{X}.vLightData.xyz,shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.x,light{X}.depthValues);\n#else\nshadow=computeShadowWithPoissonSampling(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#endif\n#elif defined(SHADOWPCF{X})\n#if defined(SHADOWLOWQUALITY{X})\nshadow=computeShadowWithPCF1(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#elif defined(SHADOWMEDIUMQUALITY{X})\nshadow=computeShadowWithPCF3(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.yz,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#else\nshadow=computeShadowWithPCF5(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.yz,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#endif\n#elif defined(SHADOWPCSS{X})\n#if defined(SHADOWLOWQUALITY{X})\nshadow=computeShadowWithPCSS16(vPositionFromLight{X},vDepthMetric{X},depthSampler{X},shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.z,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#elif defined(SHADOWMEDIUMQUALITY{X})\nshadow=computeShadowWithPCSS32(vPositionFromLight{X},vDepthMetric{X},depthSampler{X},shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.z,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#else\nshadow=computeShadowWithPCSS64(vPositionFromLight{X},vDepthMetric{X},depthSampler{X},shadowSampler{X},light{X}.shadowsInfo.y,light{X}.shadowsInfo.z,light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#endif\n#else\n#if defined(SHADOWCUBE{X})\nshadow=computeShadowCube(light{X}.vLightData.xyz,shadowSampler{X},light{X}.shadowsInfo.x,light{X}.depthValues);\n#else\nshadow=computeShadow(vPositionFromLight{X},vDepthMetric{X},shadowSampler{X},light{X}.shadowsInfo.x,light{X}.shadowsInfo.w);\n#endif\n#endif\n#ifdef SHADOWONLY\n#ifndef SHADOWINUSE\n#define SHADOWINUSE\n#endif\nglobalShadow+=shadow;\nshadowLightCount+=1.0;\n#endif\n#else\nshadow=1.;\n#endif\n#ifndef SHADOWONLY\n#ifdef CUSTOMUSERLIGHTING\ndiffuseBase+=computeCustomDiffuseLighting(info,diffuseBase,shadow);\n#ifdef SPECULARTERM\nspecularBase+=computeCustomSpecularLighting(info,specularBase,shadow);\n#endif\n#elif defined(LIGHTMAP) && defined(LIGHTMAPEXCLUDED{X})\ndiffuseBase+=lightmapColor*shadow;\n#ifdef SPECULARTERM\n#ifndef LIGHTMAPNOSPECULAR{X}\nspecularBase+=info.specular*shadow*lightmapColor;\n#endif\n#endif\n#ifdef CLEARCOAT\n#ifndef LIGHTMAPNOSPECULAR{X}\nclearCoatBase+=info.clearCoat.rgb*shadow*lightmapColor;\n#endif\n#endif\n#ifdef SHEEN\n#ifndef LIGHTMAPNOSPECULAR{X}\nsheenBase+=info.sheen.rgb*shadow;\n#endif\n#endif\n#else\ndiffuseBase+=info.diffuse*shadow;\n#ifdef SPECULARTERM\nspecularBase+=info.specular*shadow;\n#endif\n#ifdef CLEARCOAT\nclearCoatBase+=info.clearCoat.rgb*shadow;\n#endif\n#ifdef SHEEN\nsheenBase+=info.sheen.rgb*shadow;\n#endif\n#endif\n#endif\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "logDepthFragment",
|
|
r = "#ifdef LOGARITHMICDEPTH\ngl_FragDepthEXT=log2(vFragmentDepth)*logarithmicDepthConstant*0.5;\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "#ifdef FOG\nvFogDistance=(view*worldPos).xyz;\n#endif";
|
|
i(5).a.IncludesShadersStore.fogVertex = n
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "shadowsVertex",
|
|
r = "#ifdef SHADOWS\n#if defined(SHADOW{X}) && !defined(SHADOWCUBE{X})\nvPositionFromLight{X}=lightMatrix{X}*worldPos;\nvDepthMetric{X}=((vPositionFromLight{X}.z+light{X}.depthValues.x)/(light{X}.depthValues.y));\n#endif\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "logDepthVertex",
|
|
r = "#ifdef LOGARITHMICDEPTH\nvFragmentDepth=1.0+gl_Position.w;\ngl_Position.z=log2(max(0.000001,vFragmentDepth))*logarithmicDepthConstant;\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t) {
|
|
var i;
|
|
i = function() {
|
|
return this
|
|
}();
|
|
try {
|
|
i = i || new Function("return this")()
|
|
} catch (e) {
|
|
"object" == typeof window && (i = window)
|
|
}
|
|
e.exports = i
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "lightsFragmentFunctions",
|
|
r = "\nstruct lightingInfo\n{\nvec3 diffuse;\n#ifdef SPECULARTERM\nvec3 specular;\n#endif\n#ifdef NDOTL\nfloat ndl;\n#endif\n};\nlightingInfo computeLighting(vec3 viewDirectionW,vec3 vNormal,vec4 lightData,vec3 diffuseColor,vec3 specularColor,float range,float glossiness) {\nlightingInfo result;\nvec3 lightVectorW;\nfloat attenuation=1.0;\nif (lightData.w == 0.)\n{\nvec3 direction=lightData.xyz-vPositionW;\nattenuation=max(0.,1.0-length(direction)/range);\nlightVectorW=normalize(direction);\n}\nelse\n{\nlightVectorW=normalize(-lightData.xyz);\n}\n\nfloat ndl=max(0.,dot(vNormal,lightVectorW));\n#ifdef NDOTL\nresult.ndl=ndl;\n#endif\nresult.diffuse=ndl*diffuseColor*attenuation;\n#ifdef SPECULARTERM\n\nvec3 angleW=normalize(viewDirectionW+lightVectorW);\nfloat specComp=max(0.,dot(vNormal,angleW));\nspecComp=pow(specComp,max(1.,glossiness));\nresult.specular=specComp*specularColor*attenuation;\n#endif\nreturn result;\n}\nlightingInfo computeSpotLighting(vec3 viewDirectionW,vec3 vNormal,vec4 lightData,vec4 lightDirection,vec3 diffuseColor,vec3 specularColor,float range,float glossiness) {\nlightingInfo result;\nvec3 direction=lightData.xyz-vPositionW;\nvec3 lightVectorW=normalize(direction);\nfloat attenuation=max(0.,1.0-length(direction)/range);\n\nfloat cosAngle=max(0.,dot(lightDirection.xyz,-lightVectorW));\nif (cosAngle>=lightDirection.w)\n{\ncosAngle=max(0.,pow(cosAngle,lightData.w));\nattenuation*=cosAngle;\n\nfloat ndl=max(0.,dot(vNormal,lightVectorW));\n#ifdef NDOTL\nresult.ndl=ndl;\n#endif\nresult.diffuse=ndl*diffuseColor*attenuation;\n#ifdef SPECULARTERM\n\nvec3 angleW=normalize(viewDirectionW+lightVectorW);\nfloat specComp=max(0.,dot(vNormal,angleW));\nspecComp=pow(specComp,max(1.,glossiness));\nresult.specular=specComp*specularColor*attenuation;\n#endif\nreturn result;\n}\nresult.diffuse=vec3(0.);\n#ifdef SPECULARTERM\nresult.specular=vec3(0.);\n#endif\n#ifdef NDOTL\nresult.ndl=0.;\n#endif\nreturn result;\n}\nlightingInfo computeHemisphericLighting(vec3 viewDirectionW,vec3 vNormal,vec4 lightData,vec3 diffuseColor,vec3 specularColor,vec3 groundColor,float glossiness) {\nlightingInfo result;\n\nfloat ndl=dot(vNormal,lightData.xyz)*0.5+0.5;\n#ifdef NDOTL\nresult.ndl=ndl;\n#endif\nresult.diffuse=mix(groundColor,diffuseColor,ndl);\n#ifdef SPECULARTERM\n\nvec3 angleW=normalize(viewDirectionW+lightData.xyz);\nfloat specComp=max(0.,dot(vNormal,angleW));\nspecComp=pow(specComp,max(1.,glossiness));\nresult.specular=specComp*specularColor;\n#endif\nreturn result;\n}\nvec3 computeProjectionTextureDiffuseLighting(sampler2D projectionLightSampler,mat4 textureProjectionMatrix){\nvec4 strq=textureProjectionMatrix*vec4(vPositionW,1.0);\nstrq/=strq.w;\nvec3 textureColor=texture2D(projectionLightSampler,strq.xy).rgb;\nreturn textureColor;\n}";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "bumpFragmentFunctions",
|
|
r = "#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC)\n#if defined(TANGENT) && defined(NORMAL)\nvarying mat3 vTBN;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\nuniform mat4 normalMatrix;\n#endif\nvec3 perturbNormal(mat3 cotangentFrame,vec2 uv,sampler2D textureSampler,float scale)\n{\nvec3 map=texture2D(textureSampler,uv).xyz;\nmap=map*2.0-1.0;\n#ifdef NORMALXYSCALE\nmap=normalize(map*vec3(scale,scale,1.0));\n#endif\nreturn normalize(cotangentFrame*map);\n}\n\nmat3 cotangent_frame(vec3 normal,vec3 p,vec2 uv,vec2 tangentSpaceParams)\n{\n\nuv=gl_FrontFacing ? uv : -uv;\n\nvec3 dp1=dFdx(p);\nvec3 dp2=dFdy(p);\nvec2 duv1=dFdx(uv);\nvec2 duv2=dFdy(uv);\n\nvec3 dp2perp=cross(dp2,normal);\nvec3 dp1perp=cross(normal,dp1);\nvec3 tangent=dp2perp*duv1.x+dp1perp*duv2.x;\nvec3 bitangent=dp2perp*duv1.y+dp1perp*duv2.y;\n\ntangent*=tangentSpaceParams.x;\nbitangent*=tangentSpaceParams.y;\n\nfloat invmax=inversesqrt(max(dot(tangent,tangent),dot(bitangent,bitangent)));\nreturn mat3(tangent*invmax,bitangent*invmax,normal);\n}\n#endif\n#ifdef BUMP\n#if BUMPDIRECTUV == 1\n#define vBumpUV vMainUV1\n#elif BUMPDIRECTUV == 2\n#define vBumpUV vMainUV2\n#else\nvarying vec2 vBumpUV;\n#endif\nuniform sampler2D bumpSampler;\nvec3 perturbNormal(mat3 cotangentFrame,vec2 uv)\n{\nreturn perturbNormal(cotangentFrame,uv,bumpSampler,vBumpInfos.y);\n}\n\nmat3 cotangent_frame(vec3 normal,vec3 p,vec2 uv)\n{\nreturn cotangent_frame(normal,p,uv,vTangentSpaceParams);\n}\n#endif\n#if defined(BUMP) && defined(PARALLAX)\nconst float minSamples=4.;\nconst float maxSamples=15.;\nconst int iMaxSamples=15;\n\nvec2 parallaxOcclusion(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale) {\nfloat parallaxLimit=length(vViewDirCoT.xy)/vViewDirCoT.z;\nparallaxLimit*=parallaxScale;\nvec2 vOffsetDir=normalize(vViewDirCoT.xy);\nvec2 vMaxOffset=vOffsetDir*parallaxLimit;\nfloat numSamples=maxSamples+(dot(vViewDirCoT,vNormalCoT)*(minSamples-maxSamples));\nfloat stepSize=1.0/numSamples;\n\nfloat currRayHeight=1.0;\nvec2 vCurrOffset=vec2(0,0);\nvec2 vLastOffset=vec2(0,0);\nfloat lastSampledHeight=1.0;\nfloat currSampledHeight=1.0;\nfor (int i=0; i<iMaxSamples; i++)\n{\ncurrSampledHeight=texture2D(bumpSampler,vBumpUV+vCurrOffset).w;\n\nif (currSampledHeight>currRayHeight)\n{\nfloat delta1=currSampledHeight-currRayHeight;\nfloat delta2=(currRayHeight+stepSize)-lastSampledHeight;\nfloat ratio=delta1/(delta1+delta2);\nvCurrOffset=(ratio)* vLastOffset+(1.0-ratio)*vCurrOffset;\n\nbreak;\n}\nelse\n{\ncurrRayHeight-=stepSize;\nvLastOffset=vCurrOffset;\nvCurrOffset+=stepSize*vMaxOffset;\nlastSampledHeight=currSampledHeight;\n}\n}\nreturn vCurrOffset;\n}\nvec2 parallaxOffset(vec3 viewDir,float heightScale)\n{\n\nfloat height=texture2D(bumpSampler,vBumpUV).w;\nvec2 texCoordOffset=heightScale*viewDir.xy*height;\nreturn -texCoordOffset;\n}\n#endif";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "vec2 uvOffset=vec2(0.0,0.0);\n#if defined(BUMP) || defined(PARALLAX)\n#ifdef NORMALXYSCALE\nfloat normalScale=1.0;\n#else\nfloat normalScale=vBumpInfos.y;\n#endif\n#if defined(TANGENT) && defined(NORMAL)\nmat3 TBN=vTBN;\n#else\nmat3 TBN=cotangent_frame(normalW*normalScale,vPositionW,vBumpUV);\n#endif\n#elif defined(ANISOTROPIC)\n#if defined(TANGENT) && defined(NORMAL)\nmat3 TBN=vTBN;\n#else\nmat3 TBN=cotangent_frame(normalW,vPositionW,vMainUV1,vec2(1.,1.));\n#endif\n#endif\n#ifdef PARALLAX\nmat3 invTBN=transposeMat3(TBN);\n#ifdef PARALLAXOCCLUSION\nuvOffset=parallaxOcclusion(invTBN*-viewDirectionW,invTBN*normalW,vBumpUV,vBumpInfos.z);\n#else\nuvOffset=parallaxOffset(invTBN*viewDirectionW,vBumpInfos.z);\n#endif\n#endif\n#ifdef BUMP\n#ifdef OBJECTSPACE_NORMALMAP\nnormalW=normalize(texture2D(bumpSampler,vBumpUV).xyz*2.0-1.0);\nnormalW=normalize(mat3(normalMatrix)*normalW);\n#else\nnormalW=perturbNormal(TBN,vBumpUV+uvOffset);\n#endif\n#endif";
|
|
i(5).a.IncludesShadersStore.bumpFragment = n
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "#ifdef DEPTHPREPASS\ngl_FragColor=vec4(0.,0.,0.,1.0);\nreturn;\n#endif";
|
|
i(5).a.IncludesShadersStore.depthPrePass = n
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "bumpVertexDeclaration",
|
|
r = "#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP)\n#if defined(TANGENT) && defined(NORMAL)\nvarying mat3 vTBN;\n#endif\n#endif\n";
|
|
i(5).a.IncludesShadersStore[n] = r
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = "#if defined(BUMP) || defined(PARALLAX) || defined(CLEARCOAT_BUMP)\n#if defined(TANGENT) && defined(NORMAL)\nvec3 tbnNormal=normalize(normalUpdated);\nvec3 tbnTangent=normalize(tangentUpdated.xyz);\nvec3 tbnBitangent=cross(tbnNormal,tbnTangent)*tangentUpdated.w;\nvTBN=mat3(finalWorld)*mat3(tbnTangent,tbnBitangent,tbnNormal);\n#endif\n#endif";
|
|
i(5).a.IncludesShadersStore.bumpVertex = n
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = i(5),
|
|
r = (i(95), i(89), "colorPixelShader"),
|
|
o = "#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#else\nuniform vec4 color;\n#endif\n#include<clipPlaneFragmentDeclaration>\nvoid main(void) {\n#include<clipPlaneFragment>\n#ifdef VERTEXCOLOR\ngl_FragColor=vColor;\n#else\ngl_FragColor=color;\n#endif\n}";
|
|
n.a.ShadersStore[r] = o
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
var n = i(5),
|
|
r = (i(67), i(96), i(68), i(69), i(70), i(90), "colorVertexShader"),
|
|
o = "\nattribute vec3 position;\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<bonesDeclaration>\n#include<clipPlaneVertexDeclaration>\n\n#include<instancesDeclaration>\nuniform mat4 viewProjection;\n\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\nvoid main(void) {\n#include<instancesVertex>\n#include<bonesVertex>\nvec4 worldPos=finalWorld*vec4(position,1.0);\ngl_Position=viewProjection*worldPos;\n#include<clipPlaneVertex>\n#ifdef VERTEXCOLOR\n\nvColor=color;\n#endif\n}";
|
|
n.a.ShadersStore[r] = o
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
(function(e) {
|
|
i.d(t, "b", function() {
|
|
return u
|
|
}), i.d(t, "a", function() {
|
|
return h
|
|
});
|
|
var n = i(1),
|
|
r = i(6),
|
|
o = i(10),
|
|
s = i(92),
|
|
a = i(26),
|
|
c = i(3),
|
|
l = i(78),
|
|
u = function() {
|
|
return function() {
|
|
this.renderWidth = 512, this.renderHeight = 256, this.textureSize = 512, this.deterministicLockstep = !1, this.lockstepMaxSteps = 4
|
|
}
|
|
}(),
|
|
h = function(t) {
|
|
function i(i) {
|
|
void 0 === i && (i = new u);
|
|
var n = t.call(this, null) || this;
|
|
void 0 === i.deterministicLockstep && (i.deterministicLockstep = !1), void 0 === i.lockstepMaxSteps && (i.lockstepMaxSteps = 4), n._options = i, n._caps = new o.c, n._caps.maxTexturesImageUnits = 16, n._caps.maxVertexTextureImageUnits = 16, n._caps.maxTextureSize = 512, n._caps.maxCubemapTextureSize = 512, n._caps.maxRenderTextureSize = 512, n._caps.maxVertexAttribs = 16, n._caps.maxVaryingVectors = 16, n._caps.maxFragmentUniformVectors = 16, n._caps.maxVertexUniformVectors = 16, n._caps.standardDerivatives = !1, n._caps.astc = null, n._caps.s3tc = null, n._caps.pvrtc = null, n._caps.etc1 = null, n._caps.etc2 = null, n._caps.textureAnisotropicFilterExtension = null, n._caps.maxAnisotropy = 0, n._caps.uintIndices = !1, n._caps.fragmentDepthSupported = !1, n._caps.highPrecisionShaderSupported = !0, n._caps.colorBufferFloat = !1, n._caps.textureFloat = !1, n._caps.textureFloatLinearFiltering = !1, n._caps.textureFloatRender = !1, n._caps.textureHalfFloat = !1, n._caps.textureHalfFloatLinearFiltering = !1, n._caps.textureHalfFloatRender = !1, n._caps.textureLOD = !1, n._caps.drawBuffersExtension = !1, n._caps.depthTextureExtension = !1, n._caps.vertexArrayObject = !1, n._caps.instancedArrays = !1, r.a.Log("Babylon.js v" + o.b.Version + " - Null engine");
|
|
var s = "undefined" != typeof self ? self : void 0 !== e ? e : window;
|
|
return "undefined" == typeof URL && (s.URL = {
|
|
createObjectURL: function() {},
|
|
revokeObjectURL: function() {}
|
|
}), "undefined" == typeof Blob && (s.Blob = function() {}), n
|
|
}
|
|
return n.d(i, t), i.prototype.isDeterministicLockStep = function() {
|
|
return this._options.deterministicLockstep
|
|
}, i.prototype.getLockstepMaxSteps = function() {
|
|
return this._options.lockstepMaxSteps
|
|
}, i.prototype.getHardwareScalingLevel = function() {
|
|
return 1
|
|
}, i.prototype.createVertexBuffer = function(e) {
|
|
var t = new l.a;
|
|
return t.references = 1, t
|
|
}, i.prototype.createIndexBuffer = function(e) {
|
|
var t = new l.a;
|
|
return t.references = 1, t
|
|
}, i.prototype.clear = function(e, t, i, n) {
|
|
void 0 === n && (n = !1)
|
|
}, i.prototype.getRenderWidth = function(e) {
|
|
return void 0 === e && (e = !1), !e && this._currentRenderTarget ? this._currentRenderTarget.width : this._options.renderWidth
|
|
}, i.prototype.getRenderHeight = function(e) {
|
|
return void 0 === e && (e = !1), !e && this._currentRenderTarget ? this._currentRenderTarget.height : this._options.renderHeight
|
|
}, i.prototype.setViewport = function(e, t, i) {
|
|
this._cachedViewport = e
|
|
}, i.prototype.createShaderProgram = function(e, t, i, n, r) {
|
|
return {
|
|
__SPECTOR_rebuildProgram: null
|
|
}
|
|
}, i.prototype.getUniforms = function(e, t) {
|
|
return []
|
|
}, i.prototype.getAttributes = function(e, t) {
|
|
return []
|
|
}, i.prototype.bindSamplers = function(e) {
|
|
this._currentEffect = null
|
|
}, i.prototype.enableEffect = function(e) {
|
|
this._currentEffect = e, e.onBind && e.onBind(e), e._onBindObservable && e._onBindObservable.notifyObservers(e)
|
|
}, i.prototype.setState = function(e, t, i, n) {
|
|
void 0 === t && (t = 0), void 0 === n && (n = !1)
|
|
}, i.prototype.setIntArray = function(e, t) {}, i.prototype.setIntArray2 = function(e, t) {}, i.prototype.setIntArray3 = function(e, t) {}, i.prototype.setIntArray4 = function(e, t) {}, i.prototype.setFloatArray = function(e, t) {}, i.prototype.setFloatArray2 = function(e, t) {}, i.prototype.setFloatArray3 = function(e, t) {}, i.prototype.setFloatArray4 = function(e, t) {}, i.prototype.setArray = function(e, t) {}, i.prototype.setArray2 = function(e, t) {}, i.prototype.setArray3 = function(e, t) {}, i.prototype.setArray4 = function(e, t) {}, i.prototype.setMatrices = function(e, t) {}, i.prototype.setMatrix = function(e, t) {}, i.prototype.setMatrix3x3 = function(e, t) {}, i.prototype.setMatrix2x2 = function(e, t) {}, i.prototype.setFloat = function(e, t) {}, i.prototype.setFloat2 = function(e, t, i) {}, i.prototype.setFloat3 = function(e, t, i, n) {}, i.prototype.setBool = function(e, t) {}, i.prototype.setFloat4 = function(e, t, i, n, r) {}, i.prototype.setColor3 = function(e, t) {}, i.prototype.setColor4 = function(e, t, i) {}, i.prototype.setAlphaMode = function(e, t) {
|
|
void 0 === t && (t = !1), this._alphaMode !== e && (this._alphaState.alphaBlend = e !== c.a.ALPHA_DISABLE, t || this.setDepthWrite(e === c.a.ALPHA_DISABLE), this._alphaMode = e)
|
|
}, i.prototype.bindBuffers = function(e, t, i) {}, i.prototype.wipeCaches = function(e) {
|
|
this.preventCacheWipeBetweenFrames || (this.resetTextureCache(), this._currentEffect = null, e && (this._currentProgram = null, this._stencilState.reset(), this._depthCullingState.reset(), this._alphaState.reset()), this._cachedVertexBuffers = null, this._cachedIndexBuffer = null, this._cachedEffectForVertexBuffers = null)
|
|
}, i.prototype.draw = function(e, t, i, n) {}, i.prototype.drawElementsType = function(e, t, i, n) {}, i.prototype.drawArraysType = function(e, t, i, n) {}, i.prototype._createTexture = function() {
|
|
return {}
|
|
}, i.prototype._releaseTexture = function(e) {}, i.prototype.createTexture = function(e, t, i, n, r, o, s, l, u, h) {
|
|
void 0 === r && (r = c.a.TEXTURE_TRILINEAR_SAMPLINGMODE), void 0 === o && (o = null), void 0 === s && (s = null), void 0 === l && (l = null);
|
|
var d = new a.a(this, a.a.DATASOURCE_URL),
|
|
f = String(e);
|
|
return d.url = f, d.generateMipMaps = !t, d.samplingMode = r, d.invertY = i, d.baseWidth = this._options.textureSize, d.baseHeight = this._options.textureSize, d.width = this._options.textureSize, d.height = this._options.textureSize, h && (d.format = h), d.isReady = !0, o && o(), this._internalTexturesCache.push(d), d
|
|
}, i.prototype.createRenderTargetTexture = function(e, t) {
|
|
var i = new s.a;
|
|
void 0 !== t && "object" == typeof t ? (i.generateMipMaps = t.generateMipMaps, i.generateDepthBuffer = void 0 === t.generateDepthBuffer || t.generateDepthBuffer, i.generateStencilBuffer = i.generateDepthBuffer && t.generateStencilBuffer, i.type = void 0 === t.type ? c.a.TEXTURETYPE_UNSIGNED_INT : t.type, i.samplingMode = void 0 === t.samplingMode ? c.a.TEXTURE_TRILINEAR_SAMPLINGMODE : t.samplingMode) : (i.generateMipMaps = t, i.generateDepthBuffer = !0, i.generateStencilBuffer = !1, i.type = c.a.TEXTURETYPE_UNSIGNED_INT, i.samplingMode = c.a.TEXTURE_TRILINEAR_SAMPLINGMODE);
|
|
var n = new a.a(this, a.a.DATASOURCE_RENDERTARGET),
|
|
r = e.width || e,
|
|
o = e.height || e;
|
|
return n._depthStencilBuffer = {}, n._framebuffer = {}, n.baseWidth = r, n.baseHeight = o, n.width = r, n.height = o, n.isReady = !0, n.samples = 1, n.generateMipMaps = !!i.generateMipMaps, n.samplingMode = i.samplingMode, n.type = i.type, n._generateDepthBuffer = i.generateDepthBuffer, n._generateStencilBuffer = !!i.generateStencilBuffer, this._internalTexturesCache.push(n), n
|
|
}, i.prototype.updateTextureSamplingMode = function(e, t) {
|
|
t.samplingMode = e
|
|
}, i.prototype.bindFramebuffer = function(e, t, i, n, r) {
|
|
this._currentRenderTarget && this.unBindFramebuffer(this._currentRenderTarget), this._currentRenderTarget = e, this._currentFramebuffer = e._MSAAFramebuffer ? e._MSAAFramebuffer : e._framebuffer, this._cachedViewport && !r && this.setViewport(this._cachedViewport, i, n)
|
|
}, i.prototype.unBindFramebuffer = function(e, t, i) {
|
|
void 0 === t && (t = !1), this._currentRenderTarget = null, i && (e._MSAAFramebuffer && (this._currentFramebuffer = e._framebuffer), i()), this._currentFramebuffer = null
|
|
}, i.prototype.createDynamicVertexBuffer = function(e) {
|
|
var t = new l.a;
|
|
return t.references = 1, t.capacity = 1, t
|
|
}, i.prototype.updateDynamicTexture = function(e, t, i, n, r) {
|
|
void 0 === n && (n = !1)
|
|
}, i.prototype.areAllEffectsReady = function() {
|
|
return !0
|
|
}, i.prototype.getError = function() {
|
|
return 0
|
|
}, i.prototype._getUnpackAlignement = function() {
|
|
return 1
|
|
}, i.prototype._unpackFlipY = function(e) {}, i.prototype.updateDynamicIndexBuffer = function(e, t, i) {
|
|
void 0 === i && (i = 0)
|
|
}, i.prototype.updateDynamicVertexBuffer = function(e, t, i, n) {}, i.prototype._bindTextureDirectly = function(e, t) {
|
|
return this._boundTexturesCache[this._activeChannel] !== t && (this._boundTexturesCache[this._activeChannel] = t, !0)
|
|
}, i.prototype._bindTexture = function(e, t) {
|
|
e < 0 || this._bindTextureDirectly(0, t)
|
|
}, i.prototype._releaseBuffer = function(e) {
|
|
return e.references--, 0 === e.references
|
|
}, i.prototype.releaseEffects = function() {}, i.prototype.displayLoadingUI = function() {}, i.prototype.hideLoadingUI = function() {}, i.prototype._uploadCompressedDataToTextureDirectly = function(e, t, i, n, r, o, s) {
|
|
void 0 === o && (o = 0), void 0 === s && (s = 0)
|
|
}, i.prototype._uploadDataToTextureDirectly = function(e, t, i, n) {
|
|
void 0 === i && (i = 0), void 0 === n && (n = 0)
|
|
}, i.prototype._uploadArrayBufferViewToTexture = function(e, t, i, n) {
|
|
void 0 === i && (i = 0), void 0 === n && (n = 0)
|
|
}, i.prototype._uploadImageToTexture = function(e, t, i, n) {
|
|
void 0 === i && (i = 0), void 0 === n && (n = 0)
|
|
}, i
|
|
}(o.b)
|
|
}).call(this, i(119))
|
|
}, function(e, t, i) {
|
|
"use strict";
|
|
i.r(t),
|
|
function(e) {
|
|
i.d(t, "Debug", function() {
|
|
return l
|
|
});
|
|
var n = i(97),
|
|
r = i(74);
|
|
i.d(t, "AbstractScene", function() {
|
|
return n.AbstractScene
|
|
}), i.d(t, "KeepAssets", function() {
|
|
return n.KeepAssets
|
|
}), i.d(t, "AssetContainer", function() {
|
|
return n.AssetContainer
|
|
}), i.d(t, "Node", function() {
|
|
return n.Node
|
|
}), i.d(t, "Scene", function() {
|
|
return n.Scene
|
|
}), i.d(t, "SceneComponentConstants", function() {
|
|
return n.SceneComponentConstants
|
|
}), i.d(t, "Stage", function() {
|
|
return n.Stage
|
|
}), i.d(t, "Action", function() {
|
|
return n.Action
|
|
}), i.d(t, "ActionEvent", function() {
|
|
return n.ActionEvent
|
|
}), i.d(t, "ActionManager", function() {
|
|
return n.ActionManager
|
|
}), i.d(t, "Condition", function() {
|
|
return n.Condition
|
|
}), i.d(t, "ValueCondition", function() {
|
|
return n.ValueCondition
|
|
}), i.d(t, "PredicateCondition", function() {
|
|
return n.PredicateCondition
|
|
}), i.d(t, "StateCondition", function() {
|
|
return n.StateCondition
|
|
}), i.d(t, "SwitchBooleanAction", function() {
|
|
return n.SwitchBooleanAction
|
|
}), i.d(t, "SetStateAction", function() {
|
|
return n.SetStateAction
|
|
}), i.d(t, "SetValueAction", function() {
|
|
return n.SetValueAction
|
|
}), i.d(t, "IncrementValueAction", function() {
|
|
return n.IncrementValueAction
|
|
}), i.d(t, "PlayAnimationAction", function() {
|
|
return n.PlayAnimationAction
|
|
}), i.d(t, "StopAnimationAction", function() {
|
|
return n.StopAnimationAction
|
|
}), i.d(t, "DoNothingAction", function() {
|
|
return n.DoNothingAction
|
|
}), i.d(t, "CombineAction", function() {
|
|
return n.CombineAction
|
|
}), i.d(t, "ExecuteCodeAction", function() {
|
|
return n.ExecuteCodeAction
|
|
}), i.d(t, "SetParentAction", function() {
|
|
return n.SetParentAction
|
|
}), i.d(t, "PlaySoundAction", function() {
|
|
return n.PlaySoundAction
|
|
}), i.d(t, "StopSoundAction", function() {
|
|
return n.StopSoundAction
|
|
}), i.d(t, "InterpolateValueAction", function() {
|
|
return n.InterpolateValueAction
|
|
}), i.d(t, "Animatable", function() {
|
|
return n.Animatable
|
|
}), i.d(t, "_IAnimationState", function() {
|
|
return n._IAnimationState
|
|
}), i.d(t, "Animation", function() {
|
|
return n.Animation
|
|
}), i.d(t, "TargetedAnimation", function() {
|
|
return n.TargetedAnimation
|
|
}), i.d(t, "AnimationGroup", function() {
|
|
return n.AnimationGroup
|
|
}), i.d(t, "AnimationPropertiesOverride", function() {
|
|
return n.AnimationPropertiesOverride
|
|
}), i.d(t, "EasingFunction", function() {
|
|
return n.EasingFunction
|
|
}), i.d(t, "CircleEase", function() {
|
|
return n.CircleEase
|
|
}), i.d(t, "BackEase", function() {
|
|
return n.BackEase
|
|
}), i.d(t, "BounceEase", function() {
|
|
return n.BounceEase
|
|
}), i.d(t, "CubicEase", function() {
|
|
return n.CubicEase
|
|
}), i.d(t, "ElasticEase", function() {
|
|
return n.ElasticEase
|
|
}), i.d(t, "ExponentialEase", function() {
|
|
return n.ExponentialEase
|
|
}), i.d(t, "PowerEase", function() {
|
|
return n.PowerEase
|
|
}), i.d(t, "QuadraticEase", function() {
|
|
return n.QuadraticEase
|
|
}), i.d(t, "QuarticEase", function() {
|
|
return n.QuarticEase
|
|
}), i.d(t, "QuinticEase", function() {
|
|
return n.QuinticEase
|
|
}), i.d(t, "SineEase", function() {
|
|
return n.SineEase
|
|
}), i.d(t, "BezierCurveEase", function() {
|
|
return n.BezierCurveEase
|
|
}), i.d(t, "RuntimeAnimation", function() {
|
|
return n.RuntimeAnimation
|
|
}), i.d(t, "AnimationEvent", function() {
|
|
return n.AnimationEvent
|
|
}), i.d(t, "AnimationKeyInterpolation", function() {
|
|
return n.AnimationKeyInterpolation
|
|
}), i.d(t, "AnimationRange", function() {
|
|
return n.AnimationRange
|
|
}), i.d(t, "Analyser", function() {
|
|
return n.Analyser
|
|
}), i.d(t, "AudioEngine", function() {
|
|
return n.AudioEngine
|
|
}), i.d(t, "AudioSceneComponent", function() {
|
|
return n.AudioSceneComponent
|
|
}), i.d(t, "Sound", function() {
|
|
return n.Sound
|
|
}), i.d(t, "SoundTrack", function() {
|
|
return n.SoundTrack
|
|
}), i.d(t, "WeightedSound", function() {
|
|
return n.WeightedSound
|
|
}), i.d(t, "Bone", function() {
|
|
return n.Bone
|
|
}), i.d(t, "BoneIKController", function() {
|
|
return n.BoneIKController
|
|
}), i.d(t, "BoneLookController", function() {
|
|
return n.BoneLookController
|
|
}), i.d(t, "Skeleton", function() {
|
|
return n.Skeleton
|
|
}), i.d(t, "CameraInputTypes", function() {
|
|
return n.CameraInputTypes
|
|
}), i.d(t, "CameraInputsManager", function() {
|
|
return n.CameraInputsManager
|
|
}), i.d(t, "Camera", function() {
|
|
return n.Camera
|
|
}), i.d(t, "TargetCamera", function() {
|
|
return n.TargetCamera
|
|
}), i.d(t, "FreeCamera", function() {
|
|
return n.FreeCamera
|
|
}), i.d(t, "FreeCameraInputsManager", function() {
|
|
return n.FreeCameraInputsManager
|
|
}), i.d(t, "TouchCamera", function() {
|
|
return n.TouchCamera
|
|
}), i.d(t, "ArcRotateCamera", function() {
|
|
return n.ArcRotateCamera
|
|
}), i.d(t, "ArcRotateCameraInputsManager", function() {
|
|
return n.ArcRotateCameraInputsManager
|
|
}), i.d(t, "DeviceOrientationCamera", function() {
|
|
return n.DeviceOrientationCamera
|
|
}), i.d(t, "FlyCamera", function() {
|
|
return n.FlyCamera
|
|
}), i.d(t, "FlyCameraInputsManager", function() {
|
|
return n.FlyCameraInputsManager
|
|
}), i.d(t, "FollowCamera", function() {
|
|
return n.FollowCamera
|
|
}), i.d(t, "ArcFollowCamera", function() {
|
|
return n.ArcFollowCamera
|
|
}), i.d(t, "GamepadCamera", function() {
|
|
return n.GamepadCamera
|
|
}), i.d(t, "UniversalCamera", function() {
|
|
return n.UniversalCamera
|
|
}), i.d(t, "VirtualJoysticksCamera", function() {
|
|
return n.VirtualJoysticksCamera
|
|
}), i.d(t, "Collider", function() {
|
|
return n.Collider
|
|
}), i.d(t, "DefaultCollisionCoordinator", function() {
|
|
return n.DefaultCollisionCoordinator
|
|
}), i.d(t, "PickingInfo", function() {
|
|
return n.PickingInfo
|
|
}), i.d(t, "IntersectionInfo", function() {
|
|
return n.IntersectionInfo
|
|
}), i.d(t, "_MeshCollisionData", function() {
|
|
return n._MeshCollisionData
|
|
}), i.d(t, "BoundingBox", function() {
|
|
return n.BoundingBox
|
|
}), i.d(t, "BoundingInfo", function() {
|
|
return n.BoundingInfo
|
|
}), i.d(t, "BoundingSphere", function() {
|
|
return n.BoundingSphere
|
|
}), i.d(t, "Ray", function() {
|
|
return n.Ray
|
|
}), i.d(t, "AxesViewer", function() {
|
|
return n.AxesViewer
|
|
}), i.d(t, "BoneAxesViewer", function() {
|
|
return n.BoneAxesViewer
|
|
}), i.d(t, "DebugLayer", function() {
|
|
return n.DebugLayer
|
|
}), i.d(t, "PhysicsViewer", function() {
|
|
return n.PhysicsViewer
|
|
}), i.d(t, "RayHelper", function() {
|
|
return n.RayHelper
|
|
}), i.d(t, "SkeletonViewer", function() {
|
|
return n.SkeletonViewer
|
|
}), i.d(t, "Constants", function() {
|
|
return n.Constants
|
|
}), i.d(t, "InstancingAttributeInfo", function() {
|
|
return n.InstancingAttributeInfo
|
|
}), i.d(t, "DepthTextureCreationOptions", function() {
|
|
return n.DepthTextureCreationOptions
|
|
}), i.d(t, "EngineCapabilities", function() {
|
|
return n.EngineCapabilities
|
|
}), i.d(t, "Engine", function() {
|
|
return n.Engine
|
|
}), i.d(t, "EngineStore", function() {
|
|
return n.EngineStore
|
|
}), i.d(t, "NullEngineOptions", function() {
|
|
return n.NullEngineOptions
|
|
}), i.d(t, "NullEngine", function() {
|
|
return n.NullEngine
|
|
}), i.d(t, "WebGLPipelineContext", function() {
|
|
return n.WebGLPipelineContext
|
|
}), i.d(t, "KeyboardEventTypes", function() {
|
|
return n.KeyboardEventTypes
|
|
}), i.d(t, "KeyboardInfo", function() {
|
|
return n.KeyboardInfo
|
|
}), i.d(t, "KeyboardInfoPre", function() {
|
|
return n.KeyboardInfoPre
|
|
}), i.d(t, "PointerEventTypes", function() {
|
|
return n.PointerEventTypes
|
|
}), i.d(t, "PointerInfoBase", function() {
|
|
return n.PointerInfoBase
|
|
}), i.d(t, "PointerInfoPre", function() {
|
|
return n.PointerInfoPre
|
|
}), i.d(t, "PointerInfo", function() {
|
|
return n.PointerInfo
|
|
}), i.d(t, "ClipboardEventTypes", function() {
|
|
return n.ClipboardEventTypes
|
|
}), i.d(t, "ClipboardInfo", function() {
|
|
return n.ClipboardInfo
|
|
}), i.d(t, "DaydreamController", function() {
|
|
return n.DaydreamController
|
|
}), i.d(t, "GearVRController", function() {
|
|
return n.GearVRController
|
|
}), i.d(t, "GenericController", function() {
|
|
return n.GenericController
|
|
}), i.d(t, "OculusTouchController", function() {
|
|
return n.OculusTouchController
|
|
}), i.d(t, "PoseEnabledControllerType", function() {
|
|
return n.PoseEnabledControllerType
|
|
}), i.d(t, "PoseEnabledControllerHelper", function() {
|
|
return n.PoseEnabledControllerHelper
|
|
}), i.d(t, "PoseEnabledController", function() {
|
|
return n.PoseEnabledController
|
|
}), i.d(t, "ViveController", function() {
|
|
return n.ViveController
|
|
}), i.d(t, "WebVRController", function() {
|
|
return n.WebVRController
|
|
}), i.d(t, "WindowsMotionController", function() {
|
|
return n.WindowsMotionController
|
|
}), i.d(t, "StickValues", function() {
|
|
return n.StickValues
|
|
}), i.d(t, "Gamepad", function() {
|
|
return n.Gamepad
|
|
}), i.d(t, "GenericPad", function() {
|
|
return n.GenericPad
|
|
}), i.d(t, "GamepadManager", function() {
|
|
return n.GamepadManager
|
|
}), i.d(t, "GamepadSystemSceneComponent", function() {
|
|
return n.GamepadSystemSceneComponent
|
|
}), i.d(t, "Xbox360Button", function() {
|
|
return n.Xbox360Button
|
|
}), i.d(t, "Xbox360Dpad", function() {
|
|
return n.Xbox360Dpad
|
|
}), i.d(t, "Xbox360Pad", function() {
|
|
return n.Xbox360Pad
|
|
}), i.d(t, "AxisDragGizmo", function() {
|
|
return n.AxisDragGizmo
|
|
}), i.d(t, "AxisScaleGizmo", function() {
|
|
return n.AxisScaleGizmo
|
|
}), i.d(t, "BoundingBoxGizmo", function() {
|
|
return n.BoundingBoxGizmo
|
|
}), i.d(t, "Gizmo", function() {
|
|
return n.Gizmo
|
|
}), i.d(t, "GizmoManager", function() {
|
|
return n.GizmoManager
|
|
}), i.d(t, "PlaneRotationGizmo", function() {
|
|
return n.PlaneRotationGizmo
|
|
}), i.d(t, "PositionGizmo", function() {
|
|
return n.PositionGizmo
|
|
}), i.d(t, "RotationGizmo", function() {
|
|
return n.RotationGizmo
|
|
}), i.d(t, "ScaleGizmo", function() {
|
|
return n.ScaleGizmo
|
|
}), i.d(t, "LightGizmo", function() {
|
|
return n.LightGizmo
|
|
}), i.d(t, "EnvironmentHelper", function() {
|
|
return n.EnvironmentHelper
|
|
}), i.d(t, "PhotoDome", function() {
|
|
return n.PhotoDome
|
|
}), i.d(t, "_forceSceneHelpersToBundle", function() {
|
|
return n._forceSceneHelpersToBundle
|
|
}), i.d(t, "VideoDome", function() {
|
|
return n.VideoDome
|
|
}), i.d(t, "EngineInstrumentation", function() {
|
|
return n.EngineInstrumentation
|
|
}), i.d(t, "SceneInstrumentation", function() {
|
|
return n.SceneInstrumentation
|
|
}), i.d(t, "_TimeToken", function() {
|
|
return n._TimeToken
|
|
}), i.d(t, "EffectLayer", function() {
|
|
return n.EffectLayer
|
|
}), i.d(t, "EffectLayerSceneComponent", function() {
|
|
return n.EffectLayerSceneComponent
|
|
}), i.d(t, "GlowLayer", function() {
|
|
return n.GlowLayer
|
|
}), i.d(t, "HighlightLayer", function() {
|
|
return n.HighlightLayer
|
|
}), i.d(t, "Layer", function() {
|
|
return n.Layer
|
|
}), i.d(t, "LayerSceneComponent", function() {
|
|
return n.LayerSceneComponent
|
|
}), i.d(t, "LensFlare", function() {
|
|
return n.LensFlare
|
|
}), i.d(t, "LensFlareSystem", function() {
|
|
return n.LensFlareSystem
|
|
}), i.d(t, "LensFlareSystemSceneComponent", function() {
|
|
return n.LensFlareSystemSceneComponent
|
|
}), i.d(t, "Light", function() {
|
|
return n.Light
|
|
}), i.d(t, "ShadowLight", function() {
|
|
return n.ShadowLight
|
|
}), i.d(t, "DirectionalLight", function() {
|
|
return n.DirectionalLight
|
|
}), i.d(t, "HemisphericLight", function() {
|
|
return n.HemisphericLight
|
|
}), i.d(t, "PointLight", function() {
|
|
return n.PointLight
|
|
}), i.d(t, "SpotLight", function() {
|
|
return n.SpotLight
|
|
}), i.d(t, "DefaultLoadingScreen", function() {
|
|
return n.DefaultLoadingScreen
|
|
}), i.d(t, "SceneLoaderProgressEvent", function() {
|
|
return n.SceneLoaderProgressEvent
|
|
}), i.d(t, "SceneLoader", function() {
|
|
return n.SceneLoader
|
|
}), i.d(t, "SceneLoaderFlags", function() {
|
|
return n.SceneLoaderFlags
|
|
}), i.d(t, "ColorCurves", function() {
|
|
return n.ColorCurves
|
|
}), i.d(t, "EffectFallbacks", function() {
|
|
return n.EffectFallbacks
|
|
}), i.d(t, "EffectCreationOptions", function() {
|
|
return n.EffectCreationOptions
|
|
}), i.d(t, "Effect", function() {
|
|
return n.Effect
|
|
}), i.d(t, "FresnelParameters", function() {
|
|
return n.FresnelParameters
|
|
}), i.d(t, "ImageProcessingConfigurationDefines", function() {
|
|
return n.ImageProcessingConfigurationDefines
|
|
}), i.d(t, "ImageProcessingConfiguration", function() {
|
|
return n.ImageProcessingConfiguration
|
|
}), i.d(t, "Material", function() {
|
|
return n.Material
|
|
}), i.d(t, "MaterialDefines", function() {
|
|
return n.MaterialDefines
|
|
}), i.d(t, "MaterialHelper", function() {
|
|
return n.MaterialHelper
|
|
}), i.d(t, "MultiMaterial", function() {
|
|
return n.MultiMaterial
|
|
}), i.d(t, "PushMaterial", function() {
|
|
return n.PushMaterial
|
|
}), i.d(t, "ShaderMaterial", function() {
|
|
return n.ShaderMaterial
|
|
}), i.d(t, "StandardMaterialDefines", function() {
|
|
return n.StandardMaterialDefines
|
|
}), i.d(t, "StandardMaterial", function() {
|
|
return n.StandardMaterial
|
|
}), i.d(t, "BaseTexture", function() {
|
|
return n.BaseTexture
|
|
}), i.d(t, "CubeTexture", function() {
|
|
return n.CubeTexture
|
|
}), i.d(t, "EquiRectangularCubeTexture", function() {
|
|
return n.EquiRectangularCubeTexture
|
|
}), i.d(t, "HDRCubeTexture", function() {
|
|
return n.HDRCubeTexture
|
|
}), i.d(t, "InternalTexture", function() {
|
|
return n.InternalTexture
|
|
}), i.d(t, "MirrorTexture", function() {
|
|
return n.MirrorTexture
|
|
}), i.d(t, "MultiRenderTarget", function() {
|
|
return n.MultiRenderTarget
|
|
}), i.d(t, "RenderTargetTexture", function() {
|
|
return n.RenderTargetTexture
|
|
}), i.d(t, "Texture", function() {
|
|
return n.Texture
|
|
}), i.d(t, "UniformBuffer", function() {
|
|
return n.UniformBuffer
|
|
}), i.d(t, "MaterialFlags", function() {
|
|
return n.MaterialFlags
|
|
}), i.d(t, "Scalar", function() {
|
|
return n.Scalar
|
|
}), i.d(t, "ToGammaSpace", function() {
|
|
return n.ToGammaSpace
|
|
}), i.d(t, "ToLinearSpace", function() {
|
|
return n.ToLinearSpace
|
|
}), i.d(t, "Epsilon", function() {
|
|
return n.Epsilon
|
|
}), i.d(t, "Color3", function() {
|
|
return n.Color3
|
|
}), i.d(t, "Color4", function() {
|
|
return n.Color4
|
|
}), i.d(t, "Vector2", function() {
|
|
return n.Vector2
|
|
}), i.d(t, "Vector3", function() {
|
|
return n.Vector3
|
|
}), i.d(t, "Vector4", function() {
|
|
return n.Vector4
|
|
}), i.d(t, "Size", function() {
|
|
return n.Size
|
|
}), i.d(t, "Quaternion", function() {
|
|
return n.Quaternion
|
|
}), i.d(t, "Matrix", function() {
|
|
return n.Matrix
|
|
}), i.d(t, "Plane", function() {
|
|
return n.Plane
|
|
}), i.d(t, "Viewport", function() {
|
|
return n.Viewport
|
|
}), i.d(t, "Frustum", function() {
|
|
return n.Frustum
|
|
}), i.d(t, "Space", function() {
|
|
return n.Space
|
|
}), i.d(t, "Axis", function() {
|
|
return n.Axis
|
|
}), i.d(t, "BezierCurve", function() {
|
|
return n.BezierCurve
|
|
}), i.d(t, "Orientation", function() {
|
|
return n.Orientation
|
|
}), i.d(t, "Angle", function() {
|
|
return n.Angle
|
|
}), i.d(t, "Arc2", function() {
|
|
return n.Arc2
|
|
}), i.d(t, "Path2", function() {
|
|
return n.Path2
|
|
}), i.d(t, "Path3D", function() {
|
|
return n.Path3D
|
|
}), i.d(t, "Curve3", function() {
|
|
return n.Curve3
|
|
}), i.d(t, "PositionNormalVertex", function() {
|
|
return n.PositionNormalVertex
|
|
}), i.d(t, "PositionNormalTextureVertex", function() {
|
|
return n.PositionNormalTextureVertex
|
|
}), i.d(t, "Tmp", function() {
|
|
return n.Tmp
|
|
}), i.d(t, "SphericalHarmonics", function() {
|
|
return n.SphericalHarmonics
|
|
}), i.d(t, "SphericalPolynomial", function() {
|
|
return n.SphericalPolynomial
|
|
}), i.d(t, "AbstractMesh", function() {
|
|
return n.AbstractMesh
|
|
}), i.d(t, "Buffer", function() {
|
|
return n.Buffer
|
|
}), i.d(t, "VertexBuffer", function() {
|
|
return n.VertexBuffer
|
|
}), i.d(t, "CSG", function() {
|
|
return n.CSG
|
|
}), i.d(t, "Geometry", function() {
|
|
return n.Geometry
|
|
}), i.d(t, "GroundMesh", function() {
|
|
return n.GroundMesh
|
|
}), i.d(t, "TrailMesh", function() {
|
|
return n.TrailMesh
|
|
}), i.d(t, "InstancedMesh", function() {
|
|
return n.InstancedMesh
|
|
}), i.d(t, "LinesMesh", function() {
|
|
return n.LinesMesh
|
|
}), i.d(t, "InstancedLinesMesh", function() {
|
|
return n.InstancedLinesMesh
|
|
}), i.d(t, "_CreationDataStorage", function() {
|
|
return n._CreationDataStorage
|
|
}), i.d(t, "_InstancesBatch", function() {
|
|
return n._InstancesBatch
|
|
}), i.d(t, "Mesh", function() {
|
|
return n.Mesh
|
|
}), i.d(t, "VertexData", function() {
|
|
return n.VertexData
|
|
}), i.d(t, "MeshBuilder", function() {
|
|
return n.MeshBuilder
|
|
}), i.d(t, "SimplificationSettings", function() {
|
|
return n.SimplificationSettings
|
|
}), i.d(t, "SimplificationQueue", function() {
|
|
return n.SimplificationQueue
|
|
}), i.d(t, "SimplificationType", function() {
|
|
return n.SimplificationType
|
|
}), i.d(t, "SimplicationQueueSceneComponent", function() {
|
|
return n.SimplicationQueueSceneComponent
|
|
}), i.d(t, "Polygon", function() {
|
|
return n.Polygon
|
|
}), i.d(t, "PolygonMeshBuilder", function() {
|
|
return n.PolygonMeshBuilder
|
|
}), i.d(t, "BaseSubMesh", function() {
|
|
return n.BaseSubMesh
|
|
}), i.d(t, "SubMesh", function() {
|
|
return n.SubMesh
|
|
}), i.d(t, "MeshLODLevel", function() {
|
|
return n.MeshLODLevel
|
|
}), i.d(t, "TransformNode", function() {
|
|
return n.TransformNode
|
|
}), i.d(t, "BoxBuilder", function() {
|
|
return n.BoxBuilder
|
|
}), i.d(t, "SphereBuilder", function() {
|
|
return n.SphereBuilder
|
|
}), i.d(t, "CylinderBuilder", function() {
|
|
return n.CylinderBuilder
|
|
}), i.d(t, "LinesBuilder", function() {
|
|
return n.LinesBuilder
|
|
}), i.d(t, "PlaneBuilder", function() {
|
|
return n.PlaneBuilder
|
|
}), i.d(t, "DataBuffer", function() {
|
|
return n.DataBuffer
|
|
}), i.d(t, "WebGLDataBuffer", function() {
|
|
return n.WebGLDataBuffer
|
|
}), i.d(t, "MorphTarget", function() {
|
|
return n.MorphTarget
|
|
}), i.d(t, "MorphTargetManager", function() {
|
|
return n.MorphTargetManager
|
|
}), i.d(t, "Database", function() {
|
|
return n.Database
|
|
}), i.d(t, "BaseParticleSystem", function() {
|
|
return n.BaseParticleSystem
|
|
}), i.d(t, "GPUParticleSystem", function() {
|
|
return n.GPUParticleSystem
|
|
}), i.d(t, "Particle", function() {
|
|
return n.Particle
|
|
}), i.d(t, "ParticleHelper", function() {
|
|
return n.ParticleHelper
|
|
}), i.d(t, "ParticleSystem", function() {
|
|
return n.ParticleSystem
|
|
}), i.d(t, "_IDoNeedToBeInTheBuild", function() {
|
|
return n._IDoNeedToBeInTheBuild
|
|
}), i.d(t, "ParticleSystemSet", function() {
|
|
return n.ParticleSystemSet
|
|
}), i.d(t, "SolidParticle", function() {
|
|
return n.SolidParticle
|
|
}), i.d(t, "ModelShape", function() {
|
|
return n.ModelShape
|
|
}), i.d(t, "DepthSortedParticle", function() {
|
|
return n.DepthSortedParticle
|
|
}), i.d(t, "SolidParticleSystem", function() {
|
|
return n.SolidParticleSystem
|
|
}), i.d(t, "SubEmitterType", function() {
|
|
return n.SubEmitterType
|
|
}), i.d(t, "SubEmitter", function() {
|
|
return n.SubEmitter
|
|
}), i.d(t, "PhysicsEngine", function() {
|
|
return n.PhysicsEngine
|
|
}), i.d(t, "PhysicsEngineSceneComponent", function() {
|
|
return n.PhysicsEngineSceneComponent
|
|
}), i.d(t, "PhysicsHelper", function() {
|
|
return n.PhysicsHelper
|
|
}), i.d(t, "PhysicsRadialExplosionEventOptions", function() {
|
|
return n.PhysicsRadialExplosionEventOptions
|
|
}), i.d(t, "PhysicsUpdraftEventOptions", function() {
|
|
return n.PhysicsUpdraftEventOptions
|
|
}), i.d(t, "PhysicsVortexEventOptions", function() {
|
|
return n.PhysicsVortexEventOptions
|
|
}), i.d(t, "PhysicsRadialImpulseFalloff", function() {
|
|
return n.PhysicsRadialImpulseFalloff
|
|
}), i.d(t, "PhysicsUpdraftMode", function() {
|
|
return n.PhysicsUpdraftMode
|
|
}), i.d(t, "PhysicsImpostor", function() {
|
|
return n.PhysicsImpostor
|
|
}), i.d(t, "PhysicsJoint", function() {
|
|
return n.PhysicsJoint
|
|
}), i.d(t, "DistanceJoint", function() {
|
|
return n.DistanceJoint
|
|
}), i.d(t, "MotorEnabledJoint", function() {
|
|
return n.MotorEnabledJoint
|
|
}), i.d(t, "HingeJoint", function() {
|
|
return n.HingeJoint
|
|
}), i.d(t, "Hinge2Joint", function() {
|
|
return n.Hinge2Joint
|
|
}), i.d(t, "AnaglyphPostProcess", function() {
|
|
return n.AnaglyphPostProcess
|
|
}), i.d(t, "BlackAndWhitePostProcess", function() {
|
|
return n.BlackAndWhitePostProcess
|
|
}), i.d(t, "BloomEffect", function() {
|
|
return n.BloomEffect
|
|
}), i.d(t, "BloomMergePostProcess", function() {
|
|
return n.BloomMergePostProcess
|
|
}), i.d(t, "BlurPostProcess", function() {
|
|
return n.BlurPostProcess
|
|
}), i.d(t, "ChromaticAberrationPostProcess", function() {
|
|
return n.ChromaticAberrationPostProcess
|
|
}), i.d(t, "CircleOfConfusionPostProcess", function() {
|
|
return n.CircleOfConfusionPostProcess
|
|
}), i.d(t, "ColorCorrectionPostProcess", function() {
|
|
return n.ColorCorrectionPostProcess
|
|
}), i.d(t, "ConvolutionPostProcess", function() {
|
|
return n.ConvolutionPostProcess
|
|
}), i.d(t, "DepthOfFieldBlurPostProcess", function() {
|
|
return n.DepthOfFieldBlurPostProcess
|
|
}), i.d(t, "DepthOfFieldEffectBlurLevel", function() {
|
|
return n.DepthOfFieldEffectBlurLevel
|
|
}), i.d(t, "DepthOfFieldEffect", function() {
|
|
return n.DepthOfFieldEffect
|
|
}), i.d(t, "DepthOfFieldMergePostProcessOptions", function() {
|
|
return n.DepthOfFieldMergePostProcessOptions
|
|
}), i.d(t, "DepthOfFieldMergePostProcess", function() {
|
|
return n.DepthOfFieldMergePostProcess
|
|
}), i.d(t, "DisplayPassPostProcess", function() {
|
|
return n.DisplayPassPostProcess
|
|
}), i.d(t, "ExtractHighlightsPostProcess", function() {
|
|
return n.ExtractHighlightsPostProcess
|
|
}), i.d(t, "FilterPostProcess", function() {
|
|
return n.FilterPostProcess
|
|
}), i.d(t, "FxaaPostProcess", function() {
|
|
return n.FxaaPostProcess
|
|
}), i.d(t, "GrainPostProcess", function() {
|
|
return n.GrainPostProcess
|
|
}), i.d(t, "HighlightsPostProcess", function() {
|
|
return n.HighlightsPostProcess
|
|
}), i.d(t, "ImageProcessingPostProcess", function() {
|
|
return n.ImageProcessingPostProcess
|
|
}), i.d(t, "MotionBlurPostProcess", function() {
|
|
return n.MotionBlurPostProcess
|
|
}), i.d(t, "PassPostProcess", function() {
|
|
return n.PassPostProcess
|
|
}), i.d(t, "PassCubePostProcess", function() {
|
|
return n.PassCubePostProcess
|
|
}), i.d(t, "PostProcess", function() {
|
|
return n.PostProcess
|
|
}), i.d(t, "PostProcessManager", function() {
|
|
return n.PostProcessManager
|
|
}), i.d(t, "RefractionPostProcess", function() {
|
|
return n.RefractionPostProcess
|
|
}), i.d(t, "SharpenPostProcess", function() {
|
|
return n.SharpenPostProcess
|
|
}), i.d(t, "StereoscopicInterlacePostProcess", function() {
|
|
return n.StereoscopicInterlacePostProcess
|
|
}), i.d(t, "TonemappingOperator", function() {
|
|
return n.TonemappingOperator
|
|
}), i.d(t, "TonemapPostProcess", function() {
|
|
return n.TonemapPostProcess
|
|
}), i.d(t, "VolumetricLightScatteringPostProcess", function() {
|
|
return n.VolumetricLightScatteringPostProcess
|
|
}), i.d(t, "VRDistortionCorrectionPostProcess", function() {
|
|
return n.VRDistortionCorrectionPostProcess
|
|
}), i.d(t, "VRMultiviewToSingleviewPostProcess", function() {
|
|
return n.VRMultiviewToSingleviewPostProcess
|
|
}), i.d(t, "ReflectionProbe", function() {
|
|
return n.ReflectionProbe
|
|
}), i.d(t, "BoundingBoxRenderer", function() {
|
|
return n.BoundingBoxRenderer
|
|
}), i.d(t, "DepthRenderer", function() {
|
|
return n.DepthRenderer
|
|
}), i.d(t, "DepthRendererSceneComponent", function() {
|
|
return n.DepthRendererSceneComponent
|
|
}), i.d(t, "EdgesRenderer", function() {
|
|
return n.EdgesRenderer
|
|
}), i.d(t, "LineEdgesRenderer", function() {
|
|
return n.LineEdgesRenderer
|
|
}), i.d(t, "GeometryBufferRenderer", function() {
|
|
return n.GeometryBufferRenderer
|
|
}), i.d(t, "GeometryBufferRendererSceneComponent", function() {
|
|
return n.GeometryBufferRendererSceneComponent
|
|
}), i.d(t, "OutlineRenderer", function() {
|
|
return n.OutlineRenderer
|
|
}), i.d(t, "RenderingGroup", function() {
|
|
return n.RenderingGroup
|
|
}), i.d(t, "RenderingGroupInfo", function() {
|
|
return n.RenderingGroupInfo
|
|
}), i.d(t, "RenderingManager", function() {
|
|
return n.RenderingManager
|
|
}), i.d(t, "UtilityLayerRenderer", function() {
|
|
return n.UtilityLayerRenderer
|
|
}), i.d(t, "Sprite", function() {
|
|
return n.Sprite
|
|
}), i.d(t, "SpriteManager", function() {
|
|
return n.SpriteManager
|
|
}), i.d(t, "SpriteSceneComponent", function() {
|
|
return n.SpriteSceneComponent
|
|
}), i.d(t, "_AlphaState", function() {
|
|
return n._AlphaState
|
|
}), i.d(t, "_DepthCullingState", function() {
|
|
return n._DepthCullingState
|
|
}), i.d(t, "_StencilState", function() {
|
|
return n._StencilState
|
|
}), i.d(t, "AndOrNotEvaluator", function() {
|
|
return n.AndOrNotEvaluator
|
|
}), i.d(t, "AssetTaskState", function() {
|
|
return n.AssetTaskState
|
|
}), i.d(t, "AbstractAssetTask", function() {
|
|
return n.AbstractAssetTask
|
|
}), i.d(t, "AssetsProgressEvent", function() {
|
|
return n.AssetsProgressEvent
|
|
}), i.d(t, "MeshAssetTask", function() {
|
|
return n.MeshAssetTask
|
|
}), i.d(t, "TextFileAssetTask", function() {
|
|
return n.TextFileAssetTask
|
|
}), i.d(t, "BinaryFileAssetTask", function() {
|
|
return n.BinaryFileAssetTask
|
|
}), i.d(t, "ImageAssetTask", function() {
|
|
return n.ImageAssetTask
|
|
}), i.d(t, "TextureAssetTask", function() {
|
|
return n.TextureAssetTask
|
|
}), i.d(t, "CubeTextureAssetTask", function() {
|
|
return n.CubeTextureAssetTask
|
|
}), i.d(t, "HDRCubeTextureAssetTask", function() {
|
|
return n.HDRCubeTextureAssetTask
|
|
}), i.d(t, "EquiRectangularCubeTextureAssetTask", function() {
|
|
return n.EquiRectangularCubeTextureAssetTask
|
|
}), i.d(t, "AssetsManager", function() {
|
|
return n.AssetsManager
|
|
}), i.d(t, "DDSTools", function() {
|
|
return n.DDSTools
|
|
}), i.d(t, "expandToProperty", function() {
|
|
return n.expandToProperty
|
|
}), i.d(t, "serialize", function() {
|
|
return n.serialize
|
|
}), i.d(t, "serializeAsTexture", function() {
|
|
return n.serializeAsTexture
|
|
}), i.d(t, "serializeAsColor3", function() {
|
|
return n.serializeAsColor3
|
|
}), i.d(t, "serializeAsFresnelParameters", function() {
|
|
return n.serializeAsFresnelParameters
|
|
}), i.d(t, "serializeAsVector2", function() {
|
|
return n.serializeAsVector2
|
|
}), i.d(t, "serializeAsVector3", function() {
|
|
return n.serializeAsVector3
|
|
}), i.d(t, "serializeAsMeshReference", function() {
|
|
return n.serializeAsMeshReference
|
|
}), i.d(t, "serializeAsColorCurves", function() {
|
|
return n.serializeAsColorCurves
|
|
}), i.d(t, "serializeAsColor4", function() {
|
|
return n.serializeAsColor4
|
|
}), i.d(t, "serializeAsImageProcessingConfiguration", function() {
|
|
return n.serializeAsImageProcessingConfiguration
|
|
}), i.d(t, "serializeAsQuaternion", function() {
|
|
return n.serializeAsQuaternion
|
|
}), i.d(t, "serializeAsMatrix", function() {
|
|
return n.serializeAsMatrix
|
|
}), i.d(t, "serializeAsCameraReference", function() {
|
|
return n.serializeAsCameraReference
|
|
}), i.d(t, "SerializationHelper", function() {
|
|
return n.SerializationHelper
|
|
}), i.d(t, "Deferred", function() {
|
|
return n.Deferred
|
|
}), i.d(t, "EnvironmentTextureTools", function() {
|
|
return n.EnvironmentTextureTools
|
|
}), i.d(t, "MeshExploder", function() {
|
|
return n.MeshExploder
|
|
}), i.d(t, "FilesInput", function() {
|
|
return n.FilesInput
|
|
}), i.d(t, "KhronosTextureContainer", function() {
|
|
return n.KhronosTextureContainer
|
|
}), i.d(t, "EventState", function() {
|
|
return n.EventState
|
|
}), i.d(t, "Observer", function() {
|
|
return n.Observer
|
|
}), i.d(t, "MultiObserver", function() {
|
|
return n.MultiObserver
|
|
}), i.d(t, "Observable", function() {
|
|
return n.Observable
|
|
}), i.d(t, "PerformanceMonitor", function() {
|
|
return n.PerformanceMonitor
|
|
}), i.d(t, "RollingAverage", function() {
|
|
return n.RollingAverage
|
|
}), i.d(t, "PromisePolyfill", function() {
|
|
return n.PromisePolyfill
|
|
}), i.d(t, "SceneOptimization", function() {
|
|
return n.SceneOptimization
|
|
}), i.d(t, "TextureOptimization", function() {
|
|
return n.TextureOptimization
|
|
}), i.d(t, "HardwareScalingOptimization", function() {
|
|
return n.HardwareScalingOptimization
|
|
}), i.d(t, "ShadowsOptimization", function() {
|
|
return n.ShadowsOptimization
|
|
}), i.d(t, "PostProcessesOptimization", function() {
|
|
return n.PostProcessesOptimization
|
|
}), i.d(t, "LensFlaresOptimization", function() {
|
|
return n.LensFlaresOptimization
|
|
}), i.d(t, "CustomOptimization", function() {
|
|
return n.CustomOptimization
|
|
}), i.d(t, "ParticlesOptimization", function() {
|
|
return n.ParticlesOptimization
|
|
}), i.d(t, "RenderTargetsOptimization", function() {
|
|
return n.RenderTargetsOptimization
|
|
}), i.d(t, "MergeMeshesOptimization", function() {
|
|
return n.MergeMeshesOptimization
|
|
}), i.d(t, "SceneOptimizerOptions", function() {
|
|
return n.SceneOptimizerOptions
|
|
}), i.d(t, "SceneOptimizer", function() {
|
|
return n.SceneOptimizer
|
|
}), i.d(t, "SceneSerializer", function() {
|
|
return n.SceneSerializer
|
|
}), i.d(t, "SmartArray", function() {
|
|
return n.SmartArray
|
|
}), i.d(t, "SmartArrayNoDuplicate", function() {
|
|
return n.SmartArrayNoDuplicate
|
|
}), i.d(t, "StringDictionary", function() {
|
|
return n.StringDictionary
|
|
}), i.d(t, "Tags", function() {
|
|
return n.Tags
|
|
}), i.d(t, "TextureTools", function() {
|
|
return n.TextureTools
|
|
}), i.d(t, "TGATools", function() {
|
|
return n.TGATools
|
|
}), i.d(t, "ColorGradient", function() {
|
|
return n.ColorGradient
|
|
}), i.d(t, "Color3Gradient", function() {
|
|
return n.Color3Gradient
|
|
}), i.d(t, "FactorGradient", function() {
|
|
return n.FactorGradient
|
|
}), i.d(t, "LoadFileError", function() {
|
|
return n.LoadFileError
|
|
}), i.d(t, "RetryStrategy", function() {
|
|
return n.RetryStrategy
|
|
}), i.d(t, "Tools", function() {
|
|
return n.Tools
|
|
}), i.d(t, "PerfCounter", function() {
|
|
return n.PerfCounter
|
|
}), i.d(t, "className", function() {
|
|
return n.className
|
|
}), i.d(t, "AsyncLoop", function() {
|
|
return n.AsyncLoop
|
|
}), i.d(t, "VideoRecorder", function() {
|
|
return n.VideoRecorder
|
|
}), i.d(t, "JoystickAxis", function() {
|
|
return n.JoystickAxis
|
|
}), i.d(t, "VirtualJoystick", function() {
|
|
return n.VirtualJoystick
|
|
}), i.d(t, "WorkerPool", function() {
|
|
return n.WorkerPool
|
|
}), i.d(t, "Logger", function() {
|
|
return n.Logger
|
|
}), i.d(t, "_TypeStore", function() {
|
|
return n._TypeStore
|
|
}), i.d(t, "FilesInputStore", function() {
|
|
return n.FilesInputStore
|
|
}), i.d(t, "DeepCopier", function() {
|
|
return n.DeepCopier
|
|
}), i.d(t, "PivotTools", function() {
|
|
return n.PivotTools
|
|
}), i.d(t, "PrecisionDate", function() {
|
|
return n.PrecisionDate
|
|
}), i.d(t, "ScreenshotTools", function() {
|
|
return n.ScreenshotTools
|
|
}), i.d(t, "WebRequest", function() {
|
|
return n.WebRequest
|
|
}), i.d(t, "InspectableType", function() {
|
|
return n.InspectableType
|
|
}), i.d(t, "AutoRotationBehavior", function() {
|
|
return n.AutoRotationBehavior
|
|
}), i.d(t, "BouncingBehavior", function() {
|
|
return n.BouncingBehavior
|
|
}), i.d(t, "FramingBehavior", function() {
|
|
return n.FramingBehavior
|
|
}), i.d(t, "AttachToBoxBehavior", function() {
|
|
return n.AttachToBoxBehavior
|
|
}), i.d(t, "FadeInOutBehavior", function() {
|
|
return n.FadeInOutBehavior
|
|
}), i.d(t, "MultiPointerScaleBehavior", function() {
|
|
return n.MultiPointerScaleBehavior
|
|
}), i.d(t, "PointerDragBehavior", function() {
|
|
return n.PointerDragBehavior
|
|
}), i.d(t, "SixDofDragBehavior", function() {
|
|
return n.SixDofDragBehavior
|
|
}), i.d(t, "ArcRotateCameraGamepadInput", function() {
|
|
return n.ArcRotateCameraGamepadInput
|
|
}), i.d(t, "ArcRotateCameraKeyboardMoveInput", function() {
|
|
return n.ArcRotateCameraKeyboardMoveInput
|
|
}), i.d(t, "ArcRotateCameraMouseWheelInput", function() {
|
|
return n.ArcRotateCameraMouseWheelInput
|
|
}), i.d(t, "ArcRotateCameraPointersInput", function() {
|
|
return n.ArcRotateCameraPointersInput
|
|
}), i.d(t, "ArcRotateCameraVRDeviceOrientationInput", function() {
|
|
return n.ArcRotateCameraVRDeviceOrientationInput
|
|
}), i.d(t, "FlyCameraKeyboardInput", function() {
|
|
return n.FlyCameraKeyboardInput
|
|
}), i.d(t, "FlyCameraMouseInput", function() {
|
|
return n.FlyCameraMouseInput
|
|
}), i.d(t, "FollowCameraKeyboardMoveInput", function() {
|
|
return n.FollowCameraKeyboardMoveInput
|
|
}), i.d(t, "FollowCameraMouseWheelInput", function() {
|
|
return n.FollowCameraMouseWheelInput
|
|
}), i.d(t, "FollowCameraPointersInput", function() {
|
|
return n.FollowCameraPointersInput
|
|
}), i.d(t, "FreeCameraDeviceOrientationInput", function() {
|
|
return n.FreeCameraDeviceOrientationInput
|
|
}), i.d(t, "FreeCameraGamepadInput", function() {
|
|
return n.FreeCameraGamepadInput
|
|
}), i.d(t, "FreeCameraKeyboardMoveInput", function() {
|
|
return n.FreeCameraKeyboardMoveInput
|
|
}), i.d(t, "FreeCameraMouseInput", function() {
|
|
return n.FreeCameraMouseInput
|
|
}), i.d(t, "FreeCameraTouchInput", function() {
|
|
return n.FreeCameraTouchInput
|
|
}), i.d(t, "FreeCameraVirtualJoystickInput", function() {
|
|
return n.FreeCameraVirtualJoystickInput
|
|
}), i.d(t, "AnaglyphArcRotateCamera", function() {
|
|
return n.AnaglyphArcRotateCamera
|
|
}), i.d(t, "AnaglyphFreeCamera", function() {
|
|
return n.AnaglyphFreeCamera
|
|
}), i.d(t, "AnaglyphGamepadCamera", function() {
|
|
return n.AnaglyphGamepadCamera
|
|
}), i.d(t, "AnaglyphUniversalCamera", function() {
|
|
return n.AnaglyphUniversalCamera
|
|
}), i.d(t, "StereoscopicArcRotateCamera", function() {
|
|
return n.StereoscopicArcRotateCamera
|
|
}), i.d(t, "StereoscopicFreeCamera", function() {
|
|
return n.StereoscopicFreeCamera
|
|
}), i.d(t, "StereoscopicGamepadCamera", function() {
|
|
return n.StereoscopicGamepadCamera
|
|
}), i.d(t, "StereoscopicUniversalCamera", function() {
|
|
return n.StereoscopicUniversalCamera
|
|
}), i.d(t, "VRCameraMetrics", function() {
|
|
return n.VRCameraMetrics
|
|
}), i.d(t, "VRDeviceOrientationArcRotateCamera", function() {
|
|
return n.VRDeviceOrientationArcRotateCamera
|
|
}), i.d(t, "VRDeviceOrientationFreeCamera", function() {
|
|
return n.VRDeviceOrientationFreeCamera
|
|
}), i.d(t, "VRDeviceOrientationGamepadCamera", function() {
|
|
return n.VRDeviceOrientationGamepadCamera
|
|
}), i.d(t, "OnAfterEnteringVRObservableEvent", function() {
|
|
return n.OnAfterEnteringVRObservableEvent
|
|
}), i.d(t, "VRExperienceHelper", function() {
|
|
return n.VRExperienceHelper
|
|
}), i.d(t, "WebVRFreeCamera", function() {
|
|
return n.WebVRFreeCamera
|
|
}), i.d(t, "WebXRCamera", function() {
|
|
return n.WebXRCamera
|
|
}), i.d(t, "WebXREnterExitUIButton", function() {
|
|
return n.WebXREnterExitUIButton
|
|
}), i.d(t, "WebXREnterExitUIOptions", function() {
|
|
return n.WebXREnterExitUIOptions
|
|
}), i.d(t, "WebXREnterExitUI", function() {
|
|
return n.WebXREnterExitUI
|
|
}), i.d(t, "WebXRState", function() {
|
|
return n.WebXRState
|
|
}), i.d(t, "WebXRExperienceHelper", function() {
|
|
return n.WebXRExperienceHelper
|
|
}), i.d(t, "WebXRController", function() {
|
|
return n.WebXRController
|
|
}), i.d(t, "WebXRInput", function() {
|
|
return n.WebXRInput
|
|
}), i.d(t, "WebXRManagedOutputCanvas", function() {
|
|
return n.WebXRManagedOutputCanvas
|
|
}), i.d(t, "WebXRSessionManager", function() {
|
|
return n.WebXRSessionManager
|
|
}), i.d(t, "Octree", function() {
|
|
return n.Octree
|
|
}), i.d(t, "OctreeBlock", function() {
|
|
return n.OctreeBlock
|
|
}), i.d(t, "OctreeSceneComponent", function() {
|
|
return n.OctreeSceneComponent
|
|
}), i.d(t, "_OcclusionDataStorage", function() {
|
|
return n._OcclusionDataStorage
|
|
}), i.d(t, "_forceTransformFeedbackToBundle", function() {
|
|
return n._forceTransformFeedbackToBundle
|
|
}), i.d(t, "ShadowGenerator", function() {
|
|
return n.ShadowGenerator
|
|
}), i.d(t, "ShadowGeneratorSceneComponent", function() {
|
|
return n.ShadowGeneratorSceneComponent
|
|
}), i.d(t, "_BabylonLoaderRegistered", function() {
|
|
return n._BabylonLoaderRegistered
|
|
}), i.d(t, "BackgroundMaterial", function() {
|
|
return n.BackgroundMaterial
|
|
}), i.d(t, "PBRMaterialDefines", function() {
|
|
return n.PBRMaterialDefines
|
|
}), i.d(t, "PBRBaseMaterial", function() {
|
|
return n.PBRBaseMaterial
|
|
}), i.d(t, "PBRBaseSimpleMaterial", function() {
|
|
return n.PBRBaseSimpleMaterial
|
|
}), i.d(t, "PBRMaterial", function() {
|
|
return n.PBRMaterial
|
|
}), i.d(t, "PBRMetallicRoughnessMaterial", function() {
|
|
return n.PBRMetallicRoughnessMaterial
|
|
}), i.d(t, "PBRSpecularGlossinessMaterial", function() {
|
|
return n.PBRSpecularGlossinessMaterial
|
|
}), i.d(t, "ColorGradingTexture", function() {
|
|
return n.ColorGradingTexture
|
|
}), i.d(t, "DynamicTexture", function() {
|
|
return n.DynamicTexture
|
|
}), i.d(t, "ProceduralTexture", function() {
|
|
return n.ProceduralTexture
|
|
}), i.d(t, "RawCubeTexture", function() {
|
|
return n.RawCubeTexture
|
|
}), i.d(t, "RawTexture", function() {
|
|
return n.RawTexture
|
|
}), i.d(t, "RawTexture3D", function() {
|
|
return n.RawTexture3D
|
|
}), i.d(t, "RefractionTexture", function() {
|
|
return n.RefractionTexture
|
|
}), i.d(t, "VideoTexture", function() {
|
|
return n.VideoTexture
|
|
}), i.d(t, "HtmlElementTexture", function() {
|
|
return n.HtmlElementTexture
|
|
}), i.d(t, "DracoCompression", function() {
|
|
return n.DracoCompression
|
|
}), i.d(t, "DiscBuilder", function() {
|
|
return n.DiscBuilder
|
|
}), i.d(t, "RibbonBuilder", function() {
|
|
return n.RibbonBuilder
|
|
}), i.d(t, "HemisphereBuilder", function() {
|
|
return n.HemisphereBuilder
|
|
}), i.d(t, "TorusBuilder", function() {
|
|
return n.TorusBuilder
|
|
}), i.d(t, "TorusKnotBuilder", function() {
|
|
return n.TorusKnotBuilder
|
|
}), i.d(t, "PolygonBuilder", function() {
|
|
return n.PolygonBuilder
|
|
}), i.d(t, "ShapeBuilder", function() {
|
|
return n.ShapeBuilder
|
|
}), i.d(t, "LatheBuilder", function() {
|
|
return n.LatheBuilder
|
|
}), i.d(t, "GroundBuilder", function() {
|
|
return n.GroundBuilder
|
|
}), i.d(t, "TubeBuilder", function() {
|
|
return n.TubeBuilder
|
|
}), i.d(t, "PolyhedronBuilder", function() {
|
|
return n.PolyhedronBuilder
|
|
}), i.d(t, "IcoSphereBuilder", function() {
|
|
return n.IcoSphereBuilder
|
|
}), i.d(t, "DecalBuilder", function() {
|
|
return n.DecalBuilder
|
|
}), i.d(t, "BoxParticleEmitter", function() {
|
|
return n.BoxParticleEmitter
|
|
}), i.d(t, "ConeParticleEmitter", function() {
|
|
return n.ConeParticleEmitter
|
|
}), i.d(t, "CylinderParticleEmitter", function() {
|
|
return n.CylinderParticleEmitter
|
|
}), i.d(t, "CylinderDirectedParticleEmitter", function() {
|
|
return n.CylinderDirectedParticleEmitter
|
|
}), i.d(t, "HemisphericParticleEmitter", function() {
|
|
return n.HemisphericParticleEmitter
|
|
}), i.d(t, "PointParticleEmitter", function() {
|
|
return n.PointParticleEmitter
|
|
}), i.d(t, "SphereParticleEmitter", function() {
|
|
return n.SphereParticleEmitter
|
|
}), i.d(t, "SphereDirectedParticleEmitter", function() {
|
|
return n.SphereDirectedParticleEmitter
|
|
}), i.d(t, "CannonJSPlugin", function() {
|
|
return n.CannonJSPlugin
|
|
}), i.d(t, "AmmoJSPlugin", function() {
|
|
return n.AmmoJSPlugin
|
|
}), i.d(t, "OimoJSPlugin", function() {
|
|
return n.OimoJSPlugin
|
|
}), i.d(t, "PostProcessRenderEffect", function() {
|
|
return n.PostProcessRenderEffect
|
|
}), i.d(t, "PostProcessRenderPipeline", function() {
|
|
return n.PostProcessRenderPipeline
|
|
}), i.d(t, "PostProcessRenderPipelineManager", function() {
|
|
return n.PostProcessRenderPipelineManager
|
|
}), i.d(t, "PostProcessRenderPipelineManagerSceneComponent", function() {
|
|
return n.PostProcessRenderPipelineManagerSceneComponent
|
|
}), i.d(t, "CubeMapToSphericalPolynomialTools", function() {
|
|
return n.CubeMapToSphericalPolynomialTools
|
|
}), i.d(t, "HDRTools", function() {
|
|
return n.HDRTools
|
|
}), i.d(t, "PanoramaToCubeMapTools", function() {
|
|
return n.PanoramaToCubeMapTools
|
|
}), i.d(t, "_DDSTextureLoader", function() {
|
|
return n._DDSTextureLoader
|
|
}), i.d(t, "_ENVTextureLoader", function() {
|
|
return n._ENVTextureLoader
|
|
}), i.d(t, "_KTXTextureLoader", function() {
|
|
return n._KTXTextureLoader
|
|
}), i.d(t, "_TGATextureLoader", function() {
|
|
return n._TGATextureLoader
|
|
}), i.d(t, "CustomProceduralTexture", function() {
|
|
return n.CustomProceduralTexture
|
|
}), i.d(t, "NoiseProceduralTexture", function() {
|
|
return n.NoiseProceduralTexture
|
|
}), i.d(t, "ProceduralTextureSceneComponent", function() {
|
|
return n.ProceduralTextureSceneComponent
|
|
}), i.d(t, "DefaultRenderingPipeline", function() {
|
|
return n.DefaultRenderingPipeline
|
|
}), i.d(t, "LensRenderingPipeline", function() {
|
|
return n.LensRenderingPipeline
|
|
}), i.d(t, "SSAO2RenderingPipeline", function() {
|
|
return n.SSAO2RenderingPipeline
|
|
}), i.d(t, "SSAORenderingPipeline", function() {
|
|
return n.SSAORenderingPipeline
|
|
}), i.d(t, "StandardRenderingPipeline", function() {
|
|
return n.StandardRenderingPipeline
|
|
});
|
|
var o = void 0 !== e ? e : "undefined" != typeof window ? window : void 0;
|
|
if (void 0 !== o) {
|
|
o.BABYLON = s, o.BABYLON = o.BABYLON || {};
|
|
var s = o.BABYLON;
|
|
s.Debug = s.Debug || {};
|
|
var a = [];
|
|
for (var c in r) s.Debug[c] = r[c], a.push(c);
|
|
for (var c in n) s[c] = n[c]
|
|
}
|
|
var l = {
|
|
AxesViewer: r.AxesViewer,
|
|
BoneAxesViewer: r.BoneAxesViewer,
|
|
PhysicsViewer: r.PhysicsViewer,
|
|
SkeletonViewer: r.SkeletonViewer
|
|
}
|
|
}.call(this, i(119))
|
|
}])
|
|
});
|
|
var _STRINGS = {
|
|
Ad: {
|
|
Mobile: {
|
|
Preroll: {
|
|
ReadyIn: "The game is ready in ",
|
|
Loading: "Your game is loading...",
|
|
Close: "Close"
|
|
},
|
|
Header: {
|
|
ReadyIn: "The game is ready in ",
|
|
Loading: "Your game is loading...",
|
|
Close: "Close"
|
|
},
|
|
End: {
|
|
ReadyIn: "Advertisement ends in ",
|
|
Loading: "Please wait ...",
|
|
Close: "Close"
|
|
}
|
|
}
|
|
},
|
|
Splash: {
|
|
TapToStart: "TAP TO START"
|
|
},
|
|
Tutorial: {
|
|
Title: "tutorial",
|
|
TutorialCompleteLine1: "tutorial complete !",
|
|
TutorialCompleteLine2: "press play to continue",
|
|
Desktop: {
|
|
Text1Line1: "hold spacebar or click",
|
|
Text1Line2: "to make the car go right",
|
|
Text2Line1: "release spacebar or click",
|
|
Text2Line2: "to make the car go left",
|
|
Text3Line1: "now steer the car",
|
|
Text3Line2: "to the right!",
|
|
Text4Line1: "last one !",
|
|
Text4Line2: "steer to the left !"
|
|
},
|
|
Mobile: {
|
|
Text1Line1: "hold tap down",
|
|
Text1Line2: "to make the car go right",
|
|
Text2Line1: "release tap",
|
|
Text2Line2: "to make the car go left",
|
|
Text3Line1: "now steer the car",
|
|
Text3Line2: "to the right!",
|
|
Text4Line1: "last one !",
|
|
Text4Line2: "steer to the left !"
|
|
}
|
|
},
|
|
Game: {
|
|
Settings: "settings",
|
|
Paused: "paused",
|
|
MainMenuBest: "best",
|
|
Score: "score : ",
|
|
Meter: "",
|
|
Best: "best : ",
|
|
NewBest: "new best : ",
|
|
Tip0: "tip : only drift when\nyou\u2019re close to a bend.",
|
|
Tip1: "tip : falling too often ?\nupgrade your car for better tire grip.",
|
|
Tip2: "tip : concentrate and anticipate\nyour drifts in tight spots.",
|
|
Tip3: "tip : you can turn your car\nmid air after jump.",
|
|
DailyRewards: "daily rewards",
|
|
DailyRewardBottomText: "return daily to earn rewards!",
|
|
Day: "day ",
|
|
Collect: "collect",
|
|
RewardCollected: "reward collected",
|
|
Continue: "continue",
|
|
BoosterTutorialTitle: "tutorial",
|
|
BoosterTutorial1: "activate booster\n\nto make your run easier",
|
|
BoosterTutorial2: "you can buy more booster\n\nusing coins",
|
|
TapToContinue: "tap anywhere to continue",
|
|
SelectBoosters: "select boosters",
|
|
Booster1: "double\nscore",
|
|
Booster2: "car\ninsurance",
|
|
Booster3: "coin\nrush",
|
|
StartDrift: "start drift!",
|
|
RandomGiftTitle: "spin to win rewards",
|
|
Spin: "spin"
|
|
}
|
|
};
|
|
var _SETTINGS = {
|
|
API: {
|
|
Enabled: !1,
|
|
Log: {
|
|
Events: {
|
|
InitializeGame: !0,
|
|
EndGame: !0,
|
|
Level: {
|
|
Begin: !0,
|
|
End: !0,
|
|
Win: !0,
|
|
Lose: !0,
|
|
Draw: !0
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Ad: {
|
|
Mobile: {
|
|
Preroll: {
|
|
Enabled: !1,
|
|
Duration: 5,
|
|
Width: 300,
|
|
Height: 250,
|
|
Rotation: {
|
|
Enabled: !1,
|
|
Weight: {
|
|
MobileAdInGamePreroll: 40,
|
|
MobileAdInGamePreroll2: 40,
|
|
MobileAdInGamePreroll3: 20
|
|
}
|
|
}
|
|
},
|
|
Header: {
|
|
Enabled: !1,
|
|
Duration: 5,
|
|
Width: 320,
|
|
Height: 50,
|
|
Rotation: {
|
|
Enabled: !1,
|
|
Weight: {
|
|
MobileAdInGameHeader: 40,
|
|
MobileAdInGameHeader2: 40,
|
|
MobileAdInGameHeader3: 20
|
|
}
|
|
}
|
|
},
|
|
Footer: {
|
|
Enabled: !1,
|
|
Duration: 5,
|
|
Width: 320,
|
|
Height: 50,
|
|
Rotation: {
|
|
Enabled: !1,
|
|
Weight: {
|
|
MobileAdInGameFooter: 40,
|
|
MobileAdInGameFooter2: 40,
|
|
MobileAdInGameFooter3: 20
|
|
}
|
|
}
|
|
},
|
|
End: {
|
|
Enabled: !1,
|
|
Duration: 1,
|
|
Width: 300,
|
|
Height: 250,
|
|
Rotation: {
|
|
Enabled: !1,
|
|
Weight: {
|
|
MobileAdInGameEnd: 40,
|
|
MobileAdInGameEnd2: 40,
|
|
MobileAdInGameEnd3: 20
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
Language: {
|
|
Default: "en"
|
|
},
|
|
DeveloperBranding: {
|
|
Splash: {
|
|
Enabled: !1
|
|
},
|
|
Logo: {
|
|
Enabled: !1,
|
|
Link: "http://google.com",
|
|
LinkEnabled: !1,
|
|
NewWindow: !0,
|
|
Width: 166,
|
|
Height: 61
|
|
}
|
|
},
|
|
Branding: {
|
|
Splash: {
|
|
Enabled: !1
|
|
},
|
|
Logo: {
|
|
Enabled: !0,
|
|
Link: "http://google.com",
|
|
LinkEnabled: !1,
|
|
NewWindow: !0,
|
|
Width: 166,
|
|
Height: 61
|
|
}
|
|
},
|
|
MoreGames: {
|
|
Enabled: !1,
|
|
Link: "http://www.marketjs.com/game/links/mobile",
|
|
NewWindow: !0
|
|
}
|
|
};
|
|
var MobileAdInGamePreroll = {
|
|
ad_duration: _SETTINGS.Ad.Mobile.Preroll.Duration,
|
|
ad_width: _SETTINGS.Ad.Mobile.Preroll.Width,
|
|
ad_height: _SETTINGS.Ad.Mobile.Preroll.Height,
|
|
ready_in: _STRINGS.Ad.Mobile.Preroll.ReadyIn,
|
|
loading: _STRINGS.Ad.Mobile.Preroll.Loading,
|
|
close: _STRINGS.Ad.Mobile.Preroll.Close + " ",
|
|
Initialize: function() {
|
|
if (_SETTINGS.Ad.Mobile.Preroll.Rotation.Enabled) {
|
|
var b = _SETTINGS.Ad.Mobile.Preroll.Rotation.Weight,
|
|
c = b.MobileAdInGamePreroll,
|
|
e =
|
|
c + b.MobileAdInGamePreroll2,
|
|
b = e + b.MobileAdInGamePreroll3,
|
|
d = Math.floor(100 * Math.random());
|
|
console.log("seed: ", d);
|
|
d <= c ? this.selectedOverlayName = "MobileAdInGamePreroll" : d <= e ? this.selectedOverlayName = "MobileAdInGamePreroll2" : d <= b && (this.selectedOverlayName = "MobileAdInGamePreroll3");
|
|
console.log("Ad rotating preroll enabled")
|
|
} else this.selectedOverlayName = "MobileAdInGamePreroll", console.log("Ad rotating preroll disabled");
|
|
console.log("selected:", this.selectedOverlayName);
|
|
this.overlay = $("#" + this.selectedOverlayName);
|
|
this.box = $("#" + this.selectedOverlayName + "-Box");
|
|
this.game = $("#game");
|
|
this.boxContents = {
|
|
footer: $("#" + this.selectedOverlayName + "-Box-Footer"),
|
|
header: $("#" + this.selectedOverlayName + "-Box-Header"),
|
|
close: $("#" + this.selectedOverlayName + "-Box-Close"),
|
|
body: $("#" + this.selectedOverlayName + "-Box-Body")
|
|
};
|
|
this.box.width(this.ad_width);
|
|
this.box.height(this.ad_height);
|
|
this.box.css("left", (this.overlay.width() - this.box.width()) / 2);
|
|
this.box.css("top", (this.overlay.height() - this.box.height() - this.boxContents.header.height() -
|
|
this.boxContents.footer.height()) / 2);
|
|
this.overlay.show(this.Timer(this.ad_duration))
|
|
},
|
|
Timer: function(b) {
|
|
var c = b,
|
|
e = setInterval(function() {
|
|
MobileAdInGamePreroll.boxContents.header.text(MobileAdInGamePreroll.ready_in + c + "...");
|
|
MobileAdInGamePreroll.boxContents.footer.text(MobileAdInGamePreroll.loading);
|
|
c--;
|
|
0 > c && (clearInterval(e), MobileAdInGamePreroll.boxContents.close.css("left", MobileAdInGamePreroll.boxContents.body.width() - 23), MobileAdInGamePreroll.boxContents.close.show(), MobileAdInGamePreroll.boxContents.header.html(MobileAdInGamePreroll.close),
|
|
MobileAdInGamePreroll.boxContents.footer.text(""))
|
|
}, 1E3)
|
|
},
|
|
Close: function() {
|
|
this.boxContents.close.hide();
|
|
this.overlay.hide()
|
|
}
|
|
};
|
|
var MobileAdInGameHeader = {
|
|
ad_duration: _SETTINGS.Ad.Mobile.Header.Duration,
|
|
ad_width: _SETTINGS.Ad.Mobile.Header.Width,
|
|
ad_height: _SETTINGS.Ad.Mobile.Header.Height,
|
|
Initialize: function() {
|
|
if (_SETTINGS.Ad.Mobile.Header.Rotation.Enabled) {
|
|
var b = _SETTINGS.Ad.Mobile.Header.Rotation.Weight,
|
|
c = b.MobileAdInGameHeader,
|
|
e = c + b.MobileAdInGameHeader2,
|
|
b = e + b.MobileAdInGameHeader3,
|
|
d = Math.floor(100 * Math.random());
|
|
console.log("seed: ", d);
|
|
d <= c ? this.selectedOverlayName = "MobileAdInGameHeader" : d <= e ? this.selectedOverlayName = "MobileAdInGameHeader2" :
|
|
d <= b && (this.selectedOverlayName = "MobileAdInGameHeader3");
|
|
console.log("Ad rotating header enabled")
|
|
} else this.selectedOverlayName = "MobileAdInGameHeader", console.log("Ad rotating header disabled");
|
|
this.div = $("#" + this.selectedOverlayName);
|
|
this.game = $("#game");
|
|
this.div.width(this.ad_width);
|
|
this.div.height(this.ad_height);
|
|
this.div.css("left", this.game.position().left + (this.game.width() - this.div.width()) / 2);
|
|
this.div.css("top", 0);
|
|
this.div.show(this.Timer(this.ad_duration))
|
|
},
|
|
Timer: function(b) {
|
|
var c = setInterval(function() {
|
|
b--;
|
|
0 > b && (MobileAdInGameHeader.div.hide(), clearInterval(c))
|
|
}, 1E3)
|
|
}
|
|
};
|
|
var MobileAdInGameFooter = {
|
|
ad_duration: _SETTINGS.Ad.Mobile.Footer.Duration,
|
|
ad_width: _SETTINGS.Ad.Mobile.Footer.Width,
|
|
ad_height: _SETTINGS.Ad.Mobile.Footer.Height,
|
|
Initialize: function() {
|
|
if (_SETTINGS.Ad.Mobile.Footer.Rotation.Enabled) {
|
|
var b = _SETTINGS.Ad.Mobile.Footer.Rotation.Weight,
|
|
c = b.MobileAdInGameFooter,
|
|
e = c + b.MobileAdInGameFooter2,
|
|
b = e + b.MobileAdInGameFooter3,
|
|
d = Math.floor(100 * Math.random());
|
|
console.log("seed: ", d);
|
|
d <= c ? this.selectedOverlayName = "MobileAdInGameFooter" : d <= e ? this.selectedOverlayName = "MobileAdInGameFooter2" :
|
|
d <= b && (this.selectedOverlayName = "MobileAdInGameFooter3");
|
|
console.log("Ad rotating footer enabled")
|
|
} else this.selectedOverlayName = "MobileAdInGameFooter", console.log("Ad rotating footer disabled");
|
|
this.div = $("#" + this.selectedOverlayName);
|
|
this.game = $("#game");
|
|
this.div.width(this.ad_width);
|
|
this.div.height(this.ad_height);
|
|
this.div.css("left", this.game.position().left + (this.game.width() - this.div.width()) / 2);
|
|
this.div.css("top", this.game.height() - this.div.height() - 5);
|
|
this.div.show(this.Timer(this.ad_duration))
|
|
},
|
|
Timer: function(b) {
|
|
var c = setInterval(function() {
|
|
b--;
|
|
0 > b && (MobileAdInGameFooter.div.hide(), clearInterval(c))
|
|
}, 1E3)
|
|
}
|
|
};
|
|
var MobileAdInGameEnd = {
|
|
ad_duration: _SETTINGS.Ad.Mobile.End.Duration,
|
|
ad_width: _SETTINGS.Ad.Mobile.End.Width,
|
|
ad_height: _SETTINGS.Ad.Mobile.End.Height,
|
|
ready_in: _STRINGS.Ad.Mobile.End.ReadyIn,
|
|
loading: _STRINGS.Ad.Mobile.End.Loading,
|
|
close: _STRINGS.Ad.Mobile.End.Close + " ",
|
|
Initialize: function() {
|
|
if (_SETTINGS.Ad.Mobile.End.Rotation.Enabled) {
|
|
var b = _SETTINGS.Ad.Mobile.End.Rotation.Weight,
|
|
c = b.MobileAdInGameEnd,
|
|
e = c + b.MobileAdInGameEnd2,
|
|
b = e + b.MobileAdInGameEnd3,
|
|
d = Math.floor(100 * Math.random());
|
|
console.log("seed: ", d);
|
|
d <= c ? this.selectedOverlayName = "MobileAdInGameEnd" : d <= e ? this.selectedOverlayName = "MobileAdInGameEnd2" : d <= b && (this.selectedOverlayName = "MobileAdInGameEnd3");
|
|
console.log("Ad rotating end enabled")
|
|
} else this.selectedOverlayName = "MobileAdInGameEnd", console.log("Ad rotating end disabled");
|
|
console.log("selected:", this.selectedOverlayName);
|
|
this.overlay = $("#" + this.selectedOverlayName);
|
|
this.box = $("#" + this.selectedOverlayName + "-Box");
|
|
this.game = $("#game");
|
|
this.boxContents = {
|
|
footer: $("#" + this.selectedOverlayName + "-Box-Footer"),
|
|
header: $("#" + this.selectedOverlayName + "-Box-Header"),
|
|
close: $("#" + this.selectedOverlayName + "-Box-Close"),
|
|
body: $("#" + this.selectedOverlayName + "-Box-Body")
|
|
};
|
|
this.box.width(this.ad_width);
|
|
this.box.height(this.ad_height);
|
|
this.box.css("left", (this.overlay.width() - this.box.width()) / 2);
|
|
this.box.css("top", (this.overlay.height() - this.box.height() - this.boxContents.header.height() - this.boxContents.footer.height()) / 2);
|
|
this.overlay.show(this.Timer(this.ad_duration))
|
|
},
|
|
Timer: function(b) {
|
|
var c = b,
|
|
e = setInterval(function() {
|
|
MobileAdInGameEnd.boxContents.header.text(MobileAdInGameEnd.ready_in + c + "...");
|
|
MobileAdInGameEnd.boxContents.footer.text(MobileAdInGameEnd.loading);
|
|
c--;
|
|
0 > c && (clearInterval(e), MobileAdInGameEnd.boxContents.close.css("left", MobileAdInGameEnd.boxContents.body.width() - 23), MobileAdInGameEnd.boxContents.close.show(), MobileAdInGameEnd.boxContents.header.html(MobileAdInGameEnd.close), MobileAdInGameEnd.boxContents.footer.text(""))
|
|
}, 1E3)
|
|
},
|
|
Close: function() {
|
|
this.boxContents.close.hide();
|
|
this.overlay.hide()
|
|
}
|
|
};
|
|
! function(b, c) {
|
|
"object" == typeof module && "object" == typeof module.exports ? module.exports = b.document ? c(b, !0) : function(b) {
|
|
if (!b.document) throw Error("jQuery requires a window with a document");
|
|
return c(b)
|
|
} : c(b)
|
|
}("undefined" != typeof window ? window : this, function(b, c) {
|
|
function e(b, c) {
|
|
c = c || M;
|
|
var d = c.createElement("script");
|
|
d.text = b;
|
|
c.head.appendChild(d).parentNode.removeChild(d)
|
|
}
|
|
|
|
function d(b) {
|
|
var c = !!b && "length" in b && b.length,
|
|
d = p.type(b);
|
|
return "function" !== d && !p.isWindow(b) && ("array" === d || 0 === c || "number" ==
|
|
typeof c && 0 < c && c - 1 in b)
|
|
}
|
|
|
|
function g(b, c) {
|
|
return b.nodeName && b.nodeName.toLowerCase() === c.toLowerCase()
|
|
}
|
|
|
|
function f(b, c, d) {
|
|
return p.isFunction(c) ? p.grep(b, function(b, e) {
|
|
return !!c.call(b, e, b) !== d
|
|
}) : c.nodeType ? p.grep(b, function(b) {
|
|
return b === c !== d
|
|
}) : "string" != typeof c ? p.grep(b, function(b) {
|
|
return -1 < Va.call(c, b) !== d
|
|
}) : Ic.test(c) ? p.filter(c, b, d) : (c = p.filter(c, b), p.grep(b, function(b) {
|
|
return -1 < Va.call(c, b) !== d && 1 === b.nodeType
|
|
}))
|
|
}
|
|
|
|
function m(b, c) {
|
|
for (;
|
|
(b = b[c]) && 1 !== b.nodeType;);
|
|
return b
|
|
}
|
|
|
|
function l(b) {
|
|
return b
|
|
}
|
|
|
|
function j(b) {
|
|
throw b;
|
|
}
|
|
|
|
function q(b, c, d, e) {
|
|
var j;
|
|
try {
|
|
b && p.isFunction(j = b.promise) ? j.call(b).done(c).fail(d) : b && p.isFunction(j = b.then) ? j.call(b, c, d) : c.apply(void 0, [b].slice(e))
|
|
} catch (f) {
|
|
d.apply(void 0, [f])
|
|
}
|
|
}
|
|
|
|
function n() {
|
|
M.removeEventListener("DOMContentLoaded", n);
|
|
b.removeEventListener("load", n);
|
|
p.ready()
|
|
}
|
|
|
|
function r() {
|
|
this.expando = p.expando + r.uid++
|
|
}
|
|
|
|
function s(b, c, d) {
|
|
var e;
|
|
if (void 0 === d && 1 === b.nodeType)
|
|
if (e = "data-" + c.replace(Jc, "-$&").toLowerCase(), d = b.getAttribute(e), "string" == typeof d) {
|
|
try {
|
|
d = "true" ===
|
|
d || "false" !== d && ("null" === d ? null : d === +d + "" ? +d : Kc.test(d) ? JSON.parse(d) : d)
|
|
} catch (j) {}
|
|
ka.set(b, c, d)
|
|
} else d = void 0;
|
|
return d
|
|
}
|
|
|
|
function t(b, c, d, e) {
|
|
var j, f = 1,
|
|
g = 20,
|
|
n = e ? function() {
|
|
return e.cur()
|
|
} : function() {
|
|
return p.css(b, c, "")
|
|
},
|
|
q = n(),
|
|
l = d && d[3] || (p.cssNumber[c] ? "" : "px"),
|
|
r = (p.cssNumber[c] || "px" !== l && +q) && lb.exec(p.css(b, c));
|
|
if (r && r[3] !== l) {
|
|
l = l || r[3];
|
|
d = d || [];
|
|
r = +q || 1;
|
|
do f = f || ".5", r /= f, p.style(b, c, r + l); while (f !== (f = n() / q) && 1 !== f && --g)
|
|
}
|
|
return d && (r = +r || +q || 0, j = d[1] ? r + (d[1] + 1) * d[2] : +d[2], e && (e.unit = l, e.start = r,
|
|
e.end = j)), j
|
|
}
|
|
|
|
function u(b, c) {
|
|
for (var d, e, j = [], f = 0, g = b.length; f < g; f++)
|
|
if (e = b[f], e.style)
|
|
if (d = e.style.display, c) {
|
|
if ("none" === d && (j[f] = R.get(e, "display") || null, j[f] || (e.style.display = "")), "" === e.style.display && tb(e)) {
|
|
d = j;
|
|
var n = f,
|
|
q, l = void 0;
|
|
q = e.ownerDocument;
|
|
var r = e.nodeName;
|
|
q = (e = Yb[r]) ? e : (l = q.body.appendChild(q.createElement(r)), e = p.css(l, "display"), l.parentNode.removeChild(l), "none" === e && (e = "block"), Yb[r] = e, e);
|
|
d[n] = q
|
|
}
|
|
} else "none" !== d && (j[f] = "none", R.set(e, "display", d));
|
|
for (f = 0; f < g; f++) null != j[f] && (b[f].style.display =
|
|
j[f]);
|
|
return b
|
|
}
|
|
|
|
function y(b, c) {
|
|
var d;
|
|
return d = "undefined" != typeof b.getElementsByTagName ? b.getElementsByTagName(c || "*") : "undefined" != typeof b.querySelectorAll ? b.querySelectorAll(c || "*") : [], void 0 === c || c && g(b, c) ? p.merge([b], d) : d
|
|
}
|
|
|
|
function z(b, c) {
|
|
for (var d = 0, e = b.length; d < e; d++) R.set(b[d], "globalEval", !c || R.get(c[d], "globalEval"))
|
|
}
|
|
|
|
function x(b, c, d, e, j) {
|
|
for (var f, g, n, q, l = c.createDocumentFragment(), r = [], s = 0, m = b.length; s < m; s++)
|
|
if (f = b[s], f || 0 === f)
|
|
if ("object" === p.type(f)) p.merge(r, f.nodeType ? [f] : f);
|
|
else if (Lc.test(f)) {
|
|
g =
|
|
g || l.appendChild(c.createElement("div"));
|
|
n = (Zb.exec(f) || ["", ""])[1].toLowerCase();
|
|
n = oa[n] || oa._default;
|
|
g.innerHTML = n[1] + p.htmlPrefilter(f) + n[2];
|
|
for (n = n[0]; n--;) g = g.lastChild;
|
|
p.merge(r, g.childNodes);
|
|
g = l.firstChild;
|
|
g.textContent = ""
|
|
} else r.push(c.createTextNode(f));
|
|
l.textContent = "";
|
|
for (s = 0; f = r[s++];)
|
|
if (e && -1 < p.inArray(f, e)) j && j.push(f);
|
|
else if (q = p.contains(f.ownerDocument, f), g = y(l.appendChild(f), "script"), q && z(g), d)
|
|
for (n = 0; f = g[n++];) $b.test(f.type || "") && d.push(f);
|
|
return l
|
|
}
|
|
|
|
function C() {
|
|
return !0
|
|
}
|
|
|
|
function B() {
|
|
return !1
|
|
}
|
|
|
|
function E() {
|
|
try {
|
|
return M.activeElement
|
|
} catch (b) {}
|
|
}
|
|
|
|
function G(b, c, d, e, j, f) {
|
|
var g, n;
|
|
if ("object" == typeof c) {
|
|
"string" != typeof d && (e = e || d, d = void 0);
|
|
for (n in c) G(b, n, d, e, c[n], f);
|
|
return b
|
|
}
|
|
if (null == e && null == j ? (j = d, e = d = void 0) : null == j && ("string" == typeof d ? (j = e, e = void 0) : (j = e, e = d, d = void 0)), !1 === j) j = B;
|
|
else if (!j) return b;
|
|
return 1 === f && (g = j, j = function(b) {
|
|
return p().off(b), g.apply(this, arguments)
|
|
}, j.guid = g.guid || (g.guid = p.guid++)), b.each(function() {
|
|
p.event.add(this, c, j, e, d)
|
|
})
|
|
}
|
|
|
|
function D(b, c) {
|
|
return g(b, "table") &&
|
|
g(11 !== c.nodeType ? c : c.firstChild, "tr") ? p(">tbody", b)[0] || b : b
|
|
}
|
|
|
|
function A(b) {
|
|
return b.type = (null !== b.getAttribute("type")) + "/" + b.type, b
|
|
}
|
|
|
|
function H(b) {
|
|
var c = Mc.exec(b.type);
|
|
return c ? b.type = c[1] : b.removeAttribute("type"), b
|
|
}
|
|
|
|
function O(b, c) {
|
|
var d, e, j, f, g, n;
|
|
if (1 === c.nodeType) {
|
|
if (R.hasData(b) && (d = R.access(b), e = R.set(c, d), n = d.events))
|
|
for (j in delete e.handle, e.events = {}, n) {
|
|
d = 0;
|
|
for (e = n[j].length; d < e; d++) p.event.add(c, j, n[j][d])
|
|
}
|
|
ka.hasData(b) && (f = ka.access(b), g = p.extend({}, f), ka.set(c, g))
|
|
}
|
|
}
|
|
|
|
function K(b, c, d,
|
|
j) {
|
|
c = Ha.apply([], c);
|
|
var f, g, n, q, l = 0,
|
|
r = b.length,
|
|
s = r - 1,
|
|
m = c[0],
|
|
t = p.isFunction(m);
|
|
if (t || 1 < r && "string" == typeof m && !W.checkClone && Nc.test(m)) return b.each(function(e) {
|
|
var f = b.eq(e);
|
|
t && (c[0] = m.call(this, e, f.html()));
|
|
K(f, c, d, j)
|
|
});
|
|
if (r && (f = x(c, b[0].ownerDocument, !1, b, j), g = f.firstChild, 1 === f.childNodes.length && (f = g), g || j)) {
|
|
g = p.map(y(f, "script"), A);
|
|
for (n = g.length; l < r; l++) q = f, l !== s && (q = p.clone(q, !0, !0), n && p.merge(g, y(q, "script"))), d.call(b[l], q, l);
|
|
if (n) {
|
|
f = g[g.length - 1].ownerDocument;
|
|
p.map(g, H);
|
|
for (l = 0; l < n; l++) q =
|
|
g[l], $b.test(q.type || "") && !R.access(q, "globalEval") && p.contains(f, q) && (q.src ? p._evalUrl && p._evalUrl(q.src) : e(q.textContent.replace(Pc, ""), f))
|
|
}
|
|
}
|
|
return b
|
|
}
|
|
|
|
function S(b, c, d) {
|
|
for (var e = c ? p.filter(c, b) : b, j = 0; null != (c = e[j]); j++) d || 1 !== c.nodeType || p.cleanData(y(c)), c.parentNode && (d && p.contains(c.ownerDocument, c) && z(y(c, "script")), c.parentNode.removeChild(c));
|
|
return b
|
|
}
|
|
|
|
function J(b, c, d) {
|
|
var e, j, f, g, n = b.style;
|
|
return d = d || ub(b), d && (g = d.getPropertyValue(c) || d[c], "" !== g || p.contains(b.ownerDocument, b) || (g = p.style(b,
|
|
c)), !W.pixelMarginRight() && Lb.test(g) && ac.test(c) && (e = n.width, j = n.minWidth, f = n.maxWidth, n.minWidth = n.maxWidth = n.width = g, g = d.width, n.width = e, n.minWidth = j, n.maxWidth = f)), void 0 !== g ? g + "" : g
|
|
}
|
|
|
|
function Y(b, c) {
|
|
return {
|
|
get: function() {
|
|
return b() ? void delete this.get : (this.get = c).apply(this, arguments)
|
|
}
|
|
}
|
|
}
|
|
|
|
function ca(b) {
|
|
var c = p.cssProps[b];
|
|
if (!c) {
|
|
var c = p.cssProps,
|
|
d;
|
|
a: if (d = b, !(d in bc)) {
|
|
for (var e = d[0].toUpperCase() + d.slice(1), j = cc.length; j--;)
|
|
if (d = cc[j] + e, d in bc) break a;
|
|
d = void 0
|
|
} c = c[b] = d || b
|
|
}
|
|
return c
|
|
}
|
|
|
|
function F(b,
|
|
c, d) {
|
|
return (b = lb.exec(c)) ? Math.max(0, b[2] - (d || 0)) + (b[3] || "px") : c
|
|
}
|
|
|
|
function N(b, c, d, e, j) {
|
|
var f = 0;
|
|
for (c = d === (e ? "border" : "content") ? 4 : "width" === c ? 1 : 0; 4 > c; c += 2) "margin" === d && (f += p.css(b, d + Wa[c], !0, j)), e ? ("content" === d && (f -= p.css(b, "padding" + Wa[c], !0, j)), "margin" !== d && (f -= p.css(b, "border" + Wa[c] + "Width", !0, j))) : (f += p.css(b, "padding" + Wa[c], !0, j), "padding" !== d && (f += p.css(b, "border" + Wa[c] + "Width", !0, j)));
|
|
return f
|
|
}
|
|
|
|
function da(b, c, d) {
|
|
var e, j = ub(b),
|
|
f = J(b, c, j),
|
|
g = "border-box" === p.css(b, "boxSizing", !1, j);
|
|
return Lb.test(f) ?
|
|
f : (e = g && (W.boxSizingReliable() || f === b.style[c]), "auto" === f && (f = b["offset" + c[0].toUpperCase() + c.slice(1)]), f = parseFloat(f) || 0, f + N(b, c, d || (g ? "border" : "content"), e, j) + "px")
|
|
}
|
|
|
|
function T(b, c, d, e, j) {
|
|
return new T.prototype.init(b, c, d, e, j)
|
|
}
|
|
|
|
function P() {
|
|
vb && (!1 === M.hidden && b.requestAnimationFrame ? b.requestAnimationFrame(P) : b.setTimeout(P, p.fx.interval), p.fx.tick())
|
|
}
|
|
|
|
function L() {
|
|
return b.setTimeout(function() {
|
|
bb = void 0
|
|
}), bb = p.now()
|
|
}
|
|
|
|
function I(b, c) {
|
|
var d, e = 0,
|
|
j = {
|
|
height: b
|
|
};
|
|
for (c = c ? 1 : 0; 4 > e; e += 2 - c) d = Wa[e], j["margin" +
|
|
d] = j["padding" + d] = b;
|
|
return c && (j.opacity = j.width = b), j
|
|
}
|
|
|
|
function X(b, c, d) {
|
|
for (var e, j = (aa.tweeners[c] || []).concat(aa.tweeners["*"]), f = 0, g = j.length; f < g; f++)
|
|
if (e = j[f].call(d, c, b)) return e
|
|
}
|
|
|
|
function aa(b, c, d) {
|
|
var e, j, f = 0,
|
|
g = aa.prefilters.length,
|
|
n = p.Deferred().always(function() {
|
|
delete q.elem
|
|
}),
|
|
q = function() {
|
|
if (j) return !1;
|
|
for (var c = bb || L(), c = Math.max(0, l.startTime + l.duration - c), d = 1 - (c / l.duration || 0), e = 0, f = l.tweens.length; e < f; e++) l.tweens[e].run(d);
|
|
return n.notifyWith(b, [l, d, c]), 1 > d && f ? c : (f || n.notifyWith(b,
|
|
[l, 1, 0]), n.resolveWith(b, [l]), !1)
|
|
},
|
|
l = n.promise({
|
|
elem: b,
|
|
props: p.extend({}, c),
|
|
opts: p.extend(!0, {
|
|
specialEasing: {},
|
|
easing: p.easing._default
|
|
}, d),
|
|
originalProperties: c,
|
|
originalOptions: d,
|
|
startTime: bb || L(),
|
|
duration: d.duration,
|
|
tweens: [],
|
|
createTween: function(c, d) {
|
|
var e = p.Tween(b, l.opts, c, d, l.opts.specialEasing[c] || l.opts.easing);
|
|
return l.tweens.push(e), e
|
|
},
|
|
stop: function(c) {
|
|
var d = 0,
|
|
e = c ? l.tweens.length : 0;
|
|
if (j) return this;
|
|
for (j = !0; d < e; d++) l.tweens[d].run(1);
|
|
return c ? (n.notifyWith(b, [l, 1, 0]), n.resolveWith(b, [l, c])) :
|
|
n.rejectWith(b, [l, c]), this
|
|
}
|
|
});
|
|
c = l.props;
|
|
d = l.opts.specialEasing;
|
|
var r, s, m, t;
|
|
for (e in c)
|
|
if (r = p.camelCase(e), s = d[r], m = c[e], Array.isArray(m) && (s = m[1], m = c[e] = m[0]), e !== r && (c[r] = m, delete c[e]), t = p.cssHooks[r], t && "expand" in t)
|
|
for (e in m = t.expand(m), delete c[r], m) e in c || (c[e] = m[e], d[e] = s);
|
|
else d[r] = s;
|
|
for (; f < g; f++)
|
|
if (e = aa.prefilters[f].call(l, b, c, l.opts)) return p.isFunction(e.stop) && (p._queueHooks(l.elem, l.opts.queue).stop = p.proxy(e.stop, e)), e;
|
|
return p.map(c, X, l), p.isFunction(l.opts.start) && l.opts.start.call(b,
|
|
l), l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always), p.fx.timer(p.extend(q, {
|
|
elem: b,
|
|
anim: l,
|
|
queue: l.opts.queue
|
|
})), l
|
|
}
|
|
|
|
function la(b) {
|
|
return (b.match(pa) || []).join(" ")
|
|
}
|
|
|
|
function qa(b) {
|
|
return b.getAttribute && b.getAttribute("class") || ""
|
|
}
|
|
|
|
function ea(b, c, d, e) {
|
|
var j;
|
|
if (Array.isArray(c)) p.each(c, function(c, j) {
|
|
d || Qc.test(b) ? e(b, j) : ea(b + "[" + ("object" == typeof j && null != j ? c : "") + "]", j, d, e)
|
|
});
|
|
else if (d || "object" !== p.type(c)) e(b, c);
|
|
else
|
|
for (j in c) ea(b + "[" + j + "]", c[j],
|
|
d, e)
|
|
}
|
|
|
|
function va(b) {
|
|
return function(c, d) {
|
|
"string" != typeof c && (d = c, c = "*");
|
|
var e, j = 0,
|
|
f = c.toLowerCase().match(pa) || [];
|
|
if (p.isFunction(d))
|
|
for (; e = f[j++];) "+" === e[0] ? (e = e.slice(1) || "*", (b[e] = b[e] || []).unshift(d)) : (b[e] = b[e] || []).push(d)
|
|
}
|
|
}
|
|
|
|
function wa(b, c, d, e) {
|
|
function j(n) {
|
|
var q;
|
|
return f[n] = !0, p.each(b[n] || [], function(b, fa) {
|
|
var n = fa(c, d, e);
|
|
return "string" != typeof n || g || f[n] ? g ? !(q = n) : void 0 : (c.dataTypes.unshift(n), j(n), !1)
|
|
}), q
|
|
}
|
|
var f = {},
|
|
g = b === Mb;
|
|
return j(c.dataTypes[0]) || !f["*"] && j("*")
|
|
}
|
|
|
|
function Na(b, c) {
|
|
var d,
|
|
e, j = p.ajaxSettings.flatOptions || {};
|
|
for (d in c) void 0 !== c[d] && ((j[d] ? b : e || (e = {}))[d] = c[d]);
|
|
return e && p.extend(!0, b, e), b
|
|
}
|
|
var ma = [],
|
|
M = b.document,
|
|
Xa = Object.getPrototypeOf,
|
|
ja = ma.slice,
|
|
Ha = ma.concat,
|
|
Oa = ma.push,
|
|
Va = ma.indexOf,
|
|
cb = {},
|
|
wb = cb.toString,
|
|
db = cb.hasOwnProperty,
|
|
xb = db.toString,
|
|
Nb = xb.call(Object),
|
|
W = {},
|
|
p = function(b, c) {
|
|
return new p.fn.init(b, c)
|
|
},
|
|
Ob = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
|
|
Pb = /^-ms-/,
|
|
Ca = /-([a-z])/g,
|
|
Ia = function(b, c) {
|
|
return c.toUpperCase()
|
|
};
|
|
p.fn = p.prototype = {
|
|
jquery: "3.2.1",
|
|
constructor: p,
|
|
length: 0,
|
|
toArray: function() {
|
|
return ja.call(this)
|
|
},
|
|
get: function(b) {
|
|
return null == b ? ja.call(this) : 0 > b ? this[b + this.length] : this[b]
|
|
},
|
|
pushStack: function(b) {
|
|
b = p.merge(this.constructor(), b);
|
|
return b.prevObject = this, b
|
|
},
|
|
each: function(b) {
|
|
return p.each(this, b)
|
|
},
|
|
map: function(b) {
|
|
return this.pushStack(p.map(this, function(c, d) {
|
|
return b.call(c, d, c)
|
|
}))
|
|
},
|
|
slice: function() {
|
|
return this.pushStack(ja.apply(this, arguments))
|
|
},
|
|
first: function() {
|
|
return this.eq(0)
|
|
},
|
|
last: function() {
|
|
return this.eq(-1)
|
|
},
|
|
eq: function(b) {
|
|
var c = this.length;
|
|
b = +b + (0 > b ? c : 0);
|
|
return this.pushStack(0 <= b && b < c ? [this[b]] : [])
|
|
},
|
|
end: function() {
|
|
return this.prevObject || this.constructor()
|
|
},
|
|
push: Oa,
|
|
sort: ma.sort,
|
|
splice: ma.splice
|
|
};
|
|
p.extend = p.fn.extend = function() {
|
|
var b, c, d, e, j, f, g = arguments[0] || {},
|
|
n = 1,
|
|
q = arguments.length,
|
|
l = !1;
|
|
"boolean" == typeof g && (l = g, g = arguments[n] || {}, n++);
|
|
"object" == typeof g || p.isFunction(g) || (g = {});
|
|
for (n === q && (g = this, n--); n < q; n++)
|
|
if (null != (b = arguments[n]))
|
|
for (c in b) d = g[c], e = b[c], g !== e && (l && e && (p.isPlainObject(e) || (j = Array.isArray(e))) ? (j ? (j = !1, f = d &&
|
|
Array.isArray(d) ? d : []) : f = d && p.isPlainObject(d) ? d : {}, g[c] = p.extend(l, f, e)) : void 0 !== e && (g[c] = e));
|
|
return g
|
|
};
|
|
p.extend({
|
|
expando: "jQuery" + ("3.2.1" + Math.random()).replace(/\D/g, ""),
|
|
isReady: !0,
|
|
error: function(b) {
|
|
throw Error(b);
|
|
},
|
|
noop: function() {},
|
|
isFunction: function(b) {
|
|
return "function" === p.type(b)
|
|
},
|
|
isWindow: function(b) {
|
|
return null != b && b === b.window
|
|
},
|
|
isNumeric: function(b) {
|
|
var c = p.type(b);
|
|
return ("number" === c || "string" === c) && !isNaN(b - parseFloat(b))
|
|
},
|
|
isPlainObject: function(b) {
|
|
var c, d;
|
|
return !(!b || "[object Object]" !==
|
|
wb.call(b)) && (!(c = Xa(b)) || (d = db.call(c, "constructor") && c.constructor, "function" == typeof d && xb.call(d) === Nb))
|
|
},
|
|
isEmptyObject: function(b) {
|
|
for (var c in b) return !1;
|
|
return !0
|
|
},
|
|
type: function(b) {
|
|
return null == b ? b + "" : "object" == typeof b || "function" == typeof b ? cb[wb.call(b)] || "object" : typeof b
|
|
},
|
|
globalEval: function(b) {
|
|
e(b)
|
|
},
|
|
camelCase: function(b) {
|
|
return b.replace(Pb, "ms-").replace(Ca, Ia)
|
|
},
|
|
each: function(b, c) {
|
|
var e, j = 0;
|
|
if (d(b))
|
|
for (e = b.length; j < e && !1 !== c.call(b[j], j, b[j]); j++);
|
|
else
|
|
for (j in b)
|
|
if (!1 === c.call(b[j], j,
|
|
b[j])) break;
|
|
return b
|
|
},
|
|
trim: function(b) {
|
|
return null == b ? "" : (b + "").replace(Ob, "")
|
|
},
|
|
makeArray: function(b, c) {
|
|
var e = c || [];
|
|
return null != b && (d(Object(b)) ? p.merge(e, "string" == typeof b ? [b] : b) : Oa.call(e, b)), e
|
|
},
|
|
inArray: function(b, c, d) {
|
|
return null == c ? -1 : Va.call(c, b, d)
|
|
},
|
|
merge: function(b, c) {
|
|
for (var d = +c.length, e = 0, j = b.length; e < d; e++) b[j++] = c[e];
|
|
return b.length = j, b
|
|
},
|
|
grep: function(b, c, d) {
|
|
for (var e = [], j = 0, f = b.length, g = !d; j < f; j++) d = !c(b[j], j), d !== g && e.push(b[j]);
|
|
return e
|
|
},
|
|
map: function(b, c, e) {
|
|
var j, f, g = 0,
|
|
n = [];
|
|
if (d(b))
|
|
for (j =
|
|
b.length; g < j; g++) f = c(b[g], g, e), null != f && n.push(f);
|
|
else
|
|
for (g in b) f = c(b[g], g, e), null != f && n.push(f);
|
|
return Ha.apply([], n)
|
|
},
|
|
guid: 1,
|
|
proxy: function(b, c) {
|
|
var d, e, j;
|
|
if ("string" == typeof c && (d = b[c], c = b, b = d), p.isFunction(b)) return e = ja.call(arguments, 2), j = function() {
|
|
return b.apply(c || this, e.concat(ja.call(arguments)))
|
|
}, j.guid = b.guid = b.guid || p.guid++, j
|
|
},
|
|
now: Date.now,
|
|
support: W
|
|
});
|
|
"function" == typeof Symbol && (p.fn[Symbol.iterator] = ma[Symbol.iterator]);
|
|
p.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),
|
|
function(b, c) {
|
|
cb["[object " + c + "]"] = c.toLowerCase()
|
|
});
|
|
var ra, mb = b,
|
|
V = function(b, c, d, e) {
|
|
var j, f, g, n, q, l = c && c.ownerDocument,
|
|
r = c ? c.nodeType : 9;
|
|
if (d = d || [], "string" != typeof b || !b || 1 !== r && 9 !== r && 11 !== r) return d;
|
|
if (!e && ((c ? c.ownerDocument || c : sa) !== U && Pa(c), c = c || U, ta)) {
|
|
if (11 !== r && (n = Rc.exec(b)))
|
|
if (j = n[1])
|
|
if (9 === r) {
|
|
if (!(f = c.getElementById(j))) return d;
|
|
if (f.id === j) return d.push(f), d
|
|
} else {
|
|
if (l && (f = l.getElementById(j)) && nb(c, f) && f.id === j) return d.push(f), d
|
|
}
|
|
else {
|
|
if (n[2]) return Qa.apply(d, c.getElementsByTagName(b)),
|
|
d;
|
|
if ((j = n[3]) && ba.getElementsByClassName && c.getElementsByClassName) return Qa.apply(d, c.getElementsByClassName(j)), d
|
|
}
|
|
if (ba.qsa && !yb[b + " "] && (!ia || !ia.test(b))) {
|
|
if (1 !== r) l = c, q = b;
|
|
else if ("object" !== c.nodeName.toLowerCase()) {
|
|
(g = c.getAttribute("id")) ? g = g.replace(dc, ec): c.setAttribute("id", g = Z);
|
|
f = ob(b);
|
|
for (j = f.length; j--;) f[j] = "#" + g + " " + xa(f[j]);
|
|
q = f.join(",");
|
|
l = Qb.test(b) && Da(c.parentNode) || c
|
|
}
|
|
if (q) try {
|
|
return Qa.apply(d, l.querySelectorAll(q)), d
|
|
} catch (s) {} finally {
|
|
g === Z && c.removeAttribute("id")
|
|
}
|
|
}
|
|
}
|
|
return fc(b.replace(zb,
|
|
"$1"), c, d, e)
|
|
},
|
|
Ra = function() {
|
|
function b(d, e) {
|
|
return c.push(d + " ") > Q.cacheLength && delete b[c.shift()], b[d + " "] = e
|
|
}
|
|
var c = [];
|
|
return b
|
|
},
|
|
ha = function(b) {
|
|
return b[Z] = !0, b
|
|
},
|
|
na = function(b) {
|
|
var c = U.createElement("fieldset");
|
|
try {
|
|
return !!b(c)
|
|
} catch (d) {
|
|
return !1
|
|
} finally {
|
|
c.parentNode && c.parentNode.removeChild(c)
|
|
}
|
|
},
|
|
Sa = function(b, c) {
|
|
for (var d = b.split("|"), e = d.length; e--;) Q.attrHandle[d[e]] = c
|
|
},
|
|
Ja = function(b, c) {
|
|
var d = c && b,
|
|
e = d && 1 === b.nodeType && 1 === c.nodeType && b.sourceIndex - c.sourceIndex;
|
|
if (e) return e;
|
|
if (d)
|
|
for (; d = d.nextSibling;)
|
|
if (d ===
|
|
c) return -1;
|
|
return b ? 1 : -1
|
|
},
|
|
Ab = function(b) {
|
|
return function(c) {
|
|
return "input" === c.nodeName.toLowerCase() && c.type === b
|
|
}
|
|
},
|
|
Ta = function(b) {
|
|
return function(c) {
|
|
var d = c.nodeName.toLowerCase();
|
|
return ("input" === d || "button" === d) && c.type === b
|
|
}
|
|
},
|
|
eb = function(b) {
|
|
return function(c) {
|
|
return "form" in c ? c.parentNode && !1 === c.disabled ? "label" in c ? "label" in c.parentNode ? c.parentNode.disabled === b : c.disabled === b : c.isDisabled === b || c.isDisabled !== !b && Sc(c) === b : c.disabled === b : "label" in c && c.disabled === b
|
|
}
|
|
},
|
|
Ea = function(b) {
|
|
return ha(function(c) {
|
|
return c = +c, ha(function(d, e) {
|
|
for (var j, f = b([], d.length, c), g = f.length; g--;) d[j = f[g]] && (d[j] = !(e[j] = d[j]))
|
|
})
|
|
})
|
|
},
|
|
Da = function(b) {
|
|
return b && "undefined" != typeof b.getElementsByTagName && b
|
|
},
|
|
Fa = function() {},
|
|
xa = function(b) {
|
|
for (var c = 0, d = b.length, e = ""; c < d; c++) e += b[c].value;
|
|
return e
|
|
},
|
|
Ya = function(b, c, d) {
|
|
var e = c.dir,
|
|
j = c.next,
|
|
f = j || e,
|
|
g = d && "parentNode" === f,
|
|
n = Tc++;
|
|
return c.first ? function(c, d, j) {
|
|
for (; c = c[e];)
|
|
if (1 === c.nodeType || g) return b(c, d, j);
|
|
return !1
|
|
} : function(c, d, q) {
|
|
var l, r, ga, s = [Ga, n];
|
|
if (q)
|
|
for (; c = c[e];) {
|
|
if ((1 === c.nodeType ||
|
|
g) && b(c, d, q)) return !0
|
|
} else
|
|
for (; c = c[e];)
|
|
if (1 === c.nodeType || g)
|
|
if (ga = c[Z] || (c[Z] = {}), r = ga[c.uniqueID] || (ga[c.uniqueID] = {}), j && j === c.nodeName.toLowerCase()) c = c[e] || c;
|
|
else {
|
|
if ((l = r[f]) && l[0] === Ga && l[1] === n) return s[2] = l[2];
|
|
if (r[f] = s, s[2] = b(c, d, q)) return !0
|
|
} return !1
|
|
}
|
|
},
|
|
ya = function(b) {
|
|
return 1 < b.length ? function(c, d, e) {
|
|
for (var j = b.length; j--;)
|
|
if (!b[j](c, d, e)) return !1;
|
|
return !0
|
|
} : b[0]
|
|
},
|
|
za = function(b, c, d, e, j) {
|
|
for (var f, g = [], n = 0, q = b.length, l = null != c; n < q; n++)(f = b[n]) && (d && !d(f, e, j) || (g.push(f), l && c.push(n)));
|
|
return g
|
|
},
|
|
Aa = function(b, c, d, e, j, f) {
|
|
return e && !e[Z] && (e = Aa(e)), j && !j[Z] && (j = Aa(j, f)), ha(function(f, g, n, q) {
|
|
var l, r, s = [],
|
|
m = [],
|
|
p = g.length,
|
|
t;
|
|
if (!(t = f)) {
|
|
t = c || "*";
|
|
for (var u = n.nodeType ? [n] : n, y = [], Kb = 0, z = u.length; Kb < z; Kb++) V(t, u[Kb], y);
|
|
t = y
|
|
}
|
|
t = !b || !f && c ? t : za(t, s, b, n, q);
|
|
u = d ? j || (f ? b : p || e) ? [] : g : t;
|
|
if (d && d(t, u, n, q), e) {
|
|
l = za(u, m);
|
|
e(l, [], n, q);
|
|
for (n = l.length; n--;)(r = l[n]) && (u[m[n]] = !(t[m[n]] = r))
|
|
}
|
|
if (f) {
|
|
if (j || b) {
|
|
if (j) {
|
|
l = [];
|
|
for (n = u.length; n--;)(r = u[n]) && l.push(t[n] = r);
|
|
j(null, u = [], l, q)
|
|
}
|
|
for (n = u.length; n--;)(r = u[n]) && -1 < (l = j ? Za(f, r) :
|
|
s[n]) && (f[l] = !(g[l] = r))
|
|
}
|
|
} else u = za(u === g ? u.splice(p, u.length) : u), j ? j(null, g, u, q) : Qa.apply(g, u)
|
|
})
|
|
},
|
|
Rb = function(b) {
|
|
var c, d, e, j = b.length,
|
|
f = Q.relative[b[0].type];
|
|
d = f || Q.relative[" "];
|
|
for (var g = f ? 1 : 0, n = Ya(function(b) {
|
|
return b === c
|
|
}, d, !0), q = Ya(function(b) {
|
|
return -1 < Za(c, b)
|
|
}, d, !0), l = [function(b, d, e) {
|
|
b = !f && (e || d !== fb) || ((c = d).nodeType ? n(b, d, e) : q(b, d, e));
|
|
return c = null, b
|
|
}]; g < j; g++)
|
|
if (d = Q.relative[b[g].type]) l = [Ya(ya(l), d)];
|
|
else {
|
|
if (d = Q.filter[b[g].type].apply(null, b[g].matches), d[Z]) {
|
|
for (e = ++g; e < j && !Q.relative[b[e].type]; e++);
|
|
return Aa(1 < g && ya(l), 1 < g && xa(b.slice(0, g - 1).concat({
|
|
value: " " === b[g - 2].type ? "*" : ""
|
|
})).replace(zb, "$1"), d, g < e && Rb(b.slice(g, e)), e < j && Rb(b = b.slice(e)), e < j && xa(b))
|
|
}
|
|
l.push(d)
|
|
} return ya(l)
|
|
},
|
|
gb, ba, Q, Bb, gc, ob, Sb, fc, fb, Ua, hb, Pa, U, ua, ta, ia, $a, Cb, nb, Z = "sizzle" + 1 * new Date,
|
|
sa = mb.document,
|
|
Ga = 0,
|
|
Tc = 0,
|
|
hc = Ra(),
|
|
ic = Ra(),
|
|
yb = Ra(),
|
|
Tb = function(b, c) {
|
|
return b === c && (hb = !0), 0
|
|
},
|
|
Uc = {}.hasOwnProperty,
|
|
ab = [],
|
|
Vc = ab.pop,
|
|
Wc = ab.push,
|
|
Qa = ab.push,
|
|
jc = ab.slice,
|
|
Za = function(b, c) {
|
|
for (var d = 0, e = b.length; d < e; d++)
|
|
if (b[d] === c) return d;
|
|
return -1
|
|
},
|
|
Xc = /[\x20\t\r\n\f]+/g,
|
|
zb = /^[\x20\t\r\n\f]+|((?:^|[^\\])(?:\\.)*)[\x20\t\r\n\f]+$/g,
|
|
Yc = /^[\x20\t\r\n\f]*,[\x20\t\r\n\f]*/,
|
|
Zc = /^[\x20\t\r\n\f]*([>+~]|[\x20\t\r\n\f])[\x20\t\r\n\f]*/,
|
|
$c = /=[\x20\t\r\n\f]*([^\]'"]*?)[\x20\t\r\n\f]*\]/g,
|
|
ad = RegExp(":((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\.|[\\w-]|[^\x00-\\xa0])+))|)[\\x20\\t\\r\\n\\f]*\\])*)|.*)\\)|)"),
|
|
bd = /^(?:\\.|[\w-]|[^\x00-\xa0])+$/,
|
|
Db = {
|
|
ID: /^#((?:\\.|[\w-]|[^\x00-\xa0])+)/,
|
|
CLASS: /^\.((?:\\.|[\w-]|[^\x00-\xa0])+)/,
|
|
TAG: /^((?:\\.|[\w-]|[^\x00-\xa0])+|[*])/,
|
|
ATTR: RegExp("^\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\.|[\\w-]|[^\x00-\\xa0])+))|)[\\x20\\t\\r\\n\\f]*\\]"),
|
|
PSEUDO: RegExp("^:((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\.|[\\w-]|[^\x00-\\xa0])+))|)[\\x20\\t\\r\\n\\f]*\\])*)|.*)\\)|)"),
|
|
CHILD: RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)", "i"),
|
|
bool: RegExp("^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$", "i"),
|
|
needsContext: RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)",
|
|
"i")
|
|
},
|
|
cd = /^(?:input|select|textarea|button)$/i,
|
|
dd = /^h\d$/i,
|
|
pb = /^[^{]+\{\s*\[native \w/,
|
|
Rc = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
|
|
Qb = /[+~]/,
|
|
Ka = /\\([\da-f]{1,6}[\x20\t\r\n\f]?|([\x20\t\r\n\f])|.)/ig,
|
|
La = function(b, c, d) {
|
|
b = "0x" + c - 65536;
|
|
return b !== b || d ? c : 0 > b ? String.fromCharCode(b + 65536) : String.fromCharCode(b >> 10 | 55296, 1023 & b | 56320)
|
|
},
|
|
dc = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
|
|
ec = function(b, c) {
|
|
return c ? "\x00" === b ? "\ufffd" : b.slice(0, -1) + "\\" + b.charCodeAt(b.length - 1).toString(16) + " " : "\\" + b
|
|
},
|
|
kc = function() {
|
|
Pa()
|
|
},
|
|
Sc = Ya(function(b) {
|
|
return !0 === b.disabled && ("form" in b || "label" in b)
|
|
}, {
|
|
dir: "parentNode",
|
|
next: "legend"
|
|
});
|
|
try {
|
|
Qa.apply(ab = jc.call(sa.childNodes), sa.childNodes), ab[sa.childNodes.length].nodeType
|
|
} catch (Gd) {
|
|
Qa = {
|
|
apply: ab.length ? function(b, c) {
|
|
Wc.apply(b, jc.call(c))
|
|
} : function(b, c) {
|
|
for (var d = b.length, e = 0; b[d++] = c[e++];);
|
|
b.length = d - 1
|
|
}
|
|
}
|
|
}
|
|
ba = V.support = {};
|
|
gc = V.isXML = function(b) {
|
|
b = b && (b.ownerDocument || b).documentElement;
|
|
return !!b && "HTML" !== b.nodeName
|
|
};
|
|
Pa = V.setDocument = function(b) {
|
|
var c, d;
|
|
b = b ? b.ownerDocument || b : sa;
|
|
return b !== U && 9 === b.nodeType && b.documentElement ? (U = b, ua = U.documentElement, ta = !gc(U), sa !== U && (d = U.defaultView) && d.top !== d && (d.addEventListener ? d.addEventListener("unload", kc, !1) : d.attachEvent && d.attachEvent("onunload", kc)), ba.attributes = na(function(b) {
|
|
return b.className = "i", !b.getAttribute("className")
|
|
}), ba.getElementsByTagName = na(function(b) {
|
|
return b.appendChild(U.createComment("")), !b.getElementsByTagName("*").length
|
|
}), ba.getElementsByClassName = pb.test(U.getElementsByClassName), ba.getById = na(function(b) {
|
|
return ua.appendChild(b).id =
|
|
Z, !U.getElementsByName || !U.getElementsByName(Z).length
|
|
}), ba.getById ? (Q.filter.ID = function(b) {
|
|
var c = b.replace(Ka, La);
|
|
return function(b) {
|
|
return b.getAttribute("id") === c
|
|
}
|
|
}, Q.find.ID = function(b, c) {
|
|
if ("undefined" != typeof c.getElementById && ta) {
|
|
var d = c.getElementById(b);
|
|
return d ? [d] : []
|
|
}
|
|
}) : (Q.filter.ID = function(b) {
|
|
var c = b.replace(Ka, La);
|
|
return function(b) {
|
|
return (b = "undefined" != typeof b.getAttributeNode && b.getAttributeNode("id")) && b.value === c
|
|
}
|
|
}, Q.find.ID = function(b, c) {
|
|
if ("undefined" != typeof c.getElementById &&
|
|
ta) {
|
|
var d, e, j, f = c.getElementById(b);
|
|
if (f) {
|
|
if (d = f.getAttributeNode("id"), d && d.value === b) return [f];
|
|
j = c.getElementsByName(b);
|
|
for (e = 0; f = j[e++];)
|
|
if (d = f.getAttributeNode("id"), d && d.value === b) return [f]
|
|
}
|
|
return []
|
|
}
|
|
}), Q.find.TAG = ba.getElementsByTagName ? function(b, c) {
|
|
return "undefined" != typeof c.getElementsByTagName ? c.getElementsByTagName(b) : ba.qsa ? c.querySelectorAll(b) : void 0
|
|
} : function(b, c) {
|
|
var d, e = [],
|
|
j = 0,
|
|
f = c.getElementsByTagName(b);
|
|
if ("*" === b) {
|
|
for (; d = f[j++];) 1 === d.nodeType && e.push(d);
|
|
return e
|
|
}
|
|
return f
|
|
}, Q.find.CLASS =
|
|
ba.getElementsByClassName && function(b, c) {
|
|
if ("undefined" != typeof c.getElementsByClassName && ta) return c.getElementsByClassName(b)
|
|
}, $a = [], ia = [], (ba.qsa = pb.test(U.querySelectorAll)) && (na(function(b) {
|
|
ua.appendChild(b).innerHTML = "<a id='" + Z + "'></a><select id='" + Z + "-\r\\' msallowcapture=''><option selected=''></option></select>";
|
|
b.querySelectorAll("[msallowcapture^='']").length && ia.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")");
|
|
b.querySelectorAll("[selected]").length || ia.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)");
|
|
b.querySelectorAll("[id~=" + Z + "-]").length || ia.push("~=");
|
|
b.querySelectorAll(":checked").length || ia.push(":checked");
|
|
b.querySelectorAll("a#" + Z + "+*").length || ia.push(".#.+[+~]")
|
|
}), na(function(b) {
|
|
b.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
|
|
var c = U.createElement("input");
|
|
c.setAttribute("type", "hidden");
|
|
b.appendChild(c).setAttribute("name", "D");
|
|
b.querySelectorAll("[name=d]").length && ia.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?=");
|
|
2 !== b.querySelectorAll(":enabled").length &&
|
|
ia.push(":enabled", ":disabled");
|
|
ua.appendChild(b).disabled = !0;
|
|
2 !== b.querySelectorAll(":disabled").length && ia.push(":enabled", ":disabled");
|
|
b.querySelectorAll("*,:x");
|
|
ia.push(",.*:")
|
|
})), (ba.matchesSelector = pb.test(Cb = ua.matches || ua.webkitMatchesSelector || ua.mozMatchesSelector || ua.oMatchesSelector || ua.msMatchesSelector)) && na(function(b) {
|
|
ba.disconnectedMatch = Cb.call(b, "*");
|
|
Cb.call(b, "[s!='']:x");
|
|
$a.push("!=", ":((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\x00-\\xa0])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?=)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\.|[\\w-]|[^\x00-\\xa0])+))|)[\\x20\\t\\r\\n\\f]*\\])*)|.*)\\)|)")
|
|
}),
|
|
ia = ia.length && RegExp(ia.join("|")), $a = $a.length && RegExp($a.join("|")), c = pb.test(ua.compareDocumentPosition), nb = c || pb.test(ua.contains) ? function(b, c) {
|
|
var d = 9 === b.nodeType ? b.documentElement : b,
|
|
e = c && c.parentNode;
|
|
return b === e || !(!e || 1 !== e.nodeType || !(d.contains ? d.contains(e) : b.compareDocumentPosition && 16 & b.compareDocumentPosition(e)))
|
|
} : function(b, c) {
|
|
if (c)
|
|
for (; c = c.parentNode;)
|
|
if (c === b) return !0;
|
|
return !1
|
|
}, Tb = c ? function(b, c) {
|
|
if (b === c) return hb = !0, 0;
|
|
var d = !b.compareDocumentPosition - !c.compareDocumentPosition;
|
|
return d ? d : (d = (b.ownerDocument || b) === (c.ownerDocument || c) ? b.compareDocumentPosition(c) : 1, 1 & d || !ba.sortDetached && c.compareDocumentPosition(b) === d ? b === U || b.ownerDocument === sa && nb(sa, b) ? -1 : c === U || c.ownerDocument === sa && nb(sa, c) ? 1 : Ua ? Za(Ua, b) - Za(Ua, c) : 0 : 4 & d ? -1 : 1)
|
|
} : function(b, c) {
|
|
if (b === c) return hb = !0, 0;
|
|
var d, e = 0;
|
|
d = b.parentNode;
|
|
var j = c.parentNode,
|
|
f = [b],
|
|
g = [c];
|
|
if (!d || !j) return b === U ? -1 : c === U ? 1 : d ? -1 : j ? 1 : Ua ? Za(Ua, b) - Za(Ua, c) : 0;
|
|
if (d === j) return Ja(b, c);
|
|
for (d = b; d = d.parentNode;) f.unshift(d);
|
|
for (d = c; d = d.parentNode;) g.unshift(d);
|
|
for (; f[e] === g[e];) e++;
|
|
return e ? Ja(f[e], g[e]) : f[e] === sa ? -1 : g[e] === sa ? 1 : 0
|
|
}, U) : U
|
|
};
|
|
V.matches = function(b, c) {
|
|
return V(b, null, null, c)
|
|
};
|
|
V.matchesSelector = function(b, c) {
|
|
if ((b.ownerDocument || b) !== U && Pa(b), c = c.replace($c, "='$1']"), ba.matchesSelector && ta && !yb[c + " "] && (!$a || !$a.test(c)) && (!ia || !ia.test(c))) try {
|
|
var d = Cb.call(b, c);
|
|
if (d || ba.disconnectedMatch || b.document && 11 !== b.document.nodeType) return d
|
|
} catch (e) {}
|
|
return 0 < V(c, U, null, [b]).length
|
|
};
|
|
V.contains = function(b, c) {
|
|
return (b.ownerDocument || b) !== U && Pa(b), nb(b,
|
|
c)
|
|
};
|
|
V.attr = function(b, c) {
|
|
(b.ownerDocument || b) !== U && Pa(b);
|
|
var d = Q.attrHandle[c.toLowerCase()],
|
|
d = d && Uc.call(Q.attrHandle, c.toLowerCase()) ? d(b, c, !ta) : void 0;
|
|
return void 0 !== d ? d : ba.attributes || !ta ? b.getAttribute(c) : (d = b.getAttributeNode(c)) && d.specified ? d.value : null
|
|
};
|
|
V.escape = function(b) {
|
|
return (b + "").replace(dc, ec)
|
|
};
|
|
V.error = function(b) {
|
|
throw Error("Syntax error, unrecognized expression: " + b);
|
|
};
|
|
V.uniqueSort = function(b) {
|
|
var c, d = [],
|
|
e = 0,
|
|
j = 0;
|
|
if (hb = !ba.detectDuplicates, Ua = !ba.sortStable && b.slice(0), b.sort(Tb),
|
|
hb) {
|
|
for (; c = b[j++];) c === b[j] && (e = d.push(j));
|
|
for (; e--;) b.splice(d[e], 1)
|
|
}
|
|
return Ua = null, b
|
|
};
|
|
Bb = V.getText = function(b) {
|
|
var c, d = "",
|
|
e = 0;
|
|
if (c = b.nodeType)
|
|
if (1 === c || 9 === c || 11 === c) {
|
|
if ("string" == typeof b.textContent) return b.textContent;
|
|
for (b = b.firstChild; b; b = b.nextSibling) d += Bb(b)
|
|
} else {
|
|
if (3 === c || 4 === c) return b.nodeValue
|
|
}
|
|
else
|
|
for (; c = b[e++];) d += Bb(c);
|
|
return d
|
|
};
|
|
Q = V.selectors = {
|
|
cacheLength: 50,
|
|
createPseudo: ha,
|
|
match: Db,
|
|
attrHandle: {},
|
|
find: {},
|
|
relative: {
|
|
">": {
|
|
dir: "parentNode",
|
|
first: !0
|
|
},
|
|
" ": {
|
|
dir: "parentNode"
|
|
},
|
|
"+": {
|
|
dir: "previousSibling",
|
|
first: !0
|
|
},
|
|
"~": {
|
|
dir: "previousSibling"
|
|
}
|
|
},
|
|
preFilter: {
|
|
ATTR: function(b) {
|
|
return b[1] = b[1].replace(Ka, La), b[3] = (b[3] || b[4] || b[5] || "").replace(Ka, La), "~=" === b[2] && (b[3] = " " + b[3] + " "), b.slice(0, 4)
|
|
},
|
|
CHILD: function(b) {
|
|
return b[1] = b[1].toLowerCase(), "nth" === b[1].slice(0, 3) ? (b[3] || V.error(b[0]), b[4] = +(b[4] ? b[5] + (b[6] || 1) : 2 * ("even" === b[3] || "odd" === b[3])), b[5] = +(b[7] + b[8] || "odd" === b[3])) : b[3] && V.error(b[0]), b
|
|
},
|
|
PSEUDO: function(b) {
|
|
var c, d = !b[6] && b[2];
|
|
return Db.CHILD.test(b[0]) ? null : (b[3] ? b[2] = b[4] || b[5] || "" : d && ad.test(d) &&
|
|
(c = ob(d, !0)) && (c = d.indexOf(")", d.length - c) - d.length) && (b[0] = b[0].slice(0, c), b[2] = d.slice(0, c)), b.slice(0, 3))
|
|
}
|
|
},
|
|
filter: {
|
|
TAG: function(b) {
|
|
var c = b.replace(Ka, La).toLowerCase();
|
|
return "*" === b ? function() {
|
|
return !0
|
|
} : function(b) {
|
|
return b.nodeName && b.nodeName.toLowerCase() === c
|
|
}
|
|
},
|
|
CLASS: function(b) {
|
|
var c = hc[b + " "];
|
|
return c || (c = RegExp("(^|[\\x20\\t\\r\\n\\f])" + b + "([\\x20\\t\\r\\n\\f]|$)")) && hc(b, function(b) {
|
|
return c.test("string" == typeof b.className && b.className || "undefined" != typeof b.getAttribute && b.getAttribute("class") ||
|
|
"")
|
|
})
|
|
},
|
|
ATTR: function(b, c, d) {
|
|
return function(e) {
|
|
e = V.attr(e, b);
|
|
return null == e ? "!=" === c : !c || (e += "", "=" === c ? e === d : "!=" === c ? e !== d : "^=" === c ? d && 0 === e.indexOf(d) : "*=" === c ? d && -1 < e.indexOf(d) : "$=" === c ? d && e.slice(-d.length) === d : "~=" === c ? -1 < (" " + e.replace(Xc, " ") + " ").indexOf(d) : "|=" === c && (e === d || e.slice(0, d.length + 1) === d + "-"))
|
|
}
|
|
},
|
|
CHILD: function(b, c, d, e, j) {
|
|
var f = "nth" !== b.slice(0, 3),
|
|
g = "last" !== b.slice(-4),
|
|
n = "of-type" === c;
|
|
return 1 === e && 0 === j ? function(b) {
|
|
return !!b.parentNode
|
|
} : function(c, d, q) {
|
|
var l, r, s, m, ga, t;
|
|
d =
|
|
f !== g ? "nextSibling" : "previousSibling";
|
|
var p = c.parentNode,
|
|
kb = n && c.nodeName.toLowerCase();
|
|
q = !q && !n;
|
|
var u = !1;
|
|
if (p) {
|
|
if (f) {
|
|
for (; d;) {
|
|
for (m = c; m = m[d];)
|
|
if (n ? m.nodeName.toLowerCase() === kb : 1 === m.nodeType) return !1;
|
|
t = d = "only" === b && !t && "nextSibling"
|
|
}
|
|
return !0
|
|
}
|
|
if (t = [g ? p.firstChild : p.lastChild], g && q) {
|
|
m = p;
|
|
s = m[Z] || (m[Z] = {});
|
|
r = s[m.uniqueID] || (s[m.uniqueID] = {});
|
|
l = r[b] || [];
|
|
u = (ga = l[0] === Ga && l[1]) && l[2];
|
|
for (m = ga && p.childNodes[ga]; m = ++ga && m && m[d] || (u = ga = 0) || t.pop();)
|
|
if (1 === m.nodeType && ++u && m === c) {
|
|
r[b] = [Ga, ga, u];
|
|
break
|
|
}
|
|
} else if (q &&
|
|
(m = c, s = m[Z] || (m[Z] = {}), r = s[m.uniqueID] || (s[m.uniqueID] = {}), l = r[b] || [], ga = l[0] === Ga && l[1], u = ga), !1 === u)
|
|
for (;
|
|
(m = ++ga && m && m[d] || (u = ga = 0) || t.pop()) && (!(n ? m.nodeName.toLowerCase() === kb : 1 === m.nodeType) || !++u || !(q && (s = m[Z] || (m[Z] = {}), r = s[m.uniqueID] || (s[m.uniqueID] = {}), r[b] = [Ga, u]), m === c)););
|
|
return u -= j, u === e || 0 === u % e && 0 <= u / e
|
|
}
|
|
}
|
|
},
|
|
PSEUDO: function(b, c) {
|
|
var d, e = Q.pseudos[b] || Q.setFilters[b.toLowerCase()] || V.error("unsupported pseudo: " + b);
|
|
return e[Z] ? e(c) : 1 < e.length ? (d = [b, b, "", c], Q.setFilters.hasOwnProperty(b.toLowerCase()) ?
|
|
ha(function(b, d) {
|
|
for (var j, f = e(b, c), g = f.length; g--;) j = Za(b, f[g]), b[j] = !(d[j] = f[g])
|
|
}) : function(b) {
|
|
return e(b, 0, d)
|
|
}) : e
|
|
}
|
|
},
|
|
pseudos: {
|
|
not: ha(function(b) {
|
|
var c = [],
|
|
d = [],
|
|
e = Sb(b.replace(zb, "$1"));
|
|
return e[Z] ? ha(function(b, c, d, j) {
|
|
var f;
|
|
d = e(b, null, j, []);
|
|
for (j = b.length; j--;)(f = d[j]) && (b[j] = !(c[j] = f))
|
|
}) : function(b, j, f) {
|
|
return c[0] = b, e(c, null, f, d), c[0] = null, !d.pop()
|
|
}
|
|
}),
|
|
has: ha(function(b) {
|
|
return function(c) {
|
|
return 0 < V(b, c).length
|
|
}
|
|
}),
|
|
contains: ha(function(b) {
|
|
return b = b.replace(Ka, La),
|
|
function(c) {
|
|
return -1 < (c.textContent ||
|
|
c.innerText || Bb(c)).indexOf(b)
|
|
}
|
|
}),
|
|
lang: ha(function(b) {
|
|
return bd.test(b || "") || V.error("unsupported lang: " + b), b = b.replace(Ka, La).toLowerCase(),
|
|
function(c) {
|
|
var d;
|
|
do
|
|
if (d = ta ? c.lang : c.getAttribute("xml:lang") || c.getAttribute("lang")) return d = d.toLowerCase(), d === b || 0 === d.indexOf(b + "-"); while ((c = c.parentNode) && 1 === c.nodeType);
|
|
return !1
|
|
}
|
|
}),
|
|
target: function(b) {
|
|
var c = mb.location && mb.location.hash;
|
|
return c && c.slice(1) === b.id
|
|
},
|
|
root: function(b) {
|
|
return b === ua
|
|
},
|
|
focus: function(b) {
|
|
return b === U.activeElement && (!U.hasFocus ||
|
|
U.hasFocus()) && !(!b.type && !b.href && !~b.tabIndex)
|
|
},
|
|
enabled: eb(!1),
|
|
disabled: eb(!0),
|
|
checked: function(b) {
|
|
var c = b.nodeName.toLowerCase();
|
|
return "input" === c && !!b.checked || "option" === c && !!b.selected
|
|
},
|
|
selected: function(b) {
|
|
return b.parentNode && b.parentNode.selectedIndex, !0 === b.selected
|
|
},
|
|
empty: function(b) {
|
|
for (b = b.firstChild; b; b = b.nextSibling)
|
|
if (6 > b.nodeType) return !1;
|
|
return !0
|
|
},
|
|
parent: function(b) {
|
|
return !Q.pseudos.empty(b)
|
|
},
|
|
header: function(b) {
|
|
return dd.test(b.nodeName)
|
|
},
|
|
input: function(b) {
|
|
return cd.test(b.nodeName)
|
|
},
|
|
button: function(b) {
|
|
var c = b.nodeName.toLowerCase();
|
|
return "input" === c && "button" === b.type || "button" === c
|
|
},
|
|
text: function(b) {
|
|
var c;
|
|
return "input" === b.nodeName.toLowerCase() && "text" === b.type && (null == (c = b.getAttribute("type")) || "text" === c.toLowerCase())
|
|
},
|
|
first: Ea(function() {
|
|
return [0]
|
|
}),
|
|
last: Ea(function(b, c) {
|
|
return [c - 1]
|
|
}),
|
|
eq: Ea(function(b, c, d) {
|
|
return [0 > d ? d + c : d]
|
|
}),
|
|
even: Ea(function(b, c) {
|
|
for (var d = 0; d < c; d += 2) b.push(d);
|
|
return b
|
|
}),
|
|
odd: Ea(function(b, c) {
|
|
for (var d = 1; d < c; d += 2) b.push(d);
|
|
return b
|
|
}),
|
|
lt: Ea(function(b, c,
|
|
d) {
|
|
for (c = 0 > d ? d + c : d; 0 <= --c;) b.push(c);
|
|
return b
|
|
}),
|
|
gt: Ea(function(b, c, d) {
|
|
for (d = 0 > d ? d + c : d; ++d < c;) b.push(d);
|
|
return b
|
|
})
|
|
}
|
|
};
|
|
Q.pseudos.nth = Q.pseudos.eq;
|
|
for (gb in {
|
|
radio: !0,
|
|
checkbox: !0,
|
|
file: !0,
|
|
password: !0,
|
|
image: !0
|
|
}) Q.pseudos[gb] = Ab(gb);
|
|
for (gb in {
|
|
submit: !0,
|
|
reset: !0
|
|
}) Q.pseudos[gb] = Ta(gb);
|
|
Fa.prototype = Q.filters = Q.pseudos;
|
|
Q.setFilters = new Fa;
|
|
ob = V.tokenize = function(b, c) {
|
|
var d, e, j, f, g, n, q;
|
|
if (g = ic[b + " "]) return c ? 0 : g.slice(0);
|
|
g = b;
|
|
n = [];
|
|
for (q = Q.preFilter; g;) {
|
|
d && !(e = Yc.exec(g)) || (e && (g = g.slice(e[0].length) || g), n.push(j = []));
|
|
d = !1;
|
|
(e = Zc.exec(g)) && (d = e.shift(), j.push({
|
|
value: d,
|
|
type: e[0].replace(zb, " ")
|
|
}), g = g.slice(d.length));
|
|
for (f in Q.filter) !(e = Db[f].exec(g)) || q[f] && !(e = q[f](e)) || (d = e.shift(), j.push({
|
|
value: d,
|
|
type: f,
|
|
matches: e
|
|
}), g = g.slice(d.length));
|
|
if (!d) break
|
|
}
|
|
return c ? g.length : g ? V.error(b) : ic(b, n).slice(0)
|
|
};
|
|
ra = (Sb = V.compile = function(b, c) {
|
|
var d, e = [],
|
|
j = [],
|
|
f = yb[b + " "];
|
|
if (!f) {
|
|
c || (c = ob(b));
|
|
for (d = c.length; d--;) f = Rb(c[d]), f[Z] ? e.push(f) : j.push(f);
|
|
d = yb;
|
|
var g = 0 < e.length,
|
|
n = 0 < j.length,
|
|
f = function(b, c, d, f, q) {
|
|
var l, fa, r, s = 0,
|
|
m =
|
|
"0",
|
|
ga = b && [],
|
|
t = [],
|
|
p = fb,
|
|
u = b || n && Q.find.TAG("*", q),
|
|
kb = Ga += null == p ? 1 : Math.random() || 0.1,
|
|
y = u.length;
|
|
for (q && (fb = c === U || c || q); m !== y && null != (l = u[m]); m++) {
|
|
if (n && l) {
|
|
fa = 0;
|
|
for (c || l.ownerDocument === U || (Pa(l), d = !ta); r = j[fa++];)
|
|
if (r(l, c || U, d)) {
|
|
f.push(l);
|
|
break
|
|
} q && (Ga = kb)
|
|
}
|
|
g && ((l = !r && l) && s--, b && ga.push(l))
|
|
}
|
|
if (s += m, g && m !== s) {
|
|
for (fa = 0; r = e[fa++];) r(ga, t, c, d);
|
|
if (b) {
|
|
if (0 < s)
|
|
for (; m--;) ga[m] || t[m] || (t[m] = Vc.call(f));
|
|
t = za(t)
|
|
}
|
|
Qa.apply(f, t);
|
|
q && !b && 0 < t.length && 1 < s + e.length && V.uniqueSort(f)
|
|
}
|
|
return q && (Ga = kb, fb = p), ga
|
|
},
|
|
f = g ? ha(f) :
|
|
f,
|
|
f = d(b, f);
|
|
f.selector = b
|
|
}
|
|
return f
|
|
}, fc = V.select = function(b, c, d, e) {
|
|
var j, f, g, n, q, l = "function" == typeof b && b,
|
|
r = !e && ob(b = l.selector || b);
|
|
if (d = d || [], 1 === r.length) {
|
|
if (f = r[0] = r[0].slice(0), 2 < f.length && "ID" === (g = f[0]).type && 9 === c.nodeType && ta && Q.relative[f[1].type]) {
|
|
if (c = (Q.find.ID(g.matches[0].replace(Ka, La), c) || [])[0], !c) return d;
|
|
l && (c = c.parentNode);
|
|
b = b.slice(f.shift().value.length)
|
|
}
|
|
for (j = Db.needsContext.test(b) ? 0 : f.length; j-- && !(g = f[j], Q.relative[n = g.type]);)
|
|
if ((q = Q.find[n]) && (e = q(g.matches[0].replace(Ka,
|
|
La), Qb.test(f[0].type) && Da(c.parentNode) || c))) {
|
|
if (f.splice(j, 1), b = e.length && xa(f), !b) return Qa.apply(d, e), d;
|
|
break
|
|
}
|
|
}
|
|
return (l || Sb(b, r))(e, c, !ta, d, !c || Qb.test(b) && Da(c.parentNode) || c), d
|
|
}, ba.sortStable = Z.split("").sort(Tb).join("") === Z, ba.detectDuplicates = !!hb, Pa(), ba.sortDetached = na(function(b) {
|
|
return 1 & b.compareDocumentPosition(U.createElement("fieldset"))
|
|
}), na(function(b) {
|
|
return b.innerHTML = "<a href='#'></a>", "#" === b.firstChild.getAttribute("href")
|
|
}) || Sa("type|href|height|width", function(b, c, d) {
|
|
if (!d) return b.getAttribute(c,
|
|
"type" === c.toLowerCase() ? 1 : 2)
|
|
}), ba.attributes && na(function(b) {
|
|
return b.innerHTML = "<input/>", b.firstChild.setAttribute("value", ""), "" === b.firstChild.getAttribute("value")
|
|
}) || Sa("value", function(b, c, d) {
|
|
if (!d && "input" === b.nodeName.toLowerCase()) return b.defaultValue
|
|
}), na(function(b) {
|
|
return null == b.getAttribute("disabled")
|
|
}) || Sa("checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", function(b, c, d) {
|
|
var e;
|
|
if (!d) return !0 === b[c] ? c.toLowerCase() :
|
|
(e = b.getAttributeNode(c)) && e.specified ? e.value : null
|
|
}), V);
|
|
p.find = ra;
|
|
p.expr = ra.selectors;
|
|
p.expr[":"] = p.expr.pseudos;
|
|
p.uniqueSort = p.unique = ra.uniqueSort;
|
|
p.text = ra.getText;
|
|
p.isXMLDoc = ra.isXML;
|
|
p.contains = ra.contains;
|
|
p.escapeSelector = ra.escape;
|
|
var ib = function(b, c, d) {
|
|
for (var e = [], j = void 0 !== d;
|
|
(b = b[c]) && 9 !== b.nodeType;)
|
|
if (1 === b.nodeType) {
|
|
if (j && p(b).is(d)) break;
|
|
e.push(b)
|
|
} return e
|
|
},
|
|
lc = function(b, c) {
|
|
for (var d = []; b; b = b.nextSibling) 1 === b.nodeType && b !== c && d.push(b);
|
|
return d
|
|
},
|
|
mc = p.expr.match.needsContext,
|
|
nc = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,
|
|
Ic = /^.[^:#\[\.,]*$/;
|
|
p.filter = function(b, c, d) {
|
|
var e = c[0];
|
|
return d && (b = ":not(" + b + ")"), 1 === c.length && 1 === e.nodeType ? p.find.matchesSelector(e, b) ? [e] : [] : p.find.matches(b, p.grep(c, function(b) {
|
|
return 1 === b.nodeType
|
|
}))
|
|
};
|
|
p.fn.extend({
|
|
find: function(b) {
|
|
var c, d, e = this.length,
|
|
j = this;
|
|
if ("string" != typeof b) return this.pushStack(p(b).filter(function() {
|
|
for (c = 0; c < e; c++)
|
|
if (p.contains(j[c], this)) return !0
|
|
}));
|
|
d = this.pushStack([]);
|
|
for (c = 0; c < e; c++) p.find(b, j[c], d);
|
|
return 1 < e ? p.uniqueSort(d) : d
|
|
},
|
|
filter: function(b) {
|
|
return this.pushStack(f(this,
|
|
b || [], !1))
|
|
},
|
|
not: function(b) {
|
|
return this.pushStack(f(this, b || [], !0))
|
|
},
|
|
is: function(b) {
|
|
return !!f(this, "string" == typeof b && mc.test(b) ? p(b) : b || [], !1).length
|
|
}
|
|
});
|
|
var oc, ed = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;
|
|
(p.fn.init = function(b, c, d) {
|
|
var e, j;
|
|
if (!b) return this;
|
|
if (d = d || oc, "string" == typeof b) {
|
|
if (e = "<" === b[0] && ">" === b[b.length - 1] && 3 <= b.length ? [null, b, null] : ed.exec(b), !e || !e[1] && c) return !c || c.jquery ? (c || d).find(b) : this.constructor(c).find(b);
|
|
if (e[1]) {
|
|
if (c = c instanceof p ? c[0] : c, p.merge(this, p.parseHTML(e[1],
|
|
c && c.nodeType ? c.ownerDocument || c : M, !0)), nc.test(e[1]) && p.isPlainObject(c))
|
|
for (e in c) p.isFunction(this[e]) ? this[e](c[e]) : this.attr(e, c[e]);
|
|
return this
|
|
}
|
|
return j = M.getElementById(e[2]), j && (this[0] = j, this.length = 1), this
|
|
}
|
|
return b.nodeType ? (this[0] = b, this.length = 1, this) : p.isFunction(b) ? void 0 !== d.ready ? d.ready(b) : b(p) : p.makeArray(b, this)
|
|
}).prototype = p.fn;
|
|
oc = p(M);
|
|
var fd = /^(?:parents|prev(?:Until|All))/,
|
|
gd = {
|
|
children: !0,
|
|
contents: !0,
|
|
next: !0,
|
|
prev: !0
|
|
};
|
|
p.fn.extend({
|
|
has: function(b) {
|
|
var c = p(b, this),
|
|
d = c.length;
|
|
return this.filter(function() {
|
|
for (var b = 0; b < d; b++)
|
|
if (p.contains(this, c[b])) return !0
|
|
})
|
|
},
|
|
closest: function(b, c) {
|
|
var d, e = 0,
|
|
j = this.length,
|
|
f = [],
|
|
g = "string" != typeof b && p(b);
|
|
if (!mc.test(b))
|
|
for (; e < j; e++)
|
|
for (d = this[e]; d && d !== c; d = d.parentNode)
|
|
if (11 > d.nodeType && (g ? -1 < g.index(d) : 1 === d.nodeType && p.find.matchesSelector(d, b))) {
|
|
f.push(d);
|
|
break
|
|
} return this.pushStack(1 < f.length ? p.uniqueSort(f) : f)
|
|
},
|
|
index: function(b) {
|
|
return b ? "string" == typeof b ? Va.call(p(b), this[0]) : Va.call(this, b.jquery ? b[0] : b) : this[0] && this[0].parentNode ?
|
|
this.first().prevAll().length : -1
|
|
},
|
|
add: function(b, c) {
|
|
return this.pushStack(p.uniqueSort(p.merge(this.get(), p(b, c))))
|
|
},
|
|
addBack: function(b) {
|
|
return this.add(null == b ? this.prevObject : this.prevObject.filter(b))
|
|
}
|
|
});
|
|
p.each({
|
|
parent: function(b) {
|
|
return (b = b.parentNode) && 11 !== b.nodeType ? b : null
|
|
},
|
|
parents: function(b) {
|
|
return ib(b, "parentNode")
|
|
},
|
|
parentsUntil: function(b, c, d) {
|
|
return ib(b, "parentNode", d)
|
|
},
|
|
next: function(b) {
|
|
return m(b, "nextSibling")
|
|
},
|
|
prev: function(b) {
|
|
return m(b, "previousSibling")
|
|
},
|
|
nextAll: function(b) {
|
|
return ib(b,
|
|
"nextSibling")
|
|
},
|
|
prevAll: function(b) {
|
|
return ib(b, "previousSibling")
|
|
},
|
|
nextUntil: function(b, c, d) {
|
|
return ib(b, "nextSibling", d)
|
|
},
|
|
prevUntil: function(b, c, d) {
|
|
return ib(b, "previousSibling", d)
|
|
},
|
|
siblings: function(b) {
|
|
return lc((b.parentNode || {}).firstChild, b)
|
|
},
|
|
children: function(b) {
|
|
return lc(b.firstChild)
|
|
},
|
|
contents: function(b) {
|
|
return g(b, "iframe") ? b.contentDocument : (g(b, "template") && (b = b.content || b), p.merge([], b.childNodes))
|
|
}
|
|
}, function(b, c) {
|
|
p.fn[b] = function(d, e) {
|
|
var j = p.map(this, c, d);
|
|
return "Until" !== b.slice(-5) &&
|
|
(e = d), e && "string" == typeof e && (j = p.filter(e, j)), 1 < this.length && (gd[b] || p.uniqueSort(j), fd.test(b) && j.reverse()), this.pushStack(j)
|
|
}
|
|
});
|
|
var pa = /[^\x20\t\r\n\f]+/g;
|
|
p.Callbacks = function(b) {
|
|
var c;
|
|
if ("string" == typeof b) {
|
|
var d = {};
|
|
c = (p.each(b.match(pa) || [], function(b, c) {
|
|
d[c] = !0
|
|
}), d)
|
|
} else c = p.extend({}, b);
|
|
b = c;
|
|
var e, j, f, g, n = [],
|
|
q = [],
|
|
l = -1,
|
|
r = function() {
|
|
g = g || b.once;
|
|
for (f = e = !0; q.length; l = -1)
|
|
for (j = q.shift(); ++l < n.length;) !1 === n[l].apply(j[0], j[1]) && b.stopOnFalse && (l = n.length, j = !1);
|
|
b.memory || (j = !1);
|
|
e = !1;
|
|
g && (n = j ? [] :
|
|
"")
|
|
},
|
|
s = {
|
|
add: function() {
|
|
return n && (j && !e && (l = n.length - 1, q.push(j)), function Oc(c) {
|
|
p.each(c, function(c, d) {
|
|
p.isFunction(d) ? b.unique && s.has(d) || n.push(d) : d && d.length && "string" !== p.type(d) && Oc(d)
|
|
})
|
|
}(arguments), j && !e && r()), this
|
|
},
|
|
remove: function() {
|
|
return p.each(arguments, function(b, c) {
|
|
for (var d; - 1 < (d = p.inArray(c, n, d));) n.splice(d, 1), d <= l && l--
|
|
}), this
|
|
},
|
|
has: function(b) {
|
|
return b ? -1 < p.inArray(b, n) : 0 < n.length
|
|
},
|
|
empty: function() {
|
|
return n && (n = []), this
|
|
},
|
|
disable: function() {
|
|
return g = q = [], n = j = "", this
|
|
},
|
|
disabled: function() {
|
|
return !n
|
|
},
|
|
lock: function() {
|
|
return g = q = [], j || e || (n = j = ""), this
|
|
},
|
|
locked: function() {
|
|
return !!g
|
|
},
|
|
fireWith: function(b, c) {
|
|
return g || (c = c || [], c = [b, c.slice ? c.slice() : c], q.push(c), e || r()), this
|
|
},
|
|
fire: function() {
|
|
return s.fireWith(this, arguments), this
|
|
},
|
|
fired: function() {
|
|
return !!f
|
|
}
|
|
};
|
|
return s
|
|
};
|
|
p.extend({
|
|
Deferred: function(c) {
|
|
var d = [
|
|
["notify", "progress", p.Callbacks("memory"), p.Callbacks("memory"), 2],
|
|
["resolve", "done", p.Callbacks("once memory"), p.Callbacks("once memory"), 0, "resolved"],
|
|
["reject", "fail", p.Callbacks("once memory"),
|
|
p.Callbacks("once memory"), 1, "rejected"
|
|
]
|
|
],
|
|
e = "pending",
|
|
f = {
|
|
state: function() {
|
|
return e
|
|
},
|
|
always: function() {
|
|
return g.done(arguments).fail(arguments), this
|
|
},
|
|
"catch": function(b) {
|
|
return f.then(null, b)
|
|
},
|
|
pipe: function() {
|
|
var b = arguments;
|
|
return p.Deferred(function(c) {
|
|
p.each(d, function(d, e) {
|
|
var j = p.isFunction(b[e[4]]) && b[e[4]];
|
|
g[e[1]](function() {
|
|
var b = j && j.apply(this, arguments);
|
|
b && p.isFunction(b.promise) ? b.promise().progress(c.notify).done(c.resolve).fail(c.reject) : c[e[0] + "With"](this, j ? [b] : arguments)
|
|
})
|
|
});
|
|
b = null
|
|
}).promise()
|
|
},
|
|
then: function(c, e, f) {
|
|
function g(c, d, e, f) {
|
|
return function() {
|
|
var q = this,
|
|
r = arguments,
|
|
fa = function() {
|
|
var b, fa;
|
|
if (!(c < n)) {
|
|
if (b = e.apply(q, r), b === d.promise()) throw new TypeError("Thenable self-resolution");
|
|
fa = b && ("object" == typeof b || "function" == typeof b) && b.then;
|
|
p.isFunction(fa) ? f ? fa.call(b, g(n, d, l, f), g(n, d, j, f)) : (n++, fa.call(b, g(n, d, l, f), g(n, d, j, f), g(n, d, l, d.notifyWith))) : (e !== l && (q = void 0, r = [b]), (f || d.resolveWith)(q, r))
|
|
}
|
|
},
|
|
s = f ? fa : function() {
|
|
try {
|
|
fa()
|
|
} catch (b) {
|
|
p.Deferred.exceptionHook && p.Deferred.exceptionHook(b,
|
|
s.stackTrace), c + 1 >= n && (e !== j && (q = void 0, r = [b]), d.rejectWith(q, r))
|
|
}
|
|
};
|
|
c ? s() : (p.Deferred.getStackHook && (s.stackTrace = p.Deferred.getStackHook()), b.setTimeout(s))
|
|
}
|
|
}
|
|
var n = 0;
|
|
return p.Deferred(function(b) {
|
|
d[0][3].add(g(0, b, p.isFunction(f) ? f : l, b.notifyWith));
|
|
d[1][3].add(g(0, b, p.isFunction(c) ? c : l));
|
|
d[2][3].add(g(0, b, p.isFunction(e) ? e : j))
|
|
}).promise()
|
|
},
|
|
promise: function(b) {
|
|
return null != b ? p.extend(b, f) : f
|
|
}
|
|
},
|
|
g = {};
|
|
return p.each(d, function(b, c) {
|
|
var j = c[2],
|
|
n = c[5];
|
|
f[c[1]] = j.add;
|
|
n && j.add(function() {
|
|
e = n
|
|
}, d[3 - b][2].disable,
|
|
d[0][2].lock);
|
|
j.add(c[3].fire);
|
|
g[c[0]] = function() {
|
|
return g[c[0] + "With"](this === g ? void 0 : this, arguments), this
|
|
};
|
|
g[c[0] + "With"] = j.fireWith
|
|
}), f.promise(g), c && c.call(g, g), g
|
|
},
|
|
when: function(b) {
|
|
var c = arguments.length,
|
|
d = c,
|
|
e = Array(d),
|
|
j = ja.call(arguments),
|
|
f = p.Deferred(),
|
|
g = function(b) {
|
|
return function(d) {
|
|
e[b] = this;
|
|
j[b] = 1 < arguments.length ? ja.call(arguments) : d;
|
|
--c || f.resolveWith(e, j)
|
|
}
|
|
};
|
|
if (1 >= c && (q(b, f.done(g(d)).resolve, f.reject, !c), "pending" === f.state() || p.isFunction(j[d] && j[d].then))) return f.then();
|
|
for (; d--;) q(j[d],
|
|
g(d), f.reject);
|
|
return f.promise()
|
|
}
|
|
});
|
|
var hd = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
|
|
p.Deferred.exceptionHook = function(c, d) {
|
|
b.console && b.console.warn && c && hd.test(c.name) && b.console.warn("jQuery.Deferred exception: " + c.message, c.stack, d)
|
|
};
|
|
p.readyException = function(c) {
|
|
b.setTimeout(function() {
|
|
throw c;
|
|
})
|
|
};
|
|
var Ub = p.Deferred();
|
|
p.fn.ready = function(b) {
|
|
return Ub.then(b)["catch"](function(b) {
|
|
p.readyException(b)
|
|
}), this
|
|
};
|
|
p.extend({
|
|
isReady: !1,
|
|
readyWait: 1,
|
|
ready: function(b) {
|
|
(!0 === b ? --p.readyWait :
|
|
p.isReady) || (p.isReady = !0, !0 !== b && 0 < --p.readyWait || Ub.resolveWith(M, [p]))
|
|
}
|
|
});
|
|
p.ready.then = Ub.then;
|
|
"complete" === M.readyState || "loading" !== M.readyState && !M.documentElement.doScroll ? b.setTimeout(p.ready) : (M.addEventListener("DOMContentLoaded", n), b.addEventListener("load", n));
|
|
var Ma = function(b, c, d, e, j, f, g) {
|
|
var n = 0,
|
|
q = b.length,
|
|
l = null == d;
|
|
if ("object" === p.type(d))
|
|
for (n in j = !0, d) Ma(b, c, n, d[n], !0, f, g);
|
|
else if (void 0 !== e && (j = !0, p.isFunction(e) || (g = !0), l && (g ? (c.call(b, e), c = null) : (l = c, c = function(b, c, d) {
|
|
return l.call(p(b),
|
|
d)
|
|
})), c))
|
|
for (; n < q; n++) c(b[n], d, g ? e : e.call(b[n], n, c(b[n], d)));
|
|
return j ? b : l ? c.call(b) : q ? c(b[0], d) : f
|
|
},
|
|
Eb = function(b) {
|
|
return 1 === b.nodeType || 9 === b.nodeType || !+b.nodeType
|
|
};
|
|
r.uid = 1;
|
|
r.prototype = {
|
|
cache: function(b) {
|
|
var c = b[this.expando];
|
|
return c || (c = {}, Eb(b) && (b.nodeType ? b[this.expando] = c : Object.defineProperty(b, this.expando, {
|
|
value: c,
|
|
configurable: !0
|
|
}))), c
|
|
},
|
|
set: function(b, c, d) {
|
|
var e;
|
|
b = this.cache(b);
|
|
if ("string" == typeof c) b[p.camelCase(c)] = d;
|
|
else
|
|
for (e in c) b[p.camelCase(e)] = c[e];
|
|
return b
|
|
},
|
|
get: function(b, c) {
|
|
return void 0 ===
|
|
c ? this.cache(b) : b[this.expando] && b[this.expando][p.camelCase(c)]
|
|
},
|
|
access: function(b, c, d) {
|
|
return void 0 === c || c && "string" == typeof c && void 0 === d ? this.get(b, c) : (this.set(b, c, d), void 0 !== d ? d : c)
|
|
},
|
|
remove: function(b, c) {
|
|
var d, e = b[this.expando];
|
|
if (void 0 !== e) {
|
|
if (void 0 !== c) {
|
|
Array.isArray(c) ? c = c.map(p.camelCase) : (c = p.camelCase(c), c = c in e ? [c] : c.match(pa) || []);
|
|
for (d = c.length; d--;) delete e[c[d]]
|
|
}(void 0 === c || p.isEmptyObject(e)) && (b.nodeType ? b[this.expando] = void 0 : delete b[this.expando])
|
|
}
|
|
},
|
|
hasData: function(b) {
|
|
b =
|
|
b[this.expando];
|
|
return void 0 !== b && !p.isEmptyObject(b)
|
|
}
|
|
};
|
|
var R = new r,
|
|
ka = new r,
|
|
Kc = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
|
|
Jc = /[A-Z]/g;
|
|
p.extend({
|
|
hasData: function(b) {
|
|
return ka.hasData(b) || R.hasData(b)
|
|
},
|
|
data: function(b, c, d) {
|
|
return ka.access(b, c, d)
|
|
},
|
|
removeData: function(b, c) {
|
|
ka.remove(b, c)
|
|
},
|
|
_data: function(b, c, d) {
|
|
return R.access(b, c, d)
|
|
},
|
|
_removeData: function(b, c) {
|
|
R.remove(b, c)
|
|
}
|
|
});
|
|
p.fn.extend({
|
|
data: function(b, c) {
|
|
var d, e, j, f = this[0],
|
|
g = f && f.attributes;
|
|
if (void 0 === b) {
|
|
if (this.length && (j = ka.get(f), 1 === f.nodeType && !R.get(f,
|
|
"hasDataAttrs"))) {
|
|
for (d = g.length; d--;) g[d] && (e = g[d].name, 0 === e.indexOf("data-") && (e = p.camelCase(e.slice(5)), s(f, e, j[e])));
|
|
R.set(f, "hasDataAttrs", !0)
|
|
}
|
|
return j
|
|
}
|
|
return "object" == typeof b ? this.each(function() {
|
|
ka.set(this, b)
|
|
}) : Ma(this, function(c) {
|
|
var d;
|
|
if (f && void 0 === c) {
|
|
if ((d = ka.get(f, b), void 0 !== d) || (d = s(f, b), void 0 !== d)) return d
|
|
} else this.each(function() {
|
|
ka.set(this, b, c)
|
|
})
|
|
}, null, c, 1 < arguments.length, null, !0)
|
|
},
|
|
removeData: function(b) {
|
|
return this.each(function() {
|
|
ka.remove(this, b)
|
|
})
|
|
}
|
|
});
|
|
p.extend({
|
|
queue: function(b,
|
|
c, d) {
|
|
var e;
|
|
if (b) return c = (c || "fx") + "queue", e = R.get(b, c), d && (!e || Array.isArray(d) ? e = R.access(b, c, p.makeArray(d)) : e.push(d)), e || []
|
|
},
|
|
dequeue: function(b, c) {
|
|
c = c || "fx";
|
|
var d = p.queue(b, c),
|
|
e = d.length,
|
|
j = d.shift(),
|
|
f = p._queueHooks(b, c),
|
|
g = function() {
|
|
p.dequeue(b, c)
|
|
};
|
|
"inprogress" === j && (j = d.shift(), e--);
|
|
j && ("fx" === c && d.unshift("inprogress"), delete f.stop, j.call(b, g, f));
|
|
!e && f && f.empty.fire()
|
|
},
|
|
_queueHooks: function(b, c) {
|
|
var d = c + "queueHooks";
|
|
return R.get(b, d) || R.access(b, d, {
|
|
empty: p.Callbacks("once memory").add(function() {
|
|
R.remove(b,
|
|
[c + "queue", d])
|
|
})
|
|
})
|
|
}
|
|
});
|
|
p.fn.extend({
|
|
queue: function(b, c) {
|
|
var d = 2;
|
|
return "string" != typeof b && (c = b, b = "fx", d--), arguments.length < d ? p.queue(this[0], b) : void 0 === c ? this : this.each(function() {
|
|
var d = p.queue(this, b, c);
|
|
p._queueHooks(this, b);
|
|
"fx" === b && "inprogress" !== d[0] && p.dequeue(this, b)
|
|
})
|
|
},
|
|
dequeue: function(b) {
|
|
return this.each(function() {
|
|
p.dequeue(this, b)
|
|
})
|
|
},
|
|
clearQueue: function(b) {
|
|
return this.queue(b || "fx", [])
|
|
},
|
|
promise: function(b, c) {
|
|
var d, e = 1,
|
|
j = p.Deferred(),
|
|
f = this,
|
|
g = this.length,
|
|
n = function() {
|
|
--e || j.resolveWith(f,
|
|
[f])
|
|
};
|
|
"string" != typeof b && (c = b, b = void 0);
|
|
for (b = b || "fx"; g--;)(d = R.get(f[g], b + "queueHooks")) && d.empty && (e++, d.empty.add(n));
|
|
return n(), j.promise(c)
|
|
}
|
|
});
|
|
var pc = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
|
|
lb = RegExp("^(?:([+-])=|)(" + pc + ")([a-z%]*)$", "i"),
|
|
Wa = ["Top", "Right", "Bottom", "Left"],
|
|
tb = function(b, c) {
|
|
return b = c || b, "none" === b.style.display || "" === b.style.display && p.contains(b.ownerDocument, b) && "none" === p.css(b, "display")
|
|
},
|
|
qc = function(b, c, d, e) {
|
|
var j, f = {};
|
|
for (j in c) f[j] = b.style[j], b.style[j] = c[j];
|
|
d =
|
|
d.apply(b, e || []);
|
|
for (j in c) b.style[j] = f[j];
|
|
return d
|
|
},
|
|
Yb = {};
|
|
p.fn.extend({
|
|
show: function() {
|
|
return u(this, !0)
|
|
},
|
|
hide: function() {
|
|
return u(this)
|
|
},
|
|
toggle: function(b) {
|
|
return "boolean" == typeof b ? b ? this.show() : this.hide() : this.each(function() {
|
|
tb(this) ? p(this).show() : p(this).hide()
|
|
})
|
|
}
|
|
});
|
|
var rc = /^(?:checkbox|radio)$/i,
|
|
Zb = /<([a-z][^\/\0>\x20\t\r\n\f]+)/i,
|
|
$b = /^$|\/(?:java|ecma)script/i,
|
|
oa = {
|
|
option: [1, "<select multiple='multiple'>", "</select>"],
|
|
thead: [1, "<table>", "</table>"],
|
|
col: [2, "<table><colgroup>", "</colgroup></table>"],
|
|
tr: [2, "<table><tbody>", "</tbody></table>"],
|
|
td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
|
|
_default: [0, "", ""]
|
|
};
|
|
oa.optgroup = oa.option;
|
|
oa.tbody = oa.tfoot = oa.colgroup = oa.caption = oa.thead;
|
|
oa.th = oa.td;
|
|
var Lc = /<|&#?\w+;/,
|
|
Fb = M.createDocumentFragment().appendChild(M.createElement("div")),
|
|
Gb = M.createElement("input");
|
|
Gb.setAttribute("type", "radio");
|
|
Gb.setAttribute("checked", "checked");
|
|
Gb.setAttribute("name", "t");
|
|
Fb.appendChild(Gb);
|
|
W.checkClone = Fb.cloneNode(!0).cloneNode(!0).lastChild.checked;
|
|
Fb.innerHTML =
|
|
"<textarea>x</textarea>";
|
|
W.noCloneChecked = !!Fb.cloneNode(!0).lastChild.defaultValue;
|
|
!0;
|
|
var Hb = M.documentElement,
|
|
id = /^key/,
|
|
jd = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
|
|
sc = /^([^.]*)(?:\.(.+)|)/;
|
|
p.event = {
|
|
global: {},
|
|
add: function(b, c, d, e, j) {
|
|
var f, g, n, q, l, r, s, m, t, u;
|
|
if (l = R.get(b)) {
|
|
d.handler && (f = d, d = f.handler, j = f.selector);
|
|
j && p.find.matchesSelector(Hb, j);
|
|
d.guid || (d.guid = p.guid++);
|
|
(q = l.events) || (q = l.events = {});
|
|
(g = l.handle) || (g = l.handle = function(c) {
|
|
return "undefined" != typeof p && p.event.triggered !== c.type ?
|
|
p.event.dispatch.apply(b, arguments) : void 0
|
|
});
|
|
c = (c || "").match(pa) || [""];
|
|
for (l = c.length; l--;) n = sc.exec(c[l]) || [], t = u = n[1], n = (n[2] || "").split(".").sort(), t && (s = p.event.special[t] || {}, t = (j ? s.delegateType : s.bindType) || t, s = p.event.special[t] || {}, r = p.extend({
|
|
type: t,
|
|
origType: u,
|
|
data: e,
|
|
handler: d,
|
|
guid: d.guid,
|
|
selector: j,
|
|
needsContext: j && p.expr.match.needsContext.test(j),
|
|
namespace: n.join(".")
|
|
}, f), (m = q[t]) || (m = q[t] = [], m.delegateCount = 0, s.setup && !1 !== s.setup.call(b, e, n, g) || b.addEventListener && b.addEventListener(t,
|
|
g)), s.add && (s.add.call(b, r), r.handler.guid || (r.handler.guid = d.guid)), j ? m.splice(m.delegateCount++, 0, r) : m.push(r), p.event.global[t] = !0)
|
|
}
|
|
},
|
|
remove: function(b, c, d, e, j) {
|
|
var f, g, n, q, l, r, s, m, t, u, y, z = R.hasData(b) && R.get(b);
|
|
if (z && (q = z.events)) {
|
|
c = (c || "").match(pa) || [""];
|
|
for (l = c.length; l--;)
|
|
if (n = sc.exec(c[l]) || [], t = y = n[1], u = (n[2] || "").split(".").sort(), t) {
|
|
s = p.event.special[t] || {};
|
|
t = (e ? s.delegateType : s.bindType) || t;
|
|
m = q[t] || [];
|
|
n = n[2] && RegExp("(^|\\.)" + u.join("\\.(?:.*\\.|)") + "(\\.|$)");
|
|
for (g = f = m.length; f--;) r =
|
|
m[f], !j && y !== r.origType || d && d.guid !== r.guid || n && !n.test(r.namespace) || e && e !== r.selector && ("**" !== e || !r.selector) || (m.splice(f, 1), r.selector && m.delegateCount--, s.remove && s.remove.call(b, r));
|
|
g && !m.length && (s.teardown && !1 !== s.teardown.call(b, u, z.handle) || p.removeEvent(b, t, z.handle), delete q[t])
|
|
} else
|
|
for (t in q) p.event.remove(b, t + c[l], d, e, !0);
|
|
p.isEmptyObject(q) && R.remove(b, "handle events")
|
|
}
|
|
},
|
|
dispatch: function(b) {
|
|
var c = p.event.fix(b),
|
|
d, e, j, f, g, n, q = Array(arguments.length);
|
|
e = (R.get(this, "events") || {})[c.type] || [];
|
|
var l = p.event.special[c.type] || {};
|
|
q[0] = c;
|
|
for (d = 1; d < arguments.length; d++) q[d] = arguments[d];
|
|
if (c.delegateTarget = this, !l.preDispatch || !1 !== l.preDispatch.call(this, c)) {
|
|
n = p.event.handlers.call(this, c, e);
|
|
for (d = 0;
|
|
(f = n[d++]) && !c.isPropagationStopped();) {
|
|
c.currentTarget = f.elem;
|
|
for (e = 0;
|
|
(g = f.handlers[e++]) && !c.isImmediatePropagationStopped();) c.rnamespace && !c.rnamespace.test(g.namespace) || (c.handleObj = g, c.data = g.data, j = ((p.event.special[g.origType] || {}).handle || g.handler).apply(f.elem, q), void 0 !== j && !1 ===
|
|
(c.result = j) && (c.preventDefault(), c.stopPropagation()))
|
|
}
|
|
return l.postDispatch && l.postDispatch.call(this, c), c.result
|
|
}
|
|
},
|
|
handlers: function(b, c) {
|
|
var d, e, j, f, g, n = [],
|
|
q = c.delegateCount,
|
|
l = b.target;
|
|
if (q && l.nodeType && !("click" === b.type && 1 <= b.button))
|
|
for (; l !== this; l = l.parentNode || this)
|
|
if (1 === l.nodeType && ("click" !== b.type || !0 !== l.disabled)) {
|
|
f = [];
|
|
g = {};
|
|
for (d = 0; d < q; d++) e = c[d], j = e.selector + " ", void 0 === g[j] && (g[j] = e.needsContext ? -1 < p(j, this).index(l) : p.find(j, this, null, [l]).length), g[j] && f.push(e);
|
|
f.length && n.push({
|
|
elem: l,
|
|
handlers: f
|
|
})
|
|
} return l = this, q < c.length && n.push({
|
|
elem: l,
|
|
handlers: c.slice(q)
|
|
}), n
|
|
},
|
|
addProp: function(b, c) {
|
|
Object.defineProperty(p.Event.prototype, b, {
|
|
enumerable: !0,
|
|
configurable: !0,
|
|
get: p.isFunction(c) ? function() {
|
|
if (this.originalEvent) return c(this.originalEvent)
|
|
} : function() {
|
|
if (this.originalEvent) return this.originalEvent[b]
|
|
},
|
|
set: function(c) {
|
|
Object.defineProperty(this, b, {
|
|
enumerable: !0,
|
|
configurable: !0,
|
|
writable: !0,
|
|
value: c
|
|
})
|
|
}
|
|
})
|
|
},
|
|
fix: function(b) {
|
|
return b[p.expando] ? b : new p.Event(b)
|
|
},
|
|
special: {
|
|
load: {
|
|
noBubble: !0
|
|
},
|
|
focus: {
|
|
trigger: function() {
|
|
if (this !== E() && this.focus) return this.focus(), !1
|
|
},
|
|
delegateType: "focusin"
|
|
},
|
|
blur: {
|
|
trigger: function() {
|
|
if (this === E() && this.blur) return this.blur(), !1
|
|
},
|
|
delegateType: "focusout"
|
|
},
|
|
click: {
|
|
trigger: function() {
|
|
if ("checkbox" === this.type && this.click && g(this, "input")) return this.click(), !1
|
|
},
|
|
_default: function(b) {
|
|
return g(b.target, "a")
|
|
}
|
|
},
|
|
beforeunload: {
|
|
postDispatch: function(b) {
|
|
void 0 !== b.result && b.originalEvent && (b.originalEvent.returnValue = b.result)
|
|
}
|
|
}
|
|
}
|
|
};
|
|
p.removeEvent = function(b, c, d) {
|
|
b.removeEventListener &&
|
|
b.removeEventListener(c, d)
|
|
};
|
|
p.Event = function(b, c) {
|
|
return this instanceof p.Event ? (b && b.type ? (this.originalEvent = b, this.type = b.type, this.isDefaultPrevented = b.defaultPrevented || void 0 === b.defaultPrevented && !1 === b.returnValue ? C : B, this.target = b.target && 3 === b.target.nodeType ? b.target.parentNode : b.target, this.currentTarget = b.currentTarget, this.relatedTarget = b.relatedTarget) : this.type = b, c && p.extend(this, c), this.timeStamp = b && b.timeStamp || p.now(), void(this[p.expando] = !0)) : new p.Event(b, c)
|
|
};
|
|
p.Event.prototype = {
|
|
constructor: p.Event,
|
|
isDefaultPrevented: B,
|
|
isPropagationStopped: B,
|
|
isImmediatePropagationStopped: B,
|
|
isSimulated: !1,
|
|
preventDefault: function() {
|
|
var b = this.originalEvent;
|
|
this.isDefaultPrevented = C;
|
|
b && !this.isSimulated && b.preventDefault()
|
|
},
|
|
stopPropagation: function() {
|
|
var b = this.originalEvent;
|
|
this.isPropagationStopped = C;
|
|
b && !this.isSimulated && b.stopPropagation()
|
|
},
|
|
stopImmediatePropagation: function() {
|
|
var b = this.originalEvent;
|
|
this.isImmediatePropagationStopped = C;
|
|
b && !this.isSimulated && b.stopImmediatePropagation();
|
|
this.stopPropagation()
|
|
}
|
|
};
|
|
p.each({
|
|
altKey: !0,
|
|
bubbles: !0,
|
|
cancelable: !0,
|
|
changedTouches: !0,
|
|
ctrlKey: !0,
|
|
detail: !0,
|
|
eventPhase: !0,
|
|
metaKey: !0,
|
|
pageX: !0,
|
|
pageY: !0,
|
|
shiftKey: !0,
|
|
view: !0,
|
|
"char": !0,
|
|
charCode: !0,
|
|
key: !0,
|
|
keyCode: !0,
|
|
button: !0,
|
|
buttons: !0,
|
|
clientX: !0,
|
|
clientY: !0,
|
|
offsetX: !0,
|
|
offsetY: !0,
|
|
pointerId: !0,
|
|
pointerType: !0,
|
|
screenX: !0,
|
|
screenY: !0,
|
|
targetTouches: !0,
|
|
toElement: !0,
|
|
touches: !0,
|
|
which: function(b) {
|
|
var c = b.button;
|
|
return null == b.which && id.test(b.type) ? null != b.charCode ? b.charCode : b.keyCode : !b.which && void 0 !== c && jd.test(b.type) ?
|
|
1 & c ? 1 : 2 & c ? 3 : 4 & c ? 2 : 0 : b.which
|
|
}
|
|
}, p.event.addProp);
|
|
p.each({
|
|
mouseenter: "mouseover",
|
|
mouseleave: "mouseout",
|
|
pointerenter: "pointerover",
|
|
pointerleave: "pointerout"
|
|
}, function(b, c) {
|
|
p.event.special[b] = {
|
|
delegateType: c,
|
|
bindType: c,
|
|
handle: function(b) {
|
|
var d, e = b.relatedTarget,
|
|
j = b.handleObj;
|
|
return e && (e === this || p.contains(this, e)) || (b.type = j.origType, d = j.handler.apply(this, arguments), b.type = c), d
|
|
}
|
|
}
|
|
});
|
|
p.fn.extend({
|
|
on: function(b, c, d, e) {
|
|
return G(this, b, c, d, e)
|
|
},
|
|
one: function(b, c, d, e) {
|
|
return G(this, b, c, d, e, 1)
|
|
},
|
|
off: function(b,
|
|
c, d) {
|
|
var e, j;
|
|
if (b && b.preventDefault && b.handleObj) return e = b.handleObj, p(b.delegateTarget).off(e.namespace ? e.origType + "." + e.namespace : e.origType, e.selector, e.handler), this;
|
|
if ("object" == typeof b) {
|
|
for (j in b) this.off(j, c, b[j]);
|
|
return this
|
|
}
|
|
return !1 !== c && "function" != typeof c || (d = c, c = void 0), !1 === d && (d = B), this.each(function() {
|
|
p.event.remove(this, b, d, c)
|
|
})
|
|
}
|
|
});
|
|
var kd = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
|
|
ld = /<script|<style|<link/i,
|
|
Nc = /checked\s*(?:[^=]|=\s*.checked.)/i,
|
|
Mc = /^true\/(.*)/,
|
|
Pc = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
|
|
p.extend({
|
|
htmlPrefilter: function(b) {
|
|
return b.replace(kd, "<$1></$2>")
|
|
},
|
|
clone: function(b, c, d) {
|
|
var e, j, f, g, n = b.cloneNode(!0),
|
|
q = p.contains(b.ownerDocument, b);
|
|
if (!W.noCloneChecked && !(1 !== b.nodeType && 11 !== b.nodeType || p.isXMLDoc(b))) {
|
|
g = y(n);
|
|
f = y(b);
|
|
e = 0;
|
|
for (j = f.length; e < j; e++) {
|
|
var l = f[e],
|
|
r = g[e],
|
|
s = r.nodeName.toLowerCase();
|
|
"input" === s && rc.test(l.type) ? r.checked = l.checked : "input" !== s && "textarea" !== s || (r.defaultValue = l.defaultValue)
|
|
}
|
|
}
|
|
if (c)
|
|
if (d) {
|
|
f =
|
|
f || y(b);
|
|
g = g || y(n);
|
|
e = 0;
|
|
for (j = f.length; e < j; e++) O(f[e], g[e])
|
|
} else O(b, n);
|
|
return g = y(n, "script"), 0 < g.length && z(g, !q && y(b, "script")), n
|
|
},
|
|
cleanData: function(b) {
|
|
for (var c, d, e, j = p.event.special, f = 0; void 0 !== (d = b[f]); f++)
|
|
if (Eb(d)) {
|
|
if (c = d[R.expando]) {
|
|
if (c.events)
|
|
for (e in c.events) j[e] ? p.event.remove(d, e) : p.removeEvent(d, e, c.handle);
|
|
d[R.expando] = void 0
|
|
}
|
|
d[ka.expando] && (d[ka.expando] = void 0)
|
|
}
|
|
}
|
|
});
|
|
p.fn.extend({
|
|
detach: function(b) {
|
|
return S(this, b, !0)
|
|
},
|
|
remove: function(b) {
|
|
return S(this, b)
|
|
},
|
|
text: function(b) {
|
|
return Ma(this,
|
|
function(b) {
|
|
return void 0 === b ? p.text(this) : this.empty().each(function() {
|
|
1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType || (this.textContent = b)
|
|
})
|
|
}, null, b, arguments.length)
|
|
},
|
|
append: function() {
|
|
return K(this, arguments, function(b) {
|
|
(1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) && D(this, b).appendChild(b)
|
|
})
|
|
},
|
|
prepend: function() {
|
|
return K(this, arguments, function(b) {
|
|
if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {
|
|
var c = D(this, b);
|
|
c.insertBefore(b, c.firstChild)
|
|
}
|
|
})
|
|
},
|
|
before: function() {
|
|
return K(this,
|
|
arguments,
|
|
function(b) {
|
|
this.parentNode && this.parentNode.insertBefore(b, this)
|
|
})
|
|
},
|
|
after: function() {
|
|
return K(this, arguments, function(b) {
|
|
this.parentNode && this.parentNode.insertBefore(b, this.nextSibling)
|
|
})
|
|
},
|
|
empty: function() {
|
|
for (var b, c = 0; null != (b = this[c]); c++) 1 === b.nodeType && (p.cleanData(y(b, !1)), b.textContent = "");
|
|
return this
|
|
},
|
|
clone: function(b, c) {
|
|
return b = null != b && b, c = null == c ? b : c, this.map(function() {
|
|
return p.clone(this, b, c)
|
|
})
|
|
},
|
|
html: function(b) {
|
|
return Ma(this, function(b) {
|
|
var c = this[0] || {},
|
|
d = 0,
|
|
e = this.length;
|
|
if (void 0 === b && 1 === c.nodeType) return c.innerHTML;
|
|
if ("string" == typeof b && !ld.test(b) && !oa[(Zb.exec(b) || ["", ""])[1].toLowerCase()]) {
|
|
b = p.htmlPrefilter(b);
|
|
try {
|
|
for (; d < e; d++) c = this[d] || {}, 1 === c.nodeType && (p.cleanData(y(c, !1)), c.innerHTML = b);
|
|
c = 0
|
|
} catch (j) {}
|
|
}
|
|
c && this.empty().append(b)
|
|
}, null, b, arguments.length)
|
|
},
|
|
replaceWith: function() {
|
|
var b = [];
|
|
return K(this, arguments, function(c) {
|
|
var d = this.parentNode;
|
|
0 > p.inArray(this, b) && (p.cleanData(y(this)), d && d.replaceChild(c, this))
|
|
}, b)
|
|
}
|
|
});
|
|
p.each({
|
|
appendTo: "append",
|
|
prependTo: "prepend",
|
|
insertBefore: "before",
|
|
insertAfter: "after",
|
|
replaceAll: "replaceWith"
|
|
}, function(b, c) {
|
|
p.fn[b] = function(b) {
|
|
for (var d = [], e = p(b), j = e.length - 1, f = 0; f <= j; f++) b = f === j ? this : this.clone(!0), p(e[f])[c](b), Oa.apply(d, b.get());
|
|
return this.pushStack(d)
|
|
}
|
|
});
|
|
var ac = /^margin/,
|
|
Lb = RegExp("^(" + pc + ")(?!px)[a-z%]+$", "i"),
|
|
ub = function(c) {
|
|
var d = c.ownerDocument.defaultView;
|
|
return d && d.opener || (d = b), d.getComputedStyle(c)
|
|
},
|
|
Jb = function() {
|
|
if (Ba) {
|
|
Ba.style.cssText = "box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%";
|
|
Ba.innerHTML = "";
|
|
Hb.appendChild(Ib);
|
|
var c = b.getComputedStyle(Ba);
|
|
tc = "1%" !== c.top;
|
|
uc = "2px" === c.marginLeft;
|
|
vc = "4px" === c.width;
|
|
Ba.style.marginRight = "50%";
|
|
wc = "4px" === c.marginRight;
|
|
Hb.removeChild(Ib);
|
|
Ba = null
|
|
}
|
|
},
|
|
tc, vc, wc, uc, Ib = M.createElement("div"),
|
|
Ba = M.createElement("div");
|
|
Ba.style && (Ba.style.backgroundClip = "content-box", Ba.cloneNode(!0).style.backgroundClip = "", W.clearCloneStyle = "content-box" === Ba.style.backgroundClip, Ib.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",
|
|
Ib.appendChild(Ba), p.extend(W, {
|
|
pixelPosition: function() {
|
|
return Jb(), tc
|
|
},
|
|
boxSizingReliable: function() {
|
|
return Jb(), vc
|
|
},
|
|
pixelMarginRight: function() {
|
|
return Jb(), wc
|
|
},
|
|
reliableMarginLeft: function() {
|
|
return Jb(), uc
|
|
}
|
|
}));
|
|
!0;
|
|
var md = /^(none|table(?!-c[ea]).+)/,
|
|
xc = /^--/,
|
|
nd = {
|
|
position: "absolute",
|
|
visibility: "hidden",
|
|
display: "block"
|
|
},
|
|
yc = {
|
|
letterSpacing: "0",
|
|
fontWeight: "400"
|
|
},
|
|
cc = ["Webkit", "Moz", "ms"],
|
|
bc = M.createElement("div").style;
|
|
p.extend({
|
|
cssHooks: {
|
|
opacity: {
|
|
get: function(b, c) {
|
|
if (c) {
|
|
var d = J(b, "opacity");
|
|
return "" === d ?
|
|
"1" : d
|
|
}
|
|
}
|
|
}
|
|
},
|
|
cssNumber: {
|
|
animationIterationCount: !0,
|
|
columnCount: !0,
|
|
fillOpacity: !0,
|
|
flexGrow: !0,
|
|
flexShrink: !0,
|
|
fontWeight: !0,
|
|
lineHeight: !0,
|
|
opacity: !0,
|
|
order: !0,
|
|
orphans: !0,
|
|
widows: !0,
|
|
zIndex: !0,
|
|
zoom: !0
|
|
},
|
|
cssProps: {
|
|
"float": "cssFloat"
|
|
},
|
|
style: function(b, c, d, e) {
|
|
if (b && 3 !== b.nodeType && 8 !== b.nodeType && b.style) {
|
|
var j, f, g, n = p.camelCase(c),
|
|
q = xc.test(c),
|
|
l = b.style;
|
|
return q || (c = ca(n)), g = p.cssHooks[c] || p.cssHooks[n], void 0 === d ? g && "get" in g && void 0 !== (j = g.get(b, !1, e)) ? j : l[c] : (f = typeof d, "string" === f && (j = lb.exec(d)) && j[1] &&
|
|
(d = t(b, c, j), f = "number"), null != d && d === d && ("number" === f && (d += j && j[3] || (p.cssNumber[n] ? "" : "px")), W.clearCloneStyle || "" !== d || 0 !== c.indexOf("background") || (l[c] = "inherit"), g && "set" in g && void 0 === (d = g.set(b, d, e)) || (q ? l.setProperty(c, d) : l[c] = d)), void 0)
|
|
}
|
|
},
|
|
css: function(b, c, d, e) {
|
|
var j, f, g, n = p.camelCase(c);
|
|
return xc.test(c) || (c = ca(n)), g = p.cssHooks[c] || p.cssHooks[n], g && "get" in g && (j = g.get(b, !0, d)), void 0 === j && (j = J(b, c, e)), "normal" === j && c in yc && (j = yc[c]), "" === d || d ? (f = parseFloat(j), !0 === d || isFinite(f) ? f || 0 : j) :
|
|
j
|
|
}
|
|
});
|
|
p.each(["height", "width"], function(b, c) {
|
|
p.cssHooks[c] = {
|
|
get: function(b, d, e) {
|
|
if (d) return !md.test(p.css(b, "display")) || b.getClientRects().length && b.getBoundingClientRect().width ? da(b, c, e) : qc(b, nd, function() {
|
|
return da(b, c, e)
|
|
})
|
|
},
|
|
set: function(b, d, e) {
|
|
var j, f = e && ub(b);
|
|
e = e && N(b, c, e, "border-box" === p.css(b, "boxSizing", !1, f), f);
|
|
return e && (j = lb.exec(d)) && "px" !== (j[3] || "px") && (b.style[c] = d, d = p.css(b, c)), F(b, d, e)
|
|
}
|
|
}
|
|
});
|
|
p.cssHooks.marginLeft = Y(W.reliableMarginLeft, function(b, c) {
|
|
if (c) return (parseFloat(J(b, "marginLeft")) ||
|
|
b.getBoundingClientRect().left - qc(b, {
|
|
marginLeft: 0
|
|
}, function() {
|
|
return b.getBoundingClientRect().left
|
|
})) + "px"
|
|
});
|
|
p.each({
|
|
margin: "",
|
|
padding: "",
|
|
border: "Width"
|
|
}, function(b, c) {
|
|
p.cssHooks[b + c] = {
|
|
expand: function(d) {
|
|
var e = 0,
|
|
j = {};
|
|
for (d = "string" == typeof d ? d.split(" ") : [d]; 4 > e; e++) j[b + Wa[e] + c] = d[e] || d[e - 2] || d[0];
|
|
return j
|
|
}
|
|
};
|
|
ac.test(b) || (p.cssHooks[b + c].set = F)
|
|
});
|
|
p.fn.extend({
|
|
css: function(b, c) {
|
|
return Ma(this, function(b, c, d) {
|
|
var e, j = {},
|
|
f = 0;
|
|
if (Array.isArray(c)) {
|
|
d = ub(b);
|
|
for (e = c.length; f < e; f++) j[c[f]] = p.css(b, c[f], !1,
|
|
d);
|
|
return j
|
|
}
|
|
return void 0 !== d ? p.style(b, c, d) : p.css(b, c)
|
|
}, b, c, 1 < arguments.length)
|
|
}
|
|
});
|
|
p.Tween = T;
|
|
T.prototype = {
|
|
constructor: T,
|
|
init: function(b, c, d, e, j, f) {
|
|
this.elem = b;
|
|
this.prop = d;
|
|
this.easing = j || p.easing._default;
|
|
this.options = c;
|
|
this.start = this.now = this.cur();
|
|
this.end = e;
|
|
this.unit = f || (p.cssNumber[d] ? "" : "px")
|
|
},
|
|
cur: function() {
|
|
var b = T.propHooks[this.prop];
|
|
return b && b.get ? b.get(this) : T.propHooks._default.get(this)
|
|
},
|
|
run: function(b) {
|
|
var c, d = T.propHooks[this.prop];
|
|
return this.options.duration ? this.pos = c = p.easing[this.easing](b,
|
|
this.options.duration * b, 0, 1, this.options.duration) : this.pos = c = b, this.now = (this.end - this.start) * c + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), d && d.set ? d.set(this) : T.propHooks._default.set(this), this
|
|
}
|
|
};
|
|
T.prototype.init.prototype = T.prototype;
|
|
T.propHooks = {
|
|
_default: {
|
|
get: function(b) {
|
|
var c;
|
|
return 1 !== b.elem.nodeType || null != b.elem[b.prop] && null == b.elem.style[b.prop] ? b.elem[b.prop] : (c = p.css(b.elem, b.prop, ""), c && "auto" !== c ? c : 0)
|
|
},
|
|
set: function(b) {
|
|
p.fx.step[b.prop] ? p.fx.step[b.prop](b) :
|
|
1 !== b.elem.nodeType || null == b.elem.style[p.cssProps[b.prop]] && !p.cssHooks[b.prop] ? b.elem[b.prop] = b.now : p.style(b.elem, b.prop, b.now + b.unit)
|
|
}
|
|
}
|
|
};
|
|
T.propHooks.scrollTop = T.propHooks.scrollLeft = {
|
|
set: function(b) {
|
|
b.elem.nodeType && b.elem.parentNode && (b.elem[b.prop] = b.now)
|
|
}
|
|
};
|
|
p.easing = {
|
|
linear: function(b) {
|
|
return b
|
|
},
|
|
swing: function(b) {
|
|
return 0.5 - Math.cos(b * Math.PI) / 2
|
|
},
|
|
_default: "swing"
|
|
};
|
|
p.fx = T.prototype.init;
|
|
p.fx.step = {};
|
|
var bb, vb, od = /^(?:toggle|show|hide)$/,
|
|
pd = /queueHooks$/;
|
|
p.Animation = p.extend(aa, {
|
|
tweeners: {
|
|
"*": [function(b,
|
|
c) {
|
|
var d = this.createTween(b, c);
|
|
return t(d.elem, b, lb.exec(c), d), d
|
|
}]
|
|
},
|
|
tweener: function(b, c) {
|
|
p.isFunction(b) ? (c = b, b = ["*"]) : b = b.match(pa);
|
|
for (var d, e = 0, j = b.length; e < j; e++) d = b[e], aa.tweeners[d] = aa.tweeners[d] || [], aa.tweeners[d].unshift(c)
|
|
},
|
|
prefilters: [function(b, c, d) {
|
|
var e, j, f, g, n, q, l, r, s = "width" in c || "height" in c,
|
|
m = this,
|
|
t = {},
|
|
y = b.style,
|
|
z = b.nodeType && tb(b),
|
|
L = R.get(b, "fxshow");
|
|
d.queue || (g = p._queueHooks(b, "fx"), null == g.unqueued && (g.unqueued = 0, n = g.empty.fire, g.empty.fire = function() {
|
|
g.unqueued || n()
|
|
}), g.unqueued++,
|
|
m.always(function() {
|
|
m.always(function() {
|
|
g.unqueued--;
|
|
p.queue(b, "fx").length || g.empty.fire()
|
|
})
|
|
}));
|
|
for (e in c)
|
|
if (j = c[e], od.test(j)) {
|
|
if (delete c[e], f = f || "toggle" === j, j === (z ? "hide" : "show")) {
|
|
if ("show" !== j || !L || void 0 === L[e]) continue;
|
|
z = !0
|
|
}
|
|
t[e] = L && L[e] || p.style(b, e)
|
|
} if (q = !p.isEmptyObject(c), q || !p.isEmptyObject(t))
|
|
for (e in s && 1 === b.nodeType && (d.overflow = [y.overflow, y.overflowX, y.overflowY], l = L && L.display, null == l && (l = R.get(b, "display")), r = p.css(b, "display"), "none" === r && (l ? r = l : (u([b], !0), l = b.style.display ||
|
|
l, r = p.css(b, "display"), u([b]))), ("inline" === r || "inline-block" === r && null != l) && "none" === p.css(b, "float") && (q || (m.done(function() {
|
|
y.display = l
|
|
}), null == l && (r = y.display, l = "none" === r ? "" : r)), y.display = "inline-block")), d.overflow && (y.overflow = "hidden", m.always(function() {
|
|
y.overflow = d.overflow[0];
|
|
y.overflowX = d.overflow[1];
|
|
y.overflowY = d.overflow[2]
|
|
})), q = !1, t) q || (L ? "hidden" in L && (z = L.hidden) : L = R.access(b, "fxshow", {
|
|
display: l
|
|
}), f && (L.hidden = !z), z && u([b], !0), m.done(function() {
|
|
z || u([b]);
|
|
R.remove(b, "fxshow");
|
|
for (e in t) p.style(b,
|
|
e, t[e])
|
|
})), q = X(z ? L[e] : 0, e, m), e in L || (L[e] = q.start, z && (q.end = q.start, q.start = 0))
|
|
}],
|
|
prefilter: function(b, c) {
|
|
c ? aa.prefilters.unshift(b) : aa.prefilters.push(b)
|
|
}
|
|
});
|
|
p.speed = function(b, c, d) {
|
|
var e = b && "object" == typeof b ? p.extend({}, b) : {
|
|
complete: d || !d && c || p.isFunction(b) && b,
|
|
duration: b,
|
|
easing: d && c || c && !p.isFunction(c) && c
|
|
};
|
|
return p.fx.off ? e.duration = 0 : "number" != typeof e.duration && (e.duration in p.fx.speeds ? e.duration = p.fx.speeds[e.duration] : e.duration = p.fx.speeds._default), null != e.queue && !0 !== e.queue || (e.queue =
|
|
"fx"), e.old = e.complete, e.complete = function() {
|
|
p.isFunction(e.old) && e.old.call(this);
|
|
e.queue && p.dequeue(this, e.queue)
|
|
}, e
|
|
};
|
|
p.fn.extend({
|
|
fadeTo: function(b, c, d, e) {
|
|
return this.filter(tb).css("opacity", 0).show().end().animate({
|
|
opacity: c
|
|
}, b, d, e)
|
|
},
|
|
animate: function(b, c, d, e) {
|
|
var j = p.isEmptyObject(b),
|
|
f = p.speed(c, d, e);
|
|
c = function() {
|
|
var c = aa(this, p.extend({}, b), f);
|
|
(j || R.get(this, "finish")) && c.stop(!0)
|
|
};
|
|
return c.finish = c, j || !1 === f.queue ? this.each(c) : this.queue(f.queue, c)
|
|
},
|
|
stop: function(b, c, d) {
|
|
var e = function(b) {
|
|
var c =
|
|
b.stop;
|
|
delete b.stop;
|
|
c(d)
|
|
};
|
|
return "string" != typeof b && (d = c, c = b, b = void 0), c && !1 !== b && this.queue(b || "fx", []), this.each(function() {
|
|
var c = !0,
|
|
j = null != b && b + "queueHooks",
|
|
f = p.timers,
|
|
g = R.get(this);
|
|
if (j) g[j] && g[j].stop && e(g[j]);
|
|
else
|
|
for (j in g) g[j] && g[j].stop && pd.test(j) && e(g[j]);
|
|
for (j = f.length; j--;) f[j].elem !== this || null != b && f[j].queue !== b || (f[j].anim.stop(d), c = !1, f.splice(j, 1));
|
|
!c && d || p.dequeue(this, b)
|
|
})
|
|
},
|
|
finish: function(b) {
|
|
return !1 !== b && (b = b || "fx"), this.each(function() {
|
|
var c, d = R.get(this),
|
|
e = d[b + "queue"];
|
|
c = d[b + "queueHooks"];
|
|
var j = p.timers,
|
|
f = e ? e.length : 0;
|
|
d.finish = !0;
|
|
p.queue(this, b, []);
|
|
c && c.stop && c.stop.call(this, !0);
|
|
for (c = j.length; c--;) j[c].elem === this && j[c].queue === b && (j[c].anim.stop(!0), j.splice(c, 1));
|
|
for (c = 0; c < f; c++) e[c] && e[c].finish && e[c].finish.call(this);
|
|
delete d.finish
|
|
})
|
|
}
|
|
});
|
|
p.each(["toggle", "show", "hide"], function(b, c) {
|
|
var d = p.fn[c];
|
|
p.fn[c] = function(b, e, j) {
|
|
return null == b || "boolean" == typeof b ? d.apply(this, arguments) : this.animate(I(c, !0), b, e, j)
|
|
}
|
|
});
|
|
p.each({
|
|
slideDown: I("show"),
|
|
slideUp: I("hide"),
|
|
slideToggle: I("toggle"),
|
|
fadeIn: {
|
|
opacity: "show"
|
|
},
|
|
fadeOut: {
|
|
opacity: "hide"
|
|
},
|
|
fadeToggle: {
|
|
opacity: "toggle"
|
|
}
|
|
}, function(b, c) {
|
|
p.fn[b] = function(b, d, e) {
|
|
return this.animate(c, b, d, e)
|
|
}
|
|
});
|
|
p.timers = [];
|
|
p.fx.tick = function() {
|
|
var b, c = 0,
|
|
d = p.timers;
|
|
for (bb = p.now(); c < d.length; c++) b = d[c], b() || d[c] !== b || d.splice(c--, 1);
|
|
d.length || p.fx.stop();
|
|
bb = void 0
|
|
};
|
|
p.fx.timer = function(b) {
|
|
p.timers.push(b);
|
|
p.fx.start()
|
|
};
|
|
p.fx.interval = 13;
|
|
p.fx.start = function() {
|
|
vb || (vb = !0, P())
|
|
};
|
|
p.fx.stop = function() {
|
|
vb = null
|
|
};
|
|
p.fx.speeds = {
|
|
slow: 600,
|
|
fast: 200,
|
|
_default: 400
|
|
};
|
|
p.fn.delay = function(c, d) {
|
|
return c = p.fx ? p.fx.speeds[c] || c : c, d = d || "fx", this.queue(d, function(d, e) {
|
|
var j = b.setTimeout(d, c);
|
|
e.stop = function() {
|
|
b.clearTimeout(j)
|
|
}
|
|
})
|
|
};
|
|
var jb = M.createElement("input"),
|
|
qd = M.createElement("select").appendChild(M.createElement("option"));
|
|
jb.type = "checkbox";
|
|
W.checkOn = "" !== jb.value;
|
|
W.optSelected = qd.selected;
|
|
jb = M.createElement("input");
|
|
jb.value = "t";
|
|
jb.type = "radio";
|
|
W.radioValue = "t" === jb.value;
|
|
var zc, qb = p.expr.attrHandle;
|
|
p.fn.extend({
|
|
attr: function(b, c) {
|
|
return Ma(this, p.attr, b, c, 1 <
|
|
arguments.length)
|
|
},
|
|
removeAttr: function(b) {
|
|
return this.each(function() {
|
|
p.removeAttr(this, b)
|
|
})
|
|
}
|
|
});
|
|
p.extend({
|
|
attr: function(b, c, d) {
|
|
var e, j, f = b.nodeType;
|
|
if (3 !== f && 8 !== f && 2 !== f) return "undefined" == typeof b.getAttribute ? p.prop(b, c, d) : (1 === f && p.isXMLDoc(b) || (j = p.attrHooks[c.toLowerCase()] || (p.expr.match.bool.test(c) ? zc : void 0)), void 0 !== d ? null === d ? void p.removeAttr(b, c) : j && "set" in j && void 0 !== (e = j.set(b, d, c)) ? e : (b.setAttribute(c, d + ""), d) : j && "get" in j && null !== (e = j.get(b, c)) ? e : (e = p.find.attr(b, c), null == e ? void 0 :
|
|
e))
|
|
},
|
|
attrHooks: {
|
|
type: {
|
|
set: function(b, c) {
|
|
if (!W.radioValue && "radio" === c && g(b, "input")) {
|
|
var d = b.value;
|
|
return b.setAttribute("type", c), d && (b.value = d), c
|
|
}
|
|
}
|
|
}
|
|
},
|
|
removeAttr: function(b, c) {
|
|
var d, e = 0,
|
|
j = c && c.match(pa);
|
|
if (j && 1 === b.nodeType)
|
|
for (; d = j[e++];) b.removeAttribute(d)
|
|
}
|
|
});
|
|
zc = {
|
|
set: function(b, c, d) {
|
|
return !1 === c ? p.removeAttr(b, d) : b.setAttribute(d, d), d
|
|
}
|
|
};
|
|
p.each(p.expr.match.bool.source.match(/\w+/g), function(b, c) {
|
|
var d = qb[c] || p.find.attr;
|
|
qb[c] = function(b, c, e) {
|
|
var j, f, g = c.toLowerCase();
|
|
return e || (f = qb[g], qb[g] =
|
|
j, j = null != d(b, c, e) ? g : null, qb[g] = f), j
|
|
}
|
|
});
|
|
var rd = /^(?:input|select|textarea|button)$/i,
|
|
sd = /^(?:a|area)$/i;
|
|
p.fn.extend({
|
|
prop: function(b, c) {
|
|
return Ma(this, p.prop, b, c, 1 < arguments.length)
|
|
},
|
|
removeProp: function(b) {
|
|
return this.each(function() {
|
|
delete this[p.propFix[b] || b]
|
|
})
|
|
}
|
|
});
|
|
p.extend({
|
|
prop: function(b, c, d) {
|
|
var e, j, f = b.nodeType;
|
|
if (3 !== f && 8 !== f && 2 !== f) return 1 === f && p.isXMLDoc(b) || (c = p.propFix[c] || c, j = p.propHooks[c]), void 0 !== d ? j && "set" in j && void 0 !== (e = j.set(b, d, c)) ? e : b[c] = d : j && "get" in j && null !== (e = j.get(b,
|
|
c)) ? e : b[c]
|
|
},
|
|
propHooks: {
|
|
tabIndex: {
|
|
get: function(b) {
|
|
var c = p.find.attr(b, "tabindex");
|
|
return c ? parseInt(c, 10) : rd.test(b.nodeName) || sd.test(b.nodeName) && b.href ? 0 : -1
|
|
}
|
|
}
|
|
},
|
|
propFix: {
|
|
"for": "htmlFor",
|
|
"class": "className"
|
|
}
|
|
});
|
|
W.optSelected || (p.propHooks.selected = {
|
|
get: function(b) {
|
|
b = b.parentNode;
|
|
return b && b.parentNode && b.parentNode.selectedIndex, null
|
|
},
|
|
set: function(b) {
|
|
b = b.parentNode;
|
|
b && (b.selectedIndex, b.parentNode && b.parentNode.selectedIndex)
|
|
}
|
|
});
|
|
p.each("tabIndex readOnly maxLength cellSpacing cellPadding rowSpan colSpan useMap frameBorder contentEditable".split(" "),
|
|
function() {
|
|
p.propFix[this.toLowerCase()] = this
|
|
});
|
|
p.fn.extend({
|
|
addClass: function(b) {
|
|
var c, d, e, j, f, g, n = 0;
|
|
if (p.isFunction(b)) return this.each(function(c) {
|
|
p(this).addClass(b.call(this, c, qa(this)))
|
|
});
|
|
if ("string" == typeof b && b)
|
|
for (c = b.match(pa) || []; d = this[n++];)
|
|
if (j = qa(d), e = 1 === d.nodeType && " " + la(j) + " ") {
|
|
for (g = 0; f = c[g++];) 0 > e.indexOf(" " + f + " ") && (e += f + " ");
|
|
e = la(e);
|
|
j !== e && d.setAttribute("class", e)
|
|
} return this
|
|
},
|
|
removeClass: function(b) {
|
|
var c, d, e, j, f, g, n = 0;
|
|
if (p.isFunction(b)) return this.each(function(c) {
|
|
p(this).removeClass(b.call(this,
|
|
c, qa(this)))
|
|
});
|
|
if (!arguments.length) return this.attr("class", "");
|
|
if ("string" == typeof b && b)
|
|
for (c = b.match(pa) || []; d = this[n++];)
|
|
if (j = qa(d), e = 1 === d.nodeType && " " + la(j) + " ") {
|
|
for (g = 0; f = c[g++];)
|
|
for (; - 1 < e.indexOf(" " + f + " ");) e = e.replace(" " + f + " ", " ");
|
|
e = la(e);
|
|
j !== e && d.setAttribute("class", e)
|
|
} return this
|
|
},
|
|
toggleClass: function(b, c) {
|
|
var d = typeof b;
|
|
return "boolean" == typeof c && "string" === d ? c ? this.addClass(b) : this.removeClass(b) : p.isFunction(b) ? this.each(function(d) {
|
|
p(this).toggleClass(b.call(this, d, qa(this), c),
|
|
c)
|
|
}) : this.each(function() {
|
|
var c, e, j, f;
|
|
if ("string" === d) {
|
|
e = 0;
|
|
j = p(this);
|
|
for (f = b.match(pa) || []; c = f[e++];) j.hasClass(c) ? j.removeClass(c) : j.addClass(c)
|
|
} else void 0 !== b && "boolean" !== d || (c = qa(this), c && R.set(this, "__className__", c), this.setAttribute && this.setAttribute("class", c || !1 === b ? "" : R.get(this, "__className__") || ""))
|
|
})
|
|
},
|
|
hasClass: function(b) {
|
|
var c, d = 0;
|
|
for (b = " " + b + " "; c = this[d++];)
|
|
if (1 === c.nodeType && -1 < (" " + la(qa(c)) + " ").indexOf(b)) return !0;
|
|
return !1
|
|
}
|
|
});
|
|
var td = /\r/g;
|
|
p.fn.extend({
|
|
val: function(b) {
|
|
var c, d,
|
|
e, j = this[0];
|
|
if (arguments.length) return e = p.isFunction(b), this.each(function(d) {
|
|
var j;
|
|
1 === this.nodeType && (j = e ? b.call(this, d, p(this).val()) : b, null == j ? j = "" : "number" == typeof j ? j += "" : Array.isArray(j) && (j = p.map(j, function(b) {
|
|
return null == b ? "" : b + ""
|
|
})), c = p.valHooks[this.type] || p.valHooks[this.nodeName.toLowerCase()], c && "set" in c && void 0 !== c.set(this, j, "value") || (this.value = j))
|
|
});
|
|
if (j) return c = p.valHooks[j.type] || p.valHooks[j.nodeName.toLowerCase()], c && "get" in c && void 0 !== (d = c.get(j, "value")) ? d : (d = j.value,
|
|
"string" == typeof d ? d.replace(td, "") : null == d ? "" : d)
|
|
}
|
|
});
|
|
p.extend({
|
|
valHooks: {
|
|
option: {
|
|
get: function(b) {
|
|
var c = p.find.attr(b, "value");
|
|
return null != c ? c : la(p.text(b))
|
|
}
|
|
},
|
|
select: {
|
|
get: function(b) {
|
|
var c, d, e = b.options,
|
|
j = b.selectedIndex,
|
|
f = "select-one" === b.type,
|
|
n = f ? null : [],
|
|
q = f ? j + 1 : e.length;
|
|
for (d = 0 > j ? q : f ? j : 0; d < q; d++)
|
|
if (c = e[d], (c.selected || d === j) && !c.disabled && (!c.parentNode.disabled || !g(c.parentNode, "optgroup"))) {
|
|
if (b = p(c).val(), f) return b;
|
|
n.push(b)
|
|
} return n
|
|
},
|
|
set: function(b, c) {
|
|
for (var d, e, j = b.options, f = p.makeArray(c),
|
|
g = j.length; g--;) e = j[g], (e.selected = -1 < p.inArray(p.valHooks.option.get(e), f)) && (d = !0);
|
|
return d || (b.selectedIndex = -1), f
|
|
}
|
|
}
|
|
}
|
|
});
|
|
p.each(["radio", "checkbox"], function() {
|
|
p.valHooks[this] = {
|
|
set: function(b, c) {
|
|
if (Array.isArray(c)) return b.checked = -1 < p.inArray(p(b).val(), c)
|
|
}
|
|
};
|
|
W.checkOn || (p.valHooks[this].get = function(b) {
|
|
return null === b.getAttribute("value") ? "on" : b.value
|
|
})
|
|
});
|
|
var Ac = /^(?:focusinfocus|focusoutblur)$/;
|
|
p.extend(p.event, {
|
|
trigger: function(c, d, e, j) {
|
|
var f, g, n, q, l, r, s, m = [e || M],
|
|
t = db.call(c, "type") ? c.type :
|
|
c;
|
|
f = db.call(c, "namespace") ? c.namespace.split(".") : [];
|
|
if (g = n = e = e || M, 3 !== e.nodeType && 8 !== e.nodeType && !Ac.test(t + p.event.triggered) && (-1 < t.indexOf(".") && (f = t.split("."), t = f.shift(), f.sort()), l = 0 > t.indexOf(":") && "on" + t, c = c[p.expando] ? c : new p.Event(t, "object" == typeof c && c), c.isTrigger = j ? 2 : 3, c.namespace = f.join("."), c.rnamespace = c.namespace ? RegExp("(^|\\.)" + f.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, c.result = void 0, c.target || (c.target = e), d = null == d ? [c] : p.makeArray(d, [c]), s = p.event.special[t] || {}, j || !s.trigger ||
|
|
!1 !== s.trigger.apply(e, d))) {
|
|
if (!j && !s.noBubble && !p.isWindow(e)) {
|
|
q = s.delegateType || t;
|
|
for (Ac.test(q + t) || (g = g.parentNode); g; g = g.parentNode) m.push(g), n = g;
|
|
n === (e.ownerDocument || M) && m.push(n.defaultView || n.parentWindow || b)
|
|
}
|
|
for (f = 0;
|
|
(g = m[f++]) && !c.isPropagationStopped();) c.type = 1 < f ? q : s.bindType || t, (r = (R.get(g, "events") || {})[c.type] && R.get(g, "handle")) && r.apply(g, d), (r = l && g[l]) && r.apply && Eb(g) && (c.result = r.apply(g, d), !1 === c.result && c.preventDefault());
|
|
return c.type = t, j || c.isDefaultPrevented() || s._default &&
|
|
!1 !== s._default.apply(m.pop(), d) || !Eb(e) || l && p.isFunction(e[t]) && !p.isWindow(e) && (n = e[l], n && (e[l] = null), p.event.triggered = t, e[t](), p.event.triggered = void 0, n && (e[l] = n)), c.result
|
|
}
|
|
},
|
|
simulate: function(b, c, d) {
|
|
b = p.extend(new p.Event, d, {
|
|
type: b,
|
|
isSimulated: !0
|
|
});
|
|
p.event.trigger(b, null, c)
|
|
}
|
|
});
|
|
p.fn.extend({
|
|
trigger: function(b, c) {
|
|
return this.each(function() {
|
|
p.event.trigger(b, c, this)
|
|
})
|
|
},
|
|
triggerHandler: function(b, c) {
|
|
var d = this[0];
|
|
if (d) return p.event.trigger(b, c, d, !0)
|
|
}
|
|
});
|
|
p.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),
|
|
function(b, c) {
|
|
p.fn[c] = function(b, d) {
|
|
return 0 < arguments.length ? this.on(c, null, b, d) : this.trigger(c)
|
|
}
|
|
});
|
|
p.fn.extend({
|
|
hover: function(b, c) {
|
|
return this.mouseenter(b).mouseleave(c || b)
|
|
}
|
|
});
|
|
W.focusin = "onfocusin" in b;
|
|
W.focusin || p.each({
|
|
focus: "focusin",
|
|
blur: "focusout"
|
|
}, function(b, c) {
|
|
var d = function(b) {
|
|
p.event.simulate(c, b.target, p.event.fix(b))
|
|
};
|
|
p.event.special[c] = {
|
|
setup: function() {
|
|
var e = this.ownerDocument || this,
|
|
j = R.access(e, c);
|
|
j || e.addEventListener(b, d, !0);
|
|
R.access(e, c, (j || 0) + 1)
|
|
},
|
|
teardown: function() {
|
|
var e = this.ownerDocument ||
|
|
this,
|
|
j = R.access(e, c) - 1;
|
|
j ? R.access(e, c, j) : (e.removeEventListener(b, d, !0), R.remove(e, c))
|
|
}
|
|
}
|
|
});
|
|
var rb = b.location,
|
|
Bc = p.now(),
|
|
Vb = /\?/;
|
|
p.parseXML = function(c) {
|
|
var d;
|
|
if (!c || "string" != typeof c) return null;
|
|
try {
|
|
d = (new b.DOMParser).parseFromString(c, "text/xml")
|
|
} catch (e) {
|
|
d = void 0
|
|
}
|
|
return d && !d.getElementsByTagName("parsererror").length || p.error("Invalid XML: " + c), d
|
|
};
|
|
var Qc = /\[\]$/,
|
|
Cc = /\r?\n/g,
|
|
ud = /^(?:submit|button|image|reset|file)$/i,
|
|
vd = /^(?:input|select|textarea|keygen)/i;
|
|
p.param = function(b, c) {
|
|
var d, e = [],
|
|
j = function(b,
|
|
c) {
|
|
var d = p.isFunction(c) ? c() : c;
|
|
e[e.length] = encodeURIComponent(b) + "=" + encodeURIComponent(null == d ? "" : d)
|
|
};
|
|
if (Array.isArray(b) || b.jquery && !p.isPlainObject(b)) p.each(b, function() {
|
|
j(this.name, this.value)
|
|
});
|
|
else
|
|
for (d in b) ea(d, b[d], c, j);
|
|
return e.join("&")
|
|
};
|
|
p.fn.extend({
|
|
serialize: function() {
|
|
return p.param(this.serializeArray())
|
|
},
|
|
serializeArray: function() {
|
|
return this.map(function() {
|
|
var b = p.prop(this, "elements");
|
|
return b ? p.makeArray(b) : this
|
|
}).filter(function() {
|
|
var b = this.type;
|
|
return this.name && !p(this).is(":disabled") &&
|
|
vd.test(this.nodeName) && !ud.test(b) && (this.checked || !rc.test(b))
|
|
}).map(function(b, c) {
|
|
var d = p(this).val();
|
|
return null == d ? null : Array.isArray(d) ? p.map(d, function(b) {
|
|
return {
|
|
name: c.name,
|
|
value: b.replace(Cc, "\r\n")
|
|
}
|
|
}) : {
|
|
name: c.name,
|
|
value: d.replace(Cc, "\r\n")
|
|
}
|
|
}).get()
|
|
}
|
|
});
|
|
var wd = /%20/g,
|
|
xd = /#.*$/,
|
|
yd = /([?&])_=[^&]*/,
|
|
zd = /^(.*?):[ \t]*([^\r\n]*)$/gm,
|
|
Ad = /^(?:GET|HEAD)$/,
|
|
Bd = /^\/\//,
|
|
Dc = {},
|
|
Mb = {},
|
|
Ec = "*/".concat("*"),
|
|
Wb = M.createElement("a");
|
|
Wb.href = rb.href;
|
|
p.extend({
|
|
active: 0,
|
|
lastModified: {},
|
|
etag: {},
|
|
ajaxSettings: {
|
|
url: rb.href,
|
|
type: "GET",
|
|
isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(rb.protocol),
|
|
global: !0,
|
|
processData: !0,
|
|
async: !0,
|
|
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
|
|
accepts: {
|
|
"*": Ec,
|
|
text: "text/plain",
|
|
html: "text/html",
|
|
xml: "application/xml, text/xml",
|
|
json: "application/json, text/javascript"
|
|
},
|
|
contents: {
|
|
xml: /\bxml\b/,
|
|
html: /\bhtml/,
|
|
json: /\bjson\b/
|
|
},
|
|
responseFields: {
|
|
xml: "responseXML",
|
|
text: "responseText",
|
|
json: "responseJSON"
|
|
},
|
|
converters: {
|
|
"* text": String,
|
|
"text html": !0,
|
|
"text json": JSON.parse,
|
|
"text xml": p.parseXML
|
|
},
|
|
flatOptions: {
|
|
url: !0,
|
|
context: !0
|
|
}
|
|
},
|
|
ajaxSetup: function(b, c) {
|
|
return c ? Na(Na(b, p.ajaxSettings), c) : Na(p.ajaxSettings, b)
|
|
},
|
|
ajaxPrefilter: va(Dc),
|
|
ajaxTransport: va(Mb),
|
|
ajax: function(c, d) {
|
|
function e(c, d, n, l) {
|
|
var m, t, I, G, A = d;
|
|
if (!r) {
|
|
r = !0;
|
|
q && b.clearTimeout(q);
|
|
j = void 0;
|
|
g = l || "";
|
|
x.readyState = 0 < c ? 4 : 0;
|
|
l = 200 <= c && 300 > c || 304 === c;
|
|
if (n) {
|
|
I = u;
|
|
for (var Aa = x, P, H, J, F, N = I.contents, Q = I.dataTypes;
|
|
"*" === Q[0];) Q.shift(), void 0 === P && (P = I.mimeType || Aa.getResponseHeader("Content-Type"));
|
|
if (P)
|
|
for (H in N)
|
|
if (N[H] &&
|
|
N[H].test(P)) {
|
|
Q.unshift(H);
|
|
break
|
|
} if (Q[0] in n) J = Q[0];
|
|
else {
|
|
for (H in n) {
|
|
if (!Q[0] || I.converters[H + " " + Q[0]]) {
|
|
J = H;
|
|
break
|
|
}
|
|
F || (F = H)
|
|
}
|
|
J = J || F
|
|
}
|
|
I = n = J ? (J !== Q[0] && Q.unshift(J), n[J]) : void 0
|
|
}
|
|
var C;
|
|
a: {
|
|
n = u;P = I;H = x;J = l;
|
|
var K, fa, X;I = {};Aa = n.dataTypes.slice();
|
|
if (Aa[1])
|
|
for (K in n.converters) I[K.toLowerCase()] = n.converters[K];
|
|
for (F = Aa.shift(); F;)
|
|
if (n.responseFields[F] && (H[n.responseFields[F]] = P), !X && J && n.dataFilter && (P = n.dataFilter(P, n.dataType)), X = F, F = Aa.shift())
|
|
if ("*" === F) F = X;
|
|
else if ("*" !== X && X !== F) {
|
|
if (K = I[X + " " + F] || I["* " +
|
|
F], !K)
|
|
for (C in I)
|
|
if (fa = C.split(" "), fa[1] === F && (K = I[X + " " + fa[0]] || I["* " + fa[0]])) {
|
|
!0 === K ? K = I[C] : !0 !== I[C] && (F = fa[0], Aa.unshift(fa[1]));
|
|
break
|
|
} if (!0 !== K)
|
|
if (K && n["throws"]) P = K(P);
|
|
else try {
|
|
P = K(P)
|
|
} catch (fb) {
|
|
C = {
|
|
state: "parsererror",
|
|
error: K ? fb : "No conversion from " + X + " to " + F
|
|
};
|
|
break a
|
|
}
|
|
}
|
|
C = {
|
|
state: "success",
|
|
data: P
|
|
}
|
|
}
|
|
I = C;
|
|
l ? (u.ifModified && (G = x.getResponseHeader("Last-Modified"), G && (p.lastModified[f] = G), G = x.getResponseHeader("etag"), G && (p.etag[f] = G)), 204 === c || "HEAD" === u.type ? A = "nocontent" : 304 === c ? A = "notmodified" :
|
|
(A = I.state, m = I.data, t = I.error, l = !t)) : (t = A, !c && A || (A = "error", 0 > c && (c = 0)));
|
|
x.status = c;
|
|
x.statusText = (d || A) + "";
|
|
l ? L.resolveWith(y, [m, A, x]) : L.rejectWith(y, [x, A, t]);
|
|
x.statusCode(D);
|
|
D = void 0;
|
|
s && z.trigger(l ? "ajaxSuccess" : "ajaxError", [x, u, l ? m : t]);
|
|
O.fireWith(y, [x, A]);
|
|
s && (z.trigger("ajaxComplete", [x, u]), --p.active || p.event.trigger("ajaxStop"))
|
|
}
|
|
}
|
|
"object" == typeof c && (d = c, c = void 0);
|
|
d = d || {};
|
|
var j, f, g, n, q, l, r, s, m, t, u = p.ajaxSetup({}, d),
|
|
y = u.context || u,
|
|
z = u.context && (y.nodeType || y.jquery) ? p(y) : p.event,
|
|
L = p.Deferred(),
|
|
O = p.Callbacks("once memory"),
|
|
D = u.statusCode || {},
|
|
I = {},
|
|
G = {},
|
|
A = "canceled",
|
|
x = {
|
|
readyState: 0,
|
|
getResponseHeader: function(b) {
|
|
var c;
|
|
if (r) {
|
|
if (!n)
|
|
for (n = {}; c = zd.exec(g);) n[c[1].toLowerCase()] = c[2];
|
|
c = n[b.toLowerCase()]
|
|
}
|
|
return null == c ? null : c
|
|
},
|
|
getAllResponseHeaders: function() {
|
|
return r ? g : null
|
|
},
|
|
setRequestHeader: function(b, c) {
|
|
return null == r && (b = G[b.toLowerCase()] = G[b.toLowerCase()] || b, I[b] = c), this
|
|
},
|
|
overrideMimeType: function(b) {
|
|
return null == r && (u.mimeType = b), this
|
|
},
|
|
statusCode: function(b) {
|
|
var c;
|
|
if (b)
|
|
if (r) x.always(b[x.status]);
|
|
else
|
|
for (c in b) D[c] = [D[c], b[c]];
|
|
return this
|
|
},
|
|
abort: function(b) {
|
|
b = b || A;
|
|
return j && j.abort(b), e(0, b), this
|
|
}
|
|
};
|
|
if (L.promise(x), u.url = ((c || u.url || rb.href) + "").replace(Bd, rb.protocol + "//"), u.type = d.method || d.type || u.method || u.type, u.dataTypes = (u.dataType || "*").toLowerCase().match(pa) || [""], null == u.crossDomain) {
|
|
l = M.createElement("a");
|
|
try {
|
|
l.href = u.url, l.href = l.href, u.crossDomain = Wb.protocol + "//" + Wb.host != l.protocol + "//" + l.host
|
|
} catch (Aa) {
|
|
u.crossDomain = !0
|
|
}
|
|
}
|
|
if (u.data && u.processData && "string" != typeof u.data &&
|
|
(u.data = p.param(u.data, u.traditional)), wa(Dc, u, d, x), r) return x;
|
|
(s = p.event && u.global) && 0 === p.active++ && p.event.trigger("ajaxStart");
|
|
u.type = u.type.toUpperCase();
|
|
u.hasContent = !Ad.test(u.type);
|
|
f = u.url.replace(xd, "");
|
|
u.hasContent ? u.data && u.processData && 0 === (u.contentType || "").indexOf("application/x-www-form-urlencoded") && (u.data = u.data.replace(wd, "+")) : (t = u.url.slice(f.length), u.data && (f += (Vb.test(f) ? "&" : "?") + u.data, delete u.data), !1 === u.cache && (f = f.replace(yd, "$1"), t = (Vb.test(f) ? "&" : "?") + "_=" + Bc++ + t),
|
|
u.url = f + t);
|
|
u.ifModified && (p.lastModified[f] && x.setRequestHeader("If-Modified-Since", p.lastModified[f]), p.etag[f] && x.setRequestHeader("If-None-Match", p.etag[f]));
|
|
(u.data && u.hasContent && !1 !== u.contentType || d.contentType) && x.setRequestHeader("Content-Type", u.contentType);
|
|
x.setRequestHeader("Accept", u.dataTypes[0] && u.accepts[u.dataTypes[0]] ? u.accepts[u.dataTypes[0]] + ("*" !== u.dataTypes[0] ? ", " + Ec + "; q=0.01" : "") : u.accepts["*"]);
|
|
for (m in u.headers) x.setRequestHeader(m, u.headers[m]);
|
|
if (u.beforeSend && (!1 ===
|
|
u.beforeSend.call(y, x, u) || r)) return x.abort();
|
|
if (A = "abort", O.add(u.complete), x.done(u.success), x.fail(u.error), j = wa(Mb, u, d, x)) {
|
|
if (x.readyState = 1, s && z.trigger("ajaxSend", [x, u]), r) return x;
|
|
u.async && 0 < u.timeout && (q = b.setTimeout(function() {
|
|
x.abort("timeout")
|
|
}, u.timeout));
|
|
try {
|
|
r = !1, j.send(I, e)
|
|
} catch (P) {
|
|
if (r) throw P;
|
|
e(-1, P)
|
|
}
|
|
} else e(-1, "No Transport");
|
|
return x
|
|
},
|
|
getJSON: function(b, c, d) {
|
|
return p.get(b, c, d, "json")
|
|
},
|
|
getScript: function(b, c) {
|
|
return p.get(b, void 0, c, "script")
|
|
}
|
|
});
|
|
p.each(["get", "post"], function(b,
|
|
c) {
|
|
p[c] = function(b, d, e, j) {
|
|
return p.isFunction(d) && (j = j || e, e = d, d = void 0), p.ajax(p.extend({
|
|
url: b,
|
|
type: c,
|
|
dataType: j,
|
|
data: d,
|
|
success: e
|
|
}, p.isPlainObject(b) && b))
|
|
}
|
|
});
|
|
p._evalUrl = function(b) {
|
|
return p.ajax({
|
|
url: b,
|
|
type: "GET",
|
|
dataType: "script",
|
|
cache: !0,
|
|
async: !1,
|
|
global: !1,
|
|
"throws": !0
|
|
})
|
|
};
|
|
p.fn.extend({
|
|
wrapAll: function(b) {
|
|
var c;
|
|
return this[0] && (p.isFunction(b) && (b = b.call(this[0])), c = p(b, this[0].ownerDocument).eq(0).clone(!0), this[0].parentNode && c.insertBefore(this[0]), c.map(function() {
|
|
for (var b = this; b.firstElementChild;) b =
|
|
b.firstElementChild;
|
|
return b
|
|
}).append(this)), this
|
|
},
|
|
wrapInner: function(b) {
|
|
return p.isFunction(b) ? this.each(function(c) {
|
|
p(this).wrapInner(b.call(this, c))
|
|
}) : this.each(function() {
|
|
var c = p(this),
|
|
d = c.contents();
|
|
d.length ? d.wrapAll(b) : c.append(b)
|
|
})
|
|
},
|
|
wrap: function(b) {
|
|
var c = p.isFunction(b);
|
|
return this.each(function(d) {
|
|
p(this).wrapAll(c ? b.call(this, d) : b)
|
|
})
|
|
},
|
|
unwrap: function(b) {
|
|
return this.parent(b).not("body").each(function() {
|
|
p(this).replaceWith(this.childNodes)
|
|
}), this
|
|
}
|
|
});
|
|
p.expr.pseudos.hidden = function(b) {
|
|
return !p.expr.pseudos.visible(b)
|
|
};
|
|
p.expr.pseudos.visible = function(b) {
|
|
return !(!b.offsetWidth && !b.offsetHeight && !b.getClientRects().length)
|
|
};
|
|
p.ajaxSettings.xhr = function() {
|
|
try {
|
|
return new b.XMLHttpRequest
|
|
} catch (c) {}
|
|
};
|
|
var Cd = {
|
|
"0": 200,
|
|
1223: 204
|
|
},
|
|
sb = p.ajaxSettings.xhr();
|
|
W.cors = !!sb && "withCredentials" in sb;
|
|
W.ajax = sb = !!sb;
|
|
p.ajaxTransport(function(c) {
|
|
var d, e;
|
|
if (W.cors || sb && !c.crossDomain) return {
|
|
send: function(j, f) {
|
|
var g, n = c.xhr();
|
|
if (n.open(c.type, c.url, c.async, c.username, c.password), c.xhrFields)
|
|
for (g in c.xhrFields) n[g] = c.xhrFields[g];
|
|
c.mimeType &&
|
|
n.overrideMimeType && n.overrideMimeType(c.mimeType);
|
|
c.crossDomain || j["X-Requested-With"] || (j["X-Requested-With"] = "XMLHttpRequest");
|
|
for (g in j) n.setRequestHeader(g, j[g]);
|
|
d = function(b) {
|
|
return function() {
|
|
d && (d = e = n.onload = n.onerror = n.onabort = n.onreadystatechange = null, "abort" === b ? n.abort() : "error" === b ? "number" != typeof n.status ? f(0, "error") : f(n.status, n.statusText) : f(Cd[n.status] || n.status, n.statusText, "text" !== (n.responseType || "text") || "string" != typeof n.responseText ? {
|
|
binary: n.response
|
|
} : {
|
|
text: n.responseText
|
|
},
|
|
n.getAllResponseHeaders()))
|
|
}
|
|
};
|
|
n.onload = d();
|
|
e = n.onerror = d("error");
|
|
void 0 !== n.onabort ? n.onabort = e : n.onreadystatechange = function() {
|
|
4 === n.readyState && b.setTimeout(function() {
|
|
d && e()
|
|
})
|
|
};
|
|
d = d("abort");
|
|
try {
|
|
n.send(c.hasContent && c.data || null)
|
|
} catch (q) {
|
|
if (d) throw q;
|
|
}
|
|
},
|
|
abort: function() {
|
|
d && d()
|
|
}
|
|
}
|
|
});
|
|
p.ajaxPrefilter(function(b) {
|
|
b.crossDomain && (b.contents.script = !1)
|
|
});
|
|
p.ajaxSetup({
|
|
accepts: {
|
|
script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
|
|
},
|
|
contents: {
|
|
script: /\b(?:java|ecma)script\b/
|
|
},
|
|
converters: {
|
|
"text script": function(b) {
|
|
return p.globalEval(b), b
|
|
}
|
|
}
|
|
});
|
|
p.ajaxPrefilter("script", function(b) {
|
|
void 0 === b.cache && (b.cache = !1);
|
|
b.crossDomain && (b.type = "GET")
|
|
});
|
|
p.ajaxTransport("script", function(b) {
|
|
if (b.crossDomain) {
|
|
var c, d;
|
|
return {
|
|
send: function(e, j) {
|
|
c = p("<script>").prop({
|
|
charset: b.scriptCharset,
|
|
src: b.url
|
|
}).on("load error", d = function(b) {
|
|
c.remove();
|
|
d = null;
|
|
b && j("error" === b.type ? 404 : 200, b.type)
|
|
});
|
|
M.head.appendChild(c[0])
|
|
},
|
|
abort: function() {
|
|
d && d()
|
|
}
|
|
}
|
|
}
|
|
});
|
|
var Fc = [],
|
|
Xb = /(=)\?(?=&|$)|\?\?/;
|
|
p.ajaxSetup({
|
|
jsonp: "callback",
|
|
jsonpCallback: function() {
|
|
var b = Fc.pop() || p.expando + "_" + Bc++;
|
|
return this[b] = !0, b
|
|
}
|
|
});
|
|
p.ajaxPrefilter("json jsonp", function(c, d, e) {
|
|
var j, f, g, n = !1 !== c.jsonp && (Xb.test(c.url) ? "url" : "string" == typeof c.data && 0 === (c.contentType || "").indexOf("application/x-www-form-urlencoded") && Xb.test(c.data) && "data");
|
|
if (n || "jsonp" === c.dataTypes[0]) return j = c.jsonpCallback = p.isFunction(c.jsonpCallback) ? c.jsonpCallback() : c.jsonpCallback, n ? c[n] = c[n].replace(Xb, "$1" + j) : !1 !== c.jsonp && (c.url += (Vb.test(c.url) ? "&" : "?") + c.jsonp +
|
|
"=" + j), c.converters["script json"] = function() {
|
|
return g || p.error(j + " was not called"), g[0]
|
|
}, c.dataTypes[0] = "json", f = b[j], b[j] = function() {
|
|
g = arguments
|
|
}, e.always(function() {
|
|
void 0 === f ? p(b).removeProp(j) : b[j] = f;
|
|
c[j] && (c.jsonpCallback = d.jsonpCallback, Fc.push(j));
|
|
g && p.isFunction(f) && f(g[0]);
|
|
g = f = void 0
|
|
}), "script"
|
|
});
|
|
var Dd = W,
|
|
Gc, Hc = M.implementation.createHTMLDocument("").body;
|
|
Gc = (Hc.innerHTML = "<form></form><form></form>", 2 === Hc.childNodes.length);
|
|
Dd.createHTMLDocument = Gc;
|
|
p.parseHTML = function(b, c, d) {
|
|
if ("string" !=
|
|
typeof b) return [];
|
|
"boolean" == typeof c && (d = c, c = !1);
|
|
var e, j, f;
|
|
return c || (W.createHTMLDocument ? (c = M.implementation.createHTMLDocument(""), e = c.createElement("base"), e.href = M.location.href, c.head.appendChild(e)) : c = M), j = nc.exec(b), f = !d && [], j ? [c.createElement(j[1])] : (j = x([b], c, f), f && f.length && p(f).remove(), p.merge([], j.childNodes))
|
|
};
|
|
p.fn.load = function(b, c, d) {
|
|
var e, j, f, g = this,
|
|
n = b.indexOf(" ");
|
|
return -1 < n && (e = la(b.slice(n)), b = b.slice(0, n)), p.isFunction(c) ? (d = c, c = void 0) : c && "object" == typeof c && (j = "POST"), 0 <
|
|
g.length && p.ajax({
|
|
url: b,
|
|
type: j || "GET",
|
|
dataType: "html",
|
|
data: c
|
|
}).done(function(b) {
|
|
f = arguments;
|
|
g.html(e ? p("<div>").append(p.parseHTML(b)).find(e) : b)
|
|
}).always(d && function(b, c) {
|
|
g.each(function() {
|
|
d.apply(this, f || [b.responseText, c, b])
|
|
})
|
|
}), this
|
|
};
|
|
p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(b, c) {
|
|
p.fn[c] = function(b) {
|
|
return this.on(c, b)
|
|
}
|
|
});
|
|
p.expr.pseudos.animated = function(b) {
|
|
return p.grep(p.timers, function(c) {
|
|
return b === c.elem
|
|
}).length
|
|
};
|
|
p.offset = {
|
|
setOffset: function(b,
|
|
c, d) {
|
|
var e, j, f, g, n, q, l = p.css(b, "position"),
|
|
r = p(b),
|
|
s = {};
|
|
"static" === l && (b.style.position = "relative");
|
|
n = r.offset();
|
|
f = p.css(b, "top");
|
|
q = p.css(b, "left");
|
|
("absolute" === l || "fixed" === l) && -1 < (f + q).indexOf("auto") ? (e = r.position(), g = e.top, j = e.left) : (g = parseFloat(f) || 0, j = parseFloat(q) || 0);
|
|
p.isFunction(c) && (c = c.call(b, d, p.extend({}, n)));
|
|
null != c.top && (s.top = c.top - n.top + g);
|
|
null != c.left && (s.left = c.left - n.left + j);
|
|
"using" in c ? c.using.call(b, s) : r.css(s)
|
|
}
|
|
};
|
|
p.fn.extend({
|
|
offset: function(b) {
|
|
if (arguments.length) return void 0 ===
|
|
b ? this : this.each(function(c) {
|
|
p.offset.setOffset(this, b, c)
|
|
});
|
|
var c, d, e, j, f = this[0];
|
|
if (f) return f.getClientRects().length ? (e = f.getBoundingClientRect(), c = f.ownerDocument, d = c.documentElement, j = c.defaultView, {
|
|
top: e.top + j.pageYOffset - d.clientTop,
|
|
left: e.left + j.pageXOffset - d.clientLeft
|
|
}) : {
|
|
top: 0,
|
|
left: 0
|
|
}
|
|
},
|
|
position: function() {
|
|
if (this[0]) {
|
|
var b, c, d = this[0],
|
|
e = {
|
|
top: 0,
|
|
left: 0
|
|
};
|
|
return "fixed" === p.css(d, "position") ? c = d.getBoundingClientRect() : (b = this.offsetParent(), c = this.offset(), g(b[0], "html") || (e = b.offset()), e = {
|
|
top: e.top +
|
|
p.css(b[0], "borderTopWidth", !0),
|
|
left: e.left + p.css(b[0], "borderLeftWidth", !0)
|
|
}), {
|
|
top: c.top - e.top - p.css(d, "marginTop", !0),
|
|
left: c.left - e.left - p.css(d, "marginLeft", !0)
|
|
}
|
|
}
|
|
},
|
|
offsetParent: function() {
|
|
return this.map(function() {
|
|
for (var b = this.offsetParent; b && "static" === p.css(b, "position");) b = b.offsetParent;
|
|
return b || Hb
|
|
})
|
|
}
|
|
});
|
|
p.each({
|
|
scrollLeft: "pageXOffset",
|
|
scrollTop: "pageYOffset"
|
|
}, function(b, c) {
|
|
var d = "pageYOffset" === c;
|
|
p.fn[b] = function(e) {
|
|
return Ma(this, function(b, e, j) {
|
|
var f;
|
|
return p.isWindow(b) ? f = b : 9 === b.nodeType &&
|
|
(f = b.defaultView), void 0 === j ? f ? f[c] : b[e] : void(f ? f.scrollTo(d ? f.pageXOffset : j, d ? j : f.pageYOffset) : b[e] = j)
|
|
}, b, e, arguments.length)
|
|
}
|
|
});
|
|
p.each(["top", "left"], function(b, c) {
|
|
p.cssHooks[c] = Y(W.pixelPosition, function(b, d) {
|
|
if (d) return d = J(b, c), Lb.test(d) ? p(b).position()[c] + "px" : d
|
|
})
|
|
});
|
|
p.each({
|
|
Height: "height",
|
|
Width: "width"
|
|
}, function(b, c) {
|
|
p.each({
|
|
padding: "inner" + b,
|
|
content: c,
|
|
"": "outer" + b
|
|
}, function(d, e) {
|
|
p.fn[e] = function(j, f) {
|
|
var g = arguments.length && (d || "boolean" != typeof j),
|
|
n = d || (!0 === j || !0 === f ? "margin" : "border");
|
|
return Ma(this, function(c, d, j) {
|
|
var f;
|
|
return p.isWindow(c) ? 0 === e.indexOf("outer") ? c["inner" + b] : c.document.documentElement["client" + b] : 9 === c.nodeType ? (f = c.documentElement, Math.max(c.body["scroll" + b], f["scroll" + b], c.body["offset" + b], f["offset" + b], f["client" + b])) : void 0 === j ? p.css(c, d, n) : p.style(c, d, j, n)
|
|
}, c, g ? j : void 0, g)
|
|
}
|
|
})
|
|
});
|
|
p.fn.extend({
|
|
bind: function(b, c, d) {
|
|
return this.on(b, null, c, d)
|
|
},
|
|
unbind: function(b, c) {
|
|
return this.off(b, null, c)
|
|
},
|
|
delegate: function(b, c, d, e) {
|
|
return this.on(c, b, d, e)
|
|
},
|
|
undelegate: function(b,
|
|
c, d) {
|
|
return 1 === arguments.length ? this.off(b, "**") : this.off(c, b || "**", d)
|
|
}
|
|
});
|
|
p.holdReady = function(b) {
|
|
b ? p.readyWait++ : p.ready(!0)
|
|
};
|
|
p.isArray = Array.isArray;
|
|
p.parseJSON = JSON.parse;
|
|
p.nodeName = g;
|
|
"function" == typeof define && define.amd && define("jquery", [], function() {
|
|
return p
|
|
});
|
|
var Ed = b.jQuery,
|
|
Fd = b.$;
|
|
return p.noConflict = function(c) {
|
|
return b.$ === p && (b.$ = Fd), c && b.jQuery === p && (b.jQuery = Ed), p
|
|
}, c || (b.jQuery = b.$ = p), p
|
|
});
|
|
var HANDJS = HANDJS || {};
|
|
(function() {
|
|
function b() {
|
|
B = !0;
|
|
clearTimeout(E);
|
|
E = setTimeout(function() {
|
|
B = !1
|
|
}, 700)
|
|
}
|
|
|
|
function c(b) {
|
|
var c = [];
|
|
if (b)
|
|
for (c.unshift(b); b.parentNode;) c.unshift(b.parentNode), b = b.parentNode;
|
|
return c
|
|
}
|
|
|
|
function e(b, d) {
|
|
for (var e = c(b), j = c(d), f = null; 0 < e.length && e[0] == j.shift();) f = e.shift();
|
|
return f
|
|
}
|
|
|
|
function d(b, c, d) {
|
|
c = e(b, c);
|
|
for (var j = []; b && b != c;) b.__handjsGlobalRegisteredEvents && b.__handjsGlobalRegisteredEvents.pointerenter && j.push(b), b = b.parentNode;
|
|
for (; 0 < j.length;) d(j.pop())
|
|
}
|
|
|
|
function g(b, c, d) {
|
|
for (c = e(b, c); b && b !=
|
|
c;) b.__handjsGlobalRegisteredEvents && b.__handjsGlobalRegisteredEvents.pointerleave && d(b), b = b.parentNode
|
|
}
|
|
|
|
function f(b, c) {
|
|
["pointerdown", "pointermove", "pointerup", "pointerover", "pointerout"].forEach(function(d) {
|
|
window.addEventListener(b(d), function(b) {
|
|
!B && s(b.target, d) && c(b, d, !0)
|
|
})
|
|
});
|
|
void 0 === window["on" + b("pointerenter").toLowerCase()] && window.addEventListener(b("pointerover"), function(b) {
|
|
if (!B) {
|
|
var e = s(b.target, "pointerenter");
|
|
e && e !== window && (e.contains(b.relatedTarget) || d(e, b.relatedTarget, function(d) {
|
|
c(b,
|
|
"pointerenter", !1, d)
|
|
}))
|
|
}
|
|
});
|
|
void 0 === window["on" + b("pointerleave").toLowerCase()] && window.addEventListener(b("pointerout"), function(b) {
|
|
if (!B) {
|
|
var d = s(b.target, "pointerleave");
|
|
d && d !== window && (d.contains(b.relatedTarget) || g(d, b.relatedTarget, function(d) {
|
|
c(b, "pointerleave", !1, d)
|
|
}))
|
|
}
|
|
})
|
|
}
|
|
if (!window.PointerEvent) {
|
|
Array.prototype.indexOf || (Array.prototype.indexOf = function(b) {
|
|
var c = Object(this),
|
|
d = c.length >>> 0;
|
|
if (0 === d) return -1;
|
|
var e = 0;
|
|
0 < arguments.length && (e = Number(arguments[1]), e != e ? e = 0 : 0 != e && Infinity != e &&
|
|
-Infinity != e && (e = (0 < e || -1) * Math.floor(Math.abs(e))));
|
|
if (e >= d) return -1;
|
|
for (e = 0 <= e ? e : Math.max(d - Math.abs(e), 0); e < d; e++)
|
|
if (e in c && c[e] === b) return e;
|
|
return -1
|
|
});
|
|
String.prototype.trim || (String.prototype.trim = function() {
|
|
return this.replace(/^\s+|\s+$/, "")
|
|
});
|
|
var m = "pointerdown pointerup pointermove pointerover pointerout pointercancel pointerenter pointerleave".split(" "),
|
|
l = "PointerDown PointerUp PointerMove PointerOver PointerOut PointerCancel PointerEnter PointerLeave".split(" "),
|
|
j = {},
|
|
q = function(b, c, d,
|
|
e) {
|
|
var j;
|
|
document.createEvent ? (j = document.createEvent("MouseEvents"), j.initMouseEvent(c, d, !0, window, 1, b.screenX, b.screenY, b.clientX, b.clientY, b.ctrlKey, b.altKey, b.shiftKey, b.metaKey, b.button, null)) : (j = document.createEventObject(), j.screenX = b.screenX, j.screenY = b.screenY, j.clientX = b.clientX, j.clientY = b.clientY, j.ctrlKey = b.ctrlKey, j.altKey = b.altKey, j.shiftKey = b.shiftKey, j.metaKey = b.metaKey, j.button = b.button);
|
|
void 0 === j.offsetX && (void 0 !== b.offsetX ? (Object && void 0 !== Object.defineProperty && (Object.defineProperty(j,
|
|
"offsetX", {
|
|
writable: !0
|
|
}), Object.defineProperty(j, "offsetY", {
|
|
writable: !0
|
|
})), j.offsetX = b.offsetX, j.offsetY = b.offsetY) : Object && void 0 !== Object.defineProperty ? (Object.defineProperty(j, "offsetX", {
|
|
get: function() {
|
|
return this.currentTarget && this.currentTarget.offsetLeft ? b.clientX - this.currentTarget.offsetLeft : b.clientX
|
|
}
|
|
}), Object.defineProperty(j, "offsetY", {
|
|
get: function() {
|
|
return this.currentTarget && this.currentTarget.offsetTop ? b.clientY - this.currentTarget.offsetTop : b.clientY
|
|
}
|
|
})) : void 0 !== b.layerX && (j.offsetX =
|
|
b.layerX - b.currentTarget.offsetLeft, j.offsetY = b.layerY - b.currentTarget.offsetTop));
|
|
j.isPrimary = void 0 !== b.isPrimary ? b.isPrimary : !0;
|
|
b.pressure ? j.pressure = b.pressure : (d = 0, void 0 !== b.which ? d = b.which : void 0 !== b.button && (d = b.button), j.pressure = 0 == d ? 0 : 0.5);
|
|
j.rotation = b.rotation ? b.rotation : 0;
|
|
j.hwTimestamp = b.hwTimestamp ? b.hwTimestamp : 0;
|
|
j.tiltX = b.tiltX ? b.tiltX : 0;
|
|
j.tiltY = b.tiltY ? b.tiltY : 0;
|
|
j.height = b.height ? b.height : 0;
|
|
j.width = b.width ? b.width : 0;
|
|
j.preventDefault = function() {
|
|
void 0 !== b.preventDefault && b.preventDefault()
|
|
};
|
|
if (void 0 !== j.stopPropagation) {
|
|
var f = j.stopPropagation;
|
|
j.stopPropagation = function() {
|
|
void 0 !== b.stopPropagation && b.stopPropagation();
|
|
f.call(this)
|
|
}
|
|
}
|
|
j.pointerId = b.pointerId;
|
|
j.pointerType = b.pointerType;
|
|
switch (j.pointerType) {
|
|
case 2:
|
|
j.pointerType = "touch";
|
|
break;
|
|
case 3:
|
|
j.pointerType = "pen";
|
|
break;
|
|
case 4:
|
|
j.pointerType = "mouse"
|
|
}
|
|
e ? e.dispatchEvent(j) : b.target ? b.target.dispatchEvent(j) : b.srcElement.fireEvent("on" + u(c), j)
|
|
},
|
|
n = function(b, c, d, e) {
|
|
b.pointerId = 1;
|
|
b.pointerType = "mouse";
|
|
q(b, c, d, e)
|
|
},
|
|
r = function(b, c, d, e, j) {
|
|
c.pointerId =
|
|
c.identifier + 2;
|
|
c.pointerType = "touch";
|
|
c.currentTarget = d;
|
|
void 0 !== e.preventDefault && (c.preventDefault = function() {
|
|
e.preventDefault()
|
|
});
|
|
q(c, b, j, d)
|
|
},
|
|
s = function(b, c) {
|
|
for (; b && (!b.__handjsGlobalRegisteredEvents || !b.__handjsGlobalRegisteredEvents[c]);) b = b.parentNode;
|
|
if (b) return b;
|
|
if (window.__handjsGlobalRegisteredEvents && window.__handjsGlobalRegisteredEvents[c]) return window
|
|
},
|
|
t = function(b, c, d, e, j) {
|
|
s(d, b) && r(b, c, d, e, j)
|
|
},
|
|
u = function(b) {
|
|
return b.toLowerCase().replace("pointer", "mouse")
|
|
},
|
|
y = function(b, c, d, e) {
|
|
void 0 ===
|
|
b.__handjsRegisteredEvents && (b.__handjsRegisteredEvents = []);
|
|
if (e) void 0 !== b.__handjsRegisteredEvents[c] ? b.__handjsRegisteredEvents[c]++ : (b.__handjsRegisteredEvents[c] = 1, b.addEventListener(c, d, !1));
|
|
else if (!(-1 !== b.__handjsRegisteredEvents.indexOf(c) && (b.__handjsRegisteredEvents[c]--, 0 != b.__handjsRegisteredEvents[c]))) b.removeEventListener(c, d), b.__handjsRegisteredEvents[c] = 0
|
|
},
|
|
z = function(b, c, d) {
|
|
b.__handjsGlobalRegisteredEvents || (b.__handjsGlobalRegisteredEvents = []);
|
|
if (d) {
|
|
if (void 0 !== b.__handjsGlobalRegisteredEvents[c]) {
|
|
b.__handjsGlobalRegisteredEvents[c]++;
|
|
return
|
|
}
|
|
b.__handjsGlobalRegisteredEvents[c] = 1
|
|
} else void 0 !== b.__handjsGlobalRegisteredEvents[c] && (b.__handjsGlobalRegisteredEvents[c]--, 0 > b.__handjsGlobalRegisteredEvents[c] && (b.__handjsGlobalRegisteredEvents[c] = 0));
|
|
if (!window.MSPointerEvent) switch (c) {
|
|
case "pointerenter":
|
|
void 0 !== b.onmouseenter && y(b, "mouseenter", function(b) {
|
|
n(b, c)
|
|
}, d);
|
|
break;
|
|
case "pointerleave":
|
|
void 0 !== b.onmouseleave && y(b, "mouseleave", function(b) {
|
|
n(b, c)
|
|
}, d)
|
|
}
|
|
},
|
|
x = function(b) {
|
|
var c = b.prototype ? b.prototype.addEventListener : b.addEventListener,
|
|
d = function(b, d, e) {
|
|
-1 != m.indexOf(b) && z(this, b, !0);
|
|
void 0 === c ? this.attachEvent("on" + u(b), d) : c.call(this, b, d, e)
|
|
};
|
|
b.prototype ? b.prototype.addEventListener = d : b.addEventListener = d
|
|
},
|
|
C = function(b) {
|
|
var c = b.prototype ? b.prototype.removeEventListener : b.removeEventListener,
|
|
d = function(b, d, e) {
|
|
-1 != m.indexOf(b) && z(this, b, !1);
|
|
void 0 === c ? this.detachEvent(u(b), d) : c.call(this, b, d, e)
|
|
};
|
|
b.prototype ? b.prototype.removeEventListener = d : b.removeEventListener = d
|
|
};
|
|
x(window);
|
|
x(window.HTMLElement || window.Element);
|
|
x(document);
|
|
x(HTMLBodyElement);
|
|
x(HTMLDivElement);
|
|
x(HTMLImageElement);
|
|
x(HTMLUListElement);
|
|
x(HTMLAnchorElement);
|
|
x(HTMLLIElement);
|
|
x(HTMLTableElement);
|
|
window.HTMLSpanElement && x(HTMLSpanElement);
|
|
window.HTMLCanvasElement && x(HTMLCanvasElement);
|
|
window.SVGElement && x(SVGElement);
|
|
C(window);
|
|
C(window.HTMLElement || window.Element);
|
|
C(document);
|
|
C(HTMLBodyElement);
|
|
C(HTMLDivElement);
|
|
C(HTMLImageElement);
|
|
C(HTMLUListElement);
|
|
C(HTMLAnchorElement);
|
|
C(HTMLLIElement);
|
|
C(HTMLTableElement);
|
|
window.HTMLSpanElement && C(HTMLSpanElement);
|
|
window.HTMLCanvasElement &&
|
|
C(HTMLCanvasElement);
|
|
window.SVGElement && C(SVGElement);
|
|
var B = !1,
|
|
E = -1;
|
|
window.MSPointerEvent ? f(function(b) {
|
|
b = m.indexOf(b);
|
|
return "MS" + l[b]
|
|
}, q) : (f(u, n), void 0 !== window.ontouchstart && (window.addEventListener("touchstart", function(c) {
|
|
for (var e = 0; e < c.changedTouches.length; ++e) {
|
|
var f = c.changedTouches[e];
|
|
j[f.identifier] = f.target;
|
|
t("pointerover", f, f.target, c, !0);
|
|
d(f.target, null, function(b) {
|
|
r("pointerenter", f, b, c, !1)
|
|
});
|
|
t("pointerdown", f, f.target, c, !0)
|
|
}
|
|
b()
|
|
}), window.addEventListener("touchend", function(c) {
|
|
for (var d =
|
|
0; d < c.changedTouches.length; ++d) {
|
|
var e = c.changedTouches[d],
|
|
f = j[e.identifier];
|
|
t("pointerup", e, f, c, !0);
|
|
t("pointerout", e, f, c, !0);
|
|
g(f, null, function(b) {
|
|
r("pointerleave", e, b, c, !1)
|
|
})
|
|
}
|
|
b()
|
|
}), window.addEventListener("touchmove", function(c) {
|
|
for (var e = 0; e < c.changedTouches.length; ++e) {
|
|
var f = c.changedTouches[e],
|
|
n = document.elementFromPoint(f.clientX, f.clientY),
|
|
q = j[f.identifier],
|
|
l;
|
|
if (l = q) {
|
|
for (l = q; l && !l.handjs_forcePreventDefault;) l = l.parentNode;
|
|
l = !0 === (!!l || window.handjs_forcePreventDefault)
|
|
}
|
|
l && c.preventDefault();
|
|
t("pointermove", f, q, c, !0);
|
|
q !== n && (q && (t("pointerout", f, q, c, !0), q.contains(n) || g(q, n, function(b) {
|
|
r("pointerleave", f, b, c, !1)
|
|
})), n && (t("pointerover", f, n, c, !0), n.contains(q) || d(n, q, function(b) {
|
|
r("pointerenter", f, b, c, !1)
|
|
})), j[f.identifier] = n)
|
|
}
|
|
b()
|
|
}), window.addEventListener("touchcancel", function(b) {
|
|
for (var c = 0; c < b.changedTouches.length; ++c) {
|
|
var d = b.changedTouches[c];
|
|
t("pointercancel", d, j[d.identifier], b, !0)
|
|
}
|
|
})));
|
|
void 0 === navigator.pointerEnabled && (navigator.pointerEnabled = !0, navigator.msPointerEnabled &&
|
|
(navigator.maxTouchPoints = navigator.msMaxTouchPoints));
|
|
document.styleSheets && document.addEventListener && document.addEventListener("DOMContentLoaded", function() {
|
|
if (!(HANDJS.doNotProcessCSS || void 0 !== document.body.style.touchAction)) {
|
|
var b = /.+?{.*?}/m,
|
|
c = /.+?{/m,
|
|
d = function(d) {
|
|
var e = b.exec(d);
|
|
if (e) {
|
|
e = e[0];
|
|
d = d.replace(e, "").trim();
|
|
var j = c.exec(e)[0].replace("{", "").trim();
|
|
if (-1 != e.replace(/\s/g, "").indexOf("touch-action:none")) {
|
|
e = document.querySelectorAll(j);
|
|
for (j = 0; j < e.length; j++) {
|
|
var f = e[j];
|
|
void 0 !==
|
|
f.style.msTouchAction ? f.style.msTouchAction = "none" : f.handjs_forcePreventDefault = !0
|
|
}
|
|
}
|
|
return d
|
|
}
|
|
},
|
|
e = function(b) {
|
|
if (window.setImmediate) b && setImmediate(e, d(b));
|
|
else
|
|
for (; b;) b = d(b)
|
|
};
|
|
try {
|
|
for (var j = 0; j < document.styleSheets.length; j++) {
|
|
var f = document.styleSheets[j];
|
|
if (void 0 != f.href) {
|
|
var g = new XMLHttpRequest;
|
|
g.open("get", f.href, !1);
|
|
g.send();
|
|
var n = g.responseText.replace(/(\n|\r)/g, "");
|
|
e(n)
|
|
}
|
|
}
|
|
} catch (q) {}
|
|
f = document.getElementsByTagName("style");
|
|
for (j = 0; j < f.length; j++) g = f[j].innerHTML.replace(/(\n|\r)/g, "").trim(),
|
|
e(g)
|
|
}
|
|
}, !1)
|
|
}
|
|
})();
|
|
window.wgl = {
|
|
modules: {}
|
|
};
|
|
! function(b) {
|
|
if ("object" == typeof exports && "undefined" != typeof module) module.exports = b();
|
|
else {
|
|
var c;
|
|
"undefined" != typeof window ? c = window : "undefined" != typeof global ? c = global : "undefined" != typeof self && (c = self);
|
|
c.CANNON = b()
|
|
}
|
|
}(function() {
|
|
return function c(e, d, g) {
|
|
function f(j, q) {
|
|
if (!d[j]) {
|
|
if (!e[j]) {
|
|
var n = "function" == typeof require && require;
|
|
if (!q && n) return n(j, !0);
|
|
if (m) return m(j, !0);
|
|
throw Error("Cannot find module '" + j + "'");
|
|
}
|
|
n = d[j] = {
|
|
exports: {}
|
|
};
|
|
e[j][0].call(n.exports, function(c) {
|
|
var d = e[j][1][c];
|
|
return f(d ?
|
|
d : c)
|
|
}, n, n.exports, c, e, d, g)
|
|
}
|
|
return d[j].exports
|
|
}
|
|
for (var m = "function" == typeof require && require, l = 0; l < g.length; l++) f(g[l]);
|
|
return f
|
|
}({
|
|
1: [function(c, e) {
|
|
e.exports = {
|
|
name: "cannon",
|
|
version: "0.6.2",
|
|
description: "A lightweight 3D physics engine written in JavaScript.",
|
|
homepage: "https://github.com/schteppe/cannon.js",
|
|
author: "Stefan Hedman <schteppe@gmail.com> (http://steffe.se)",
|
|
keywords: ["cannon.js", "cannon", "physics", "engine", "3d"],
|
|
main: "./build/cannon.js",
|
|
engines: {
|
|
node: "*"
|
|
},
|
|
repository: {
|
|
type: "git",
|
|
url: "https://github.com/schteppe/cannon.js.git"
|
|
},
|
|
bugs: {
|
|
url: "https://github.com/schteppe/cannon.js/issues"
|
|
},
|
|
licenses: [{
|
|
type: "MIT"
|
|
}],
|
|
devDependencies: {
|
|
jshint: "latest",
|
|
"uglify-js": "latest",
|
|
nodeunit: "^0.9.0",
|
|
grunt: "~0.4.0",
|
|
"grunt-contrib-jshint": "~0.1.1",
|
|
"grunt-contrib-nodeunit": "^0.4.1",
|
|
"grunt-contrib-concat": "~0.1.3",
|
|
"grunt-contrib-uglify": "^0.5.1",
|
|
"grunt-browserify": "^2.1.4",
|
|
"grunt-contrib-yuidoc": "^0.5.2",
|
|
browserify: "*"
|
|
},
|
|
dependencies: {}
|
|
}
|
|
}, {}],
|
|
2: [function(c, e) {
|
|
e.exports = {
|
|
version: c("../package.json").version,
|
|
AABB: c("./collision/AABB"),
|
|
ArrayCollisionMatrix: c("./collision/ArrayCollisionMatrix"),
|
|
Body: c("./objects/Body"),
|
|
Box: c("./shapes/Box"),
|
|
Broadphase: c("./collision/Broadphase"),
|
|
Constraint: c("./constraints/Constraint"),
|
|
ContactEquation: c("./equations/ContactEquation"),
|
|
Narrowphase: c("./world/Narrowphase"),
|
|
ConeTwistConstraint: c("./constraints/ConeTwistConstraint"),
|
|
ContactMaterial: c("./material/ContactMaterial"),
|
|
ConvexPolyhedron: c("./shapes/ConvexPolyhedron"),
|
|
Cylinder: c("./shapes/Cylinder"),
|
|
DistanceConstraint: c("./constraints/DistanceConstraint"),
|
|
Equation: c("./equations/Equation"),
|
|
EventTarget: c("./utils/EventTarget"),
|
|
FrictionEquation: c("./equations/FrictionEquation"),
|
|
GSSolver: c("./solver/GSSolver"),
|
|
GridBroadphase: c("./collision/GridBroadphase"),
|
|
Heightfield: c("./shapes/Heightfield"),
|
|
HingeConstraint: c("./constraints/HingeConstraint"),
|
|
LockConstraint: c("./constraints/LockConstraint"),
|
|
Mat3: c("./math/Mat3"),
|
|
Material: c("./material/Material"),
|
|
NaiveBroadphase: c("./collision/NaiveBroadphase"),
|
|
ObjectCollisionMatrix: c("./collision/ObjectCollisionMatrix"),
|
|
Pool: c("./utils/Pool"),
|
|
Particle: c("./shapes/Particle"),
|
|
Plane: c("./shapes/Plane"),
|
|
PointToPointConstraint: c("./constraints/PointToPointConstraint"),
|
|
Quaternion: c("./math/Quaternion"),
|
|
Ray: c("./collision/Ray"),
|
|
RaycastVehicle: c("./objects/RaycastVehicle"),
|
|
RaycastResult: c("./collision/RaycastResult"),
|
|
RigidVehicle: c("./objects/RigidVehicle"),
|
|
RotationalEquation: c("./equations/RotationalEquation"),
|
|
RotationalMotorEquation: c("./equations/RotationalMotorEquation"),
|
|
SAPBroadphase: c("./collision/SAPBroadphase"),
|
|
SPHSystem: c("./objects/SPHSystem"),
|
|
Shape: c("./shapes/Shape"),
|
|
Solver: c("./solver/Solver"),
|
|
Sphere: c("./shapes/Sphere"),
|
|
SplitSolver: c("./solver/SplitSolver"),
|
|
Spring: c("./objects/Spring"),
|
|
Trimesh: c("./shapes/Trimesh"),
|
|
Vec3: c("./math/Vec3"),
|
|
Vec3Pool: c("./utils/Vec3Pool"),
|
|
World: c("./world/World")
|
|
}
|
|
}, {
|
|
"../package.json": 1,
|
|
"./collision/AABB": 3,
|
|
"./collision/ArrayCollisionMatrix": 4,
|
|
"./collision/Broadphase": 5,
|
|
"./collision/GridBroadphase": 6,
|
|
"./collision/NaiveBroadphase": 7,
|
|
"./collision/ObjectCollisionMatrix": 8,
|
|
"./collision/Ray": 9,
|
|
"./collision/RaycastResult": 10,
|
|
"./collision/SAPBroadphase": 11,
|
|
"./constraints/ConeTwistConstraint": 12,
|
|
"./constraints/Constraint": 13,
|
|
"./constraints/DistanceConstraint": 14,
|
|
"./constraints/HingeConstraint": 15,
|
|
"./constraints/LockConstraint": 16,
|
|
"./constraints/PointToPointConstraint": 17,
|
|
"./equations/ContactEquation": 19,
|
|
"./equations/Equation": 20,
|
|
"./equations/FrictionEquation": 21,
|
|
"./equations/RotationalEquation": 22,
|
|
"./equations/RotationalMotorEquation": 23,
|
|
"./material/ContactMaterial": 24,
|
|
"./material/Material": 25,
|
|
"./math/Mat3": 27,
|
|
"./math/Quaternion": 28,
|
|
"./math/Vec3": 30,
|
|
"./objects/Body": 31,
|
|
"./objects/RaycastVehicle": 32,
|
|
"./objects/RigidVehicle": 33,
|
|
"./objects/SPHSystem": 34,
|
|
"./objects/Spring": 35,
|
|
"./shapes/Box": 37,
|
|
"./shapes/ConvexPolyhedron": 38,
|
|
"./shapes/Cylinder": 39,
|
|
"./shapes/Heightfield": 40,
|
|
"./shapes/Particle": 41,
|
|
"./shapes/Plane": 42,
|
|
"./shapes/Shape": 43,
|
|
"./shapes/Sphere": 44,
|
|
"./shapes/Trimesh": 45,
|
|
"./solver/GSSolver": 46,
|
|
"./solver/Solver": 47,
|
|
"./solver/SplitSolver": 48,
|
|
"./utils/EventTarget": 49,
|
|
"./utils/Pool": 51,
|
|
"./utils/Vec3Pool": 54,
|
|
"./world/Narrowphase": 55,
|
|
"./world/World": 56
|
|
}],
|
|
3: [function(c, e) {
|
|
function d(c) {
|
|
c = c || {};
|
|
this.lowerBound =
|
|
new g;
|
|
c.lowerBound && this.lowerBound.copy(c.lowerBound);
|
|
this.upperBound = new g;
|
|
c.upperBound && this.upperBound.copy(c.upperBound)
|
|
}
|
|
var g = c("../math/Vec3");
|
|
c("../utils/Utils");
|
|
e.exports = d;
|
|
var f = new g;
|
|
d.prototype.setFromPoints = function(c, d, e, g) {
|
|
var r = this.lowerBound,
|
|
s = this.upperBound;
|
|
r.copy(c[0]);
|
|
e && e.vmult(r, r);
|
|
s.copy(r);
|
|
for (var m = 1; m < c.length; m++) {
|
|
var u = c[m];
|
|
e && (e.vmult(u, f), u = f);
|
|
u.x > s.x && (s.x = u.x);
|
|
u.x < r.x && (r.x = u.x);
|
|
u.y > s.y && (s.y = u.y);
|
|
u.y < r.y && (r.y = u.y);
|
|
u.z > s.z && (s.z = u.z);
|
|
u.z < r.z && (r.z = u.z)
|
|
}
|
|
d && (d.vadd(r,
|
|
r), d.vadd(s, s));
|
|
g && (r.x -= g, r.y -= g, r.z -= g, s.x += g, s.y += g, s.z += g);
|
|
return this
|
|
};
|
|
d.prototype.copy = function(c) {
|
|
this.lowerBound.copy(c.lowerBound);
|
|
this.upperBound.copy(c.upperBound);
|
|
return this
|
|
};
|
|
d.prototype.clone = function() {
|
|
return (new d).copy(this)
|
|
};
|
|
d.prototype.extend = function(c) {
|
|
var d = c.lowerBound.x;
|
|
this.lowerBound.x > d && (this.lowerBound.x = d);
|
|
d = c.upperBound.x;
|
|
this.upperBound.x < d && (this.upperBound.x = d);
|
|
d = c.lowerBound.y;
|
|
this.lowerBound.y > d && (this.lowerBound.y = d);
|
|
d = c.upperBound.y;
|
|
this.upperBound.y < d && (this.upperBound.y =
|
|
d);
|
|
d = c.lowerBound.z;
|
|
this.lowerBound.z > d && (this.lowerBound.z = d);
|
|
d = c.upperBound.z;
|
|
this.upperBound.z < d && (this.upperBound.z = d)
|
|
};
|
|
d.prototype.overlaps = function(c) {
|
|
var d = this.lowerBound,
|
|
e = this.upperBound,
|
|
f = c.lowerBound;
|
|
c = c.upperBound;
|
|
return (f.x <= e.x && e.x <= c.x || d.x <= c.x && c.x <= e.x) && (f.y <= e.y && e.y <= c.y || d.y <= c.y && c.y <= e.y) && (f.z <= e.z && e.z <= c.z || d.z <= c.z && c.z <= e.z)
|
|
};
|
|
d.prototype.contains = function(c) {
|
|
var d = this.lowerBound,
|
|
e = this.upperBound,
|
|
f = c.lowerBound;
|
|
c = c.upperBound;
|
|
return d.x <= f.x && e.x >= c.x && d.y <= f.y && e.y >=
|
|
c.y && d.z <= f.z && e.z >= c.z
|
|
};
|
|
d.prototype.getCorners = function(c, d, e, f, g, s, m, u) {
|
|
var y = this.lowerBound,
|
|
z = this.upperBound;
|
|
c.copy(y);
|
|
d.set(z.x, y.y, y.z);
|
|
e.set(z.x, z.y, y.z);
|
|
f.set(y.x, z.y, z.z);
|
|
g.set(z.x, y.y, y.z);
|
|
s.set(y.x, z.y, y.z);
|
|
m.set(y.x, y.y, z.z);
|
|
u.copy(z)
|
|
};
|
|
var m = [new g, new g, new g, new g, new g, new g, new g, new g];
|
|
d.prototype.toLocalFrame = function(c, d) {
|
|
this.getCorners(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7]);
|
|
for (var e = 0; 8 !== e; e++) {
|
|
var f = m[e];
|
|
c.pointToLocal(f, f)
|
|
}
|
|
return d.setFromPoints(m)
|
|
};
|
|
d.prototype.toWorldFrame =
|
|
function(c, d) {
|
|
this.getCorners(m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7]);
|
|
for (var e = 0; 8 !== e; e++) {
|
|
var f = m[e];
|
|
c.pointToWorld(f, f)
|
|
}
|
|
return d.setFromPoints(m)
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30,
|
|
"../utils/Utils": 53
|
|
}],
|
|
4: [function(c, e) {
|
|
function d() {
|
|
this.matrix = []
|
|
}
|
|
e.exports = d;
|
|
d.prototype.get = function(c, d) {
|
|
c = c.index;
|
|
d = d.index;
|
|
if (d > c) {
|
|
var e = d;
|
|
d = c;
|
|
c = e
|
|
}
|
|
return this.matrix[(c * (c + 1) >> 1) + d - 1]
|
|
};
|
|
d.prototype.set = function(c, d, e) {
|
|
c = c.index;
|
|
d = d.index;
|
|
if (d > c) {
|
|
var l = d;
|
|
d = c;
|
|
c = l
|
|
}
|
|
this.matrix[(c * (c + 1) >> 1) + d - 1] = e ? 1 : 0
|
|
};
|
|
d.prototype.reset = function() {
|
|
for (var c =
|
|
0, d = this.matrix.length; c !== d; c++) this.matrix[c] = 0
|
|
};
|
|
d.prototype.setNumObjects = function(c) {
|
|
this.matrix.length = c * (c - 1) >> 1
|
|
}
|
|
}, {}],
|
|
5: [function(c, e) {
|
|
function d() {
|
|
this.world = null;
|
|
this.useBoundingBoxes = !1;
|
|
this.dirty = !0
|
|
}
|
|
var g = c("../objects/Body"),
|
|
f = c("../math/Vec3"),
|
|
m = c("../math/Quaternion");
|
|
c("../shapes/Shape");
|
|
c("../shapes/Plane");
|
|
e.exports = d;
|
|
d.prototype.collisionPairs = function() {
|
|
throw Error("collisionPairs not implemented for this BroadPhase class!");
|
|
};
|
|
var l = g.STATIC | g.KINEMATIC;
|
|
d.prototype.needBroadphaseCollision =
|
|
function(c, d) {
|
|
return 0 === (c.collisionFilterGroup & d.collisionFilterMask) || 0 === (d.collisionFilterGroup & c.collisionFilterMask) || (0 !== (c.type & l) || c.sleepState === g.SLEEPING) && (0 !== (d.type & l) || d.sleepState === g.SLEEPING) ? !1 : !0
|
|
};
|
|
d.prototype.intersectionTest = function(c, d, e, j) {
|
|
this.useBoundingBoxes ? this.doBoundingBoxBroadphase(c, d, e, j) : this.doBoundingSphereBroadphase(c, d, e, j)
|
|
};
|
|
var j = new f;
|
|
new f;
|
|
new m;
|
|
new f;
|
|
d.prototype.doBoundingSphereBroadphase = function(c, d, e, f) {
|
|
d.position.vsub(c.position, j);
|
|
var g = Math.pow(c.boundingRadius +
|
|
d.boundingRadius, 2);
|
|
j.norm2() < g && (e.push(c), f.push(d))
|
|
};
|
|
d.prototype.doBoundingBoxBroadphase = function(c, d, e, j) {
|
|
c.aabbNeedsUpdate && c.computeAABB();
|
|
d.aabbNeedsUpdate && d.computeAABB();
|
|
c.aabb.overlaps(d.aabb) && (e.push(c), j.push(d))
|
|
};
|
|
var q = {
|
|
keys: []
|
|
},
|
|
n = [],
|
|
r = [];
|
|
d.prototype.makePairsUnique = function(c, d) {
|
|
for (var e = c.length, j = 0; j !== e; j++) n[j] = c[j], r[j] = d[j];
|
|
c.length = 0;
|
|
for (j = d.length = 0; j !== e; j++) {
|
|
var f = n[j].id,
|
|
g = r[j].id,
|
|
f = f < g ? f + "," + g : g + "," + f;
|
|
q[f] = j;
|
|
q.keys.push(f)
|
|
}
|
|
for (j = 0; j !== q.keys.length; j++) f = q.keys.pop(),
|
|
e = q[f], c.push(n[e]), d.push(r[e]), delete q[f]
|
|
};
|
|
d.prototype.setWorld = function() {};
|
|
var s = new f;
|
|
d.boundingSphereCheck = function(c, d) {
|
|
c.position.vsub(d.position, s);
|
|
return Math.pow(c.shape.boundingSphereRadius + d.shape.boundingSphereRadius, 2) > s.norm2()
|
|
};
|
|
d.prototype.aabbQuery = function() {
|
|
console.warn(".aabbQuery is not implemented in this Broadphase subclass.");
|
|
return []
|
|
}
|
|
}, {
|
|
"../math/Quaternion": 28,
|
|
"../math/Vec3": 30,
|
|
"../objects/Body": 31,
|
|
"../shapes/Plane": 42,
|
|
"../shapes/Shape": 43
|
|
}],
|
|
6: [function(c, e) {
|
|
function d(c,
|
|
d, e, l, s) {
|
|
g.apply(this);
|
|
this.nx = e || 10;
|
|
this.ny = l || 10;
|
|
this.nz = s || 10;
|
|
this.aabbMin = c || new f(100, 100, 100);
|
|
this.aabbMax = d || new f(-100, -100, -100);
|
|
c = this.nx * this.ny * this.nz;
|
|
if (0 >= c) throw "GridBroadphase: Each dimension's n must be >0";
|
|
this.bins = [];
|
|
this.binLengths = [];
|
|
this.bins.length = c;
|
|
this.binLengths.length = c;
|
|
for (d = 0; d < c; d++) this.bins[d] = [], this.binLengths[d] = 0
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Broadphase"),
|
|
f = c("../math/Vec3"),
|
|
m = c("../shapes/Shape");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
var l = new f;
|
|
new f;
|
|
d.prototype.collisionPairs =
|
|
function(c, d, e) {
|
|
function f(c, d, e, j, g, n, q) {
|
|
c = (c - H) * S | 0;
|
|
d = (d - O) * J | 0;
|
|
e = (e - K) * Y | 0;
|
|
j = L((j - H) * S);
|
|
g = L((g - O) * J);
|
|
n = L((n - K) * Y);
|
|
0 > c ? c = 0 : c >= y && (c = y - 1);
|
|
0 > d ? d = 0 : d >= z && (d = z - 1);
|
|
0 > e ? e = 0 : e >= x && (e = x - 1);
|
|
0 > j ? j = 0 : j >= y && (j = y - 1);
|
|
0 > g ? g = 0 : g >= z && (g = z - 1);
|
|
0 > n ? n = 0 : n >= x && (n = x - 1);
|
|
c *= C;
|
|
d *= B;
|
|
e *= E;
|
|
j *= C;
|
|
g *= B;
|
|
for (n *= E; c <= j; c += C)
|
|
for (var l = d; l <= g; l += B)
|
|
for (var r = e; r <= n; r += E) {
|
|
var s = c + l + r;
|
|
T[s][P[s]++] = q
|
|
}
|
|
}
|
|
var g = c.numObjects();
|
|
c = c.bodies;
|
|
for (var t = this.aabbMax, u = this.aabbMin, y = this.nx, z = this.ny, x = this.nz, C = z * x, B = x, E = 1, G = t.x, D = t.y, A = t.z, H = u.x,
|
|
O = u.y, K = u.z, S = y / (G - H), J = z / (D - O), Y = x / (A - K), G = (G - H) / y, ca = (D - O) / z, A = (A - K) / x, F = 0.5 * Math.sqrt(G * G + ca * ca + A * A), D = m.types, N = D.SPHERE, da = D.PLANE, T = this.bins, P = this.binLengths, D = this.bins.length, u = 0; u !== D; u++) P[u] = 0;
|
|
for (var L = Math.ceil, u = Math.min, t = Math.max, u = 0; u !== g; u++) {
|
|
var t = c[u],
|
|
I = t.shape;
|
|
switch (I.type) {
|
|
case N:
|
|
var X = t.position.x,
|
|
aa = t.position.y,
|
|
la = t.position.z,
|
|
I = I.radius;
|
|
f(X - I, aa - I, la - I, X + I, aa + I, la + I, t);
|
|
break;
|
|
case da:
|
|
I.worldNormalNeedsUpdate && I.computeWorldNormal(t.quaternion);
|
|
var la = I.worldNormal,
|
|
I = O +
|
|
0.5 * ca - t.position.y,
|
|
qa = K + 0.5 * A - t.position.z,
|
|
ea = l;
|
|
ea.set(H + 0.5 * G - t.position.x, I, qa);
|
|
for (var va = X = 0; X !== y; X++, va += C, ea.y = I, ea.x += G)
|
|
for (var wa = aa = 0; aa !== z; aa++, wa += B, ea.z = qa, ea.y += ca)
|
|
for (var Na = 0, ma = 0; Na !== x; Na++, ma += E, ea.z += A)
|
|
if (ea.dot(la) < F) {
|
|
var M = va + wa + ma;
|
|
T[M][P[M]++] = t
|
|
} break;
|
|
default:
|
|
t.aabbNeedsUpdate && t.computeAABB(), f(t.aabb.lowerBound.x, t.aabb.lowerBound.y, t.aabb.lowerBound.z, t.aabb.upperBound.x, t.aabb.upperBound.y, t.aabb.upperBound.z, t)
|
|
}
|
|
}
|
|
for (u = 0; u !== D; u++)
|
|
if (g = P[u], 1 < g) {
|
|
c = T[u];
|
|
for (X = 0; X !== g; X++) {
|
|
t =
|
|
c[X];
|
|
for (aa = 0; aa !== X; aa++) G = c[aa], this.needBroadphaseCollision(t, G) && this.intersectionTest(t, G, d, e)
|
|
}
|
|
} this.makePairsUnique(d, e)
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30,
|
|
"../shapes/Shape": 43,
|
|
"./Broadphase": 5
|
|
}],
|
|
7: [function(c, e) {
|
|
function d() {
|
|
g.apply(this)
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Broadphase"),
|
|
f = c("./AABB");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
d.prototype.collisionPairs = function(c, d, e) {
|
|
c = c.bodies;
|
|
var f = c.length,
|
|
g, r, s, t;
|
|
for (g = 0; g !== f; g++)
|
|
for (r = 0; r !== g; r++) s = c[g], t = c[r], this.needBroadphaseCollision(s, t) && this.intersectionTest(s,
|
|
t, d, e)
|
|
};
|
|
new f;
|
|
d.prototype.aabbQuery = function(c, d, e) {
|
|
e = e || [];
|
|
for (var f = 0; f < c.bodies.length; f++) {
|
|
var g = c.bodies[f];
|
|
g.aabbNeedsUpdate && g.computeAABB();
|
|
g.aabb.overlaps(d) && e.push(g)
|
|
}
|
|
return e
|
|
}
|
|
}, {
|
|
"./AABB": 3,
|
|
"./Broadphase": 5
|
|
}],
|
|
8: [function(c, e) {
|
|
function d() {
|
|
this.matrix = {}
|
|
}
|
|
e.exports = d;
|
|
d.prototype.get = function(c, d) {
|
|
c = c.id;
|
|
d = d.id;
|
|
if (d > c) {
|
|
var e = d;
|
|
d = c;
|
|
c = e
|
|
}
|
|
return c + "-" + d in this.matrix
|
|
};
|
|
d.prototype.set = function(c, d, e) {
|
|
c = c.id;
|
|
d = d.id;
|
|
if (d > c) {
|
|
var l = d;
|
|
d = c;
|
|
c = l
|
|
}
|
|
e ? this.matrix[c + "-" + d] = !0 : delete this.matrix[c + "-" + d]
|
|
};
|
|
d.prototype.reset = function() {
|
|
this.matrix = {}
|
|
};
|
|
d.prototype.setNumObjects = function() {}
|
|
}, {}],
|
|
9: [function(c, e) {
|
|
function d(c, e) {
|
|
this.from = c ? c.clone() : new f;
|
|
this.to = e ? e.clone() : new f;
|
|
this._direction = new f;
|
|
this.precision = 1E-4;
|
|
this.checkCollisionResponse = !0;
|
|
this.skipBackfaces = !1;
|
|
this.collisionFilterGroup = this.collisionFilterMask = -1;
|
|
this.mode = d.ANY;
|
|
this.result = new j;
|
|
this.hasHit = !1;
|
|
this.callback = function() {}
|
|
}
|
|
|
|
function g(c, d, e, j) {
|
|
j.vsub(d, T);
|
|
e.vsub(d, t);
|
|
c.vsub(d, u);
|
|
c = T.dot(T);
|
|
d = T.dot(t);
|
|
e = T.dot(u);
|
|
j = t.dot(t);
|
|
var f = t.dot(u),
|
|
g, n;
|
|
return 0 <= (g = j * e - d * f) && 0 <= (n = c * f - d * e) && g + n < c * j - d * d
|
|
}
|
|
e.exports = d;
|
|
var f = c("../math/Vec3"),
|
|
m = c("../math/Quaternion"),
|
|
l = c("../math/Transform");
|
|
c("../shapes/ConvexPolyhedron");
|
|
c("../shapes/Box");
|
|
var j = c("../collision/RaycastResult"),
|
|
q = c("../shapes/Shape"),
|
|
n = c("../collision/AABB");
|
|
d.prototype.constructor = d;
|
|
d.CLOSEST = 1;
|
|
d.ANY = 2;
|
|
d.ALL = 4;
|
|
var r = new n,
|
|
s = [];
|
|
d.prototype.intersectWorld = function(c, e) {
|
|
this.mode = e.mode || d.ANY;
|
|
this.result = e.result || new j;
|
|
this.skipBackfaces = !!e.skipBackfaces;
|
|
this.collisionFilterMask =
|
|
"undefined" !== typeof e.collisionFilterMask ? e.collisionFilterMask : -1;
|
|
this.collisionFilterGroup = "undefined" !== typeof e.collisionFilterGroup ? e.collisionFilterGroup : -1;
|
|
e.from && this.from.copy(e.from);
|
|
e.to && this.to.copy(e.to);
|
|
this.callback = e.callback || function() {};
|
|
this.hasHit = !1;
|
|
this.result.reset();
|
|
this._updateDirection();
|
|
this.getAABB(r);
|
|
s.length = 0;
|
|
c.broadphase.aabbQuery(c, r, s);
|
|
this.intersectBodies(s);
|
|
return this.hasHit
|
|
};
|
|
var t = new f,
|
|
u = new f;
|
|
d.pointInTriangle = g;
|
|
var y = new f,
|
|
z = new m;
|
|
d.prototype.intersectBody =
|
|
function(c, d) {
|
|
d && (this.result = d, this._updateDirection());
|
|
var e = this.checkCollisionResponse;
|
|
if (!e || c.collisionResponse)
|
|
if (!(0 === (this.collisionFilterGroup & c.collisionFilterMask) || 0 === (c.collisionFilterGroup & this.collisionFilterMask)))
|
|
for (var j = 0, f = c.shapes.length; j < f; j++) {
|
|
var g = c.shapes[j];
|
|
if (!e || g.collisionResponse)
|
|
if (c.quaternion.mult(c.shapeOrientations[j], z), c.quaternion.vmult(c.shapeOffsets[j], y), y.vadd(c.position, y), this.intersectShape(g, z, y, c), this.result._shouldStop) break
|
|
}
|
|
};
|
|
d.prototype.intersectBodies =
|
|
function(c, d) {
|
|
d && (this.result = d, this._updateDirection());
|
|
for (var e = 0, j = c.length; !this.result._shouldStop && e < j; e++) this.intersectBody(c[e])
|
|
};
|
|
d.prototype._updateDirection = function() {
|
|
this.to.vsub(this.from, this._direction);
|
|
this._direction.normalize()
|
|
};
|
|
d.prototype.intersectShape = function(c, d, e, j) {
|
|
var f = this.from,
|
|
g = this._direction;
|
|
e.vsub(f, T);
|
|
var n = T.dot(g);
|
|
g.mult(n, P);
|
|
P.vadd(f, P);
|
|
e.distanceTo(P) > c.boundingSphereRadius || (f = this[c.type]) && f.call(this, c, d, e, j)
|
|
};
|
|
new f;
|
|
new f;
|
|
var x = new f,
|
|
C = new f,
|
|
B = new f,
|
|
E =
|
|
new f;
|
|
new f;
|
|
new j;
|
|
d.prototype.intersectBox = function(c, d, e, j) {
|
|
return this.intersectConvex(c.convexPolyhedronRepresentation, d, e, j)
|
|
};
|
|
d.prototype[q.types.BOX] = d.prototype.intersectBox;
|
|
d.prototype.intersectPlane = function(c, d, e, j) {
|
|
var g = this.from,
|
|
n = this.to,
|
|
q = this._direction,
|
|
l = new f(0, 0, 1);
|
|
d.vmult(l, l);
|
|
var r = new f;
|
|
g.vsub(e, r);
|
|
d = r.dot(l);
|
|
n.vsub(e, r);
|
|
r = r.dot(l);
|
|
if (!(0 < d * r) && !(g.distanceTo(n) < d) && (r = l.dot(q), !(Math.abs(r) < this.precision))) {
|
|
var s = new f,
|
|
n = new f;
|
|
d = new f;
|
|
g.vsub(e, s);
|
|
e = -l.dot(s) / r;
|
|
q.scale(e, n);
|
|
g.vadd(n, d);
|
|
this.reportIntersection(l, d, c, j, -1)
|
|
}
|
|
};
|
|
d.prototype[q.types.PLANE] = d.prototype.intersectPlane;
|
|
d.prototype.getAABB = function(c) {
|
|
var d = this.to,
|
|
e = this.from;
|
|
c.lowerBound.x = Math.min(d.x, e.x);
|
|
c.lowerBound.y = Math.min(d.y, e.y);
|
|
c.lowerBound.z = Math.min(d.z, e.z);
|
|
c.upperBound.x = Math.max(d.x, e.x);
|
|
c.upperBound.y = Math.max(d.y, e.y);
|
|
c.upperBound.z = Math.max(d.z, e.z)
|
|
};
|
|
var G = {
|
|
faceList: [0]
|
|
};
|
|
d.prototype.intersectHeightfield = function(c, e, j, g) {
|
|
var n = new f,
|
|
q = new d(this.from, this.to);
|
|
l.pointToLocalFrame(j, e, q.from,
|
|
q.from);
|
|
l.pointToLocalFrame(j, e, q.to, q.to);
|
|
var r = [],
|
|
s = null,
|
|
m = null,
|
|
t = null,
|
|
u = null;
|
|
c.getIndexOfPosition(q.from.x, q.from.y, r, !1) && (s = r[0], m = r[1], t = r[0], u = r[1]);
|
|
if (c.getIndexOfPosition(q.to.x, q.to.y, r, !1)) {
|
|
if (null === s || r[0] < s) s = r[0];
|
|
if (null === t || r[0] > t) t = r[0];
|
|
if (null === m || r[1] < m) m = r[1];
|
|
if (null === u || r[1] > u) u = r[1]
|
|
}
|
|
if (null !== s) {
|
|
c.getRectMinMax(s, m, t, u, []);
|
|
for (q = s; q <= t; q++)
|
|
for (r = m; r <= u; r++) {
|
|
if (this.result._shouldStop) return;
|
|
c.getConvexTrianglePillar(q, r, !1);
|
|
l.pointToWorldFrame(j, e, c.pillarOffset, n);
|
|
this.intersectConvex(c.pillarConvex,
|
|
e, n, g, G);
|
|
if (this.result._shouldStop) return;
|
|
c.getConvexTrianglePillar(q, r, !0);
|
|
l.pointToWorldFrame(j, e, c.pillarOffset, n);
|
|
this.intersectConvex(c.pillarConvex, e, n, g, G)
|
|
}
|
|
}
|
|
};
|
|
d.prototype[q.types.HEIGHTFIELD] = d.prototype.intersectHeightfield;
|
|
var D = new f,
|
|
A = new f;
|
|
d.prototype.intersectSphere = function(c, d, e, j) {
|
|
d = this.from;
|
|
var f = this.to,
|
|
g = c.radius,
|
|
n = Math.pow(f.x - d.x, 2) + Math.pow(f.y - d.y, 2) + Math.pow(f.z - d.z, 2),
|
|
q = 2 * ((f.x - d.x) * (d.x - e.x) + (f.y - d.y) * (d.y - e.y) + (f.z - d.z) * (d.z - e.z)),
|
|
g = Math.pow(d.x - e.x, 2) + Math.pow(d.y - e.y,
|
|
2) + Math.pow(d.z - e.z, 2) - Math.pow(g, 2),
|
|
l = Math.pow(q, 2) - 4 * n * g;
|
|
0 > l || (0 === l ? (d.lerp(f, l, D), D.vsub(e, A), A.normalize(), this.reportIntersection(A, D, c, j, -1)) : (g = (-q - Math.sqrt(l)) / (2 * n), n = (-q + Math.sqrt(l)) / (2 * n), 0 <= g && 1 >= g && (d.lerp(f, g, D), D.vsub(e, A), A.normalize(), this.reportIntersection(A, D, c, j, -1)), !this.result._shouldStop && 0 <= n && 1 >= n && (d.lerp(f, n, D), D.vsub(e, A), A.normalize(), this.reportIntersection(A, D, c, j, -1))))
|
|
};
|
|
d.prototype[q.types.SPHERE] = d.prototype.intersectSphere;
|
|
var H = new f;
|
|
new f;
|
|
new f;
|
|
var O = new f;
|
|
d.prototype.intersectConvex = function(c, d, e, j, f) {
|
|
f = f && f.faceList || null;
|
|
for (var n = c.faces, q = c.vertices, l = c.faceNormals, r = this._direction, s = this.from, m = s.distanceTo(this.to), t = f ? f.length : n.length, u = this.result, y = 0; !u._shouldStop && y < t; y++) {
|
|
var z = f ? f[y] : y,
|
|
P = n[z],
|
|
J = l[z],
|
|
D = d,
|
|
F = e;
|
|
O.copy(q[P[0]]);
|
|
D.vmult(O, O);
|
|
O.vadd(F, O);
|
|
O.vsub(s, O);
|
|
D.vmult(J, H);
|
|
J = r.dot(H);
|
|
if (!(Math.abs(J) < this.precision) && (J = H.dot(O) / J, !(0 > J))) {
|
|
r.mult(J, x);
|
|
x.vadd(s, x);
|
|
C.copy(q[P[0]]);
|
|
D.vmult(C, C);
|
|
F.vadd(C, C);
|
|
for (J = 1; !u._shouldStop && J < P.length -
|
|
1; J++) {
|
|
B.copy(q[P[J]]);
|
|
E.copy(q[P[J + 1]]);
|
|
D.vmult(B, B);
|
|
D.vmult(E, E);
|
|
F.vadd(B, B);
|
|
F.vadd(E, E);
|
|
var A = x.distanceTo(s);
|
|
!g(x, C, B, E) && !g(x, B, C, E) || A > m || this.reportIntersection(H, x, c, j, z)
|
|
}
|
|
}
|
|
}
|
|
};
|
|
d.prototype[q.types.CONVEXPOLYHEDRON] = d.prototype.intersectConvex;
|
|
var K = new f,
|
|
S = new f,
|
|
J = new f,
|
|
Y = new f,
|
|
ca = new f,
|
|
F = new f;
|
|
new n;
|
|
var N = [],
|
|
da = new l;
|
|
d.prototype.intersectTrimesh = function(c, d, e, j) {
|
|
var f = c.indices,
|
|
n = this.from,
|
|
q = this.to,
|
|
r = this._direction;
|
|
da.position.copy(e);
|
|
da.quaternion.copy(d);
|
|
l.vectorToLocalFrame(e, d, r, S);
|
|
l.pointToLocalFrame(e, d, n, J);
|
|
l.pointToLocalFrame(e, d, q, Y);
|
|
n = J.distanceSquared(Y);
|
|
c.tree.rayQuery(this, da, N);
|
|
q = 0;
|
|
for (r = N.length; !this.result._shouldStop && q !== r; q++) {
|
|
var s = N[q];
|
|
c.getNormal(s, K);
|
|
c.getVertex(f[3 * s], C);
|
|
C.vsub(J, O);
|
|
var m = S.dot(K),
|
|
m = K.dot(O) / m;
|
|
0 > m || (S.scale(m, x), x.vadd(J, x), c.getVertex(f[3 * s + 1], B), c.getVertex(f[3 * s + 2], E), m = x.distanceSquared(J), !g(x, B, C, E) && !g(x, C, B, E) || m > n || (l.vectorToWorldFrame(d, K, ca), l.pointToWorldFrame(e, d, x, F), this.reportIntersection(ca, F, c, j, s)))
|
|
}
|
|
N.length = 0
|
|
};
|
|
d.prototype[q.types.TRIMESH] =
|
|
d.prototype.intersectTrimesh;
|
|
d.prototype.reportIntersection = function(c, e, j, f, g) {
|
|
var n = this.from,
|
|
q = this.to,
|
|
l = n.distanceTo(e),
|
|
r = this.result;
|
|
if (!(this.skipBackfaces && 0 < c.dot(this._direction))) switch (r.hitFaceIndex = "undefined" !== typeof g ? g : -1, this.mode) {
|
|
case d.ALL:
|
|
this.hasHit = !0;
|
|
r.set(n, q, c, e, j, f, l);
|
|
r.hasHit = !0;
|
|
this.callback(r);
|
|
break;
|
|
case d.CLOSEST:
|
|
if (l < r.distance || !r.hasHit) this.hasHit = !0, r.hasHit = !0, r.set(n, q, c, e, j, f, l);
|
|
break;
|
|
case d.ANY:
|
|
this.hasHit = !0, r.hasHit = !0, r.set(n, q, c, e, j, f, l), r._shouldStop = !0
|
|
}
|
|
};
|
|
var T = new f,
|
|
P = new f
|
|
}, {
|
|
"../collision/AABB": 3,
|
|
"../collision/RaycastResult": 10,
|
|
"../math/Quaternion": 28,
|
|
"../math/Transform": 29,
|
|
"../math/Vec3": 30,
|
|
"../shapes/Box": 37,
|
|
"../shapes/ConvexPolyhedron": 38,
|
|
"../shapes/Shape": 43
|
|
}],
|
|
10: [function(c, e) {
|
|
function d() {
|
|
this.rayFromWorld = new g;
|
|
this.rayToWorld = new g;
|
|
this.hitNormalWorld = new g;
|
|
this.hitPointWorld = new g;
|
|
this.hasHit = !1;
|
|
this.body = this.shape = null;
|
|
this.distance = this.hitFaceIndex = -1;
|
|
this._shouldStop = !1
|
|
}
|
|
var g = c("../math/Vec3");
|
|
e.exports = d;
|
|
d.prototype.reset = function() {
|
|
this.rayFromWorld.setZero();
|
|
this.rayToWorld.setZero();
|
|
this.hitNormalWorld.setZero();
|
|
this.hitPointWorld.setZero();
|
|
this.hasHit = !1;
|
|
this.body = this.shape = null;
|
|
this.distance = this.hitFaceIndex = -1;
|
|
this._shouldStop = !1
|
|
};
|
|
d.prototype.abort = function() {
|
|
this._shouldStop = !0
|
|
};
|
|
d.prototype.set = function(c, d, e, j, g, n, r) {
|
|
this.rayFromWorld.copy(c);
|
|
this.rayToWorld.copy(d);
|
|
this.hitNormalWorld.copy(e);
|
|
this.hitPointWorld.copy(j);
|
|
this.shape = g;
|
|
this.body = n;
|
|
this.distance = r
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30
|
|
}],
|
|
11: [function(c, e) {
|
|
function d(c) {
|
|
g.apply(this);
|
|
this.axisList = [];
|
|
this.world = null;
|
|
this.axisIndex = 0;
|
|
var d = this.axisList;
|
|
this._addBodyHandler = function(c) {
|
|
d.push(c.body)
|
|
};
|
|
this._removeBodyHandler = function(c) {
|
|
c = d.indexOf(c.body); - 1 !== c && d.splice(c, 1)
|
|
};
|
|
c && this.setWorld(c)
|
|
}
|
|
c("../shapes/Shape");
|
|
var g = c("../collision/Broadphase");
|
|
e.exports = d;
|
|
d.prototype = new g;
|
|
d.prototype.setWorld = function(c) {
|
|
for (var d = this.axisList.length = 0; d < c.bodies.length; d++) this.axisList.push(c.bodies[d]);
|
|
c.removeEventListener("addBody", this._addBodyHandler);
|
|
c.removeEventListener("removeBody", this._removeBodyHandler);
|
|
c.addEventListener("addBody", this._addBodyHandler);
|
|
c.addEventListener("removeBody", this._removeBodyHandler);
|
|
this.world = c;
|
|
this.dirty = !0
|
|
};
|
|
d.insertionSortX = function(c) {
|
|
for (var d = 1, e = c.length; d < e; d++) {
|
|
for (var j = c[d], g = d - 1; 0 <= g && !(c[g].aabb.lowerBound.x <= j.aabb.lowerBound.x); g--) c[g + 1] = c[g];
|
|
c[g + 1] = j
|
|
}
|
|
return c
|
|
};
|
|
d.insertionSortY = function(c) {
|
|
for (var d = 1, e = c.length; d < e; d++) {
|
|
for (var j = c[d], g = d - 1; 0 <= g && !(c[g].aabb.lowerBound.y <= j.aabb.lowerBound.y); g--) c[g + 1] = c[g];
|
|
c[g + 1] = j
|
|
}
|
|
return c
|
|
};
|
|
d.insertionSortZ = function(c) {
|
|
for (var d =
|
|
1, e = c.length; d < e; d++) {
|
|
for (var j = c[d], g = d - 1; 0 <= g && !(c[g].aabb.lowerBound.z <= j.aabb.lowerBound.z); g--) c[g + 1] = c[g];
|
|
c[g + 1] = j
|
|
}
|
|
return c
|
|
};
|
|
d.prototype.collisionPairs = function(c, e, g) {
|
|
c = this.axisList;
|
|
var j = c.length,
|
|
q = this.axisIndex,
|
|
n, r;
|
|
this.dirty && (this.sortList(), this.dirty = !1);
|
|
for (n = 0; n !== j; n++) {
|
|
var s = c[n];
|
|
for (r = n + 1; r < j; r++) {
|
|
var t = c[r];
|
|
if (this.needBroadphaseCollision(s, t)) {
|
|
if (!d.checkBounds(s, t, q)) break;
|
|
this.intersectionTest(s, t, e, g)
|
|
}
|
|
}
|
|
}
|
|
};
|
|
d.prototype.sortList = function() {
|
|
for (var c = this.axisList, e = this.axisIndex,
|
|
g = c.length, j = 0; j !== g; j++) {
|
|
var q = c[j];
|
|
q.aabbNeedsUpdate && q.computeAABB()
|
|
}
|
|
0 === e ? d.insertionSortX(c) : 1 === e ? d.insertionSortY(c) : 2 === e && d.insertionSortZ(c)
|
|
};
|
|
d.checkBounds = function(c, d, e) {
|
|
var j, g;
|
|
0 === e ? (j = c.position.x, g = d.position.x) : 1 === e ? (j = c.position.y, g = d.position.y) : 2 === e && (j = c.position.z, g = d.position.z);
|
|
return g - d.boundingRadius < j + c.boundingRadius
|
|
};
|
|
d.prototype.autoDetectAxis = function() {
|
|
for (var c = 0, d = 0, e = 0, j = 0, g = 0, n = 0, r = this.axisList, s = r.length, t = 1 / s, u = 0; u !== s; u++) var y = r[u],
|
|
z = y.position.x,
|
|
c = c + z,
|
|
d =
|
|
d + z * z,
|
|
z = y.position.y,
|
|
e = e + z,
|
|
j = j + z * z,
|
|
y = y.position.z,
|
|
g = g + y,
|
|
n = n + y * y;
|
|
c = d - c * c * t;
|
|
e = j - e * e * t;
|
|
g = n - g * g * t;
|
|
this.axisIndex = c > e ? c > g ? 0 : 2 : e > g ? 1 : 2
|
|
};
|
|
d.prototype.aabbQuery = function(c, d, e) {
|
|
e = e || [];
|
|
this.dirty && (this.sortList(), this.dirty = !1);
|
|
c = this.axisList;
|
|
for (var j = 0; j < c.length; j++) {
|
|
var g = c[j];
|
|
g.aabbNeedsUpdate && g.computeAABB();
|
|
g.aabb.overlaps(d) && e.push(g)
|
|
}
|
|
return e
|
|
}
|
|
}, {
|
|
"../collision/Broadphase": 5,
|
|
"../shapes/Shape": 43
|
|
}],
|
|
12: [function(c, e) {
|
|
function d(c, d, e) {
|
|
e = e || {};
|
|
var r = "undefined" !== typeof e.maxForce ? e.maxForce : 1E6,
|
|
s =
|
|
e.pivotA ? e.pivotA.clone() : new l,
|
|
t = e.pivotB ? e.pivotB.clone() : new l;
|
|
this.axisA = e.axisA ? e.axisA.clone() : new l;
|
|
this.axisB = e.axisB ? e.axisB.clone() : new l;
|
|
g.call(this, c, s, d, t, r);
|
|
this.collideConnected = !!e.collideConnected;
|
|
this.angle = "undefined" !== typeof e.angle ? e.angle : 0;
|
|
s = this.coneEquation = new f(c, d, e);
|
|
c = this.twistEquation = new m(c, d, e);
|
|
this.twistAngle = "undefined" !== typeof e.twistAngle ? e.twistAngle : 0;
|
|
s.maxForce = 0;
|
|
s.minForce = -r;
|
|
c.maxForce = 0;
|
|
c.minForce = -r;
|
|
this.equations.push(s, c)
|
|
}
|
|
e.exports = d;
|
|
c("./Constraint");
|
|
var g = c("./PointToPointConstraint"),
|
|
f = c("../equations/ConeEquation"),
|
|
m = c("../equations/RotationalEquation");
|
|
c("../equations/ContactEquation");
|
|
var l = c("../math/Vec3");
|
|
d.prototype = new g;
|
|
d.constructor = d;
|
|
new l;
|
|
new l;
|
|
d.prototype.update = function() {
|
|
var c = this.bodyA,
|
|
d = this.bodyB,
|
|
e = this.coneEquation,
|
|
f = this.twistEquation;
|
|
g.prototype.update.call(this);
|
|
c.vectorToWorldFrame(this.axisA, e.axisA);
|
|
d.vectorToWorldFrame(this.axisB, e.axisB);
|
|
this.axisA.tangents(f.axisA, f.axisA);
|
|
c.vectorToWorldFrame(f.axisA, f.axisA);
|
|
this.axisB.tangents(f.axisB,
|
|
f.axisB);
|
|
d.vectorToWorldFrame(f.axisB, f.axisB);
|
|
e.angle = this.angle;
|
|
f.maxAngle = this.twistAngle
|
|
}
|
|
}, {
|
|
"../equations/ConeEquation": 18,
|
|
"../equations/ContactEquation": 19,
|
|
"../equations/RotationalEquation": 22,
|
|
"../math/Vec3": 30,
|
|
"./Constraint": 13,
|
|
"./PointToPointConstraint": 17
|
|
}],
|
|
13: [function(c, e) {
|
|
function d(c, e, l) {
|
|
l = g.defaults(l, {
|
|
collideConnected: !0,
|
|
wakeUpBodies: !0
|
|
});
|
|
this.equations = [];
|
|
this.bodyA = c;
|
|
this.bodyB = e;
|
|
this.id = d.idCounter++;
|
|
this.collideConnected = l.collideConnected;
|
|
l.wakeUpBodies && (c && c.wakeUp(), e && e.wakeUp())
|
|
}
|
|
e.exports = d;
|
|
var g = c("../utils/Utils");
|
|
d.prototype.update = function() {
|
|
throw Error("method update() not implmemented in this Constraint subclass!");
|
|
};
|
|
d.prototype.enable = function() {
|
|
for (var c = this.equations, d = 0; d < c.length; d++) c[d].enabled = !0
|
|
};
|
|
d.prototype.disable = function() {
|
|
for (var c = this.equations, d = 0; d < c.length; d++) c[d].enabled = !1
|
|
};
|
|
d.idCounter = 0
|
|
}, {
|
|
"../utils/Utils": 53
|
|
}],
|
|
14: [function(c, e) {
|
|
function d(c, d, e, q) {
|
|
g.call(this, c, d);
|
|
"undefined" === typeof e && (e = c.position.distanceTo(d.position));
|
|
"undefined" === typeof q &&
|
|
(q = 1E6);
|
|
this.distance = e;
|
|
c = this.distanceEquation = new f(c, d);
|
|
this.equations.push(c);
|
|
c.minForce = -q;
|
|
c.maxForce = q
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Constraint"),
|
|
f = c("../equations/ContactEquation");
|
|
d.prototype = new g;
|
|
d.prototype.update = function() {
|
|
var c = this.distanceEquation,
|
|
d = 0.5 * this.distance,
|
|
e = c.ni;
|
|
this.bodyB.position.vsub(this.bodyA.position, e);
|
|
e.normalize();
|
|
e.mult(d, c.ri);
|
|
e.mult(-d, c.rj)
|
|
}
|
|
}, {
|
|
"../equations/ContactEquation": 19,
|
|
"./Constraint": 13
|
|
}],
|
|
15: [function(c, e) {
|
|
function d(c, d, e) {
|
|
e = e || {};
|
|
var j = "undefined" !== typeof e.maxForce ?
|
|
e.maxForce : 1E6,
|
|
q = e.pivotA ? e.pivotA.clone() : new l,
|
|
y = e.pivotB ? e.pivotB.clone() : new l;
|
|
g.call(this, c, q, d, y, j);
|
|
(this.axisA = e.axisA ? e.axisA.clone() : new l(1, 0, 0)).normalize();
|
|
(this.axisB = e.axisB ? e.axisB.clone() : new l(1, 0, 0)).normalize();
|
|
q = this.rotationalEquation1 = new f(c, d, e);
|
|
e = this.rotationalEquation2 = new f(c, d, e);
|
|
c = this.motorEquation = new m(c, d, j);
|
|
c.enabled = !1;
|
|
this.equations.push(q, e, c)
|
|
}
|
|
e.exports = d;
|
|
c("./Constraint");
|
|
var g = c("./PointToPointConstraint"),
|
|
f = c("../equations/RotationalEquation"),
|
|
m = c("../equations/RotationalMotorEquation");
|
|
c("../equations/ContactEquation");
|
|
var l = c("../math/Vec3");
|
|
d.prototype = new g;
|
|
d.constructor = d;
|
|
d.prototype.enableMotor = function() {
|
|
this.motorEquation.enabled = !0
|
|
};
|
|
d.prototype.disableMotor = function() {
|
|
this.motorEquation.enabled = !1
|
|
};
|
|
d.prototype.setMotorSpeed = function(c) {
|
|
this.motorEquation.targetVelocity = c
|
|
};
|
|
d.prototype.setMotorMaxForce = function(c) {
|
|
this.motorEquation.maxForce = c;
|
|
this.motorEquation.minForce = -c
|
|
};
|
|
var j = new l,
|
|
q = new l;
|
|
d.prototype.update = function() {
|
|
var c = this.bodyA,
|
|
d = this.bodyB,
|
|
e = this.motorEquation,
|
|
f = this.rotationalEquation1,
|
|
l = this.rotationalEquation2,
|
|
m = this.axisA,
|
|
z = this.axisB;
|
|
g.prototype.update.call(this);
|
|
c.quaternion.vmult(m, j);
|
|
d.quaternion.vmult(z, q);
|
|
j.tangents(f.axisA, l.axisA);
|
|
f.axisB.copy(q);
|
|
l.axisB.copy(q);
|
|
this.motorEquation.enabled && (c.quaternion.vmult(this.axisA, e.axisA), d.quaternion.vmult(this.axisB, e.axisB))
|
|
}
|
|
}, {
|
|
"../equations/ContactEquation": 19,
|
|
"../equations/RotationalEquation": 22,
|
|
"../equations/RotationalMotorEquation": 23,
|
|
"../math/Vec3": 30,
|
|
"./Constraint": 13,
|
|
"./PointToPointConstraint": 17
|
|
}],
|
|
16: [function(c, e) {
|
|
function d(c, d, e) {
|
|
e = e || {};
|
|
var n = "undefined" !== typeof e.maxForce ? e.maxForce : 1E6,
|
|
r = new m,
|
|
s = new m,
|
|
t = new m;
|
|
c.position.vadd(d.position, t);
|
|
t.scale(0.5, t);
|
|
d.pointToLocalFrame(t, s);
|
|
c.pointToLocalFrame(t, r);
|
|
g.call(this, c, r, d, s, n);
|
|
n = this.rotationalEquation1 = new f(c, d, e);
|
|
r = this.rotationalEquation2 = new f(c, d, e);
|
|
c = this.rotationalEquation3 = new f(c, d, e);
|
|
this.equations.push(n, r, c)
|
|
}
|
|
e.exports = d;
|
|
c("./Constraint");
|
|
var g = c("./PointToPointConstraint"),
|
|
f = c("../equations/RotationalEquation");
|
|
c("../equations/RotationalMotorEquation");
|
|
c("../equations/ContactEquation");
|
|
var m = c("../math/Vec3");
|
|
d.prototype = new g;
|
|
d.constructor = d;
|
|
new m;
|
|
new m;
|
|
d.prototype.update = function() {
|
|
var c = this.bodyA,
|
|
d = this.bodyB,
|
|
e = this.rotationalEquation1,
|
|
f = this.rotationalEquation2,
|
|
r = this.rotationalEquation3;
|
|
g.prototype.update.call(this);
|
|
c.vectorToWorldFrame(m.UNIT_X, e.axisA);
|
|
d.vectorToWorldFrame(m.UNIT_Y, e.axisB);
|
|
c.vectorToWorldFrame(m.UNIT_Y, f.axisA);
|
|
d.vectorToWorldFrame(m.UNIT_Z, f.axisB);
|
|
c.vectorToWorldFrame(m.UNIT_Z, r.axisA);
|
|
d.vectorToWorldFrame(m.UNIT_X, r.axisB)
|
|
}
|
|
},
|
|
{
|
|
"../equations/ContactEquation": 19,
|
|
"../equations/RotationalEquation": 22,
|
|
"../equations/RotationalMotorEquation": 23,
|
|
"../math/Vec3": 30,
|
|
"./Constraint": 13,
|
|
"./PointToPointConstraint": 17
|
|
}
|
|
],
|
|
17: [function(c, e) {
|
|
function d(c, d, e, n, r) {
|
|
g.call(this, c, e);
|
|
r = "undefined" !== typeof r ? r : 1E6;
|
|
this.pivotA = d ? d.clone() : new m;
|
|
this.pivotB = n ? n.clone() : new m;
|
|
d = this.equationX = new f(c, e);
|
|
n = this.equationY = new f(c, e);
|
|
c = this.equationZ = new f(c, e);
|
|
this.equations.push(d, n, c);
|
|
d.minForce = n.minForce = c.minForce = -r;
|
|
d.maxForce = n.maxForce = c.maxForce =
|
|
r;
|
|
d.ni.set(1, 0, 0);
|
|
n.ni.set(0, 1, 0);
|
|
c.ni.set(0, 0, 1)
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Constraint"),
|
|
f = c("../equations/ContactEquation"),
|
|
m = c("../math/Vec3");
|
|
d.prototype = new g;
|
|
d.prototype.update = function() {
|
|
var c = this.bodyB,
|
|
d = this.equationX,
|
|
e = this.equationY,
|
|
f = this.equationZ;
|
|
this.bodyA.quaternion.vmult(this.pivotA, d.ri);
|
|
c.quaternion.vmult(this.pivotB, d.rj);
|
|
e.ri.copy(d.ri);
|
|
e.rj.copy(d.rj);
|
|
f.ri.copy(d.ri);
|
|
f.rj.copy(d.rj)
|
|
}
|
|
}, {
|
|
"../equations/ContactEquation": 19,
|
|
"../math/Vec3": 30,
|
|
"./Constraint": 13
|
|
}],
|
|
18: [function(c, e) {
|
|
function d(c,
|
|
d, e) {
|
|
e = e || {};
|
|
var l = "undefined" !== typeof e.maxForce ? e.maxForce : 1E6;
|
|
f.call(this, c, d, -l, l);
|
|
this.axisA = e.axisA ? e.axisA.clone() : new g(1, 0, 0);
|
|
this.axisB = e.axisB ? e.axisB.clone() : new g(0, 1, 0);
|
|
this.angle = "undefined" !== typeof e.angle ? e.angle : 0
|
|
}
|
|
e.exports = d;
|
|
var g = c("../math/Vec3");
|
|
c("../math/Mat3");
|
|
var f = c("./Equation");
|
|
d.prototype = new f;
|
|
d.prototype.constructor = d;
|
|
var m = new g,
|
|
l = new g;
|
|
d.prototype.computeB = function(c) {
|
|
var d = this.a,
|
|
e = this.b,
|
|
f = this.axisA,
|
|
g = this.axisB,
|
|
t = this.jacobianElementA,
|
|
u = this.jacobianElementB;
|
|
f.cross(g, m);
|
|
g.cross(f, l);
|
|
t.rotational.copy(l);
|
|
u.rotational.copy(m);
|
|
f = Math.cos(this.angle) - f.dot(g);
|
|
g = this.computeGW();
|
|
t = this.computeGiMf();
|
|
return -f * d - g * e - c * t
|
|
}
|
|
}, {
|
|
"../math/Mat3": 27,
|
|
"../math/Vec3": 30,
|
|
"./Equation": 20
|
|
}],
|
|
19: [function(c, e) {
|
|
function d(c, d, e) {
|
|
g.call(this, c, d, 0, "undefined" !== typeof e ? e : 1E6);
|
|
this.restitution = 0;
|
|
this.ri = new f;
|
|
this.rj = new f;
|
|
this.ni = new f
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Equation"),
|
|
f = c("../math/Vec3");
|
|
c("../math/Mat3");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
var m = new f,
|
|
l = new f,
|
|
j = new f;
|
|
d.prototype.computeB = function(c) {
|
|
var d = this.a,
|
|
e = this.b,
|
|
f = this.bi,
|
|
g = this.bj,
|
|
n = this.ri,
|
|
q = this.rj,
|
|
r = f.velocity,
|
|
s = f.angularVelocity,
|
|
t = g.velocity,
|
|
H = g.angularVelocity,
|
|
O = this.jacobianElementA,
|
|
K = this.jacobianElementB,
|
|
S = this.ni;
|
|
n.cross(S, m);
|
|
q.cross(S, l);
|
|
S.negate(O.spatial);
|
|
m.negate(O.rotational);
|
|
K.spatial.copy(S);
|
|
K.rotational.copy(l);
|
|
j.copy(g.position);
|
|
j.vadd(q, j);
|
|
j.vsub(f.position, j);
|
|
j.vsub(n, j);
|
|
f = S.dot(j);
|
|
g = this.restitution + 1;
|
|
r = g * t.dot(S) - g * r.dot(S) + H.dot(l) - s.dot(m);
|
|
s = this.computeGiMf();
|
|
return -f * d - r * e -
|
|
c * s
|
|
};
|
|
var q = new f,
|
|
n = new f,
|
|
r = new f,
|
|
s = new f,
|
|
t = new f;
|
|
d.prototype.getImpactVelocityAlongNormal = function() {
|
|
this.bi.position.vadd(this.ri, r);
|
|
this.bj.position.vadd(this.rj, s);
|
|
this.bi.getVelocityAtWorldPoint(r, q);
|
|
this.bj.getVelocityAtWorldPoint(s, n);
|
|
q.vsub(n, t);
|
|
return this.ni.dot(t)
|
|
}
|
|
}, {
|
|
"../math/Mat3": 27,
|
|
"../math/Vec3": 30,
|
|
"./Equation": 20
|
|
}],
|
|
20: [function(c, e) {
|
|
function d(c, e, j, f) {
|
|
this.id = d.id++;
|
|
this.minForce = "undefined" === typeof j ? -1E6 : j;
|
|
this.maxForce = "undefined" === typeof f ? 1E6 : f;
|
|
this.bi = c;
|
|
this.bj = e;
|
|
this.eps =
|
|
this.b = this.a = 0;
|
|
this.jacobianElementA = new g;
|
|
this.jacobianElementB = new g;
|
|
this.enabled = !0;
|
|
this.setSpookParams(1E7, 4, 1 / 60)
|
|
}
|
|
e.exports = d;
|
|
var g = c("../math/JacobianElement"),
|
|
f = c("../math/Vec3");
|
|
d.prototype.constructor = d;
|
|
d.id = 0;
|
|
d.prototype.setSpookParams = function(c, d, e) {
|
|
this.a = 4 / (e * (1 + 4 * d));
|
|
this.b = 4 * d / (1 + 4 * d);
|
|
this.eps = 4 / (e * e * c * (1 + 4 * d))
|
|
};
|
|
d.prototype.computeB = function(c, d, e) {
|
|
var j = this.computeGW(),
|
|
f = this.computeGq(),
|
|
g = this.computeGiMf();
|
|
return -f * c - j * d - g * e
|
|
};
|
|
d.prototype.computeGq = function() {
|
|
var c = this.jacobianElementB,
|
|
d = this.bj.position;
|
|
return this.jacobianElementA.spatial.dot(this.bi.position) + c.spatial.dot(d)
|
|
};
|
|
var m = new f;
|
|
d.prototype.computeGW = function() {
|
|
var c = this.jacobianElementB,
|
|
d = this.bi,
|
|
e = this.bj,
|
|
j = e.velocity,
|
|
e = e.angularVelocity || m;
|
|
return this.jacobianElementA.multiplyVectors(d.velocity, d.angularVelocity || m) + c.multiplyVectors(j, e)
|
|
};
|
|
d.prototype.computeGWlambda = function() {
|
|
var c = this.jacobianElementB,
|
|
d = this.bi,
|
|
e = this.bj,
|
|
j = e.vlambda,
|
|
e = e.wlambda || m;
|
|
return this.jacobianElementA.multiplyVectors(d.vlambda, d.wlambda ||
|
|
m) + c.multiplyVectors(j, e)
|
|
};
|
|
var l = new f,
|
|
j = new f,
|
|
q = new f,
|
|
n = new f;
|
|
d.prototype.computeGiMf = function() {
|
|
var c = this.jacobianElementA,
|
|
d = this.jacobianElementB,
|
|
e = this.bi,
|
|
f = this.bj,
|
|
g = e.force,
|
|
r = e.torque,
|
|
s = f.force,
|
|
m = f.torque,
|
|
G = e.invMassSolve,
|
|
D = f.invMassSolve;
|
|
e.invInertiaWorldSolve ? e.invInertiaWorldSolve.vmult(r, q) : q.set(0, 0, 0);
|
|
f.invInertiaWorldSolve ? f.invInertiaWorldSolve.vmult(m, n) : n.set(0, 0, 0);
|
|
g.mult(G, l);
|
|
s.mult(D, j);
|
|
return c.multiplyVectors(l, q) + d.multiplyVectors(j, n)
|
|
};
|
|
var r = new f;
|
|
d.prototype.computeGiMGt =
|
|
function() {
|
|
var c = this.jacobianElementA,
|
|
d = this.jacobianElementB,
|
|
e = this.bi,
|
|
j = this.bj,
|
|
f = e.invInertiaWorldSolve,
|
|
g = j.invInertiaWorldSolve,
|
|
e = e.invMassSolve + j.invMassSolve;
|
|
f && (f.vmult(c.rotational, r), e += r.dot(c.rotational));
|
|
g && (g.vmult(d.rotational, r), e += r.dot(d.rotational));
|
|
return e
|
|
};
|
|
var s = new f;
|
|
new f;
|
|
new f;
|
|
new f;
|
|
new f;
|
|
new f;
|
|
d.prototype.addToWlambda = function(c) {
|
|
var d = this.jacobianElementA,
|
|
e = this.jacobianElementB,
|
|
j = this.bi,
|
|
f = this.bj;
|
|
d.spatial.mult(j.invMassSolve * c, s);
|
|
j.vlambda.vadd(s, j.vlambda);
|
|
e.spatial.mult(f.invMassSolve *
|
|
c, s);
|
|
f.vlambda.vadd(s, f.vlambda);
|
|
j.invInertiaWorldSolve && (j.invInertiaWorldSolve.vmult(d.rotational, s), s.mult(c, s), j.wlambda.vadd(s, j.wlambda));
|
|
f.invInertiaWorldSolve && (f.invInertiaWorldSolve.vmult(e.rotational, s), s.mult(c, s), f.wlambda.vadd(s, f.wlambda))
|
|
};
|
|
d.prototype.computeC = function() {
|
|
return this.computeGiMGt() + this.eps
|
|
}
|
|
}, {
|
|
"../math/JacobianElement": 26,
|
|
"../math/Vec3": 30
|
|
}],
|
|
21: [function(c, e) {
|
|
function d(c, d, e) {
|
|
g.call(this, c, d, -e, e);
|
|
this.ri = new f;
|
|
this.rj = new f;
|
|
this.t = new f
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Equation"),
|
|
f = c("../math/Vec3");
|
|
c("../math/Mat3");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
var m = new f,
|
|
l = new f;
|
|
d.prototype.computeB = function(c) {
|
|
var d = this.b,
|
|
e = this.rj,
|
|
f = this.t;
|
|
this.ri.cross(f, m);
|
|
e.cross(f, l);
|
|
var e = this.jacobianElementA,
|
|
g = this.jacobianElementB;
|
|
f.negate(e.spatial);
|
|
m.negate(e.rotational);
|
|
g.spatial.copy(f);
|
|
g.rotational.copy(l);
|
|
f = this.computeGW();
|
|
e = this.computeGiMf();
|
|
return -f * d - c * e
|
|
}
|
|
}, {
|
|
"../math/Mat3": 27,
|
|
"../math/Vec3": 30,
|
|
"./Equation": 20
|
|
}],
|
|
22: [function(c, e) {
|
|
function d(c, d, e) {
|
|
e = e || {};
|
|
var l = "undefined" !==
|
|
typeof e.maxForce ? e.maxForce : 1E6;
|
|
f.call(this, c, d, -l, l);
|
|
this.axisA = e.axisA ? e.axisA.clone() : new g(1, 0, 0);
|
|
this.axisB = e.axisB ? e.axisB.clone() : new g(0, 1, 0);
|
|
this.maxAngle = Math.PI / 2
|
|
}
|
|
e.exports = d;
|
|
var g = c("../math/Vec3");
|
|
c("../math/Mat3");
|
|
var f = c("./Equation");
|
|
d.prototype = new f;
|
|
d.prototype.constructor = d;
|
|
var m = new g,
|
|
l = new g;
|
|
d.prototype.computeB = function(c) {
|
|
var d = this.a,
|
|
e = this.b,
|
|
f = this.axisA,
|
|
g = this.axisB,
|
|
t = this.jacobianElementA,
|
|
u = this.jacobianElementB;
|
|
f.cross(g, m);
|
|
g.cross(f, l);
|
|
t.rotational.copy(l);
|
|
u.rotational.copy(m);
|
|
f = Math.cos(this.maxAngle) - f.dot(g);
|
|
g = this.computeGW();
|
|
t = this.computeGiMf();
|
|
return -f * d - g * e - c * t
|
|
}
|
|
}, {
|
|
"../math/Mat3": 27,
|
|
"../math/Vec3": 30,
|
|
"./Equation": 20
|
|
}],
|
|
23: [function(c, e) {
|
|
function d(c, d, e) {
|
|
e = "undefined" !== typeof e ? e : 1E6;
|
|
f.call(this, c, d, -e, e);
|
|
this.axisA = new g;
|
|
this.axisB = new g;
|
|
this.targetVelocity = 0
|
|
}
|
|
e.exports = d;
|
|
var g = c("../math/Vec3");
|
|
c("../math/Mat3");
|
|
var f = c("./Equation");
|
|
d.prototype = new f;
|
|
d.prototype.constructor = d;
|
|
d.prototype.computeB = function(c) {
|
|
var d = this.b,
|
|
e = this.axisB,
|
|
f = this.jacobianElementB;
|
|
this.jacobianElementA.rotational.copy(this.axisA);
|
|
e.negate(f.rotational);
|
|
e = this.computeGW() - this.targetVelocity;
|
|
f = this.computeGiMf();
|
|
return -e * d - c * f
|
|
}
|
|
}, {
|
|
"../math/Mat3": 27,
|
|
"../math/Vec3": 30,
|
|
"./Equation": 20
|
|
}],
|
|
24: [function(c, e) {
|
|
function d(c, e, l) {
|
|
l = g.defaults(l, {
|
|
friction: 0.3,
|
|
restitution: 0.3,
|
|
contactEquationStiffness: 1E7,
|
|
contactEquationRelaxation: 3,
|
|
frictionEquationStiffness: 1E7,
|
|
frictionEquationRelaxation: 3
|
|
});
|
|
this.id = d.idCounter++;
|
|
this.materials = [c, e];
|
|
this.friction = l.friction;
|
|
this.restitution = l.restitution;
|
|
this.contactEquationStiffness = l.contactEquationStiffness;
|
|
this.contactEquationRelaxation = l.contactEquationRelaxation;
|
|
this.frictionEquationStiffness = l.frictionEquationStiffness;
|
|
this.frictionEquationRelaxation = l.frictionEquationRelaxation
|
|
}
|
|
var g = c("../utils/Utils");
|
|
e.exports = d;
|
|
d.idCounter = 0
|
|
}, {
|
|
"../utils/Utils": 53
|
|
}],
|
|
25: [function(c, e) {
|
|
function d(c) {
|
|
var e = "";
|
|
c = c || {};
|
|
"string" === typeof c ? (e = c, c = {}) : "object" === typeof c && (e = "");
|
|
this.name = e;
|
|
this.id = d.idCounter++;
|
|
this.friction = "undefined" !== typeof c.friction ? c.friction : -1;
|
|
this.restitution = "undefined" !== typeof c.restitution ?
|
|
c.restitution : -1
|
|
}
|
|
e.exports = d;
|
|
d.idCounter = 0
|
|
}, {}],
|
|
26: [function(c, e) {
|
|
function d() {
|
|
this.spatial = new g;
|
|
this.rotational = new g
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Vec3");
|
|
d.prototype.multiplyElement = function(c) {
|
|
return c.spatial.dot(this.spatial) + c.rotational.dot(this.rotational)
|
|
};
|
|
d.prototype.multiplyVectors = function(c, d) {
|
|
return c.dot(this.spatial) + d.dot(this.rotational)
|
|
}
|
|
}, {
|
|
"./Vec3": 30
|
|
}],
|
|
27: [function(c, e) {
|
|
function d(c) {
|
|
this.elements = c ? c : [0, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Vec3");
|
|
d.prototype.identity = function() {
|
|
var c =
|
|
this.elements;
|
|
c[0] = 1;
|
|
c[1] = 0;
|
|
c[2] = 0;
|
|
c[3] = 0;
|
|
c[4] = 1;
|
|
c[5] = 0;
|
|
c[6] = 0;
|
|
c[7] = 0;
|
|
c[8] = 1
|
|
};
|
|
d.prototype.setZero = function() {
|
|
var c = this.elements;
|
|
c[0] = 0;
|
|
c[1] = 0;
|
|
c[2] = 0;
|
|
c[3] = 0;
|
|
c[4] = 0;
|
|
c[5] = 0;
|
|
c[6] = 0;
|
|
c[7] = 0;
|
|
c[8] = 0
|
|
};
|
|
d.prototype.setTrace = function(c) {
|
|
var d = this.elements;
|
|
d[0] = c.x;
|
|
d[4] = c.y;
|
|
d[8] = c.z
|
|
};
|
|
d.prototype.getTrace = function(c) {
|
|
c = c || new g;
|
|
var d = this.elements;
|
|
c.x = d[0];
|
|
c.y = d[4];
|
|
c.z = d[8]
|
|
};
|
|
d.prototype.vmult = function(c, d) {
|
|
d = d || new g;
|
|
var e = this.elements,
|
|
j = c.x,
|
|
q = c.y,
|
|
n = c.z;
|
|
d.x = e[0] * j + e[1] * q + e[2] * n;
|
|
d.y = e[3] * j + e[4] * q + e[5] * n;
|
|
d.z =
|
|
e[6] * j + e[7] * q + e[8] * n;
|
|
return d
|
|
};
|
|
d.prototype.smult = function(c) {
|
|
for (var d = 0; d < this.elements.length; d++) this.elements[d] *= c
|
|
};
|
|
d.prototype.mmult = function(c, e) {
|
|
for (var g = e || new d, j = 0; 3 > j; j++)
|
|
for (var q = 0; 3 > q; q++) {
|
|
for (var n = 0, r = 0; 3 > r; r++) n += c.elements[j + 3 * r] * this.elements[r + 3 * q];
|
|
g.elements[j + 3 * q] = n
|
|
}
|
|
return g
|
|
};
|
|
d.prototype.scale = function(c, e) {
|
|
e = e || new d;
|
|
for (var g = this.elements, j = e.elements, q = 0; 3 !== q; q++) j[3 * q + 0] = c.x * g[3 * q + 0], j[3 * q + 1] = c.y * g[3 * q + 1], j[3 * q + 2] = c.z * g[3 * q + 2];
|
|
return e
|
|
};
|
|
d.prototype.solve = function(c, d) {
|
|
d =
|
|
d || new g;
|
|
for (var e = [], j = 0; 12 > j; j++) e.push(0);
|
|
for (var q, j = 0; 3 > j; j++)
|
|
for (q = 0; 3 > q; q++) e[j + 4 * q] = this.elements[j + 3 * q];
|
|
e[3] = c.x;
|
|
e[7] = c.y;
|
|
e[11] = c.z;
|
|
var n = 3,
|
|
r = n,
|
|
s, t;
|
|
do {
|
|
j = r - n;
|
|
if (0 === e[j + 4 * j])
|
|
for (q = j + 1; q < r; q++)
|
|
if (0 !== e[j + 4 * q]) {
|
|
s = 4;
|
|
do t = 4 - s, e[t + 4 * j] += e[t + 4 * q]; while (--s);
|
|
break
|
|
} if (0 !== e[j + 4 * j])
|
|
for (q = j + 1; q < r; q++) {
|
|
var u = e[j + 4 * q] / e[j + 4 * j];
|
|
s = 4;
|
|
do t = 4 - s, e[t + 4 * q] = t <= j ? 0 : e[t + 4 * q] - e[t + 4 * j] * u; while (--s)
|
|
}
|
|
} while (--n);
|
|
d.z = e[11] / e[10];
|
|
d.y = (e[7] - e[6] * d.z) / e[5];
|
|
d.x = (e[3] - e[2] * d.z - e[1] * d.y) / e[0];
|
|
if (isNaN(d.x) || isNaN(d.y) || isNaN(d.z) ||
|
|
Infinity === d.x || Infinity === d.y || Infinity === d.z) throw "Could not solve equation! Got x=[" + d.toString() + "], b=[" + c.toString() + "], A=[" + this.toString() + "]";
|
|
return d
|
|
};
|
|
d.prototype.e = function(c, d, e) {
|
|
if (void 0 === e) return this.elements[d + 3 * c];
|
|
this.elements[d + 3 * c] = e
|
|
};
|
|
d.prototype.copy = function(c) {
|
|
for (var d = 0; d < c.elements.length; d++) this.elements[d] = c.elements[d];
|
|
return this
|
|
};
|
|
d.prototype.toString = function() {
|
|
for (var c = "", d = 0; 9 > d; d++) c += this.elements[d] + ",";
|
|
return c
|
|
};
|
|
d.prototype.reverse = function(c) {
|
|
c = c || new d;
|
|
for (var e = [], g = 0; 18 > g; g++) e.push(0);
|
|
for (var j, g = 0; 3 > g; g++)
|
|
for (j = 0; 3 > j; j++) e[g + 6 * j] = this.elements[g + 3 * j];
|
|
e[3] = 1;
|
|
e[9] = 0;
|
|
e[15] = 0;
|
|
e[4] = 0;
|
|
e[10] = 1;
|
|
e[16] = 0;
|
|
e[5] = 0;
|
|
e[11] = 0;
|
|
e[17] = 1;
|
|
var q = 3,
|
|
n = q,
|
|
r, s;
|
|
do {
|
|
g = n - q;
|
|
if (0 === e[g + 6 * g])
|
|
for (j = g + 1; j < n; j++)
|
|
if (0 !== e[g + 6 * j]) {
|
|
r = 6;
|
|
do s = 6 - r, e[s + 6 * g] += e[s + 6 * j]; while (--r);
|
|
break
|
|
} if (0 !== e[g + 6 * g])
|
|
for (j = g + 1; j < n; j++) {
|
|
var t = e[g + 6 * j] / e[g + 6 * g];
|
|
r = 6;
|
|
do s = 6 - r, e[s + 6 * j] = s <= g ? 0 : e[s + 6 * j] - e[s + 6 * g] * t; while (--r)
|
|
}
|
|
} while (--q);
|
|
g = 2;
|
|
do {
|
|
j = g - 1;
|
|
do {
|
|
t = e[g + 6 * j] / e[g + 6 * g];
|
|
r = 6;
|
|
do s = 6 - r, e[s + 6 * j] -= e[s + 6 * g] * t; while (--r)
|
|
} while (j--)
|
|
} while (--g);
|
|
g = 2;
|
|
do {
|
|
t = 1 / e[g + 6 * g];
|
|
r = 6;
|
|
do s = 6 - r, e[s + 6 * g] *= t; while (--r)
|
|
} while (g--);
|
|
g = 2;
|
|
do {
|
|
j = 2;
|
|
do {
|
|
s = e[3 + j + 6 * g];
|
|
if (isNaN(s) || Infinity === s) throw "Could not reverse! A=[" + this.toString() + "]";
|
|
c.e(g, j, s)
|
|
} while (j--)
|
|
} while (g--);
|
|
return c
|
|
};
|
|
d.prototype.setRotationFromQuaternion = function(c) {
|
|
var d = c.x,
|
|
e = c.y,
|
|
j = c.z,
|
|
g = c.w,
|
|
n = d + d,
|
|
r = e + e,
|
|
s = j + j;
|
|
c = d * n;
|
|
var t = d * r,
|
|
d = d * s,
|
|
u = e * r,
|
|
e = e * s,
|
|
j = j * s,
|
|
n = g * n,
|
|
r = g * r,
|
|
g = g * s,
|
|
s = this.elements;
|
|
s[0] = 1 - (u + j);
|
|
s[1] = t - g;
|
|
s[2] = d + r;
|
|
s[3] = t + g;
|
|
s[4] = 1 - (c + j);
|
|
s[5] = e - n;
|
|
s[6] = d - r;
|
|
s[7] = e + n;
|
|
s[8] = 1 - (c + u);
|
|
return this
|
|
};
|
|
d.prototype.transpose =
|
|
function(c) {
|
|
c = c || new d;
|
|
for (var e = c.elements, g = this.elements, j = 0; 3 !== j; j++)
|
|
for (var q = 0; 3 !== q; q++) e[3 * j + q] = g[3 * q + j];
|
|
return c
|
|
}
|
|
}, {
|
|
"./Vec3": 30
|
|
}],
|
|
28: [function(c, e) {
|
|
function d(c, d, e, j) {
|
|
this.x = void 0 !== c ? c : 0;
|
|
this.y = void 0 !== d ? d : 0;
|
|
this.z = void 0 !== e ? e : 0;
|
|
this.w = void 0 !== j ? j : 1
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Vec3");
|
|
d.prototype.set = function(c, d, e, j) {
|
|
this.x = c;
|
|
this.y = d;
|
|
this.z = e;
|
|
this.w = j
|
|
};
|
|
d.prototype.toString = function() {
|
|
return this.x + "," + this.y + "," + this.z + "," + this.w
|
|
};
|
|
d.prototype.toArray = function() {
|
|
return [this.x, this.y, this.z,
|
|
this.w
|
|
]
|
|
};
|
|
d.prototype.setFromAxisAngle = function(c, d) {
|
|
var e = Math.sin(0.5 * d);
|
|
this.x = c.x * e;
|
|
this.y = c.y * e;
|
|
this.z = c.z * e;
|
|
this.w = Math.cos(0.5 * d)
|
|
};
|
|
d.prototype.toAxisAngle = function(c) {
|
|
c = c || new g;
|
|
this.normalize();
|
|
var d = 2 * Math.acos(this.w),
|
|
e = Math.sqrt(1 - this.w * this.w);
|
|
0.001 > e ? (c.x = this.x, c.y = this.y, c.z = this.z) : (c.x = this.x / e, c.y = this.y / e, c.z = this.z / e);
|
|
return [c, d]
|
|
};
|
|
var f = new g,
|
|
m = new g;
|
|
d.prototype.setFromVectors = function(c, d) {
|
|
if (c.isAntiparallelTo(d)) c.tangents(f, m), this.setFromAxisAngle(f, Math.PI);
|
|
else {
|
|
var e = c.cross(d);
|
|
this.x = e.x;
|
|
this.y = e.y;
|
|
this.z = e.z;
|
|
this.w = Math.sqrt(Math.pow(c.norm(), 2) * Math.pow(d.norm(), 2)) + c.dot(d);
|
|
this.normalize()
|
|
}
|
|
};
|
|
var l = new g,
|
|
j = new g,
|
|
q = new g;
|
|
d.prototype.mult = function(c, e) {
|
|
e = e || new d;
|
|
var f = this.w;
|
|
l.set(this.x, this.y, this.z);
|
|
j.set(c.x, c.y, c.z);
|
|
e.w = f * c.w - l.dot(j);
|
|
l.cross(j, q);
|
|
e.x = f * j.x + c.w * l.x + q.x;
|
|
e.y = f * j.y + c.w * l.y + q.y;
|
|
e.z = f * j.z + c.w * l.z + q.z;
|
|
return e
|
|
};
|
|
d.prototype.inverse = function(c) {
|
|
var e = this.x,
|
|
j = this.y,
|
|
f = this.z,
|
|
g = this.w;
|
|
c = c || new d;
|
|
this.conjugate(c);
|
|
e = 1 / (e * e + j * j + f * f + g * g);
|
|
c.x *= e;
|
|
c.y *= e;
|
|
c.z *=
|
|
e;
|
|
c.w *= e;
|
|
return c
|
|
};
|
|
d.prototype.conjugate = function(c) {
|
|
c = c || new d;
|
|
c.x = -this.x;
|
|
c.y = -this.y;
|
|
c.z = -this.z;
|
|
c.w = this.w;
|
|
return c
|
|
};
|
|
d.prototype.normalize = function() {
|
|
var c = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w);
|
|
0 === c ? this.w = this.z = this.y = this.x = 0 : (c = 1 / c, this.x *= c, this.y *= c, this.z *= c, this.w *= c)
|
|
};
|
|
d.prototype.normalizeFast = function() {
|
|
var c = (3 - (this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w)) / 2;
|
|
0 === c ? this.w = this.z = this.y = this.x = 0 : (this.x *= c, this.y *= c, this.z *= c, this.w *= c)
|
|
};
|
|
d.prototype.vmult =
|
|
function(c, d) {
|
|
d = d || new g;
|
|
var e = c.x,
|
|
j = c.y,
|
|
f = c.z,
|
|
q = this.x,
|
|
l = this.y,
|
|
m = this.z,
|
|
C = this.w,
|
|
B = C * e + l * f - m * j,
|
|
E = C * j + m * e - q * f,
|
|
G = C * f + q * j - l * e,
|
|
e = -q * e - l * j - m * f;
|
|
d.x = B * C + e * -q + E * -m - G * -l;
|
|
d.y = E * C + e * -l + G * -q - B * -m;
|
|
d.z = G * C + e * -m + B * -l - E * -q;
|
|
return d
|
|
};
|
|
d.prototype.copy = function(c) {
|
|
this.x = c.x;
|
|
this.y = c.y;
|
|
this.z = c.z;
|
|
this.w = c.w;
|
|
return this
|
|
};
|
|
d.prototype.toEuler = function(c, d) {
|
|
d = d || "YZX";
|
|
var e, j, f, g = this.x,
|
|
q = this.y,
|
|
l = this.z,
|
|
m = this.w;
|
|
switch (d) {
|
|
case "YZX":
|
|
var B = g * q + l * m;
|
|
0.499 < B && (e = 2 * Math.atan2(g, m), j = Math.PI / 2, f = 0); - 0.499 > B && (e = -2 * Math.atan2(g,
|
|
m), j = -Math.PI / 2, f = 0);
|
|
if (isNaN(e)) {
|
|
f = g * g;
|
|
var E = l * l;
|
|
e = Math.atan2(2 * q * m - 2 * g * l, 1 - 2 * q * q - 2 * E);
|
|
j = Math.asin(2 * B);
|
|
f = Math.atan2(2 * g * m - 2 * q * l, 1 - 2 * f - 2 * E)
|
|
}
|
|
break;
|
|
default:
|
|
throw Error("Euler order " + d + " not supported yet.");
|
|
}
|
|
c.y = e;
|
|
c.z = j;
|
|
c.x = f
|
|
};
|
|
d.prototype.setFromEuler = function(c, d, e, j) {
|
|
j = j || "XYZ";
|
|
var f = Math.cos(c / 2),
|
|
g = Math.cos(d / 2),
|
|
q = Math.cos(e / 2);
|
|
c = Math.sin(c / 2);
|
|
d = Math.sin(d / 2);
|
|
e = Math.sin(e / 2);
|
|
"XYZ" === j ? (this.x = c * g * q + f * d * e, this.y = f * d * q - c * g * e, this.z = f * g * e + c * d * q, this.w = f * g * q - c * d * e) : "YXZ" === j ? (this.x = c * g * q + f * d * e, this.y =
|
|
f * d * q - c * g * e, this.z = f * g * e - c * d * q, this.w = f * g * q + c * d * e) : "ZXY" === j ? (this.x = c * g * q - f * d * e, this.y = f * d * q + c * g * e, this.z = f * g * e + c * d * q, this.w = f * g * q - c * d * e) : "ZYX" === j ? (this.x = c * g * q - f * d * e, this.y = f * d * q + c * g * e, this.z = f * g * e - c * d * q, this.w = f * g * q + c * d * e) : "YZX" === j ? (this.x = c * g * q + f * d * e, this.y = f * d * q + c * g * e, this.z = f * g * e - c * d * q, this.w = f * g * q - c * d * e) : "XZY" === j && (this.x = c * g * q - f * d * e, this.y = f * d * q - c * g * e, this.z = f * g * e + c * d * q, this.w = f * g * q + c * d * e);
|
|
return this
|
|
};
|
|
d.prototype.clone = function() {
|
|
return new d(this.x, this.y, this.z, this.w)
|
|
}
|
|
}, {
|
|
"./Vec3": 30
|
|
}],
|
|
29: [function(c, e) {
|
|
function d(c) {
|
|
c = c || {};
|
|
this.position = new g;
|
|
c.position && this.position.copy(c.position);
|
|
this.quaternion = new f;
|
|
c.quaternion && this.quaternion.copy(c.quaternion)
|
|
}
|
|
var g = c("./Vec3"),
|
|
f = c("./Quaternion");
|
|
e.exports = d;
|
|
var m = new f;
|
|
d.pointToLocalFrame = function(c, d, e, f) {
|
|
f = f || new g;
|
|
e.vsub(c, f);
|
|
d.conjugate(m);
|
|
m.vmult(f, f);
|
|
return f
|
|
};
|
|
d.prototype.pointToLocal = function(c, e) {
|
|
return d.pointToLocalFrame(this.position, this.quaternion, c, e)
|
|
};
|
|
d.pointToWorldFrame = function(c, d, e, f) {
|
|
f = f || new g;
|
|
d.vmult(e, f);
|
|
f.vadd(c,
|
|
f);
|
|
return f
|
|
};
|
|
d.prototype.pointToWorld = function(c, e) {
|
|
return d.pointToWorldFrame(this.position, this.quaternion, c, e)
|
|
};
|
|
d.prototype.vectorToWorldFrame = function(c, d) {
|
|
d = d || new g;
|
|
this.quaternion.vmult(c, d);
|
|
return d
|
|
};
|
|
d.vectorToWorldFrame = function(c, d, e) {
|
|
c.vmult(d, e);
|
|
return e
|
|
};
|
|
d.vectorToLocalFrame = function(c, d, e, f) {
|
|
f = f || new g;
|
|
d.w *= -1;
|
|
d.vmult(e, f);
|
|
d.w *= -1;
|
|
return f
|
|
}
|
|
}, {
|
|
"./Quaternion": 28,
|
|
"./Vec3": 30
|
|
}],
|
|
30: [function(c, e) {
|
|
function d(c, d, e) {
|
|
this.x = c || 0;
|
|
this.y = d || 0;
|
|
this.z = e || 0
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Mat3");
|
|
d.ZERO = new d(0,
|
|
0, 0);
|
|
d.UNIT_X = new d(1, 0, 0);
|
|
d.UNIT_Y = new d(0, 1, 0);
|
|
d.UNIT_Z = new d(0, 0, 1);
|
|
d.prototype.cross = function(c, e) {
|
|
var f = c.x,
|
|
g = c.y,
|
|
l = c.z,
|
|
m = this.x,
|
|
u = this.y,
|
|
y = this.z;
|
|
e = e || new d;
|
|
e.x = u * l - y * g;
|
|
e.y = y * f - m * l;
|
|
e.z = m * g - u * f;
|
|
return e
|
|
};
|
|
d.prototype.set = function(c, d, e) {
|
|
this.x = c;
|
|
this.y = d;
|
|
this.z = e;
|
|
return this
|
|
};
|
|
d.prototype.setZero = function() {
|
|
this.x = this.y = this.z = 0
|
|
};
|
|
d.prototype.vadd = function(c, e) {
|
|
if (e) e.x = c.x + this.x, e.y = c.y + this.y, e.z = c.z + this.z;
|
|
else return new d(this.x + c.x, this.y + c.y, this.z + c.z)
|
|
};
|
|
d.prototype.vsub = function(c, e) {
|
|
if (e) e.x =
|
|
this.x - c.x, e.y = this.y - c.y, e.z = this.z - c.z;
|
|
else return new d(this.x - c.x, this.y - c.y, this.z - c.z)
|
|
};
|
|
d.prototype.crossmat = function() {
|
|
return new g([0, -this.z, this.y, this.z, 0, -this.x, -this.y, this.x, 0])
|
|
};
|
|
d.prototype.normalize = function() {
|
|
var c = this.x,
|
|
d = this.y,
|
|
e = this.z,
|
|
c = Math.sqrt(c * c + d * d + e * e);
|
|
0 < c ? (d = 1 / c, this.x *= d, this.y *= d, this.z *= d) : this.z = this.y = this.x = 0;
|
|
return c
|
|
};
|
|
d.prototype.unit = function(c) {
|
|
c = c || new d;
|
|
var e = this.x,
|
|
f = this.y,
|
|
g = this.z,
|
|
l = Math.sqrt(e * e + f * f + g * g);
|
|
0 < l ? (l = 1 / l, c.x = e * l, c.y = f * l, c.z = g * l) : (c.x = 1, c.y =
|
|
0, c.z = 0);
|
|
return c
|
|
};
|
|
d.prototype.norm = function() {
|
|
var c = this.x,
|
|
d = this.y,
|
|
e = this.z;
|
|
return Math.sqrt(c * c + d * d + e * e)
|
|
};
|
|
d.prototype.length = d.prototype.norm;
|
|
d.prototype.norm2 = function() {
|
|
return this.dot(this)
|
|
};
|
|
d.prototype.lengthSquared = d.prototype.norm2;
|
|
d.prototype.distanceTo = function(c) {
|
|
var d = this.x,
|
|
e = this.y,
|
|
f = this.z,
|
|
g = c.x,
|
|
l = c.y;
|
|
c = c.z;
|
|
return Math.sqrt((g - d) * (g - d) + (l - e) * (l - e) + (c - f) * (c - f))
|
|
};
|
|
d.prototype.distanceSquared = function(c) {
|
|
var d = this.x,
|
|
e = this.y,
|
|
f = this.z,
|
|
g = c.x,
|
|
l = c.y;
|
|
c = c.z;
|
|
return (g - d) * (g - d) + (l - e) * (l - e) + (c -
|
|
f) * (c - f)
|
|
};
|
|
d.prototype.mult = function(c, e) {
|
|
e = e || new d;
|
|
var f = this.y,
|
|
g = this.z;
|
|
e.x = c * this.x;
|
|
e.y = c * f;
|
|
e.z = c * g;
|
|
return e
|
|
};
|
|
d.prototype.scale = d.prototype.mult;
|
|
d.prototype.dot = function(c) {
|
|
return this.x * c.x + this.y * c.y + this.z * c.z
|
|
};
|
|
d.prototype.isZero = function() {
|
|
return 0 === this.x && 0 === this.y && 0 === this.z
|
|
};
|
|
d.prototype.negate = function(c) {
|
|
c = c || new d;
|
|
c.x = -this.x;
|
|
c.y = -this.y;
|
|
c.z = -this.z;
|
|
return c
|
|
};
|
|
var f = new d,
|
|
m = new d;
|
|
d.prototype.tangents = function(c, d) {
|
|
var e = this.norm();
|
|
0 < e ? (e = 1 / e, f.set(this.x * e, this.y * e, this.z * e), 0.9 > Math.abs(f.x) ?
|
|
m.set(1, 0, 0) : m.set(0, 1, 0), f.cross(m, c), f.cross(c, d)) : (c.set(1, 0, 0), d.set(0, 1, 0))
|
|
};
|
|
d.prototype.toString = function() {
|
|
return this.x + "," + this.y + "," + this.z
|
|
};
|
|
d.prototype.toArray = function() {
|
|
return [this.x, this.y, this.z]
|
|
};
|
|
d.prototype.copy = function(c) {
|
|
this.x = c.x;
|
|
this.y = c.y;
|
|
this.z = c.z;
|
|
return this
|
|
};
|
|
d.prototype.lerp = function(c, d, e) {
|
|
var f = this.x,
|
|
g = this.y,
|
|
l = this.z;
|
|
e.x = f + (c.x - f) * d;
|
|
e.y = g + (c.y - g) * d;
|
|
e.z = l + (c.z - l) * d
|
|
};
|
|
d.prototype.almostEquals = function(c, d) {
|
|
void 0 === d && (d = 1E-6);
|
|
return Math.abs(this.x - c.x) > d || Math.abs(this.y -
|
|
c.y) > d || Math.abs(this.z - c.z) > d ? !1 : !0
|
|
};
|
|
d.prototype.almostZero = function(c) {
|
|
void 0 === c && (c = 1E-6);
|
|
return Math.abs(this.x) > c || Math.abs(this.y) > c || Math.abs(this.z) > c ? !1 : !0
|
|
};
|
|
var l = new d;
|
|
d.prototype.isAntiparallelTo = function(c, d) {
|
|
this.negate(l);
|
|
return l.almostEquals(c, d)
|
|
};
|
|
d.prototype.clone = function() {
|
|
return new d(this.x, this.y, this.z)
|
|
}
|
|
}, {
|
|
"./Mat3": 27
|
|
}],
|
|
31: [function(c, e) {
|
|
function d(c) {
|
|
c = c || {};
|
|
g.apply(this);
|
|
this.id = d.idCounter++;
|
|
this.postStep = this.preStep = this.world = null;
|
|
this.vlambda = new f;
|
|
this.collisionFilterGroup =
|
|
"number" === typeof c.collisionFilterGroup ? c.collisionFilterGroup : 1;
|
|
this.collisionFilterMask = "number" === typeof c.collisionFilterMask ? c.collisionFilterMask : 1;
|
|
this.collisionResponse = !0;
|
|
this.position = new f;
|
|
c.position && this.position.copy(c.position);
|
|
this.previousPosition = new f;
|
|
this.initPosition = new f;
|
|
this.velocity = new f;
|
|
c.velocity && this.velocity.copy(c.velocity);
|
|
this.initVelocity = new f;
|
|
this.force = new f;
|
|
var e = "number" === typeof c.mass ? c.mass : 0;
|
|
this.mass = e;
|
|
this.invMass = 0 < e ? 1 / e : 0;
|
|
this.material = c.material ||
|
|
null;
|
|
this.linearDamping = "number" === typeof c.linearDamping ? c.linearDamping : 0.01;
|
|
this.type = 0 >= e ? d.STATIC : d.DYNAMIC;
|
|
typeof c.type === typeof d.STATIC && (this.type = c.type);
|
|
this.allowSleep = "undefined" !== typeof c.allowSleep ? c.allowSleep : !0;
|
|
this.sleepState = 0;
|
|
this.sleepSpeedLimit = "undefined" !== typeof c.sleepSpeedLimit ? c.sleepSpeedLimit : 0.1;
|
|
this.sleepTimeLimit = "undefined" !== typeof c.sleepTimeLimit ? c.sleepTimeLimit : 1;
|
|
this.timeLastSleepy = 0;
|
|
this._wakeUpAfterNarrowphase = !1;
|
|
this.torque = new f;
|
|
this.quaternion = new l;
|
|
c.quaternion && this.quaternion.copy(c.quaternion);
|
|
this.initQuaternion = new l;
|
|
this.angularVelocity = new f;
|
|
c.angularVelocity && this.angularVelocity.copy(c.angularVelocity);
|
|
this.initAngularVelocity = new f;
|
|
this.interpolatedPosition = new f;
|
|
this.interpolatedQuaternion = new l;
|
|
this.shapes = [];
|
|
this.shapeOffsets = [];
|
|
this.shapeOrientations = [];
|
|
this.inertia = new f;
|
|
this.invInertia = new f;
|
|
this.invInertiaWorld = new m;
|
|
this.invMassSolve = 0;
|
|
this.invInertiaSolve = new f;
|
|
this.invInertiaWorldSolve = new m;
|
|
this.fixedRotation = "undefined" !==
|
|
typeof c.fixedRotation ? c.fixedRotation : !1;
|
|
this.angularDamping = "undefined" !== typeof c.angularDamping ? c.angularDamping : 0.01;
|
|
this.aabb = new j;
|
|
this.aabbNeedsUpdate = !0;
|
|
this.wlambda = new f;
|
|
c.shape && this.addShape(c.shape);
|
|
this.updateMassProperties()
|
|
}
|
|
e.exports = d;
|
|
var g = c("../utils/EventTarget");
|
|
c("../shapes/Shape");
|
|
var f = c("../math/Vec3"),
|
|
m = c("../math/Mat3"),
|
|
l = c("../math/Quaternion");
|
|
c("../material/Material");
|
|
var j = c("../collision/AABB"),
|
|
q = c("../shapes/Box");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
d.DYNAMIC =
|
|
1;
|
|
d.STATIC = 2;
|
|
d.KINEMATIC = 4;
|
|
d.AWAKE = 0;
|
|
d.SLEEPY = 1;
|
|
d.SLEEPING = 2;
|
|
d.idCounter = 0;
|
|
d.prototype.wakeUp = function() {
|
|
var c = this.sleepState;
|
|
this.sleepState = 0;
|
|
c === d.SLEEPING && this.dispatchEvent({
|
|
type: "wakeup"
|
|
})
|
|
};
|
|
d.prototype.sleep = function() {
|
|
this.sleepState = d.SLEEPING;
|
|
this.velocity.set(0, 0, 0);
|
|
this.angularVelocity.set(0, 0, 0)
|
|
};
|
|
d.sleepyEvent = {
|
|
type: "sleepy"
|
|
};
|
|
d.sleepEvent = {
|
|
type: "sleep"
|
|
};
|
|
d.prototype.sleepTick = function(c) {
|
|
if (this.allowSleep) {
|
|
var e = this.sleepState,
|
|
j = this.velocity.norm2() + this.angularVelocity.norm2(),
|
|
f =
|
|
Math.pow(this.sleepSpeedLimit, 2);
|
|
e === d.AWAKE && j < f ? (this.sleepState = d.SLEEPY, this.timeLastSleepy = c, this.dispatchEvent(d.sleepyEvent)) : e === d.SLEEPY && j > f ? this.wakeUp() : e === d.SLEEPY && c - this.timeLastSleepy > this.sleepTimeLimit && (this.sleep(), this.dispatchEvent(d.sleepEvent))
|
|
}
|
|
};
|
|
d.prototype.updateSolveMassProperties = function() {
|
|
this.sleepState === d.SLEEPING || this.type === d.KINEMATIC ? (this.invMassSolve = 0, this.invInertiaSolve.setZero(), this.invInertiaWorldSolve.setZero()) : (this.invMassSolve = this.invMass, this.invInertiaSolve.copy(this.invInertia),
|
|
this.invInertiaWorldSolve.copy(this.invInertiaWorld))
|
|
};
|
|
d.prototype.pointToLocalFrame = function(c, d) {
|
|
d = d || new f;
|
|
c.vsub(this.position, d);
|
|
this.quaternion.conjugate().vmult(d, d);
|
|
return d
|
|
};
|
|
d.prototype.vectorToLocalFrame = function(c, d) {
|
|
d = d || new f;
|
|
this.quaternion.conjugate().vmult(c, d);
|
|
return d
|
|
};
|
|
d.prototype.pointToWorldFrame = function(c, d) {
|
|
d = d || new f;
|
|
this.quaternion.vmult(c, d);
|
|
d.vadd(this.position, d);
|
|
return d
|
|
};
|
|
d.prototype.vectorToWorldFrame = function(c, d) {
|
|
d = d || new f;
|
|
this.quaternion.vmult(c, d);
|
|
return d
|
|
};
|
|
var n =
|
|
new f,
|
|
r = new l;
|
|
d.prototype.addShape = function(c, d, e) {
|
|
var j = new f,
|
|
g = new l;
|
|
d && j.copy(d);
|
|
e && g.copy(e);
|
|
this.shapes.push(c);
|
|
this.shapeOffsets.push(j);
|
|
this.shapeOrientations.push(g);
|
|
this.updateMassProperties();
|
|
this.updateBoundingRadius();
|
|
this.aabbNeedsUpdate = !0;
|
|
return this
|
|
};
|
|
d.prototype.updateBoundingRadius = function() {
|
|
for (var c = this.shapes, d = this.shapeOffsets, e = c.length, j = 0, f = 0; f !== e; f++) {
|
|
var g = c[f];
|
|
g.updateBoundingSphereRadius();
|
|
var n = d[f].norm(),
|
|
g = g.boundingSphereRadius;
|
|
n + g > j && (j = n + g)
|
|
}
|
|
this.boundingRadius =
|
|
j
|
|
};
|
|
var s = new j;
|
|
d.prototype.computeAABB = function() {
|
|
for (var c = this.shapes, d = this.shapeOffsets, e = this.shapeOrientations, j = c.length, f = this.quaternion, g = this.aabb, q = 0; q !== j; q++) {
|
|
var l = c[q];
|
|
e[q].mult(f, r);
|
|
r.vmult(d[q], n);
|
|
n.vadd(this.position, n);
|
|
l.calculateWorldAABB(n, r, s.lowerBound, s.upperBound);
|
|
0 === q ? g.copy(s) : g.extend(s)
|
|
}
|
|
this.aabbNeedsUpdate = !1
|
|
};
|
|
var t = new m,
|
|
u = new m;
|
|
new m;
|
|
d.prototype.updateInertiaWorld = function(c) {
|
|
var d = this.invInertia;
|
|
d.x === d.y && d.y === d.z && !c || (t.setRotationFromQuaternion(this.quaternion),
|
|
t.transpose(u), t.scale(d, t), t.mmult(u, this.invInertiaWorld))
|
|
};
|
|
var y = new f,
|
|
z = new f;
|
|
d.prototype.applyForce = function(c, e) {
|
|
this.type === d.DYNAMIC && (e.vsub(this.position, y), y.cross(c, z), this.force.vadd(c, this.force), this.torque.vadd(z, this.torque))
|
|
};
|
|
var x = new f,
|
|
C = new f;
|
|
d.prototype.applyLocalForce = function(c, e) {
|
|
this.type === d.DYNAMIC && (this.vectorToWorldFrame(c, x), this.pointToWorldFrame(e, C), this.applyForce(x, C))
|
|
};
|
|
var B = new f,
|
|
E = new f,
|
|
G = new f;
|
|
d.prototype.applyImpulse = function(c, e) {
|
|
this.type === d.DYNAMIC && (e.vsub(this.position,
|
|
B), E.copy(c), E.mult(this.invMass, E), this.velocity.vadd(E, this.velocity), B.cross(c, G), this.invInertiaWorld.vmult(G, G), this.angularVelocity.vadd(G, this.angularVelocity))
|
|
};
|
|
var D = new f,
|
|
A = new f;
|
|
d.prototype.applyLocalImpulse = function(c, e) {
|
|
this.type === d.DYNAMIC && (this.vectorToWorldFrame(c, D), this.pointToWorldFrame(e, A), this.applyImpulse(D, A))
|
|
};
|
|
var H = new f;
|
|
d.prototype.updateMassProperties = function() {
|
|
this.invMass = 0 < this.mass ? 1 / this.mass : 0;
|
|
var c = this.inertia,
|
|
d = this.fixedRotation;
|
|
this.computeAABB();
|
|
H.set((this.aabb.upperBound.x -
|
|
this.aabb.lowerBound.x) / 2, (this.aabb.upperBound.y - this.aabb.lowerBound.y) / 2, (this.aabb.upperBound.z - this.aabb.lowerBound.z) / 2);
|
|
q.calculateInertia(H, this.mass, c);
|
|
this.invInertia.set(0 < c.x && !d ? 1 / c.x : 0, 0 < c.y && !d ? 1 / c.y : 0, 0 < c.z && !d ? 1 / c.z : 0);
|
|
this.updateInertiaWorld(!0)
|
|
};
|
|
d.prototype.getVelocityAtWorldPoint = function(c, d) {
|
|
var e = new f;
|
|
c.vsub(this.position, e);
|
|
this.angularVelocity.cross(e, d);
|
|
this.velocity.vadd(d, d);
|
|
return d
|
|
}
|
|
}, {
|
|
"../collision/AABB": 3,
|
|
"../material/Material": 25,
|
|
"../math/Mat3": 27,
|
|
"../math/Quaternion": 28,
|
|
"../math/Vec3": 30,
|
|
"../shapes/Box": 37,
|
|
"../shapes/Shape": 43,
|
|
"../utils/EventTarget": 49
|
|
}],
|
|
32: [function(c, e) {
|
|
function d(c) {
|
|
this.chassisBody = c.chassisBody;
|
|
this.wheelInfos = [];
|
|
this.sliding = !1;
|
|
this.world = null;
|
|
this.indexRightAxis = "undefined" !== typeof c.indexRightAxis ? c.indexRightAxis : 1;
|
|
this.indexForwardAxis = "undefined" !== typeof c.indexForwardAxis ? c.indexForwardAxis : 0;
|
|
this.indexUpAxis = "undefined" !== typeof c.indexUpAxis ? c.indexUpAxis : 2
|
|
}
|
|
|
|
function g(c, d, e) {
|
|
var j = G,
|
|
f = D,
|
|
g = A,
|
|
n = H;
|
|
d.vsub(c.position, j);
|
|
j.cross(e, f);
|
|
c.invInertiaWorld.vmult(f,
|
|
n);
|
|
n.cross(j, g);
|
|
return c.invMass + e.dot(g)
|
|
}
|
|
c("./Body");
|
|
var f = c("../math/Vec3"),
|
|
m = c("../math/Quaternion");
|
|
c("../collision/RaycastResult");
|
|
var l = c("../collision/Ray"),
|
|
j = c("../objects/WheelInfo");
|
|
e.exports = d;
|
|
new f;
|
|
new f;
|
|
new f;
|
|
var q = new f,
|
|
n = new f,
|
|
r = new f;
|
|
new l;
|
|
d.prototype.addWheel = function(c) {
|
|
c = c || {};
|
|
c = new j(c);
|
|
var d = this.wheelInfos.length;
|
|
this.wheelInfos.push(c);
|
|
return d
|
|
};
|
|
d.prototype.setSteeringValue = function(c, d) {
|
|
this.wheelInfos[d].steering = c
|
|
};
|
|
new f;
|
|
d.prototype.applyEngineForce = function(c, d) {
|
|
this.wheelInfos[d].engineForce =
|
|
c
|
|
};
|
|
d.prototype.setBrake = function(c, d) {
|
|
this.wheelInfos[d].brake = c
|
|
};
|
|
d.prototype.addToWorld = function(c) {
|
|
c.add(this.chassisBody);
|
|
var d = this;
|
|
this.preStepCallback = function() {
|
|
d.updateVehicle(c.dt)
|
|
};
|
|
c.addEventListener("preStep", this.preStepCallback);
|
|
this.world = c
|
|
};
|
|
d.prototype.getVehicleAxisWorld = function(c, d) {
|
|
d.set(0 === c ? 1 : 0, 1 === c ? 1 : 0, 2 === c ? 1 : 0);
|
|
this.chassisBody.vectorToWorldFrame(d, d)
|
|
};
|
|
d.prototype.updateVehicle = function(c) {
|
|
for (var d = this.wheelInfos, e = d.length, j = this.chassisBody, g = 0; g < e; g++) this.updateWheelTransform(g);
|
|
this.currentVehicleSpeedKmHour = 3.6 * j.velocity.norm();
|
|
g = new f;
|
|
this.getVehicleAxisWorld(this.indexForwardAxis, g);
|
|
0 > g.dot(j.velocity) && (this.currentVehicleSpeedKmHour *= -1);
|
|
for (g = 0; g < e; g++) this.castRay(d[g]);
|
|
this.updateSuspension(c);
|
|
for (var n = new f, q = new f, g = 0; g < e; g++) {
|
|
var l = d[g],
|
|
r = l.suspensionForce;
|
|
r > l.maxSuspensionForce && (r = l.maxSuspensionForce);
|
|
l.raycastResult.hitNormalWorld.scale(r * c, n);
|
|
l.raycastResult.hitPointWorld.vsub(j.position, q);
|
|
j.applyImpulse(n, l.raycastResult.hitPointWorld)
|
|
}
|
|
this.updateFriction(c);
|
|
n = new f;
|
|
q = new f;
|
|
r = new f;
|
|
for (g = 0; g < e; g++) {
|
|
l = d[g];
|
|
j.getVelocityAtWorldPoint(l.chassisConnectionPointWorld, r);
|
|
var s = 1;
|
|
switch (this.indexUpAxis) {
|
|
case 1:
|
|
s = -1
|
|
}
|
|
if (l.isInContact) {
|
|
this.getVehicleAxisWorld(this.indexForwardAxis, q);
|
|
var m = q.dot(l.raycastResult.hitNormalWorld);
|
|
l.raycastResult.hitNormalWorld.scale(m, n);
|
|
q.vsub(n, q);
|
|
m = q.dot(r);
|
|
l.deltaRotation = s * m * c / l.radius
|
|
}
|
|
if ((l.sliding || !l.isInContact) && 0 !== l.engineForce && l.useCustomSlidingRotationalSpeed) l.deltaRotation = (0 < l.engineForce ? 1 : -1) * l.customSlidingRotationalSpeed *
|
|
c;
|
|
Math.abs(l.brake) > Math.abs(l.engineForce) && (l.deltaRotation = 0);
|
|
l.rotation += l.deltaRotation;
|
|
l.deltaRotation *= 0.99
|
|
}
|
|
};
|
|
d.prototype.updateSuspension = function() {
|
|
for (var c = this.chassisBody.mass, d = this.wheelInfos, e = d.length, j = 0; j < e; j++) {
|
|
var f = d[j];
|
|
if (f.isInContact) {
|
|
var g;
|
|
g = f.suspensionStiffness * (f.suspensionRestLength - f.suspensionLength) * f.clippedInvContactDotSuspension;
|
|
var n = f.suspensionRelativeVelocity;
|
|
g -= (0 > n ? f.dampingCompression : f.dampingRelaxation) * n;
|
|
f.suspensionForce = g * c;
|
|
0 > f.suspensionForce && (f.suspensionForce =
|
|
0)
|
|
} else f.suspensionForce = 0
|
|
}
|
|
};
|
|
d.prototype.removeFromWorld = function(c) {
|
|
c.remove(this.chassisBody);
|
|
c.removeEventListener("preStep", this.preStepCallback);
|
|
this.world = null
|
|
};
|
|
var s = new f,
|
|
t = new f;
|
|
d.prototype.castRay = function(c) {
|
|
this.updateWheelTransformWorld(c);
|
|
var d = this.chassisBody,
|
|
e = -1;
|
|
c.directionWorld.scale(c.suspensionRestLength + c.radius, s);
|
|
var j = c.chassisConnectionPointWorld;
|
|
j.vadd(s, t);
|
|
var g = c.raycastResult;
|
|
g.reset();
|
|
var n = d.collisionResponse;
|
|
d.collisionResponse = !1;
|
|
this.world.rayTest(j, t, g);
|
|
d.collisionResponse =
|
|
n;
|
|
j = g.body;
|
|
c.raycastResult.groundObject = 0;
|
|
j ? (e = g.distance, c.raycastResult.hitNormalWorld = g.hitNormalWorld, c.isInContact = !0, c.suspensionLength = g.distance - c.radius, g = c.suspensionRestLength - c.maxSuspensionTravel, j = c.suspensionRestLength + c.maxSuspensionTravel, c.suspensionLength < g && (c.suspensionLength = g), c.suspensionLength > j && (c.suspensionLength = j, c.raycastResult.reset()), g = c.raycastResult.hitNormalWorld.dot(c.directionWorld), j = new f, d.getVelocityAtWorldPoint(c.raycastResult.hitPointWorld, j), d = c.raycastResult.hitNormalWorld.dot(j),
|
|
-0.1 <= g ? (c.suspensionRelativeVelocity = 0, c.clippedInvContactDotSuspension = 10) : (g = -1 / g, c.suspensionRelativeVelocity = d * g, c.clippedInvContactDotSuspension = g)) : (c.suspensionLength = c.suspensionRestLength + 0 * c.maxSuspensionTravel, c.suspensionRelativeVelocity = 0, c.directionWorld.scale(-1, c.raycastResult.hitNormalWorld), c.clippedInvContactDotSuspension = 1);
|
|
return e
|
|
};
|
|
d.prototype.updateWheelTransformWorld = function(c) {
|
|
c.isInContact = !1;
|
|
var d = this.chassisBody;
|
|
d.pointToWorldFrame(c.chassisConnectionPointLocal, c.chassisConnectionPointWorld);
|
|
d.vectorToWorldFrame(c.directionLocal, c.directionWorld);
|
|
d.vectorToWorldFrame(c.axleLocal, c.axleWorld)
|
|
};
|
|
d.prototype.updateWheelTransform = function(c) {
|
|
c = this.wheelInfos[c];
|
|
this.updateWheelTransformWorld(c);
|
|
c.directionLocal.scale(-1, q);
|
|
n.copy(c.axleLocal);
|
|
q.cross(n, r);
|
|
r.normalize();
|
|
n.normalize();
|
|
var d = c.steering,
|
|
e = new m;
|
|
e.setFromAxisAngle(q, d);
|
|
d = new m;
|
|
d.setFromAxisAngle(n, c.rotation);
|
|
var j = c.worldTransform.quaternion;
|
|
this.chassisBody.quaternion.mult(e, j);
|
|
j.mult(d, j);
|
|
j.normalize();
|
|
e = c.worldTransform.position;
|
|
e.copy(c.directionWorld);
|
|
e.scale(c.suspensionLength, e);
|
|
e.vadd(c.chassisConnectionPointWorld, e)
|
|
};
|
|
var u = [new f(1, 0, 0), new f(0, 1, 0), new f(0, 0, 1)];
|
|
d.prototype.getWheelTransformWorld = function(c) {
|
|
return this.wheelInfos[c].worldTransform
|
|
};
|
|
var y = new f,
|
|
z = [],
|
|
x = [];
|
|
d.prototype.updateFriction = function(c) {
|
|
for (var d = this.wheelInfos, e = d.length, j = this.chassisBody, n = 0, q = 0; q < e; q++) {
|
|
var l = d[q],
|
|
r = l.raycastResult.body;
|
|
r && n++;
|
|
l.sideImpulse = 0;
|
|
l.forwardImpulse = 0;
|
|
x[q] || (x[q] = new f);
|
|
z[q] || (z[q] = new f)
|
|
}
|
|
for (q = 0; q < e; q++)
|
|
if (l =
|
|
d[q], r = l.raycastResult.body) {
|
|
var s = z[q];
|
|
this.getWheelTransformWorld(q).vectorToWorldFrame(u[this.indexRightAxis], s);
|
|
var n = l.raycastResult.hitNormalWorld,
|
|
m = s.dot(n);
|
|
n.scale(m, y);
|
|
s.vsub(y, s);
|
|
s.normalize();
|
|
n.cross(s, x[q]);
|
|
x[q].normalize();
|
|
var n = l,
|
|
m = j,
|
|
t = l.raycastResult.hitPointWorld,
|
|
D = l.raycastResult.hitPointWorld,
|
|
A = void 0;
|
|
if (1.1 < s.norm2()) r = 0;
|
|
else {
|
|
var A = O,
|
|
H = K,
|
|
ea = S;
|
|
m.getVelocityAtWorldPoint(t, A);
|
|
r.getVelocityAtWorldPoint(D, H);
|
|
A.vsub(H, ea);
|
|
r = -0.2 * s.dot(ea) * (1 / (m.invMass + r.invMass))
|
|
}
|
|
n.sideImpulse = r;
|
|
l.sideImpulse *=
|
|
1
|
|
} this.sliding = !1;
|
|
for (q = 0; q < e; q++) {
|
|
l = d[q];
|
|
r = l.raycastResult.body;
|
|
m = 0;
|
|
l.slipInfo = 1;
|
|
if (r) {
|
|
var n = l.brake ? l.brake : 0,
|
|
A = j,
|
|
t = r,
|
|
D = l.raycastResult.hitPointWorld,
|
|
s = x[q],
|
|
m = n,
|
|
H = D,
|
|
ea = C,
|
|
G = B,
|
|
wa = E;
|
|
A.getVelocityAtWorldPoint(H, ea);
|
|
t.getVelocityAtWorldPoint(H, G);
|
|
ea.vsub(G, wa);
|
|
H = s.dot(wa);
|
|
A = g(A, D, s);
|
|
t = g(t, D, s);
|
|
H = -H * (1 / (A + t));
|
|
m < H && (H = m);
|
|
H < -m && (H = -m);
|
|
m = H;
|
|
m += l.engineForce * c;
|
|
n /= m;
|
|
l.slipInfo *= n
|
|
}
|
|
l.forwardImpulse = 0;
|
|
l.skidInfo = 1;
|
|
r && (l.skidInfo = 1, r = l.suspensionForce * c * l.frictionSlip, n = r * r, l.forwardImpulse = m, m = 0.5 * l.forwardImpulse,
|
|
t = 1 * l.sideImpulse, m = m * m + t * t, l.sliding = !1, m > n && (this.sliding = !0, l.sliding = !0, n = r / Math.sqrt(m), l.skidInfo *= n))
|
|
}
|
|
if (this.sliding)
|
|
for (q = 0; q < e; q++) l = d[q], 0 !== l.sideImpulse && 1 > l.skidInfo && (l.forwardImpulse *= l.skidInfo, l.sideImpulse *= l.skidInfo);
|
|
for (q = 0; q < e; q++) l = d[q], c = new f, c.copy(l.raycastResult.hitPointWorld), 0 !== l.forwardImpulse && (r = new f, x[q].scale(l.forwardImpulse, r), j.applyImpulse(r, c)), 0 !== l.sideImpulse && (r = l.raycastResult.body, n = new f, n.copy(l.raycastResult.hitPointWorld), m = new f, z[q].scale(l.sideImpulse,
|
|
m), j.pointToLocalFrame(c, c), c["xyz" [this.indexUpAxis]] *= l.rollInfluence, j.pointToWorldFrame(c, c), j.applyImpulse(m, c), m.scale(-1, m), r.applyImpulse(m, n))
|
|
};
|
|
var C = new f,
|
|
B = new f,
|
|
E = new f,
|
|
G = new f,
|
|
D = new f,
|
|
A = new f,
|
|
H = new f,
|
|
O = new f,
|
|
K = new f,
|
|
S = new f
|
|
}, {
|
|
"../collision/Ray": 9,
|
|
"../collision/RaycastResult": 10,
|
|
"../math/Quaternion": 28,
|
|
"../math/Vec3": 30,
|
|
"../objects/WheelInfo": 36,
|
|
"./Body": 31
|
|
}],
|
|
33: [function(c, e) {
|
|
function d(c) {
|
|
this.wheelBodies = [];
|
|
this.coordinateSystem = "undefined" === typeof c.coordinateSystem ? new l(1, 2, 3) :
|
|
c.coordinateSystem.clone();
|
|
(this.chassisBody = c.chassisBody) || (c = new m(new l(5, 2, 0.5)), this.chassisBody = new g(1, c));
|
|
this.constraints = [];
|
|
this.wheelAxes = [];
|
|
this.wheelForces = []
|
|
}
|
|
var g = c("./Body"),
|
|
f = c("../shapes/Sphere"),
|
|
m = c("../shapes/Box"),
|
|
l = c("../math/Vec3"),
|
|
j = c("../constraints/HingeConstraint");
|
|
e.exports = d;
|
|
d.prototype.addWheel = function(c) {
|
|
c = c || {};
|
|
var d = c.body;
|
|
d || (d = new g(1, new f(1.2)));
|
|
this.wheelBodies.push(d);
|
|
this.wheelForces.push(0);
|
|
new l;
|
|
var e = "undefined" !== typeof c.position ? c.position.clone() : new l,
|
|
n = new l;
|
|
this.chassisBody.pointToWorldFrame(e, n);
|
|
d.position.set(n.x, n.y, n.z);
|
|
c = "undefined" !== typeof c.axis ? c.axis.clone() : new l(0, 1, 0);
|
|
this.wheelAxes.push(c);
|
|
d = new j(this.chassisBody, d, {
|
|
pivotA: e,
|
|
axisA: c,
|
|
pivotB: l.ZERO,
|
|
axisB: c,
|
|
collideConnected: !1
|
|
});
|
|
this.constraints.push(d);
|
|
return this.wheelBodies.length - 1
|
|
};
|
|
d.prototype.setSteeringValue = function(c, d) {
|
|
var e = this.wheelAxes[d],
|
|
j = Math.cos(c),
|
|
f = Math.sin(c),
|
|
g = e.x,
|
|
e = e.y;
|
|
this.constraints[d].axisA.set(j * g - f * e, f * g + j * e, 0)
|
|
};
|
|
d.prototype.setMotorSpeed = function(c, d) {
|
|
var e =
|
|
this.constraints[d];
|
|
e.enableMotor();
|
|
e.motorTargetVelocity = c
|
|
};
|
|
d.prototype.disableMotor = function(c) {
|
|
this.constraints[c].disableMotor()
|
|
};
|
|
var q = new l;
|
|
d.prototype.setWheelForce = function(c, d) {
|
|
this.wheelForces[d] = c
|
|
};
|
|
d.prototype.applyWheelForce = function(c, d) {
|
|
var e = this.wheelBodies[d],
|
|
j = e.torque;
|
|
this.wheelAxes[d].scale(c, q);
|
|
e.vectorToWorldFrame(q, q);
|
|
j.vadd(q, j)
|
|
};
|
|
d.prototype.addToWorld = function(c) {
|
|
for (var d = this.constraints, e = this.wheelBodies.concat([this.chassisBody]), j = 0; j < e.length; j++) c.add(e[j]);
|
|
for (j =
|
|
0; j < d.length; j++) c.addConstraint(d[j]);
|
|
c.addEventListener("preStep", this._update.bind(this))
|
|
};
|
|
d.prototype._update = function() {
|
|
for (var c = this.wheelForces, d = 0; d < c.length; d++) this.applyWheelForce(c[d], d)
|
|
};
|
|
d.prototype.removeFromWorld = function(c) {
|
|
for (var d = this.constraints, e = this.wheelBodies.concat([this.chassisBody]), j = 0; j < e.length; j++) c.remove(e[j]);
|
|
for (j = 0; j < d.length; j++) c.removeConstraint(d[j])
|
|
};
|
|
var n = new l;
|
|
d.prototype.getWheelSpeed = function(c) {
|
|
var d = this.wheelBodies[c].angularVelocity;
|
|
this.chassisBody.vectorToWorldFrame(this.wheelAxes[c],
|
|
n);
|
|
return d.dot(n)
|
|
}
|
|
}, {
|
|
"../constraints/HingeConstraint": 15,
|
|
"../math/Vec3": 30,
|
|
"../shapes/Box": 37,
|
|
"../shapes/Sphere": 44,
|
|
"./Body": 31
|
|
}],
|
|
34: [function(c, e) {
|
|
function d() {
|
|
this.particles = [];
|
|
this.speedOfSound = this.smoothingRadius = this.density = 1;
|
|
this.viscosity = 0.01;
|
|
this.eps = 1E-6;
|
|
this.pressures = [];
|
|
this.densities = [];
|
|
this.neighbors = []
|
|
}
|
|
e.exports = d;
|
|
c("../shapes/Shape");
|
|
var g = c("../math/Vec3");
|
|
c("../math/Quaternion");
|
|
c("../shapes/Particle");
|
|
c("../objects/Body");
|
|
c("../material/Material");
|
|
d.prototype.add = function(c) {
|
|
this.particles.push(c);
|
|
this.neighbors.length < this.particles.length && this.neighbors.push([])
|
|
};
|
|
d.prototype.remove = function(c) {
|
|
c = this.particles.indexOf(c); - 1 !== c && (this.particles.splice(c, 1), this.neighbors.length > this.particles.length && this.neighbors.pop())
|
|
};
|
|
var f = new g;
|
|
d.prototype.getNeighbors = function(c, d) {
|
|
for (var e = this.particles.length, j = c.id, g = this.smoothingRadius * this.smoothingRadius, n = 0; n !== e; n++) {
|
|
var q = this.particles[n];
|
|
q.position.vsub(c.position, f);
|
|
j !== q.id && f.norm2() < g && d.push(q)
|
|
}
|
|
};
|
|
var m = new g,
|
|
l = new g,
|
|
j = new g,
|
|
q =
|
|
new g,
|
|
n = new g,
|
|
r = new g;
|
|
d.prototype.update = function() {
|
|
for (var c = this.particles.length, d = this.speedOfSound, e = this.eps, f = 0; f !== c; f++) {
|
|
var g = this.particles[f],
|
|
x = this.neighbors[f];
|
|
x.length = 0;
|
|
this.getNeighbors(g, x);
|
|
x.push(this.particles[f]);
|
|
for (var C = x.length, B = 0, E = 0; E !== C; E++) {
|
|
g.position.vsub(x[E].position, m);
|
|
var G = m.norm(),
|
|
G = this.w(G),
|
|
B = B + x[E].mass * G
|
|
}
|
|
this.densities[f] = B;
|
|
this.pressures[f] = d * d * (this.densities[f] - this.density)
|
|
}
|
|
for (f = 0; f !== c; f++) {
|
|
d = this.particles[f];
|
|
l.set(0, 0, 0);
|
|
j.set(0, 0, 0);
|
|
x = this.neighbors[f];
|
|
C = x.length;
|
|
for (E = 0; E !== C; E++) B = x[E], d.position.vsub(B.position, n), G = n.norm(), g = -B.mass * (this.pressures[f] / (this.densities[f] * this.densities[f] + e) + this.pressures[E] / (this.densities[E] * this.densities[E] + e)), this.gradw(n, q), q.mult(g, q), l.vadd(q, l), B.velocity.vsub(d.velocity, r), r.mult(1 / (1E-4 + this.densities[f] * this.densities[E]) * this.viscosity * B.mass, r), g = this.nablaw(G), r.mult(g, r), j.vadd(r, j);
|
|
j.mult(d.mass, j);
|
|
l.mult(d.mass, l);
|
|
d.force.vadd(j, d.force);
|
|
d.force.vadd(l, d.force)
|
|
}
|
|
};
|
|
d.prototype.w = function(c) {
|
|
var d =
|
|
this.smoothingRadius;
|
|
return 315 / (64 * Math.PI * Math.pow(d, 9)) * Math.pow(d * d - c * c, 3)
|
|
};
|
|
d.prototype.gradw = function(c, d) {
|
|
var e = c.norm(),
|
|
j = this.smoothingRadius;
|
|
c.mult(945 / (32 * Math.PI * Math.pow(j, 9)) * Math.pow(j * j - e * e, 2), d)
|
|
};
|
|
d.prototype.nablaw = function(c) {
|
|
var d = this.smoothingRadius;
|
|
return 945 / (32 * Math.PI * Math.pow(d, 9)) * (d * d - c * c) * (7 * c * c - 3 * d * d)
|
|
}
|
|
}, {
|
|
"../material/Material": 25,
|
|
"../math/Quaternion": 28,
|
|
"../math/Vec3": 30,
|
|
"../objects/Body": 31,
|
|
"../shapes/Particle": 41,
|
|
"../shapes/Shape": 43
|
|
}],
|
|
35: [function(c, e) {
|
|
function d(c,
|
|
d, e) {
|
|
e = e || {};
|
|
this.restLength = "number" === typeof e.restLength ? e.restLength : 1;
|
|
this.stiffness = e.stiffness || 100;
|
|
this.damping = e.damping || 1;
|
|
this.bodyA = c;
|
|
this.bodyB = d;
|
|
this.localAnchorA = new g;
|
|
this.localAnchorB = new g;
|
|
e.localAnchorA && this.localAnchorA.copy(e.localAnchorA);
|
|
e.localAnchorB && this.localAnchorB.copy(e.localAnchorB);
|
|
e.worldAnchorA && this.setWorldAnchorA(e.worldAnchorA);
|
|
e.worldAnchorB && this.setWorldAnchorB(e.worldAnchorB)
|
|
}
|
|
var g = c("../math/Vec3");
|
|
e.exports = d;
|
|
d.prototype.setWorldAnchorA = function(c) {
|
|
this.bodyA.pointToLocalFrame(c,
|
|
this.localAnchorA)
|
|
};
|
|
d.prototype.setWorldAnchorB = function(c) {
|
|
this.bodyB.pointToLocalFrame(c, this.localAnchorB)
|
|
};
|
|
d.prototype.getWorldAnchorA = function(c) {
|
|
this.bodyA.pointToWorldFrame(this.localAnchorA, c)
|
|
};
|
|
d.prototype.getWorldAnchorB = function(c) {
|
|
this.bodyB.pointToWorldFrame(this.localAnchorB, c)
|
|
};
|
|
var f = new g,
|
|
m = new g,
|
|
l = new g,
|
|
j = new g,
|
|
q = new g,
|
|
n = new g,
|
|
r = new g,
|
|
s = new g,
|
|
t = new g,
|
|
u = new g,
|
|
y = new g;
|
|
d.prototype.applyForce = function() {
|
|
var c = this.stiffness,
|
|
d = this.damping,
|
|
e = this.restLength,
|
|
g = this.bodyA,
|
|
E = this.bodyB;
|
|
this.getWorldAnchorA(q);
|
|
this.getWorldAnchorB(n);
|
|
q.vsub(g.position, r);
|
|
n.vsub(E.position, s);
|
|
n.vsub(q, f);
|
|
var G = f.norm();
|
|
m.copy(f);
|
|
m.normalize();
|
|
E.velocity.vsub(g.velocity, l);
|
|
E.angularVelocity.cross(s, y);
|
|
l.vadd(y, l);
|
|
g.angularVelocity.cross(r, y);
|
|
l.vsub(y, l);
|
|
m.mult(-c * (G - e) - d * l.dot(m), j);
|
|
g.force.vsub(j, g.force);
|
|
E.force.vadd(j, E.force);
|
|
r.cross(j, t);
|
|
s.cross(j, u);
|
|
g.torque.vsub(t, g.torque);
|
|
E.torque.vadd(u, E.torque)
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30
|
|
}],
|
|
36: [function(c, e) {
|
|
function d(c) {
|
|
c = l.defaults(c, {
|
|
chassisConnectionPointLocal: new g,
|
|
chassisConnectionPointWorld: new g,
|
|
directionLocal: new g,
|
|
directionWorld: new g,
|
|
axleLocal: new g,
|
|
axleWorld: new g,
|
|
suspensionRestLength: 1,
|
|
suspensionMaxLength: 2,
|
|
radius: 1,
|
|
suspensionStiffness: 100,
|
|
dampingCompression: 10,
|
|
dampingRelaxation: 10,
|
|
frictionSlip: 1E4,
|
|
steering: 0,
|
|
rotation: 0,
|
|
deltaRotation: 0,
|
|
rollInfluence: 0.01,
|
|
maxSuspensionForce: Number.MAX_VALUE,
|
|
isFrontWheel: !0,
|
|
clippedInvContactDotSuspension: 1,
|
|
suspensionRelativeVelocity: 0,
|
|
suspensionForce: 0,
|
|
skidInfo: 0,
|
|
suspensionLength: 0,
|
|
maxSuspensionTravel: 1,
|
|
useCustomSlidingRotationalSpeed: !1,
|
|
customSlidingRotationalSpeed: -0.1
|
|
});
|
|
this.maxSuspensionTravel = c.maxSuspensionTravel;
|
|
this.customSlidingRotationalSpeed = c.customSlidingRotationalSpeed;
|
|
this.useCustomSlidingRotationalSpeed = c.useCustomSlidingRotationalSpeed;
|
|
this.sliding = !1;
|
|
this.chassisConnectionPointLocal = c.chassisConnectionPointLocal.clone();
|
|
this.chassisConnectionPointWorld = c.chassisConnectionPointWorld.clone();
|
|
this.directionLocal = c.directionLocal.clone();
|
|
this.directionWorld = c.directionWorld.clone();
|
|
this.axleLocal = c.axleLocal.clone();
|
|
this.axleWorld = c.axleWorld.clone();
|
|
this.suspensionRestLength = c.suspensionRestLength;
|
|
this.suspensionMaxLength = c.suspensionMaxLength;
|
|
this.radius = c.radius;
|
|
this.suspensionStiffness = c.suspensionStiffness;
|
|
this.dampingCompression = c.dampingCompression;
|
|
this.dampingRelaxation = c.dampingRelaxation;
|
|
this.frictionSlip = c.frictionSlip;
|
|
this.deltaRotation = this.rotation = this.steering = 0;
|
|
this.rollInfluence = c.rollInfluence;
|
|
this.maxSuspensionForce = c.maxSuspensionForce;
|
|
this.brake = this.engineForce = 0;
|
|
this.isFrontWheel = c.isFrontWheel;
|
|
this.clippedInvContactDotSuspension =
|
|
1;
|
|
this.forwardImpulse = this.sideImpulse = this.suspensionLength = this.skidInfo = this.suspensionForce = this.suspensionRelativeVelocity = 0;
|
|
this.raycastResult = new m;
|
|
this.worldTransform = new f;
|
|
this.isInContact = !1
|
|
}
|
|
var g = c("../math/Vec3"),
|
|
f = c("../math/Transform"),
|
|
m = c("../collision/RaycastResult"),
|
|
l = c("../utils/Utils");
|
|
e.exports = d;
|
|
var j = new g,
|
|
q = new g,
|
|
j = new g;
|
|
d.prototype.updateWheel = function(c) {
|
|
var d = this.raycastResult;
|
|
if (this.isInContact) {
|
|
var e = d.hitNormalWorld.dot(d.directionWorld);
|
|
d.hitPointWorld.vsub(c.position,
|
|
q);
|
|
c.getVelocityAtWorldPoint(q, j);
|
|
c = d.hitNormalWorld.dot(j); - 0.1 <= e ? (this.suspensionRelativeVelocity = 0, this.clippedInvContactDotSuspension = 10) : (e = -1 / e, this.suspensionRelativeVelocity = c * e, this.clippedInvContactDotSuspension = e)
|
|
} else d.suspensionLength = this.suspensionRestLength, this.suspensionRelativeVelocity = 0, d.directionWorld.scale(-1, d.hitNormalWorld), this.clippedInvContactDotSuspension = 1
|
|
}
|
|
}, {
|
|
"../collision/RaycastResult": 10,
|
|
"../math/Transform": 29,
|
|
"../math/Vec3": 30,
|
|
"../utils/Utils": 53
|
|
}],
|
|
37: [function(c,
|
|
e) {
|
|
function d(c) {
|
|
g.call(this);
|
|
this.type = g.types.BOX;
|
|
this.halfExtents = c;
|
|
this.convexPolyhedronRepresentation = null;
|
|
this.updateConvexPolyhedronRepresentation();
|
|
this.updateBoundingSphereRadius()
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Shape"),
|
|
f = c("../math/Vec3"),
|
|
m = c("./ConvexPolyhedron");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
d.prototype.updateConvexPolyhedronRepresentation = function() {
|
|
var c = this.halfExtents.x,
|
|
d = this.halfExtents.y,
|
|
e = this.halfExtents.z,
|
|
c = [new f(-c, -d, -e), new f(c, -d, -e), new f(c, d, -e), new f(-c, d, -e),
|
|
new f(-c, -d, e), new f(c, -d, e), new f(c, d, e), new f(-c, d, e)
|
|
];
|
|
new f(0, 0, 1);
|
|
new f(0, 1, 0);
|
|
new f(1, 0, 0);
|
|
this.convexPolyhedronRepresentation = c = new m(c, [
|
|
[3, 2, 1, 0],
|
|
[4, 5, 6, 7],
|
|
[5, 4, 0, 1],
|
|
[2, 3, 7, 6],
|
|
[0, 4, 7, 3],
|
|
[1, 2, 6, 5]
|
|
]);
|
|
c.material = this.material
|
|
};
|
|
d.prototype.calculateLocalInertia = function(c, e) {
|
|
e = e || new f;
|
|
d.calculateInertia(this.halfExtents, c, e);
|
|
return e
|
|
};
|
|
d.calculateInertia = function(c, d, e) {
|
|
e.x = 1 / 12 * d * (4 * c.y * c.y + 4 * c.z * c.z);
|
|
e.y = 1 / 12 * d * (4 * c.x * c.x + 4 * c.z * c.z);
|
|
e.z = 1 / 12 * d * (4 * c.y * c.y + 4 * c.x * c.x)
|
|
};
|
|
d.prototype.getSideNormals =
|
|
function(c, d) {
|
|
var e = this.halfExtents;
|
|
c[0].set(e.x, 0, 0);
|
|
c[1].set(0, e.y, 0);
|
|
c[2].set(0, 0, e.z);
|
|
c[3].set(-e.x, 0, 0);
|
|
c[4].set(0, -e.y, 0);
|
|
c[5].set(0, 0, -e.z);
|
|
if (void 0 !== d)
|
|
for (e = 0; e !== c.length; e++) d.vmult(c[e], c[e]);
|
|
return c
|
|
};
|
|
d.prototype.volume = function() {
|
|
return 8 * this.halfExtents.x * this.halfExtents.y * this.halfExtents.z
|
|
};
|
|
d.prototype.updateBoundingSphereRadius = function() {
|
|
this.boundingSphereRadius = this.halfExtents.norm()
|
|
};
|
|
var l = new f;
|
|
new f;
|
|
d.prototype.forEachWorldCorner = function(c, d, e) {
|
|
for (var j = this.halfExtents,
|
|
j = [
|
|
[j.x, j.y, j.z],
|
|
[-j.x, j.y, j.z],
|
|
[-j.x, -j.y, j.z],
|
|
[-j.x, -j.y, -j.z],
|
|
[j.x, -j.y, -j.z],
|
|
[j.x, j.y, -j.z],
|
|
[-j.x, j.y, -j.z],
|
|
[j.x, -j.y, j.z]
|
|
], f = 0; f < j.length; f++) l.set(j[f][0], j[f][1], j[f][2]), d.vmult(l, l), c.vadd(l, l), e(l.x, l.y, l.z)
|
|
};
|
|
var j = [new f, new f, new f, new f, new f, new f, new f, new f];
|
|
d.prototype.calculateWorldAABB = function(c, d, e, f) {
|
|
var g = this.halfExtents;
|
|
j[0].set(g.x, g.y, g.z);
|
|
j[1].set(-g.x, g.y, g.z);
|
|
j[2].set(-g.x, -g.y, g.z);
|
|
j[3].set(-g.x, -g.y, -g.z);
|
|
j[4].set(g.x, -g.y, -g.z);
|
|
j[5].set(g.x, g.y, -g.z);
|
|
j[6].set(-g.x,
|
|
g.y, -g.z);
|
|
j[7].set(g.x, -g.y, g.z);
|
|
var l = j[0];
|
|
d.vmult(l, l);
|
|
c.vadd(l, l);
|
|
f.copy(l);
|
|
e.copy(l);
|
|
for (g = 1; 8 > g; g++) {
|
|
l = j[g];
|
|
d.vmult(l, l);
|
|
c.vadd(l, l);
|
|
var m = l.x,
|
|
z = l.y,
|
|
l = l.z;
|
|
m > f.x && (f.x = m);
|
|
z > f.y && (f.y = z);
|
|
l > f.z && (f.z = l);
|
|
m < e.x && (e.x = m);
|
|
z < e.y && (e.y = z);
|
|
l < e.z && (e.z = l)
|
|
}
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30,
|
|
"./ConvexPolyhedron": 38,
|
|
"./Shape": 43
|
|
}],
|
|
38: [function(c, e) {
|
|
function d(c, d, e) {
|
|
g.call(this);
|
|
this.type = g.types.CONVEXPOLYHEDRON;
|
|
this.vertices = c || [];
|
|
this.worldVertices = [];
|
|
this.worldVerticesNeedsUpdate = !0;
|
|
this.faces = d || [];
|
|
this.faceNormals = [];
|
|
this.computeNormals();
|
|
this.worldFaceNormalsNeedsUpdate = !0;
|
|
this.worldFaceNormals = [];
|
|
this.uniqueEdges = [];
|
|
this.uniqueAxes = e ? e.slice() : null;
|
|
this.computeEdges();
|
|
this.updateBoundingSphereRadius()
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Shape"),
|
|
f = c("../math/Vec3");
|
|
c("../math/Quaternion");
|
|
var m = c("../math/Transform");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
var l = new f;
|
|
d.prototype.computeEdges = function() {
|
|
for (var c = this.faces, d = this.vertices, e = this.uniqueEdges, j = e.length = 0; j !== c.length; j++)
|
|
for (var g = c[j], f = g.length,
|
|
n = 0; n !== f; n++) {
|
|
d[g[n]].vsub(d[g[(n + 1) % f]], l);
|
|
l.normalize();
|
|
for (var q = !1, r = 0; r !== e.length; r++)
|
|
if (e[r].almostEquals(l) || e[r].almostEquals(l)) {
|
|
q = !0;
|
|
break
|
|
} q || e.push(l.clone())
|
|
}
|
|
};
|
|
d.prototype.computeNormals = function() {
|
|
this.faceNormals.length = this.faces.length;
|
|
for (var c = 0; c < this.faces.length; c++) {
|
|
for (var d = 0; d < this.faces[c].length; d++)
|
|
if (!this.vertices[this.faces[c][d]]) throw Error("Vertex " + this.faces[c][d] + " not found!");
|
|
d = this.faceNormals[c] || new f;
|
|
this.getFaceNormal(c, d);
|
|
d.negate(d);
|
|
this.faceNormals[c] =
|
|
d;
|
|
if (0 > d.dot(this.vertices[this.faces[c][0]])) {
|
|
console.error(".faceNormals[" + c + "] = Vec3(" + d.toString() + ") looks like it points into the shape? The vertices follow. Make sure they are ordered CCW around the normal, using the right hand rule.");
|
|
for (d = 0; d < this.faces[c].length; d++) console.warn(".vertices[" + this.faces[c][d] + "] = Vec3(" + this.vertices[this.faces[c][d]].toString() + ")")
|
|
}
|
|
}
|
|
};
|
|
var j = new f,
|
|
q = new f;
|
|
d.computeNormal = function(c, d, e, g) {
|
|
d.vsub(c, q);
|
|
e.vsub(d, j);
|
|
j.cross(q, g);
|
|
g.isZero() || g.normalize()
|
|
};
|
|
d.prototype.getFaceNormal = function(c, e) {
|
|
var j = this.faces[c];
|
|
return d.computeNormal(this.vertices[j[0]], this.vertices[j[1]], this.vertices[j[2]], e)
|
|
};
|
|
var n = new f;
|
|
d.prototype.clipAgainstHull = function(c, d, e, j, g, q, l, r, m) {
|
|
for (var s = -1, t = -Number.MAX_VALUE, u = 0; u < e.faces.length; u++) {
|
|
n.copy(e.faceNormals[u]);
|
|
g.vmult(n, n);
|
|
var y = n.dot(q);
|
|
y > t && (t = y, s = u)
|
|
}
|
|
for (var t = [], u = e.faces[s], y = u.length, z = 0; z < y; z++) {
|
|
var x = e.vertices[u[z]],
|
|
D = new f;
|
|
D.copy(x);
|
|
g.vmult(D, D);
|
|
j.vadd(D, D);
|
|
t.push(D)
|
|
}
|
|
0 <= s && this.clipFaceAgainstHull(q,
|
|
c, d, t, l, r, m)
|
|
};
|
|
var r = new f,
|
|
s = new f,
|
|
t = new f,
|
|
u = new f,
|
|
y = new f,
|
|
z = new f;
|
|
d.prototype.findSeparatingAxis = function(c, d, e, j, g, f, n, q) {
|
|
var l = Number.MAX_VALUE,
|
|
m = 0;
|
|
if (this.uniqueAxes)
|
|
for (x = 0; x !== this.uniqueAxes.length; x++) {
|
|
e.vmult(this.uniqueAxes[x], r);
|
|
A = this.testSepAxis(r, c, d, e, j, g);
|
|
if (!1 === A) return !1;
|
|
A < l && (l = A, f.copy(r))
|
|
} else
|
|
for (var D = n ? n.length : this.faces.length, x = 0; x < D; x++) {
|
|
A = n ? n[x] : x;
|
|
r.copy(this.faceNormals[A]);
|
|
e.vmult(r, r);
|
|
var A = this.testSepAxis(r, c, d, e, j, g);
|
|
if (!1 === A) return !1;
|
|
A < l && (l = A, f.copy(r))
|
|
}
|
|
if (c.uniqueAxes)
|
|
for (x =
|
|
0; x !== c.uniqueAxes.length; x++) {
|
|
g.vmult(c.uniqueAxes[x], s);
|
|
m++;
|
|
A = this.testSepAxis(s, c, d, e, j, g);
|
|
if (!1 === A) return !1;
|
|
A < l && (l = A, f.copy(s))
|
|
} else {
|
|
n = q ? q.length : c.faces.length;
|
|
for (x = 0; x < n; x++) {
|
|
A = q ? q[x] : x;
|
|
s.copy(c.faceNormals[A]);
|
|
g.vmult(s, s);
|
|
m++;
|
|
A = this.testSepAxis(s, c, d, e, j, g);
|
|
if (!1 === A) return !1;
|
|
A < l && (l = A, f.copy(s))
|
|
}
|
|
}
|
|
for (q = 0; q !== this.uniqueEdges.length; q++) {
|
|
e.vmult(this.uniqueEdges[q], u);
|
|
for (m = 0; m !== c.uniqueEdges.length; m++)
|
|
if (g.vmult(c.uniqueEdges[m], y), u.cross(y, z), !z.almostZero()) {
|
|
z.normalize();
|
|
x = this.testSepAxis(z,
|
|
c, d, e, j, g);
|
|
if (!1 === x) return !1;
|
|
x < l && (l = x, f.copy(z))
|
|
}
|
|
}
|
|
j.vsub(d, t);
|
|
0 < t.dot(f) && f.negate(f);
|
|
return !0
|
|
};
|
|
var x = [],
|
|
C = [];
|
|
d.prototype.testSepAxis = function(c, e, j, g, f, n) {
|
|
d.project(this, c, j, g, x);
|
|
d.project(e, c, f, n, C);
|
|
j = x[0];
|
|
c = x[1];
|
|
e = C[0];
|
|
g = C[1];
|
|
if (j < g || e < c) return !1;
|
|
j -= g;
|
|
c = e - c;
|
|
return j < c ? j : c
|
|
};
|
|
var B = new f,
|
|
E = new f;
|
|
d.prototype.calculateLocalInertia = function(c, d) {
|
|
this.computeLocalAABB(B, E);
|
|
var e = E.x - B.x,
|
|
j = E.y - B.y,
|
|
g = E.z - B.z;
|
|
d.x = 1 / 12 * c * (4 * j * j + 4 * g * g);
|
|
d.y = 1 / 12 * c * (4 * e * e + 4 * g * g);
|
|
d.z = 1 / 12 * c * (4 * j * j + 4 * e * e)
|
|
};
|
|
d.prototype.getPlaneConstantOfFace =
|
|
function(c) {
|
|
return -this.faceNormals[c].dot(this.vertices[this.faces[c][0]])
|
|
};
|
|
var G = new f,
|
|
D = new f,
|
|
A = new f,
|
|
H = new f,
|
|
O = new f,
|
|
K = new f,
|
|
S = new f,
|
|
J = new f;
|
|
d.prototype.clipFaceAgainstHull = function(c, d, e, j, g, f, n) {
|
|
for (var q = [], l = -1, r = Number.MAX_VALUE, m = 0; m < this.faces.length; m++) {
|
|
G.copy(this.faceNormals[m]);
|
|
e.vmult(G, G);
|
|
var s = G.dot(c);
|
|
s < r && (r = s, l = m)
|
|
}
|
|
if (!(0 > l)) {
|
|
c = this.faces[l];
|
|
c.connectedFaces = [];
|
|
for (r = 0; r < this.faces.length; r++)
|
|
for (m = 0; m < this.faces[r].length; m++) - 1 !== c.indexOf(this.faces[r][m]) && r !== l && -1 === c.connectedFaces.indexOf(r) &&
|
|
c.connectedFaces.push(r);
|
|
r = c.length;
|
|
for (m = 0; m < r; m++) {
|
|
s = this.vertices[c[m]];
|
|
s.vsub(this.vertices[c[(m + 1) % r]], D);
|
|
A.copy(D);
|
|
e.vmult(A, A);
|
|
d.vadd(A, A);
|
|
H.copy(this.faceNormals[l]);
|
|
e.vmult(H, H);
|
|
d.vadd(H, H);
|
|
A.cross(H, O);
|
|
O.negate(O);
|
|
K.copy(s);
|
|
e.vmult(K, K);
|
|
d.vadd(K, K);
|
|
K.dot(O);
|
|
s = c.connectedFaces[m];
|
|
S.copy(this.faceNormals[s]);
|
|
s = this.getPlaneConstantOfFace(s);
|
|
J.copy(S);
|
|
e.vmult(J, J);
|
|
s -= J.dot(d);
|
|
for (this.clipFaceAgainstPlane(j, q, J, s); j.length;) j.shift();
|
|
for (; q.length;) j.push(q.shift())
|
|
}
|
|
S.copy(this.faceNormals[l]);
|
|
s = this.getPlaneConstantOfFace(l);
|
|
J.copy(S);
|
|
e.vmult(J, J);
|
|
s -= J.dot(d);
|
|
for (r = 0; r < j.length; r++) d = J.dot(j[r]) + s, d <= g && (console.log("clamped: depth=" + d + " to minDist=" + (g + "")), d = g), d <= f && (e = j[r], 0 >= d && n.push({
|
|
point: e,
|
|
normal: J,
|
|
depth: d
|
|
}))
|
|
}
|
|
};
|
|
d.prototype.clipFaceAgainstPlane = function(c, d, e, j) {
|
|
var g, n, q = c.length;
|
|
if (2 > q) return d;
|
|
var l = c[c.length - 1],
|
|
r = c[0];
|
|
g = e.dot(l) + j;
|
|
for (var m = 0; m < q; m++) {
|
|
r = c[m];
|
|
n = e.dot(r) + j;
|
|
if (0 > g) {
|
|
if (0 > n) {
|
|
var s = new f;
|
|
s.copy(r)
|
|
} else s = new f, l.lerp(r, g / (g - n), s);
|
|
d.push(s)
|
|
} else 0 > n && (s = new f, l.lerp(r,
|
|
g / (g - n), s), d.push(s), d.push(r));
|
|
l = r;
|
|
g = n
|
|
}
|
|
return d
|
|
};
|
|
d.prototype.computeWorldVertices = function(c, d) {
|
|
for (var e = this.vertices.length; this.worldVertices.length < e;) this.worldVertices.push(new f);
|
|
for (var j = this.vertices, g = this.worldVertices, n = 0; n !== e; n++) d.vmult(j[n], g[n]), c.vadd(g[n], g[n]);
|
|
this.worldVerticesNeedsUpdate = !1
|
|
};
|
|
new f;
|
|
d.prototype.computeLocalAABB = function(c, d) {
|
|
var e = this.vertices.length,
|
|
j = this.vertices;
|
|
c.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE);
|
|
d.set(-Number.MAX_VALUE, -Number.MAX_VALUE,
|
|
-Number.MAX_VALUE);
|
|
for (var g = 0; g < e; g++) {
|
|
var f = j[g];
|
|
f.x < c.x ? c.x = f.x : f.x > d.x && (d.x = f.x);
|
|
f.y < c.y ? c.y = f.y : f.y > d.y && (d.y = f.y);
|
|
f.z < c.z ? c.z = f.z : f.z > d.z && (d.z = f.z)
|
|
}
|
|
};
|
|
d.prototype.computeWorldFaceNormals = function(c) {
|
|
for (var d = this.faceNormals.length; this.worldFaceNormals.length < d;) this.worldFaceNormals.push(new f);
|
|
for (var e = this.faceNormals, j = this.worldFaceNormals, g = 0; g !== d; g++) c.vmult(e[g], j[g]);
|
|
this.worldFaceNormalsNeedsUpdate = !1
|
|
};
|
|
d.prototype.updateBoundingSphereRadius = function() {
|
|
for (var c = 0, d = this.vertices,
|
|
e = 0, j = d.length; e !== j; e++) {
|
|
var g = d[e].norm2();
|
|
g > c && (c = g)
|
|
}
|
|
this.boundingSphereRadius = Math.sqrt(c)
|
|
};
|
|
var Y = new f;
|
|
d.prototype.calculateWorldAABB = function(c, d, e, j) {
|
|
for (var g = this.vertices.length, f = this.vertices, n, q, l, r, m, s, t = 0; t < g; t++) {
|
|
Y.copy(f[t]);
|
|
d.vmult(Y, Y);
|
|
c.vadd(Y, Y);
|
|
var u = Y;
|
|
if (u.x < n || void 0 === n) n = u.x;
|
|
else if (u.x > r || void 0 === r) r = u.x;
|
|
if (u.y < q || void 0 === q) q = u.y;
|
|
else if (u.y > m || void 0 === m) m = u.y;
|
|
if (u.z < l || void 0 === l) l = u.z;
|
|
else if (u.z > s || void 0 === s) s = u.z
|
|
}
|
|
e.set(n, q, l);
|
|
j.set(r, m, s)
|
|
};
|
|
d.prototype.volume = function() {
|
|
return 4 *
|
|
Math.PI * this.boundingSphereRadius / 3
|
|
};
|
|
d.prototype.getAveragePointLocal = function(c) {
|
|
c = c || new f;
|
|
for (var d = this.vertices.length, e = this.vertices, j = 0; j < d; j++) c.vadd(e[j], c);
|
|
c.mult(1 / d, c);
|
|
return c
|
|
};
|
|
d.prototype.transformAllPoints = function(c, d) {
|
|
var e = this.vertices.length,
|
|
j = this.vertices;
|
|
if (d) {
|
|
for (var g = 0; g < e; g++) {
|
|
var f = j[g];
|
|
d.vmult(f, f)
|
|
}
|
|
for (g = 0; g < this.faceNormals.length; g++) f = this.faceNormals[g], d.vmult(f, f)
|
|
}
|
|
if (c)
|
|
for (g = 0; g < e; g++) f = j[g], f.vadd(c, f)
|
|
};
|
|
var ca = new f,
|
|
F = new f,
|
|
N = new f;
|
|
d.prototype.pointIsInside = function(c) {
|
|
var d =
|
|
this.vertices.length,
|
|
e = this.vertices,
|
|
j = this.faces,
|
|
g = this.faceNormals,
|
|
f = this.faces.length;
|
|
this.getAveragePointLocal(ca);
|
|
for (var n = 0; n < f; n++) {
|
|
var d = g[n],
|
|
q = e[j[n][0]],
|
|
l = F;
|
|
c.vsub(q, l);
|
|
var l = d.dot(l),
|
|
r = N;
|
|
ca.vsub(q, r);
|
|
d = d.dot(r);
|
|
if (0 > l && 0 < d || 0 < l && 0 > d) return !1
|
|
}
|
|
return -1
|
|
};
|
|
new f;
|
|
var da = new f,
|
|
T = new f;
|
|
d.project = function(c, d, e, j, g) {
|
|
var f = c.vertices.length,
|
|
n = 0,
|
|
q = 0;
|
|
c = c.vertices;
|
|
T.setZero();
|
|
m.vectorToLocalFrame(e, j, d, da);
|
|
m.pointToLocalFrame(e, j, T, T);
|
|
d = T.dot(da);
|
|
q = n = c[0].dot(da);
|
|
for (e = 1; e < f; e++) j = c[e].dot(da), j > n &&
|
|
(n = j), j < q && (q = j);
|
|
q -= d;
|
|
n -= d;
|
|
q > n && (f = q, q = n, n = f);
|
|
g[0] = n;
|
|
g[1] = q
|
|
}
|
|
}, {
|
|
"../math/Quaternion": 28,
|
|
"../math/Transform": 29,
|
|
"../math/Vec3": 30,
|
|
"./Shape": 43
|
|
}],
|
|
39: [function(c, e) {
|
|
function d(c, d, e, n) {
|
|
var r = [],
|
|
s = [],
|
|
t = [],
|
|
u = [],
|
|
y = [],
|
|
z = Math.cos,
|
|
x = Math.sin;
|
|
r.push(new f(d * z(0), d * x(0), 0.5 * -e));
|
|
u.push(0);
|
|
r.push(new f(c * z(0), c * x(0), 0.5 * e));
|
|
y.push(1);
|
|
for (var C = 0; C < n; C++) {
|
|
var B = 2 * Math.PI / n * (C + 1),
|
|
E = 2 * Math.PI / n * (C + 0.5);
|
|
C < n - 1 ? (r.push(new f(d * z(B), d * x(B), 0.5 * -e)), u.push(2 * C + 2), r.push(new f(c * z(B), c * x(B), 0.5 * e)), y.push(2 * C + 3), t.push([2 *
|
|
C + 2, 2 * C + 3, 2 * C + 1, 2 * C
|
|
])) : t.push([0, 1, 2 * C + 1, 2 * C]);
|
|
(1 === n % 2 || C < n / 2) && s.push(new f(z(E), x(E), 0))
|
|
}
|
|
t.push(y);
|
|
s.push(new f(0, 0, 1));
|
|
c = [];
|
|
for (C = 0; C < u.length; C++) c.push(u[u.length - C - 1]);
|
|
t.push(c);
|
|
this.type = g.types.CONVEXPOLYHEDRON;
|
|
m.call(this, r, t, s)
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Shape"),
|
|
f = c("../math/Vec3");
|
|
c("../math/Quaternion");
|
|
var m = c("./ConvexPolyhedron");
|
|
d.prototype = new m
|
|
}, {
|
|
"../math/Quaternion": 28,
|
|
"../math/Vec3": 30,
|
|
"./ConvexPolyhedron": 38,
|
|
"./Shape": 43
|
|
}],
|
|
40: [function(c, e) {
|
|
function d(c, d) {
|
|
d = l.defaults(d, {
|
|
maxValue: null,
|
|
minValue: null,
|
|
elementSize: 1
|
|
});
|
|
this.data = c;
|
|
this.maxValue = d.maxValue;
|
|
this.minValue = d.minValue;
|
|
this.elementSize = d.elementSize;
|
|
null === d.minValue && this.updateMinValue();
|
|
null === d.maxValue && this.updateMaxValue();
|
|
this.cacheEnabled = !0;
|
|
g.call(this);
|
|
this.pillarConvex = new f;
|
|
this.pillarOffset = new m;
|
|
this.type = g.types.HEIGHTFIELD;
|
|
this.updateBoundingSphereRadius();
|
|
this._cachedPillars = {}
|
|
}
|
|
var g = c("./Shape"),
|
|
f = c("./ConvexPolyhedron"),
|
|
m = c("../math/Vec3"),
|
|
l = c("../utils/Utils");
|
|
e.exports = d;
|
|
d.prototype = new g;
|
|
d.prototype.update =
|
|
function() {
|
|
this._cachedPillars = {}
|
|
};
|
|
d.prototype.updateMinValue = function() {
|
|
for (var c = this.data, d = c[0][0], e = 0; e !== c.length; e++)
|
|
for (var g = 0; g !== c[e].length; g++) {
|
|
var f = c[e][g];
|
|
f < d && (d = f)
|
|
}
|
|
this.minValue = d
|
|
};
|
|
d.prototype.updateMaxValue = function() {
|
|
for (var c = this.data, d = c[0][0], e = 0; e !== c.length; e++)
|
|
for (var g = 0; g !== c[e].length; g++) {
|
|
var f = c[e][g];
|
|
f > d && (d = f)
|
|
}
|
|
this.maxValue = d
|
|
};
|
|
d.prototype.setHeightValueAtIndex = function(c, d, e) {
|
|
this.data[c][d] = e;
|
|
this.clearCachedConvexTrianglePillar(c, d, !1);
|
|
0 < c && (this.clearCachedConvexTrianglePillar(c -
|
|
1, d, !0), this.clearCachedConvexTrianglePillar(c - 1, d, !1));
|
|
0 < d && (this.clearCachedConvexTrianglePillar(c, d - 1, !0), this.clearCachedConvexTrianglePillar(c, d - 1, !1));
|
|
0 < d && 0 < c && this.clearCachedConvexTrianglePillar(c - 1, d - 1, !0)
|
|
};
|
|
d.prototype.getRectMinMax = function(c, d, e, g, f) {
|
|
f = f || [];
|
|
for (var l = this.data, m = this.minValue; c <= e; c++)
|
|
for (var y = d; y <= g; y++) {
|
|
var z = l[c][y];
|
|
z > m && (m = z)
|
|
}
|
|
f[0] = this.minValue;
|
|
f[1] = m
|
|
};
|
|
d.prototype.getIndexOfPosition = function(c, d, e, g) {
|
|
var f = this.elementSize,
|
|
l = this.data;
|
|
c = Math.floor(c / f);
|
|
d = Math.floor(d /
|
|
f);
|
|
e[0] = c;
|
|
e[1] = d;
|
|
g && (0 > c && (c = 0), 0 > d && (d = 0), c >= l.length - 1 && (c = l.length - 1), d >= l[0].length - 1 && (d = l[0].length - 1));
|
|
return 0 > c || 0 > d || c >= l.length - 1 || d >= l[0].length - 1 ? !1 : !0
|
|
};
|
|
d.prototype.getHeightAt = function(c, d, e) {
|
|
var g = [];
|
|
this.getIndexOfPosition(c, d, g, e);
|
|
c = [];
|
|
this.getRectMinMax(g[0], g[1] + 1, g[0], g[1] + 1, c);
|
|
return (c[0] + c[1]) / 2
|
|
};
|
|
d.prototype.getCacheConvexTrianglePillarKey = function(c, d, e) {
|
|
return c + "_" + d + "_" + (e ? 1 : 0)
|
|
};
|
|
d.prototype.getCachedConvexTrianglePillar = function(c, d, e) {
|
|
return this._cachedPillars[this.getCacheConvexTrianglePillarKey(c,
|
|
d, e)]
|
|
};
|
|
d.prototype.setCachedConvexTrianglePillar = function(c, d, e, g, f) {
|
|
this._cachedPillars[this.getCacheConvexTrianglePillarKey(c, d, e)] = {
|
|
convex: g,
|
|
offset: f
|
|
}
|
|
};
|
|
d.prototype.clearCachedConvexTrianglePillar = function(c, d, e) {
|
|
delete this._cachedPillars[this.getCacheConvexTrianglePillarKey(c, d, e)]
|
|
};
|
|
d.prototype.getConvexTrianglePillar = function(c, d, e) {
|
|
var g = this.pillarConvex,
|
|
l = this.pillarOffset;
|
|
if (this.cacheEnabled) {
|
|
var t = this.getCachedConvexTrianglePillar(c, d, e);
|
|
if (t) {
|
|
this.pillarConvex = t.convex;
|
|
this.pillarOffset =
|
|
t.offset;
|
|
return
|
|
}
|
|
g = new f;
|
|
l = new m;
|
|
this.pillarConvex = g;
|
|
this.pillarOffset = l
|
|
}
|
|
var t = this.data,
|
|
u = this.elementSize,
|
|
y = g.faces;
|
|
g.vertices.length = 6;
|
|
for (var z = 0; 6 > z; z++) g.vertices[z] || (g.vertices[z] = new m);
|
|
y.length = 5;
|
|
for (z = 0; 5 > z; z++) y[z] || (y[z] = []);
|
|
var z = g.vertices,
|
|
x = (Math.min(t[c][d], t[c + 1][d], t[c][d + 1], t[c + 1][d + 1]) - this.minValue) / 2 + this.minValue;
|
|
e ? (l.set((c + 0.75) * u, (d + 0.75) * u, x), z[0].set(0.25 * u, 0.25 * u, t[c + 1][d + 1] - x), z[1].set(-0.75 * u, 0.25 * u, t[c][d + 1] - x), z[2].set(0.25 * u, -0.75 * u, t[c + 1][d] - x), z[3].set(0.25 * u, 0.25 *
|
|
u, -x - 1), z[4].set(-0.75 * u, 0.25 * u, -x - 1), z[5].set(0.25 * u, -0.75 * u, -x - 1), y[0][0] = 0, y[0][1] = 1, y[0][2] = 2, y[1][0] = 5, y[1][1] = 4, y[1][2] = 3, y[2][0] = 2, y[2][1] = 5, y[2][2] = 3, y[2][3] = 0, y[3][0] = 3, y[3][1] = 4, y[3][2] = 1, y[3][3] = 0, y[4][0] = 1, y[4][1] = 4, y[4][2] = 5, y[4][3] = 2) : (l.set((c + 0.25) * u, (d + 0.25) * u, x), z[0].set(-0.25 * u, -0.25 * u, t[c][d] - x), z[1].set(0.75 * u, -0.25 * u, t[c + 1][d] - x), z[2].set(-0.25 * u, 0.75 * u, t[c][d + 1] - x), z[3].set(-0.25 * u, -0.25 * u, -x - 1), z[4].set(0.75 * u, -0.25 * u, -x - 1), z[5].set(-0.25 * u, 0.75 * u, -x - 1), y[0][0] = 0, y[0][1] = 1,
|
|
y[0][2] = 2, y[1][0] = 5, y[1][1] = 4, y[1][2] = 3, y[2][0] = 0, y[2][1] = 2, y[2][2] = 5, y[2][3] = 3, y[3][0] = 1, y[3][1] = 0, y[3][2] = 3, y[3][3] = 4, y[4][0] = 4, y[4][1] = 5, y[4][2] = 2, y[4][3] = 1);
|
|
g.computeNormals();
|
|
g.computeEdges();
|
|
g.updateBoundingSphereRadius();
|
|
this.setCachedConvexTrianglePillar(c, d, e, g, l)
|
|
};
|
|
d.prototype.calculateLocalInertia = function(c, d) {
|
|
d = d || new m;
|
|
d.set(0, 0, 0);
|
|
return d
|
|
};
|
|
d.prototype.volume = function() {
|
|
return Number.MAX_VALUE
|
|
};
|
|
d.prototype.calculateWorldAABB = function(c, d, e, g) {
|
|
e.set(-Number.MAX_VALUE, -Number.MAX_VALUE,
|
|
-Number.MAX_VALUE);
|
|
g.set(Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE)
|
|
};
|
|
d.prototype.updateBoundingSphereRadius = function() {
|
|
var c = this.data,
|
|
d = this.elementSize;
|
|
this.boundingSphereRadius = (new m(c.length * d, c[0].length * d, Math.max(Math.abs(this.maxValue), Math.abs(this.minValue)))).norm()
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30,
|
|
"../utils/Utils": 53,
|
|
"./ConvexPolyhedron": 38,
|
|
"./Shape": 43
|
|
}],
|
|
41: [function(c, e) {
|
|
function d() {
|
|
g.call(this);
|
|
this.type = g.types.PARTICLE
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Shape"),
|
|
f = c("../math/Vec3");
|
|
d.prototype =
|
|
new g;
|
|
d.prototype.constructor = d;
|
|
d.prototype.calculateLocalInertia = function(c, d) {
|
|
d = d || new f;
|
|
d.set(0, 0, 0);
|
|
return d
|
|
};
|
|
d.prototype.volume = function() {
|
|
return 0
|
|
};
|
|
d.prototype.updateBoundingSphereRadius = function() {
|
|
this.boundingSphereRadius = 0
|
|
};
|
|
d.prototype.calculateWorldAABB = function(c, d, e, g) {
|
|
e.copy(c);
|
|
g.copy(c)
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30,
|
|
"./Shape": 43
|
|
}],
|
|
42: [function(c, e) {
|
|
function d() {
|
|
g.call(this);
|
|
this.type = g.types.PLANE;
|
|
this.worldNormal = new f;
|
|
this.worldNormalNeedsUpdate = !0;
|
|
this.boundingSphereRadius = Number.MAX_VALUE
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Shape"),
|
|
f = c("../math/Vec3");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
d.prototype.computeWorldNormal = function(c) {
|
|
var d = this.worldNormal;
|
|
d.set(0, 0, 1);
|
|
c.vmult(d, d);
|
|
this.worldNormalNeedsUpdate = !1
|
|
};
|
|
d.prototype.calculateLocalInertia = function(c, d) {
|
|
return d || new f
|
|
};
|
|
d.prototype.volume = function() {
|
|
return Number.MAX_VALUE
|
|
};
|
|
var m = new f;
|
|
d.prototype.calculateWorldAABB = function(c, d, e, g) {
|
|
m.set(0, 0, 1);
|
|
d.vmult(m, m);
|
|
d = Number.MAX_VALUE;
|
|
e.set(-d, -d, -d);
|
|
g.set(d, d, d);
|
|
1 === m.x && (g.x = c.x);
|
|
1 === m.y &&
|
|
(g.y = c.y);
|
|
1 === m.z && (g.z = c.z); - 1 === m.x && (e.x = c.x); - 1 === m.y && (e.y = c.y); - 1 === m.z && (e.z = c.z)
|
|
};
|
|
d.prototype.updateBoundingSphereRadius = function() {
|
|
this.boundingSphereRadius = Number.MAX_VALUE
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30,
|
|
"./Shape": 43
|
|
}],
|
|
43: [function(c, e) {
|
|
function d() {
|
|
this.id = d.idCounter++;
|
|
this.boundingSphereRadius = this.type = 0;
|
|
this.collisionResponse = !0;
|
|
this.material = null
|
|
}
|
|
e.exports = d;
|
|
d = c("./Shape");
|
|
c("../math/Vec3");
|
|
c("../math/Quaternion");
|
|
c("../material/Material");
|
|
d.prototype.constructor = d;
|
|
d.prototype.updateBoundingSphereRadius =
|
|
function() {
|
|
throw "computeBoundingSphereRadius() not implemented for shape type " + this.type;
|
|
};
|
|
d.prototype.volume = function() {
|
|
throw "volume() not implemented for shape type " + this.type;
|
|
};
|
|
d.prototype.calculateLocalInertia = function() {
|
|
throw "calculateLocalInertia() not implemented for shape type " + this.type;
|
|
};
|
|
d.idCounter = 0;
|
|
d.types = {
|
|
SPHERE: 1,
|
|
PLANE: 2,
|
|
BOX: 4,
|
|
COMPOUND: 8,
|
|
CONVEXPOLYHEDRON: 16,
|
|
HEIGHTFIELD: 32,
|
|
PARTICLE: 64,
|
|
CYLINDER: 128,
|
|
TRIMESH: 256
|
|
}
|
|
}, {
|
|
"../material/Material": 25,
|
|
"../math/Quaternion": 28,
|
|
"../math/Vec3": 30,
|
|
"./Shape": 43
|
|
}],
|
|
44: [function(c, e) {
|
|
function d(c) {
|
|
g.call(this);
|
|
this.radius = void 0 !== c ? Number(c) : 1;
|
|
this.type = g.types.SPHERE;
|
|
if (0 > this.radius) throw Error("The sphere radius cannot be negative.");
|
|
this.updateBoundingSphereRadius()
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Shape"),
|
|
f = c("../math/Vec3");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
d.prototype.calculateLocalInertia = function(c, d) {
|
|
d = d || new f;
|
|
var e = 2 * c * this.radius * this.radius / 5;
|
|
d.x = e;
|
|
d.y = e;
|
|
d.z = e;
|
|
return d
|
|
};
|
|
d.prototype.volume = function() {
|
|
return 4 * Math.PI * this.radius /
|
|
3
|
|
};
|
|
d.prototype.updateBoundingSphereRadius = function() {
|
|
this.boundingSphereRadius = this.radius
|
|
};
|
|
d.prototype.calculateWorldAABB = function(c, d, e, g) {
|
|
d = this.radius;
|
|
for (var f = ["x", "y", "z"], r = 0; r < f.length; r++) {
|
|
var s = f[r];
|
|
e[s] = c[s] - d;
|
|
g[s] = c[s] + d
|
|
}
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30,
|
|
"./Shape": 43
|
|
}],
|
|
45: [function(c, e) {
|
|
function d(c, d) {
|
|
g.call(this);
|
|
this.type = g.types.TRIMESH;
|
|
this.vertices = new Float32Array(c);
|
|
this.indices = new Int16Array(d);
|
|
this.normals = new Float32Array(d.length);
|
|
this.aabb = new l;
|
|
this.edges = null;
|
|
this.scale = new f(1, 1,
|
|
1);
|
|
this.tree = new j;
|
|
this.updateEdges();
|
|
this.updateNormals();
|
|
this.updateAABB();
|
|
this.updateBoundingSphereRadius();
|
|
this.updateTree()
|
|
}
|
|
e.exports = d;
|
|
var g = c("./Shape"),
|
|
f = c("../math/Vec3");
|
|
c("../math/Quaternion");
|
|
var m = c("../math/Transform"),
|
|
l = c("../collision/AABB"),
|
|
j = c("../utils/Octree");
|
|
d.prototype = new g;
|
|
d.prototype.constructor = d;
|
|
var q = new f;
|
|
d.prototype.updateTree = function() {
|
|
var c = this.tree;
|
|
c.reset();
|
|
c.aabb.copy(this.aabb);
|
|
var d = this.scale;
|
|
c.aabb.lowerBound.x *= 1 / d.x;
|
|
c.aabb.lowerBound.y *= 1 / d.y;
|
|
c.aabb.lowerBound.z *=
|
|
1 / d.z;
|
|
c.aabb.upperBound.x *= 1 / d.x;
|
|
c.aabb.upperBound.y *= 1 / d.y;
|
|
c.aabb.upperBound.z *= 1 / d.z;
|
|
for (var d = new l, e = new f, j = new f, g = new f, n = [e, j, g], q = 0; q < this.indices.length / 3; q++) {
|
|
var r = 3 * q;
|
|
this._getUnscaledVertex(this.indices[r], e);
|
|
this._getUnscaledVertex(this.indices[r + 1], j);
|
|
this._getUnscaledVertex(this.indices[r + 2], g);
|
|
d.setFromPoints(n);
|
|
c.insert(d, q)
|
|
}
|
|
c.removeEmptyNodes()
|
|
};
|
|
var n = new l;
|
|
d.prototype.getTrianglesInAABB = function(c, d) {
|
|
n.copy(c);
|
|
var e = this.scale,
|
|
j = e.x,
|
|
g = e.y,
|
|
e = e.z,
|
|
f = n.lowerBound,
|
|
l = n.upperBound;
|
|
f.x /=
|
|
j;
|
|
f.y /= g;
|
|
f.z /= e;
|
|
l.x /= j;
|
|
l.y /= g;
|
|
l.z /= e;
|
|
return this.tree.aabbQuery(n, d)
|
|
};
|
|
d.prototype.setScale = function(c) {
|
|
var d = c.x === c.y === c.z;
|
|
this.scale.x === this.scale.y === this.scale.z && d || this.updateNormals();
|
|
this.scale.copy(c);
|
|
this.updateAABB();
|
|
this.updateBoundingSphereRadius()
|
|
};
|
|
d.prototype.updateNormals = function() {
|
|
for (var c = this.normals, e = 0; e < this.indices.length / 3; e++) {
|
|
var j = 3 * e,
|
|
g = this.indices[j + 1],
|
|
f = this.indices[j + 2];
|
|
this.getVertex(this.indices[j], y);
|
|
this.getVertex(g, z);
|
|
this.getVertex(f, x);
|
|
d.computeNormal(z, y,
|
|
x, q);
|
|
c[j] = q.x;
|
|
c[j + 1] = q.y;
|
|
c[j + 2] = q.z
|
|
}
|
|
};
|
|
d.prototype.updateEdges = function() {
|
|
for (var c = {}, d = function() {
|
|
c[g < f ? g + "_" + f : f + "_" + g] = !0
|
|
}, e = 0; e < this.indices.length / 3; e++) {
|
|
var j = 3 * e,
|
|
g = this.indices[j],
|
|
f = this.indices[j + 1],
|
|
j = this.indices[j + 2];
|
|
d(g, f);
|
|
d(f, j);
|
|
d(j, g)
|
|
}
|
|
d = Object.keys(c);
|
|
this.edges = new Int16Array(2 * d.length);
|
|
for (e = 0; e < d.length; e++) j = d[e].split("_"), this.edges[2 * e] = parseInt(j[0], 10), this.edges[2 * e + 1] = parseInt(j[1], 10)
|
|
};
|
|
d.prototype.getEdgeVertex = function(c, d, e) {
|
|
this.getVertex(this.edges[2 * c + (d ? 1 : 0)], e)
|
|
};
|
|
var r =
|
|
new f,
|
|
s = new f;
|
|
d.prototype.getEdgeVector = function(c, d) {
|
|
this.getEdgeVertex(c, 0, r);
|
|
this.getEdgeVertex(c, 1, s);
|
|
s.vsub(r, d)
|
|
};
|
|
var t = new f,
|
|
u = new f;
|
|
d.computeNormal = function(c, d, e, j) {
|
|
d.vsub(c, u);
|
|
e.vsub(d, t);
|
|
t.cross(u, j);
|
|
j.isZero() || j.normalize()
|
|
};
|
|
var y = new f,
|
|
z = new f,
|
|
x = new f;
|
|
d.prototype.getVertex = function(c, d) {
|
|
var e = this.scale;
|
|
this._getUnscaledVertex(c, d);
|
|
d.x *= e.x;
|
|
d.y *= e.y;
|
|
d.z *= e.z;
|
|
return d
|
|
};
|
|
d.prototype._getUnscaledVertex = function(c, d) {
|
|
var e = 3 * c,
|
|
j = this.vertices;
|
|
return d.set(j[e], j[e + 1], j[e + 2])
|
|
};
|
|
d.prototype.getWorldVertex =
|
|
function(c, d, e, j) {
|
|
this.getVertex(c, j);
|
|
m.pointToWorldFrame(d, e, j, j);
|
|
return j
|
|
};
|
|
d.prototype.getTriangleVertices = function(c, d, e, j) {
|
|
c *= 3;
|
|
this.getVertex(this.indices[c], d);
|
|
this.getVertex(this.indices[c + 1], e);
|
|
this.getVertex(this.indices[c + 2], j)
|
|
};
|
|
d.prototype.getNormal = function(c, d) {
|
|
var e = 3 * c;
|
|
return d.set(this.normals[e], this.normals[e + 1], this.normals[e + 2])
|
|
};
|
|
var C = new l;
|
|
d.prototype.calculateLocalInertia = function(c, d) {
|
|
this.computeLocalAABB(C);
|
|
var e = C.upperBound.x - C.lowerBound.x,
|
|
j = C.upperBound.y - C.lowerBound.y,
|
|
g = C.upperBound.z - C.lowerBound.z;
|
|
return d.set(1 / 12 * c * (4 * j * j + 4 * g * g), 1 / 12 * c * (4 * e * e + 4 * g * g), 1 / 12 * c * (4 * j * j + 4 * e * e))
|
|
};
|
|
var B = new f;
|
|
d.prototype.computeLocalAABB = function(c) {
|
|
var d = c.lowerBound;
|
|
c = c.upperBound;
|
|
var e = this.vertices.length;
|
|
this.getVertex(0, B);
|
|
d.copy(B);
|
|
c.copy(B);
|
|
for (var j = 0; j !== e; j++) this.getVertex(j, B), B.x < d.x ? d.x = B.x : B.x > c.x && (c.x = B.x), B.y < d.y ? d.y = B.y : B.y > c.y && (c.y = B.y), B.z < d.z ? d.z = B.z : B.z > c.z && (c.z = B.z)
|
|
};
|
|
d.prototype.updateAABB = function() {
|
|
this.computeLocalAABB(this.aabb)
|
|
};
|
|
d.prototype.updateBoundingSphereRadius =
|
|
function() {
|
|
for (var c = 0, d = this.vertices, e = new f, j = 0, d = d.length / 3; j !== d; j++) {
|
|
this.getVertex(j, e);
|
|
var g = e.norm2();
|
|
g > c && (c = g)
|
|
}
|
|
this.boundingSphereRadius = Math.sqrt(c)
|
|
};
|
|
new f;
|
|
var E = new m,
|
|
G = new l;
|
|
d.prototype.calculateWorldAABB = function(c, d, e, j) {
|
|
E.position = c;
|
|
E.quaternion = d;
|
|
this.aabb.toWorldFrame(E, G);
|
|
e.copy(G.lowerBound);
|
|
j.copy(G.upperBound)
|
|
};
|
|
d.prototype.volume = function() {
|
|
return 4 * Math.PI * this.boundingSphereRadius / 3
|
|
};
|
|
d.createTorus = function(c, e, j, g, f) {
|
|
c = c || 1;
|
|
e = e || 0.5;
|
|
j = j || 8;
|
|
g = g || 6;
|
|
f = f || 2 * Math.PI;
|
|
for (var n = [], l = [], q = 0; q <= j; q++)
|
|
for (var r = 0; r <= g; r++) {
|
|
var m = r / g * f,
|
|
s = 2 * q / j * Math.PI,
|
|
t = (c + e * Math.cos(s)) * Math.cos(m),
|
|
m = (c + e * Math.cos(s)) * Math.sin(m),
|
|
s = e * Math.sin(s);
|
|
n.push(t, m, s)
|
|
}
|
|
for (q = 1; q <= j; q++)
|
|
for (r = 1; r <= g; r++) c = (g + 1) * (q - 1) + r - 1, e = (g + 1) * (q - 1) + r, f = (g + 1) * q + r, l.push((g + 1) * q + r - 1, c, f), l.push(c, e, f);
|
|
return new d(n, l)
|
|
}
|
|
}, {
|
|
"../collision/AABB": 3,
|
|
"../math/Quaternion": 28,
|
|
"../math/Transform": 29,
|
|
"../math/Vec3": 30,
|
|
"../utils/Octree": 50,
|
|
"./Shape": 43
|
|
}],
|
|
46: [function(c, e) {
|
|
function d() {
|
|
g.call(this);
|
|
this.iterations = 10;
|
|
this.tolerance =
|
|
1E-7
|
|
}
|
|
e.exports = d;
|
|
c("../math/Vec3");
|
|
c("../math/Quaternion");
|
|
var g = c("./Solver");
|
|
d.prototype = new g;
|
|
var f = [],
|
|
m = [],
|
|
l = [];
|
|
d.prototype.solve = function(c, d) {
|
|
var e = 0,
|
|
g = this.iterations,
|
|
s = this.tolerance * this.tolerance,
|
|
t = this.equations,
|
|
u = t.length,
|
|
y = d.bodies,
|
|
z = y.length,
|
|
x, C, B, E, G;
|
|
if (0 !== u)
|
|
for (B = 0; B !== z; B++) y[B].updateSolveMassProperties();
|
|
m.length = u;
|
|
l.length = u;
|
|
f.length = u;
|
|
for (B = 0; B !== u; B++) {
|
|
var D = t[B];
|
|
f[B] = 0;
|
|
l[B] = D.computeB(c);
|
|
m[B] = 1 / D.computeC()
|
|
}
|
|
if (0 !== u) {
|
|
for (B = 0; B !== z; B++) D = y[B], e = D.wlambda, D.vlambda.set(0, 0, 0),
|
|
e && e.set(0, 0, 0);
|
|
for (e = 0; e !== g; e++) {
|
|
for (var A = B = 0; A !== u; A++) D = t[A], x = l[A], C = m[A], G = f[A], E = D.computeGWlambda(), x = C * (x - E - D.eps * G), G + x < D.minForce ? x = D.minForce - G : G + x > D.maxForce && (x = D.maxForce - G), f[A] += x, B += 0 < x ? x : -x, D.addToWlambda(x);
|
|
if (B * B < s) break
|
|
}
|
|
for (B = 0; B !== z; B++) D = y[B], g = D.velocity, s = D.angularVelocity, g.vadd(D.vlambda, g), s && s.vadd(D.wlambda, s)
|
|
}
|
|
return e
|
|
}
|
|
}, {
|
|
"../math/Quaternion": 28,
|
|
"../math/Vec3": 30,
|
|
"./Solver": 47
|
|
}],
|
|
47: [function(c, e) {
|
|
function d() {
|
|
this.equations = []
|
|
}
|
|
e.exports = d;
|
|
d.prototype.solve = function() {
|
|
return 0
|
|
};
|
|
d.prototype.addEquation = function(c) {
|
|
c.enabled && this.equations.push(c)
|
|
};
|
|
d.prototype.removeEquation = function(c) {
|
|
var d = this.equations;
|
|
c = d.indexOf(c); - 1 !== c && d.splice(c, 1)
|
|
};
|
|
d.prototype.removeAllEquations = function() {
|
|
this.equations.length = 0
|
|
}
|
|
}, {}],
|
|
48: [function(c, e) {
|
|
function d(c) {
|
|
l.call(this);
|
|
this.iterations = 10;
|
|
this.tolerance = 1E-7;
|
|
this.subsolver = c;
|
|
this.nodes = [];
|
|
for (this.nodePool = []; 128 > this.nodePool.length;) this.nodePool.push(this.createNode())
|
|
}
|
|
|
|
function g(c) {
|
|
for (var d = c.length, e = 0; e !== d; e++) {
|
|
var j = c[e];
|
|
if (!j.visited &&
|
|
!(j.body.type & s)) return j
|
|
}
|
|
return !1
|
|
}
|
|
|
|
function f(c, d, e) {
|
|
d.push(c.body);
|
|
d = c.eqs.length;
|
|
for (var j = 0; j !== d; j++) {
|
|
var g = c.eqs[j]; - 1 === e.indexOf(g) && e.push(g)
|
|
}
|
|
}
|
|
|
|
function m(c, d) {
|
|
return d.id - c.id
|
|
}
|
|
e.exports = d;
|
|
c("../math/Vec3");
|
|
c("../math/Quaternion");
|
|
var l = c("./Solver"),
|
|
j = c("../objects/Body");
|
|
d.prototype = new l;
|
|
var q = [],
|
|
n = [],
|
|
r = {
|
|
bodies: []
|
|
},
|
|
s = j.STATIC,
|
|
t = [];
|
|
d.prototype.createNode = function() {
|
|
return {
|
|
body: null,
|
|
children: [],
|
|
eqs: [],
|
|
visited: !1
|
|
}
|
|
};
|
|
d.prototype.solve = function(c, d) {
|
|
for (var e = this.nodePool, j = d.bodies, l = this.equations,
|
|
s = l.length, E = j.length, G = this.subsolver; e.length < E;) e.push(this.createNode());
|
|
q.length = E;
|
|
for (var D = 0; D < E; D++) q[D] = e[D];
|
|
for (D = 0; D !== E; D++) e = q[D], e.body = j[D], e.children.length = 0, e.eqs.length = 0, e.visited = !1;
|
|
for (E = 0; E !== s; E++) {
|
|
var e = l[E],
|
|
D = j.indexOf(e.bi),
|
|
A = j.indexOf(e.bj),
|
|
D = q[D],
|
|
A = q[A];
|
|
D.children.push(A);
|
|
D.eqs.push(e);
|
|
A.children.push(D);
|
|
A.eqs.push(e)
|
|
}
|
|
j = 0;
|
|
l = n;
|
|
G.tolerance = this.tolerance;
|
|
for (G.iterations = this.iterations; D = g(q);) {
|
|
l.length = 0;
|
|
r.bodies.length = 0;
|
|
e = D;
|
|
D = f;
|
|
s = r.bodies;
|
|
E = l;
|
|
t.push(e);
|
|
e.visited = !0;
|
|
for (D(e, s, E); t.length;)
|
|
for (e = t.pop(); A = g(e.children);) A.visited = !0, D(A, s, E), t.push(A);
|
|
s = l.length;
|
|
l = l.sort(m);
|
|
for (D = 0; D !== s; D++) G.addEquation(l[D]);
|
|
G.solve(c, r);
|
|
G.removeAllEquations();
|
|
j++
|
|
}
|
|
return j
|
|
}
|
|
}, {
|
|
"../math/Quaternion": 28,
|
|
"../math/Vec3": 30,
|
|
"../objects/Body": 31,
|
|
"./Solver": 47
|
|
}],
|
|
49: [function(c, e) {
|
|
var d = function() {};
|
|
e.exports = d;
|
|
d.prototype = {
|
|
constructor: d,
|
|
addEventListener: function(c, d) {
|
|
void 0 === this._listeners && (this._listeners = {});
|
|
var e = this._listeners;
|
|
void 0 === e[c] && (e[c] = []); - 1 === e[c].indexOf(d) &&
|
|
e[c].push(d);
|
|
return this
|
|
},
|
|
hasEventListener: function(c, d) {
|
|
if (void 0 === this._listeners) return !1;
|
|
var e = this._listeners;
|
|
return void 0 !== e[c] && -1 !== e[c].indexOf(d) ? !0 : !1
|
|
},
|
|
removeEventListener: function(c, d) {
|
|
if (void 0 === this._listeners) return this;
|
|
var e = this._listeners;
|
|
if (void 0 === e[c]) return this;
|
|
var l = e[c].indexOf(d); - 1 !== l && e[c].splice(l, 1);
|
|
return this
|
|
},
|
|
dispatchEvent: function(c) {
|
|
if (void 0 === this._listeners) return this;
|
|
var d = this._listeners[c.type];
|
|
if (void 0 !== d) {
|
|
c.target = this;
|
|
for (var e = 0, l = d.length; e <
|
|
l; e++) d[e].call(this, c)
|
|
}
|
|
return this
|
|
}
|
|
}
|
|
}, {}],
|
|
50: [function(c, e) {
|
|
function d(c) {
|
|
c = c || {};
|
|
this.root = c.root || null;
|
|
this.aabb = c.aabb ? c.aabb.clone() : new f;
|
|
this.data = [];
|
|
this.children = []
|
|
}
|
|
|
|
function g(c, e) {
|
|
e = e || {};
|
|
e.root = null;
|
|
e.aabb = c;
|
|
d.call(this, e);
|
|
this.maxDepth = "undefined" !== typeof e.maxDepth ? e.maxDepth : 8
|
|
}
|
|
var f = c("../collision/AABB"),
|
|
m = c("../math/Vec3");
|
|
e.exports = g;
|
|
g.prototype = new d;
|
|
d.prototype.reset = function() {
|
|
this.children.length = this.data.length = 0
|
|
};
|
|
d.prototype.insert = function(c, d, e) {
|
|
var j = this.data;
|
|
e = e || 0;
|
|
if (!this.aabb.contains(c)) return !1;
|
|
var g = this.children;
|
|
if (e < (this.maxDepth || this.root.maxDepth)) {
|
|
var f = !1;
|
|
g.length || (this.subdivide(), f = !0);
|
|
for (var l = 0; 8 !== l; l++)
|
|
if (g[l].insert(c, d, e + 1)) return !0;
|
|
f && (g.length = 0)
|
|
}
|
|
j.push(d);
|
|
return !0
|
|
};
|
|
var l = new m;
|
|
d.prototype.subdivide = function() {
|
|
var c = this.aabb,
|
|
e = c.lowerBound,
|
|
j = c.upperBound,
|
|
c = this.children;
|
|
c.push(new d({
|
|
aabb: new f({
|
|
lowerBound: new m(0, 0, 0)
|
|
})
|
|
}), new d({
|
|
aabb: new f({
|
|
lowerBound: new m(1, 0, 0)
|
|
})
|
|
}), new d({
|
|
aabb: new f({
|
|
lowerBound: new m(1, 1, 0)
|
|
})
|
|
}), new d({
|
|
aabb: new f({
|
|
lowerBound: new m(1, 1, 1)
|
|
})
|
|
}), new d({
|
|
aabb: new f({
|
|
lowerBound: new m(0,
|
|
1, 1)
|
|
})
|
|
}), new d({
|
|
aabb: new f({
|
|
lowerBound: new m(0, 0, 1)
|
|
})
|
|
}), new d({
|
|
aabb: new f({
|
|
lowerBound: new m(1, 0, 1)
|
|
})
|
|
}), new d({
|
|
aabb: new f({
|
|
lowerBound: new m(0, 1, 0)
|
|
})
|
|
}));
|
|
j.vsub(e, l);
|
|
l.scale(0.5, l);
|
|
for (var j = this.root || this, g = 0; 8 !== g; g++) {
|
|
var t = c[g];
|
|
t.root = j;
|
|
var u = t.aabb.lowerBound;
|
|
u.x *= l.x;
|
|
u.y *= l.y;
|
|
u.z *= l.z;
|
|
u.vadd(e, u);
|
|
u.vadd(l, t.aabb.upperBound)
|
|
}
|
|
};
|
|
d.prototype.aabbQuery = function(c, d) {
|
|
for (var e = [this]; e.length;) {
|
|
var j = e.pop();
|
|
j.aabb.overlaps(c) && Array.prototype.push.apply(d, j.data);
|
|
Array.prototype.push.apply(e, j.children)
|
|
}
|
|
return d
|
|
};
|
|
var j = new f;
|
|
d.prototype.rayQuery = function(c, d, e) {
|
|
c.getAABB(j);
|
|
j.toLocalFrame(d, j);
|
|
this.aabbQuery(j, e);
|
|
return e
|
|
};
|
|
d.prototype.removeEmptyNodes = function() {
|
|
for (var c = [this]; c.length;) {
|
|
for (var d = c.pop(), e = d.children.length - 1; 0 <= e; e--) d.children[e].data.length || d.children.splice(e, 1);
|
|
Array.prototype.push.apply(c, d.children)
|
|
}
|
|
}
|
|
}, {
|
|
"../collision/AABB": 3,
|
|
"../math/Vec3": 30
|
|
}],
|
|
51: [function(c, e) {
|
|
function d() {
|
|
this.objects = [];
|
|
this.type = Object
|
|
}
|
|
e.exports = d;
|
|
d.prototype.release = function() {
|
|
for (var c = arguments.length, d =
|
|
0; d !== c; d++) this.objects.push(arguments[d])
|
|
};
|
|
d.prototype.get = function() {
|
|
return 0 === this.objects.length ? this.constructObject() : this.objects.pop()
|
|
};
|
|
d.prototype.constructObject = function() {
|
|
throw Error("constructObject() not implemented in this Pool subclass yet!");
|
|
}
|
|
}, {}],
|
|
52: [function(c, e) {
|
|
function d() {
|
|
this.data = {
|
|
keys: []
|
|
}
|
|
}
|
|
e.exports = d;
|
|
d.prototype.get = function(c, d) {
|
|
if (c > d) {
|
|
var e = d;
|
|
d = c;
|
|
c = e
|
|
}
|
|
return this.data[c + "-" + d]
|
|
};
|
|
d.prototype.set = function(c, d, e) {
|
|
if (c > d) {
|
|
var l = d;
|
|
d = c;
|
|
c = l
|
|
}
|
|
l = c + "-" + d;
|
|
this.get(c, d) || this.data.keys.push(l);
|
|
this.data[l] = e
|
|
};
|
|
d.prototype.reset = function() {
|
|
for (var c = this.data, d = c.keys; 0 < d.length;) {
|
|
var e = d.pop();
|
|
delete c[e]
|
|
}
|
|
}
|
|
}, {}],
|
|
53: [function(c, e) {
|
|
function d() {}
|
|
e.exports = d;
|
|
d.defaults = function(c, d) {
|
|
c = c || {};
|
|
for (var e in d) e in c || (c[e] = d[e]);
|
|
return c
|
|
}
|
|
}, {}],
|
|
54: [function(c, e) {
|
|
function d() {
|
|
f.call(this);
|
|
this.type = g
|
|
}
|
|
e.exports = d;
|
|
var g = c("../math/Vec3"),
|
|
f = c("./Pool");
|
|
d.prototype = new f;
|
|
d.prototype.constructObject = function() {
|
|
return new g
|
|
}
|
|
}, {
|
|
"../math/Vec3": 30,
|
|
"./Pool": 51
|
|
}],
|
|
55: [function(c, e) {
|
|
function d(c) {
|
|
this.contactPointPool = [];
|
|
this.frictionEquationPool = [];
|
|
this.result = [];
|
|
this.frictionResult = [];
|
|
this.v3pool = new n;
|
|
this.world = c;
|
|
this.currentContactMaterial = null;
|
|
this.enableFrictionReduction = !1
|
|
}
|
|
e.exports = d;
|
|
var g = c("../collision/AABB"),
|
|
f = c("../shapes/Shape"),
|
|
m = c("../collision/Ray"),
|
|
l = c("../math/Vec3"),
|
|
j = c("../math/Transform");
|
|
c("../shapes/ConvexPolyhedron");
|
|
var q = c("../math/Quaternion");
|
|
c("../solver/Solver");
|
|
var n = c("../utils/Vec3Pool"),
|
|
r = c("../equations/ContactEquation"),
|
|
s = c("../equations/FrictionEquation");
|
|
d.prototype.createContactEquation =
|
|
function(c, d, e, j, g, f) {
|
|
var n;
|
|
this.contactPointPool.length ? (n = this.contactPointPool.pop(), n.bi = c, n.bj = d) : n = new r(c, d);
|
|
n.enabled = c.collisionResponse && d.collisionResponse && e.collisionResponse && j.collisionResponse;
|
|
var l = this.currentContactMaterial;
|
|
n.restitution = l.restitution;
|
|
n.setSpookParams(l.contactEquationStiffness, l.contactEquationRelaxation, this.world.dt);
|
|
c = e.material || c.material;
|
|
d = j.material || d.material;
|
|
c && d && (0 <= c.restitution && 0 <= d.restitution) && (n.restitution = c.restitution * d.restitution);
|
|
n.si =
|
|
g || e;
|
|
n.sj = f || j;
|
|
return n
|
|
};
|
|
d.prototype.createFrictionEquationsFromContact = function(c, d) {
|
|
var e = c.bi,
|
|
j = c.bj,
|
|
g = this.world,
|
|
f = this.currentContactMaterial,
|
|
n = f.friction,
|
|
l = c.si.material || e.material,
|
|
q = c.sj.material || j.material;
|
|
l && q && (0 <= l.friction && 0 <= q.friction) && (n = l.friction * q.friction);
|
|
if (0 < n) {
|
|
n *= g.gravity.length();
|
|
l = e.invMass + j.invMass;
|
|
0 < l && (l = 1 / l);
|
|
var r = this.frictionEquationPool,
|
|
q = r.length ? r.pop() : new s(e, j, n * l),
|
|
r = r.length ? r.pop() : new s(e, j, n * l);
|
|
q.bi = r.bi = e;
|
|
q.bj = r.bj = j;
|
|
q.minForce = r.minForce = -n * l;
|
|
q.maxForce =
|
|
r.maxForce = n * l;
|
|
q.ri.copy(c.ri);
|
|
q.rj.copy(c.rj);
|
|
r.ri.copy(c.ri);
|
|
r.rj.copy(c.rj);
|
|
c.ni.tangents(q.t, r.t);
|
|
q.setSpookParams(f.frictionEquationStiffness, f.frictionEquationRelaxation, g.dt);
|
|
r.setSpookParams(f.frictionEquationStiffness, f.frictionEquationRelaxation, g.dt);
|
|
q.enabled = r.enabled = c.enabled;
|
|
d.push(q, r);
|
|
return !0
|
|
}
|
|
return !1
|
|
};
|
|
var t = new l,
|
|
u = new l,
|
|
y = new l;
|
|
d.prototype.createFrictionFromAverage = function(c) {
|
|
var d = this.result[this.result.length - 1];
|
|
if (this.createFrictionEquationsFromContact(d, this.frictionResult) &&
|
|
1 !== c) {
|
|
var e = this.frictionResult[this.frictionResult.length - 2],
|
|
j = this.frictionResult[this.frictionResult.length - 1];
|
|
t.setZero();
|
|
u.setZero();
|
|
y.setZero();
|
|
for (var g = d.bi, f = 0; f !== c; f++) d = this.result[this.result.length - 1 - f], d.bodyA !== g ? (t.vadd(d.ni, t), u.vadd(d.ri, u), y.vadd(d.rj, y)) : (t.vsub(d.ni, t), u.vadd(d.rj, u), y.vadd(d.ri, y));
|
|
c = 1 / c;
|
|
u.scale(c, e.ri);
|
|
y.scale(c, e.rj);
|
|
j.ri.copy(e.ri);
|
|
j.rj.copy(e.rj);
|
|
t.normalize();
|
|
t.tangents(e.t, j.t)
|
|
}
|
|
};
|
|
var z = new l,
|
|
x = new l,
|
|
C = new q,
|
|
B = new q;
|
|
d.prototype.getContacts = function(c,
|
|
d, e, j, g, f, n) {
|
|
this.contactPointPool = g;
|
|
this.frictionEquationPool = n;
|
|
this.result = j;
|
|
this.frictionResult = f;
|
|
j = 0;
|
|
for (g = c.length; j !== g; j++) {
|
|
f = c[j];
|
|
n = d[j];
|
|
var l = null;
|
|
f.material && n.material && (l = e.getContactMaterial(f.material, n.material) || null);
|
|
for (var q = 0; q < f.shapes.length; q++) {
|
|
f.quaternion.mult(f.shapeOrientations[q], C);
|
|
f.quaternion.vmult(f.shapeOffsets[q], z);
|
|
z.vadd(f.position, z);
|
|
for (var r = f.shapes[q], m = 0; m < n.shapes.length; m++) {
|
|
n.quaternion.mult(n.shapeOrientations[m], B);
|
|
n.quaternion.vmult(n.shapeOffsets[m],
|
|
x);
|
|
x.vadd(n.position, x);
|
|
var s = n.shapes[m];
|
|
if (!(z.distanceTo(x) > r.boundingSphereRadius + s.boundingSphereRadius)) {
|
|
var p = null;
|
|
r.material && s.material && (p = e.getContactMaterial(r.material, s.material) || null);
|
|
this.currentContactMaterial = p || l || e.defaultContactMaterial;
|
|
(p = this[r.type | s.type]) && (r.type < s.type ? p.call(this, r, s, z, x, C, B, f, n, r, s) : p.call(this, s, r, x, z, B, C, n, f, r, s))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
d.prototype[f.types.BOX | f.types.BOX] = d.prototype.boxBox = function(c, d, e, j, g, f, n, l) {
|
|
c.convexPolyhedronRepresentation.material = c.material;
|
|
d.convexPolyhedronRepresentation.material = d.material;
|
|
c.convexPolyhedronRepresentation.collisionResponse = c.collisionResponse;
|
|
d.convexPolyhedronRepresentation.collisionResponse = d.collisionResponse;
|
|
this.convexConvex(c.convexPolyhedronRepresentation, d.convexPolyhedronRepresentation, e, j, g, f, n, l, c, d)
|
|
};
|
|
d.prototype[f.types.BOX | f.types.CONVEXPOLYHEDRON] = d.prototype.boxConvex = function(c, d, e, j, g, f, n, l) {
|
|
c.convexPolyhedronRepresentation.material = c.material;
|
|
c.convexPolyhedronRepresentation.collisionResponse = c.collisionResponse;
|
|
this.convexConvex(c.convexPolyhedronRepresentation, d, e, j, g, f, n, l, c, d)
|
|
};
|
|
d.prototype[f.types.BOX | f.types.PARTICLE] = d.prototype.boxParticle = function(c, d, e, j, g, f, n, l) {
|
|
c.convexPolyhedronRepresentation.material = c.material;
|
|
c.convexPolyhedronRepresentation.collisionResponse = c.collisionResponse;
|
|
this.convexParticle(c.convexPolyhedronRepresentation, d, e, j, g, f, n, l, c, d)
|
|
};
|
|
d.prototype[f.types.SPHERE] = d.prototype.sphereSphere = function(c, d, e, j, g, f, n, l) {
|
|
g = this.createContactEquation(n, l, c, d);
|
|
j.vsub(e, g.ni);
|
|
g.ni.normalize();
|
|
g.ri.copy(g.ni);
|
|
g.rj.copy(g.ni);
|
|
g.ri.mult(c.radius, g.ri);
|
|
g.rj.mult(-d.radius, g.rj);
|
|
g.ri.vadd(e, g.ri);
|
|
g.ri.vsub(n.position, g.ri);
|
|
g.rj.vadd(j, g.rj);
|
|
g.rj.vsub(l.position, g.rj);
|
|
this.result.push(g);
|
|
this.createFrictionEquationsFromContact(g, this.frictionResult)
|
|
};
|
|
var E = new l,
|
|
G = new l,
|
|
D = new l;
|
|
d.prototype[f.types.PLANE | f.types.TRIMESH] = d.prototype.planeTrimesh = function(c, d, e, g, f, n, q, r) {
|
|
var m = new l;
|
|
E.set(0, 0, 1);
|
|
f.vmult(E, E);
|
|
for (f = 0; f < d.vertices.length / 3; f++) {
|
|
d.getVertex(f, m);
|
|
var s = new l;
|
|
s.copy(m);
|
|
j.pointToWorldFrame(g,
|
|
n, s, m);
|
|
s = G;
|
|
m.vsub(e, s);
|
|
if (0 >= E.dot(s)) {
|
|
var p = this.createContactEquation(q, r, c, d);
|
|
p.ni.copy(E);
|
|
var t = D;
|
|
E.scale(s.dot(E), t);
|
|
m.vsub(t, t);
|
|
p.ri.copy(t);
|
|
p.ri.vsub(q.position, p.ri);
|
|
p.rj.copy(m);
|
|
p.rj.vsub(r.position, p.rj);
|
|
this.result.push(p);
|
|
this.createFrictionEquationsFromContact(p, this.frictionResult)
|
|
}
|
|
}
|
|
};
|
|
var A = new l,
|
|
H = new l;
|
|
new l;
|
|
var O = new l,
|
|
K = new l,
|
|
S = new l,
|
|
J = new l,
|
|
Y = new l,
|
|
ca = new l,
|
|
F = new l,
|
|
N = new l,
|
|
da = new l,
|
|
T = new l,
|
|
P = new l,
|
|
L = new g,
|
|
I = [];
|
|
d.prototype[f.types.SPHERE | f.types.TRIMESH] = d.prototype.sphereTrimesh =
|
|
function(c, d, e, g, f, n, l, q) {
|
|
j.pointToLocalFrame(g, n, e, F);
|
|
f = c.radius;
|
|
L.lowerBound.set(F.x - f, F.y - f, F.z - f);
|
|
L.upperBound.set(F.x + f, F.y + f, F.z + f);
|
|
d.getTrianglesInAABB(L, I);
|
|
var r = c.radius * c.radius;
|
|
for (f = 0; f < I.length; f++)
|
|
for (var s = 0; 3 > s; s++)
|
|
if (d.getVertex(d.indices[3 * I[f] + s], O), O.vsub(F, H), H.norm2() <= r) {
|
|
K.copy(O);
|
|
j.pointToWorldFrame(g, n, K, O);
|
|
O.vsub(e, H);
|
|
var p = this.createContactEquation(l, q, c, d);
|
|
p.ni.copy(H);
|
|
p.ni.normalize();
|
|
p.ri.copy(p.ni);
|
|
p.ri.scale(c.radius, p.ri);
|
|
p.ri.vadd(e, p.ri);
|
|
p.ri.vsub(l.position, p.ri);
|
|
p.rj.copy(O);
|
|
p.rj.vsub(q.position, p.rj);
|
|
this.result.push(p);
|
|
this.createFrictionEquationsFromContact(p, this.frictionResult)
|
|
} for (f = 0; f < I.length; f++)
|
|
for (s = 0; 3 > s; s++) d.getVertex(d.indices[3 * I[f] + s], S), d.getVertex(d.indices[3 * I[f] + (s + 1) % 3], J), J.vsub(S, Y), F.vsub(J, N), e = N.dot(Y), F.vsub(S, N), p = N.dot(Y), 0 < p && 0 > e && (F.vsub(S, N), ca.copy(Y), ca.normalize(), p = N.dot(ca), ca.scale(p, N), N.vadd(S, N), e = N.distanceTo(F), e < c.radius && (p = this.createContactEquation(l, q, c, d), N.vsub(F, p.ni), p.ni.normalize(), p.ni.scale(c.radius,
|
|
p.ri), j.pointToWorldFrame(g, n, N, N), N.vsub(q.position, p.rj), j.vectorToWorldFrame(n, p.ni, p.ni), j.vectorToWorldFrame(n, p.ri, p.ri), this.result.push(p), this.createFrictionEquationsFromContact(p, this.frictionResult)));
|
|
f = 0;
|
|
for (s = I.length; f !== s; f++) d.getTriangleVertices(I[f], da, T, P), d.getNormal(I[f], A), F.vsub(da, N), e = N.dot(A), A.scale(e, N), F.vsub(N, N), e = N.distanceTo(F), m.pointInTriangle(N, da, T, P) && e < c.radius && (p = this.createContactEquation(l, q, c, d), N.vsub(F, p.ni), p.ni.normalize(), p.ni.scale(c.radius, p.ri),
|
|
j.pointToWorldFrame(g, n, N, N), N.vsub(q.position, p.rj), j.vectorToWorldFrame(n, p.ni, p.ni), j.vectorToWorldFrame(n, p.ri, p.ri), this.result.push(p), this.createFrictionEquationsFromContact(p, this.frictionResult));
|
|
I.length = 0
|
|
};
|
|
var X = new l,
|
|
aa = new l;
|
|
d.prototype[f.types.SPHERE | f.types.PLANE] = d.prototype.spherePlane = function(c, d, e, j, g, f, n, l) {
|
|
d = this.createContactEquation(n, l, c, d);
|
|
d.ni.set(0, 0, 1);
|
|
f.vmult(d.ni, d.ni);
|
|
d.ni.negate(d.ni);
|
|
d.ni.normalize();
|
|
d.ni.mult(c.radius, d.ri);
|
|
e.vsub(j, X);
|
|
d.ni.mult(d.ni.dot(X), aa);
|
|
X.vsub(aa, d.rj); - X.dot(d.ni) <= c.radius && (c = d.ri, f = d.rj, c.vadd(e, c), c.vsub(n.position, c), f.vadd(j, f), f.vsub(l.position, f), this.result.push(d), this.createFrictionEquationsFromContact(d, this.frictionResult))
|
|
};
|
|
var la = new l,
|
|
qa = new l,
|
|
ea = new l,
|
|
va = new l,
|
|
wa = new l,
|
|
Na = new l,
|
|
ma = new l,
|
|
M = [new l, new l, new l, new l, new l, new l],
|
|
Xa = new l,
|
|
ja = new l,
|
|
Ha = new l,
|
|
Oa = new l;
|
|
d.prototype[f.types.SPHERE | f.types.BOX] = d.prototype.sphereBox = function(c, d, e, j, g, f, n, l) {
|
|
g = this.v3pool;
|
|
e.vsub(j, va);
|
|
d.getSideNormals(M, f);
|
|
f = c.radius;
|
|
for (var q = !1, r = null, m = 0, s = 0, p = 0, t = null, u = 0, y = M.length; u !== y && !1 === q; u++) {
|
|
var x = wa;
|
|
x.copy(M[u]);
|
|
var z = x.norm();
|
|
x.normalize();
|
|
var F = va.dot(x);
|
|
if (F < z + f && 0 < F) {
|
|
var A = Na,
|
|
C = ma;
|
|
A.copy(M[(u + 1) % 3]);
|
|
C.copy(M[(u + 2) % 3]);
|
|
var D = A.norm(),
|
|
B = C.norm();
|
|
A.normalize();
|
|
C.normalize();
|
|
var E = va.dot(A),
|
|
L = va.dot(C);
|
|
if (E < D && E > -D && (L < B && L > -B) && (F = Math.abs(F - z - f), null === t || F < t)) t = F, s = E, p = L, r = z, ja.copy(x), Ha.copy(A), Oa.copy(C), m++
|
|
}
|
|
}
|
|
m && (q = !0, m = this.createContactEquation(n, l, c, d), ja.mult(-f, m.ri), m.ni.copy(ja), m.ni.negate(m.ni), ja.mult(r, ja),
|
|
Ha.mult(s, Ha), ja.vadd(Ha, ja), Oa.mult(p, Oa), ja.vadd(Oa, m.rj), m.ri.vadd(e, m.ri), m.ri.vsub(n.position, m.ri), m.rj.vadd(j, m.rj), m.rj.vsub(l.position, m.rj), this.result.push(m), this.createFrictionEquationsFromContact(m, this.frictionResult));
|
|
F = g.get();
|
|
for (r = 0; 2 !== r && !q; r++)
|
|
for (s = 0; 2 !== s && !q; s++)
|
|
for (p = 0; 2 !== p && !q; p++) F.set(0, 0, 0), r ? F.vadd(M[0], F) : F.vsub(M[0], F), s ? F.vadd(M[1], F) : F.vsub(M[1], F), p ? F.vadd(M[2], F) : F.vsub(M[2], F), j.vadd(F, Xa), Xa.vsub(e, Xa), Xa.norm2() < f * f && (q = !0, m = this.createContactEquation(n, l,
|
|
c, d), m.ri.copy(Xa), m.ri.normalize(), m.ni.copy(m.ri), m.ri.mult(f, m.ri), m.rj.copy(F), m.ri.vadd(e, m.ri), m.ri.vsub(n.position, m.ri), m.rj.vadd(j, m.rj), m.rj.vsub(l.position, m.rj), this.result.push(m), this.createFrictionEquationsFromContact(m, this.frictionResult));
|
|
g.release(F);
|
|
t = g.get();
|
|
u = g.get();
|
|
m = g.get();
|
|
y = g.get();
|
|
F = g.get();
|
|
x = M.length;
|
|
for (r = 0; r !== x && !q; r++)
|
|
for (s = 0; s !== x && !q; s++)
|
|
if (r % 3 !== s % 3) {
|
|
M[s].cross(M[r], t);
|
|
t.normalize();
|
|
M[r].vadd(M[s], u);
|
|
m.copy(e);
|
|
m.vsub(u, m);
|
|
m.vsub(j, m);
|
|
z = m.dot(t);
|
|
t.mult(z, y);
|
|
for (p =
|
|
0; p === r % 3 || p === s % 3;) p++;
|
|
F.copy(e);
|
|
F.vsub(y, F);
|
|
F.vsub(u, F);
|
|
F.vsub(j, F);
|
|
z = Math.abs(z);
|
|
A = F.norm();
|
|
z < M[p].norm() && A < f && (q = !0, p = this.createContactEquation(n, l, c, d), u.vadd(y, p.rj), p.rj.copy(p.rj), F.negate(p.ni), p.ni.normalize(), p.ri.copy(p.rj), p.ri.vadd(j, p.ri), p.ri.vsub(e, p.ri), p.ri.normalize(), p.ri.mult(f, p.ri), p.ri.vadd(e, p.ri), p.ri.vsub(n.position, p.ri), p.rj.vadd(j, p.rj), p.rj.vsub(l.position, p.rj), this.result.push(p), this.createFrictionEquationsFromContact(p, this.frictionResult))
|
|
} g.release(t, u, m, y,
|
|
F)
|
|
};
|
|
var Va = new l,
|
|
cb = new l,
|
|
wb = new l,
|
|
db = new l,
|
|
xb = new l,
|
|
Nb = new l,
|
|
W = new l,
|
|
p = new l,
|
|
Ob = new l,
|
|
Pb = new l;
|
|
d.prototype[f.types.SPHERE | f.types.CONVEXPOLYHEDRON] = d.prototype.sphereConvex = function(c, d, e, j, g, f, n, l) {
|
|
g = this.v3pool;
|
|
e.vsub(j, Va);
|
|
for (var q = d.faceNormals, r = d.faces, m = d.vertices, s = c.radius, t = 0; t !== m.length; t++) {
|
|
var u = xb;
|
|
f.vmult(m[t], u);
|
|
j.vadd(u, u);
|
|
var y = db;
|
|
u.vsub(e, y);
|
|
if (y.norm2() < s * s) {
|
|
c = this.createContactEquation(n, l, c, d);
|
|
c.ri.copy(y);
|
|
c.ri.normalize();
|
|
c.ni.copy(c.ri);
|
|
c.ri.mult(s, c.ri);
|
|
u.vsub(j, c.rj);
|
|
c.ri.vadd(e,
|
|
c.ri);
|
|
c.ri.vsub(n.position, c.ri);
|
|
c.rj.vadd(j, c.rj);
|
|
c.rj.vsub(l.position, c.rj);
|
|
this.result.push(c);
|
|
this.createFrictionEquationsFromContact(c, this.frictionResult);
|
|
return
|
|
}
|
|
}
|
|
t = 0;
|
|
for (u = r.length; t !== u; t++) {
|
|
var y = r[t],
|
|
x = Nb;
|
|
f.vmult(q[t], x);
|
|
var z = W;
|
|
f.vmult(m[y[0]], z);
|
|
z.vadd(j, z);
|
|
var F = p;
|
|
x.mult(-s, F);
|
|
e.vadd(F, F);
|
|
var A = Ob;
|
|
F.vsub(z, A);
|
|
F = A.dot(x);
|
|
A = Pb;
|
|
e.vsub(z, A);
|
|
if (0 > F && 0 < A.dot(x)) {
|
|
for (var z = [], A = 0, C = y.length; A !== C; A++) {
|
|
var D = g.get();
|
|
f.vmult(m[y[A]], D);
|
|
j.vadd(D, D);
|
|
z.push(D)
|
|
}
|
|
a: {
|
|
for (var A = z, C = x, D = e, B = null, E = A.length,
|
|
L = 0; L !== E; L++) {
|
|
var N = A[L],
|
|
I = la;
|
|
A[(L + 1) % E].vsub(N, I);
|
|
var G = qa;
|
|
I.cross(C, G);
|
|
I = ea;
|
|
D.vsub(N, I);
|
|
N = G.dot(I);
|
|
if (null === B || 0 < N && !0 === B || 0 >= N && !1 === B) null === B && (B = 0 < N);
|
|
else {
|
|
A = !1;
|
|
break a
|
|
}
|
|
}
|
|
A = !0
|
|
}
|
|
if (A) {
|
|
c = this.createContactEquation(n, l, c, d);
|
|
x.mult(-s, c.ri);
|
|
x.negate(c.ni);
|
|
d = g.get();
|
|
x.mult(-F, d);
|
|
f = g.get();
|
|
x.mult(-s, f);
|
|
e.vsub(j, c.rj);
|
|
c.rj.vadd(f, c.rj);
|
|
c.rj.vadd(d, c.rj);
|
|
c.rj.vadd(j, c.rj);
|
|
c.rj.vsub(l.position, c.rj);
|
|
c.ri.vadd(e, c.ri);
|
|
c.ri.vsub(n.position, c.ri);
|
|
g.release(d);
|
|
g.release(f);
|
|
this.result.push(c);
|
|
this.createFrictionEquationsFromContact(c,
|
|
this.frictionResult);
|
|
A = 0;
|
|
for (y = z.length; A !== y; A++) g.release(z[A]);
|
|
break
|
|
} else
|
|
for (A = 0; A !== y.length; A++) {
|
|
x = g.get();
|
|
F = g.get();
|
|
f.vmult(m[y[(A + 1) % y.length]], x);
|
|
f.vmult(m[y[(A + 2) % y.length]], F);
|
|
j.vadd(x, x);
|
|
j.vadd(F, F);
|
|
E = cb;
|
|
F.vsub(x, E);
|
|
B = wb;
|
|
E.unit(B);
|
|
C = g.get();
|
|
D = g.get();
|
|
e.vsub(x, D);
|
|
L = D.dot(B);
|
|
B.mult(L, C);
|
|
C.vadd(x, C);
|
|
B = g.get();
|
|
C.vsub(e, B);
|
|
if (0 < L && L * L < E.norm2() && B.norm2() < s * s) {
|
|
c = this.createContactEquation(n, l, c, d);
|
|
C.vsub(j, c.rj);
|
|
C.vsub(e, c.ni);
|
|
c.ni.normalize();
|
|
c.ni.mult(s, c.ri);
|
|
c.rj.vadd(j, c.rj);
|
|
c.rj.vsub(l.position,
|
|
c.rj);
|
|
c.ri.vadd(e, c.ri);
|
|
c.ri.vsub(n.position, c.ri);
|
|
this.result.push(c);
|
|
this.createFrictionEquationsFromContact(c, this.frictionResult);
|
|
A = 0;
|
|
for (y = z.length; A !== y; A++) g.release(z[A]);
|
|
g.release(x);
|
|
g.release(F);
|
|
g.release(C);
|
|
g.release(B);
|
|
g.release(D);
|
|
return
|
|
}
|
|
g.release(x);
|
|
g.release(F);
|
|
g.release(C);
|
|
g.release(B);
|
|
g.release(D)
|
|
}
|
|
A = 0;
|
|
for (y = z.length; A !== y; A++) g.release(z[A])
|
|
}
|
|
}
|
|
};
|
|
new l;
|
|
new l;
|
|
d.prototype[f.types.PLANE | f.types.BOX] = d.prototype.planeBox = function(c, d, e, j, g, f, n, l) {
|
|
d.convexPolyhedronRepresentation.material =
|
|
d.material;
|
|
d.convexPolyhedronRepresentation.collisionResponse = d.collisionResponse;
|
|
this.planeConvex(c, d.convexPolyhedronRepresentation, e, j, g, f, n, l)
|
|
};
|
|
var Ca = new l,
|
|
Ia = new l,
|
|
ra = new l,
|
|
mb = new l;
|
|
d.prototype[f.types.PLANE | f.types.CONVEXPOLYHEDRON] = d.prototype.planeConvex = function(c, d, e, j, g, f, n, l) {
|
|
Ia.set(0, 0, 1);
|
|
g.vmult(Ia, Ia);
|
|
for (var q = g = 0; q !== d.vertices.length; q++)
|
|
if (Ca.copy(d.vertices[q]), f.vmult(Ca, Ca), j.vadd(Ca, Ca), Ca.vsub(e, ra), 0 >= Ia.dot(ra)) {
|
|
var r = this.createContactEquation(n, l, c, d),
|
|
m = mb;
|
|
Ia.mult(Ia.dot(ra),
|
|
m);
|
|
Ca.vsub(m, m);
|
|
m.vsub(e, r.ri);
|
|
r.ni.copy(Ia);
|
|
Ca.vsub(j, r.rj);
|
|
r.ri.vadd(e, r.ri);
|
|
r.ri.vsub(n.position, r.ri);
|
|
r.rj.vadd(j, r.rj);
|
|
r.rj.vsub(l.position, r.rj);
|
|
this.result.push(r);
|
|
g++;
|
|
this.enableFrictionReduction || this.createFrictionEquationsFromContact(r, this.frictionResult)
|
|
} this.enableFrictionReduction && g && this.createFrictionFromAverage(g)
|
|
};
|
|
var V = new l,
|
|
Ra = new l;
|
|
d.prototype[f.types.CONVEXPOLYHEDRON] = d.prototype.convexConvex = function(c, d, e, j, g, f, n, l, q, r, m, p) {
|
|
if (!(e.distanceTo(j) > c.boundingSphereRadius + d.boundingSphereRadius) &&
|
|
c.findSeparatingAxis(d, e, g, j, f, V, m, p)) {
|
|
m = [];
|
|
c.clipAgainstHull(e, g, d, j, f, V, -100, 100, m);
|
|
for (f = g = 0; f !== m.length; f++) {
|
|
p = this.createContactEquation(n, l, c, d, q, r);
|
|
var s = p.ri,
|
|
t = p.rj;
|
|
V.negate(p.ni);
|
|
m[f].normal.negate(Ra);
|
|
Ra.mult(m[f].depth, Ra);
|
|
m[f].point.vadd(Ra, s);
|
|
t.copy(m[f].point);
|
|
s.vsub(e, s);
|
|
t.vsub(j, t);
|
|
s.vadd(e, s);
|
|
s.vsub(n.position, s);
|
|
t.vadd(j, t);
|
|
t.vsub(l.position, t);
|
|
this.result.push(p);
|
|
g++;
|
|
this.enableFrictionReduction || this.createFrictionEquationsFromContact(p, this.frictionResult)
|
|
}
|
|
this.enableFrictionReduction &&
|
|
g && this.createFrictionFromAverage(g)
|
|
}
|
|
};
|
|
var ha = new l,
|
|
na = new l,
|
|
Sa = new l;
|
|
d.prototype[f.types.PLANE | f.types.PARTICLE] = d.prototype.planeParticle = function(c, d, e, j, g, f, n, l) {
|
|
ha.set(0, 0, 1);
|
|
n.quaternion.vmult(ha, ha);
|
|
j.vsub(n.position, na);
|
|
0 >= ha.dot(na) && (c = this.createContactEquation(l, n, d, c), c.ni.copy(ha), c.ni.negate(c.ni), c.ri.set(0, 0, 0), ha.mult(ha.dot(j), Sa), j.vsub(Sa, Sa), c.rj.copy(Sa), this.result.push(c), this.createFrictionEquationsFromContact(c, this.frictionResult))
|
|
};
|
|
var Ja = new l;
|
|
d.prototype[f.types.PARTICLE |
|
|
f.types.SPHERE] = d.prototype.sphereParticle = function(c, d, e, j, g, f, n, l) {
|
|
Ja.set(0, 0, 1);
|
|
j.vsub(e, Ja);
|
|
Ja.norm2() <= c.radius * c.radius && (d = this.createContactEquation(l, n, d, c), Ja.normalize(), d.rj.copy(Ja), d.rj.mult(c.radius, d.rj), d.ni.copy(Ja), d.ni.negate(d.ni), d.ri.set(0, 0, 0), this.result.push(d), this.createFrictionEquationsFromContact(d, this.frictionResult))
|
|
};
|
|
var Ab = new q,
|
|
Ta = new l;
|
|
new l;
|
|
var eb = new l,
|
|
Ea = new l,
|
|
Da = new l;
|
|
d.prototype[f.types.PARTICLE | f.types.CONVEXPOLYHEDRON] = d.prototype.convexParticle = function(c,
|
|
d, e, j, g, f, n, l) {
|
|
var q = -1;
|
|
f = null;
|
|
var r = 0;
|
|
Ta.copy(j);
|
|
Ta.vsub(e, Ta);
|
|
g.conjugate(Ab);
|
|
Ab.vmult(Ta, Ta);
|
|
if (c.pointIsInside(Ta)) {
|
|
c.worldVerticesNeedsUpdate && c.computeWorldVertices(e, g);
|
|
c.worldFaceNormalsNeedsUpdate && c.computeWorldFaceNormals(g);
|
|
g = 0;
|
|
for (var m = c.faces.length; g !== m; g++) {
|
|
var p = c.worldFaceNormals[g];
|
|
j.vsub(c.worldVertices[c.faces[g][0]], Ea);
|
|
var s = -p.dot(Ea);
|
|
if (null === f || Math.abs(s) < Math.abs(f)) f = s, q = g, eb.copy(p), r++
|
|
} - 1 !== q ? (c = this.createContactEquation(l, n, d, c), eb.mult(f, Da), Da.vadd(j, Da), Da.vsub(e,
|
|
Da), c.rj.copy(Da), eb.negate(c.ni), c.ri.set(0, 0, 0), d = c.ri, f = c.rj, d.vadd(j, d), d.vsub(l.position, d), f.vadd(e, f), f.vsub(n.position, f), this.result.push(c), this.createFrictionEquationsFromContact(c, this.frictionResult)) : console.warn("Point found inside convex, but did not find penetrating face!")
|
|
}
|
|
};
|
|
d.prototype[f.types.BOX | f.types.HEIGHTFIELD] = d.prototype.boxHeightfield = function(c, d, e, j, g, f, n, l) {
|
|
c.convexPolyhedronRepresentation.material = c.material;
|
|
c.convexPolyhedronRepresentation.collisionResponse = c.collisionResponse;
|
|
this.convexHeightfield(c.convexPolyhedronRepresentation, d, e, j, g, f, n, l)
|
|
};
|
|
var Fa = new l,
|
|
xa = new l,
|
|
Ya = [0];
|
|
d.prototype[f.types.CONVEXPOLYHEDRON | f.types.HEIGHTFIELD] = d.prototype.convexHeightfield = function(c, d, e, g, f, n, l, q) {
|
|
var r = d.data,
|
|
m = d.elementSize,
|
|
p = c.boundingSphereRadius;
|
|
j.pointToLocalFrame(g, n, e, Fa);
|
|
var s = Math.floor((Fa.x - p) / m) - 1,
|
|
t = Math.ceil((Fa.x + p) / m) + 1,
|
|
u = Math.floor((Fa.y - p) / m) - 1,
|
|
m = Math.ceil((Fa.y + p) / m) + 1;
|
|
if (!(0 > t || 0 > m || s > r.length || u > r[0].length)) {
|
|
0 > s && (s = 0);
|
|
0 > t && (t = 0);
|
|
0 > u && (u = 0);
|
|
0 > m && (m = 0);
|
|
s >= r.length &&
|
|
(s = r.length - 1);
|
|
t >= r.length && (t = r.length - 1);
|
|
m >= r[0].length && (m = r[0].length - 1);
|
|
u >= r[0].length && (u = r[0].length - 1);
|
|
r = [];
|
|
d.getRectMinMax(s, u, t, m, r);
|
|
var y = r[0];
|
|
if (!(Fa.z - p > r[1] || Fa.z + p < y))
|
|
for (p = s; p < t; p++)
|
|
for (s = u; s < m; s++) d.getConvexTrianglePillar(p, s, !1), j.pointToWorldFrame(g, n, d.pillarOffset, xa), e.distanceTo(xa) < d.pillarConvex.boundingSphereRadius + c.boundingSphereRadius && this.convexConvex(c, d.pillarConvex, e, xa, f, n, l, q, null, null, Ya, null), d.getConvexTrianglePillar(p, s, !0), j.pointToWorldFrame(g, n, d.pillarOffset,
|
|
xa), e.distanceTo(xa) < d.pillarConvex.boundingSphereRadius + c.boundingSphereRadius && this.convexConvex(c, d.pillarConvex, e, xa, f, n, l, q, null, null, Ya, null)
|
|
}
|
|
};
|
|
var ya = new l,
|
|
za = new l;
|
|
d.prototype[f.types.SPHERE | f.types.HEIGHTFIELD] = d.prototype.sphereHeightfield = function(c, d, e, g, f, n, l, q) {
|
|
var r = d.data,
|
|
m = c.radius,
|
|
s = d.elementSize;
|
|
j.pointToLocalFrame(g, n, e, ya);
|
|
var p = Math.floor((ya.x - m) / s) - 1,
|
|
t = Math.ceil((ya.x + m) / s) + 1,
|
|
u = Math.floor((ya.y - m) / s) - 1,
|
|
s = Math.ceil((ya.y + m) / s) + 1;
|
|
if (!(0 > t || 0 > s || p > r.length || s > r[0].length)) {
|
|
0 >
|
|
p && (p = 0);
|
|
0 > t && (t = 0);
|
|
0 > u && (u = 0);
|
|
0 > s && (s = 0);
|
|
p >= r.length && (p = r.length - 1);
|
|
t >= r.length && (t = r.length - 1);
|
|
s >= r[0].length && (s = r[0].length - 1);
|
|
u >= r[0].length && (u = r[0].length - 1);
|
|
r = [];
|
|
d.getRectMinMax(p, u, t, s, r);
|
|
var y = r[0];
|
|
if (!(ya.z - m > r[1] || ya.z + m < y))
|
|
for (m = this.result; p < t; p++)
|
|
for (r = u; r < s; r++)
|
|
if (y = m.length, d.getConvexTrianglePillar(p, r, !1), j.pointToWorldFrame(g, n, d.pillarOffset, za), e.distanceTo(za) < d.pillarConvex.boundingSphereRadius + c.boundingSphereRadius && this.sphereConvex(c, d.pillarConvex, e, za, f, n, l, q), d.getConvexTrianglePillar(p,
|
|
r, !0), j.pointToWorldFrame(g, n, d.pillarOffset, za), e.distanceTo(za) < d.pillarConvex.boundingSphereRadius + c.boundingSphereRadius && this.sphereConvex(c, d.pillarConvex, e, za, f, n, l, q), 2 < m.length - y) return
|
|
}
|
|
}
|
|
}, {
|
|
"../collision/AABB": 3,
|
|
"../collision/Ray": 9,
|
|
"../equations/ContactEquation": 19,
|
|
"../equations/FrictionEquation": 21,
|
|
"../math/Quaternion": 28,
|
|
"../math/Transform": 29,
|
|
"../math/Vec3": 30,
|
|
"../shapes/ConvexPolyhedron": 38,
|
|
"../shapes/Shape": 43,
|
|
"../solver/Solver": 47,
|
|
"../utils/Vec3Pool": 54
|
|
}],
|
|
56: [function(c, e) {
|
|
function d() {
|
|
j.apply(this);
|
|
this.dt = -1;
|
|
this.allowSleep = !1;
|
|
this.contacts = [];
|
|
this.frictionEquations = [];
|
|
this.quatNormalizeSkip = 0;
|
|
this.quatNormalizeFast = !1;
|
|
this.stepnumber = this.time = 0;
|
|
this.default_dt = 1 / 60;
|
|
this.nextId = 0;
|
|
this.gravity = new g;
|
|
this.broadphase = new x;
|
|
this.bodies = [];
|
|
this.solver = new m;
|
|
this.constraints = [];
|
|
this.narrowphase = new l(this);
|
|
this.collisionMatrix = new q;
|
|
this.collisionMatrixPrevious = new q;
|
|
this.materials = [];
|
|
this.contactmaterials = [];
|
|
this.contactMaterialTable = new t;
|
|
this.defaultMaterial = new n("default");
|
|
this.defaultContactMaterial =
|
|
new r(this.defaultMaterial, this.defaultMaterial, {
|
|
friction: 0.3,
|
|
restitution: 0
|
|
});
|
|
this.doProfiling = !1;
|
|
this.profile = {
|
|
solve: 0,
|
|
makeContactConstraints: 0,
|
|
broadphase: 0,
|
|
integrate: 0,
|
|
narrowphase: 0
|
|
};
|
|
this.subsystems = [];
|
|
this.addBodyEvent = {
|
|
type: "addBody",
|
|
body: null
|
|
};
|
|
this.removeBodyEvent = {
|
|
type: "removeBody",
|
|
body: null
|
|
}
|
|
}
|
|
e.exports = d;
|
|
c("../shapes/Shape");
|
|
var g = c("../math/Vec3"),
|
|
f = c("../math/Quaternion"),
|
|
m = c("../solver/GSSolver");
|
|
c("../utils/Vec3Pool");
|
|
c("../equations/ContactEquation");
|
|
c("../equations/FrictionEquation");
|
|
var l = c("./Narrowphase"),
|
|
j = c("../utils/EventTarget"),
|
|
q = c("../collision/ArrayCollisionMatrix"),
|
|
n = c("../material/Material"),
|
|
r = c("../material/ContactMaterial"),
|
|
s = c("../objects/Body"),
|
|
t = c("../utils/TupleDictionary"),
|
|
u = c("../collision/RaycastResult"),
|
|
y = c("../collision/AABB"),
|
|
z = c("../collision/Ray"),
|
|
x = c("../collision/NaiveBroadphase");
|
|
d.prototype = new j;
|
|
new y;
|
|
var C = new z;
|
|
d.prototype.getContactMaterial = function(c, d) {
|
|
return this.contactMaterialTable.get(c.id, d.id)
|
|
};
|
|
d.prototype.numObjects = function() {
|
|
return this.bodies.length
|
|
};
|
|
d.prototype.collisionMatrixTick = function() {
|
|
var c = this.collisionMatrixPrevious;
|
|
this.collisionMatrixPrevious = this.collisionMatrix;
|
|
this.collisionMatrix = c;
|
|
this.collisionMatrix.reset()
|
|
};
|
|
d.prototype.add = d.prototype.addBody = function(c) {
|
|
-1 === this.bodies.indexOf(c) && (c.index = this.bodies.length, this.bodies.push(c), c.world = this, c.initPosition.copy(c.position), c.initVelocity.copy(c.velocity), c.timeLastSleepy = this.time, c instanceof s && (c.initAngularVelocity.copy(c.angularVelocity), c.initQuaternion.copy(c.quaternion)),
|
|
this.collisionMatrix.setNumObjects(this.bodies.length), this.addBodyEvent.body = c, this.dispatchEvent(this.addBodyEvent))
|
|
};
|
|
d.prototype.addConstraint = function(c) {
|
|
this.constraints.push(c)
|
|
};
|
|
d.prototype.removeConstraint = function(c) {
|
|
c = this.constraints.indexOf(c); - 1 !== c && this.constraints.splice(c, 1)
|
|
};
|
|
d.prototype.rayTest = function(c, d, e) {
|
|
e instanceof u ? this.raycastClosest(c, d, {
|
|
skipBackfaces: !0
|
|
}, e) : this.raycastAll(c, d, {
|
|
skipBackfaces: !0
|
|
}, e)
|
|
};
|
|
d.prototype.raycastAll = function(c, d, e, j) {
|
|
e.mode = z.ALL;
|
|
e.from = c;
|
|
e.to =
|
|
d;
|
|
e.callback = j;
|
|
return C.intersectWorld(this, e)
|
|
};
|
|
d.prototype.raycastAny = function(c, d, e, j) {
|
|
e.mode = z.ANY;
|
|
e.from = c;
|
|
e.to = d;
|
|
e.result = j;
|
|
return C.intersectWorld(this, e)
|
|
};
|
|
d.prototype.raycastClosest = function(c, d, e, j) {
|
|
e.mode = z.CLOSEST;
|
|
e.from = c;
|
|
e.to = d;
|
|
e.result = j;
|
|
return C.intersectWorld(this, e)
|
|
};
|
|
d.prototype.remove = function(c) {
|
|
c.world = null;
|
|
var d = this.bodies.length - 1,
|
|
e = this.bodies,
|
|
j = e.indexOf(c);
|
|
if (-1 !== j) {
|
|
e.splice(j, 1);
|
|
for (j = 0; j !== e.length; j++) e[j].index = j;
|
|
this.collisionMatrix.setNumObjects(d);
|
|
this.removeBodyEvent.body =
|
|
c;
|
|
this.dispatchEvent(this.removeBodyEvent)
|
|
}
|
|
};
|
|
d.prototype.removeBody = d.prototype.remove;
|
|
d.prototype.addMaterial = function(c) {
|
|
this.materials.push(c)
|
|
};
|
|
d.prototype.addContactMaterial = function(c) {
|
|
this.contactmaterials.push(c);
|
|
this.contactMaterialTable.set(c.materials[0].id, c.materials[1].id, c)
|
|
};
|
|
"undefined" === typeof performance && (performance = {});
|
|
if (!performance.now) {
|
|
var B = Date.now();
|
|
performance.timing && performance.timing.navigationStart && (B = performance.timing.navigationStart);
|
|
performance.now = function() {
|
|
return Date.now() -
|
|
B
|
|
}
|
|
}
|
|
var E = new g;
|
|
d.prototype.step = function(c, d, e) {
|
|
e = e || 10;
|
|
d = d || 0;
|
|
if (0 === d) this.internalStep(c), this.time += c;
|
|
else {
|
|
var j = Math.floor((this.time + d) / c) - Math.floor(this.time / c),
|
|
j = Math.min(j, e);
|
|
e = performance.now();
|
|
for (var g = 0; g !== j && !(this.internalStep(c), performance.now() - e > 1E3 * c); g++);
|
|
this.time += d;
|
|
c = this.time % c / c;
|
|
d = this.bodies;
|
|
for (j = 0; j !== d.length; j++) e = d[j], e.type !== s.STATIC && e.sleepState !== s.SLEEPING ? (e.position.vsub(e.previousPosition, E), E.scale(c, E), e.position.vadd(E, e.interpolatedPosition)) : (e.interpolatedPosition.copy(e.position),
|
|
e.interpolatedQuaternion.copy(e.quaternion))
|
|
}
|
|
};
|
|
var G = {
|
|
type: "postStep"
|
|
},
|
|
D = {
|
|
type: "preStep"
|
|
},
|
|
A = {
|
|
type: "collide",
|
|
body: null,
|
|
contact: null
|
|
},
|
|
H = [],
|
|
O = [],
|
|
K = [],
|
|
S = [];
|
|
new g;
|
|
new g;
|
|
new g;
|
|
new g;
|
|
new g;
|
|
new g;
|
|
new g;
|
|
new g;
|
|
new g;
|
|
new f;
|
|
var J = new f,
|
|
Y = new f,
|
|
ca = new g;
|
|
d.prototype.internalStep = function(c) {
|
|
this.dt = c;
|
|
var d = this.contacts,
|
|
e = this.numObjects(),
|
|
j = this.bodies,
|
|
g = this.solver,
|
|
f = this.gravity,
|
|
n = this.doProfiling,
|
|
l = this.profile,
|
|
q = s.DYNAMIC,
|
|
r, m = this.constraints;
|
|
f.norm();
|
|
var t = f.x,
|
|
u = f.y,
|
|
y = f.z;
|
|
n && (r = performance.now());
|
|
for (f = 0; f !==
|
|
e; f++) {
|
|
var x = j[f];
|
|
if (x.type & q) {
|
|
var z = x.force,
|
|
x = x.mass;
|
|
z.x += x * t;
|
|
z.y += x * u;
|
|
z.z += x * y
|
|
}
|
|
}
|
|
f = 0;
|
|
for (x = this.subsystems.length; f !== x; f++) this.subsystems[f].update();
|
|
n && (r = performance.now());
|
|
K.length = 0;
|
|
S.length = 0;
|
|
this.broadphase.collisionPairs(this, K, S);
|
|
n && (l.broadphase = performance.now() - r);
|
|
x = m.length;
|
|
for (f = 0; f !== x; f++)
|
|
if (t = m[f], !t.collideConnected)
|
|
for (u = K.length - 1; 0 <= u; u -= 1)
|
|
if (t.bodyA === K[u] && t.bodyB === S[u] || t.bodyB === K[u] && t.bodyA === S[u]) K.splice(u, 1), S.splice(u, 1);
|
|
this.collisionMatrixTick();
|
|
n && (r = performance.now());
|
|
x = d.length;
|
|
for (f = 0; f !== x; f++) H.push(d[f]);
|
|
d.length = 0;
|
|
x = this.frictionEquations.length;
|
|
for (f = 0; f !== x; f++) O.push(this.frictionEquations[f]);
|
|
this.frictionEquations.length = 0;
|
|
this.narrowphase.getContacts(K, S, this, d, H, this.frictionEquations, O);
|
|
n && (l.narrowphase = performance.now() - r);
|
|
n && (r = performance.now());
|
|
for (f = 0; f < this.frictionEquations.length; f++) g.addEquation(this.frictionEquations[f]);
|
|
f = d.length;
|
|
for (u = 0; u !== f; u++) {
|
|
t = d[u];
|
|
x = t.bi;
|
|
y = t.bj;
|
|
x.material && y.material && this.getContactMaterial(x.material, y.material);
|
|
x.material && y.material && 0 <= x.material.restitution && 0 <= y.material.restitution && (t.restitution = x.material.restitution * y.material.restitution);
|
|
g.addEquation(t);
|
|
if (x.allowSleep && x.type === s.DYNAMIC && x.sleepState === s.SLEEPING && y.sleepState === s.AWAKE && y.type !== s.STATIC) {
|
|
var z = y.velocity.norm2() + y.angularVelocity.norm2(),
|
|
C = Math.pow(y.sleepSpeedLimit, 2);
|
|
z >= 2 * C && (x._wakeUpAfterNarrowphase = !0)
|
|
}
|
|
y.allowSleep && y.type === s.DYNAMIC && (y.sleepState === s.SLEEPING && x.sleepState === s.AWAKE && x.type !== s.STATIC) && (z = x.velocity.norm2() +
|
|
x.angularVelocity.norm2(), C = Math.pow(x.sleepSpeedLimit, 2), z >= 2 * C && (y._wakeUpAfterNarrowphase = !0));
|
|
this.collisionMatrix.set(x, y, !0);
|
|
this.collisionMatrixPrevious.get(x, y) || (A.body = y, A.contact = t, x.dispatchEvent(A), A.body = x, y.dispatchEvent(A))
|
|
}
|
|
n && (l.makeContactConstraints = performance.now() - r, r = performance.now());
|
|
for (f = 0; f !== e; f++) x = j[f], x._wakeUpAfterNarrowphase && (x.wakeUp(), x._wakeUpAfterNarrowphase = !1);
|
|
x = m.length;
|
|
for (f = 0; f !== x; f++) {
|
|
t = m[f];
|
|
t.update();
|
|
u = 0;
|
|
for (d = t.equations.length; u !== d; u++) g.addEquation(t.equations[u])
|
|
}
|
|
g.solve(c,
|
|
this);
|
|
n && (l.solve = performance.now() - r);
|
|
g.removeAllEquations();
|
|
g = Math.pow;
|
|
for (f = 0; f !== e; f++)
|
|
if (x = j[f], x.type & q && (m = g(1 - x.linearDamping, c), d = x.velocity, d.mult(m, d), m = x.angularVelocity)) d = g(1 - x.angularDamping, c), m.mult(d, m);
|
|
this.dispatchEvent(D);
|
|
for (f = 0; f !== e; f++) x = j[f], x.preStep && x.preStep.call(x);
|
|
n && (r = performance.now());
|
|
q = s.DYNAMIC | s.KINEMATIC;
|
|
g = 0 === this.stepnumber % (this.quatNormalizeSkip + 1);
|
|
m = this.quatNormalizeFast;
|
|
d = 0.5 * c;
|
|
for (f = 0; f !== e; f++)
|
|
if (x = j[f], t = x.force, u = x.torque, x.type & q && x.sleepState !==
|
|
s.SLEEPING) {
|
|
var y = x.velocity,
|
|
z = x.angularVelocity,
|
|
C = x.position,
|
|
B = x.quaternion,
|
|
E = x.invMass,
|
|
Ha = x.invInertiaWorld;
|
|
y.x += t.x * E * c;
|
|
y.y += t.y * E * c;
|
|
y.z += t.z * E * c;
|
|
x.angularVelocity && (Ha.vmult(u, ca), ca.mult(c, ca), ca.vadd(z, z));
|
|
C.x += y.x * c;
|
|
C.y += y.y * c;
|
|
C.z += y.z * c;
|
|
x.angularVelocity && (J.set(z.x, z.y, z.z, 0), J.mult(B, Y), B.x += d * Y.x, B.y += d * Y.y, B.z += d * Y.z, B.w += d * Y.w, g && (m ? B.normalizeFast() : B.normalize()));
|
|
x.aabb && (x.aabbNeedsUpdate = !0);
|
|
x.updateInertiaWorld && x.updateInertiaWorld()
|
|
} this.clearForces();
|
|
this.broadphase.dirty = !0;
|
|
n && (l.integrate = performance.now() - r);
|
|
this.time += c;
|
|
this.stepnumber += 1;
|
|
this.dispatchEvent(G);
|
|
for (f = 0; f !== e; f++) x = j[f], (c = x.postStep) && c.call(x);
|
|
if (this.allowSleep)
|
|
for (f = 0; f !== e; f++) j[f].sleepTick(this.time)
|
|
};
|
|
d.prototype.clearForces = function() {
|
|
for (var c = this.bodies, d = c.length, e = 0; e !== d; e++) {
|
|
var j = c[e];
|
|
j.force.set(0, 0, 0);
|
|
j.torque.set(0, 0, 0)
|
|
}
|
|
}
|
|
}, {
|
|
"../collision/AABB": 3,
|
|
"../collision/ArrayCollisionMatrix": 4,
|
|
"../collision/NaiveBroadphase": 7,
|
|
"../collision/Ray": 9,
|
|
"../collision/RaycastResult": 10,
|
|
"../equations/ContactEquation": 19,
|
|
"../equations/FrictionEquation": 21,
|
|
"../material/ContactMaterial": 24,
|
|
"../material/Material": 25,
|
|
"../math/Quaternion": 28,
|
|
"../math/Vec3": 30,
|
|
"../objects/Body": 31,
|
|
"../shapes/Shape": 43,
|
|
"../solver/GSSolver": 46,
|
|
"../utils/EventTarget": 49,
|
|
"../utils/TupleDictionary": 52,
|
|
"../utils/Vec3Pool": 54,
|
|
"./Narrowphase": 55
|
|
}]
|
|
}, {}, [2])(2)
|
|
});
|
|
|
|
function getInternetExplorerVersion() {
|
|
var b = -1;
|
|
"Microsoft Internet Explorer" == navigator.appName && null != /MSIE ([0-9]{1,}[.0-9]{0,})/.exec(navigator.userAgent) && (b = parseFloat(RegExp.$1));
|
|
return b
|
|
}
|
|
var ie = getInternetExplorerVersion();
|
|
|
|
function getQueryVariable(b) {
|
|
for (var c = window.location.search.substring(1).split("&"), e = 0; e < c.length; e++) {
|
|
var d = c[e].split("=");
|
|
if (decodeURIComponent(d[0]) == b) return decodeURIComponent(d[1])
|
|
}
|
|
}
|
|
this.jukebox = {};
|
|
jukebox.Player = function(b, c) {
|
|
this.id = ++jukebox.__jukeboxId;
|
|
this.origin = c || null;
|
|
this.settings = {};
|
|
for (var e in this.defaults) this.settings[e] = this.defaults[e];
|
|
if ("[object Object]" === Object.prototype.toString.call(b))
|
|
for (var d in b) this.settings[d] = b[d];
|
|
"[object Function]" === Object.prototype.toString.call(jukebox.Manager) && (jukebox.Manager = new jukebox.Manager);
|
|
this.resource = this.isPlaying = null;
|
|
this.resource = "[object Object]" === Object.prototype.toString.call(jukebox.Manager) ? jukebox.Manager.getPlayableResource(this.settings.resources) :
|
|
this.settings.resources[0] || null;
|
|
if (null === this.resource) throw "Your browser can't playback the given resources - or you have missed to include jukebox.Manager";
|
|
this.__init();
|
|
return this
|
|
};
|
|
jukebox.__jukeboxId = 0;
|
|
jukebox.Player.prototype = {
|
|
defaults: {
|
|
resources: [],
|
|
autoplay: !1,
|
|
spritemap: {},
|
|
flashMediaElement: "./swf/FlashMediaElement.swf",
|
|
timeout: 1E3
|
|
},
|
|
__addToManager: function() {
|
|
!0 !== this.__wasAddedToManager && (jukebox.Manager.add(this), this.__wasAddedToManager = !0)
|
|
},
|
|
__init: function() {
|
|
var b = this,
|
|
c = this.settings,
|
|
e = {},
|
|
d;
|
|
jukebox.Manager && void 0 !== jukebox.Manager.features && (e = jukebox.Manager.features);
|
|
if (!0 === e.html5audio) {
|
|
this.context = new Audio;
|
|
this.context.src = this.resource;
|
|
if (null === this.origin) {
|
|
var g = function(c) {
|
|
b.__addToManager(c)
|
|
};
|
|
this.context.addEventListener("canplaythrough", g, !0);
|
|
window.setTimeout(function() {
|
|
b.context.removeEventListener("canplaythrough", g, !0);
|
|
g("timeout")
|
|
}, c.timeout)
|
|
}
|
|
this.context.autobuffer = !0;
|
|
this.context.preload = !0;
|
|
for (d in this.HTML5API) this[d] = this.HTML5API[d];
|
|
1 < e.channels ? !0 === c.autoplay ? this.context.autoplay = !0 : void 0 !== c.spritemap[c.autoplay] && this.play(c.autoplay) : 1 === e.channels && void 0 !== c.spritemap[c.autoplay] && (this.backgroundMusic = c.spritemap[c.autoplay], this.backgroundMusic.started = Date.now ?
|
|
Date.now() : +new Date, this.play(c.autoplay));
|
|
1 == e.channels && !0 !== c.canPlayBackground && (window.addEventListener("pagehide", function() {
|
|
null !== b.isPlaying && (b.pause(), b.__wasAutoPaused = !0)
|
|
}), window.addEventListener("pageshow", function() {
|
|
b.__wasAutoPaused && (b.resume(), delete b._wasAutoPaused)
|
|
}))
|
|
} else if (!0 === e.flashaudio) {
|
|
for (d in this.FLASHAPI) this[d] = this.FLASHAPI[d];
|
|
e = ["id=jukebox-flashstream-" + this.id, "autoplay=" + c.autoplay, "file=" + window.encodeURIComponent(this.resource)];
|
|
this.__initFlashContext(e);
|
|
!0 === c.autoplay ? this.play(0) : c.spritemap[c.autoplay] && this.play(c.autoplay)
|
|
} else throw "Your Browser does not support Flash Audio or HTML5 Audio.";
|
|
},
|
|
__initFlashContext: function(b) {
|
|
var c, e = this.settings.flashMediaElement,
|
|
d, g = {
|
|
flashvars: b.join("&"),
|
|
quality: "high",
|
|
bgcolor: "#000000",
|
|
wmode: "transparent",
|
|
allowscriptaccess: "always",
|
|
allowfullscreen: "true"
|
|
};
|
|
if (navigator.userAgent.match(/MSIE/)) {
|
|
c = document.createElement("div");
|
|
document.getElementsByTagName("body")[0].appendChild(c);
|
|
var f = document.createElement("object");
|
|
f.id = "jukebox-flashstream-" + this.id;
|
|
f.setAttribute("type", "application/x-shockwave-flash");
|
|
f.setAttribute("classid", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000");
|
|
f.setAttribute("width", "0");
|
|
f.setAttribute("height", "0");
|
|
g.movie = e + "?x=" + (Date.now ? Date.now() : +new Date);
|
|
g.flashvars = b.join("&");
|
|
for (d in g) b = document.createElement("param"), b.setAttribute("name", d), b.setAttribute("value", g[d]), f.appendChild(b);
|
|
c.outerHTML = f.outerHTML;
|
|
this.context = document.getElementById("jukebox-flashstream-" + this.id)
|
|
} else {
|
|
c =
|
|
document.createElement("embed");
|
|
c.id = "jukebox-flashstream-" + this.id;
|
|
c.setAttribute("type", "application/x-shockwave-flash");
|
|
c.setAttribute("width", "100");
|
|
c.setAttribute("height", "100");
|
|
g.play = !1;
|
|
g.loop = !1;
|
|
g.src = e + "?x=" + (Date.now ? Date.now() : +new Date);
|
|
for (d in g) c.setAttribute(d, g[d]);
|
|
document.getElementsByTagName("body")[0].appendChild(c);
|
|
this.context = c
|
|
}
|
|
},
|
|
backgroundHackForiOS: function() {
|
|
if (void 0 !== this.backgroundMusic) {
|
|
var b = Date.now ? Date.now() : +new Date;
|
|
void 0 === this.backgroundMusic.started ? (this.backgroundMusic.started =
|
|
b, this.setCurrentTime(this.backgroundMusic.start)) : (this.backgroundMusic.lastPointer = (b - this.backgroundMusic.started) / 1E3 % (this.backgroundMusic.end - this.backgroundMusic.start) + this.backgroundMusic.start, this.play(this.backgroundMusic.lastPointer))
|
|
}
|
|
},
|
|
play: function(b, c) {
|
|
if (null !== this.isPlaying && !0 !== c) void 0 !== jukebox.Manager && jukebox.Manager.addToQueue(b, this.id);
|
|
else {
|
|
var e = this.settings.spritemap,
|
|
d;
|
|
if (void 0 !== e[b]) d = e[b].start;
|
|
else if ("number" === typeof b) {
|
|
d = b;
|
|
for (var g in e)
|
|
if (d >= e[g].start && d <=
|
|
e[g].end) {
|
|
b = g;
|
|
break
|
|
}
|
|
}
|
|
void 0 !== d && "[object Object]" === Object.prototype.toString.call(e[b]) && (this.isPlaying = this.settings.spritemap[b], this.context.play && this.context.play(), this.wasReady = this.setCurrentTime(d))
|
|
}
|
|
},
|
|
stop: function() {
|
|
this.__lastPosition = 0;
|
|
this.isPlaying = null;
|
|
this.backgroundMusic ? this.backgroundHackForiOS() : this.context.pause();
|
|
return !0
|
|
},
|
|
pause: function() {
|
|
this.isPlaying = null;
|
|
this.__lastPosition = this.getCurrentTime();
|
|
this.context.pause();
|
|
return this.__lastPosition
|
|
},
|
|
resume: function(b) {
|
|
b = "number" ===
|
|
typeof b ? b : this.__lastPosition;
|
|
if (null !== b) return this.play(b), this.__lastPosition = null, !0;
|
|
this.context.play();
|
|
return !1
|
|
},
|
|
HTML5API: {
|
|
getVolume: function() {
|
|
return this.context.volume || 1
|
|
},
|
|
setVolume: function(b) {
|
|
this.context.volume = b;
|
|
return 1E-4 > Math.abs(this.context.volume - b) ? !0 : !1
|
|
},
|
|
getCurrentTime: function() {
|
|
return this.context.currentTime || 0
|
|
},
|
|
setCurrentTime: function(b) {
|
|
try {
|
|
return this.context.currentTime = b, !0
|
|
} catch (c) {
|
|
return !1
|
|
}
|
|
}
|
|
},
|
|
FLASHAPI: {
|
|
getVolume: function() {
|
|
return this.context && "function" === typeof this.context.getVolume ?
|
|
this.context.getVolume() : 1
|
|
},
|
|
setVolume: function(b) {
|
|
return this.context && "function" === typeof this.context.setVolume ? (this.context.setVolume(b), !0) : !1
|
|
},
|
|
getCurrentTime: function() {
|
|
return this.context && "function" === typeof this.context.getCurrentTime ? this.context.getCurrentTime() : 0
|
|
},
|
|
setCurrentTime: function(b) {
|
|
return this.context && "function" === typeof this.context.setCurrentTime ? this.context.setCurrentTime(b) : !1
|
|
}
|
|
}
|
|
};
|
|
if (void 0 === this.jukebox) throw "jukebox.Manager requires jukebox.Player (Player.js) to run properly.";
|
|
jukebox.Manager = function(b) {
|
|
this.features = {};
|
|
this.codecs = {};
|
|
this.__players = {};
|
|
this.__playersLength = 0;
|
|
this.__clones = {};
|
|
this.__queue = [];
|
|
this.settings = {};
|
|
for (var c in this.defaults) this.settings[c] = this.defaults[c];
|
|
if ("[object Object]" === Object.prototype.toString.call(b))
|
|
for (var e in b) this.settings[e] = b[e];
|
|
this.__detectFeatures();
|
|
jukebox.Manager.__initialized = !1 === this.settings.useGameLoop ? window.setInterval(function() {
|
|
jukebox.Manager.loop()
|
|
}, 20) : !0
|
|
};
|
|
jukebox.Manager.prototype = {
|
|
defaults: {
|
|
useFlash: !1,
|
|
useGameLoop: !1
|
|
},
|
|
__detectFeatures: function() {
|
|
var b = window.Audio && new Audio;
|
|
if (b && b.canPlayType && !1 === this.settings.useFlash) {
|
|
for (var c = [{
|
|
e: "3gp",
|
|
m: ["audio/3gpp", "audio/amr"]
|
|
}, {
|
|
e: "aac",
|
|
m: ["audio/aac", "audio/aacp"]
|
|
}, {
|
|
e: "amr",
|
|
m: ["audio/amr", "audio/3gpp"]
|
|
}, {
|
|
e: "caf",
|
|
m: ["audio/IMA-ADPCM", "audio/x-adpcm", 'audio/x-aiff; codecs="IMA-ADPCM, ADPCM"']
|
|
}, {
|
|
e: "m4a",
|
|
m: 'audio/mp4{audio/mp4; codecs="mp4a.40.2,avc1.42E01E"{audio/mpeg4{audio/mpeg4-generic{audio/mp4a-latm{audio/MP4A-LATM{audio/x-m4a'.split("{")
|
|
},
|
|
{
|
|
e: "mp3",
|
|
m: ["audio/mp3", "audio/mpeg", 'audio/mpeg; codecs="mp3"', "audio/MPA", "audio/mpa-robust"]
|
|
}, {
|
|
e: "mpga",
|
|
m: ["audio/MPA", "audio/mpa-robust", "audio/mpeg", "video/mpeg"]
|
|
}, {
|
|
e: "mp4",
|
|
m: ["audio/mp4", "video/mp4"]
|
|
}, {
|
|
e: "ogg",
|
|
m: ["application/ogg", "audio/ogg", 'audio/ogg; codecs="theora, vorbis"', "video/ogg", 'video/ogg; codecs="theora, vorbis"']
|
|
}, {
|
|
e: "wav",
|
|
m: ["audio/wave", "audio/wav", 'audio/wav; codecs="1"', "audio/x-wav", "audio/x-pn-wav"]
|
|
}, {
|
|
e: "webm",
|
|
m: ["audio/webm", 'audio/webm; codecs="vorbis"', "video/webm"]
|
|
}
|
|
],
|
|
e, d, g = 0, f = c.length; g < f; g++)
|
|
if (d = c[g].e, c[g].m.length && "object" === typeof c[g].m)
|
|
for (var m = 0, l = c[g].m.length; m < l; m++)
|
|
if (e = c[g].m[m], "" !== b.canPlayType(e)) {
|
|
this.codecs[d] = e;
|
|
break
|
|
} else this.codecs[d] || (this.codecs[d] = !1);
|
|
this.features.html5audio = !(!this.codecs.mp3 && !this.codecs.ogg && !this.codecs.webm && !this.codecs.wav);
|
|
this.features.channels = 8;
|
|
b.volume = 0.1337;
|
|
this.features.volume = !!(1E-4 > Math.abs(b.volume - 0.1337));
|
|
navigator.userAgent.match(/iPhone|iPod|iPad/i) && (this.features.channels = 1)
|
|
}
|
|
this.features.flashaudio = !!navigator.mimeTypes["application/x-shockwave-flash"] || !!navigator.plugins["Shockwave Flash"] || !1;
|
|
if (window.ActiveXObject) try {
|
|
new ActiveXObject("ShockwaveFlash.ShockwaveFlash.10"), this.features.flashaudio = !0
|
|
} catch (j) {}!0 === this.settings.useFlash && (this.features.flashaudio = !0);
|
|
!0 === this.features.flashaudio && !this.features.html5audio && (this.codecs.mp3 = "audio/mp3", this.codecs.mpga = "audio/mpeg", this.codecs.mp4 = "audio/mp4", this.codecs.m4a = "audio/mp4", this.codecs["3gp"] = "audio/3gpp", this.codecs.amr = "audio/amr",
|
|
this.features.volume = !0, this.features.channels = 1)
|
|
},
|
|
__getPlayerById: function(b) {
|
|
return this.__players && void 0 !== this.__players[b] ? this.__players[b] : null
|
|
},
|
|
__getClone: function(b, c) {
|
|
for (var e in this.__clones) {
|
|
var d = this.__clones[e];
|
|
if (null === d.isPlaying && d.origin === b) return d
|
|
}
|
|
if ("[object Object]" === Object.prototype.toString.call(c)) {
|
|
e = {};
|
|
for (var g in c) e[g] = c[g];
|
|
e.autoplay = !1;
|
|
g = new jukebox.Player(e, b);
|
|
g.isClone = !0;
|
|
g.wasReady = !1;
|
|
return this.__clones[g.id] = g
|
|
}
|
|
return null
|
|
},
|
|
loop: function() {
|
|
if (0 !== this.__playersLength)
|
|
if (this.__queue.length &&
|
|
this.__playersLength < this.features.channels) {
|
|
var b = this.__queue[0],
|
|
c = this.__getPlayerById(b.origin);
|
|
if (null !== c) {
|
|
var e = this.__getClone(b.origin, c.settings);
|
|
null !== e && (!0 === this.features.volume && (c = this.__players[b.origin]) && e.setVolume(c.getVolume()), this.add(e), e.play(b.pointer, !0))
|
|
}
|
|
this.__queue.splice(0, 1)
|
|
} else
|
|
for (e in this.__queue.length && 1 === this.features.channels && (b = this.__queue[0], c = this.__getPlayerById(b.origin), null !== c && c.play(b.pointer, !0), this.__queue.splice(0, 1)), this.__players) b = this.__players[e],
|
|
c = b.getCurrentTime() || 0, b.isPlaying && !1 === b.wasReady ? b.wasReady = b.setCurrentTime(b.isPlaying.start) : b.isPlaying && !0 === b.wasReady ? c > b.isPlaying.end && (!0 === b.isPlaying.loop ? b.play(b.isPlaying.start, !0) : b.stop()) : b.isClone && null === b.isPlaying ? this.remove(b) : void 0 !== b.backgroundMusic && null === b.isPlaying && c > b.backgroundMusic.end && b.backgroundHackForiOS()
|
|
},
|
|
getPlayableResource: function(b) {
|
|
"[object Array]" !== Object.prototype.toString.call(b) && (b = [b]);
|
|
for (var c = 0, e = b.length; c < e; c++) {
|
|
var d = b[c],
|
|
g = d.match(/\.([^\.]*)$/)[1];
|
|
if (g && this.codecs[g]) return d
|
|
}
|
|
return null
|
|
},
|
|
add: function(b) {
|
|
return b instanceof jukebox.Player && void 0 === this.__players[b.id] ? (this.__playersLength++, this.__players[b.id] = b, !0) : !1
|
|
},
|
|
remove: function(b) {
|
|
return b instanceof jukebox.Player && void 0 !== this.__players[b.id] ? (this.__playersLength--, delete this.__players[b.id], !0) : !1
|
|
},
|
|
addToQueue: function(b, c) {
|
|
return ("string" === typeof b || "number" === typeof b) && void 0 !== this.__players[c] ? (this.__queue.push({
|
|
pointer: b,
|
|
origin: c
|
|
}), !0) : !1
|
|
}
|
|
};
|
|
(function() {
|
|
var b = function() {
|
|
this.init()
|
|
};
|
|
b.prototype = {
|
|
init: function() {
|
|
var b = this || c;
|
|
b._counter = 1E3;
|
|
b._html5AudioPool = [];
|
|
b.html5PoolSize = 10;
|
|
b._codecs = {};
|
|
b._howls = [];
|
|
b._muted = !1;
|
|
b._volume = 1;
|
|
b._canPlayEvent = "canplaythrough";
|
|
b._navigator = "undefined" !== typeof window && window.navigator ? window.navigator : null;
|
|
b.masterGain = null;
|
|
b.noAudio = !1;
|
|
b.usingWebAudio = !0;
|
|
b.autoSuspend = !0;
|
|
b.ctx = null;
|
|
b.autoUnlock = !0;
|
|
b._setup();
|
|
return b
|
|
},
|
|
volume: function(b) {
|
|
var d = this || c;
|
|
b = parseFloat(b);
|
|
d.ctx || l();
|
|
if ("undefined" !== typeof b &&
|
|
0 <= b && 1 >= b) {
|
|
d._volume = b;
|
|
if (d._muted) return d;
|
|
d.usingWebAudio && d.masterGain.gain.setValueAtTime(b, c.ctx.currentTime);
|
|
for (var e = 0; e < d._howls.length; e++)
|
|
if (!d._howls[e]._webAudio)
|
|
for (var g = d._howls[e]._getSoundIds(), f = 0; f < g.length; f++) {
|
|
var m = d._howls[e]._soundById(g[f]);
|
|
m && m._node && (m._node.volume = m._volume * b)
|
|
}
|
|
return d
|
|
}
|
|
return d._volume
|
|
},
|
|
mute: function(b) {
|
|
var d = this || c;
|
|
d.ctx || l();
|
|
d._muted = b;
|
|
d.usingWebAudio && d.masterGain.gain.setValueAtTime(b ? 0 : d._volume, c.ctx.currentTime);
|
|
for (var e = 0; e < d._howls.length; e++)
|
|
if (!d._howls[e]._webAudio)
|
|
for (var g =
|
|
d._howls[e]._getSoundIds(), f = 0; f < g.length; f++) {
|
|
var m = d._howls[e]._soundById(g[f]);
|
|
m && m._node && (m._node.muted = b ? !0 : m._muted)
|
|
}
|
|
return d
|
|
},
|
|
unload: function() {
|
|
for (var b = this || c, d = b._howls.length - 1; 0 <= d; d--) b._howls[d].unload();
|
|
b.usingWebAudio && b.ctx && "undefined" !== typeof b.ctx.close && (b.ctx.close(), b.ctx = null, l());
|
|
return b
|
|
},
|
|
codecs: function(b) {
|
|
return (this || c)._codecs[b.replace(/^x-/, "")]
|
|
},
|
|
_setup: function() {
|
|
var b = this || c;
|
|
b.state = b.ctx ? b.ctx.state || "suspended" : "suspended";
|
|
b._autoSuspend();
|
|
if (!b.usingWebAudio)
|
|
if ("undefined" !==
|
|
typeof Audio) try {
|
|
var d = new Audio;
|
|
"undefined" === typeof d.oncanplaythrough && (b._canPlayEvent = "canplay")
|
|
} catch (e) {
|
|
b.noAudio = !0
|
|
} else b.noAudio = !0;
|
|
try {
|
|
d = new Audio, d.muted && (b.noAudio = !0)
|
|
} catch (g) {}
|
|
b.noAudio || b._setupCodecs();
|
|
return b
|
|
},
|
|
_setupCodecs: function() {
|
|
var b = this || c,
|
|
d = null;
|
|
try {
|
|
d = "undefined" !== typeof Audio ? new Audio : null
|
|
} catch (e) {
|
|
return b
|
|
}
|
|
if (!d || "function" !== typeof d.canPlayType) return b;
|
|
var g = d.canPlayType("audio/mpeg;").replace(/^no$/, ""),
|
|
f = b._navigator && b._navigator.userAgent.match(/OPR\/([0-6].)/g),
|
|
f = f && 33 > parseInt(f[0].split("/")[1], 10);
|
|
b._codecs = {
|
|
mp3: !(f || !g && !d.canPlayType("audio/mp3;").replace(/^no$/, "")),
|
|
mpeg: !!g,
|
|
opus: !!d.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, ""),
|
|
ogg: !!d.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
|
|
oga: !!d.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
|
|
wav: !!d.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""),
|
|
aac: !!d.canPlayType("audio/aac;").replace(/^no$/, ""),
|
|
caf: !!d.canPlayType("audio/x-caf;").replace(/^no$/, ""),
|
|
m4a: !!(d.canPlayType("audio/x-m4a;") ||
|
|
d.canPlayType("audio/m4a;") || d.canPlayType("audio/aac;")).replace(/^no$/, ""),
|
|
mp4: !!(d.canPlayType("audio/x-mp4;") || d.canPlayType("audio/mp4;") || d.canPlayType("audio/aac;")).replace(/^no$/, ""),
|
|
weba: !!d.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""),
|
|
webm: !!d.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, ""),
|
|
dolby: !!d.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/, ""),
|
|
flac: !!(d.canPlayType("audio/x-flac;") || d.canPlayType("audio/flac;")).replace(/^no$/, "")
|
|
};
|
|
return b
|
|
},
|
|
_unlockAudio: function() {
|
|
var b = this || c,
|
|
d = /iPhone|iPad|iPod|Android|BlackBerry|BB10|Silk|Mobi|Chrome|Safari/i.test(b._navigator && b._navigator.userAgent);
|
|
if (!b._audioUnlocked && b.ctx && d) {
|
|
b._audioUnlocked = !1;
|
|
b.autoUnlock = !1;
|
|
!b._mobileUnloaded && 44100 !== b.ctx.sampleRate && (b._mobileUnloaded = !0, b.unload());
|
|
b._scratchBuffer = b.ctx.createBuffer(1, 1, 22050);
|
|
var e = function() {
|
|
for (var c = 0; c < b.html5PoolSize; c++) {
|
|
var d = new Audio;
|
|
d._unlocked = !0;
|
|
b._releaseHtml5Audio(d)
|
|
}
|
|
for (c = 0; c < b._howls.length; c++)
|
|
if (!b._howls[c]._webAudio)
|
|
for (var d =
|
|
b._howls[c]._getSoundIds(), g = 0; g < d.length; g++) {
|
|
var f = b._howls[c]._soundById(d[g]);
|
|
f && f._node && !f._node._unlocked && (f._node._unlocked = !0, f._node.load())
|
|
}
|
|
b._autoResume();
|
|
var l = b.ctx.createBufferSource();
|
|
l.buffer = b._scratchBuffer;
|
|
l.connect(b.ctx.destination);
|
|
"undefined" === typeof l.start ? l.noteOn(0) : l.start(0);
|
|
"function" === typeof b.ctx.resume && b.ctx.resume();
|
|
l.onended = function() {
|
|
l.disconnect(0);
|
|
b._audioUnlocked = !0;
|
|
document.removeEventListener("touchstart", e, !0);
|
|
document.removeEventListener("touchend",
|
|
e, !0);
|
|
document.removeEventListener("click", e, !0);
|
|
for (var c = 0; c < b._howls.length; c++) b._howls[c]._emit("unlock")
|
|
}
|
|
};
|
|
document.addEventListener("touchstart", e, !0);
|
|
document.addEventListener("touchend", e, !0);
|
|
document.addEventListener("click", e, !0);
|
|
return b
|
|
}
|
|
},
|
|
_obtainHtml5Audio: function() {
|
|
var b = this || c;
|
|
if (b._html5AudioPool.length) return b._html5AudioPool.pop();
|
|
(b = (new Audio).play()) && "undefined" !== typeof Promise && (b instanceof Promise || "function" === typeof b.then) && b.catch(function() {
|
|
console.warn("HTML5 Audio pool exhausted, returning potentially locked audio object.")
|
|
});
|
|
return new Audio
|
|
},
|
|
_releaseHtml5Audio: function(b) {
|
|
var d = this || c;
|
|
b._unlocked && d._html5AudioPool.push(b);
|
|
return d
|
|
},
|
|
_autoSuspend: function() {
|
|
var b = this;
|
|
if (b.autoSuspend && b.ctx && "undefined" !== typeof b.ctx.suspend && c.usingWebAudio) {
|
|
for (var d = 0; d < b._howls.length; d++)
|
|
if (b._howls[d]._webAudio)
|
|
for (var e = 0; e < b._howls[d]._sounds.length; e++)
|
|
if (!b._howls[d]._sounds[e]._paused) return b;
|
|
b._suspendTimer && clearTimeout(b._suspendTimer);
|
|
b._suspendTimer = setTimeout(function() {
|
|
b.autoSuspend && (b._suspendTimer = null, b.state =
|
|
"suspending", b.ctx.suspend().then(function() {
|
|
b.state = "suspended";
|
|
b._resumeAfterSuspend && (delete b._resumeAfterSuspend, b._autoResume())
|
|
}))
|
|
}, 3E4);
|
|
return b
|
|
}
|
|
},
|
|
_autoResume: function() {
|
|
var b = this;
|
|
if (b.ctx && "undefined" !== typeof b.ctx.resume && c.usingWebAudio) return "running" === b.state && b._suspendTimer ? (clearTimeout(b._suspendTimer), b._suspendTimer = null) : "suspended" === b.state ? (b.ctx.resume().then(function() {
|
|
b.state = "running";
|
|
for (var c = 0; c < b._howls.length; c++) b._howls[c]._emit("resume")
|
|
}), b._suspendTimer && (clearTimeout(b._suspendTimer),
|
|
b._suspendTimer = null)) : "suspending" === b.state && (b._resumeAfterSuspend = !0), b
|
|
}
|
|
};
|
|
var c = new b,
|
|
e = function(b) {
|
|
!b.src || 0 === b.src.length ? console.error("An array of source files must be passed with any new Howl.") : this.init(b)
|
|
};
|
|
e.prototype = {
|
|
init: function(b) {
|
|
var d = this;
|
|
c.ctx || l();
|
|
d._autoplay = b.autoplay || !1;
|
|
d._format = "string" !== typeof b.format ? b.format : [b.format];
|
|
d._html5 = b.html5 || !1;
|
|
d._muted = b.mute || !1;
|
|
d._loop = b.loop || !1;
|
|
d._pool = b.pool || 5;
|
|
d._preload = "boolean" === typeof b.preload ? b.preload : !0;
|
|
d._rate = b.rate ||
|
|
1;
|
|
d._sprite = b.sprite || {};
|
|
d._src = "string" !== typeof b.src ? b.src : [b.src];
|
|
d._volume = void 0 !== b.volume ? b.volume : 1;
|
|
d._xhrWithCredentials = b.xhrWithCredentials || !1;
|
|
d._duration = 0;
|
|
d._state = "unloaded";
|
|
d._sounds = [];
|
|
d._endTimers = {};
|
|
d._queue = [];
|
|
d._playLock = !1;
|
|
d._onend = b.onend ? [{
|
|
fn: b.onend
|
|
}] : [];
|
|
d._onfade = b.onfade ? [{
|
|
fn: b.onfade
|
|
}] : [];
|
|
d._onload = b.onload ? [{
|
|
fn: b.onload
|
|
}] : [];
|
|
d._onloaderror = b.onloaderror ? [{
|
|
fn: b.onloaderror
|
|
}] : [];
|
|
d._onplayerror = b.onplayerror ? [{
|
|
fn: b.onplayerror
|
|
}] : [];
|
|
d._onpause = b.onpause ? [{
|
|
fn: b.onpause
|
|
}] : [];
|
|
d._onplay = b.onplay ? [{
|
|
fn: b.onplay
|
|
}] : [];
|
|
d._onstop = b.onstop ? [{
|
|
fn: b.onstop
|
|
}] : [];
|
|
d._onmute = b.onmute ? [{
|
|
fn: b.onmute
|
|
}] : [];
|
|
d._onvolume = b.onvolume ? [{
|
|
fn: b.onvolume
|
|
}] : [];
|
|
d._onrate = b.onrate ? [{
|
|
fn: b.onrate
|
|
}] : [];
|
|
d._onseek = b.onseek ? [{
|
|
fn: b.onseek
|
|
}] : [];
|
|
d._onunlock = b.onunlock ? [{
|
|
fn: b.onunlock
|
|
}] : [];
|
|
d._onresume = [];
|
|
d._webAudio = c.usingWebAudio && !d._html5;
|
|
"undefined" !== typeof c.ctx && c.ctx && c.autoUnlock && c._unlockAudio();
|
|
c._howls.push(d);
|
|
d._autoplay && d._queue.push({
|
|
event: "play",
|
|
action: function() {
|
|
d.play()
|
|
}
|
|
});
|
|
d._preload &&
|
|
d.load();
|
|
return d
|
|
},
|
|
load: function() {
|
|
var b = null;
|
|
if (c.noAudio) this._emit("loaderror", null, "No audio support.");
|
|
else {
|
|
"string" === typeof this._src && (this._src = [this._src]);
|
|
for (var e = 0; e < this._src.length; e++) {
|
|
var n, l;
|
|
if (this._format && this._format[e]) n = this._format[e];
|
|
else {
|
|
l = this._src[e];
|
|
if ("string" !== typeof l) {
|
|
this._emit("loaderror", null, "Non-string found in selected audio sources - ignoring.");
|
|
continue
|
|
}(n = /^data:audio\/([^;,]+);/i.exec(l)) || (n = /\.([^.]+)$/.exec(l.split("?", 1)[0]));
|
|
n && (n = n[1].toLowerCase())
|
|
}
|
|
n ||
|
|
console.warn('No file extension was found. Consider using the "format" property or specify an extension.');
|
|
if (n && c.codecs(n)) {
|
|
b = this._src[e];
|
|
break
|
|
}
|
|
}
|
|
if (b) {
|
|
this._src = b;
|
|
this._state = "loading";
|
|
"https:" === window.location.protocol && "http:" === b.slice(0, 5) && (this._html5 = !0, this._webAudio = !1);
|
|
new d(this);
|
|
if (this._webAudio) {
|
|
var s = this,
|
|
t = s._src;
|
|
if (g[t]) s._duration = g[t].duration, m(s);
|
|
else if (/^data:[^;]+;base64,/.test(t)) {
|
|
b = atob(t.split(",")[1]);
|
|
e = new Uint8Array(b.length);
|
|
for (n = 0; n < b.length; ++n) e[n] = b.charCodeAt(n);
|
|
f(e.buffer, s)
|
|
} else {
|
|
var u = new XMLHttpRequest;
|
|
u.open("GET", t, !0);
|
|
u.withCredentials = s._xhrWithCredentials;
|
|
u.responseType = "arraybuffer";
|
|
u.onload = function() {
|
|
var b = (u.status + "")[0];
|
|
"0" !== b && "2" !== b && "3" !== b ? s._emit("loaderror", null, "Failed loading audio file with status: " + u.status + ".") : f(u.response, s)
|
|
};
|
|
u.onerror = function() {
|
|
s._webAudio && (s._html5 = !0, s._webAudio = !1, s._sounds = [], delete g[t], s.load())
|
|
};
|
|
try {
|
|
u.send()
|
|
} catch (y) {
|
|
u.onerror()
|
|
}
|
|
}
|
|
}
|
|
return this
|
|
}
|
|
this._emit("loaderror", null, "No codec support for selected audio sources.")
|
|
}
|
|
},
|
|
play: function(b, d) {
|
|
var e = this,
|
|
g = null;
|
|
if ("number" === typeof b) g = b, b = null;
|
|
else {
|
|
if ("string" === typeof b && "loaded" === e._state && !e._sprite[b]) return null;
|
|
if ("undefined" === typeof b && (b = "__default", !e._playLock)) {
|
|
for (var f = 0, l = 0; l < e._sounds.length; l++) e._sounds[l]._paused && !e._sounds[l]._ended && (f++, g = e._sounds[l]._id);
|
|
1 === f ? b = null : g = null
|
|
}
|
|
}
|
|
var m = g ? e._soundById(g) : e._inactiveSound();
|
|
if (!m) return null;
|
|
g && !b && (b = m._sprite || "__default");
|
|
if ("loaded" !== e._state) {
|
|
m._sprite = b;
|
|
m._ended = !1;
|
|
var y = m._id;
|
|
e._queue.push({
|
|
event: "play",
|
|
action: function() {
|
|
e.play(y)
|
|
}
|
|
});
|
|
return y
|
|
}
|
|
if (g && !m._paused) return d || e._loadQueue("play"), m._id;
|
|
e._webAudio && c._autoResume();
|
|
var z = Math.max(0, 0 < m._seek ? m._seek : e._sprite[b][0] / 1E3),
|
|
x = Math.max(0, (e._sprite[b][0] + e._sprite[b][1]) / 1E3 - z),
|
|
C = 1E3 * x / Math.abs(m._rate),
|
|
B = e._sprite[b][0] / 1E3,
|
|
E = (e._sprite[b][0] + e._sprite[b][1]) / 1E3,
|
|
G = !(!m._loop && !e._sprite[b][2]);
|
|
m._sprite = b;
|
|
m._ended = !1;
|
|
var D = function() {
|
|
m._paused = !1;
|
|
m._seek = z;
|
|
m._start = B;
|
|
m._stop = E;
|
|
m._loop = G
|
|
};
|
|
if (z >= E) e._ended(m);
|
|
else {
|
|
var A = m._node;
|
|
if (e._webAudio) g =
|
|
function() {
|
|
e._playLock = !1;
|
|
D();
|
|
e._refreshBuffer(m);
|
|
A.gain.setValueAtTime(m._muted || e._muted ? 0 : m._volume, c.ctx.currentTime);
|
|
m._playStart = c.ctx.currentTime;
|
|
"undefined" === typeof A.bufferSource.start ? m._loop ? A.bufferSource.noteGrainOn(0, z, 86400) : A.bufferSource.noteGrainOn(0, z, x) : m._loop ? A.bufferSource.start(0, z, 86400) : A.bufferSource.start(0, z, x);
|
|
Infinity !== C && (e._endTimers[m._id] = setTimeout(e._ended.bind(e, m), C));
|
|
d || setTimeout(function() {
|
|
e._emit("play", m._id);
|
|
e._loadQueue()
|
|
}, 0)
|
|
}, "running" === c.state ? g() :
|
|
(e._playLock = !0, e.once("resume", g), e._clearTimer(m._id));
|
|
else {
|
|
var H = function() {
|
|
A.currentTime = z;
|
|
A.muted = m._muted || e._muted || c._muted || A.muted;
|
|
A.volume = m._volume * c.volume();
|
|
A.playbackRate = m._rate;
|
|
try {
|
|
var g = A.play();
|
|
g && "undefined" !== typeof Promise && (g instanceof Promise || "function" === typeof g.then) ? (e._playLock = !0, D(), g.then(function() {
|
|
e._playLock = !1;
|
|
A._unlocked = !0;
|
|
d || (e._emit("play", m._id), e._loadQueue())
|
|
}).catch(function() {
|
|
e._playLock = !1;
|
|
e._emit("playerror", m._id, "Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");
|
|
m._ended = !0;
|
|
m._paused = !0
|
|
})) : d || (e._playLock = !1, D(), e._emit("play", m._id), e._loadQueue());
|
|
A.playbackRate = m._rate;
|
|
A.paused ? e._emit("playerror", m._id, "Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.") : "__default" !== b || m._loop ? e._endTimers[m._id] = setTimeout(e._ended.bind(e, m), C) : (e._endTimers[m._id] = function() {
|
|
e._ended(m);
|
|
A.removeEventListener("ended", e._endTimers[m._id], !1)
|
|
}, A.addEventListener("ended", e._endTimers[m._id],
|
|
!1))
|
|
} catch (f) {
|
|
e._emit("playerror", m._id, f)
|
|
}
|
|
},
|
|
g = window && window.ejecta || !A.readyState && c._navigator.isCocoonJS;
|
|
if (3 <= A.readyState || g) H();
|
|
else {
|
|
e._playLock = !0;
|
|
var O = function() {
|
|
H();
|
|
A.removeEventListener(c._canPlayEvent, O, !1)
|
|
};
|
|
A.addEventListener(c._canPlayEvent, O, !1);
|
|
e._clearTimer(m._id)
|
|
}
|
|
}
|
|
return m._id
|
|
}
|
|
},
|
|
pause: function(b, c) {
|
|
var d = this;
|
|
if ("loaded" !== d._state || d._playLock) return d._queue.push({
|
|
event: "pause",
|
|
action: function() {
|
|
d.pause(b)
|
|
}
|
|
}), d;
|
|
for (var e = d._getSoundIds(b), g = 0; g < e.length; g++) {
|
|
d._clearTimer(e[g]);
|
|
var f = d._soundById(e[g]);
|
|
if (f && !f._paused && (f._seek = d.seek(e[g]), f._rateSeek = 0, f._paused = !0, d._stopFade(e[g]), f._node))
|
|
if (d._webAudio) {
|
|
if (!f._node.bufferSource) continue;
|
|
"undefined" === typeof f._node.bufferSource.stop ? f._node.bufferSource.noteOff(0) : f._node.bufferSource.stop(0);
|
|
d._cleanBuffer(f._node)
|
|
} else(!isNaN(f._node.duration) || Infinity === f._node.duration) && f._node.pause();
|
|
c || d._emit("pause", f ? f._id : null)
|
|
}
|
|
return d
|
|
},
|
|
stop: function(b, c) {
|
|
var d = this;
|
|
if ("loaded" !== d._state || d._playLock) return d._queue.push({
|
|
event: "stop",
|
|
action: function() {
|
|
d.stop(b)
|
|
}
|
|
}), d;
|
|
for (var e = d._getSoundIds(b), g = 0; g < e.length; g++) {
|
|
d._clearTimer(e[g]);
|
|
var f = d._soundById(e[g]);
|
|
if (f) {
|
|
f._seek = f._start || 0;
|
|
f._rateSeek = 0;
|
|
f._paused = !0;
|
|
f._ended = !0;
|
|
d._stopFade(e[g]);
|
|
if (f._node)
|
|
if (d._webAudio) f._node.bufferSource && ("undefined" === typeof f._node.bufferSource.stop ? f._node.bufferSource.noteOff(0) : f._node.bufferSource.stop(0), d._cleanBuffer(f._node));
|
|
else if (!isNaN(f._node.duration) || Infinity === f._node.duration) f._node.currentTime = f._start || 0, f._node.pause();
|
|
c || d._emit("stop", f._id)
|
|
}
|
|
}
|
|
return d
|
|
},
|
|
mute: function(b, d) {
|
|
var e = this;
|
|
if ("loaded" !== e._state || e._playLock) return e._queue.push({
|
|
event: "mute",
|
|
action: function() {
|
|
e.mute(b, d)
|
|
}
|
|
}), e;
|
|
if ("undefined" === typeof d)
|
|
if ("boolean" === typeof b) e._muted = b;
|
|
else return e._muted;
|
|
for (var g = e._getSoundIds(d), f = 0; f < g.length; f++) {
|
|
var l = e._soundById(g[f]);
|
|
l && (l._muted = b, l._interval && e._stopFade(l._id), e._webAudio && l._node ? l._node.gain.setValueAtTime(b ? 0 : l._volume, c.ctx.currentTime) : l._node && (l._node.muted = c._muted ? !0 : b), e._emit("mute",
|
|
l._id))
|
|
}
|
|
return e
|
|
},
|
|
volume: function() {
|
|
var b = this,
|
|
d = arguments,
|
|
e, g;
|
|
if (0 === d.length) return b._volume;
|
|
1 === d.length || 2 === d.length && "undefined" === typeof d[1] ? 0 <= b._getSoundIds().indexOf(d[0]) ? g = parseInt(d[0], 10) : e = parseFloat(d[0]) : 2 <= d.length && (e = parseFloat(d[0]), g = parseInt(d[1], 10));
|
|
var f;
|
|
if ("undefined" !== typeof e && 0 <= e && 1 >= e) {
|
|
if ("loaded" !== b._state || b._playLock) return b._queue.push({
|
|
event: "volume",
|
|
action: function() {
|
|
b.volume.apply(b, d)
|
|
}
|
|
}), b;
|
|
"undefined" === typeof g && (b._volume = e);
|
|
g = b._getSoundIds(g);
|
|
for (var l =
|
|
0; l < g.length; l++)
|
|
if (f = b._soundById(g[l])) f._volume = e, d[2] || b._stopFade(g[l]), b._webAudio && f._node && !f._muted ? f._node.gain.setValueAtTime(e, c.ctx.currentTime) : f._node && !f._muted && (f._node.volume = e * c.volume()), b._emit("volume", f._id)
|
|
} else return (f = g ? b._soundById(g) : b._sounds[0]) ? f._volume : 0;
|
|
return b
|
|
},
|
|
fade: function(b, d, e, g) {
|
|
var f = this;
|
|
if ("loaded" !== f._state || f._playLock) return f._queue.push({
|
|
event: "fade",
|
|
action: function() {
|
|
f.fade(b, d, e, g)
|
|
}
|
|
}), f;
|
|
b = parseFloat(b);
|
|
d = parseFloat(d);
|
|
e = parseFloat(e);
|
|
f.volume(b,
|
|
g);
|
|
for (var l = f._getSoundIds(g), m = 0; m < l.length; m++) {
|
|
var y = f._soundById(l[m]);
|
|
if (y) {
|
|
g || f._stopFade(l[m]);
|
|
if (f._webAudio && !y._muted) {
|
|
var z = c.ctx.currentTime,
|
|
x = z + e / 1E3;
|
|
y._volume = b;
|
|
y._node.gain.setValueAtTime(b, z);
|
|
y._node.gain.linearRampToValueAtTime(d, x)
|
|
}
|
|
f._startFadeInterval(y, b, d, e, l[m], "undefined" === typeof g)
|
|
}
|
|
}
|
|
return f
|
|
},
|
|
_startFadeInterval: function(b, c, d, e, g, f) {
|
|
var l = this,
|
|
m = c,
|
|
z = d - c;
|
|
g = Math.abs(z / 0.01);
|
|
g = Math.max(4, 0 < g ? e / g : e);
|
|
var x = Date.now();
|
|
b._fadeTo = d;
|
|
b._interval = setInterval(function() {
|
|
var g = (Date.now() -
|
|
x) / e;
|
|
x = Date.now();
|
|
m += z * g;
|
|
m = Math.max(0, m);
|
|
m = Math.min(1, m);
|
|
m = Math.round(100 * m) / 100;
|
|
l._webAudio ? b._volume = m : l.volume(m, b._id, !0);
|
|
f && (l._volume = m);
|
|
if (d < c && m <= d || d > c && m >= d) clearInterval(b._interval), b._interval = null, b._fadeTo = null, l.volume(d, b._id), l._emit("fade", b._id)
|
|
}, g)
|
|
},
|
|
_stopFade: function(b) {
|
|
var d = this._soundById(b);
|
|
d && d._interval && (this._webAudio && d._node.gain.cancelScheduledValues(c.ctx.currentTime), clearInterval(d._interval), d._interval = null, this.volume(d._fadeTo, b), d._fadeTo = null, this._emit("fade",
|
|
b));
|
|
return this
|
|
},
|
|
loop: function() {
|
|
var b = arguments,
|
|
c, d;
|
|
if (0 === b.length) return this._loop;
|
|
if (1 === b.length)
|
|
if ("boolean" === typeof b[0]) this._loop = c = b[0];
|
|
else return (b = this._soundById(parseInt(b[0], 10))) ? b._loop : !1;
|
|
else 2 === b.length && (c = b[0], d = parseInt(b[1], 10));
|
|
d = this._getSoundIds(d);
|
|
for (var e = 0; e < d.length; e++)
|
|
if (b = this._soundById(d[e]))
|
|
if (b._loop = c, this._webAudio && b._node && b._node.bufferSource && (b._node.bufferSource.loop = c)) b._node.bufferSource.loopStart = b._start || 0, b._node.bufferSource.loopEnd = b._stop;
|
|
return this
|
|
},
|
|
rate: function() {
|
|
var b = this,
|
|
d = arguments,
|
|
e, g;
|
|
0 === d.length ? g = b._sounds[0]._id : 1 === d.length ? 0 <= b._getSoundIds().indexOf(d[0]) ? g = parseInt(d[0], 10) : e = parseFloat(d[0]) : 2 === d.length && (e = parseFloat(d[0]), g = parseInt(d[1], 10));
|
|
var f;
|
|
if ("number" === typeof e) {
|
|
if ("loaded" !== b._state || b._playLock) return b._queue.push({
|
|
event: "rate",
|
|
action: function() {
|
|
b.rate.apply(b, d)
|
|
}
|
|
}), b;
|
|
"undefined" === typeof g && (b._rate = e);
|
|
g = b._getSoundIds(g);
|
|
for (var l = 0; l < g.length; l++)
|
|
if (f = b._soundById(g[l])) {
|
|
b.playing(g[l]) && (f._rateSeek =
|
|
b.seek(g[l]), f._playStart = b._webAudio ? c.ctx.currentTime : f._playStart);
|
|
f._rate = e;
|
|
b._webAudio && f._node && f._node.bufferSource ? f._node.bufferSource.playbackRate.setValueAtTime(e, c.ctx.currentTime) : f._node && (f._node.playbackRate = e);
|
|
var m = b.seek(g[l]),
|
|
m = 1E3 * ((b._sprite[f._sprite][0] + b._sprite[f._sprite][1]) / 1E3 - m) / Math.abs(f._rate);
|
|
if (b._endTimers[g[l]] || !f._paused) b._clearTimer(g[l]), b._endTimers[g[l]] = setTimeout(b._ended.bind(b, f), m);
|
|
b._emit("rate", f._id)
|
|
}
|
|
} else return (f = b._soundById(g)) ? f._rate : b._rate;
|
|
return b
|
|
},
|
|
seek: function() {
|
|
var b = this,
|
|
d = arguments,
|
|
e, g;
|
|
0 === d.length ? g = b._sounds[0]._id : 1 === d.length ? 0 <= b._getSoundIds().indexOf(d[0]) ? g = parseInt(d[0], 10) : b._sounds.length && (g = b._sounds[0]._id, e = parseFloat(d[0])) : 2 === d.length && (e = parseFloat(d[0]), g = parseInt(d[1], 10));
|
|
if ("undefined" === typeof g) return b;
|
|
if ("loaded" !== b._state || b._playLock) return b._queue.push({
|
|
event: "seek",
|
|
action: function() {
|
|
b.seek.apply(b, d)
|
|
}
|
|
}), b;
|
|
var f = b._soundById(g);
|
|
if (f)
|
|
if ("number" === typeof e && 0 <= e) {
|
|
var l = b.playing(g);
|
|
l && b.pause(g,
|
|
!0);
|
|
f._seek = e;
|
|
f._ended = !1;
|
|
b._clearTimer(g);
|
|
!b._webAudio && f._node && !isNaN(f._node.duration) && (f._node.currentTime = e);
|
|
var m = function() {
|
|
b._emit("seek", g);
|
|
l && b.play(g, !0)
|
|
};
|
|
if (l && !b._webAudio) {
|
|
var y = function() {
|
|
b._playLock ? setTimeout(y, 0) : m()
|
|
};
|
|
setTimeout(y, 0)
|
|
} else m()
|
|
} else return b._webAudio ? (e = b.playing(g) ? c.ctx.currentTime - f._playStart : 0, f._seek + ((f._rateSeek ? f._rateSeek - f._seek : 0) + e * Math.abs(f._rate))) : f._node.currentTime;
|
|
return b
|
|
},
|
|
playing: function(b) {
|
|
if ("number" === typeof b) return (b = this._soundById(b)) ?
|
|
!b._paused : !1;
|
|
for (b = 0; b < this._sounds.length; b++)
|
|
if (!this._sounds[b]._paused) return !0;
|
|
return !1
|
|
},
|
|
duration: function(b) {
|
|
var c = this._duration;
|
|
(b = this._soundById(b)) && (c = this._sprite[b._sprite][1] / 1E3);
|
|
return c
|
|
},
|
|
state: function() {
|
|
return this._state
|
|
},
|
|
unload: function() {
|
|
for (var b = this._sounds, d = 0; d < b.length; d++) b[d]._paused || this.stop(b[d]._id), this._webAudio || (/MSIE |Trident\//.test(c._navigator && c._navigator.userAgent) || (b[d]._node.src = "data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"),
|
|
b[d]._node.removeEventListener("error", b[d]._errorFn, !1), b[d]._node.removeEventListener(c._canPlayEvent, b[d]._loadFn, !1), c._releaseHtml5Audio(b[d]._node)), delete b[d]._node, this._clearTimer(b[d]._id);
|
|
d = c._howls.indexOf(this);
|
|
0 <= d && c._howls.splice(d, 1);
|
|
b = !0;
|
|
for (d = 0; d < c._howls.length; d++)
|
|
if (c._howls[d]._src === this._src || 0 <= this._src.indexOf(c._howls[d]._src)) {
|
|
b = !1;
|
|
break
|
|
} g && b && delete g[this._src];
|
|
c.noAudio = !1;
|
|
this._state = "unloaded";
|
|
this._sounds = [];
|
|
return null
|
|
},
|
|
on: function(b, c, d, e) {
|
|
b = this["_on" + b];
|
|
"function" ===
|
|
typeof c && b.push(e ? {
|
|
id: d,
|
|
fn: c,
|
|
once: e
|
|
} : {
|
|
id: d,
|
|
fn: c
|
|
});
|
|
return this
|
|
},
|
|
off: function(b, c, d) {
|
|
var e = this["_on" + b],
|
|
g = 0;
|
|
"number" === typeof c && (d = c, c = null);
|
|
if (c || d)
|
|
for (g = 0; g < e.length; g++) {
|
|
if (b = d === e[g].id, c === e[g].fn && b || !c && b) {
|
|
e.splice(g, 1);
|
|
break
|
|
}
|
|
} else if (b) this["_on" + b] = [];
|
|
else {
|
|
c = Object.keys(this);
|
|
for (g = 0; g < c.length; g++) 0 === c[g].indexOf("_on") && Array.isArray(this[c[g]]) && (this[c[g]] = [])
|
|
} return this
|
|
},
|
|
once: function(b, c, d) {
|
|
this.on(b, c, d, 1);
|
|
return this
|
|
},
|
|
_emit: function(b, c, d) {
|
|
for (var e = this["_on" + b], g = e.length - 1; 0 <=
|
|
g; g--)
|
|
if (!e[g].id || e[g].id === c || "load" === b) setTimeout(function(b) {
|
|
b.call(this, c, d)
|
|
}.bind(this, e[g].fn), 0), e[g].once && this.off(b, e[g].fn, e[g].id);
|
|
this._loadQueue(b);
|
|
return this
|
|
},
|
|
_loadQueue: function(b) {
|
|
if (0 < this._queue.length) {
|
|
var c = this._queue[0];
|
|
c.event === b && (this._queue.shift(), this._loadQueue());
|
|
b || c.action()
|
|
}
|
|
return this
|
|
},
|
|
_ended: function(b) {
|
|
var d = b._sprite;
|
|
if (!this._webAudio && b._node && !b._node.paused && !b._node.ended && b._node.currentTime < b._stop) return setTimeout(this._ended.bind(this, b), 100), this;
|
|
d = !(!b._loop && !this._sprite[d][2]);
|
|
this._emit("end", b._id);
|
|
!this._webAudio && d && this.stop(b._id, !0).play(b._id);
|
|
if (this._webAudio && d) {
|
|
this._emit("play", b._id);
|
|
b._seek = b._start || 0;
|
|
b._rateSeek = 0;
|
|
b._playStart = c.ctx.currentTime;
|
|
var e = 1E3 * (b._stop - b._start) / Math.abs(b._rate);
|
|
this._endTimers[b._id] = setTimeout(this._ended.bind(this, b), e)
|
|
}
|
|
this._webAudio && !d && (b._paused = !0, b._ended = !0, b._seek = b._start || 0, b._rateSeek = 0, this._clearTimer(b._id), this._cleanBuffer(b._node), c._autoSuspend());
|
|
!this._webAudio && !d &&
|
|
this.stop(b._id, !0);
|
|
return this
|
|
},
|
|
_clearTimer: function(b) {
|
|
if (this._endTimers[b]) {
|
|
if ("function" !== typeof this._endTimers[b]) clearTimeout(this._endTimers[b]);
|
|
else {
|
|
var c = this._soundById(b);
|
|
c && c._node && c._node.removeEventListener("ended", this._endTimers[b], !1)
|
|
}
|
|
delete this._endTimers[b]
|
|
}
|
|
return this
|
|
},
|
|
_soundById: function(b) {
|
|
for (var c = 0; c < this._sounds.length; c++)
|
|
if (b === this._sounds[c]._id) return this._sounds[c];
|
|
return null
|
|
},
|
|
_inactiveSound: function() {
|
|
this._drain();
|
|
for (var b = 0; b < this._sounds.length; b++)
|
|
if (this._sounds[b]._ended) return this._sounds[b].reset();
|
|
return new d(this)
|
|
},
|
|
_drain: function() {
|
|
var b = this._pool,
|
|
c = 0,
|
|
d = 0;
|
|
if (!(this._sounds.length < b)) {
|
|
for (d = 0; d < this._sounds.length; d++) this._sounds[d]._ended && c++;
|
|
for (d = this._sounds.length - 1; 0 <= d && !(c <= b); d--) this._sounds[d]._ended && (this._webAudio && this._sounds[d]._node && this._sounds[d]._node.disconnect(0), this._sounds.splice(d, 1), c--)
|
|
}
|
|
},
|
|
_getSoundIds: function(b) {
|
|
if ("undefined" === typeof b) {
|
|
b = [];
|
|
for (var c = 0; c < this._sounds.length; c++) b.push(this._sounds[c]._id);
|
|
return b
|
|
}
|
|
return [b]
|
|
},
|
|
_refreshBuffer: function(b) {
|
|
b._node.bufferSource =
|
|
c.ctx.createBufferSource();
|
|
b._node.bufferSource.buffer = g[this._src];
|
|
b._panner ? b._node.bufferSource.connect(b._panner) : b._node.bufferSource.connect(b._node);
|
|
if (b._node.bufferSource.loop = b._loop) b._node.bufferSource.loopStart = b._start || 0, b._node.bufferSource.loopEnd = b._stop || 0;
|
|
b._node.bufferSource.playbackRate.setValueAtTime(b._rate, c.ctx.currentTime);
|
|
return this
|
|
},
|
|
_cleanBuffer: function(b) {
|
|
var d = c._navigator && 0 <= c._navigator.vendor.indexOf("Apple");
|
|
if (c._scratchBuffer && b.bufferSource && (b.bufferSource.onended =
|
|
null, b.bufferSource.disconnect(0), d)) try {
|
|
b.bufferSource.buffer = c._scratchBuffer
|
|
} catch (e) {}
|
|
b.bufferSource = null;
|
|
return this
|
|
}
|
|
};
|
|
var d = function(b) {
|
|
this._parent = b;
|
|
this.init()
|
|
};
|
|
d.prototype = {
|
|
init: function() {
|
|
var b = this._parent;
|
|
this._muted = b._muted;
|
|
this._loop = b._loop;
|
|
this._volume = b._volume;
|
|
this._rate = b._rate;
|
|
this._seek = 0;
|
|
this._ended = this._paused = !0;
|
|
this._sprite = "__default";
|
|
this._id = ++c._counter;
|
|
b._sounds.push(this);
|
|
this.create();
|
|
return this
|
|
},
|
|
create: function() {
|
|
var b = this._parent,
|
|
d = c._muted || this._muted || this._parent._muted ?
|
|
0 : this._volume;
|
|
b._webAudio ? (this._node = "undefined" === typeof c.ctx.createGain ? c.ctx.createGainNode() : c.ctx.createGain(), this._node.gain.setValueAtTime(d, c.ctx.currentTime), this._node.paused = !0, this._node.connect(c.masterGain)) : (this._node = c._obtainHtml5Audio(), this._errorFn = this._errorListener.bind(this), this._node.addEventListener("error", this._errorFn, !1), this._loadFn = this._loadListener.bind(this), this._node.addEventListener(c._canPlayEvent, this._loadFn, !1), this._node.src = b._src, this._node.preload =
|
|
"auto", this._node.volume = d * c.volume(), this._node.load());
|
|
return this
|
|
},
|
|
reset: function() {
|
|
var b = this._parent;
|
|
this._muted = b._muted;
|
|
this._loop = b._loop;
|
|
this._volume = b._volume;
|
|
this._rate = b._rate;
|
|
this._rateSeek = this._seek = 0;
|
|
this._ended = this._paused = !0;
|
|
this._sprite = "__default";
|
|
this._id = ++c._counter;
|
|
return this
|
|
},
|
|
_errorListener: function() {
|
|
this._parent._emit("loaderror", this._id, this._node.error ? this._node.error.code : 0);
|
|
this._node.removeEventListener("error", this._errorFn, !1)
|
|
},
|
|
_loadListener: function() {
|
|
var b =
|
|
this._parent;
|
|
b._duration = Math.ceil(10 * this._node.duration) / 10;
|
|
0 === Object.keys(b._sprite).length && (b._sprite = {
|
|
__default: [0, 1E3 * b._duration]
|
|
});
|
|
"loaded" !== b._state && (b._state = "loaded", b._emit("load"), b._loadQueue());
|
|
this._node.removeEventListener(c._canPlayEvent, this._loadFn, !1)
|
|
}
|
|
};
|
|
var g = {},
|
|
f = function(b, d) {
|
|
var e = function() {
|
|
d._emit("loaderror", null, "Decoding audio data failed.")
|
|
},
|
|
f = function(b) {
|
|
b && 0 < d._sounds.length ? (g[d._src] = b, m(d, b)) : e()
|
|
};
|
|
"undefined" !== typeof Promise && 1 === c.ctx.decodeAudioData.length ?
|
|
c.ctx.decodeAudioData(b).then(f).catch(e) : c.ctx.decodeAudioData(b, f, e)
|
|
},
|
|
m = function(b, c) {
|
|
c && !b._duration && (b._duration = c.duration);
|
|
0 === Object.keys(b._sprite).length && (b._sprite = {
|
|
__default: [0, 1E3 * b._duration]
|
|
});
|
|
"loaded" !== b._state && (b._state = "loaded", b._emit("load"), b._loadQueue())
|
|
},
|
|
l = function() {
|
|
if (c.usingWebAudio) {
|
|
try {
|
|
"undefined" !== typeof AudioContext ? c.ctx = new AudioContext : "undefined" !== typeof webkitAudioContext ? c.ctx = new webkitAudioContext : c.usingWebAudio = !1
|
|
} catch (b) {
|
|
c.usingWebAudio = !1
|
|
}
|
|
c.ctx || (c.usingWebAudio = !1);
|
|
var d = /iP(hone|od|ad)/.test(c._navigator && c._navigator.platform),
|
|
e = c._navigator && c._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),
|
|
e = e ? parseInt(e[1], 10) : null;
|
|
if (d && e && 9 > e && (d = /safari/.test(c._navigator && c._navigator.userAgent.toLowerCase()), c._navigator && c._navigator.standalone && !d || c._navigator && !c._navigator.standalone && !d)) c.usingWebAudio = !1;
|
|
c.usingWebAudio && (c.masterGain = "undefined" === typeof c.ctx.createGain ? c.ctx.createGainNode() : c.ctx.createGain(), c.masterGain.gain.setValueAtTime(c._muted ?
|
|
0 : 1, c.ctx.currentTime), c.masterGain.connect(c.ctx.destination));
|
|
c._setup()
|
|
}
|
|
};
|
|
"function" === typeof define && define.amd && define([], function() {
|
|
return {
|
|
Howler: c,
|
|
Howl: e
|
|
}
|
|
});
|
|
"undefined" !== typeof exports && (exports.Howler = c, exports.Howl = e);
|
|
"undefined" !== typeof window ? (window.HowlerGlobal = b, window.Howler = c, window.Howl = e, window.Sound = d) : "undefined" !== typeof global && (global.HowlerGlobal = b, global.Howler = c, global.Howl = e, global.Sound = d)
|
|
})();
|
|
(function() {
|
|
HowlerGlobal.prototype._pos = [0, 0, 0];
|
|
HowlerGlobal.prototype._orientation = [0, 0, -1, 0, 1, 0];
|
|
HowlerGlobal.prototype.stereo = function(b) {
|
|
if (!this.ctx || !this.ctx.listener) return this;
|
|
for (var c = this._howls.length - 1; 0 <= c; c--) this._howls[c].stereo(b);
|
|
return this
|
|
};
|
|
HowlerGlobal.prototype.pos = function(b, c, d) {
|
|
if (!this.ctx || !this.ctx.listener) return this;
|
|
c = "number" !== typeof c ? this._pos[1] : c;
|
|
d = "number" !== typeof d ? this._pos[2] : d;
|
|
if ("number" === typeof b) this._pos = [b, c, d], "undefined" !== typeof this.ctx.listener.positionX ?
|
|
(this.ctx.listener.positionX.setTargetAtTime(this._pos[0], Howler.ctx.currentTime, 0.1), this.ctx.listener.positionY.setTargetAtTime(this._pos[1], Howler.ctx.currentTime, 0.1), this.ctx.listener.positionZ.setTargetAtTime(this._pos[2], Howler.ctx.currentTime, 0.1)) : this.ctx.listener.setPosition(this._pos[0], this._pos[1], this._pos[2]);
|
|
else return this._pos;
|
|
return this
|
|
};
|
|
HowlerGlobal.prototype.orientation = function(b, c, d, e, j, q) {
|
|
if (!this.ctx || !this.ctx.listener) return this;
|
|
var n = this._orientation;
|
|
c = "number" !==
|
|
typeof c ? n[1] : c;
|
|
d = "number" !== typeof d ? n[2] : d;
|
|
e = "number" !== typeof e ? n[3] : e;
|
|
j = "number" !== typeof j ? n[4] : j;
|
|
q = "number" !== typeof q ? n[5] : q;
|
|
if ("number" === typeof b) this._orientation = [b, c, d, e, j, q], "undefined" !== typeof this.ctx.listener.forwardX ? (this.ctx.listener.forwardX.setTargetAtTime(b, Howler.ctx.currentTime, 0.1), this.ctx.listener.forwardY.setTargetAtTime(c, Howler.ctx.currentTime, 0.1), this.ctx.listener.forwardZ.setTargetAtTime(d, Howler.ctx.currentTime, 0.1), this.ctx.listener.upX.setTargetAtTime(b, Howler.ctx.currentTime,
|
|
0.1), this.ctx.listener.upY.setTargetAtTime(c, Howler.ctx.currentTime, 0.1), this.ctx.listener.upZ.setTargetAtTime(d, Howler.ctx.currentTime, 0.1)) : this.ctx.listener.setOrientation(b, c, d, e, j, q);
|
|
else return n;
|
|
return this
|
|
};
|
|
var b = Howl.prototype.init;
|
|
Howl.prototype.init = function(c) {
|
|
this._orientation = c.orientation || [1, 0, 0];
|
|
this._stereo = c.stereo || null;
|
|
this._pos = c.pos || null;
|
|
this._pannerAttr = {
|
|
coneInnerAngle: "undefined" !== typeof c.coneInnerAngle ? c.coneInnerAngle : 360,
|
|
coneOuterAngle: "undefined" !== typeof c.coneOuterAngle ?
|
|
c.coneOuterAngle : 360,
|
|
coneOuterGain: "undefined" !== typeof c.coneOuterGain ? c.coneOuterGain : 0,
|
|
distanceModel: "undefined" !== typeof c.distanceModel ? c.distanceModel : "inverse",
|
|
maxDistance: "undefined" !== typeof c.maxDistance ? c.maxDistance : 1E4,
|
|
panningModel: "undefined" !== typeof c.panningModel ? c.panningModel : "HRTF",
|
|
refDistance: "undefined" !== typeof c.refDistance ? c.refDistance : 1,
|
|
rolloffFactor: "undefined" !== typeof c.rolloffFactor ? c.rolloffFactor : 1
|
|
};
|
|
this._onstereo = c.onstereo ? [{
|
|
fn: c.onstereo
|
|
}] : [];
|
|
this._onpos = c.onpos ? [{
|
|
fn: c.onpos
|
|
}] : [];
|
|
this._onorientation = c.onorientation ? [{
|
|
fn: c.onorientation
|
|
}] : [];
|
|
return b.call(this, c)
|
|
};
|
|
Howl.prototype.stereo = function(b, c) {
|
|
var e = this;
|
|
if (!e._webAudio) return e;
|
|
if ("loaded" !== e._state) return e._queue.push({
|
|
event: "stereo",
|
|
action: function() {
|
|
e.stereo(b, c)
|
|
}
|
|
}), e;
|
|
var l = "undefined" === typeof Howler.ctx.createStereoPanner ? "spatial" : "stereo";
|
|
if ("undefined" === typeof c)
|
|
if ("number" === typeof b) e._stereo = b, e._pos = [b, 0, 0];
|
|
else return e._stereo;
|
|
for (var j = e._getSoundIds(c), q = 0; q < j.length; q++) {
|
|
var n = e._soundById(j[q]);
|
|
if (n)
|
|
if ("number" === typeof b) n._stereo = b, n._pos = [b, 0, 0], n._node && (n._pannerAttr.panningModel = "equalpower", (!n._panner || !n._panner.pan) && d(n, l), "spatial" === l ? "undefined" !== typeof n._panner.positionX ? (n._panner.positionX.setValueAtTime(b, Howler.ctx.currentTime), n._panner.positionY.setValueAtTime(0, Howler.ctx.currentTime), n._panner.positionZ.setValueAtTime(0, Howler.ctx.currentTime)) : n._panner.setPosition(b, 0, 0) : n._panner.pan.setValueAtTime(b, Howler.ctx.currentTime)), e._emit("stereo", n._id);
|
|
else return n._stereo
|
|
}
|
|
return e
|
|
};
|
|
Howl.prototype.pos = function(b, c, e, l) {
|
|
var j = this;
|
|
if (!j._webAudio) return j;
|
|
if ("loaded" !== j._state) return j._queue.push({
|
|
event: "pos",
|
|
action: function() {
|
|
j.pos(b, c, e, l)
|
|
}
|
|
}), j;
|
|
c = "number" !== typeof c ? 0 : c;
|
|
e = "number" !== typeof e ? -0.5 : e;
|
|
if ("undefined" === typeof l)
|
|
if ("number" === typeof b) j._pos = [b, c, e];
|
|
else return j._pos;
|
|
for (var q = j._getSoundIds(l), n = 0; n < q.length; n++) {
|
|
var r = j._soundById(q[n]);
|
|
if (r)
|
|
if ("number" === typeof b) r._pos = [b, c, e], r._node && ((!r._panner || r._panner.pan) && d(r, "spatial"), "undefined" !== typeof r._panner.positionX ?
|
|
(r._panner.positionX.setValueAtTime(b, Howler.ctx.currentTime), r._panner.positionY.setValueAtTime(c, Howler.ctx.currentTime), r._panner.positionZ.setValueAtTime(e, Howler.ctx.currentTime)) : r._panner.setPosition(b, c, e)), j._emit("pos", r._id);
|
|
else return r._pos
|
|
}
|
|
return j
|
|
};
|
|
Howl.prototype.orientation = function(b, c, e, l) {
|
|
var j = this;
|
|
if (!j._webAudio) return j;
|
|
if ("loaded" !== j._state) return j._queue.push({
|
|
event: "orientation",
|
|
action: function() {
|
|
j.orientation(b, c, e, l)
|
|
}
|
|
}), j;
|
|
c = "number" !== typeof c ? j._orientation[1] : c;
|
|
e =
|
|
"number" !== typeof e ? j._orientation[2] : e;
|
|
if ("undefined" === typeof l)
|
|
if ("number" === typeof b) j._orientation = [b, c, e];
|
|
else return j._orientation;
|
|
for (var q = j._getSoundIds(l), n = 0; n < q.length; n++) {
|
|
var r = j._soundById(q[n]);
|
|
if (r)
|
|
if ("number" === typeof b) r._orientation = [b, c, e], r._node && (r._panner || (r._pos || (r._pos = j._pos || [0, 0, -0.5]), d(r, "spatial")), "undefined" !== typeof r._panner.orientationX ? (r._panner.orientationX.setValueAtTime(b, Howler.ctx.currentTime), r._panner.orientationY.setValueAtTime(c, Howler.ctx.currentTime),
|
|
r._panner.orientationZ.setValueAtTime(e, Howler.ctx.currentTime)) : r._panner.setOrientation(b, c, e)), j._emit("orientation", r._id);
|
|
else return r._orientation
|
|
}
|
|
return j
|
|
};
|
|
Howl.prototype.pannerAttr = function() {
|
|
var b = arguments,
|
|
c, e;
|
|
if (!this._webAudio) return this;
|
|
if (0 === b.length) return this._pannerAttr;
|
|
if (1 === b.length)
|
|
if ("object" === typeof b[0]) c = b[0], "undefined" === typeof e && (c.pannerAttr || (c.pannerAttr = {
|
|
coneInnerAngle: c.coneInnerAngle,
|
|
coneOuterAngle: c.coneOuterAngle,
|
|
coneOuterGain: c.coneOuterGain,
|
|
distanceModel: c.distanceModel,
|
|
maxDistance: c.maxDistance,
|
|
refDistance: c.refDistance,
|
|
rolloffFactor: c.rolloffFactor,
|
|
panningModel: c.panningModel
|
|
}), this._pannerAttr = {
|
|
coneInnerAngle: "undefined" !== typeof c.pannerAttr.coneInnerAngle ? c.pannerAttr.coneInnerAngle : this._coneInnerAngle,
|
|
coneOuterAngle: "undefined" !== typeof c.pannerAttr.coneOuterAngle ? c.pannerAttr.coneOuterAngle : this._coneOuterAngle,
|
|
coneOuterGain: "undefined" !== typeof c.pannerAttr.coneOuterGain ? c.pannerAttr.coneOuterGain : this._coneOuterGain,
|
|
distanceModel: "undefined" !== typeof c.pannerAttr.distanceModel ?
|
|
c.pannerAttr.distanceModel : this._distanceModel,
|
|
maxDistance: "undefined" !== typeof c.pannerAttr.maxDistance ? c.pannerAttr.maxDistance : this._maxDistance,
|
|
refDistance: "undefined" !== typeof c.pannerAttr.refDistance ? c.pannerAttr.refDistance : this._refDistance,
|
|
rolloffFactor: "undefined" !== typeof c.pannerAttr.rolloffFactor ? c.pannerAttr.rolloffFactor : this._rolloffFactor,
|
|
panningModel: "undefined" !== typeof c.pannerAttr.panningModel ? c.pannerAttr.panningModel : this._panningModel
|
|
});
|
|
else return (b = this._soundById(parseInt(b[0],
|
|
10))) ? b._pannerAttr : this._pannerAttr;
|
|
else 2 === b.length && (c = b[0], e = parseInt(b[1], 10));
|
|
e = this._getSoundIds(e);
|
|
for (var l = 0; l < e.length; l++)
|
|
if (b = this._soundById(e[l])) {
|
|
var j = b._pannerAttr,
|
|
j = {
|
|
coneInnerAngle: "undefined" !== typeof c.coneInnerAngle ? c.coneInnerAngle : j.coneInnerAngle,
|
|
coneOuterAngle: "undefined" !== typeof c.coneOuterAngle ? c.coneOuterAngle : j.coneOuterAngle,
|
|
coneOuterGain: "undefined" !== typeof c.coneOuterGain ? c.coneOuterGain : j.coneOuterGain,
|
|
distanceModel: "undefined" !== typeof c.distanceModel ? c.distanceModel : j.distanceModel,
|
|
maxDistance: "undefined" !== typeof c.maxDistance ? c.maxDistance : j.maxDistance,
|
|
refDistance: "undefined" !== typeof c.refDistance ? c.refDistance : j.refDistance,
|
|
rolloffFactor: "undefined" !== typeof c.rolloffFactor ? c.rolloffFactor : j.rolloffFactor,
|
|
panningModel: "undefined" !== typeof c.panningModel ? c.panningModel : j.panningModel
|
|
},
|
|
q = b._panner;
|
|
q ? (q.coneInnerAngle = j.coneInnerAngle, q.coneOuterAngle = j.coneOuterAngle, q.coneOuterGain = j.coneOuterGain, q.distanceModel = j.distanceModel, q.maxDistance = j.maxDistance,
|
|
q.refDistance = j.refDistance, q.rolloffFactor = j.rolloffFactor, q.panningModel = j.panningModel) : (b._pos || (b._pos = this._pos || [0, 0, -0.5]), d(b, "spatial"))
|
|
} return this
|
|
};
|
|
var c = Sound.prototype.init;
|
|
Sound.prototype.init = function() {
|
|
var b = this._parent;
|
|
this._orientation = b._orientation;
|
|
this._stereo = b._stereo;
|
|
this._pos = b._pos;
|
|
this._pannerAttr = b._pannerAttr;
|
|
c.call(this);
|
|
this._stereo ? b.stereo(this._stereo) : this._pos && b.pos(this._pos[0], this._pos[1], this._pos[2], this._id)
|
|
};
|
|
var e = Sound.prototype.reset;
|
|
Sound.prototype.reset =
|
|
function() {
|
|
var b = this._parent;
|
|
this._orientation = b._orientation;
|
|
this._stereo = b._stereo;
|
|
this._pos = b._pos;
|
|
this._pannerAttr = b._pannerAttr;
|
|
this._stereo ? b.stereo(this._stereo) : this._pos ? b.pos(this._pos[0], this._pos[1], this._pos[2], this._id) : this._panner && (this._panner.disconnect(0), this._panner = void 0, b._refreshBuffer(this));
|
|
return e.call(this)
|
|
};
|
|
var d = function(b, c) {
|
|
"spatial" === (c || "spatial") ? (b._panner = Howler.ctx.createPanner(), b._panner.coneInnerAngle = b._pannerAttr.coneInnerAngle, b._panner.coneOuterAngle =
|
|
b._pannerAttr.coneOuterAngle, b._panner.coneOuterGain = b._pannerAttr.coneOuterGain, b._panner.distanceModel = b._pannerAttr.distanceModel, b._panner.maxDistance = b._pannerAttr.maxDistance, b._panner.refDistance = b._pannerAttr.refDistance, b._panner.rolloffFactor = b._pannerAttr.rolloffFactor, b._panner.panningModel = b._pannerAttr.panningModel, "undefined" !== typeof b._panner.positionX ? (b._panner.positionX.setValueAtTime(b._pos[0], Howler.ctx.currentTime), b._panner.positionY.setValueAtTime(b._pos[1], Howler.ctx.currentTime),
|
|
b._panner.positionZ.setValueAtTime(b._pos[2], Howler.ctx.currentTime)) : b._panner.setPosition(b._pos[0], b._pos[1], b._pos[2]), "undefined" !== typeof b._panner.orientationX ? (b._panner.orientationX.setValueAtTime(b._orientation[0], Howler.ctx.currentTime), b._panner.orientationY.setValueAtTime(b._orientation[1], Howler.ctx.currentTime), b._panner.orientationZ.setValueAtTime(b._orientation[2], Howler.ctx.currentTime)) : b._panner.setOrientation(b._orientation[0], b._orientation[1], b._orientation[2])) : (b._panner =
|
|
Howler.ctx.createStereoPanner(), b._panner.pan.setValueAtTime(b._stereo, Howler.ctx.currentTime));
|
|
b._panner.connect(b._node);
|
|
b._paused || b._parent.pause(b._id, !0).play(b._id, !0)
|
|
}
|
|
})();
|
|
! function(b, c) {
|
|
"object" == typeof exports && "undefined" != typeof module ? c() : "function" == typeof define && define.amd ? define(c) : c()
|
|
}(0, function() {
|
|
function b(b) {
|
|
var c = this.constructor;
|
|
return this.then(function(d) {
|
|
return c.resolve(b()).then(function() {
|
|
return d
|
|
})
|
|
}, function(d) {
|
|
return c.resolve(b()).then(function() {
|
|
return c.reject(d)
|
|
})
|
|
})
|
|
}
|
|
|
|
function c() {}
|
|
|
|
function e(b) {
|
|
if (!(this instanceof e)) throw new TypeError("Promises must be constructed via new");
|
|
if ("function" != typeof b) throw new TypeError("not a function");
|
|
this._state = 0;
|
|
this._handled = !1;
|
|
this._value = void 0;
|
|
this._deferreds = [];
|
|
l(b, this)
|
|
}
|
|
|
|
function d(b, c) {
|
|
for (; 3 === b._state;) b = b._value;
|
|
0 !== b._state ? (b._handled = !0, e._immediateFn(function() {
|
|
var d = 1 === b._state ? c.onFulfilled : c.onRejected;
|
|
if (null !== d) {
|
|
var e;
|
|
try {
|
|
e = d(b._value)
|
|
} catch (j) {
|
|
return void f(c.promise, j)
|
|
}
|
|
g(c.promise, e)
|
|
} else(1 === b._state ? g : f)(c.promise, b._value)
|
|
})) : b._deferreds.push(c)
|
|
}
|
|
|
|
function g(b, c) {
|
|
try {
|
|
if (c === b) throw new TypeError("A promise cannot be resolved with itself.");
|
|
if (c && ("object" == typeof c ||
|
|
"function" == typeof c)) {
|
|
var d = c.then;
|
|
if (c instanceof e) return b._state = 3, b._value = c, void m(b);
|
|
if ("function" == typeof d) return void l(function() {
|
|
d.apply(c, arguments)
|
|
}, b)
|
|
}
|
|
b._state = 1;
|
|
b._value = c;
|
|
m(b)
|
|
} catch (g) {
|
|
f(b, g)
|
|
}
|
|
}
|
|
|
|
function f(b, c) {
|
|
b._state = 2;
|
|
b._value = c;
|
|
m(b)
|
|
}
|
|
|
|
function m(b) {
|
|
2 === b._state && 0 === b._deferreds.length && e._immediateFn(function() {
|
|
b._handled || e._unhandledRejectionFn(b._value)
|
|
});
|
|
for (var c = 0, f = b._deferreds.length; f > c; c++) d(b, b._deferreds[c]);
|
|
b._deferreds = null
|
|
}
|
|
|
|
function l(b, c) {
|
|
var d = !1;
|
|
try {
|
|
b(function(b) {
|
|
d ||
|
|
(d = !0, g(c, b))
|
|
}, function(b) {
|
|
d || (d = !0, f(c, b))
|
|
})
|
|
} catch (e) {
|
|
d || (d = !0, f(c, e))
|
|
}
|
|
}
|
|
var j = setTimeout;
|
|
e.prototype["catch"] = function(b) {
|
|
return this.then(null, b)
|
|
};
|
|
e.prototype.then = function(b, e) {
|
|
var f = new this.constructor(c);
|
|
return d(this, new function(b, c, d) {
|
|
this.onFulfilled = "function" == typeof b ? b : null;
|
|
this.onRejected = "function" == typeof c ? c : null;
|
|
this.promise = d
|
|
}(b, e, f)), f
|
|
};
|
|
e.prototype["finally"] = b;
|
|
e.all = function(b) {
|
|
return new e(function(c, d) {
|
|
function e(b, j) {
|
|
try {
|
|
if (j && ("object" == typeof j || "function" == typeof j)) {
|
|
var l =
|
|
j.then;
|
|
if ("function" == typeof l) return void l.call(j, function(c) {
|
|
e(b, c)
|
|
}, d)
|
|
}
|
|
f[b] = j;
|
|
0 == --g && c(f)
|
|
} catch (n) {
|
|
d(n)
|
|
}
|
|
}
|
|
if (!b || "undefined" == typeof b.length) throw new TypeError("Promise.all accepts an array");
|
|
var f = Array.prototype.slice.call(b);
|
|
if (0 === f.length) return c([]);
|
|
for (var g = f.length, j = 0; f.length > j; j++) e(j, f[j])
|
|
})
|
|
};
|
|
e.resolve = function(b) {
|
|
return b && "object" == typeof b && b.constructor === e ? b : new e(function(c) {
|
|
c(b)
|
|
})
|
|
};
|
|
e.reject = function(b) {
|
|
return new e(function(c, d) {
|
|
d(b)
|
|
})
|
|
};
|
|
e.race = function(b) {
|
|
return new e(function(c,
|
|
d) {
|
|
for (var e = 0, f = b.length; f > e; e++) b[e].then(c, d)
|
|
})
|
|
};
|
|
e._immediateFn = "function" == typeof setImmediate && function(b) {
|
|
setImmediate(b)
|
|
} || function(b) {
|
|
j(b, 0)
|
|
};
|
|
e._unhandledRejectionFn = function(b) {
|
|
void 0 !== console && console && console.warn("Possible Unhandled Promise Rejection:", b)
|
|
};
|
|
var q = function() {
|
|
if ("undefined" != typeof self) return self;
|
|
if ("undefined" != typeof window) return window;
|
|
if ("undefined" != typeof global) return global;
|
|
throw Error("unable to locate global object");
|
|
}();
|
|
"Promise" in q ? q.Promise.prototype["finally"] ||
|
|
(q.Promise.prototype["finally"] = b) : q.Promise = e
|
|
});
|
|
(function() {
|
|
function b(b, c) {
|
|
document.addEventListener ? b.addEventListener("scroll", c, !1) : b.attachEvent("scroll", c)
|
|
}
|
|
|
|
function c(b) {
|
|
this.a = document.createElement("div");
|
|
this.a.setAttribute("aria-hidden", "true");
|
|
this.a.appendChild(document.createTextNode(b));
|
|
this.b = document.createElement("span");
|
|
this.c = document.createElement("span");
|
|
this.h = document.createElement("span");
|
|
this.f = document.createElement("span");
|
|
this.g = -1;
|
|
this.b.style.cssText = "max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";
|
|
this.c.style.cssText =
|
|
"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";
|
|
this.f.style.cssText = "max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";
|
|
this.h.style.cssText = "display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;";
|
|
this.b.appendChild(this.h);
|
|
this.c.appendChild(this.f);
|
|
this.a.appendChild(this.b);
|
|
this.a.appendChild(this.c)
|
|
}
|
|
|
|
function e(b, c) {
|
|
b.a.style.cssText = "max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:" +
|
|
c + ";"
|
|
}
|
|
|
|
function d(b) {
|
|
var c = b.a.offsetWidth,
|
|
d = c + 100;
|
|
b.f.style.width = d + "px";
|
|
b.c.scrollLeft = d;
|
|
b.b.scrollLeft = b.b.scrollWidth + 100;
|
|
return b.g !== c ? (b.g = c, !0) : !1
|
|
}
|
|
|
|
function g(c, e) {
|
|
function f() {
|
|
var b = g;
|
|
d(b) && b.a.parentNode && e(b.g)
|
|
}
|
|
var g = c;
|
|
b(c.b, f);
|
|
b(c.c, f);
|
|
d(c)
|
|
}
|
|
|
|
function f(b, c) {
|
|
var d = c || {};
|
|
this.family = b;
|
|
this.style = d.style || "normal";
|
|
this.weight = d.weight || "normal";
|
|
this.stretch = d.stretch || "normal"
|
|
}
|
|
|
|
function m() {
|
|
null === s && (s = !!document.fonts);
|
|
return s
|
|
}
|
|
|
|
function l() {
|
|
if (null === r) {
|
|
var b = document.createElement("div");
|
|
try {
|
|
b.style.font = "condensed 100px sans-serif"
|
|
} catch (c) {}
|
|
r = "" !== b.style.font
|
|
}
|
|
return r
|
|
}
|
|
|
|
function j(b, c) {
|
|
return [b.style, b.weight, l() ? b.stretch : "", "100px", c].join(" ")
|
|
}
|
|
var q = null,
|
|
n = null,
|
|
r = null,
|
|
s = null;
|
|
f.prototype.load = function(b, d) {
|
|
var f = this,
|
|
l = b || "BESbswy",
|
|
r = 0,
|
|
s = d || 3E3,
|
|
B = (new Date).getTime();
|
|
return new Promise(function(b, d) {
|
|
var t;
|
|
if (t = m()) null === n && (m() && /Apple/.test(window.navigator.vendor) ? (t = /AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent), n = !!t && 603 > parseInt(t[1],
|
|
10)) : n = !1), t = !n;
|
|
if (t) {
|
|
t = new Promise(function(b, c) {
|
|
function d() {
|
|
(new Date).getTime() - B >= s ? c(Error("" + s + "ms timeout exceeded")) : document.fonts.load(j(f, '"' + f.family + '"'), l).then(function(c) {
|
|
1 <= c.length ? b() : setTimeout(d, 25)
|
|
}, c)
|
|
}
|
|
d()
|
|
});
|
|
var u = new Promise(function(b, c) {
|
|
r = setTimeout(function() {
|
|
c(Error("" + s + "ms timeout exceeded"))
|
|
}, s)
|
|
});
|
|
Promise.race([u, t]).then(function() {
|
|
clearTimeout(r);
|
|
b(f)
|
|
}, d)
|
|
} else {
|
|
var H = function() {
|
|
function n() {
|
|
var c;
|
|
if (c = -1 != D && -1 != F || -1 != D && -1 != H || -1 != F && -1 != H)(c = D != F && D != H && F != H) || (null ===
|
|
q && (c = /AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent), q = !!c && (536 > parseInt(c[1], 10) || 536 === parseInt(c[1], 10) && 11 >= parseInt(c[2], 10))), c = q && (D == da && F == da && H == da || D == T && F == T && H == T || D == P && F == P && H == P)), c = !c;
|
|
c && (L.parentNode && L.parentNode.removeChild(L), clearTimeout(r), b(f))
|
|
}
|
|
|
|
function m() {
|
|
if ((new Date).getTime() - B >= s) L.parentNode && L.parentNode.removeChild(L), d(Error("" + s + "ms timeout exceeded"));
|
|
else {
|
|
var b = document.hidden;
|
|
if (!0 === b || void 0 === b) D = t.a.offsetWidth, F = u.a.offsetWidth, H =
|
|
A.a.offsetWidth, n();
|
|
r = setTimeout(m, 50)
|
|
}
|
|
}
|
|
var t = new c(l),
|
|
u = new c(l),
|
|
A = new c(l),
|
|
D = -1,
|
|
F = -1,
|
|
H = -1,
|
|
da = -1,
|
|
T = -1,
|
|
P = -1,
|
|
L = document.createElement("div");
|
|
L.dir = "ltr";
|
|
e(t, j(f, "sans-serif"));
|
|
e(u, j(f, "serif"));
|
|
e(A, j(f, "monospace"));
|
|
L.appendChild(t.a);
|
|
L.appendChild(u.a);
|
|
L.appendChild(A.a);
|
|
document.body.appendChild(L);
|
|
da = t.a.offsetWidth;
|
|
T = u.a.offsetWidth;
|
|
P = A.a.offsetWidth;
|
|
m();
|
|
g(t, function(b) {
|
|
D = b;
|
|
n()
|
|
});
|
|
e(t, j(f, '"' + f.family + '",sans-serif'));
|
|
g(u, function(b) {
|
|
F = b;
|
|
n()
|
|
});
|
|
e(u, j(f, '"' + f.family + '",serif'));
|
|
g(A, function(b) {
|
|
H =
|
|
b;
|
|
n()
|
|
});
|
|
e(A, j(f, '"' + f.family + '",monospace'))
|
|
};
|
|
document.body ? H() : document.addEventListener ? document.addEventListener("DOMContentLoaded", function K() {
|
|
document.removeEventListener("DOMContentLoaded", K);
|
|
H()
|
|
}) : document.attachEvent("onreadystatechange", function S() {
|
|
if ("interactive" == document.readyState || "complete" == document.readyState) document.detachEvent("onreadystatechange", S), H()
|
|
})
|
|
}
|
|
})
|
|
};
|
|
"object" === typeof module ? module.exports = f : (window.FontFaceObserver = f, window.FontFaceObserver.prototype.load = f.prototype.load)
|
|
})();
|
|
(function(b) {
|
|
Number.prototype.map = function(b, c, d, e) {
|
|
return d + (e - d) * ((this - b) / (c - b))
|
|
};
|
|
Number.prototype.limit = function(b, c) {
|
|
return Math.min(c, Math.max(b, this))
|
|
};
|
|
Number.prototype.round = function(b) {
|
|
b = Math.pow(10, b || 0);
|
|
return Math.round(this * b) / b
|
|
};
|
|
Number.prototype.floor = function() {
|
|
return Math.floor(this)
|
|
};
|
|
Number.prototype.ceil = function() {
|
|
return Math.ceil(this)
|
|
};
|
|
Number.prototype.toInt = function() {
|
|
return this | 0
|
|
};
|
|
Number.prototype.toRad = function() {
|
|
return this / 180 * Math.PI
|
|
};
|
|
Number.prototype.toDeg = function() {
|
|
return 180 *
|
|
this / Math.PI
|
|
};
|
|
Array.prototype.erase = function(b) {
|
|
for (var c = this.length; c--;) this[c] === b && this.splice(c, 1);
|
|
return this
|
|
};
|
|
Array.prototype.random = function() {
|
|
return this[Math.floor(Math.random() * this.length)]
|
|
};
|
|
Function.prototype.bind = Function.prototype.bind || function(b) {
|
|
if ("function" !== typeof this) throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
|
|
var c = Array.prototype.slice.call(arguments, 1),
|
|
d = this,
|
|
e = function() {},
|
|
f = function() {
|
|
return d.apply(this instanceof e && b ?
|
|
this : b, c.concat(Array.prototype.slice.call(arguments)))
|
|
};
|
|
e.prototype = this.prototype;
|
|
f.prototype = new e;
|
|
return f
|
|
};
|
|
b.ig = {
|
|
game: null,
|
|
debug: null,
|
|
version: "1.23",
|
|
global: b,
|
|
modules: {},
|
|
resources: [],
|
|
ready: !1,
|
|
baked: !1,
|
|
nocache: "",
|
|
ua: {},
|
|
prefix: b.ImpactPrefix || "",
|
|
lib: "lib/",
|
|
_current: null,
|
|
_loadQueue: [],
|
|
_waitForOnload: 0,
|
|
$: function(b) {
|
|
return "#" == b.charAt(0) ? document.getElementById(b.substr(1)) : document.getElementsByTagName(b)
|
|
},
|
|
$new: function(b) {
|
|
return document.createElement(b)
|
|
},
|
|
copy: function(b) {
|
|
if (!b || "object" != typeof b ||
|
|
b instanceof HTMLElement || b instanceof ig.Class) return b;
|
|
if (b instanceof Array)
|
|
for (var c = [], d = 0, e = b.length; d < e; d++) c[d] = ig.copy(b[d]);
|
|
else
|
|
for (d in c = {}, b) c[d] = ig.copy(b[d]);
|
|
return c
|
|
},
|
|
merge: function(b, c) {
|
|
for (var d in c)
|
|
if (!("_mesh" === d || "_camera" === d)) {
|
|
var e = c[d];
|
|
if ("object" != typeof e || e instanceof HTMLElement || e instanceof ig.Class || null === e) b[d] = e;
|
|
else {
|
|
if (!b[d] || "object" != typeof b[d]) b[d] = e instanceof Array ? [] : {};
|
|
ig.merge(b[d], e)
|
|
}
|
|
} return b
|
|
},
|
|
ksort: function(b) {
|
|
if (!b || "object" != typeof b) return [];
|
|
var c = [],
|
|
d = [],
|
|
e;
|
|
for (e in b) c.push(e);
|
|
c.sort();
|
|
for (e = 0; e < c.length; e++) d.push(b[c[e]]);
|
|
return d
|
|
},
|
|
setVendorAttribute: function(b, c, d) {
|
|
var e = c.charAt(0).toUpperCase() + c.substr(1);
|
|
b[c] = "undefined" !== typeof b.imageSmoothingEnabled ? b["ms" + e] = b["moz" + e] = b["o" + e] = d : b["ms" + e] = b["moz" + e] = b["webkit" + e] = b["o" + e] = d
|
|
},
|
|
getVendorAttribute: function(b, c) {
|
|
var d = c.charAt(0).toUpperCase() + c.substr(1);
|
|
return "undefined" !== typeof b.imageSmoothingEnabled ? b[c] || b["ms" + d] || b["moz" + d] || b["o" + d] : b[c] || b["ms" + d] || b["moz" + d] || b["webkit" +
|
|
d] || b["o" + d]
|
|
},
|
|
normalizeVendorAttribute: function(b, c) {
|
|
var d = ig.getVendorAttribute(b, c);
|
|
!b[c] && d && (b[c] = d)
|
|
},
|
|
getImagePixels: function(b, c, d, e, f) {
|
|
var g = ig.$new("canvas");
|
|
g.width = b.width;
|
|
g.height = b.height;
|
|
var m = g.getContext("2d");
|
|
ig.System.SCALE.CRISP(g, m);
|
|
var u = ig.getVendorAttribute(m, "backingStorePixelRatio") || 1;
|
|
ig.normalizeVendorAttribute(m, "getImageDataHD");
|
|
var y = b.width / u,
|
|
z = b.height / u;
|
|
g.width = Math.ceil(y);
|
|
g.height = Math.ceil(z);
|
|
m.drawImage(b, 0, 0, y, z);
|
|
return 1 === u ? m.getImageData(c, d, e, f) : m.getImageDataHD(c,
|
|
d, e, f)
|
|
},
|
|
module: function(b) {
|
|
if (ig._current) throw "Module '" + ig._current.name + "' defines nothing";
|
|
if (ig.modules[b] && ig.modules[b].body) throw "Module '" + b + "' is already defined";
|
|
ig._current = {
|
|
name: b,
|
|
requires: [],
|
|
loaded: !1,
|
|
body: null
|
|
};
|
|
ig.modules[b] = ig._current;
|
|
ig._loadQueue.push(ig._current);
|
|
return ig
|
|
},
|
|
requires: function() {
|
|
ig._current.requires = Array.prototype.slice.call(arguments);
|
|
return ig
|
|
},
|
|
defines: function(b) {
|
|
ig._current.body = b;
|
|
ig._current = null;
|
|
ig._initDOMReady()
|
|
},
|
|
addResource: function(b) {
|
|
ig.resources.push(b)
|
|
},
|
|
setNocache: function(b) {
|
|
ig.nocache = b ? "?" + Date.now() : ""
|
|
},
|
|
log: function() {},
|
|
assert: function() {},
|
|
show: function() {},
|
|
mark: function() {},
|
|
_loadScript: function(b, c) {
|
|
ig.modules[b] = {
|
|
name: b,
|
|
requires: [],
|
|
loaded: !1,
|
|
body: null
|
|
};
|
|
ig._waitForOnload++;
|
|
var d = ig.prefix + ig.lib + b.replace(/\./g, "/") + ".js" + ig.nocache,
|
|
e = ig.$new("script");
|
|
e.type = "text/javascript";
|
|
e.src = d;
|
|
e.onload = function() {
|
|
ig._waitForOnload--;
|
|
ig._execModules()
|
|
};
|
|
e.onerror = function() {
|
|
throw "Failed to load module " + b + " at " + d + " required from " + c;
|
|
};
|
|
ig.$("head")[0].appendChild(e)
|
|
},
|
|
_execModules: function() {
|
|
for (var b = !1, c = 0; c < ig._loadQueue.length; c++) {
|
|
for (var d = ig._loadQueue[c], e = !0, f = 0; f < d.requires.length; f++) {
|
|
var g = d.requires[f];
|
|
ig.modules[g] ? ig.modules[g].loaded || (e = !1) : (e = !1, ig._loadScript(g, d.name))
|
|
}
|
|
e && d.body && (ig._loadQueue.splice(c, 1), d.loaded = !0, d.body(), b = !0, c--)
|
|
}
|
|
if (b) ig._execModules();
|
|
else if (!ig.baked && 0 == ig._waitForOnload && 0 != ig._loadQueue.length) {
|
|
b = [];
|
|
for (c = 0; c < ig._loadQueue.length; c++) {
|
|
e = [];
|
|
g = ig._loadQueue[c].requires;
|
|
for (f = 0; f < g.length; f++) d = ig.modules[g[f]], (!d ||
|
|
!d.loaded) && e.push(g[f]);
|
|
b.push(ig._loadQueue[c].name + " (requires: " + e.join(", ") + ")")
|
|
}
|
|
throw "Unresolved (or circular?) dependencies. Most likely there's a name/path mismatch for one of the listed modules or a previous syntax error prevents a module from loading:\n" + b.join("\n");
|
|
}
|
|
},
|
|
_DOMReady: function() {
|
|
if (!ig.modules["dom.ready"].loaded) {
|
|
if (!document.body) return setTimeout(ig._DOMReady, 13);
|
|
ig.modules["dom.ready"].loaded = !0;
|
|
ig._waitForOnload--;
|
|
ig._execModules()
|
|
}
|
|
return 0
|
|
},
|
|
_boot: function() {
|
|
document.location.href.match(/\?nocache/) &&
|
|
ig.setNocache(!0);
|
|
ig.ua.pixelRatio = b.devicePixelRatio || 1;
|
|
ig.ua.viewport = {
|
|
width: b.innerWidth,
|
|
height: b.innerHeight
|
|
};
|
|
ig.ua.screen = {
|
|
width: b.screen.availWidth * ig.ua.pixelRatio,
|
|
height: b.screen.availHeight * ig.ua.pixelRatio
|
|
};
|
|
ig.ua.iPhone = /iPhone/i.test(navigator.userAgent);
|
|
ig.ua.iPhone4 = ig.ua.iPhone && 2 == ig.ua.pixelRatio;
|
|
ig.ua.iPad = /iPad/i.test(navigator.userAgent);
|
|
ig.ua.android = /android/i.test(navigator.userAgent);
|
|
ig.ua.winPhone = /Windows Phone/i.test(navigator.userAgent);
|
|
ig.ua.is_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent);
|
|
ig.ua.is_safari_or_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent);
|
|
ig.ua.iOS = ig.ua.iPhone || ig.ua.iPad;
|
|
ig.ua.iOS6_tag = /OS 6_/i.test(navigator.userAgent);
|
|
ig.ua.iOS6 = (ig.ua.iPhone || ig.ua.iPad) && ig.ua.iOS6_tag;
|
|
ig.ua.iOSgt5 = ig.ua.iOS && 5 < parseInt(navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/)[1]);
|
|
ig.ua.HTCONE = /HTC_One/i.test(navigator.userAgent);
|
|
ig.ua.winPhone = /Windows Phone/i.test(navigator.userAgent);
|
|
ig.ua.Kindle = /Silk/i.test(navigator.userAgent);
|
|
ig.ua.touchDevice = "ontouchstart" in
|
|
b || b.navigator.msMaxTouchPoints;
|
|
ig.ua.mobile = ig.ua.iOS || ig.ua.android || ig.ua.iOS6 || ig.ua.winPhone || ig.ua.Kindle || /mobile/i.test(navigator.userAgent)
|
|
},
|
|
_initDOMReady: function() {
|
|
ig.modules["dom.ready"] ? ig._execModules() : (ig._boot(), ig.modules["dom.ready"] = {
|
|
requires: [],
|
|
loaded: !1,
|
|
body: null
|
|
}, ig._waitForOnload++, "complete" === document.readyState ? ig._DOMReady() : (document.addEventListener("DOMContentLoaded", ig._DOMReady, !1), b.addEventListener("load", ig._DOMReady, !1)))
|
|
}
|
|
};
|
|
ig.normalizeVendorAttribute(b, "requestAnimationFrame");
|
|
if (b.requestAnimationFrame) {
|
|
var c = 1,
|
|
e = {};
|
|
b.ig.setAnimation = function(d, f) {
|
|
var g = c++;
|
|
e[g] = !0;
|
|
var m = function() {
|
|
e[g] && (b.requestAnimationFrame(m, f), d())
|
|
};
|
|
b.requestAnimationFrame(m, f);
|
|
return g
|
|
};
|
|
b.ig.clearAnimation = function(b) {
|
|
console.log(e);
|
|
delete e[b]
|
|
}
|
|
} else b.ig.setAnimation = function(c) {
|
|
return b.setInterval(c, 1E3 / 60)
|
|
}, b.ig.clearAnimation = function(c) {
|
|
b.clearInterval(c)
|
|
};
|
|
var d = !1,
|
|
g = /xyz/.test(function() {
|
|
xyz
|
|
}) ? /\bparent\b/ : /.*/,
|
|
f = 0;
|
|
b.ig.Class = function() {};
|
|
var m = function(b) {
|
|
var c = this.prototype,
|
|
d = {},
|
|
e;
|
|
for (e in b) "function" ==
|
|
typeof b[e] && "function" == typeof c[e] && g.test(b[e]) ? (d[e] = c[e], c[e] = function(b, c) {
|
|
return function() {
|
|
var e = this.parent;
|
|
this.parent = d[b];
|
|
var f = c.apply(this, arguments);
|
|
this.parent = e;
|
|
return f
|
|
}
|
|
}(e, b[e])) : c[e] = b[e]
|
|
};
|
|
b.ig.Class.extend = function(c) {
|
|
function e() {
|
|
if (!d) {
|
|
if (this.staticInstantiate) {
|
|
var b = this.staticInstantiate.apply(this, arguments);
|
|
if (b) return b
|
|
}
|
|
for (var c in this) "object" == typeof this[c] && (this[c] = ig.copy(this[c]));
|
|
this.init && this.init.apply(this, arguments)
|
|
}
|
|
return this
|
|
}
|
|
var q = this.prototype;
|
|
d = !0;
|
|
var n = new this;
|
|
d = !1;
|
|
for (var r in c) n[r] = "function" == typeof c[r] && "function" == typeof q[r] && g.test(c[r]) ? function(b, c) {
|
|
return function() {
|
|
var d = this.parent;
|
|
this.parent = q[b];
|
|
var e = c.apply(this, arguments);
|
|
this.parent = d;
|
|
return e
|
|
}
|
|
}(r, c[r]) : c[r];
|
|
e.prototype = n;
|
|
e.prototype.constructor = e;
|
|
e.extend = b.ig.Class.extend;
|
|
e.inject = m;
|
|
e.classId = n.classId = ++f;
|
|
return e
|
|
};
|
|
b.ImpactMixin && ig.merge(ig, b.ImpactMixin)
|
|
})(window);
|
|
ig.baked = !0;
|
|
ig.module("impact.image").defines(function() {
|
|
ig.Image = ig.Class.extend({
|
|
data: null,
|
|
width: 0,
|
|
height: 0,
|
|
loaded: !1,
|
|
failed: !1,
|
|
loadCallback: null,
|
|
path: "",
|
|
staticInstantiate: function(b) {
|
|
return ig.Image.cache[b] || null
|
|
},
|
|
init: function(b) {
|
|
this.path = b;
|
|
this.load()
|
|
},
|
|
load: function(b) {
|
|
this.loaded ? b && b(this.path, !0) : (!this.loaded && ig.ready ? (this.loadCallback = b || null, this.data = new Image, this.data.onload = this.onload.bind(this), this.data.onerror = this.onerror.bind(this), this.data.src = ig.prefix + this.path + ig.nocache) : ig.addResource(this),
|
|
ig.Image.cache[this.path] = this)
|
|
},
|
|
reload: function() {
|
|
this.loaded = !1;
|
|
this.data = new Image;
|
|
this.data.onload = this.onload.bind(this);
|
|
this.data.src = this.path + "?" + Date.now()
|
|
},
|
|
onload: function() {
|
|
this.width = this.data.width;
|
|
this.height = this.data.height;
|
|
this.loaded = !0;
|
|
1 != ig.system.scale && this.resize(ig.system.scale);
|
|
this.loadCallback && this.loadCallback(this.path, !0)
|
|
},
|
|
onerror: function() {
|
|
this.failed = !0;
|
|
this.loadCallback && this.loadCallback(this.path, !1)
|
|
},
|
|
resize: function(b) {
|
|
var c = ig.getImagePixels(this.data, 0, 0, this.width,
|
|
this.height),
|
|
e = this.width * b,
|
|
d = this.height * b,
|
|
g = ig.$new("canvas");
|
|
g.width = e;
|
|
g.height = d;
|
|
for (var f = g.getContext("2d"), m = f.getImageData(0, 0, e, d), l = 0; l < d; l++)
|
|
for (var j = 0; j < e; j++) {
|
|
var q = 4 * (Math.floor(l / b) * this.width + Math.floor(j / b)),
|
|
n = 4 * (l * e + j);
|
|
m.data[n] = c.data[q];
|
|
m.data[n + 1] = c.data[q + 1];
|
|
m.data[n + 2] = c.data[q + 2];
|
|
m.data[n + 3] = c.data[q + 3]
|
|
}
|
|
f.putImageData(m, 0, 0);
|
|
this.data = g
|
|
},
|
|
draw: function(b, c, e, d, g, f) {
|
|
if (this.loaded) {
|
|
var m = ig.system.scale;
|
|
g = (g ? g : this.width) * m;
|
|
f = (f ? f : this.height) * m;
|
|
ig.system.context.drawImage(this.data,
|
|
e ? e * m : 0, d ? d * m : 0, g, f, ig.system.getDrawPos(b), ig.system.getDrawPos(c), g, f);
|
|
ig.Image.drawCount++
|
|
}
|
|
},
|
|
drawTile: function(b, c, e, d, g, f, m) {
|
|
g = g ? g : d;
|
|
if (this.loaded && !(d > this.width || g > this.height)) {
|
|
var l = ig.system.scale,
|
|
j = Math.floor(d * l),
|
|
q = Math.floor(g * l),
|
|
n = f ? -1 : 1,
|
|
r = m ? -1 : 1;
|
|
if (f || m) ig.system.context.save(), ig.system.context.scale(n, r);
|
|
ig.system.context.drawImage(this.data, Math.floor(e * d) % this.width * l, Math.floor(e * d / this.width) * g * l, j, q, ig.system.getDrawPos(b) * n - (f ? j : 0), ig.system.getDrawPos(c) * r - (m ? q : 0), j, q);
|
|
(f ||
|
|
m) && ig.system.context.restore();
|
|
ig.Image.drawCount++
|
|
}
|
|
}
|
|
});
|
|
ig.Image.drawCount = 0;
|
|
ig.Image.cache = {};
|
|
ig.Image.reloadCache = function() {
|
|
for (var b in ig.Image.cache) ig.Image.cache[b].reload()
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.font").requires("impact.image").defines(function() {
|
|
ig.Font = ig.Image.extend({
|
|
widthMap: [],
|
|
indices: [],
|
|
firstChar: 32,
|
|
alpha: 1,
|
|
letterSpacing: 1,
|
|
lineSpacing: 0,
|
|
onload: function(b) {
|
|
this._loadMetrics(this.data);
|
|
this.parent(b)
|
|
},
|
|
widthForString: function(b) {
|
|
if (-1 !== b.indexOf("\n")) {
|
|
b = b.split("\n");
|
|
for (var c = 0, e = 0; e < b.length; e++) c = Math.max(c, this._widthForLine(b[e]));
|
|
return c
|
|
}
|
|
return this._widthForLine(b)
|
|
},
|
|
_widthForLine: function(b) {
|
|
for (var c = 0, e = 0; e < b.length; e++) c += this.widthMap[b.charCodeAt(e) - this.firstChar] +
|
|
this.letterSpacing;
|
|
return c
|
|
},
|
|
heightForString: function(b) {
|
|
return b.split("\n").length * (this.height + this.lineSpacing)
|
|
},
|
|
draw: function(b, c, e, d) {
|
|
"string" != typeof b && (b = b.toString());
|
|
if (-1 !== b.indexOf("\n")) {
|
|
b = b.split("\n");
|
|
for (var g = this.height + this.lineSpacing, f = 0; f < b.length; f++) this.draw(b[f], c, e + f * g, d)
|
|
} else {
|
|
if (d == ig.Font.ALIGN.RIGHT || d == ig.Font.ALIGN.CENTER) f = this._widthForLine(b), c -= d == ig.Font.ALIGN.CENTER ? f / 2 : f;
|
|
1 !== this.alpha && (ig.system.context.globalAlpha = this.alpha);
|
|
for (f = 0; f < b.length; f++) d = b.charCodeAt(f),
|
|
c += this._drawChar(d - this.firstChar, c, e);
|
|
1 !== this.alpha && (ig.system.context.globalAlpha = 1);
|
|
ig.Image.drawCount += b.length
|
|
}
|
|
},
|
|
_drawChar: function(b, c, e) {
|
|
if (!this.loaded || 0 > b || b >= this.indices.length) return 0;
|
|
var d = ig.system.scale,
|
|
g = this.widthMap[b] * d,
|
|
f = (this.height - 2) * d;
|
|
ig.system.context.drawImage(this.data, this.indices[b] * d, 0, g, f, ig.system.getDrawPos(c), ig.system.getDrawPos(e), g, f);
|
|
return this.widthMap[b] + this.letterSpacing
|
|
},
|
|
_loadMetrics: function(b) {
|
|
this.height = b.height - 1;
|
|
this.widthMap = [];
|
|
this.indices = [];
|
|
for (var c = ig.getImagePixels(b, 0, b.height - 1, b.width, 1), e = 0, d = 0, g = 0; g < b.width; g++) {
|
|
var f = 4 * g + 3;
|
|
127 < c.data[f] ? d++ : 128 > c.data[f] && d && (this.widthMap.push(d), this.indices.push(g - d), e++, d = 0)
|
|
}
|
|
this.widthMap.push(d);
|
|
this.indices.push(g - d)
|
|
}
|
|
});
|
|
ig.Font.ALIGN = {
|
|
LEFT: 0,
|
|
RIGHT: 1,
|
|
CENTER: 2
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.sound").defines(function() {
|
|
ig.SoundManager = ig.Class.extend({
|
|
clips: {},
|
|
volume: 1,
|
|
format: null,
|
|
init: function() {
|
|
if (!ig.Sound.enabled || !window.Audio) ig.Sound.enabled = !1;
|
|
else {
|
|
for (var b = new Audio, c = 0; c < ig.Sound.use.length; c++) {
|
|
var e = ig.Sound.use[c];
|
|
if (b.canPlayType(e.mime)) {
|
|
this.format = e;
|
|
break
|
|
}
|
|
}
|
|
this.format || (ig.Sound.enabled = !1)
|
|
}
|
|
},
|
|
load: function(b, c, e) {
|
|
var d = ig.prefix + b.replace(/[^\.]+$/, this.format.ext) + ig.nocache;
|
|
if (this.clips[b]) {
|
|
if (c && this.clips[b].length < ig.Sound.channels)
|
|
for (c = this.clips[b].length; c <
|
|
ig.Sound.channels; c++) {
|
|
var g = new Audio(d);
|
|
g.load();
|
|
this.clips[b].push(g)
|
|
}
|
|
return this.clips[b][0]
|
|
}
|
|
var f = new Audio(d);
|
|
e && (f.addEventListener("canplaythrough", function l(c) {
|
|
f.removeEventListener("canplaythrough", l, !1);
|
|
e(b, !0, c)
|
|
}, !1), f.addEventListener("error", function(c) {
|
|
e(b, !1, c)
|
|
}, !1));
|
|
f.preload = "auto";
|
|
f.load();
|
|
this.clips[b] = [f];
|
|
if (c)
|
|
for (c = 1; c < ig.Sound.channels; c++) g = new Audio(d), g.load(), this.clips[b].push(g);
|
|
return f
|
|
},
|
|
get: function(b) {
|
|
b = this.clips[b];
|
|
for (var c = 0, e; e = b[c++];)
|
|
if (e.paused || e.ended) return e.ended &&
|
|
(e.currentTime = 0), e;
|
|
b[0].pause();
|
|
b[0].currentTime = 0;
|
|
return b[0]
|
|
}
|
|
});
|
|
ig.Music = ig.Class.extend({
|
|
tracks: [],
|
|
namedTracks: {},
|
|
currentTrack: null,
|
|
currentIndex: 0,
|
|
random: !1,
|
|
_volume: 1,
|
|
_loop: !1,
|
|
_fadeInterval: 0,
|
|
_fadeTimer: null,
|
|
_endedCallbackBound: null,
|
|
init: function() {
|
|
this._endedCallbackBound = this._endedCallback.bind(this);
|
|
Object.defineProperty ? (Object.defineProperty(this, "volume", {
|
|
get: this.getVolume.bind(this),
|
|
set: this.setVolume.bind(this)
|
|
}), Object.defineProperty(this, "loop", {
|
|
get: this.getLooping.bind(this),
|
|
set: this.setLooping.bind(this)
|
|
})) :
|
|
this.__defineGetter__ && (this.__defineGetter__("volume", this.getVolume.bind(this)), this.__defineSetter__("volume", this.setVolume.bind(this)), this.__defineGetter__("loop", this.getLooping.bind(this)), this.__defineSetter__("loop", this.setLooping.bind(this)))
|
|
},
|
|
add: function(b, c) {
|
|
if (ig.Sound.enabled) {
|
|
var e = ig.soundManager.load(b instanceof ig.Sound ? b.path : b, !1);
|
|
e.loop = this._loop;
|
|
e.volume = this._volume;
|
|
e.addEventListener("ended", this._endedCallbackBound, !1);
|
|
this.tracks.push(e);
|
|
c && (this.namedTracks[c] = e);
|
|
this.currentTrack ||
|
|
(this.currentTrack = e)
|
|
}
|
|
},
|
|
next: function() {
|
|
this.tracks.length && (this.stop(), this.currentIndex = this.random ? Math.floor(Math.random() * this.tracks.length) : (this.currentIndex + 1) % this.tracks.length, this.currentTrack = this.tracks[this.currentIndex], this.play())
|
|
},
|
|
pause: function() {
|
|
this.currentTrack && this.currentTrack.pause()
|
|
},
|
|
stop: function() {
|
|
this.currentTrack && (this.currentTrack.pause(), this.currentTrack.currentTime = 0)
|
|
},
|
|
play: function(b) {
|
|
if (b && this.namedTracks[b]) b = this.namedTracks[b], b != this.currentTrack && (this.stop(),
|
|
this.currentTrack = b);
|
|
else if (!this.currentTrack) return;
|
|
this.currentTrack.play()
|
|
},
|
|
getLooping: function() {
|
|
return this._loop
|
|
},
|
|
setLooping: function(b) {
|
|
this._loop = b;
|
|
for (var c in this.tracks) this.tracks[c].loop = b
|
|
},
|
|
getVolume: function() {
|
|
return this._volume
|
|
},
|
|
setVolume: function(b) {
|
|
this._volume = b.limit(0, 1);
|
|
for (var c in this.tracks) this.tracks[c].volume = this._volume
|
|
},
|
|
fadeOut: function(b) {
|
|
this.currentTrack && (clearInterval(this._fadeInterval), this.fadeTimer = new ig.Timer(b), this._fadeInterval = setInterval(this._fadeStep.bind(this),
|
|
50))
|
|
},
|
|
_fadeStep: function() {
|
|
var b = this.fadeTimer.delta().map(-this.fadeTimer.target, 0, 1, 0).limit(0, 1) * this._volume;
|
|
0.01 >= b ? (this.stop(), this.currentTrack.volume = this._volume, clearInterval(this._fadeInterval)) : this.currentTrack.volume = b
|
|
},
|
|
_endedCallback: function() {
|
|
this._loop ? this.play() : this.next()
|
|
}
|
|
});
|
|
ig.Sound = ig.Class.extend({
|
|
path: "",
|
|
volume: 1,
|
|
currentClip: null,
|
|
multiChannel: !0,
|
|
init: function(b, c) {
|
|
this.path = b;
|
|
this.multiChannel = !1 !== c;
|
|
this.load()
|
|
},
|
|
load: function(b) {
|
|
ig.Sound.enabled ? ig.ready ? ig.soundManager.load(this.path,
|
|
this.multiChannel, b) : ig.addResource(this) : b && b(this.path, !0)
|
|
},
|
|
play: function() {
|
|
ig.Sound.enabled && (this.currentClip = ig.soundManager.get(this.path), this.currentClip.volume = ig.soundManager.volume * this.volume, this.currentClip.play())
|
|
},
|
|
stop: function() {
|
|
this.currentClip && (this.currentClip.pause(), this.currentClip.currentTime = 0)
|
|
}
|
|
});
|
|
ig.Sound.FORMAT = {
|
|
MP3: {
|
|
ext: "mp3",
|
|
mime: "audio/mpeg"
|
|
},
|
|
M4A: {
|
|
ext: "m4a",
|
|
mime: "audio/mp4; codecs=mp4a"
|
|
},
|
|
OGG: {
|
|
ext: "ogg",
|
|
mime: "audio/ogg; codecs=vorbis"
|
|
},
|
|
WEBM: {
|
|
ext: "webm",
|
|
mime: "audio/webm; codecs=vorbis"
|
|
},
|
|
CAF: {
|
|
ext: "caf",
|
|
mime: "audio/x-caf"
|
|
}
|
|
};
|
|
ig.Sound.use = [ig.Sound.FORMAT.OGG, ig.Sound.FORMAT.MP3];
|
|
ig.Sound.channels = 4;
|
|
ig.Sound.enabled = !0
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.loader").requires("impact.image", "impact.font", "impact.sound").defines(function() {
|
|
ig.Loader = ig.Class.extend({
|
|
resources: [],
|
|
gameClass: null,
|
|
status: 0,
|
|
done: !1,
|
|
_unloaded: [],
|
|
_drawStatus: 0,
|
|
_intervalId: 0,
|
|
_loadCallbackBound: null,
|
|
init: function(b, c) {
|
|
this.gameClass = b;
|
|
this.resources = c;
|
|
this._loadCallbackBound = this._loadCallback.bind(this);
|
|
for (var e = 0; e < this.resources.length; e++) this._unloaded.push(this.resources[e].path)
|
|
},
|
|
load: function() {
|
|
ig.system.clear("#000");
|
|
if (this.resources.length) {
|
|
for (var b =
|
|
0; b < this.resources.length; b++) this.loadResource(this.resources[b]);
|
|
this._intervalId = setInterval(this.draw.bind(this), 16)
|
|
} else this.end()
|
|
},
|
|
loadResource: function(b) {
|
|
b.load(this._loadCallbackBound)
|
|
},
|
|
end: function() {
|
|
this.done || (this.done = !0, clearInterval(this._intervalId))
|
|
},
|
|
draw: function() {},
|
|
_loadCallback: function(b, c) {
|
|
if (c) this._unloaded.erase(b);
|
|
else throw "Failed to load resource: " + b;
|
|
this.status = 1 - this._unloaded.length / this.resources.length;
|
|
0 == this._unloaded.length && setTimeout(this.end.bind(this), 250)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.timer").defines(function() {
|
|
ig.Timer = ig.Class.extend({
|
|
target: 0,
|
|
base: 0,
|
|
last: 0,
|
|
pausedAt: 0,
|
|
init: function(b) {
|
|
this.last = this.base = ig.Timer.time;
|
|
this.target = b || 0
|
|
},
|
|
set: function(b) {
|
|
this.target = b || 0;
|
|
this.base = ig.Timer.time;
|
|
this.pausedAt = 0
|
|
},
|
|
reset: function() {
|
|
this.base = ig.Timer.time;
|
|
this.pausedAt = 0
|
|
},
|
|
tick: function() {
|
|
var b = ig.Timer.time - this.last;
|
|
this.last = ig.Timer.time;
|
|
return this.pausedAt ? 0 : b
|
|
},
|
|
delta: function() {
|
|
return (this.pausedAt || ig.Timer.time) - this.base - this.target
|
|
},
|
|
pause: function() {
|
|
this.pausedAt || (this.pausedAt =
|
|
ig.Timer.time)
|
|
},
|
|
unpause: function() {
|
|
this.pausedAt && (this.base += ig.Timer.time - this.pausedAt, this.pausedAt = 0)
|
|
}
|
|
});
|
|
ig.Timer._last = 0;
|
|
ig.Timer.time = Number.MIN_VALUE;
|
|
ig.Timer.timeScale = 1;
|
|
ig.Timer.maxStep = 0.05;
|
|
ig.Timer.step = function() {
|
|
var b = Date.now();
|
|
ig.Timer.time += Math.min((b - ig.Timer._last) / 1E3, ig.Timer.maxStep) * ig.Timer.timeScale;
|
|
ig.Timer._last = b
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.system").requires("impact.timer", "impact.image").defines(function() {
|
|
ig.System = ig.Class.extend({
|
|
fps: 30,
|
|
width: 320,
|
|
height: 240,
|
|
realWidth: 320,
|
|
realHeight: 240,
|
|
scale: 1,
|
|
tick: 0,
|
|
animationId: 0,
|
|
newGameClass: null,
|
|
running: !1,
|
|
delegate: null,
|
|
clock: null,
|
|
canvas: null,
|
|
context: null,
|
|
init: function(b, c, e, d, g) {
|
|
this.fps = c;
|
|
this.clock = new ig.Timer;
|
|
this.canvas = ig.$(b);
|
|
this.resize(e, d, g);
|
|
this.context = this.canvas.getContext("2d");
|
|
this.getDrawPos = ig.System.drawMode;
|
|
1 != this.scale && (ig.System.scaleMode = ig.System.SCALE.CRISP);
|
|
ig.System.scaleMode(this.canvas, this.context)
|
|
},
|
|
resize: function(b, c, e) {
|
|
this.width = b;
|
|
this.height = c;
|
|
this.scale = e || this.scale;
|
|
this.realWidth = this.width * this.scale;
|
|
this.realHeight = this.height * this.scale;
|
|
this.canvas.width = this.realWidth;
|
|
this.canvas.height = this.realHeight
|
|
},
|
|
setGame: function(b) {
|
|
this.running ? this.newGameClass = b : this.setGameNow(b)
|
|
},
|
|
setGameNow: function(b) {
|
|
ig.game = new b;
|
|
ig.system.setDelegate(ig.game)
|
|
},
|
|
setDelegate: function(b) {
|
|
if ("function" == typeof b.run) this.delegate = b, this.startRunLoop();
|
|
else throw "System.setDelegate: No run() function in object";
|
|
},
|
|
stopRunLoop: function() {
|
|
ig.clearAnimation(this.animationId);
|
|
this.running = !1
|
|
},
|
|
startRunLoop: function() {
|
|
this.stopRunLoop();
|
|
this.animationId = ig.setAnimation(this.run.bind(this), this.canvas);
|
|
this.running = !0
|
|
},
|
|
clear: function(b) {
|
|
this.context.fillStyle = b;
|
|
this.context.fillRect(0, 0, this.realWidth, this.realHeight)
|
|
},
|
|
run: function() {
|
|
if (!ig.game || !ig.game.isBlur)
|
|
if (!ig.game || !ig.game.pauseGlobal) ig.Timer.step(), this.tick = this.clock.tick(), this.delegate.run(), ig.input.clearPressed(), this.newGameClass && (this.setGameNow(this.newGameClass),
|
|
this.newGameClass = null)
|
|
},
|
|
getDrawPos: null
|
|
});
|
|
ig.System.DRAW = {
|
|
AUTHENTIC: function(b) {
|
|
return Math.round(b) * this.scale
|
|
},
|
|
SMOOTH: function(b) {
|
|
return Math.round(b * this.scale)
|
|
},
|
|
SUBPIXEL: function(b) {
|
|
return b * this.scale
|
|
}
|
|
};
|
|
ig.System.drawMode = ig.System.DRAW.SMOOTH;
|
|
ig.System.SCALE = {
|
|
CRISP: function(b, c) {
|
|
ig.setVendorAttribute(c, "imageSmoothingEnabled", !1);
|
|
b.style.imageRendering = "-moz-crisp-edges";
|
|
b.style.imageRendering = "-o-crisp-edges";
|
|
b.style.imageRendering = "-webkit-optimize-contrast";
|
|
b.style.imageRendering = "crisp-edges";
|
|
b.style.msInterpolationMode = "nearest-neighbor"
|
|
},
|
|
SMOOTH: function(b, c) {
|
|
ig.setVendorAttribute(c, "imageSmoothingEnabled", !0);
|
|
b.style.imageRendering = "";
|
|
b.style.msInterpolationMode = ""
|
|
}
|
|
};
|
|
ig.System.scaleMode = ig.System.SCALE.SMOOTH
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.input").defines(function() {
|
|
ig.KEY = {
|
|
MOUSE1: -1,
|
|
MOUSE2: -3,
|
|
MWHEEL_UP: -4,
|
|
MWHEEL_DOWN: -5,
|
|
BACKSPACE: 8,
|
|
TAB: 9,
|
|
ENTER: 13,
|
|
PAUSE: 19,
|
|
CAPS: 20,
|
|
ESC: 27,
|
|
SPACE: 32,
|
|
PAGE_UP: 33,
|
|
PAGE_DOWN: 34,
|
|
END: 35,
|
|
HOME: 36,
|
|
LEFT_ARROW: 37,
|
|
UP_ARROW: 38,
|
|
RIGHT_ARROW: 39,
|
|
DOWN_ARROW: 40,
|
|
INSERT: 45,
|
|
DELETE: 46,
|
|
_0: 48,
|
|
_1: 49,
|
|
_2: 50,
|
|
_3: 51,
|
|
_4: 52,
|
|
_5: 53,
|
|
_6: 54,
|
|
_7: 55,
|
|
_8: 56,
|
|
_9: 57,
|
|
A: 65,
|
|
B: 66,
|
|
C: 67,
|
|
D: 68,
|
|
E: 69,
|
|
F: 70,
|
|
G: 71,
|
|
H: 72,
|
|
I: 73,
|
|
J: 74,
|
|
K: 75,
|
|
L: 76,
|
|
M: 77,
|
|
N: 78,
|
|
O: 79,
|
|
P: 80,
|
|
Q: 81,
|
|
R: 82,
|
|
S: 83,
|
|
T: 84,
|
|
U: 85,
|
|
V: 86,
|
|
W: 87,
|
|
X: 88,
|
|
Y: 89,
|
|
Z: 90,
|
|
NUMPAD_0: 96,
|
|
NUMPAD_1: 97,
|
|
NUMPAD_2: 98,
|
|
NUMPAD_3: 99,
|
|
NUMPAD_4: 100,
|
|
NUMPAD_5: 101,
|
|
NUMPAD_6: 102,
|
|
NUMPAD_7: 103,
|
|
NUMPAD_8: 104,
|
|
NUMPAD_9: 105,
|
|
MULTIPLY: 106,
|
|
ADD: 107,
|
|
SUBSTRACT: 109,
|
|
DECIMAL: 110,
|
|
DIVIDE: 111,
|
|
F1: 112,
|
|
F2: 113,
|
|
F3: 114,
|
|
F4: 115,
|
|
F5: 116,
|
|
F6: 117,
|
|
F7: 118,
|
|
F8: 119,
|
|
F9: 120,
|
|
F10: 121,
|
|
F11: 122,
|
|
F12: 123,
|
|
SHIFT: 16,
|
|
CTRL: 17,
|
|
ALT: 18,
|
|
PLUS: 187,
|
|
COMMA: 188,
|
|
MINUS: 189,
|
|
PERIOD: 190
|
|
};
|
|
ig.Input = ig.Class.extend({
|
|
bindings: {},
|
|
actions: {},
|
|
presses: {},
|
|
locks: {},
|
|
delayedKeyup: {},
|
|
isUsingMouse: !1,
|
|
isUsingKeyboard: !1,
|
|
isUsingAccelerometer: !1,
|
|
mouse: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
accel: {
|
|
x: 0,
|
|
y: 0,
|
|
z: 0
|
|
},
|
|
initMouse: function() {
|
|
if (!this.isUsingMouse) {
|
|
this.isUsingMouse = !0;
|
|
var b = this.mousewheel.bind(this);
|
|
ig.system.canvas.addEventListener("mousewheel", b, !1);
|
|
ig.system.canvas.addEventListener("DOMMouseScroll", b, !1);
|
|
ig.system.canvas.addEventListener("contextmenu", this.contextmenu.bind(this), !1);
|
|
ig.system.canvas.addEventListener("mousedown", this.keydown.bind(this), !1);
|
|
ig.system.canvas.addEventListener("mouseup", this.keyup.bind(this), !1);
|
|
ig.system.canvas.addEventListener("mousemove", this.mousemove.bind(this), !1);
|
|
ig.ua.touchDevice && (ig.system.canvas.addEventListener("touchstart",
|
|
this.keydown.bind(this), !1), ig.system.canvas.addEventListener("touchend", this.keyup.bind(this), !1), ig.system.canvas.addEventListener("touchmove", this.mousemove.bind(this), !1), ig.system.canvas.addEventListener("MSPointerDown", this.keydown.bind(this), !1), ig.system.canvas.addEventListener("MSPointerUp", this.keyup.bind(this), !1), ig.system.canvas.addEventListener("MSPointerMove", this.mousemove.bind(this), !1), ig.system.canvas.style.msTouchAction = "none")
|
|
}
|
|
},
|
|
initKeyboard: function() {
|
|
this.isUsingKeyboard || (this.isUsingKeyboard = !0, window.addEventListener("keydown", this.keydown.bind(this), !1), window.addEventListener("keyup", this.keyup.bind(this), !1))
|
|
},
|
|
initAccelerometer: function() {
|
|
this.isUsingAccelerometer || window.addEventListener("devicemotion", this.devicemotion.bind(this), !1)
|
|
},
|
|
mousewheel: function(b) {
|
|
var c = this.bindings[0 < (b.wheelDelta ? b.wheelDelta : -1 * b.detail) ? ig.KEY.MWHEEL_UP : ig.KEY.MWHEEL_DOWN];
|
|
c && (this.actions[c] = !0, this.presses[c] = !0, this.delayedKeyup[c] = !0, b.stopPropagation(), b.preventDefault())
|
|
},
|
|
mousemove: function(b) {
|
|
var c =
|
|
parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth;
|
|
ig.ua.mobile && (c = ig.system.realWidth);
|
|
var c = ig.system.scale * (c / ig.system.realWidth),
|
|
e = {
|
|
left: 0,
|
|
top: 0
|
|
};
|
|
ig.system.canvas.getBoundingClientRect && (e = ig.system.canvas.getBoundingClientRect());
|
|
b = b.touches ? b.touches[0] : b;
|
|
this.mouse.x = (b.clientX - e.left) / c;
|
|
this.mouse.y = (b.clientY - e.top) / c
|
|
},
|
|
contextmenu: function(b) {
|
|
this.bindings[ig.KEY.MOUSE2] && (b.stopPropagation(), b.preventDefault())
|
|
},
|
|
keydown: function(b) {
|
|
var c = b.target.tagName;
|
|
"INPUT" == c || "TEXTAREA" ==
|
|
c || (c = "keydown" == b.type ? b.keyCode : 2 == b.button ? ig.KEY.MOUSE2 : ig.KEY.MOUSE1, ("touchstart" == b.type || "mousedown" == b.type) && this.mousemove(b), c = this.bindings[c], console.log(c), c && (this.actions[c] = !0, this.locks[c] || (this.presses[c] = !0, this.locks[c] = !0), b.stopPropagation(), b.preventDefault()))
|
|
},
|
|
keyup: function(b) {
|
|
var c = b.target.tagName;
|
|
if (!("INPUT" == c || "TEXTAREA" == c))
|
|
if (c = this.bindings["keyup" == b.type ? b.keyCode : 2 == b.button ? ig.KEY.MOUSE2 : ig.KEY.MOUSE1]) this.delayedKeyup[c] = !0, b.stopPropagation(), b.preventDefault()
|
|
},
|
|
devicemotion: function(b) {
|
|
this.accel = b.accelerationIncludingGravity
|
|
},
|
|
bind: function(b, c) {
|
|
0 > b ? this.initMouse() : 0 < b && this.initKeyboard();
|
|
this.bindings[b] = c
|
|
},
|
|
bindTouch: function(b, c) {
|
|
var e = ig.$(b),
|
|
d = this;
|
|
e.addEventListener("touchstart", function(b) {
|
|
d.touchStart(b, c)
|
|
}, !1);
|
|
e.addEventListener("touchend", function(b) {
|
|
d.touchEnd(b, c)
|
|
}, !1);
|
|
e.addEventListener("MSPointerDown", function(b) {
|
|
d.touchStart(b, c)
|
|
}, !1);
|
|
e.addEventListener("MSPointerUp", function(b) {
|
|
d.touchEnd(b, c)
|
|
}, !1)
|
|
},
|
|
unbind: function(b) {
|
|
this.delayedKeyup[this.bindings[b]] = !0;
|
|
this.bindings[b] = null
|
|
},
|
|
unbindAll: function() {
|
|
this.bindings = {};
|
|
this.actions = {};
|
|
this.presses = {};
|
|
this.locks = {};
|
|
this.delayedKeyup = {}
|
|
},
|
|
state: function(b) {
|
|
return this.actions[b]
|
|
},
|
|
pressed: function(b) {
|
|
return this.presses[b]
|
|
},
|
|
released: function(b) {
|
|
return !!this.delayedKeyup[b]
|
|
},
|
|
clearPressed: function() {
|
|
for (var b in this.delayedKeyup) this.actions[b] = !1, this.locks[b] = !1;
|
|
this.delayedKeyup = {};
|
|
this.presses = {}
|
|
},
|
|
touchStart: function(b, c) {
|
|
this.actions[c] = !0;
|
|
this.presses[c] = !0;
|
|
b.stopPropagation();
|
|
b.preventDefault();
|
|
return !1
|
|
},
|
|
touchEnd: function(b, c) {
|
|
this.delayedKeyup[c] = !0;
|
|
b.stopPropagation();
|
|
b.preventDefault();
|
|
return !1
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.impact").requires("dom.ready", "impact.loader", "impact.system", "impact.input", "impact.sound").defines(function() {
|
|
ig.main = function(b, c, e, d, g, f, m) {
|
|
ig.system = new ig.System(b, e, d, g, f || 1);
|
|
ig.input = new ig.Input;
|
|
ig.soundManager = new ig.SoundManager;
|
|
ig.music = new ig.Music;
|
|
ig.ready = !0;
|
|
(new(m || ig.Loader)(c, ig.resources)).load()
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.animation").requires("impact.timer", "impact.image").defines(function() {
|
|
ig.AnimationSheet = ig.Class.extend({
|
|
width: 8,
|
|
height: 8,
|
|
image: null,
|
|
init: function(b, c, e) {
|
|
this.width = c;
|
|
this.height = e;
|
|
this.image = new ig.Image(b)
|
|
}
|
|
});
|
|
ig.Animation = ig.Class.extend({
|
|
sheet: null,
|
|
timer: null,
|
|
sequence: [],
|
|
flip: {
|
|
x: !1,
|
|
y: !1
|
|
},
|
|
pivot: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
frame: 0,
|
|
tile: 0,
|
|
loopCount: 0,
|
|
alpha: 1,
|
|
angle: 0,
|
|
init: function(b, c, e, d) {
|
|
this.sheet = b;
|
|
this.pivot = {
|
|
x: b.width / 2,
|
|
y: b.height / 2
|
|
};
|
|
this.timer = new ig.Timer;
|
|
this.frameTime = c;
|
|
this.sequence = e;
|
|
this.stop = !!d;
|
|
this.tile = this.sequence[0]
|
|
},
|
|
rewind: function() {
|
|
this.timer.set();
|
|
this.frame = this.loopCount = 0;
|
|
this.tile = this.sequence[0];
|
|
return this
|
|
},
|
|
gotoFrame: function(b) {
|
|
this.timer.set(this.frameTime * -b - 1E-4);
|
|
this.update()
|
|
},
|
|
gotoRandomFrame: function() {
|
|
this.gotoFrame(Math.floor(Math.random() * this.sequence.length))
|
|
},
|
|
update: function() {
|
|
var b = Math.floor(this.timer.delta() / this.frameTime);
|
|
this.loopCount = Math.floor(b / this.sequence.length);
|
|
this.frame = this.stop && 0 < this.loopCount ? this.sequence.length - 1 : b % this.sequence.length;
|
|
this.tile = this.sequence[this.frame]
|
|
},
|
|
draw: function(b, c) {
|
|
var e = Math.max(this.sheet.width, this.sheet.height);
|
|
b > ig.system.width || c > ig.system.height || (0 > b + e || 0 > c + e) || (1 != this.alpha && (ig.system.context.globalAlpha = this.alpha), 0 == this.angle ? this.sheet.image.drawTile(b, c, this.tile, this.sheet.width, this.sheet.height, this.flip.x, this.flip.y) : (ig.system.context.save(), ig.system.context.translate(ig.system.getDrawPos(b + this.pivot.x), ig.system.getDrawPos(c + this.pivot.y)), ig.system.context.rotate(this.angle),
|
|
this.sheet.image.drawTile(-this.pivot.x, -this.pivot.y, this.tile, this.sheet.width, this.sheet.height, this.flip.x, this.flip.y), ig.system.context.restore()), 1 != this.alpha && (ig.system.context.globalAlpha = 1))
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.entity").requires("impact.animation", "impact.impact").defines(function() {
|
|
ig.Entity = ig.Class.extend({
|
|
id: 0,
|
|
settings: {},
|
|
size: {
|
|
x: 16,
|
|
y: 16
|
|
},
|
|
offset: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
pos: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
last: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
vel: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
accel: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
friction: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
maxVel: {
|
|
x: 100,
|
|
y: 100
|
|
},
|
|
zIndex: 0,
|
|
gravityFactor: 1,
|
|
standing: !1,
|
|
bounciness: 0,
|
|
minBounceVelocity: 40,
|
|
anims: {},
|
|
animSheet: null,
|
|
currentAnim: null,
|
|
health: 10,
|
|
type: 0,
|
|
checkAgainst: 0,
|
|
collides: 0,
|
|
_killed: !1,
|
|
slopeStanding: {
|
|
min: (44).toRad(),
|
|
max: (136).toRad()
|
|
},
|
|
init: function(b,
|
|
c, e) {
|
|
this.id = ++ig.Entity._lastId;
|
|
this.pos.x = this.last.x = b;
|
|
this.pos.y = this.last.y = c;
|
|
ig.merge(this, e)
|
|
},
|
|
reset: function(b, c, e) {
|
|
var d = this.constructor.prototype;
|
|
this.pos.x = b;
|
|
this.pos.y = c;
|
|
this.last.x = b;
|
|
this.last.y = c;
|
|
this.vel.x = d.vel.x;
|
|
this.vel.y = d.vel.y;
|
|
this.accel.x = d.accel.x;
|
|
this.accel.y = d.accel.y;
|
|
this.health = d.health;
|
|
this._killed = d._killed;
|
|
this.standing = d.standing;
|
|
this.type = d.type;
|
|
this.checkAgainst = d.checkAgainst;
|
|
this.collides = d.collides;
|
|
ig.merge(this, e)
|
|
},
|
|
addAnim: function(b, c, e, d) {
|
|
if (!this.animSheet) throw "No animSheet to add the animation " +
|
|
b + " to.";
|
|
c = new ig.Animation(this.animSheet, c, e, d);
|
|
this.anims[b] = c;
|
|
this.currentAnim || (this.currentAnim = c);
|
|
return c
|
|
},
|
|
update: function() {
|
|
this.last.x = this.pos.x;
|
|
this.last.y = this.pos.y;
|
|
this.vel.y += ig.game.gravity * ig.system.tick * this.gravityFactor;
|
|
this.vel.x = this.getNewVelocity(this.vel.x, this.accel.x, this.friction.x, this.maxVel.x);
|
|
this.vel.y = this.getNewVelocity(this.vel.y, this.accel.y, this.friction.y, this.maxVel.y);
|
|
var b = ig.game.collisionMap.trace(this.pos.x, this.pos.y, this.vel.x * ig.system.tick, this.vel.y *
|
|
ig.system.tick, this.size.x, this.size.y);
|
|
this.handleMovementTrace(b);
|
|
this.currentAnim && this.currentAnim.update()
|
|
},
|
|
getNewVelocity: function(b, c, e, d) {
|
|
return c ? (b + c * ig.system.tick).limit(-d, d) : e ? (c = e * ig.system.tick, 0 < b - c ? b - c : 0 > b + c ? b + c : 0) : b.limit(-d, d)
|
|
},
|
|
handleMovementTrace: function(b) {
|
|
this.standing = !1;
|
|
b.collision.y && (0 < this.bounciness && Math.abs(this.vel.y) > this.minBounceVelocity ? this.vel.y *= -this.bounciness : (0 < this.vel.y && (this.standing = !0), this.vel.y = 0));
|
|
b.collision.x && (this.vel.x = 0 < this.bounciness && Math.abs(this.vel.x) >
|
|
this.minBounceVelocity ? this.vel.x * -this.bounciness : 0);
|
|
if (b.collision.slope) {
|
|
var c = b.collision.slope;
|
|
if (0 < this.bounciness) {
|
|
var e = this.vel.x * c.nx + this.vel.y * c.ny;
|
|
this.vel.x = (this.vel.x - 2 * c.nx * e) * this.bounciness;
|
|
this.vel.y = (this.vel.y - 2 * c.ny * e) * this.bounciness
|
|
} else e = (this.vel.x * c.x + this.vel.y * c.y) / (c.x * c.x + c.y * c.y), this.vel.x = c.x * e, this.vel.y = c.y * e, c = Math.atan2(c.x, c.y), c > this.slopeStanding.min && c < this.slopeStanding.max && (this.standing = !0)
|
|
}
|
|
this.pos = b.pos
|
|
},
|
|
draw: function() {
|
|
this.currentAnim && this.currentAnim.draw(this.pos.x -
|
|
this.offset.x - ig.game._rscreen.x, this.pos.y - this.offset.y - ig.game._rscreen.y)
|
|
},
|
|
kill: function() {
|
|
ig.game.removeEntity(this)
|
|
},
|
|
receiveDamage: function(b) {
|
|
this.health -= b;
|
|
0 >= this.health && this.kill()
|
|
},
|
|
touches: function(b) {
|
|
return !(this.pos.x >= b.pos.x + b.size.x || this.pos.x + this.size.x <= b.pos.x || this.pos.y >= b.pos.y + b.size.y || this.pos.y + this.size.y <= b.pos.y)
|
|
},
|
|
distanceTo: function(b) {
|
|
var c = this.pos.x + this.size.x / 2 - (b.pos.x + b.size.x / 2);
|
|
b = this.pos.y + this.size.y / 2 - (b.pos.y + b.size.y / 2);
|
|
return Math.sqrt(c * c + b * b)
|
|
},
|
|
angleTo: function(b) {
|
|
return Math.atan2(b.pos.y +
|
|
b.size.y / 2 - (this.pos.y + this.size.y / 2), b.pos.x + b.size.x / 2 - (this.pos.x + this.size.x / 2))
|
|
},
|
|
check: function() {},
|
|
collideWith: function() {},
|
|
ready: function() {},
|
|
erase: function() {}
|
|
});
|
|
ig.Entity._lastId = 0;
|
|
ig.Entity.COLLIDES = {
|
|
NEVER: 0,
|
|
LITE: 1,
|
|
PASSIVE: 2,
|
|
ACTIVE: 4,
|
|
FIXED: 8
|
|
};
|
|
ig.Entity.TYPE = {
|
|
NONE: 0,
|
|
A: 1,
|
|
B: 2,
|
|
BOTH: 3
|
|
};
|
|
ig.Entity.checkPair = function(b, c) {
|
|
b.checkAgainst & c.type && b.check(c);
|
|
c.checkAgainst & b.type && c.check(b);
|
|
b.collides && c.collides && b.collides + c.collides > ig.Entity.COLLIDES.ACTIVE && ig.Entity.solveCollision(b, c)
|
|
};
|
|
ig.Entity.solveCollision =
|
|
function(b, c) {
|
|
var e = null;
|
|
if (b.collides == ig.Entity.COLLIDES.LITE || c.collides == ig.Entity.COLLIDES.FIXED) e = b;
|
|
else if (c.collides == ig.Entity.COLLIDES.LITE || b.collides == ig.Entity.COLLIDES.FIXED) e = c;
|
|
b.last.x + b.size.x > c.last.x && b.last.x < c.last.x + c.size.x ? (b.last.y < c.last.y ? ig.Entity.seperateOnYAxis(b, c, e) : ig.Entity.seperateOnYAxis(c, b, e), b.collideWith(c, "y"), c.collideWith(b, "y")) : b.last.y + b.size.y > c.last.y && b.last.y < c.last.y + c.size.y && (b.last.x < c.last.x ? ig.Entity.seperateOnXAxis(b, c, e) : ig.Entity.seperateOnXAxis(c,
|
|
b, e), b.collideWith(c, "x"), c.collideWith(b, "x"))
|
|
};
|
|
ig.Entity.seperateOnXAxis = function(b, c, e) {
|
|
var d = b.pos.x + b.size.x - c.pos.x;
|
|
e ? (e.vel.x = -e.vel.x * e.bounciness + (b === e ? c : b).vel.x, c = ig.game.collisionMap.trace(e.pos.x, e.pos.y, e == b ? -d : d, 0, e.size.x, e.size.y), e.pos.x = c.pos.x) : (e = (b.vel.x - c.vel.x) / 2, b.vel.x = -e, c.vel.x = e, e = ig.game.collisionMap.trace(b.pos.x, b.pos.y, -d / 2, 0, b.size.x, b.size.y), b.pos.x = Math.floor(e.pos.x), b = ig.game.collisionMap.trace(c.pos.x, c.pos.y, d / 2, 0, c.size.x, c.size.y), c.pos.x = Math.ceil(b.pos.x))
|
|
};
|
|
ig.Entity.seperateOnYAxis = function(b, c, e) {
|
|
var d = b.pos.y + b.size.y - c.pos.y;
|
|
if (e) {
|
|
c = b === e ? c : b;
|
|
e.vel.y = -e.vel.y * e.bounciness + c.vel.y;
|
|
var g = 0;
|
|
e == b && Math.abs(e.vel.y - c.vel.y) < e.minBounceVelocity && (e.standing = !0, g = c.vel.x * ig.system.tick);
|
|
b = ig.game.collisionMap.trace(e.pos.x, e.pos.y, g, e == b ? -d : d, e.size.x, e.size.y);
|
|
e.pos.y = b.pos.y;
|
|
e.pos.x = b.pos.x
|
|
} else ig.game.gravity && (c.standing || 0 < b.vel.y) ? (e = ig.game.collisionMap.trace(b.pos.x, b.pos.y, 0, -(b.pos.y + b.size.y - c.pos.y), b.size.x, b.size.y), b.pos.y = e.pos.y, 0 < b.bounciness &&
|
|
b.vel.y > b.minBounceVelocity ? b.vel.y *= -b.bounciness : (b.standing = !0, b.vel.y = 0)) : (e = (b.vel.y - c.vel.y) / 2, b.vel.y = -e, c.vel.y = e, g = c.vel.x * ig.system.tick, e = ig.game.collisionMap.trace(b.pos.x, b.pos.y, g, -d / 2, b.size.x, b.size.y), b.pos.y = e.pos.y, b = ig.game.collisionMap.trace(c.pos.x, c.pos.y, 0, d / 2, c.size.x, c.size.y), c.pos.y = b.pos.y)
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.map").defines(function() {
|
|
ig.Map = ig.Class.extend({
|
|
tilesize: 8,
|
|
width: 1,
|
|
height: 1,
|
|
data: [
|
|
[]
|
|
],
|
|
name: null,
|
|
init: function(b, c) {
|
|
this.tilesize = b;
|
|
this.data = c;
|
|
this.height = c.length;
|
|
this.width = c[0].length;
|
|
this.pxWidth = this.width * this.tilesize;
|
|
this.pxHeight = this.height * this.tilesize
|
|
},
|
|
getTile: function(b, c) {
|
|
var e = Math.floor(b / this.tilesize),
|
|
d = Math.floor(c / this.tilesize);
|
|
return 0 <= e && e < this.width && 0 <= d && d < this.height ? this.data[d][e] : 0
|
|
},
|
|
setTile: function(b, c, e) {
|
|
b = Math.floor(b / this.tilesize);
|
|
c = Math.floor(c /
|
|
this.tilesize);
|
|
0 <= b && b < this.width && 0 <= c && c < this.height && (this.data[c][b] = e)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.collision-map").requires("impact.map").defines(function() {
|
|
ig.CollisionMap = ig.Map.extend({
|
|
lastSlope: 1,
|
|
tiledef: null,
|
|
init: function(b, c, g) {
|
|
this.parent(b, c);
|
|
this.tiledef = g || ig.CollisionMap.defaultTileDef;
|
|
for (var f in this.tiledef) f | 0 > this.lastSlope && (this.lastSlope = f | 0)
|
|
},
|
|
trace: function(b, c, g, f, m, l) {
|
|
var j = {
|
|
collision: {
|
|
x: !1,
|
|
y: !1,
|
|
slope: !1
|
|
},
|
|
pos: {
|
|
x: b,
|
|
y: c
|
|
},
|
|
tile: {
|
|
x: 0,
|
|
y: 0
|
|
}
|
|
},
|
|
q = Math.ceil(Math.max(Math.abs(g), Math.abs(f)) / this.tilesize);
|
|
if (1 < q)
|
|
for (var n = g / q, r = f / q, s = 0; s < q && (n || r) && !(this._traceStep(j,
|
|
b, c, n, r, m, l, g, f, s), b = j.pos.x, c = j.pos.y, j.collision.x && (g = n = 0), j.collision.y && (f = r = 0), j.collision.slope); s++);
|
|
else this._traceStep(j, b, c, g, f, m, l, g, f, 0);
|
|
return j
|
|
},
|
|
_traceStep: function(b, c, g, f, m, l, j, q, n, r) {
|
|
b.pos.x += f;
|
|
b.pos.y += m;
|
|
var s = 0;
|
|
if (f) {
|
|
var t = 0 < f ? l : 0,
|
|
u = 0 > f ? this.tilesize : 0,
|
|
s = Math.max(Math.floor(g / this.tilesize), 0),
|
|
y = Math.min(Math.ceil((g + j) / this.tilesize), this.height);
|
|
f = Math.floor((b.pos.x + t) / this.tilesize);
|
|
var z = Math.floor((c + t) / this.tilesize);
|
|
if (0 < r || f == z || 0 > z || z >= this.width) z = -1;
|
|
if (0 <= f && f < this.width)
|
|
for (var x =
|
|
s; x < y && !(-1 != z && (s = this.data[x][z], 1 < s && s <= this.lastSlope && this._checkTileDef(b, s, c, g, q, n, l, j, z, x))); x++)
|
|
if (s = this.data[x][f], 1 == s || s > this.lastSlope || 1 < s && this._checkTileDef(b, s, c, g, q, n, l, j, f, x)) {
|
|
if (1 < s && s <= this.lastSlope && b.collision.slope) break;
|
|
b.collision.x = !0;
|
|
b.tile.x = s;
|
|
c = b.pos.x = f * this.tilesize - t + u;
|
|
q = 0;
|
|
break
|
|
}
|
|
}
|
|
if (m) {
|
|
t = 0 < m ? j : 0;
|
|
m = 0 > m ? this.tilesize : 0;
|
|
s = Math.max(Math.floor(b.pos.x / this.tilesize), 0);
|
|
u = Math.min(Math.ceil((b.pos.x + l) / this.tilesize), this.width);
|
|
x = Math.floor((b.pos.y + t) / this.tilesize);
|
|
y = Math.floor((g + t) / this.tilesize);
|
|
if (0 < r || x == y || 0 > y || y >= this.height) y = -1;
|
|
if (0 <= x && x < this.height)
|
|
for (f = s; f < u && !(-1 != y && (s = this.data[y][f], 1 < s && s <= this.lastSlope && this._checkTileDef(b, s, c, g, q, n, l, j, f, y))); f++)
|
|
if (s = this.data[x][f], 1 == s || s > this.lastSlope || 1 < s && this._checkTileDef(b, s, c, g, q, n, l, j, f, x)) {
|
|
if (1 < s && s <= this.lastSlope && b.collision.slope) break;
|
|
b.collision.y = !0;
|
|
b.tile.y = s;
|
|
b.pos.y = x * this.tilesize - t + m;
|
|
break
|
|
}
|
|
}
|
|
},
|
|
_checkTileDef: function(b, c, g, f, m, l, j, q, n, r) {
|
|
var s = this.tiledef[c];
|
|
if (!s) return !1;
|
|
c = (s[2] -
|
|
s[0]) * this.tilesize;
|
|
var t = (s[3] - s[1]) * this.tilesize,
|
|
u = s[4];
|
|
j = g + m + (0 > t ? j : 0) - (n + s[0]) * this.tilesize;
|
|
q = f + l + (0 < c ? q : 0) - (r + s[1]) * this.tilesize;
|
|
if (0 < c * q - t * j) {
|
|
if (0 > m * -t + l * c) return u;
|
|
n = Math.sqrt(c * c + t * t);
|
|
r = t / n;
|
|
n = -c / n;
|
|
var y = j * r + q * n,
|
|
s = r * y,
|
|
y = n * y;
|
|
if (s * s + y * y >= m * m + l * l) return u || 0.5 > c * (q - l) - t * (j - m);
|
|
b.pos.x = g + m - s;
|
|
b.pos.y = f + l - y;
|
|
b.collision.slope = {
|
|
x: c,
|
|
y: t,
|
|
nx: r,
|
|
ny: n
|
|
};
|
|
return !0
|
|
}
|
|
return !1
|
|
}
|
|
});
|
|
var b = 1 / 3,
|
|
c = 2 / 3;
|
|
ig.CollisionMap.defaultTileDef = {
|
|
5: [0, 1, 1, c, !0],
|
|
6: [0, c, 1, b, !0],
|
|
7: [0, b, 1, 0, !0],
|
|
3: [0, 1, 1, 0.5, !0],
|
|
4: [0, 0.5, 1, 0, !0],
|
|
2: [0,
|
|
1, 1, 0, !0
|
|
],
|
|
10: [0.5, 1, 1, 0, !0],
|
|
21: [0, 1, 0.5, 0, !0],
|
|
32: [c, 1, 1, 0, !0],
|
|
43: [b, 1, c, 0, !0],
|
|
54: [0, 1, b, 0, !0],
|
|
27: [0, 0, 1, b, !0],
|
|
28: [0, b, 1, c, !0],
|
|
29: [0, c, 1, 1, !0],
|
|
25: [0, 0, 1, 0.5, !0],
|
|
26: [0, 0.5, 1, 1, !0],
|
|
24: [0, 0, 1, 1, !0],
|
|
11: [0, 0, 0.5, 1, !0],
|
|
22: [0.5, 0, 1, 1, !0],
|
|
33: [0, 0, b, 1, !0],
|
|
44: [b, 0, c, 1, !0],
|
|
55: [c, 0, 1, 1, !0],
|
|
16: [1, b, 0, 0, !0],
|
|
17: [1, c, 0, b, !0],
|
|
18: [1, 1, 0, c, !0],
|
|
14: [1, 0.5, 0, 0, !0],
|
|
15: [1, 1, 0, 0.5, !0],
|
|
13: [1, 1, 0, 0, !0],
|
|
8: [0.5, 1, 0, 0, !0],
|
|
19: [1, 1, 0.5, 0, !0],
|
|
30: [b, 1, 0, 0, !0],
|
|
41: [c, 1, b, 0, !0],
|
|
52: [1, 1, c, 0, !0],
|
|
38: [1, c, 0, 1, !0],
|
|
39: [1, b, 0, c, !0],
|
|
40: [1, 0,
|
|
0, b, !0
|
|
],
|
|
36: [1, 0.5, 0, 1, !0],
|
|
37: [1, 0, 0, 0.5, !0],
|
|
35: [1, 0, 0, 1, !0],
|
|
9: [1, 0, 0.5, 1, !0],
|
|
20: [0.5, 0, 0, 1, !0],
|
|
31: [1, 0, c, 1, !0],
|
|
42: [c, 0, b, 1, !0],
|
|
53: [b, 0, 0, 1, !0],
|
|
12: [0, 0, 1, 0, !1],
|
|
23: [1, 1, 0, 1, !1],
|
|
34: [1, 0, 1, 1, !1],
|
|
45: [0, 1, 0, 0, !1]
|
|
};
|
|
ig.CollisionMap.staticNoCollision = {
|
|
trace: function(b, c, g, f) {
|
|
return {
|
|
collision: {
|
|
x: !1,
|
|
y: !1,
|
|
slope: !1
|
|
},
|
|
pos: {
|
|
x: b + g,
|
|
y: c + f
|
|
},
|
|
tile: {
|
|
x: 0,
|
|
y: 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.background-map").requires("impact.map", "impact.image").defines(function() {
|
|
ig.BackgroundMap = ig.Map.extend({
|
|
tiles: null,
|
|
scroll: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
distance: 1,
|
|
repeat: !1,
|
|
tilesetName: "",
|
|
foreground: !1,
|
|
enabled: !0,
|
|
preRender: !1,
|
|
preRenderedChunks: null,
|
|
chunkSize: 512,
|
|
debugChunks: !1,
|
|
anims: {},
|
|
init: function(b, c, e) {
|
|
this.parent(b, c);
|
|
this.setTileset(e)
|
|
},
|
|
setTileset: function(b) {
|
|
this.tilesetName = b instanceof ig.Image ? b.path : b;
|
|
this.tiles = new ig.Image(this.tilesetName);
|
|
this.preRenderedChunks = null
|
|
},
|
|
setScreenPos: function(b,
|
|
c) {
|
|
this.scroll.x = b / this.distance;
|
|
this.scroll.y = c / this.distance
|
|
},
|
|
preRenderMapToChunks: function() {
|
|
var b = this.width * this.tilesize * ig.system.scale,
|
|
c = this.height * this.tilesize * ig.system.scale;
|
|
this.chunkSize = Math.min(Math.max(b, c), this.chunkSize);
|
|
var e = Math.ceil(b / this.chunkSize),
|
|
d = Math.ceil(c / this.chunkSize);
|
|
this.preRenderedChunks = [];
|
|
for (var g = 0; g < d; g++) {
|
|
this.preRenderedChunks[g] = [];
|
|
for (var f = 0; f < e; f++) this.preRenderedChunks[g][f] = this.preRenderChunk(f, g, f == e - 1 ? b - f * this.chunkSize : this.chunkSize, g == d - 1 ?
|
|
c - g * this.chunkSize : this.chunkSize)
|
|
}
|
|
},
|
|
preRenderChunk: function(b, c, e, d) {
|
|
var g = e / this.tilesize / ig.system.scale + 1,
|
|
f = d / this.tilesize / ig.system.scale + 1,
|
|
m = b * this.chunkSize / ig.system.scale % this.tilesize,
|
|
l = c * this.chunkSize / ig.system.scale % this.tilesize;
|
|
b = Math.floor(b * this.chunkSize / this.tilesize / ig.system.scale);
|
|
c = Math.floor(c * this.chunkSize / this.tilesize / ig.system.scale);
|
|
var j = ig.$new("canvas");
|
|
j.width = e;
|
|
j.height = d;
|
|
j.retinaResolutionEnabled = !1;
|
|
d = j.getContext("2d");
|
|
ig.System.scaleMode(j, d);
|
|
e = ig.system.context;
|
|
ig.system.context = d;
|
|
for (d = 0; d < g; d++)
|
|
for (var q = 0; q < f; q++)
|
|
if (d + b < this.width && q + c < this.height) {
|
|
var n = this.data[q + c][d + b];
|
|
n && this.tiles.drawTile(d * this.tilesize - m, q * this.tilesize - l, n - 1, this.tilesize)
|
|
} ig.system.context = e;
|
|
return j
|
|
},
|
|
draw: function() {
|
|
this.tiles.loaded && this.enabled && (this.preRender ? this.drawPreRendered() : this.drawTiled())
|
|
},
|
|
drawPreRendered: function() {
|
|
this.preRenderedChunks || this.preRenderMapToChunks();
|
|
var b = ig.system.getDrawPos(this.scroll.x),
|
|
c = ig.system.getDrawPos(this.scroll.y);
|
|
if (this.repeat) var e =
|
|
this.width * this.tilesize * ig.system.scale,
|
|
b = (b % e + e) % e,
|
|
e = this.height * this.tilesize * ig.system.scale,
|
|
c = (c % e + e) % e;
|
|
var e = Math.max(Math.floor(b / this.chunkSize), 0),
|
|
d = Math.max(Math.floor(c / this.chunkSize), 0),
|
|
g = Math.ceil((b + ig.system.realWidth) / this.chunkSize),
|
|
f = Math.ceil((c + ig.system.realHeight) / this.chunkSize),
|
|
m = this.preRenderedChunks[0].length,
|
|
l = this.preRenderedChunks.length;
|
|
this.repeat || (g = Math.min(g, m), f = Math.min(f, l));
|
|
for (var j = 0; d < f; d++) {
|
|
for (var q = 0, n = e; n < g; n++) {
|
|
var r = this.preRenderedChunks[d % l][n % m],
|
|
s = -b + n * this.chunkSize - q,
|
|
t = -c + d * this.chunkSize - j;
|
|
ig.system.context.drawImage(r, s, t);
|
|
ig.Image.drawCount++;
|
|
this.debugChunks && (ig.system.context.strokeStyle = "#f0f", ig.system.context.strokeRect(s, t, this.chunkSize, this.chunkSize));
|
|
this.repeat && r.width < this.chunkSize && s + r.width < ig.system.realWidth && (q += this.chunkSize - r.width, g++)
|
|
}
|
|
this.repeat && r.height < this.chunkSize && t + r.height < ig.system.realHeight && (j += this.chunkSize - r.height, f++)
|
|
}
|
|
},
|
|
drawTiled: function() {
|
|
for (var b = 0, c = null, e = (this.scroll.x / this.tilesize).toInt(),
|
|
d = (this.scroll.y / this.tilesize).toInt(), g = this.scroll.x % this.tilesize, f = this.scroll.y % this.tilesize, m = -g - this.tilesize, g = ig.system.width + this.tilesize - g, l = ig.system.height + this.tilesize - f, j = -1, f = -f - this.tilesize; f < l; j++, f += this.tilesize) {
|
|
var q = j + d;
|
|
if (q >= this.height || 0 > q) {
|
|
if (!this.repeat) continue;
|
|
q = (q % this.height + this.height) % this.height
|
|
}
|
|
for (var n = -1, r = m; r < g; n++, r += this.tilesize) {
|
|
b = n + e;
|
|
if (b >= this.width || 0 > b) {
|
|
if (!this.repeat) continue;
|
|
b = (b % this.width + this.width) % this.width
|
|
}
|
|
if (b = this.data[q][b])(c = this.anims[b -
|
|
1]) ? c.draw(r, f) : this.tiles.drawTile(r, f, b - 1, this.tilesize)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("impact.game").requires("impact.impact", "impact.entity", "impact.collision-map", "impact.background-map").defines(function() {
|
|
ig.Game = ig.Class.extend({
|
|
clearColor: "#000000",
|
|
gravity: 0,
|
|
screen: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
_rscreen: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
entities: [],
|
|
namedEntities: {},
|
|
collisionMap: ig.CollisionMap.staticNoCollision,
|
|
backgroundMaps: [],
|
|
backgroundAnims: {},
|
|
autoSort: !1,
|
|
sortBy: null,
|
|
cellSize: 64,
|
|
_deferredKill: [],
|
|
_levelToLoad: null,
|
|
_doSortEntities: !1,
|
|
staticInstantiate: function() {
|
|
this.sortBy = this.sortBy || ig.Game.SORT.Z_INDEX;
|
|
ig.game = this;
|
|
return null
|
|
},
|
|
loadLevel: function(b) {
|
|
this.screen = {
|
|
x: 0,
|
|
y: 0
|
|
};
|
|
this.entities = [];
|
|
this.namedEntities = {};
|
|
for (var c = 0; c < b.entities.length; c++) {
|
|
var e = b.entities[c];
|
|
this.spawnEntity(e.type, e.x, e.y, e.settings)
|
|
}
|
|
this.sortEntities();
|
|
this.collisionMap = ig.CollisionMap.staticNoCollision;
|
|
this.backgroundMaps = [];
|
|
for (c = 0; c < b.layer.length; c++)
|
|
if (e = b.layer[c], "collision" == e.name) this.collisionMap = new ig.CollisionMap(e.tilesize, e.data);
|
|
else {
|
|
var d = new ig.BackgroundMap(e.tilesize, e.data, e.tilesetName);
|
|
d.anims = this.backgroundAnims[e.tilesetName] || {};
|
|
d.repeat = e.repeat;
|
|
d.distance = e.distance;
|
|
d.foreground = !!e.foreground;
|
|
d.preRender = !!e.preRender;
|
|
d.name = e.name;
|
|
this.backgroundMaps.push(d)
|
|
} for (c = 0; c < this.entities.length; c++) this.entities[c].ready()
|
|
},
|
|
loadLevelDeferred: function(b) {
|
|
this._levelToLoad = b
|
|
},
|
|
getMapByName: function(b) {
|
|
if ("collision" == b) return this.collisionMap;
|
|
for (var c = 0; c < this.backgroundMaps.length; c++)
|
|
if (this.backgroundMaps[c].name == b) return this.backgroundMaps[c];
|
|
return null
|
|
},
|
|
getEntityByName: function(b) {
|
|
return this.namedEntities[b]
|
|
},
|
|
getEntitiesByType: function(b) {
|
|
b =
|
|
"string" === typeof b ? ig.global[b] : b;
|
|
for (var c = [], e = 0; e < this.entities.length; e++) {
|
|
var d = this.entities[e];
|
|
d instanceof b && !d._killed && c.push(d)
|
|
}
|
|
return c
|
|
},
|
|
spawnEntity: function(b, c, e, d) {
|
|
var g = "string" === typeof b ? ig.global[b] : b;
|
|
if (!g) throw "Can't spawn entity of type " + b;
|
|
b = new g(c, e, d || {});
|
|
this.entities.push(b);
|
|
b.name && (this.namedEntities[b.name] = b);
|
|
return b
|
|
},
|
|
sortEntities: function() {
|
|
this.entities.sort(this.sortBy)
|
|
},
|
|
sortEntitiesDeferred: function() {
|
|
this._doSortEntities = !0
|
|
},
|
|
removeEntity: function(b) {
|
|
b.name &&
|
|
delete this.namedEntities[b.name];
|
|
b._killed = !0;
|
|
b.type = ig.Entity.TYPE.NONE;
|
|
b.checkAgainst = ig.Entity.TYPE.NONE;
|
|
b.collides = ig.Entity.COLLIDES.NEVER;
|
|
this._deferredKill.push(b)
|
|
},
|
|
run: function() {
|
|
this.update();
|
|
this.draw()
|
|
},
|
|
update: function() {
|
|
this._levelToLoad && (this.loadLevel(this._levelToLoad), this._levelToLoad = null);
|
|
this.updateEntities();
|
|
this.checkEntities();
|
|
for (var b = 0; b < this._deferredKill.length; b++) this._deferredKill[b].erase(), this.entities.erase(this._deferredKill[b]);
|
|
this._deferredKill = [];
|
|
if (this._doSortEntities ||
|
|
this.autoSort) this.sortEntities(), this._doSortEntities = !1;
|
|
for (var c in this.backgroundAnims) {
|
|
var b = this.backgroundAnims[c],
|
|
e;
|
|
for (e in b) b[e].update()
|
|
}
|
|
},
|
|
updateEntities: function() {
|
|
for (var b = 0; b < this.entities.length; b++) {
|
|
var c = this.entities[b];
|
|
c._killed || c.update()
|
|
}
|
|
},
|
|
draw: function() {
|
|
this.clearColor && ig.system.clear(this.clearColor);
|
|
this._rscreen.x = ig.system.getDrawPos(this.screen.x) / ig.system.scale;
|
|
this._rscreen.y = ig.system.getDrawPos(this.screen.y) / ig.system.scale;
|
|
var b;
|
|
for (b = 0; b < this.backgroundMaps.length; b++) {
|
|
var c =
|
|
this.backgroundMaps[b];
|
|
if (c.foreground) break;
|
|
c.setScreenPos(this.screen.x, this.screen.y);
|
|
c.draw()
|
|
}
|
|
this.drawEntities();
|
|
for (b; b < this.backgroundMaps.length; b++) c = this.backgroundMaps[b], c.setScreenPos(this.screen.x, this.screen.y), c.draw()
|
|
},
|
|
drawEntities: function() {
|
|
for (var b = 0; b < this.entities.length; b++) this.entities[b].draw()
|
|
},
|
|
checkEntities: function() {
|
|
for (var b = {}, c = 0; c < this.entities.length; c++) {
|
|
var e = this.entities[c];
|
|
if (!(e.type == ig.Entity.TYPE.NONE && e.checkAgainst == ig.Entity.TYPE.NONE && e.collides == ig.Entity.COLLIDES.NEVER))
|
|
for (var d = {}, g = Math.floor(e.pos.y / this.cellSize), f = Math.floor((e.pos.x + e.size.x) / this.cellSize) + 1, m = Math.floor((e.pos.y + e.size.y) / this.cellSize) + 1, l = Math.floor(e.pos.x / this.cellSize); l < f; l++)
|
|
for (var j = g; j < m; j++)
|
|
if (b[l])
|
|
if (b[l][j]) {
|
|
for (var q = b[l][j], n = 0; n < q.length; n++) e.touches(q[n]) && !d[q[n].id] && (d[q[n].id] = !0, ig.Entity.checkPair(e, q[n]));
|
|
q.push(e)
|
|
} else b[l][j] = [e];
|
|
else b[l] = {}, b[l][j] = [e]
|
|
}
|
|
}
|
|
});
|
|
ig.Game.SORT = {
|
|
Z_INDEX: function(b, c) {
|
|
return b.zIndex - c.zIndex
|
|
},
|
|
POS_X: function(b, c) {
|
|
return b.pos.x + b.size.x - (c.pos.x +
|
|
c.size.x)
|
|
},
|
|
POS_Y: function(b, c) {
|
|
return b.pos.y + b.size.y - (c.pos.y + c.size.y)
|
|
}
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.patches.user-agent-patch").defines(function() {
|
|
ig.ua.touchDevice = "ontouchstart" in window || window.navigator.msMaxTouchPoints || window.navigator.maxTouchPoints;
|
|
ig.ua.is_mac = "MacIntel" === navigator.platform;
|
|
ig.ua.iOS = ig.ua.touchDevice && ig.ua.is_mac || ig.ua.iOS;
|
|
ig.ua.mobile = ig.ua.iOS || ig.ua.mobile
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.patches.webkit-image-smoothing-patch").defines(function() {
|
|
ig.System && (ig.System.SCALE = {
|
|
CRISP: function(b, c) {
|
|
c.imageSmoothingEnabled = c.msImageSmoothingEnabled = c.mozImageSmoothingEnabled = c.oImageSmoothingEnabled = !1;
|
|
b.style.imageRendering = "-moz-crisp-edges";
|
|
b.style.imageRendering = "-o-crisp-edges";
|
|
b.style.imageRendering = "-webkit-optimize-contrast";
|
|
b.style.imageRendering = "crisp-edges";
|
|
b.style.msInterpolationMode = "nearest-neighbor"
|
|
},
|
|
SMOOTH: function(b, c) {
|
|
c.imageSmoothingEnabled = c.msImageSmoothingEnabled =
|
|
c.mozImageSmoothingEnabled = c.oImageSmoothingEnabled = !0;
|
|
b.style.imageRendering = "";
|
|
b.style.msInterpolationMode = ""
|
|
}
|
|
}, ig.System.scaleMode = ig.System.SCALE.SMOOTH)
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.patches.windowfocus-onMouseDown-patch").requires("impact.input").defines(function() {
|
|
var b = !1;
|
|
try {
|
|
b = window.self !== window.top, !1 === b && (b = 0 < window.frames.length)
|
|
} catch (c) {
|
|
b = !0
|
|
}
|
|
ig.Input.inject({
|
|
keydown: function(c) {
|
|
var d = c.target.tagName;
|
|
if (!("INPUT" == d || "TEXTAREA" == d))
|
|
if (d = "keydown" == c.type ? c.keyCode : 2 == c.button ? ig.KEY.MOUSE2 : ig.KEY.MOUSE1, b && 0 > d && window.focus(), ("touchstart" == c.type || "mousedown" == c.type) && this.mousemove(c), d = this.bindings[d]) this.actions[d] = !0, this.locks[d] || (this.presses[d] = !0, this.locks[d] = !0), c.stopPropagation(), c.preventDefault()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.patches.input-patch").requires("impact.input").defines(function() {
|
|
ig.Input.inject({
|
|
mousemove: function(b) {
|
|
var c = ig.system.scale * (ig.system.realWidth / ig.system.realWidth),
|
|
e = {
|
|
left: 0,
|
|
top: 0
|
|
};
|
|
ig.system.canvas.getBoundingClientRect && (e = ig.system.canvas.getBoundingClientRect());
|
|
b = b.touches ? b.touches[0] : b;
|
|
this.mouse.x = (b.clientX - e.left) / c;
|
|
this.mouse.y = (b.clientY - e.top) / c
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.data.vector").defines(function() {
|
|
Vector2 = function(b, c) {
|
|
this.x = b || 0;
|
|
this.y = c || 0
|
|
};
|
|
Vector2.prototype = {
|
|
valType: "number",
|
|
neg: function() {
|
|
this.x = -this.x;
|
|
this.y = -this.y;
|
|
return this
|
|
},
|
|
row: function(b) {
|
|
typeof b === this.valType && (this.y = b);
|
|
return this.y
|
|
},
|
|
col: function(b) {
|
|
typeof b === this.valType && (this.x = b);
|
|
return this.x
|
|
},
|
|
add: function(b) {
|
|
b instanceof Vector2 ? (this.x += b.x, this.y += b.y) : (this.x += b, this.y += b);
|
|
return this
|
|
},
|
|
sub: function(b) {
|
|
b instanceof Vector2 ? (this.x -= b.x, this.y -= b.y) : (this.x -= b, this.y -=
|
|
b);
|
|
return this
|
|
},
|
|
mul: function(b) {
|
|
b instanceof Vector2 ? (this.x *= b.x, this.y *= b.y) : (this.x *= b, this.y *= b);
|
|
return this
|
|
},
|
|
div: function(b) {
|
|
b instanceof Vector2 ? (0 != b.x && (this.x /= b.x), 0 != b.y && (this.y /= b.y)) : 0 != b && (this.x /= b, this.y /= b);
|
|
return this
|
|
},
|
|
equals: function(b) {
|
|
return this.x == b.x && this.y == b.y
|
|
},
|
|
dot: function(b) {
|
|
return this.x * b.x + this.y * b.y
|
|
},
|
|
cross: function(b) {
|
|
return this.x * b.y - this.y * b.x
|
|
},
|
|
length: function() {
|
|
return Math.sqrt(this.dot(this))
|
|
},
|
|
norm: function() {
|
|
return this.divide(this.length())
|
|
},
|
|
min: function() {
|
|
return Math.min(this.x,
|
|
this.y)
|
|
},
|
|
max: function() {
|
|
return Math.max(this.x, this.y)
|
|
},
|
|
toAngles: function() {
|
|
return -Math.atan2(-this.y, this.x)
|
|
},
|
|
angleTo: function(b) {
|
|
return Math.acos(this.dot(b) / (this.length() * b.length()))
|
|
},
|
|
toArray: function(b) {
|
|
return [this.x, this.y].slice(0, b || 2)
|
|
},
|
|
clone: function() {
|
|
return new Vector2(this.x, this.y)
|
|
},
|
|
set: function(b, c) {
|
|
this.x = b;
|
|
this.y = c;
|
|
return this
|
|
},
|
|
unit: function() {
|
|
var b = this.length();
|
|
if (0 < b) return new Vector2(this.x / b, this.y / b);
|
|
throw "Divide by 0 error in unitVector function of vector:" + this;
|
|
},
|
|
turnRight: function() {
|
|
var b =
|
|
this.x;
|
|
this.x = -this.y;
|
|
this.y = b;
|
|
return this
|
|
},
|
|
turnLeft: function() {
|
|
var b = this.x;
|
|
this.x = this.y;
|
|
this.y = -b;
|
|
return this
|
|
},
|
|
rotate: function(b) {
|
|
var c = this.clone();
|
|
this.x = c.x * Math.cos(b) - c.y * Math.sin(b);
|
|
this.y = c.x * Math.sin(b) + c.y * Math.cos(b);
|
|
return this
|
|
}
|
|
};
|
|
Vector2.negative = function(b) {
|
|
return new Vector2(-b.x, -b.y)
|
|
};
|
|
Vector2.add = function(b, c) {
|
|
return c instanceof Vector2 ? new Vector2(b.x + c.x, b.y + c.y) : new Vector2(b.x + v, b.y + v)
|
|
};
|
|
Vector2.subtract = function(b, c) {
|
|
return c instanceof Vector2 ? new Vector2(b.x - c.x, b.y - c.y) :
|
|
new Vector2(b.x - v, b.y - v)
|
|
};
|
|
Vector2.multiply = function(b, c) {
|
|
return c instanceof Vector2 ? new Vector2(b.x * c.x, b.y * c.y) : new Vector2(b.x * v, b.y * v)
|
|
};
|
|
Vector2.divide = function(b, c) {
|
|
return c instanceof Vector2 ? new Vector2(b.x / c.x, b.y / c.y) : new Vector2(b.x / v, b.y / v)
|
|
};
|
|
Vector2.equals = function(b, c) {
|
|
return b.x == c.x && b.y == c.y
|
|
};
|
|
Vector2.dot = function(b, c) {
|
|
return b.x * c.x + b.y * c.y
|
|
};
|
|
Vector2.cross = function(b, c) {
|
|
return b.x * c.y - b.y * c.x
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.handlers.dom-handler").defines(function() {
|
|
ig.DomHandler = ig.Class.extend({
|
|
JQUERYAVAILABLE: !1,
|
|
init: function() {
|
|
this.JQUERYAVAILABLE = this._jqueryAvailable()
|
|
},
|
|
_jqueryAvailable: function() {
|
|
return "undefined" !== typeof jQuery
|
|
},
|
|
addEvent: function(b, c, e, d) {
|
|
if (this.JQUERYAVAILABLE) b.on(c, e);
|
|
else b.addEventListener(c, e, d)
|
|
},
|
|
create: function(b) {
|
|
return this.JQUERYAVAILABLE ? $("<" + b + ">") : ig.$new(b)
|
|
},
|
|
getElementByClass: function(b) {
|
|
return this.JQUERYAVAILABLE ? $("." + b) : document.getElementsByClassName(b)
|
|
},
|
|
getElementById: function(b) {
|
|
return this.JQUERYAVAILABLE ? 0 < $(b).length ? $(b) : null : ig.$(b)
|
|
},
|
|
appendChild: function(b, c) {
|
|
this.JQUERYAVAILABLE ? b.append(c) : b.appendChild(c)
|
|
},
|
|
appendToBody: function(b) {
|
|
this.JQUERYAVAILABLE ? $("body").append(b) : document.body.appendChild(b)
|
|
},
|
|
resize: function(b, c, e) {
|
|
if (this.JQUERYAVAILABLE) b.width(c.toFixed(2)), b.height(e.toFixed(2));
|
|
else {
|
|
var d = b.style.visibility;
|
|
c = "width:" + c.toFixed(2) + "px; height:" + e.toFixed(2) + "px;";
|
|
this.attr(b, "style", c);
|
|
b.style.visibility = d
|
|
}
|
|
},
|
|
resizeOffsetLeft: function(b,
|
|
c, e, d) {
|
|
if (this.JQUERYAVAILABLE) b.width(c.toFixed(2)), b.height(e.toFixed(2)), b.css("left", d);
|
|
else {
|
|
var g = b.style.visibility;
|
|
c = "width:" + c.toFixed(2) + "px; height:" + e.toFixed(2) + "px; left: " + d.toFixed(2) + "px;";
|
|
this.attr(b, "style", c);
|
|
b.style.visibility = g
|
|
}
|
|
},
|
|
resizeOffset: function(b, c, e, d, g) {
|
|
if (this.JQUERYAVAILABLE) b.width(c.toFixed(2)), b.height(e.toFixed(2)), b.css("left", d), b.css("top", g);
|
|
else {
|
|
var f = b.style.visibility;
|
|
c = "width:" + c.toFixed(2) + "px; height:" + e.toFixed(2) + "px; left: " + d.toFixed(2) + "px; top: " +
|
|
g.toFixed(2) + "px;";
|
|
this.attr(b, "style", c);
|
|
b.style.visibility = f
|
|
}
|
|
},
|
|
css: function(b, c) {
|
|
if (this.JQUERYAVAILABLE) b.css(c);
|
|
else {
|
|
var e = "",
|
|
d;
|
|
for (d in c) e += d + ":" + c[d] + ";";
|
|
this.attr(b, "style", e)
|
|
}
|
|
},
|
|
getOffsets: function(b) {
|
|
return this.JQUERYAVAILABLE ? (b = b.offset(), {
|
|
left: b.left,
|
|
top: b.top
|
|
}) : {
|
|
left: b.offsetLeft,
|
|
top: b.offsetTop
|
|
}
|
|
},
|
|
attr: function(b, c, e) {
|
|
if ("undefined" === typeof e) return this.JQUERYAVAILABLE ? b.attr(c) : b.getAttribute(c);
|
|
this.JQUERYAVAILABLE ? b.attr(c, e) : b.setAttribute(c, e)
|
|
},
|
|
show: function(b) {
|
|
b && "undefined" !==
|
|
typeof b && (this.JQUERYAVAILABLE ? (b.show(), b.css("visibility", "visible")) : b && (b.style ? b.style.visibility = "visible" : b[0] && (b[0].style.visibility = "visible")))
|
|
},
|
|
hide: function(b) {
|
|
b && "undefined" !== typeof b && (this.JQUERYAVAILABLE ? (b.hide(), b.css("visibility", "hidden")) : b && (b.style ? b.style.visibility = "hidden" : b[0] && (b[0].style.visibility = "hidden")))
|
|
},
|
|
getQueryVariable: function(b) {
|
|
for (var c = window.location.search.substring(1).split("&"), e = 0; e < c.length; e++) {
|
|
var d = c[e].split("=");
|
|
if (decodeURIComponent(d[0]) ==
|
|
b) return decodeURIComponent(d[1])
|
|
}
|
|
},
|
|
forcedDeviceDetection: function() {
|
|
var b = this.getQueryVariable("device");
|
|
if (b) switch (b) {
|
|
case "mobile":
|
|
console.log("serving mobile version ...");
|
|
ig.ua.mobile = !0;
|
|
break;
|
|
case "desktop":
|
|
console.log("serving desktop version ...");
|
|
ig.ua.mobile = !1;
|
|
break;
|
|
default:
|
|
console.log("serving universal version ...")
|
|
} else console.log("serving universal version ...")
|
|
},
|
|
forcedDeviceRotation: function() {
|
|
var b = this.getQueryVariable("force-rotate");
|
|
if (b) switch (b) {
|
|
case "portrait":
|
|
console.log("force rotate to portrait");
|
|
window.orientation = 0;
|
|
break;
|
|
case "landscape":
|
|
console.log("force rotate to horizontal");
|
|
window.orientation = 90;
|
|
break;
|
|
default:
|
|
alert("wrong command/type in param force-rotate. Defaulting value to portrait"), window.orientation = 0
|
|
}
|
|
},
|
|
setZIndex: function(b, c) {
|
|
this.JQUERYAVAILABLE ? b.css("zIndex", c) : b && (b.style ? b.style.zIndex = c : b[0] && (b[0].style.zIndex = c))
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.handlers.size-handler").requires("plugins.data.vector").defines(function() {
|
|
ig.SizeHandler = ig.Class.extend({
|
|
portraitMode: !0,
|
|
disableStretchToFitOnMobileFlag: !1,
|
|
enableStretchToFitOnAntiPortraitModeFlag: !0,
|
|
enableScalingLimitsOnMobileFlag: !1,
|
|
minScalingOnMobile: 0,
|
|
maxScalingOnMobile: 1,
|
|
enableStretchToFitOnDesktopFlag: !1,
|
|
enableScalingLimitsOnDesktopFlag: !1,
|
|
minScalingOnDesktop: 0,
|
|
maxScalingOnDesktop: 1,
|
|
desktop: {
|
|
actualSize: new Vector2(window.innerWidth, window.innerHeight),
|
|
actualResolution: new Vector2(540,
|
|
960)
|
|
},
|
|
mobile: {
|
|
actualSize: new Vector2(window.innerWidth, window.innerHeight),
|
|
actualResolution: new Vector2(540, 960)
|
|
},
|
|
windowSize: new Vector2(window.innerWidth, window.innerHeight),
|
|
scaleRatioMultiplier: new Vector2(1, 1),
|
|
sizeRatio: new Vector2(1, 1),
|
|
scale: 1,
|
|
domHandler: null,
|
|
dynamicClickableEntityDivs: {},
|
|
coreDivsToResize: ["#webglcanvas", "#canvas", "#play", "#orientate"],
|
|
adsToResize: {
|
|
MobileAdInGamePreroll: {
|
|
"box-width": _SETTINGS.Ad.Mobile.Preroll.Width + 2,
|
|
"box-height": _SETTINGS.Ad.Mobile.Preroll.Height + 20
|
|
},
|
|
MobileAdInGameEnd: {
|
|
"box-width": _SETTINGS.Ad.Mobile.End.Width +
|
|
2,
|
|
"box-height": _SETTINGS.Ad.Mobile.End.Height + 20
|
|
},
|
|
MobileAdInGamePreroll2: {
|
|
"box-width": _SETTINGS.Ad.Mobile.Preroll.Width + 2,
|
|
"box-height": _SETTINGS.Ad.Mobile.Preroll.Height + 20
|
|
},
|
|
MobileAdInGameEnd2: {
|
|
"box-width": _SETTINGS.Ad.Mobile.End.Width + 2,
|
|
"box-height": _SETTINGS.Ad.Mobile.End.Height + 20
|
|
},
|
|
MobileAdInGamePreroll3: {
|
|
"box-width": _SETTINGS.Ad.Mobile.Preroll.Width + 2,
|
|
"box-height": _SETTINGS.Ad.Mobile.Preroll.Height + 20
|
|
},
|
|
MobileAdInGameEnd3: {
|
|
"box-width": _SETTINGS.Ad.Mobile.End.Width + 2,
|
|
"box-height": _SETTINGS.Ad.Mobile.End.Height +
|
|
20
|
|
}
|
|
},
|
|
init: function(b) {
|
|
this.domHandler = b;
|
|
if ("undefined" === typeof b) throw "undefined Dom Handler for Size Handler";
|
|
this.sizeCalcs();
|
|
this.eventListenerSetup();
|
|
this.samsungFix()
|
|
},
|
|
sizeCalcs: function() {
|
|
this.windowSize = new Vector2(window.innerWidth, window.innerHeight);
|
|
if (ig.ua.mobile) {
|
|
this.mobile.actualSize = new Vector2(window.innerWidth, window.innerHeight);
|
|
var b = new Vector2(this.mobile.actualResolution.x, this.mobile.actualResolution.y);
|
|
this.scaleRatioMultiplier = new Vector2(this.mobile.actualSize.x / b.x, this.mobile.actualSize.y /
|
|
b.y);
|
|
if (this.disableStretchToFitOnMobileFlag) {
|
|
var c = Math.min(this.scaleRatioMultiplier.x, this.scaleRatioMultiplier.y);
|
|
this.enableScalingLimitsOnMobileFlag && (c = c.limit(this.minScalingOnMobile, this.maxScalingOnMobile));
|
|
this.mobile.actualSize.x = b.x * c;
|
|
this.mobile.actualSize.y = b.y * c;
|
|
this.scaleRatioMultiplier.x = c;
|
|
this.scaleRatioMultiplier.y = c
|
|
} else this.sizeRatio.x = this.scaleRatioMultiplier.x, this.sizeRatio.y = this.scaleRatioMultiplier.y, this.scaleRatioMultiplier.x = 1, this.scaleRatioMultiplier.y = 1
|
|
} else this.desktop.actualSize =
|
|
new Vector2(window.innerWidth, window.innerHeight), b = new Vector2(this.desktop.actualResolution.x, this.desktop.actualResolution.y), this.scaleRatioMultiplier = new Vector2(this.desktop.actualSize.x / b.x, this.desktop.actualSize.y / b.y), this.enableStretchToFitOnDesktopFlag ? (this.sizeRatio.x = this.scaleRatioMultiplier.x, this.sizeRatio.y = this.scaleRatioMultiplier.y, this.scaleRatioMultiplier.x = 1, this.scaleRatioMultiplier.y = 1) : (c = Math.min(this.scaleRatioMultiplier.x, this.scaleRatioMultiplier.y), this.enableScalingLimitsOnDesktopFlag &&
|
|
(c = c.limit(this.minScalingOnDesktop, this.maxScalingOnDesktop)), this.desktop.actualSize.x = b.x * c, this.desktop.actualSize.y = b.y * c, this.scaleRatioMultiplier.x = c, this.scaleRatioMultiplier.y = c)
|
|
},
|
|
resizeLayers: function() {
|
|
for (var b = 0; b < this.coreDivsToResize.length; b++) {
|
|
var c = ig.domHandler.getElementById(this.coreDivsToResize[b]);
|
|
if (ig.ua.mobile)
|
|
if (this.disableStretchToFitOnMobileFlag) {
|
|
var e = Math.floor(ig.sizeHandler.windowSize.x / 2 - ig.sizeHandler.mobile.actualSize.x / 2),
|
|
d = Math.floor(ig.sizeHandler.windowSize.y /
|
|
2 - ig.sizeHandler.mobile.actualSize.y / 2);
|
|
0 > e && (e = 0);
|
|
0 > d && (d = 0);
|
|
ig.domHandler.resizeOffset(c, Math.floor(ig.sizeHandler.mobile.actualSize.x), Math.floor(ig.sizeHandler.mobile.actualSize.y), e, d);
|
|
var g = !1;
|
|
if (this.portraitMode ? window.innerHeight < window.innerWidth : window.innerHeight > window.innerWidth)
|
|
if (this.enableStretchToFitOnAntiPortraitModeFlag) ig.domHandler.resizeOffset(c, Math.floor(window.innerWidth), Math.floor(window.innerHeight), 0, 0);
|
|
else {
|
|
var g = new Vector2(window.innerWidth / this.mobile.actualResolution.y,
|
|
window.innerHeight / this.mobile.actualResolution.x),
|
|
e = Math.min(g.x, g.y),
|
|
g = this.mobile.actualResolution.y * e,
|
|
f = this.mobile.actualResolution.x * e,
|
|
e = Math.floor(ig.sizeHandler.windowSize.x / 2 - g / 2),
|
|
d = Math.floor(ig.sizeHandler.windowSize.y / 2 - f / 2);
|
|
0 > e && (e = 0);
|
|
0 > d && (d = 0);
|
|
ig.domHandler.resizeOffset(c, Math.floor(g), Math.floor(f), e, d)
|
|
}
|
|
} else ig.domHandler.resize(c, Math.floor(ig.sizeHandler.mobile.actualSize.x), Math.floor(ig.sizeHandler.mobile.actualSize.y));
|
|
else this.enableStretchToFitOnDesktopFlag ? ig.domHandler.resize(c,
|
|
Math.floor(ig.sizeHandler.desktop.actualSize.x), Math.floor(ig.sizeHandler.desktop.actualSize.y)) : (e = Math.floor(ig.sizeHandler.windowSize.x / 2 - ig.sizeHandler.desktop.actualSize.x / 2), d = Math.floor(ig.sizeHandler.windowSize.y / 2 - ig.sizeHandler.desktop.actualSize.y / 2), 0 > e && (e = 0), 0 > d && (d = 0), ig.domHandler.resizeOffset(c, Math.floor(ig.sizeHandler.desktop.actualSize.x), Math.floor(ig.sizeHandler.desktop.actualSize.y), e, d))
|
|
}
|
|
for (var m in this.adsToResize) b = ig.domHandler.getElementById("#" + m), c = ig.domHandler.getElementById("#" +
|
|
m + "-Box"), g = (window.innerWidth - this.adsToResize[m]["box-width"]) / 2 + "px", e = (window.innerHeight - this.adsToResize[m]["box-height"]) / 2 + "px", b && ig.domHandler.css(b, {
|
|
width: window.innerWidth,
|
|
height: window.innerHeight
|
|
}), c && ig.domHandler.css(c, {
|
|
left: g,
|
|
top: e
|
|
});
|
|
b = ig.domHandler.getElementById("#canvas");
|
|
c = ig.domHandler.getOffsets(b);
|
|
b = c.left;
|
|
c = c.top;
|
|
g = Math.min(ig.sizeHandler.scaleRatioMultiplier.x, ig.sizeHandler.scaleRatioMultiplier.y);
|
|
for (m in this.dynamicClickableEntityDivs) {
|
|
e = ig.domHandler.getElementById("#" +
|
|
m);
|
|
if (ig.ua.mobile) {
|
|
var f = this.dynamicClickableEntityDivs[m].entity_pos_x,
|
|
l = this.dynamicClickableEntityDivs[m].entity_pos_y,
|
|
j = this.dynamicClickableEntityDivs[m].width,
|
|
d = this.dynamicClickableEntityDivs[m].height;
|
|
this.disableStretchToFitOnMobileFlag ? (f = Math.floor(b + f * this.scaleRatioMultiplier.x) + "px", l = Math.floor(c + l * this.scaleRatioMultiplier.y) + "px", j = Math.floor(j * this.scaleRatioMultiplier.x) + "px", d = Math.floor(d * this.scaleRatioMultiplier.y) + "px") : (f = Math.floor(f * this.sizeRatio.x) + "px", l = Math.floor(l *
|
|
this.sizeRatio.y) + "px", j = Math.floor(j * this.sizeRatio.x) + "px", d = Math.floor(d * this.sizeRatio.y) + "px")
|
|
} else f = this.dynamicClickableEntityDivs[m].entity_pos_x, l = this.dynamicClickableEntityDivs[m].entity_pos_y, j = this.dynamicClickableEntityDivs[m].width, d = this.dynamicClickableEntityDivs[m].height, this.enableStretchToFitOnDesktopFlag ? (f = Math.floor(f * this.sizeRatio.x) + "px", l = Math.floor(l * this.sizeRatio.y) + "px", j = Math.floor(j * this.sizeRatio.x) + "px", d = Math.floor(d * this.sizeRatio.y) + "px") : (f = Math.floor(b + f *
|
|
this.scaleRatioMultiplier.x) + "px", l = Math.floor(c + l * this.scaleRatioMultiplier.y) + "px", j = Math.floor(j * this.scaleRatioMultiplier.x) + "px", d = Math.floor(d * this.scaleRatioMultiplier.y) + "px");
|
|
ig.domHandler.css(e, {
|
|
"float": "left",
|
|
position: "absolute",
|
|
left: f,
|
|
top: l,
|
|
width: j,
|
|
height: d,
|
|
"z-index": 3
|
|
});
|
|
this.dynamicClickableEntityDivs[m]["font-size"] && ig.domHandler.css(e, {
|
|
"font-size": this.dynamicClickableEntityDivs[m]["font-size"] * g + "px"
|
|
})
|
|
}
|
|
$("#ajaxbar").width(this.windowSize.x);
|
|
$("#ajaxbar").height(this.windowSize.y)
|
|
},
|
|
resize: function() {
|
|
this.sizeCalcs();
|
|
this.resizeLayers()
|
|
},
|
|
reorient: function() {
|
|
console.log("changing orientation ...");
|
|
if (ig.ua.mobile) {
|
|
var b = !1,
|
|
b = this.portraitMode ? window.innerHeight < window.innerWidth : window.innerHeight > window.innerWidth,
|
|
c = this.domHandler.getElementById("#orientate"),
|
|
e = this.domHandler.getElementById("#game");
|
|
b ? (this.domHandler.show(c), this.domHandler.hide(e), console.log("portrait" + window.innerWidth + "," + window.innerHeight)) : (this.domHandler.show(e), this.domHandler.hide(c), console.log("landscape" +
|
|
window.innerWidth + "," + window.innerHeight))
|
|
}
|
|
ig.ua.mobile ? (this.resize(), this.resizeAds()) : this.resize()
|
|
},
|
|
resizeAds: function() {
|
|
for (var b in this.adsToResize) {
|
|
var c = ig.domHandler.getElementById("#" + b),
|
|
e = ig.domHandler.getElementById("#" + b + "-Box"),
|
|
d = (window.innerWidth - this.adsToResize[b]["box-width"]) / 2 + "px",
|
|
g = (window.innerHeight - this.adsToResize[b]["box-height"]) / 2 + "px";
|
|
c && ig.domHandler.css(c, {
|
|
width: window.innerWidth,
|
|
height: window.innerHeight
|
|
});
|
|
e && ig.domHandler.css(e, {
|
|
left: d,
|
|
top: g
|
|
})
|
|
}
|
|
},
|
|
samsungFix: function() {
|
|
ig.ua.android &&
|
|
!(4.2 > parseFloat(navigator.userAgent.slice(navigator.userAgent.indexOf("Android") + 8, navigator.userAgent.indexOf("Android") + 11))) && (!(0 > navigator.userAgent.indexOf("GT")) && !(0 < navigator.userAgent.indexOf("Chrome")) && !(0 < navigator.userAgent.indexOf("Firefox"))) && (document.addEventListener("touchstart", function(b) {
|
|
b.preventDefault();
|
|
return !1
|
|
}, !1), document.addEventListener("touchmove", function(b) {
|
|
b.preventDefault();
|
|
return !1
|
|
}, !1), document.addEventListener("touchend", function(b) {
|
|
b.preventDefault();
|
|
return !1
|
|
},
|
|
!1))
|
|
},
|
|
orientationInterval: null,
|
|
orientationTimeout: null,
|
|
orientationHandler: function() {
|
|
this.reorient();
|
|
window.scrollTo(0, 1)
|
|
},
|
|
orientationDelayHandler: function() {
|
|
null == this.orientationInterval && (this.orientationInterval = window.setInterval(this.orientationHandler.bind(this), 100));
|
|
null == this.orientationTimeout && (this.orientationTimeout = window.setTimeout(function() {
|
|
this.clearAllIntervals()
|
|
}.bind(this), 2E3))
|
|
},
|
|
clearAllIntervals: function() {
|
|
window.clearInterval(this.orientationInterval);
|
|
this.orientationInterval =
|
|
null;
|
|
window.clearTimeout(this.orientationTimeout);
|
|
this.orientationTimeout = null
|
|
},
|
|
eventListenerSetup: function() {
|
|
ig.isXiaomiBrowser = /XiaoMi/i.test(navigator.userAgent) || /MiuiBrowser/i.test(navigator.userAgent) || /Mint/i.test(navigator.userAgent);
|
|
console.log(window.navigator.userAgent);
|
|
ig.ua.iOS || ig.isXiaomiBrowser ? (window.addEventListener("orientationchange", this.orientationDelayHandler.bind(this)), window.addEventListener("resize", this.orientationDelayHandler.bind(this))) : (window.addEventListener("orientationchange",
|
|
this.orientationHandler.bind(this)), window.addEventListener("resize", this.orientationHandler.bind(this)));
|
|
document.ontouchmove = function(b) {
|
|
window.scrollTo(0, 1);
|
|
b.preventDefault()
|
|
};
|
|
this.chromePullDownRefreshFix()
|
|
},
|
|
chromePullDownRefreshFix: function() {
|
|
var b = window.chrome || navigator.userAgent.match("CriOS"),
|
|
c = "ontouchstart" in document.documentElement;
|
|
if (b && c) {
|
|
var e = b = !1,
|
|
d = 0,
|
|
g = !1;
|
|
try {
|
|
CSS.supports("overscroll-behavior-y", "contain") && (b = !0)
|
|
} catch (f) {}
|
|
try {
|
|
if (b) return document.body.style.overscrollBehaviorY =
|
|
"contain"
|
|
} catch (m) {}
|
|
b = document.head || document.body;
|
|
c = document.createElement("style");
|
|
c.type = "text/css";
|
|
c.styleSheet ? c.styleSheet.cssText = "\n ::-webkit-scrollbar {\n width: 500x;\n }\n ::-webkit-scrollbar-thumb {\n border-radius: 500px;\n background-color: rgba(0, 0, 0, 0.2);\n }\n body {\n -webkit-overflow-scrolling: auto!important;\n }\n " : c.appendChild(document.createTextNode("\n ::-webkit-scrollbar {\n width: 500px;\n }\n ::-webkit-scrollbar-thumb {\n border-radius: 500px;\n background-color: rgba(0, 0, 0, 0.2);\n }\n body {\n -webkit-overflow-scrolling: auto!important;\n }\n "));
|
|
b.appendChild(c);
|
|
try {
|
|
addEventListener("test", null, {
|
|
get passive() {
|
|
e = !0
|
|
}
|
|
})
|
|
} catch (l) {}
|
|
document.addEventListener("touchstart", function(b) {
|
|
1 === b.touches.length && (d = b.touches[0].clientY, g = 0 === window.pageYOffset)
|
|
}, !!e && {
|
|
passive: !0
|
|
});
|
|
document.addEventListener("touchmove", function(b) {
|
|
var c;
|
|
if (c = g) {
|
|
g = !1;
|
|
c = b.touches[0].clientY;
|
|
var e = c - d;
|
|
c = (d = c, 0 < e)
|
|
}
|
|
if (c) return b.preventDefault()
|
|
}, !!e && {
|
|
passive: !1
|
|
})
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.handlers.api-handler").defines(function() {
|
|
ig.ApiHandler = ig.Class.extend({
|
|
apiAvailable: {
|
|
MJSPreroll: function() {
|
|
ig.ua.mobile && ig.domHandler.JQUERYAVAILABLE && _SETTINGS && _SETTINGS.Ad.Mobile.Preroll.Enabled && MobileAdInGamePreroll.Initialize()
|
|
},
|
|
MJSHeader: function() {
|
|
ig.ua.mobile && ig.domHandler.JQUERYAVAILABLE && _SETTINGS.Ad.Mobile.Header.Enabled && MobileAdInGameHeader.Initialize()
|
|
},
|
|
MJSFooter: function() {
|
|
ig.ua.mobile && ig.domHandler.JQUERYAVAILABLE && _SETTINGS.Ad.Mobile.Footer.Enabled && MobileAdInGameFooter.Initialize()
|
|
},
|
|
MJSEnd: function() {
|
|
ig.ua.mobile && ig.domHandler.JQUERYAVAILABLE && _SETTINGS.Ad.Mobile.End.Enabled && MobileAdInGameEnd.Initialize()
|
|
}
|
|
},
|
|
run: function(b, c) {
|
|
if (this.apiAvailable[b]) this.apiAvailable[b](c)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.audio.sound-player").defines(function() {
|
|
SoundPlayer = ig.Class.extend({
|
|
tagName: "SoundPlayer",
|
|
stayMuteFlag: !1,
|
|
debug: !1,
|
|
init: function() {
|
|
this.debug && console.log(this.tagName)
|
|
},
|
|
play: function(b) {
|
|
this.debug && console.log("play sound ", b)
|
|
},
|
|
stop: function() {
|
|
this.debug && console.log("stop sound ")
|
|
},
|
|
volume: function() {
|
|
this.debug && console.log("set volume")
|
|
},
|
|
mute: function(b) {
|
|
this.debug && console.log("mute");
|
|
"undefined" === typeof b ? this.stayMuteFlag = !0 : b && (this.stayMuteFlag = !0)
|
|
},
|
|
unmute: function(b) {
|
|
this.debug &&
|
|
console.log("unmute");
|
|
"undefined" === typeof b ? this.stayMuteFlag = !1 : b && (this.stayMuteFlag = !1)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.audio.impact-music-player").requires("plugins.audio.sound-player").defines(function() {
|
|
ImpactMusicPlayer = SoundPlayer.extend({
|
|
tagName: "ImpactMusicPlayer",
|
|
bgmPlaying: !1,
|
|
soundList: {},
|
|
init: function(b, c) {
|
|
this.parent(b, c);
|
|
for (var e in b) this.soundList[e] = e, ig.music.add(b[e].path + ".*", e);
|
|
c && c.loop && (ig.music.loop = c.loop)
|
|
},
|
|
play: function(b) {
|
|
this.stayMuteFlag || (this.bgmPlaying = !0, "undefined" === typeof b ? ig.music.play(b) : ig.music.play())
|
|
},
|
|
stop: function() {
|
|
this.bgmPlaying = !1;
|
|
ig.music.pause()
|
|
},
|
|
volume: function(b) {
|
|
console.log("impactmusic:", b);
|
|
ig.music.volume = 0 > b ? 0 : isNaN(b) ? 1 : 1 < b ? 1 : b
|
|
},
|
|
getVolume: function() {
|
|
return ig.music.volume
|
|
},
|
|
mute: function(b) {
|
|
this.parent(b);
|
|
this.bgmPlaying && this.stop()
|
|
},
|
|
unmute: function(b) {
|
|
this.parent(b);
|
|
this.play()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.audio.impact-sound-player").requires("plugins.audio.sound-player").defines(function() {
|
|
ImpactSoundPlayer = SoundPlayer.extend({
|
|
tagName: "ImpactSoundPlayer",
|
|
soundList: {},
|
|
init: function(b, c) {
|
|
this.parent(b, c);
|
|
for (var e in b) {
|
|
var d = new ig.Sound(b[e].path + ".*");
|
|
this.soundList[e] = d
|
|
}
|
|
},
|
|
play: function(b) {
|
|
this.stayMuteFlag || ("object" === typeof b ? (console.log(b + " exists"), b.play()) : "string" === typeof b && this.soundList[b].play())
|
|
},
|
|
stop: function(b) {
|
|
this.parent(b);
|
|
b.stop()
|
|
},
|
|
volume: function(b) {
|
|
ig.soundManager.volume =
|
|
0 > b ? 0 : isNaN(b) ? 1 : 1 < b ? 1 : b
|
|
},
|
|
getVolume: function() {
|
|
return ig.soundManager.volume
|
|
},
|
|
mute: function(b) {
|
|
this.parent(b);
|
|
ig.Sound.enabled = !1
|
|
},
|
|
unmute: function(b) {
|
|
this.parent(b);
|
|
ig.Sound.enabled = !0
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.audio.howler-player").requires("plugins.audio.sound-player").defines(function() {
|
|
HowlerPlayer = SoundPlayer.extend({
|
|
tagName: "HowlerPlayer",
|
|
soundList: {},
|
|
init: function(b, c) {
|
|
this.parent(b, c);
|
|
for (var e in b) {
|
|
var d = b[e].path,
|
|
d = new Howl({
|
|
src: [d + "." + ig.Sound.FORMAT.OGG.ext, d + "." + ig.Sound.FORMAT.MP3.ext]
|
|
});
|
|
this.soundList[e] = d
|
|
}
|
|
},
|
|
play: function(b) {
|
|
this.stayMuteFlag || ("object" === typeof b ? b.play() : "string" === typeof b && this.soundList[b].play())
|
|
},
|
|
stop: function(b) {
|
|
this.parent(b);
|
|
"object" === typeof b ?
|
|
b.stop() : "string" === typeof b && this.soundList[b].stop()
|
|
},
|
|
volume: function(b) {
|
|
for (var c in this.soundList) {
|
|
if (0 > b) {
|
|
this.soundList[c].volume(0);
|
|
break
|
|
}
|
|
isNaN(b) ? this.soundList[c].volume(1) : 1 < b ? this.soundList[c].volume(1) : this.soundList[c].volume(b)
|
|
}
|
|
},
|
|
getVolume: function() {
|
|
for (var b in this.soundList) return this.soundList[b].volume()
|
|
},
|
|
mute: function(b) {
|
|
this.parent(b);
|
|
Howler.mute(!0)
|
|
},
|
|
unmute: function(b) {
|
|
this.parent(b);
|
|
Howler.mute(!1)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.audio.howler-music-player").requires("plugins.audio.sound-player").defines(function() {
|
|
HowlerMusicPlayer = SoundPlayer.extend({
|
|
tagName: "HowlerMusicPlayer",
|
|
bgmPlaying: !1,
|
|
soundList: {},
|
|
init: function(b, c) {
|
|
this.parent(b, c);
|
|
for (var e in b) {
|
|
var d = b[e].path,
|
|
d = new Howl({
|
|
src: [d + "." + ig.Sound.FORMAT.OGG.ext, d + "." + ig.Sound.FORMAT.MP3.ext],
|
|
loop: !0,
|
|
autoplay: !1,
|
|
onend: function() {}.bind(this)
|
|
});
|
|
this.soundList[e] = d
|
|
}
|
|
},
|
|
play: function(b) {
|
|
if (!this.stayMuteFlag && !this.bgmPlaying)
|
|
if ("object" === typeof b) this.bgmPlaying = !0, b.play();
|
|
else if ("string" === typeof b) this.bgmPlaying = !0, this.soundList[b].play();
|
|
else
|
|
for (var c in this.soundList) {
|
|
this.soundList[c].play();
|
|
this.bgmPlaying = !0;
|
|
break
|
|
}
|
|
},
|
|
stop: function(b) {
|
|
this.parent(b);
|
|
if (this.bgmPlaying) {
|
|
for (var c in this.soundList) this.soundList[c].stop();
|
|
this.bgmPlaying = !1
|
|
}
|
|
},
|
|
volume: function(b) {
|
|
for (var c in this.soundList) {
|
|
if (0 > b) {
|
|
this.soundList[c].volume(0);
|
|
break
|
|
}
|
|
isNaN(b) ? this.soundList[c].volume(1) : 1 < b ? this.soundList[c].volume(1) : this.soundList[c].volume(b)
|
|
}
|
|
},
|
|
getVolume: function() {
|
|
for (var b in this.soundList) return this.soundList[b].volume()
|
|
},
|
|
mute: function(b) {
|
|
this.parent(b);
|
|
Howler.mute(!0)
|
|
},
|
|
unmute: function(b) {
|
|
this.parent(b);
|
|
Howler.mute(!1)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.audio.jukebox-player").requires("plugins.audio.sound-player").defines(function() {
|
|
JukeboxPlayer = SoundPlayer.extend({
|
|
tagName: "JukeboxPlayer",
|
|
bgmPlaying: !1,
|
|
soundList: {},
|
|
jukeboxPlayer: null,
|
|
pausePosition: 0,
|
|
premuteVolume: 0,
|
|
minVolume: 0.001,
|
|
init: function(b, c) {
|
|
this.parent(b, c);
|
|
for (var e in b) {
|
|
this.soundList[e] = e;
|
|
var d = b[e].path;
|
|
this.jukeboxPlayer = new jukebox.Player({
|
|
resources: [d + "." + ig.Sound.FORMAT.OGG.ext, d + "." + ig.Sound.FORMAT.MP3.ext],
|
|
autoplay: !1,
|
|
spritemap: {
|
|
music: {
|
|
start: b[e].startMp3,
|
|
end: b[e].endMp3,
|
|
loop: !0
|
|
}
|
|
}
|
|
})
|
|
}
|
|
},
|
|
play: function() {
|
|
this.stayMuteFlag || (this.bgmPlaying = !0, this.pausePosition ? (console.log("resume"), this.jukeboxPlayer.resume(this.pausePosition)) : (console.log("play"), this.jukeboxPlayer.play(this.jukeboxPlayer.settings.spritemap.music.start, !0)), this.premuteVolume = this.getVolume())
|
|
},
|
|
stop: function() {
|
|
this.bgmPlaying = !1;
|
|
this.pausePosition = this.jukeboxPlayer.pause()
|
|
},
|
|
volume: function(b) {
|
|
console.log("jukebox:", b);
|
|
0 >= b ? this.jukeboxPlayer.setVolume(this.minVolume) : isNaN(b) ? this.jukeboxPlayer.setVolume(1) :
|
|
1 < b ? this.jukeboxPlayer.setVolume(1) : this.jukeboxPlayer.setVolume(b)
|
|
},
|
|
getVolume: function() {
|
|
return this.jukeboxPlayer.getVolume()
|
|
},
|
|
mute: function(b) {
|
|
this.parent(b);
|
|
this.bgmPlaying && (console.log("jukebox", this.premuteVolume), this.stayMuteFlag || (this.premuteVolume = this.getVolume()), this.jukeboxPlayer.pause(), this.jukeboxPlayer.setVolume(this.minVolume))
|
|
},
|
|
unmute: function(b) {
|
|
this.parent(b);
|
|
this.stayMuteFlag || (console.log("jukebox", this.premuteVolume), this.jukeboxPlayer.setVolume(this.premuteVolume), this.jukeboxPlayer.resume())
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.audio.webaudio-music-player").requires("plugins.audio.sound-player").defines(function() {
|
|
WebaudioMusicPlayer = SoundPlayer.extend({
|
|
tagName: "WebaudioMusicPlayer",
|
|
bgmPlaying: !1,
|
|
isSupported: !1,
|
|
muteFlag: !1,
|
|
pausedTime: 0,
|
|
webaudio: null,
|
|
useHTML5Audio: !1,
|
|
audio: null,
|
|
inactiveAudio: null,
|
|
codecs: null,
|
|
reinitOnPlay: !1,
|
|
inputList: null,
|
|
_volume: 1,
|
|
soundList: {},
|
|
init: function(b) {
|
|
this.webaudio = {
|
|
compatibility: {},
|
|
gainNode: null,
|
|
buffer: null,
|
|
source_loop: {},
|
|
source_once: {}
|
|
};
|
|
try {
|
|
Howler && Howler.ctx ? this.webaudio.context = Howler.ctx :
|
|
ig && ig.webaudio_ctx ? this.webaudio.context = ig.webaudio_ctx : (this.AudioContext = window.AudioContext || window.webkitAudioContext, this.webaudio.context = new this.AudioContext, ig.webaudio_ctx = this.webaudio.context), this.isSupported = !0
|
|
} catch (c) {
|
|
console.log("Web Audio API not supported in this browser."), this.webaudio = null, this.useHTML5Audio = !0
|
|
}
|
|
if (this.useHTML5Audio)
|
|
if ("undefined" !== typeof Audio) try {
|
|
new Audio
|
|
} catch (e) {
|
|
this.useHTML5Audio = !1
|
|
} else this.useHTML5Audio = !1;
|
|
this.useHTML5Audio && (this.audio = new Audio,
|
|
this.isSupported = !0, this.initHTML5Audio(b));
|
|
if (!this.isSupported) return null;
|
|
this.webaudio && (this.inputList = b, this.initWebAudio(b))
|
|
},
|
|
initWebAudio: function(b) {
|
|
ig.ua.iOS && this.initIOSWebAudioUnlock();
|
|
this.webaudio.gainNode = this.webaudio.context.createGain();
|
|
this.webaudio.gainNode.connect(this.webaudio.context.destination);
|
|
this.webaudio.gainNode.gain.value = this._volume;
|
|
this.webaudio.buffer = null;
|
|
var c = "start",
|
|
e = "stop",
|
|
d = this.webaudio.context.createBufferSource();
|
|
"function" !== typeof d.start && (c = "noteOn");
|
|
this.webaudio.compatibility.start = c;
|
|
"function" !== typeof d.stop && (e = "noteOff");
|
|
this.webaudio.compatibility.stop = e;
|
|
for (var g in b) {
|
|
this.soundList[g] = g;
|
|
var e = b[g].path,
|
|
c = e + "." + ig.Sound.FORMAT.MP3.ext,
|
|
f = e + "." + ig.Sound.FORMAT.OGG.ext;
|
|
ig.ua.mobile ? ig.ua.iOS && (f = c) : (e = navigator.userAgent.toLowerCase(), -1 != e.indexOf("safari") && -1 >= e.indexOf("chrome") && (f = c), e.indexOf("win64") && (f = c));
|
|
var m = new XMLHttpRequest;
|
|
m.open("GET", f, !0);
|
|
m.responseType = "arraybuffer";
|
|
m.onload = function() {
|
|
this.webaudio.context.decodeAudioData(m.response,
|
|
function(b) {
|
|
this.webaudio.buffer = b;
|
|
this.webaudio.source_loop = {};
|
|
this.bgmPlaying ? this.play(null, !0) : this.stop()
|
|
}.bind(this),
|
|
function() {
|
|
console.log('Error decoding audio "' + f + '".')
|
|
})
|
|
}.bind(this);
|
|
m.send();
|
|
if (4 == m.readyState && "undefined" !== typeof Audio) {
|
|
this.useHTML5Audio = !0;
|
|
try {
|
|
new Audio
|
|
} catch (l) {
|
|
this.useHTML5Audio = !1
|
|
}
|
|
this.useHTML5Audio && (console.log("Using HTML5 Audio"), this.webaudio = null, this.audio = new Audio, this.isSupported = !0, this.initHTML5Audio(b))
|
|
}
|
|
break
|
|
}
|
|
},
|
|
initIOSWebAudioUnlock: function() {
|
|
if (this.webaudio) {
|
|
webaudio =
|
|
this.webaudio;
|
|
var b = function() {
|
|
var c = webaudio.context,
|
|
e = c.createBuffer(1, 1, 22050),
|
|
d = c.createBufferSource();
|
|
d.buffer = e;
|
|
d.connect(c.destination);
|
|
"undefined" === typeof d.start ? d.noteOn(0) : d.start(0);
|
|
setTimeout(function() {
|
|
(d.playbackState === d.PLAYING_STATE || d.playbackState === d.FINISHED_STATE) && window.removeEventListener("touchend", b, !1)
|
|
}.bind(this), 0)
|
|
};
|
|
window.addEventListener("touchend", b, !1)
|
|
}
|
|
},
|
|
initHTML5Audio: function(b) {
|
|
if (this.useHTML5Audio && this.audio) {
|
|
var c = this.audio;
|
|
this.codecs = {};
|
|
this.codecs = {
|
|
mp3: !!c.canPlayType("audio/mpeg;").replace(/^no$/,
|
|
""),
|
|
opus: !!c.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, ""),
|
|
ogg: !!c.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""),
|
|
wav: !!c.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""),
|
|
aac: !!c.canPlayType("audio/aac;").replace(/^no$/, ""),
|
|
m4a: !!(c.canPlayType("audio/x-m4a;") || c.canPlayType("audio/m4a;") || c.canPlayType("audio/aac;")).replace(/^no$/, ""),
|
|
mp4: !!(c.canPlayType("audio/x-mp4;") || c.canPlayType("audio/mp4;") || c.canPlayType("audio/aac;")).replace(/^no$/, ""),
|
|
weba: !!c.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,
|
|
"")
|
|
};
|
|
this.is = {
|
|
ff: Boolean(null != window.mozInnerScreenX && /firefox/.test(navigator.userAgent.toLowerCase())),
|
|
ie: Boolean(document.all && !window.opera),
|
|
opera: Boolean(window.opera),
|
|
chrome: Boolean(window.chrome),
|
|
safari: Boolean(!window.chrome && /safari/.test(navigator.userAgent.toLowerCase()) && window.getComputedStyle && !window.globalStorage && !window.opera)
|
|
};
|
|
this.playDelay = -60;
|
|
this.stopDelay = 30;
|
|
this.is.chrome && (this.playDelay = -25);
|
|
this.is.chrome && (this.stopDelay = 25);
|
|
this.is.ff && (this.playDelay = -25);
|
|
this.is.ff &&
|
|
(this.stopDelay = 85);
|
|
this.is.opera && (this.playDelay = 5);
|
|
this.is.opera && (this.stopDelay = 0);
|
|
for (var e in b) {
|
|
this.soundList[e] = e;
|
|
var d = b[e].path,
|
|
c = d + "." + ig.Sound.FORMAT.OGG.ext,
|
|
d = d + "." + ig.Sound.FORMAT.MP3.ext,
|
|
g = null;
|
|
this.codecs[ig.Sound.FORMAT.OGG.ext.toLowerCase()] ? g = c : this.codecs[ig.Sound.FORMAT.MP3.ext.toLowerCase()] && (g = d);
|
|
if (g) {
|
|
ig.ua.mobile ? ig.ua.iOS && (g = d) : (b = navigator.userAgent.toLowerCase(), -1 != b.indexOf("safari") && -1 >= b.indexOf("chrome") && (g = d));
|
|
this.audio.addEventListener("error", function() {
|
|
this.audio.error &&
|
|
4 === this.audio.error.code && (this.isSupported = !1)
|
|
}, !1);
|
|
this.audio.src = g;
|
|
this.audio._pos = 0;
|
|
this.audio.preload = "auto";
|
|
this.audio.volume = this._volume;
|
|
this.inactiveAudio = new Audio;
|
|
this.inactiveAudio.src = g;
|
|
this.inactiveAudio._pos = 0;
|
|
this.inactiveAudio.preload = "auto";
|
|
this.inactiveAudio.volume = this._volume;
|
|
this.inactiveAudio.load();
|
|
var f = function() {
|
|
this._duration = this.audio.duration;
|
|
this._loaded || (this._loaded = !0);
|
|
this.bgmPlaying ? this.play(null, !0) : this.stop();
|
|
this.audio.removeEventListener("canplaythrough",
|
|
f, !1)
|
|
}.bind(this);
|
|
this.audio.addEventListener("canplaythrough", f, !1);
|
|
this.audio.load();
|
|
break
|
|
}
|
|
}
|
|
}
|
|
},
|
|
play: function(b, c) {
|
|
if (this.isSupported)
|
|
if (this.bgmPlaying = !0, this.webaudio) {
|
|
if (!c && this.reinitOnPlay && this.webaudio.source_loop.buffer == this.webaudio.buffer) {
|
|
if (this.webaudio.source_loop._playing && (this.webaudio.source_loop[this.webaudio.compatibility.stop](0), this.webaudio.source_loop._playing = !1, this.pausedTime += this.webaudio.context.currentTime - this.webaudio.source_loop._startTime, this.pausedTime %=
|
|
this.webaudio.source_loop.buffer.duration, this.webaudio.source_loop._startTime = 0, "noteOn" === this.webaudio.compatibility.start)) this.webaudio.source_once[this.webaudio.compatibility.stop](0);
|
|
try {
|
|
this.webaudio.context.close();
|
|
this.webaudio.context = new this.AudioContext;
|
|
this.webaudio.gainNode = this.webaudio.context.createGain();
|
|
this.webaudio.gainNode.connect(this.webaudio.context.destination);
|
|
this.webaudio.gainNode.gain.value = this._volume;
|
|
var e = "start",
|
|
d = "stop",
|
|
g = this.webaudio.context.createBufferSource();
|
|
"function" !== typeof g.start && (e = "noteOn");
|
|
this.webaudio.compatibility.start = e;
|
|
"function" !== typeof g.stop && (d = "noteOff");
|
|
this.webaudio.compatibility.stop = d;
|
|
this.webaudio.source_loop = {};
|
|
this.play(null, !0)
|
|
} catch (f) {}
|
|
}
|
|
if (this.webaudio.buffer) {
|
|
if (!this.muteFlag && (this.bgmPlaying = !0, !this.webaudio.source_loop._playing)) {
|
|
this.webaudio.source_loop = this.webaudio.context.createBufferSource();
|
|
this.webaudio.source_loop.buffer = this.webaudio.buffer;
|
|
this.webaudio.source_loop.loop = !0;
|
|
this.webaudio.source_loop.connect(this.webaudio.gainNode);
|
|
if (null == b || isNaN(b)) b = 0, this.pausedTime && (b = this.pausedTime);
|
|
this.webaudio.source_loop._startTime = this.webaudio.context.currentTime;
|
|
if ("noteOn" === this.webaudio.compatibility.start) this.webaudio.source_once = this.webaudio.context.createBufferSource(), this.webaudio.source_once.buffer = this.webaudio.buffer, this.webaudio.source_once.connect(this.webaudio.gainNode), this.webaudio.source_once.noteGrainOn(0, b, this.webaudio.buffer.duration - b), this.webaudio.source_loop[this.webaudio.compatibility.start](this.webaudio.context.currentTime +
|
|
(this.webaudio.buffer.duration - b));
|
|
else this.webaudio.source_loop[this.webaudio.compatibility.start](0, b);
|
|
this.webaudio.source_loop._playing = !0
|
|
}
|
|
} else this.bgmPlaying = !0
|
|
} else if (this.audio) {
|
|
var m = this.audio;
|
|
if (!this.muteFlag)
|
|
if (this.bgmPlaying = !0, isNaN(b) && (b = 0, this.pausedTime && (b = this.pausedTime)), e = this._duration - b, this._onEndTimer && (clearTimeout(this._onEndTimer), this._onEndTimer = null), this._onEndTimer = setTimeout(function() {
|
|
this.audio.currentTime = 0;
|
|
this.audio.pause();
|
|
this.pausedTime = 0;
|
|
if (this.inactiveAudio) {
|
|
var b =
|
|
this.audio;
|
|
this.audio = this.inactiveAudio;
|
|
this.inactiveAudio = b
|
|
}
|
|
this.play()
|
|
}.bind(this), 1E3 * e + this.playDelay), 4 === m.readyState || !m.readyState && navigator.isCocoonJS) m.readyState = 4, m.currentTime = b, m.muted = this.muteFlag || m.muted, m.volume = this._volume, setTimeout(function() {
|
|
m.play()
|
|
}, 0);
|
|
else {
|
|
clearTimeout(this._onEndTimer);
|
|
this._onEndTimer = null;
|
|
var l = function() {
|
|
typeof("function" == this.play) && (this.play(), m.removeEventListener("canplaythrough", l, !1))
|
|
}.bind(this);
|
|
m.addEventListener("canplaythrough", l, !1)
|
|
}
|
|
}
|
|
},
|
|
stop: function() {
|
|
this.bgmPlaying = !1;
|
|
if (this.isSupported)
|
|
if (this.webaudio) {
|
|
if (this.webaudio.source_loop._playing && (this.webaudio.source_loop[this.webaudio.compatibility.stop](0), this.webaudio.source_loop._playing = !1, this.pausedTime += this.webaudio.context.currentTime - this.webaudio.source_loop._startTime, this.pausedTime %= this.webaudio.source_loop.buffer.duration, this.webaudio.source_loop._startTime = 0, "noteOn" === this.webaudio.compatibility.start)) this.webaudio.source_once[this.webaudio.compatibility.stop](0)
|
|
} else if (this.audio) {
|
|
var b =
|
|
this.audio;
|
|
4 == b.readyState && (this.pausedTime = b.currentTime, b.currentTime = 0, b.pause(), clearTimeout(this._onEndTimer), this._onEndTimer = null)
|
|
}
|
|
},
|
|
volume: function(b) {
|
|
if (isNaN(b) || null == b) return this.getVolume();
|
|
this.isSupported && (this._volume = b, 0 > this._volume ? this._volume = 0 : 1 < this._volume && (this._volume = 1), this.webaudio ? this.webaudio.gainNode && (this.webaudio.gainNode.gain.value = this._volume) : this.audio && (this.audio.volume = this._volume, this.inactiveAudio && (this.inactiveAudio.volume = this._volume)))
|
|
},
|
|
getVolume: function() {
|
|
return !this.isSupported ?
|
|
0 : this._volume
|
|
},
|
|
mute: function(b) {
|
|
this.parent(b);
|
|
!1 == this.muteFlag && (this.muteFlag = !0, this.bgmPlaying && (this.stop(), this.bgmPlaying = !0))
|
|
},
|
|
unmute: function(b) {
|
|
this.parent(b);
|
|
!this.stayMuteFlag && !0 == this.muteFlag && (this.muteFlag = !1, this.bgmPlaying && this.play())
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.audio.sound-info").defines(function() {
|
|
SoundInfo = ig.Class.extend({
|
|
FORMATS: {
|
|
OGG: ".ogg",
|
|
MP3: ".mp3"
|
|
},
|
|
sfx: {
|
|
kittyopeningSound: {
|
|
path: "media/audio/opening/kittyopening"
|
|
},
|
|
staticSound: {
|
|
path: "media/audio/play/static"
|
|
},
|
|
openingSound: {
|
|
path: "media/audio/opening/opening"
|
|
},
|
|
coin: {
|
|
path: "media/audio/coin"
|
|
},
|
|
skid1: {
|
|
path: "media/audio/skid1"
|
|
},
|
|
skid2: {
|
|
path: "media/audio/skid2"
|
|
},
|
|
skid3: {
|
|
path: "media/audio/skid3"
|
|
},
|
|
crash: {
|
|
path: "media/audio/crash"
|
|
},
|
|
engine: {
|
|
path: "media/audio/engine"
|
|
},
|
|
engineLow: {
|
|
path: "media/audio/engine-low"
|
|
},
|
|
engineIn: {
|
|
path: "media/audio/engine-in"
|
|
},
|
|
engineOut: {
|
|
path: "media/audio/engine-out"
|
|
},
|
|
reward: {
|
|
path: "media/audio/reward"
|
|
},
|
|
click: {
|
|
path: "media/audio/click"
|
|
}
|
|
},
|
|
bgm: {
|
|
background: {
|
|
path: "media/audio/bgm"
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.audio.sound-handler").requires("plugins.audio.impact-music-player", "plugins.audio.impact-sound-player", "plugins.audio.howler-player", "plugins.audio.howler-music-player", "plugins.audio.jukebox-player", "plugins.audio.webaudio-music-player", "plugins.audio.sound-info").defines(function() {
|
|
ig.SoundHandler = ig.Class.extend({
|
|
bgmPlayer: null,
|
|
sfxPlayer: null,
|
|
focusBlurMute: !1,
|
|
soundInfo: new SoundInfo,
|
|
init: function() {
|
|
console.log("Initiating sound handler");
|
|
this.initWindowHandler();
|
|
ig.ua.mobile ?
|
|
(this.initPowerButtonFix(), this.bgmPlayer = new WebaudioMusicPlayer(this.soundInfo.bgm, {
|
|
loop: !0
|
|
}), this.bgmPlayer.isSupported || (this.bgmPlayer = new JukeboxPlayer(this.soundInfo.bgm, {
|
|
loop: !0
|
|
}))) : (this.bgmPlayer = new WebaudioMusicPlayer(this.soundInfo.bgm, {
|
|
loop: !0
|
|
}), this.bgmPlayer.isSupported || (this.bgmPlayer = new ImpactMusicPlayer(this.soundInfo.bgm, {
|
|
loop: !0
|
|
})));
|
|
this.sfxPlayer = new HowlerPlayer(this.soundInfo.sfx)
|
|
},
|
|
checkBGM: function() {
|
|
return this.bgmPlayer.stayMuteFlag
|
|
},
|
|
checkSFX: function() {
|
|
return this.sfxPlayer.stayMuteFlag
|
|
},
|
|
muteSFX: function(b) {
|
|
this.sfxPlayer && this.sfxPlayer.mute(b)
|
|
},
|
|
muteBGM: function(b) {
|
|
this.bgmPlayer && this.bgmPlayer.mute(b)
|
|
},
|
|
unmuteSFX: function(b) {
|
|
this.sfxPlayer && this.sfxPlayer.unmute(b)
|
|
},
|
|
unmuteBGM: function(b) {
|
|
this.bgmPlayer && this.bgmPlayer.unmute(b)
|
|
},
|
|
muteAll: function(b) {
|
|
this.muteSFX(b);
|
|
this.muteBGM(b)
|
|
},
|
|
unmuteAll: function(b) {
|
|
this.unmuteSFX(b);
|
|
this.unmuteBGM(b)
|
|
},
|
|
forceMuteAll: function() {
|
|
this.focusBlurMute || this.muteAll(!1);
|
|
this.focusBlurMute = !0
|
|
},
|
|
forceUnMuteAll: function() {
|
|
this.focusBlurMute && (this.unmuteAll(!1),
|
|
this.focusBlurMute = !1)
|
|
},
|
|
initWindowHandler: function() {
|
|
"true" === ig.domHandler.getQueryVariable("webview") ? ($(window).focus(function() {
|
|
ig.game && (ig.game.isBlur = !1);
|
|
wgl.system && wgl.system.startRender();
|
|
ig.soundHandler && ig.soundHandler.forceUnMuteAll()
|
|
}), $(window).blur(function() {
|
|
ig.game && (ig.game.isBlur = !0, ig.game.justBlurred = !0);
|
|
wgl.system && wgl.system.stopRender();
|
|
ig.soundHandler && ig.soundHandler.forceMuteAll()
|
|
})) : (window.onfocus = function() {
|
|
ig.game && (ig.game.isBlur = !1);
|
|
wgl.system && wgl.system.startRender();
|
|
ig.soundHandler && ig.soundHandler.forceUnMuteAll()
|
|
}, window.onblur = function() {
|
|
ig.game && (ig.game.isBlur = !0, ig.game.justBlurred = !0);
|
|
wgl.system && wgl.system.stopRender();
|
|
ig.soundHandler && ig.soundHandler.forceMuteAll()
|
|
})
|
|
},
|
|
initPowerButtonFix: function() {
|
|
var b = this.getHiddenProp();
|
|
b && (b = b.replace(/[H|h]idden/, "") + "visibilitychange", document.addEventListener(b, this.visChange));
|
|
window.addEventListener("pagehide", function() {
|
|
ig.soundHandler && ig.soundHandler.forceMuteAll()
|
|
}, !1);
|
|
window.addEventListener("pageshow",
|
|
function() {
|
|
ig.soundHandler && ig.soundHandler.forceUnMuteAll()
|
|
}, !1)
|
|
},
|
|
getHiddenProp: function() {
|
|
var b = ["webkit", "moz", "ms", "o"];
|
|
if ("hidden" in document) return "hidden";
|
|
for (var c = 0; c < b.length; c++)
|
|
if (b[c] + "Hidden" in document) return b[c] + "Hidden";
|
|
return null
|
|
},
|
|
isHidden: function() {
|
|
var b = this.getHiddenProp();
|
|
return !b ? !1 : document[b]
|
|
},
|
|
visChange: function() {
|
|
ig.soundHandler.isHidden() ? ig.soundHandler && ig.soundHandler.forceMuteAll() : ig.soundHandler && ig.soundHandler.forceUnMuteAll()
|
|
},
|
|
saveVolume: function() {
|
|
this.sfxPlayer &&
|
|
ig.game.io.storageSet("soundVolume", this.sfxPlayer.getVolume());
|
|
this.bgmPlayer && ig.game.io.storageSet("musicVolume", this.bgmPlayer.getVolume())
|
|
},
|
|
forceLoopBGM: function() {
|
|
var b;
|
|
if (!this.focusBlurMute && this.bgmPlayer.bgmPlaying && this.bgmPlayer) {
|
|
var c = this.bgmPlayer.jukeboxPlayer;
|
|
if (c) {
|
|
null != window.mozInnerScreenX && /firefox/.test(navigator.userAgent.toLowerCase());
|
|
b = Boolean(window.chrome);
|
|
!window.chrome && /safari/.test(navigator.userAgent.toLowerCase());
|
|
var e = 0.1;
|
|
ig.ua.mobile && (e = 0.115, ig.ua.android &&
|
|
(e = 0.45, b && (e = 0.3)));
|
|
c.settings.spritemap.music && (b = c.settings.spritemap.music.end - e, c.getCurrentTime() >= b && (b = c.settings.spritemap.music.start, ig.ua.android ? this.forcelooped || (c.play(b, !0), this.forcelooped = !0, setTimeout(function() {
|
|
ig.soundHandler.forcelooped = !1
|
|
}, e)) : c.setCurrentTime(b)))
|
|
} else "ImpactMusicPlayer" == this.bgmPlayer.tagName && (null != window.mozInnerScreenX && /firefox/.test(navigator.userAgent.toLowerCase()), b = Boolean(window.chrome), !window.chrome && /safari/.test(navigator.userAgent.toLowerCase()),
|
|
e = 0.1, ig.ua.mobile && (e = 0.115, ig.ua.android && (e = 0.45, b && (e = 0.3))), c = 0, "mp3" == ig.soundManager.format.ext && (c = 0.05), ig.music.currentTrack && (b = ig.music.currentTrack.duration - e, ig.music.currentTrack.currentTime >= b && (ig.ua.android ? this.forcelooped || (ig.music.currentTrack.pause(), ig.music.currentTrack.currentTime = c, ig.music.currentTrack.play(), this.forcelooped = !0, setTimeout(function() {
|
|
ig.soundHandler.forcelooped = !1
|
|
}, e)) : ig.music.currentTrack.currentTime = c)))
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.storage").defines(function() {
|
|
ig.Storage = ig.Class.extend({
|
|
staticInstantiate: function() {
|
|
return !ig.Storage.instance ? null : ig.Storage.instance
|
|
},
|
|
init: function() {
|
|
ig.Storage.instance = this
|
|
},
|
|
isCapable: function() {
|
|
return "undefined" !== typeof window.localStorage
|
|
},
|
|
isSet: function(b) {
|
|
return null !== this.get(b)
|
|
},
|
|
initUnset: function(b, c) {
|
|
null === this.get(b) && this.set(b, c)
|
|
},
|
|
get: function(b) {
|
|
if (!this.isCapable()) return null;
|
|
try {
|
|
return JSON.parse(localStorage.getItem(b))
|
|
} catch (c) {
|
|
return window.localStorage.getItem(b)
|
|
}
|
|
},
|
|
getInt: function(b) {
|
|
return ~~this.get(b)
|
|
},
|
|
getFloat: function(b) {
|
|
return parseFloat(this.get(b))
|
|
},
|
|
getBool: function(b) {
|
|
return !!this.get(b)
|
|
},
|
|
key: function(b) {
|
|
return this.isCapable() ? window.localStorage.key(b) : null
|
|
},
|
|
set: function(b, c) {
|
|
if (!this.isCapable()) return null;
|
|
try {
|
|
window.localStorage.setItem(b, JSON.stringify(c))
|
|
} catch (e) {
|
|
console.log(e)
|
|
}
|
|
},
|
|
setHighest: function(b, c) {
|
|
c > this.getFloat(b) && this.set(b, c)
|
|
},
|
|
remove: function(b) {
|
|
if (!this.isCapable()) return null;
|
|
window.localStorage.removeItem(b)
|
|
},
|
|
clear: function() {
|
|
if (!this.isCapable()) return null;
|
|
window.localStorage.clear()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.mouse").defines(function() {
|
|
Mouse = ig.Class.extend({
|
|
pos: new Vector2(0, 0),
|
|
bindings: {
|
|
click: [ig.KEY.MOUSE1]
|
|
},
|
|
init: function() {
|
|
ig.input.initMouse();
|
|
for (var b in this.bindings) {
|
|
this[b] = b;
|
|
for (var c = 0; c < this.bindings[b].length; c++) ig.input.bind(this.bindings[b][c], b)
|
|
}
|
|
},
|
|
getPos: function() {
|
|
this.pos.set(ig.input.mouse.x / ig.sizeHandler.sizeRatio.x / ig.sizeHandler.scaleRatioMultiplier.x, ig.input.mouse.y / ig.sizeHandler.sizeRatio.y / ig.sizeHandler.scaleRatioMultiplier.y);
|
|
return this.pos
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.keyboard").defines(function() {
|
|
Keyboard = ig.Class.extend({
|
|
bindings: {
|
|
jump: [ig.KEY.W, ig.KEY.UP_ARROW],
|
|
moveright: [ig.KEY.D, ig.KEY.RIGHT_ARROW],
|
|
moveleft: [ig.KEY.A, ig.KEY.LEFT_ARROW],
|
|
shoot: [ig.KEY.S, ig.KEY.DOWN_ARROW, ig.KEY.SPACE]
|
|
},
|
|
init: function() {
|
|
for (var b in this.bindings) {
|
|
this[b] = b;
|
|
for (var c = 0; c < this.bindings[b].length; c++) ig.input.bind(this.bindings[b][c], b)
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.gamepad-input").defines(function() {
|
|
ig.PADKEY = {
|
|
BUTTON_0: 0,
|
|
PADBUTTON_1: 1,
|
|
BUTTON_2: 2,
|
|
BUTTON_3: 3,
|
|
BUTTON_LEFT_BUMPER: 4,
|
|
BUTTON_RIGHT_BUMPER: 5,
|
|
BUTTON_LEFT_TRIGGER: 6,
|
|
BUTTON_RIGHT_TRIGGER: 7,
|
|
BUTTON_LEFT_JOYSTICK: 10,
|
|
BUTTON_RIGHT_JOYSTICK: 11,
|
|
BUTTON_DPAD_UP: 12,
|
|
BUTTON_DPAD_DOWN: 13,
|
|
BUTTON_DPAD_LEFT: 14,
|
|
BUTTON_DPAD_RIGHT: 15,
|
|
BUTTON_MENU: 16,
|
|
AXIS_LEFT_JOYSTICK_X: 0,
|
|
AXIS_LEFT_JOYSTICK_Y: 1,
|
|
AXIS_RIGHT_JOYSTICK_X: 2,
|
|
AXIS_RIGHT_JOYSTICK_Y: 3
|
|
};
|
|
ig.GamepadInput = ig.Class.extend({
|
|
isInit: !1,
|
|
isSupported: !1,
|
|
list: [],
|
|
bindings: {},
|
|
states: {},
|
|
presses: {},
|
|
releases: {},
|
|
downLocks: {},
|
|
upLocks: {},
|
|
leftStick: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
rightStick: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
start: function() {
|
|
if (!this.isInit) {
|
|
this.isInit = !0;
|
|
var b = navigator.getGamepads || navigator.webkitGetGamepads;
|
|
b && (!navigator.getGamepads && navigator.webkitGetGamepads && (navigator.getGamepads = navigator.webkitGetGamepads), this.list = navigator.getGamepads());
|
|
this.isSupported = b
|
|
}
|
|
},
|
|
isAvailable: function() {
|
|
return this.isInit && this.isSupported
|
|
},
|
|
buttonPressed: function(b) {
|
|
return "object" == typeof b ? b.pressed :
|
|
1 == b
|
|
},
|
|
buttonDown: function(b) {
|
|
if (b = this.bindings[b]) this.states[b] = !0, this.downLocks[b] || (this.presses[b] = !0, this.downLocks[b] = !0)
|
|
},
|
|
buttonUp: function(b) {
|
|
if ((b = this.bindings[b]) && this.downLocks[b] && !this.upLocks[b]) this.states[b] = !1, this.releases[b] = !0, this.upLocks[b] = !0
|
|
},
|
|
clearPressed: function() {
|
|
for (var b in this.releases) this.states[b] = !1, this.downLocks[b] = !1;
|
|
this.releases = {};
|
|
this.presses = {};
|
|
this.upLocks = {}
|
|
},
|
|
bind: function(b, c) {
|
|
this.bindings[b] = c
|
|
},
|
|
unbind: function(b) {
|
|
this.releases[this.bindings[b]] = !0;
|
|
this.bindings[b] = null
|
|
},
|
|
unbindAll: function() {
|
|
this.bindings = {};
|
|
this.states = {};
|
|
this.presses = {};
|
|
this.releases = {};
|
|
this.downLocks = {};
|
|
this.upLocks = {}
|
|
},
|
|
state: function(b) {
|
|
return this.states[b]
|
|
},
|
|
pressed: function(b) {
|
|
return this.presses[b]
|
|
},
|
|
released: function(b) {
|
|
return this.releases[b]
|
|
},
|
|
clamp: function(b, c, e) {
|
|
return b < c ? c : b > e ? e : b
|
|
},
|
|
pollGamepads: function() {
|
|
if (this.isSupported) {
|
|
this.leftStick.x = 0;
|
|
this.leftStick.y = 0;
|
|
this.rightStick.x = 0;
|
|
this.rightStick.y = 0;
|
|
this.list = navigator.getGamepads();
|
|
for (var b in this.bindings) {
|
|
for (var c = !1, e = 0; e < this.list.length; e++) {
|
|
var d = this.list[e];
|
|
if (d && d.buttons && this.buttonPressed(d.buttons[b])) {
|
|
c = !0;
|
|
break
|
|
}
|
|
}
|
|
c ? this.buttonDown(b) : this.buttonUp(b)
|
|
}
|
|
for (e = 0; e < this.list.length; e++)
|
|
if ((d = this.list[e]) && d.axes) {
|
|
b = d.axes[ig.GAMEPADINPUT.AXIS_LEFT_JOYSTICK_X];
|
|
var c = d.axes[ig.GAMEPADINPUT.AXIS_LEFT_JOYSTICK_Y],
|
|
g = d.axes[ig.GAMEPADINPUT.AXIS_RIGHT_JOYSTICK_X],
|
|
d = d.axes[ig.GAMEPADINPUT.AXIS_RIGHT_JOYSTICK_Y];
|
|
this.leftStick.x += isNaN(b) ? 0 : b;
|
|
this.leftStick.y += isNaN(c) ? 0 : c;
|
|
this.rightStick.x += isNaN(g) ? 0 : g;
|
|
this.rightStick.y +=
|
|
isNaN(d) ? 0 : d
|
|
} 0 < this.list.length && (this.leftStick.x = this.clamp(this.leftStick.x, -1, 1), this.leftStick.y = this.clamp(this.leftStick.y, -1, 1), this.rightStick.x = this.clamp(this.rightStick.x, -1, 1), this.rightStick.y = this.clamp(this.rightStick.y, -1, 1))
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.gamepad").requires("plugins.io.gamepad-input").defines(function() {
|
|
Gamepad = ig.Class.extend({
|
|
bindings: {
|
|
padJump: [ig.PADKEY.BUTTON_0]
|
|
},
|
|
init: function() {
|
|
ig.gamepadInput.start();
|
|
for (var b in this.bindings)
|
|
for (var c = 0; c < this.bindings[b].length; c++) ig.gamepadInput.bind(this.bindings[b][c], b)
|
|
},
|
|
press: function() {},
|
|
held: function() {},
|
|
release: function() {}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.multitouch").defines(function() {
|
|
Multitouch = ig.Class.extend({
|
|
init: function() {
|
|
ig.multitouchInput.start()
|
|
},
|
|
getTouchesPos: function() {
|
|
if (ig.ua.mobile) {
|
|
if (0 < ig.multitouchInput.touches.length) {
|
|
for (var b = [], c = 0; c < ig.multitouchInput.touches.length; c++) {
|
|
var e = ig.multitouchInput.touches[c];
|
|
b.push({
|
|
x: e.x,
|
|
y: e.y
|
|
})
|
|
}
|
|
return b
|
|
}
|
|
return null
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.multitouch-input").defines(function() {
|
|
ig.MultitouchInput = ig.Class.extend({
|
|
isStart: !1,
|
|
touches: [],
|
|
multitouchCapable: !1,
|
|
lastEventUp: null,
|
|
start: function() {
|
|
this.isStart || (this.isStart = !0, navigator.maxTouchPoints && 1 < navigator.maxTouchPoints && (this.multitouchCapable = !0), ig.ua.touchDevice && (window.navigator.msPointerEnabled && (ig.system.canvas.addEventListener("MSPointerDown", this.touchdown.bind(this), !1), ig.system.canvas.addEventListener("MSPointerUp", this.touchup.bind(this), !1), ig.system.canvas.addEventListener("MSPointerMove",
|
|
this.touchmove.bind(this), !1), ig.system.canvas.style.msContentZooming = "none", ig.system.canvas.style.msTouchAction = "none"), ig.system.canvas.addEventListener("touchstart", this.touchdown.bind(this), !1), ig.system.canvas.addEventListener("touchend", this.touchup.bind(this), !1), ig.system.canvas.addEventListener("touchmove", this.touchmove.bind(this), !1)))
|
|
},
|
|
touchmove: function(b) {
|
|
if (ig.ua.touchDevice) {
|
|
var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth,
|
|
e = parseInt(ig.system.canvas.offsetHeight) ||
|
|
ig.system.realHeight,
|
|
c = ig.system.scale * (c / ig.system.realWidth),
|
|
e = ig.system.scale * (e / ig.system.realHeight);
|
|
if (b.touches) {
|
|
for (; 0 < this.touches.length;) this.touches.pop();
|
|
!this.multitouchCapable && 1 < b.touches.length && (this.multitouchCapable = !0);
|
|
var d = {
|
|
left: 0,
|
|
top: 0
|
|
};
|
|
ig.system.canvas.getBoundingClientRect && (d = ig.system.canvas.getBoundingClientRect());
|
|
for (var g = 0; g < b.touches.length; g++) {
|
|
var f = b.touches[g];
|
|
f && this.touches.push({
|
|
x: (f.clientX - d.left) / c,
|
|
y: (f.clientY - d.top) / e
|
|
})
|
|
}
|
|
} else this.windowMove(b)
|
|
}
|
|
},
|
|
touchdown: function(b) {
|
|
var c =
|
|
parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth,
|
|
e = parseInt(ig.system.canvas.offsetHeight) || ig.system.realHeight,
|
|
c = ig.system.scale * (c / ig.system.realWidth),
|
|
e = ig.system.scale * (e / ig.system.realHeight);
|
|
if (window.navigator.msPointerEnabled) this.windowKeyDown(b);
|
|
else if (ig.ua.touchDevice && b.touches) {
|
|
for (; 0 < this.touches.length;) this.touches.pop();
|
|
!this.multitouchCapable && 1 < b.touches.length && (this.multitouchCapable = !0);
|
|
var d = {
|
|
left: 0,
|
|
top: 0
|
|
};
|
|
ig.system.canvas.getBoundingClientRect && (d = ig.system.canvas.getBoundingClientRect());
|
|
for (var g = 0; g < b.touches.length; g++) {
|
|
var f = b.touches[g];
|
|
f && this.touches.push({
|
|
x: (f.clientX - d.left) / c,
|
|
y: (f.clientY - d.top) / e
|
|
})
|
|
}
|
|
}
|
|
},
|
|
touchup: function(b) {
|
|
var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth;
|
|
parseInt(ig.system.canvas.offsetHeight);
|
|
c = ig.system.scale * (c / ig.system.realWidth);
|
|
if (window.navigator.msPointerEnabled) this.windowKeyUp(b);
|
|
else {
|
|
this.lastEventUp = b;
|
|
var e = {
|
|
left: 0,
|
|
top: 0
|
|
};
|
|
ig.system.canvas.getBoundingClientRect && (e = ig.system.canvas.getBoundingClientRect());
|
|
if (ig.ua.touchDevice) {
|
|
b =
|
|
(b.changedTouches[0].clientX - e.left) / c;
|
|
for (c = 0; c < this.touches.length; c++) this.touches[c].x >= b - 40 && this.touches[c].x <= b + 40 && this.touches.splice(c, 1)
|
|
}
|
|
}
|
|
},
|
|
windowKeyDown: function(b) {
|
|
var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth,
|
|
e = parseInt(ig.system.canvas.offsetHeight) || ig.system.realHeight,
|
|
c = ig.system.scale * (c / ig.system.realWidth),
|
|
e = ig.system.scale * (e / ig.system.realHeight);
|
|
if (window.navigator.msPointerEnabled) {
|
|
var d = {
|
|
left: 0,
|
|
top: 0
|
|
};
|
|
ig.system.canvas.getBoundingClientRect && (d = ig.system.canvas.getBoundingClientRect());
|
|
b = b.changedTouches ? b.changedTouches : [b];
|
|
for (var g = 0; g < b.length; ++g) {
|
|
for (var f = b[g], m = "undefined" != typeof f.identifier ? f.identifier : "undefined" != typeof f.pointerId ? f.pointerId : 1, l = (f.clientX - d.left) / c, f = (f.clientY - d.top) / e, j = 0; j < this.touches.length; ++j) this.touches[j].identifier == m && this.touches.splice(j, 1);
|
|
this.touches.push({
|
|
x: l,
|
|
y: f,
|
|
identifier: m
|
|
})
|
|
}
|
|
for (c = 0; c < this.touches.length; c++);
|
|
}
|
|
},
|
|
windowKeyUp: function(b) {
|
|
b = "undefined" != typeof b.identifier ? b.identifier : "undefined" != typeof b.pointerId ? b.pointerId :
|
|
1;
|
|
for (var c = 0; c < this.touches.length; ++c) this.touches[c].identifier == b && this.touches.splice(c, 1);
|
|
for (; 0 < this.touches.length;) this.touches.pop()
|
|
},
|
|
windowMove: function(b) {
|
|
var c = parseInt(ig.system.canvas.offsetWidth) || ig.system.realWidth,
|
|
e = parseInt(ig.system.canvas.offsetHeight) || ig.system.realHeight,
|
|
c = ig.system.scale * (c / ig.system.realWidth),
|
|
e = ig.system.scale * (e / ig.system.realHeight),
|
|
d = {
|
|
left: 0,
|
|
top: 0
|
|
};
|
|
ig.system.canvas.getBoundingClientRect && (d = ig.system.canvas.getBoundingClientRect());
|
|
if (window.navigator.msPointerEnabled)
|
|
for (var g =
|
|
"undefined" != typeof b.identifier ? b.identifier : "undefined" != typeof b.pointerId ? b.pointerId : 1, f = 0; f < this.touches.length; ++f)
|
|
if (this.touches[f].identifier == g) {
|
|
var m = (b.clientY - d.top) / e;
|
|
this.touches[f].x = (b.clientX - d.left) / c;
|
|
this.touches[f].y = m
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.fake-storage").requires("impact.game").defines(function() {
|
|
ig.FakeStorage = ig.Class.extend({
|
|
tempData: {},
|
|
init: function() {
|
|
ig.FakeStorage.instance = this
|
|
},
|
|
initUnset: function(b, c) {
|
|
null === this.get(b) && this.set(b, c)
|
|
},
|
|
set: function(b, c) {
|
|
this.tempData[b] = JSON.stringify(c)
|
|
},
|
|
setHighest: function(b, c) {
|
|
c > this.getFloat(b) && this.set(b, c)
|
|
},
|
|
get: function(b) {
|
|
return "undefined" == typeof this.tempData[b] ? null : JSON.parse(this.tempData[b])
|
|
},
|
|
getInt: function(b) {
|
|
return ~~this.get(b)
|
|
},
|
|
getFloat: function(b) {
|
|
return parseFloat(this.get(b))
|
|
},
|
|
getBool: function(b) {
|
|
return !!this.get(b)
|
|
},
|
|
isSet: function(b) {
|
|
return null !== this.get(b)
|
|
},
|
|
remove: function(b) {
|
|
delete this.tempData[b]
|
|
},
|
|
clear: function() {
|
|
this.tempData = {}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.io-manager").requires("plugins.io.storage", "plugins.io.mouse", "plugins.io.keyboard", "plugins.io.gamepad", "plugins.io.multitouch", "plugins.io.multitouch-input", "plugins.io.gamepad-input", "plugins.io.fake-storage").defines(function() {
|
|
IoManager = ig.Class.extend({
|
|
storage: null,
|
|
localStorageSupport: !1,
|
|
mouse: null,
|
|
keyboard: null,
|
|
multitouch: null,
|
|
gamepad: null,
|
|
init: function() {
|
|
ig.multitouchInput = new ig.MultitouchInput;
|
|
ig.gamepadInput = new ig.GamepadInput;
|
|
this.unbindAll();
|
|
this.initStorage();
|
|
this.initMouse();
|
|
this.initKeyboard()
|
|
},
|
|
unbindAll: function() {
|
|
ig.input.unbindAll();
|
|
ig.gamepadInput.unbindAll()
|
|
},
|
|
initStorage: function() {
|
|
try {
|
|
window.localStorage.setItem("test", "test"), window.localStorage.removeItem("test"), this.storage = new ig.Storage
|
|
} catch (b) {
|
|
console.log("using fake storage"), this.storage = new ig.FakeStorage
|
|
}
|
|
},
|
|
initMouse: function() {
|
|
this.mouse = new Mouse
|
|
},
|
|
initKeyboard: function() {
|
|
this.keyboard = new Keyboard
|
|
},
|
|
initMultitouch: function() {
|
|
this.multitouch = new Multitouch
|
|
},
|
|
initGamepad: function() {
|
|
this.gamepad =
|
|
new Gamepad
|
|
},
|
|
press: function(b) {
|
|
return ig.input.pressed(b) || this.gamepad && this.gamepad.press(b) ? !0 : !1
|
|
},
|
|
held: function(b) {
|
|
return ig.input.state(b) || this.gamepad && this.gamepad.state(b) ? !0 : !1
|
|
},
|
|
release: function(b) {
|
|
return ig.input.released(b) || this.gamepad && this.gamepad.released(b) ? !0 : !1
|
|
},
|
|
getClickPos: function() {
|
|
return this.mouse.getPos()
|
|
},
|
|
getTouchesPos: function() {
|
|
return this.multitouch.getTouchesPos()
|
|
},
|
|
checkOverlap: function(b, c, e, d, g) {
|
|
return b.x > c + d || b.x < c || b.y > e + g || b.y < e ? !1 : !0
|
|
},
|
|
_supportsLocalStorage: function() {
|
|
try {
|
|
return localStorage.setItem("test",
|
|
"test"), localStorage.removeItem("test"), this.localStorageSupport = "localStorage" in window && null !== window.localStorage
|
|
} catch (b) {
|
|
return this.localStorageSupport
|
|
}
|
|
},
|
|
storageIsSet: function(b) {
|
|
return !this.localStorageSupport ? null : this.storage.isSet(b)
|
|
},
|
|
storageGet: function(b) {
|
|
return !this.localStorageSupport ? null : this.storage.get(b)
|
|
},
|
|
storageSet: function(b, c) {
|
|
if (!this.localStorageSupport) return null;
|
|
this.storage.set(b, c)
|
|
},
|
|
assert: function(b, c, e) {
|
|
if (c !== e) throw "actualValue:" + c + " not equal to testValue:" + e + " at " +
|
|
b;
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.storage-manager").requires("impact.game", "plugins.io.io-manager").defines(function() {
|
|
ig.Game.prototype.name = "MJS-mjs-drift-boss-game";
|
|
ig.Game.prototype.version = "1.0.2-dailyreward";
|
|
ig.Game.prototype.sessionData = {};
|
|
ig.Game.prototype.initData = function() {
|
|
return this.sessionData = {
|
|
sound: 0.5,
|
|
music: 0.5,
|
|
level: 1,
|
|
score: 0
|
|
}
|
|
};
|
|
ig.Game.prototype.setupStorageManager = function() {
|
|
"undefined" === typeof this.name ? console.error("Cannot found Game Name, Storage Manager Cancelled.") : "undefined" === typeof this.version ?
|
|
console.error("Cannot found Game Version, Storage Manager Cancelled.") : (this.io || (this.io = new IoManager, console.log("IO Manager doesn't existed. Initialize...")), console.log("Plug in Storage Manager"), this.storage = this.io.storage, this.storageName = this.name + "-v" + this.version, this.loadAll())
|
|
};
|
|
ig.Game.prototype.loadAll = function() {
|
|
var b = this.storage.get(this.storageName);
|
|
if (null === b || "undefined" === typeof b) b = this.initData();
|
|
for (var c in b) this.sessionData[c] = b[c];
|
|
this.storage.set(this.storageName, b)
|
|
};
|
|
ig.Game.prototype.saveAll = function() {
|
|
var b = this.storage.get(this.storageName),
|
|
c;
|
|
for (c in b) b[c] = this.sessionData[c];
|
|
this.storage.set(this.storageName, b)
|
|
};
|
|
ig.Game.prototype.load = function(b) {
|
|
return this.storage.get(this.storageName)[b]
|
|
};
|
|
ig.Game.prototype.save = function(b, c) {
|
|
var e = this.storage.get(this.storageName);
|
|
e[b] = c;
|
|
this.storage.set(this.storageName, e)
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.splash-loader").requires("impact.loader").defines(function() {
|
|
ig.SplashLoader = ig.Loader.extend({
|
|
desktopCoverDIVID: "play-desktop",
|
|
bg: new ig.Image("media/graphics/splash/loading.png"),
|
|
init: function(b, c) {
|
|
this.parent(b, c);
|
|
var e = ig.domHandler.getElementById("#game"),
|
|
d = ig.domHandler.getElementById("#webgl");
|
|
ig.domHandler.setZIndex(e, 1);
|
|
ig.domHandler.setZIndex(d, 0);
|
|
ig.apiHandler.run("MJSPreroll")
|
|
},
|
|
end: function() {
|
|
this.parent();
|
|
this.startIfBabylonReady();
|
|
ig.sizeHandler.reorient()
|
|
},
|
|
startIfBabylonReady: function() {
|
|
this._drawStatus =
|
|
0.95;
|
|
this.draw();
|
|
wgl.game.ready ? (wgl.system.stopRender(), setTimeout(function() {
|
|
wgl.system.startRender();
|
|
this.startGame()
|
|
}.bind(this), 500)) : setTimeout(function() {
|
|
this.startIfBabylonReady()
|
|
}.bind(this), 500)
|
|
},
|
|
startGame: function() {
|
|
this._drawStatus = 1;
|
|
this.draw();
|
|
setTimeout(function() {
|
|
ig.system.setGame(MyGame)
|
|
}.bind(this), 500)
|
|
},
|
|
draw: function() {
|
|
var b = ig.system.context;
|
|
b.save();
|
|
b.clearRect(0, 0, ig.system.width, ig.system.height);
|
|
var c = ig.responsive.toAnchor(0, 0, "default");
|
|
this.bg.draw(c.x, c.y);
|
|
if (ig.babylonJSSupport) {
|
|
this._drawStatus +=
|
|
(this.status - this._drawStatus) / 5;
|
|
!wgl.game.ready && 0.95 < this._drawStatus && (this._drawStatus = 0.95);
|
|
b.globalAlpha = 0.5;
|
|
b.lineWidth = 5;
|
|
b.fillStyle = "#381d02";
|
|
b.strokeStyle = "#381d02";
|
|
b.globalAlpha = 1;
|
|
ig.drawRoundRect(b, c.x + 50, c.y + 800, 440, 37, 15, !0, !0);
|
|
b.lineWidth = 4;
|
|
b.fillStyle = "#f28513";
|
|
b.strokeStyle = "#f28513";
|
|
b.globalAlpha = 1;
|
|
ig.drawRoundRect(b, c.x + 50, c.y + 800, 440, 30, 15, !1, !0);
|
|
var e = 430 * this._drawStatus;
|
|
20 > e && (e = 20);
|
|
ig.drawRoundRect(b, c.x + 50 + 5, c.y + 800 + 5, e, 20, 10, !0, !1);
|
|
b.globalAlpha = 1;
|
|
b.font = "12px mainfont";
|
|
b.fillText("Schadenfreude", -1E3, -1E3);
|
|
b.restore()
|
|
} else b = ig.system.context, b.fillStyle = "#ffffff", b.strokeStyle = "#000000", b.lineWidth = 8, b.lineJoin = "round", b.textAlign = "center", b.font = "54px mainfont", b.strokeText("unable to run game", c.x + 270, 760), b.fillText("unable to run game", c.x + 270, 760), b.font = "28px mainfont", b.strokeText("this browser does not support webgl", c.x + 270, 800), b.fillText("this browser does not support webgl", c.x + 270, 800)
|
|
},
|
|
tapToStartDiv: function(b) {
|
|
this.desktopCoverDIV = document.getElementById(this.desktopCoverDIVID);
|
|
if (!this.desktopCoverDIV) {
|
|
this.desktopCoverDIV = document.createElement("div");
|
|
this.desktopCoverDIV.id = this.desktopCoverDIVID;
|
|
this.desktopCoverDIV.setAttribute("class", "play");
|
|
this.desktopCoverDIV.setAttribute("style", "position: absolute; display: block; z-index: 999999; background-color: rgba(23, 32, 53, 0); visibility: visible; font-size: 10vmin; text-align: center; vertical-align: middle; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;");
|
|
this.desktopCoverDIV.innerHTML = "<div style='color:white;background-color: rgba(255, 255, 255, 0.3); border: 2px solid #fff; font-size:20px; border-radius: 5px; position: relative; float: left; top: 50%; left: 50%; transform: translate(-50%, -50%);'><div style='padding:20px 50px; font-family: Arial;'>" + _STRINGS.Splash.TapToStart + "</div></div>";
|
|
(document.getElementById("play").parentNode || document.getElementById("ajaxbar")).appendChild(this.desktopCoverDIV);
|
|
try {
|
|
"undefined" !== typeof ig.sizeHandler ? "undefined" !==
|
|
typeof ig.sizeHandler.coreDivsToResize && (ig.sizeHandler.coreDivsToResize.push("#" + this.desktopCoverDIVID), "function" === typeof ig.sizeHandler.reorient && ig.sizeHandler.reorient()) : "undefined" !== typeof coreDivsToResize && (coreDivsToResize.push(this.desktopCoverDIVID), "function" === typeof sizeHandler && sizeHandler())
|
|
} catch (c) {
|
|
console.log(c)
|
|
}
|
|
this.desktopCoverDIV.addEventListener("click", function() {
|
|
try {
|
|
"undefined" !== typeof ig.soundHandler ? ("undefined" !== typeof ig.soundHandler.bgmPlayer ? "undefined" !== typeof ig.soundHandler.bgmPlayer.webaudio &&
|
|
"undefined" !== typeof ig.soundHandler.bgmPlayer.webaudio.context && ig.soundHandler.bgmPlayer.webaudio.context.resume() : (ig.soundHandler = null, ig.soundHandler = "undefined" !== typeof ig.soundList ? new ig.SoundHandler(ig.soundList) : new ig.SoundHandler), "undefined" !== typeof ig.soundHandler.sfxPlayer ? "function" === typeof ig.soundHandler.sfxPlayer.play && ig.soundHandler.sfxPlayer.play("staticSound") : "undefined" !== typeof ig.soundHandler.staticSound ? "function" === typeof ig.soundHandler.staticSound.play && ig.soundHandler.staticSound.play() :
|
|
"function" === typeof ig.soundHandler.playSound && ig.soundHandler.playSound("staticSound")) : "undefined" !== typeof Howl ? (ig.global.staticSound = new Howl({
|
|
src: ["media/audio/play/static.ogg", "media/audio/play/static.mp3"]
|
|
}), ig.global.staticSound.play()) : "undefined" !== typeof createjs && "undefined" !== typeof createjs.Sound && "function" === typeof createjs.Sound.play && createjs.Sound.play("opening")
|
|
} catch (c) {
|
|
console.log(c)
|
|
}
|
|
this.setAttribute("style", "visibility: hidden;");
|
|
"function" === typeof b && b();
|
|
ig.system.setGame(MyGame)
|
|
})
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("babylon.plugins.wgl-entity").defines(function() {
|
|
wgl.Entity = ig.Class.extend({
|
|
pos: null,
|
|
vel: null,
|
|
acc: null,
|
|
meshes: [],
|
|
_killed: !1,
|
|
init: function(b, c, e, d) {
|
|
ig.merge(this, d);
|
|
this.pos = new BABYLON.Vector3(0, 0, 0);
|
|
this.vel = new BABYLON.Vector3(0, 0, 0);
|
|
this.acc = new BABYLON.Vector3(0, 0, 0);
|
|
d && d._mesh && this.meshes.push(d._mesh);
|
|
isNaN(b) || (this.pos.x = b);
|
|
isNaN(c) || (this.pos.y = c);
|
|
isNaN(e) || (this.pos.z = e)
|
|
},
|
|
update: function() {},
|
|
render: function() {},
|
|
kill: function() {
|
|
for (var b = 0; b < this.meshes.length; b++) {
|
|
var c = this.meshes[b];
|
|
wgl.game.currentScene.stopAnimation(c);
|
|
c.dispose();
|
|
this.meshes.splice(b, 1);
|
|
b--
|
|
}
|
|
this._killed = !0
|
|
},
|
|
reset: function() {},
|
|
resize: function() {}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.tween").requires("impact.entity", "babylon.plugins.wgl-entity").defines(function() {
|
|
Array.prototype.indexOf || (Array.prototype.indexOf = function(b) {
|
|
for (var c = 0; c < this.length; ++c)
|
|
if (this[c] === b) return c;
|
|
return -1
|
|
});
|
|
ig.Entity.prototype.tweens = [];
|
|
ig.Entity.prototype._preTweenUpdate = ig.Entity.prototype.update;
|
|
ig.Entity.prototype.update = function() {
|
|
this._preTweenUpdate();
|
|
if (0 < this.tweens.length) {
|
|
for (var b = [], c = 0; c < this.tweens.length; c++) this.tweens[c].update(), this.tweens[c].complete || b.push(this.tweens[c]);
|
|
this.tweens = b
|
|
}
|
|
};
|
|
ig.Entity.prototype.tween = function(b, c, e) {
|
|
b = new ig.Tween(this, b, c, e);
|
|
this.tweens.push(b);
|
|
return b
|
|
};
|
|
ig.Entity.prototype.pauseTweens = function() {
|
|
for (var b = 0; b < this.tweens.length; b++) this.tweens[b].pause()
|
|
};
|
|
ig.Entity.prototype.resumeTweens = function() {
|
|
for (var b = 0; b < this.tweens.length; b++) this.tweens[b].resume()
|
|
};
|
|
ig.Entity.prototype.stopTweens = function(b) {
|
|
for (var c = 0; c < this.tweens.length; c++) this.tweens[c].stop(b)
|
|
};
|
|
wgl.Entity.prototype.tweens = [];
|
|
wgl.Entity.prototype._preTweenUpdate = wgl.Entity.prototype.update;
|
|
wgl.Entity.prototype.update = function() {
|
|
this._preTweenUpdate();
|
|
if (0 < this.tweens.length) {
|
|
for (var b = [], c = 0; c < this.tweens.length; c++) this.tweens[c].update(), this.tweens[c].complete || b.push(this.tweens[c]);
|
|
this.tweens = b
|
|
}
|
|
};
|
|
wgl.Entity.prototype.tween = function(b, c, e) {
|
|
b = new ig.Tween(this, b, c, e);
|
|
this.tweens.push(b);
|
|
return b
|
|
};
|
|
wgl.Entity.prototype.pauseTweens = function() {
|
|
for (var b = 0; b < this.tweens.length; b++) this.tweens[b].pause()
|
|
};
|
|
wgl.Entity.prototype.resumeTweens = function() {
|
|
for (var b = 0; b < this.tweens.length; b++) this.tweens[b].resume()
|
|
};
|
|
wgl.Entity.prototype.stopTweens = function(b) {
|
|
for (var c = 0; c < this.tweens.length; c++) this.tweens[c].stop(b)
|
|
};
|
|
ig.Tween = function(b, c, e, d) {
|
|
var g = {},
|
|
f = {},
|
|
m = {},
|
|
l = 0,
|
|
j = !1,
|
|
q = !1,
|
|
n = !1;
|
|
this.duration = e;
|
|
this.paused = this.complete = !1;
|
|
this.easing = ig.Tween.Easing.Linear.EaseNone;
|
|
this.onComplete = !1;
|
|
this.loop = this.delay = 0;
|
|
this.loopCount = -1;
|
|
ig.merge(this, d);
|
|
this.loopNum = this.loopCount;
|
|
this.chain = function(b) {
|
|
n = b
|
|
};
|
|
this.initEnd = function(b, c, d) {
|
|
if ("object" !== typeof c[b]) d[b] = c[b];
|
|
else
|
|
for (subprop in c[b]) d[b] || (d[b] = {}), this.initEnd(subprop,
|
|
c[b], d[b])
|
|
};
|
|
this.initStart = function(b, c, d, e) {
|
|
if ("object" !== typeof d[b]) "undefined" !== typeof c[b] && (e[b] = d[b]);
|
|
else
|
|
for (subprop in d[b]) e[b] || (e[b] = {}), "undefined" !== typeof c[b] && this.initStart(subprop, c[b], d[b], e[b])
|
|
};
|
|
this.start = function() {
|
|
this.paused = this.complete = !1;
|
|
this.loopNum = this.loopCount;
|
|
l = 0; - 1 == b.tweens.indexOf(this) && b.tweens.push(this);
|
|
q = !0;
|
|
j = new ig.Timer;
|
|
for (var d in c) this.initEnd(d, c, f);
|
|
for (d in f) this.initStart(d, f, b, g), this.initDelta(d, m, b, f)
|
|
};
|
|
this.initDelta = function(b, c, d, e) {
|
|
if ("object" !==
|
|
typeof e[b]) c[b] = e[b] - d[b];
|
|
else
|
|
for (subprop in e[b]) c[b] || (c[b] = {}), this.initDelta(subprop, c[b], d[b], e[b])
|
|
};
|
|
this.propUpdate = function(b, c, d, e, f) {
|
|
if ("object" !== typeof d[b]) c[b] = "undefined" != typeof d[b] ? d[b] + e[b] * f : c[b];
|
|
else
|
|
for (subprop in d[b]) this.propUpdate(subprop, c[b], d[b], e[b], f)
|
|
};
|
|
this.propSet = function(b, c, d) {
|
|
if ("object" !== typeof c[b]) d[b] = c[b];
|
|
else
|
|
for (subprop in c[b]) d[b] || (d[b] = {}), this.propSet(subprop, c[b], d[b])
|
|
};
|
|
this.update = function() {
|
|
if (!q) return !1;
|
|
if (this.delay) {
|
|
if (j.delta() < this.delay) return;
|
|
this.delay = 0;
|
|
j.reset()
|
|
}
|
|
if (this.paused || this.complete) return !1;
|
|
var c = (j.delta() + l) / this.duration,
|
|
c = 1 < c ? 1 : c,
|
|
d = this.easing(c);
|
|
for (property in m) this.propUpdate(property, b, g, m, d);
|
|
if (1 <= c) {
|
|
if (0 == this.loopNum || !this.loop) {
|
|
this.complete = !0;
|
|
if (this.onComplete) this.onComplete();
|
|
n && n.start();
|
|
return !1
|
|
}
|
|
if (this.loop == ig.Tween.Loop.Revert) {
|
|
for (property in g) this.propSet(property, g, b);
|
|
l = 0;
|
|
j.reset(); - 1 != this.loopNum && this.loopNum--
|
|
} else if (this.loop == ig.Tween.Loop.Reverse) {
|
|
c = {};
|
|
d = {};
|
|
ig.merge(c, f);
|
|
ig.merge(d, g);
|
|
ig.merge(g,
|
|
c);
|
|
ig.merge(f, d);
|
|
for (property in f) this.initDelta(property, m, b, f);
|
|
l = 0;
|
|
j.reset(); - 1 != this.loopNum && this.loopNum--
|
|
}
|
|
}
|
|
};
|
|
this.pause = function() {
|
|
this.paused = !0;
|
|
j && j.delta && (l += j.delta())
|
|
};
|
|
this.resume = function() {
|
|
this.paused = !1;
|
|
j && j.reset && j.reset()
|
|
};
|
|
this.stop = function(b) {
|
|
b && (this.loop = this.complete = this.paused = !1, l += e, this.update());
|
|
this.complete = !0
|
|
}
|
|
};
|
|
ig.Tween.Loop = {
|
|
Revert: 1,
|
|
Reverse: 2
|
|
};
|
|
ig.Tween.Easing = {
|
|
Linear: {},
|
|
Quadratic: {},
|
|
Cubic: {},
|
|
Quartic: {},
|
|
Quintic: {},
|
|
Sinusoidal: {},
|
|
Exponential: {},
|
|
Circular: {},
|
|
Elastic: {},
|
|
Back: {},
|
|
Bounce: {}
|
|
};
|
|
ig.Tween.Easing.Linear.EaseNone = function(b) {
|
|
return b
|
|
};
|
|
ig.Tween.Easing.Quadratic.EaseIn = function(b) {
|
|
return b * b
|
|
};
|
|
ig.Tween.Easing.Quadratic.EaseOut = function(b) {
|
|
return -b * (b - 2)
|
|
};
|
|
ig.Tween.Easing.Quadratic.EaseInOut = function(b) {
|
|
return 1 > (b *= 2) ? 0.5 * b * b : -0.5 * (--b * (b - 2) - 1)
|
|
};
|
|
ig.Tween.Easing.Cubic.EaseIn = function(b) {
|
|
return b * b * b
|
|
};
|
|
ig.Tween.Easing.Cubic.EaseOut = function(b) {
|
|
return --b * b * b + 1
|
|
};
|
|
ig.Tween.Easing.Cubic.EaseInOut = function(b) {
|
|
return 1 > (b *= 2) ? 0.5 * b * b * b : 0.5 * ((b -= 2) * b * b + 2)
|
|
};
|
|
ig.Tween.Easing.Quartic.EaseIn =
|
|
function(b) {
|
|
return b * b * b * b
|
|
};
|
|
ig.Tween.Easing.Quartic.EaseOut = function(b) {
|
|
return -(--b * b * b * b - 1)
|
|
};
|
|
ig.Tween.Easing.Quartic.EaseInOut = function(b) {
|
|
return 1 > (b *= 2) ? 0.5 * b * b * b * b : -0.5 * ((b -= 2) * b * b * b - 2)
|
|
};
|
|
ig.Tween.Easing.Quintic.EaseIn = function(b) {
|
|
return b * b * b * b * b
|
|
};
|
|
ig.Tween.Easing.Quintic.EaseOut = function(b) {
|
|
return (b -= 1) * b * b * b * b + 1
|
|
};
|
|
ig.Tween.Easing.Quintic.EaseInOut = function(b) {
|
|
return 1 > (b *= 2) ? 0.5 * b * b * b * b * b : 0.5 * ((b -= 2) * b * b * b * b + 2)
|
|
};
|
|
ig.Tween.Easing.Sinusoidal.EaseIn = function(b) {
|
|
return -Math.cos(b * Math.PI / 2) + 1
|
|
};
|
|
ig.Tween.Easing.Sinusoidal.EaseOut =
|
|
function(b) {
|
|
return Math.sin(b * Math.PI / 2)
|
|
};
|
|
ig.Tween.Easing.Sinusoidal.EaseInOut = function(b) {
|
|
return -0.5 * (Math.cos(Math.PI * b) - 1)
|
|
};
|
|
ig.Tween.Easing.Exponential.EaseIn = function(b) {
|
|
return 0 == b ? 0 : Math.pow(2, 10 * (b - 1))
|
|
};
|
|
ig.Tween.Easing.Exponential.EaseOut = function(b) {
|
|
return 1 == b ? 1 : -Math.pow(2, -10 * b) + 1
|
|
};
|
|
ig.Tween.Easing.Exponential.EaseInOut = function(b) {
|
|
return 0 == b ? 0 : 1 == b ? 1 : 1 > (b *= 2) ? 0.5 * Math.pow(2, 10 * (b - 1)) : 0.5 * (-Math.pow(2, -10 * (b - 1)) + 2)
|
|
};
|
|
ig.Tween.Easing.Circular.EaseIn = function(b) {
|
|
return -(Math.sqrt(1 - b * b) - 1)
|
|
};
|
|
ig.Tween.Easing.Circular.EaseOut = function(b) {
|
|
return Math.sqrt(1 - --b * b)
|
|
};
|
|
ig.Tween.Easing.Circular.EaseInOut = function(b) {
|
|
return 1 > (b /= 0.5) ? -0.5 * (Math.sqrt(1 - b * b) - 1) : 0.5 * (Math.sqrt(1 - (b -= 2) * b) + 1)
|
|
};
|
|
ig.Tween.Easing.Elastic.EaseIn = function(b) {
|
|
var c, e = 0.1,
|
|
d = 0.4;
|
|
if (0 == b) return 0;
|
|
if (1 == b) return 1;
|
|
d || (d = 0.3);
|
|
!e || 1 > e ? (e = 1, c = d / 4) : c = d / (2 * Math.PI) * Math.asin(1 / e);
|
|
return -(e * Math.pow(2, 10 * (b -= 1)) * Math.sin(2 * (b - c) * Math.PI / d))
|
|
};
|
|
ig.Tween.Easing.Elastic.EaseOut = function(b) {
|
|
var c, e = 0.1,
|
|
d = 0.4;
|
|
if (0 == b) return 0;
|
|
if (1 == b) return 1;
|
|
d || (d = 0.3);
|
|
!e || 1 > e ? (e = 1, c = d / 4) : c = d / (2 * Math.PI) * Math.asin(1 / e);
|
|
return e * Math.pow(2, -10 * b) * Math.sin(2 * (b - c) * Math.PI / d) + 1
|
|
};
|
|
ig.Tween.Easing.Elastic.EaseInOut = function(b) {
|
|
var c, e = 0.1,
|
|
d = 0.4;
|
|
if (0 == b) return 0;
|
|
if (1 == b) return 1;
|
|
d || (d = 0.3);
|
|
!e || 1 > e ? (e = 1, c = d / 4) : c = d / (2 * Math.PI) * Math.asin(1 / e);
|
|
return 1 > (b *= 2) ? -0.5 * e * Math.pow(2, 10 * (b -= 1)) * Math.sin(2 * (b - c) * Math.PI / d) : 0.5 * e * Math.pow(2, -10 * (b -= 1)) * Math.sin(2 * (b - c) * Math.PI / d) + 1
|
|
};
|
|
ig.Tween.Easing.Back.EaseIn = function(b) {
|
|
return b * b * (2.70158 * b - 1.70158)
|
|
};
|
|
ig.Tween.Easing.Back.EaseOut =
|
|
function(b) {
|
|
return (b -= 1) * b * (2.70158 * b + 1.70158) + 1
|
|
};
|
|
ig.Tween.Easing.Back.EaseInOut = function(b) {
|
|
return 1 > (b *= 2) ? 0.5 * b * b * (3.5949095 * b - 2.5949095) : 0.5 * ((b -= 2) * b * (3.5949095 * b + 2.5949095) + 2)
|
|
};
|
|
ig.Tween.Easing.Bounce.EaseIn = function(b) {
|
|
return 1 - ig.Tween.Easing.Bounce.EaseOut(1 - b)
|
|
};
|
|
ig.Tween.Easing.Bounce.EaseOut = function(b) {
|
|
return (b /= 1) < 1 / 2.75 ? 7.5625 * b * b : b < 2 / 2.75 ? 7.5625 * (b -= 1.5 / 2.75) * b + 0.75 : b < 2.5 / 2.75 ? 7.5625 * (b -= 2.25 / 2.75) * b + 0.9375 : 7.5625 * (b -= 2.625 / 2.75) * b + 0.984375
|
|
};
|
|
ig.Tween.Easing.Bounce.EaseInOut = function(b) {
|
|
return 0.5 >
|
|
b ? 0.5 * ig.Tween.Easing.Bounce.EaseIn(2 * b) : 0.5 * ig.Tween.Easing.Bounce.EaseOut(2 * b - 1) + 0.5
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.url-parameters").defines(function() {
|
|
ig.UrlParameters = ig.Class.extend({
|
|
init: function() {
|
|
switch (getQueryVariable("iphone")) {
|
|
case "true":
|
|
ig.ua.iPhone = !0, console.log("iPhone mode")
|
|
}
|
|
var b = getQueryVariable("webview");
|
|
if (b) switch (b) {
|
|
case "true":
|
|
ig.ua.is_uiwebview = !0, console.log("webview mode")
|
|
}
|
|
if (b = getQueryVariable("debug")) switch (b) {
|
|
case "true":
|
|
ig.game.showDebugMenu(), console.log("debug mode")
|
|
}
|
|
if (b = getQueryVariable("debugwgl")) switch (b) {
|
|
case "true":
|
|
wgl.debug.debug = !0, console.log("wgl debug mode")
|
|
}
|
|
switch (getQueryVariable("view")) {
|
|
case "stats":
|
|
ig.game.resetPlayerStats(),
|
|
ig.game.endGame()
|
|
}
|
|
getQueryVariable("ad")
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.director").requires("impact.impact").defines(function() {
|
|
ig.Director = ig.Class.extend({
|
|
init: function(b, c) {
|
|
this.game = b;
|
|
this.levels = [];
|
|
this.currentLevel = 0;
|
|
this.append(c)
|
|
},
|
|
loadLevel: function(b) {
|
|
for (var c in ig.sizeHandler.dynamicClickableEntityDivs) {
|
|
var e = ig.domHandler.getElementById("#" + c);
|
|
ig.domHandler.hide(e)
|
|
}
|
|
this.currentLevel = b;
|
|
this.game.loadLevel(this.levels[b]);
|
|
return !0
|
|
},
|
|
loadLevelWithoutEntities: function(b) {
|
|
this.currentLevel = b;
|
|
this.game.loadLevelWithoutEntities(this.levels[b]);
|
|
return !0
|
|
},
|
|
append: function(b) {
|
|
newLevels = [];
|
|
return "object" === typeof b ? (b.constructor === [].constructor ? newLevels = b : newLevels[0] = b, this.levels = this.levels.concat(newLevels), !0) : !1
|
|
},
|
|
nextLevel: function() {
|
|
return this.currentLevel + 1 < this.levels.length ? this.loadLevel(this.currentLevel + 1) : !1
|
|
},
|
|
previousLevel: function() {
|
|
return 0 <= this.currentLevel - 1 ? this.loadLevel(this.currentLevel - 1) : !1
|
|
},
|
|
jumpTo: function(b) {
|
|
var c = null;
|
|
for (i = 0; i < this.levels.length; i++) this.levels[i] == b && (c = i);
|
|
return 0 <= c ? this.loadLevel(c) : !1
|
|
},
|
|
firstLevel: function() {
|
|
return this.loadLevel(0)
|
|
},
|
|
lastLevel: function() {
|
|
return this.loadLevel(this.levels.length - 1)
|
|
},
|
|
reloadLevel: function() {
|
|
return this.loadLevel(this.currentLevel)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.impact-storage").requires("impact.game").defines(function() {
|
|
ig.Storage = ig.Class.extend({
|
|
staticInstantiate: function() {
|
|
return !ig.Storage.instance ? null : ig.Storage.instance
|
|
},
|
|
init: function() {
|
|
ig.Storage.instance = this
|
|
},
|
|
isCapable: function() {
|
|
return "undefined" !== typeof window.localStorage
|
|
},
|
|
isSet: function(b) {
|
|
return null !== this.get(b)
|
|
},
|
|
initUnset: function(b, c) {
|
|
null === this.get(b) && this.set(b, c)
|
|
},
|
|
get: function(b) {
|
|
if (!this.isCapable()) return null;
|
|
try {
|
|
return JSON.parse(localStorage.getItem(b))
|
|
} catch (c) {
|
|
return window.localStorage.getItem(b)
|
|
}
|
|
},
|
|
getInt: function(b) {
|
|
return ~~this.get(b)
|
|
},
|
|
getFloat: function(b) {
|
|
return parseFloat(this.get(b))
|
|
},
|
|
getBool: function(b) {
|
|
return !!this.get(b)
|
|
},
|
|
key: function(b) {
|
|
return this.isCapable() ? window.localStorage.key(b) : null
|
|
},
|
|
set: function(b, c) {
|
|
if (!this.isCapable()) return null;
|
|
try {
|
|
window.localStorage.setItem(b, JSON.stringify(c))
|
|
} catch (e) {
|
|
console.log(e)
|
|
}
|
|
},
|
|
setHighest: function(b, c) {
|
|
c > this.getFloat(b) && this.set(b, c)
|
|
},
|
|
remove: function(b) {
|
|
if (!this.isCapable()) return null;
|
|
window.localStorage.removeItem(b)
|
|
},
|
|
clear: function() {
|
|
if (!this.isCapable()) return null;
|
|
window.localStorage.clear()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.yandex").requires("impact.input", "impact.game", "plugins.audio.sound-handler").defines(function() {
|
|
ig.YandexAPI = ig.Class.extend({
|
|
version: "2.1.8",
|
|
verbose: !0,
|
|
API_ID: "YandexAPI",
|
|
sdkUrl: "https://yandex.ru/games/sdk/v2",
|
|
ysdk: null,
|
|
hasInitApp: !1,
|
|
hasResumedWebAudioContext: !1,
|
|
orientation: "portrait",
|
|
adCooldownTime: 180,
|
|
adCooldownTimeoutId: null,
|
|
currentAd: null,
|
|
currentAdURL: null,
|
|
cachedSfxVolume: 0,
|
|
cachedBgmVolume: 0,
|
|
isSdkReady: !1,
|
|
isAdShown: !1,
|
|
isAdCoolingDown: !1,
|
|
adCooldownTime_RV: 180,
|
|
isAdShown_RV: !1,
|
|
isAdCoolingDown_RV: !1,
|
|
isRVRewarded: !1,
|
|
ysdkHasPlayer: !1,
|
|
ysdkPlayer: null,
|
|
branding: {
|
|
text: ""
|
|
},
|
|
googleAnalytics: {
|
|
enabled: !0,
|
|
hasInit: !1,
|
|
gtag: {
|
|
id: "UA-119602304-2",
|
|
url: "https://www.googletagmanager.com/gtag/js"
|
|
}
|
|
},
|
|
init: function() {
|
|
this.verbose && console.log("Yandex API initialized ...");
|
|
this.setAlias();
|
|
//this.initGA();
|
|
//this.loadSdk();
|
|
this.setupEventHandler();
|
|
this.autoResumeAudioContext();
|
|
return this
|
|
},
|
|
initGA: function() {
|
|
if (this.googleAnalytics &&
|
|
this.googleAnalytics.enabled) {
|
|
if (this.googleAnalytics.hasInit) return !1;
|
|
var b = this.googleAnalytics.gtag.url + "?id=" + this.googleAnalytics.gtag.id,
|
|
c, e = document.getElementsByTagName("script")[0];
|
|
document.getElementById("gtag") || (c = document.createElement("script"), c.id = "gtag", c.src = b, c.async = !0, c.onload = function() {
|
|
function b() {
|
|
dataLayer.push(arguments)
|
|
}
|
|
c.onload = null;
|
|
window.dataLayer = window.dataLayer || [];
|
|
b("js", new Date);
|
|
b("config", this.googleAnalytics.gtag.id)
|
|
}.bind(this), e.parentNode.insertBefore(c, e))
|
|
}
|
|
},
|
|
loadSdk: function() {
|
|
var b, c = document.getElementsByTagName("script")[0];
|
|
document.getElementById("id-jssdk") || (b = document.createElement("script"), b.id = "id-jssdk", b.src = this.sdkUrl, c.parentNode.insertBefore(b, c), b.onload = this.onSdkReady.bind(this))
|
|
},
|
|
ysdkPlayerInfo_init: function(b) {
|
|
ysdk.getPlayer().then(function(c) {
|
|
this.ysdkPlayer = c;
|
|
this.ysdkHasPlayer = !0;
|
|
console.log("Yandex Player Save API: Yandex player is set.");
|
|
"function" === typeof b && (console.log("Yandex Player Save API: Calling player is set callback function..."),
|
|
b())
|
|
}.bind(this)).catch(function(b) {
|
|
console.log("Yandex Player Save API: Did not get yandex player. Error: " + b)
|
|
})
|
|
},
|
|
ysdkPlayerInfo_save: function() {
|
|
if (this.ysdkHasPlayer) {
|
|
var b = ig.game.sessionData;
|
|
console.log("Yandex Player Save API: Saving...");
|
|
try {
|
|
this.ysdkPlayer.setData(b, !0)
|
|
} catch (c) {
|
|
console.log("Yandex Player Save API: Saving failed. Error: " + c)
|
|
}
|
|
} else console.log("Yandex Player Save API: No player exists. Will not save data to Yandex.")
|
|
},
|
|
ysdkPlayerInfo_load: function(b) {
|
|
this.ysdkHasPlayer ? this.ysdkPlayer.getData().then(function(c) {
|
|
console.log("Yandex Player Save API: Loading...");
|
|
Object.keys(c).length == Object.keys(ig.game.sessionData).length ? (ig.game.sessionData = c, ig.game.saveAll(), console.log("Yandex Player Save API: Loaded game data."), "function" === typeof b && (console.log("Yandex Player Save API: Calling load data callback function..."), b())) : console.log("Yandex Player Save API: Data loaded is invalid.")
|
|
}.bind(this)) : console.log("Yandex Player Save API: No player exists. Will not load data to Yandex.")
|
|
},
|
|
setupEventHandler: function() {
|
|
var b = document.getElementById("canvas");
|
|
b && (b.addEventListener("mouseup", this.onTap.bind(this), !1), ig.ua.touchDevice && (b.addEventListener("touchend", this.onTap.bind(this), !1), b.addEventListener("MSPointerUp", this.onTap.bind(this), !1)))
|
|
},
|
|
onTap: function(b) {
|
|
try {
|
|
//this.requestFullscreen(b)
|
|
} catch (c) {}
|
|
this.resumeAudioContext(b)
|
|
},
|
|
requestFullscreen: function() {
|
|
try {
|
|
var b = document.documentElement;
|
|
b.requestFullscreen ? b.requestFullscreen().catch(function() {}) : b.webkitRequestFullscreen ? b.webkitRequestFullscreen().catch(function() {}) : b.mozRequestFullScreen ?
|
|
b.mozRequestFullScreen().catch(function() {}) : b.msRequestFullscreen ? b.msRequestFullscreen().catch(function() {}) : this.verbose && console.log("Yandex API has no request fullscreen method available")
|
|
} catch (c) {}
|
|
},
|
|
autoResumeAudioContext: function() {
|
|
Howler._autoResume && "function" === typeof Howler._autoResume && Howler._autoResume()
|
|
},
|
|
resumeAudioContext: function() {
|
|
this.hasResumedWebAudioContext || (this.autoResumeAudioContext(), Howler && (Howler._audioUnlocked || "function" === typeof Howler._unlockAudio && Howler._unlockAudio(),
|
|
Howler.ctx && "running" !== Howler.ctx.state && Howler.ctx.resume().then(function() {
|
|
this.hasResumedWebAudioContext = !0;
|
|
this.verbose && console.log("Yandex API has resumed WebAudio Context")
|
|
}.bind(this))), ig && (ig.webaudio_ctx && ig.webaudio_ctx.state && "running" !== ig.webaudio_ctx.state && ig.webaudio_ctx.resume().then(function() {
|
|
this.hasResumedWebAudioContext = !0;
|
|
this.verbose && console.log("Yandex API has resumed WebAudio Context")
|
|
}.bind(this)), ig.soundHandler && ig.soundHandler.bgmPlayer && ig.soundHandler.bgmPlayer.webaudio &&
|
|
ig.soundHandler.bgmPlayer.webaudio.context && ig.soundHandler.bgmPlayer.webaudio.context.state && "running" !== ig.soundHandler.bgmPlayer.webaudio.context.state && ig.soundHandler.bgmPlayer.webaudio.context.resume().then(function() {
|
|
this.hasResumedWebAudioContext = !0;
|
|
this.verbose && console.log("Yandex API has resumed WebAudio Context")
|
|
}.bind(this))))
|
|
},
|
|
initApp: function() {
|
|
if (!this.isSdkReady) return this.verbose && console.log("Yandex SDK is not ready"), !1;
|
|
if (this.hasInitApp) return this.verbose && console.log("Yandex SDK has already initialised id"),
|
|
!1;
|
|
this.verbose && console.log("Yandex SDK is initialising App");
|
|
this.ysdk = YaGames.init({
|
|
yandexApp: {
|
|
enabled: !0
|
|
},
|
|
adv: {
|
|
onAdvClose: this.hideAd.bind(this)
|
|
},
|
|
screen: {
|
|
fullscreen: !0,
|
|
orientation: this.getOrientation(),
|
|
lock: !0
|
|
}
|
|
}).then(function(b) {
|
|
this.ysdk = b;
|
|
ig.ysdk = window.ysdk = this.ysdk
|
|
});
|
|
this.hasInitApp = !0
|
|
},
|
|
getOrientation: function() {
|
|
ig.ua.mobile ? "undefined" !== typeof ig.sizeHandler ? this.orientation = ig.sizeHandler.portraitMode ? "portrait" : "landscape" : "undefined" !== typeof portraitMode && (this.orientation = portraitMode ?
|
|
"portrait" : "landscape") : "undefined" !== typeof ig.sizeHandler ? ig.sizeHandler.desktop && ig.sizeHandler.desktop.actualResolution && (this.orientation = ig.sizeHandler.desktop.actualResolution.x <= ig.sizeHandler.desktop.actualResolution.y ? "portrait" : "landscape") : "undefined" !== typeof desktopWidth && "undefined" !== typeof desktopHeight && (this.orientation = desktopWidth <= desktopHeight ? "portrait" : "landscape");
|
|
return this.orientation
|
|
},
|
|
onSdkReady: function() {
|
|
this.verbose && console.log("Yandex SDK is loaded and ready");
|
|
this.isSdkReady = !0;
|
|
this.hasInitApp || this.initApp()
|
|
},
|
|
setAlias: function() {
|
|
ig.yandex = this;
|
|
ig.global.yandex = window.yandex = this
|
|
},
|
|
muteAudio: function() {
|
|
ig.soundHandler.sfxPlayer.volume(0);
|
|
ig.soundHandler.bgmPlayer.volume(0)
|
|
},
|
|
unmuteAudio: function() {
|
|
this.setVolumeFromCache()
|
|
},
|
|
cacheVolume: function() {
|
|
this.cacheSfxVolume();
|
|
this.cacheBgmVolume()
|
|
},
|
|
cacheSfxVolume: function() {
|
|
ig && "undefined" !== typeof ig.soundHandler && ("undefined" !== typeof ig.soundHandler.sfxPlayer && "function" === typeof ig.soundHandler.sfxPlayer.getVolume) && (this.cachedSfxVolume =
|
|
ig.soundHandler.sfxPlayer.getVolume())
|
|
},
|
|
cacheBgmVolume: function() {
|
|
ig && "undefined" !== typeof ig.soundHandler && ("undefined" !== typeof ig.soundHandler.bgmPlayer && "function" === typeof ig.soundHandler.bgmPlayer.getVolume) && (this.cachedBgmVolume = ig.soundHandler.bgmPlayer.getVolume())
|
|
},
|
|
setVolumeFromCache: function() {
|
|
this.setSfxVolumeFromCache();
|
|
this.setBgmVolumeFromCache()
|
|
},
|
|
setSfxVolumeFromCache: function() {
|
|
0 < this.cachedSfxVolume && ig && "undefined" !== typeof ig.soundHandler && "undefined" !== typeof ig.soundHandler.sfxPlayer &&
|
|
"function" === typeof ig.soundHandler.sfxPlayer.volume && ig.soundHandler.sfxPlayer.volume(this.cachedSfxVolume)
|
|
},
|
|
setBgmVolumeFromCache: function() {
|
|
0 < this.cachedBgmVolume && ig && "undefined" !== typeof ig.soundHandler && "undefined" !== typeof ig.soundHandler.bgmPlayer && "function" === typeof ig.soundHandler.bgmPlayer.volume && ig.soundHandler.bgmPlayer.volume(this.cachedBgmVolume)
|
|
},
|
|
startAdCooldown: function() {
|
|
this.isAdCoolingDown || (this.isAdCoolingDown = !0, this.adCooldownTimeoutId = window.setTimeout(this.stopAdCooldown.bind(this),
|
|
1E3 * this.adCooldownTime), this.verbose && console.log("Yandex API has started cooling down."))
|
|
},
|
|
stopAdCooldown: function() {
|
|
this.isAdCoolingDown && (this.isAdCoolingDown = !1, window.clearTimeout(this.adCooldownTimeoutId), this.verbose && console.log("Yandex API has ended cooling down."))
|
|
},
|
|
showAd: function(b) {
|
|
this.isSdkReady ? this.isAdShown ? (this.verbose && console.log("Yandex API is already showing an ad"), "function" === typeof b && b()) : this.isAdCoolingDown ? this.verbose && console.log("Yandex API is cooling down.") : (this.cacheVolume(),
|
|
ysdk.adv.showFullscreenAdv({
|
|
callbacks: {
|
|
onClose: function() {
|
|
this.verbose && console.log("Yandex Ad is closed");
|
|
"function" === typeof b && (window.focus(), b())
|
|
}.bind(this),
|
|
onOpen: function() {
|
|
this.onAdShow();
|
|
this.verbose && console.log("Yandex Ad is opened")
|
|
}.bind(this),
|
|
onError: function(b) {
|
|
this.verbose && console.log("Yandex Ad has error", b)
|
|
}.bind(this),
|
|
onOffline: function() {
|
|
this.verbose && console.log("Yandex Ad is offline")
|
|
}.bind(this)
|
|
}
|
|
})) : (this.verbose && console.log("Yandex SDK is not ready"), "function" === typeof b &&
|
|
b())
|
|
},
|
|
hideAd: function() {
|
|
this.onAdHide();
|
|
var b = document.getElementById("game");
|
|
b.style.visibility = "visible";
|
|
b.style.display = "block"
|
|
},
|
|
onAdShow: function() {
|
|
this.isSdkReady ? this.isAdShown ? this.verbose && console.log("Yandex API is already showing an ad") : (this.verbose && console.log("Yandex API showing ad"), this.isAdCoolingDown ? (this.verbose && console.log("Yandex API is cooling down."), "function" === typeof callback && callback()) : (this.startAdCooldown(), document.getElementById("game"), ig && (ig.game && ("function" ===
|
|
typeof ig.game.pauseGame && ig.game.pauseGame(!0), "function" === typeof ig.game.pause && ig.game.pause(!0)), ig.soundHandler && this.muteAudio()), this.isAdShown = !0)) : this.verbose && console.log("Yandex SDK is not ready")
|
|
},
|
|
onAdHide: function() {
|
|
this.isAdShown ? (this.verbose && console.log("Yandex API hiding ad"), this.isAdShown = !1, document.getElementById("game").style.visibility = "visible", ig && (ig.game && ("function" === typeof ig.game.resumeGame && ig.game.resumeGame(!0), "function" === typeof ig.game.resume && ig.game.resume(!0)),
|
|
ig.soundHandler && this.unmuteAudio()), window.focus()) : this.verbose && console.log("Yandex API has already hide the ad")
|
|
},
|
|
showRVAd: function(b) {
|
|
this.isSdkReady ? this.isAdShown_RV ? this.verbose && console.log("Yandex RV Ads is already showing") : (this.cacheVolume(), ysdk.adv.showRewardedVideo({
|
|
callbacks: {
|
|
onOpen: function() {
|
|
this.isRVRewarded = !1;
|
|
this.onRVAdShow();
|
|
this.verbose && console.log("Yandex RV Ad is opened")
|
|
}.bind(this),
|
|
onRewarded: function() {
|
|
console.log("Yandex RV is rewarded");
|
|
this.isRVRewarded = !0
|
|
}.bind(this),
|
|
onClose: function() {
|
|
this.onRVAdHide();
|
|
this.verbose && console.log("Yandex RV Ad is closed");
|
|
window.focus();
|
|
"function" === typeof b && this.isRVRewarded && b()
|
|
}.bind(this),
|
|
onError: function(b) {
|
|
this.onRVAdHide();
|
|
this.verbose && console.log("Yandex Ad has error", b)
|
|
}.bind(this)
|
|
}
|
|
})) : this.verbose && console.log("Yandex SDK is not ready")
|
|
},
|
|
onRVAdShow: function() {
|
|
this.isSdkReady ? this.isAdShown_RV ? this.verbose && console.log("Yandex RV Ad already showing") : (this.verbose && console.log("Yandex RV Ad is showing"), document.getElementById("game"),
|
|
ig && (ig.game && ("function" === typeof ig.game.pauseGame && ig.game.pauseGame(!0), "function" === typeof ig.game.pause && ig.game.pause(!0)), ig.soundHandler && this.muteAudio()), this.isAdShown_RV = !0) : this.verbose && console.log("Yandex SDK is not ready")
|
|
},
|
|
onRVAdHide: function() {
|
|
this.isAdShown_RV ? (this.verbose && console.log("Yandex API hiding RV Ad"), this.isAdShown_RV = !1, document.getElementById("game").style.visibility = "visible", ig && (ig.game && ("function" === typeof ig.game.resumeGame && ig.game.resumeGame(!0), "function" ===
|
|
typeof ig.game.resume && ig.game.resume(!0)), ig.soundHandler && this.unmuteAudio())) : (this.verbose && console.log("Yandex API has already hide the RV Ad"), ig.game && ("function" === typeof ig.game.resumeGame && ig.game.resumeGame(!0), "function" === typeof ig.game.resume && ig.game.resume(!0)));
|
|
window.focus()
|
|
},
|
|
drawBranding: function(b, c, e, d) {
|
|
this.branding && this.branding.text && (b = b || ig.system.context, c = c || 10, e = e || ig.system.height - 20, d = ig.merge({
|
|
fontSize: 20,
|
|
fontFamily: "luckiest-guy",
|
|
textAlign: "left",
|
|
textBaseline: "alphabetic",
|
|
fillStyle: "#000000",
|
|
lineWidth: 4,
|
|
strokeStyle: "#FFFFFF"
|
|
}, d), b.save(), b.fillStyle = d.fillStyle, b.textAlign = d.textAlign, b.lineJoin = "miter", b.miterLimit = 2, b.font = d.fontSize + "px " + d.fontFamily, 0 < d.lineWidth && (b.lineWidth = d.lineWidth, b.strokeStyle = d.strokeStyle, b.strokeText(this.branding.text, c, e)), b.fillText(this.branding.text, c, e), b.restore())
|
|
}
|
|
});
|
|
ig.GdMessage = ig.Entity.extend({
|
|
size: {
|
|
x: 1,
|
|
y: 1
|
|
},
|
|
_waitTimer: !1,
|
|
_prePos: !1,
|
|
_inPos: !1,
|
|
_outPos: !1,
|
|
_globalAlpha: 1,
|
|
zIndex: 20,
|
|
message: {
|
|
success: "Yay, you got the reward!",
|
|
fail: "Reward is not available. Please try again later!",
|
|
_current: ""
|
|
},
|
|
font: {
|
|
family: "Arial",
|
|
size: 20,
|
|
color: "white",
|
|
shiftY: 8
|
|
},
|
|
box: {
|
|
width: 450,
|
|
height: 70,
|
|
color: "rgba(0,0,0,0.8)"
|
|
},
|
|
outline: {
|
|
color: "white",
|
|
size: 2
|
|
},
|
|
transitionSpeed: 0.25,
|
|
waitDelay: 2,
|
|
targetPos: !1,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.assignInitProp();
|
|
this.box && (this.box.halfWidth = 0.5 * this.box.width, this.box.halfHeight = 0.5 * this.box.height);
|
|
this._hide(!0)
|
|
},
|
|
assignInitProp: function() {
|
|
this._inPos || (this._inPos = {
|
|
x: 0.5 * ig.system.width,
|
|
y: 0.5 * ig.system.height
|
|
});
|
|
this.targetPos && ig.merge(this._inPos, this.targetPos);
|
|
this._prePos || (this._prePos = {
|
|
x: 0.5 * ig.system.width,
|
|
y: this._inPos.y + 50
|
|
});
|
|
this._outPos || (this._outPos = {
|
|
x: 0.5 * ig.system.width,
|
|
y: this._inPos.y - 50
|
|
})
|
|
},
|
|
show: function(b) {
|
|
this.pos = ig.copy(this._prePos);
|
|
this._globalAlpha = 0;
|
|
this.message._current = b ? this.message.success : this.message.fail;
|
|
this.tween({
|
|
pos: ig.copy(this._inPos),
|
|
_globalAlpha: 1
|
|
}, this.transitionSpeed, {
|
|
easing: ig.Tween.Easing.Quartic.EaseOut,
|
|
onComplete: function() {
|
|
this._waitTimer = new ig.Timer(this.waitDelay)
|
|
}.bind(this)
|
|
}).start()
|
|
},
|
|
_hide: function(b) {
|
|
b ? (this.pos = ig.copy(this._prePos), this._globalAlpha = 0) : this.tween({
|
|
pos: ig.copy(this._outPos),
|
|
_globalAlpha: 0
|
|
}, this.transitionSpeed, {
|
|
easing: ig.Tween.Easing.Quartic.EaseOut,
|
|
onComplete: function() {
|
|
this.kill()
|
|
}.bind(this)
|
|
}).start()
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this._waitTimer && 0 < this._waitTimer.delta() && (delete this._waitTimer, this._hide())
|
|
},
|
|
draw: function() {
|
|
this.parent();
|
|
var b = ig.system.context;
|
|
b.save();
|
|
b.globalAlpha = this._globalAlpha;
|
|
this._drawBox();
|
|
this._drawOutline();
|
|
this._drawText();
|
|
b.restore()
|
|
},
|
|
_drawBox: function() {
|
|
if (this.box) {
|
|
var b = ig.system.context;
|
|
b.fillStyle = this.box.color;
|
|
b.fillRect(this.pos.x - this.box.halfWidth, this.pos.y - this.box.halfHeight, this.box.width, this.box.height)
|
|
}
|
|
},
|
|
_drawOutline: function() {
|
|
if (this.outline) {
|
|
var b = ig.system.context;
|
|
b.strokeStyle = this.outline.color;
|
|
b.lineWidth = this.outline.size;
|
|
b.strokeRect(this.pos.x - this.box.halfWidth, this.pos.y - this.box.halfHeight, this.box.width, this.box.height)
|
|
}
|
|
},
|
|
_drawText: function() {
|
|
var b = ig.system.context;
|
|
b.font = this.font.size +
|
|
"px " + this.font.family;
|
|
b.fillStyle = this.font.color;
|
|
b.textAlign = "center";
|
|
b.fillText(this.message._current, this.pos.x, this.pos.y + this.font.shiftY)
|
|
}
|
|
});
|
|
ig.yandex = new ig.YandexAPI
|
|
});
|
|
this.START_BRANDING_SPLASH;
|
|
ig.baked = !0;
|
|
ig.module("plugins.branding.splash").requires("impact.impact", "impact.entity").defines(function() {
|
|
ig.BrandingSplash = ig.Class.extend({
|
|
init: function() {
|
|
ig.game.spawnEntity(EntityBranding, 0, 0)
|
|
}
|
|
});
|
|
EntityBranding = ig.Entity.extend({
|
|
gravityFactor: 0,
|
|
size: {
|
|
x: 32,
|
|
y: 32
|
|
},
|
|
splash: new ig.Image("branding/splash1.png"),
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
320 >= ig.system.width ? (this.size.x = 320, this.size.y = 200) : (this.size.x = 480, this.size.y = 240);
|
|
this.pos.x = (ig.system.width - this.size.x) / 2;
|
|
this.pos.y = -this.size.y - 200;
|
|
this.endPosY = (ig.system.height - this.size.y) / 2;
|
|
b = this.tween({
|
|
pos: {
|
|
y: this.endPosY
|
|
}
|
|
}, 0.5, {
|
|
easing: ig.Tween.Easing.Bounce.EaseIn
|
|
});
|
|
c = this.tween({}, 2.5, {
|
|
onComplete: function() {
|
|
ig.game.director.loadLevel(ig.game.director.currentLevel)
|
|
}
|
|
});
|
|
b.chain(c);
|
|
b.start();
|
|
this.currentAnim = this.anims.idle
|
|
},
|
|
createClickableLayer: function() {
|
|
console.log("Build clickable layer");
|
|
this.checkClickableLayer("branding-splash", _SETTINGS.Branding.Logo.Link, _SETTINGS.Branding.Logo.NewWindow)
|
|
},
|
|
doesClickableLayerExist: function(b) {
|
|
for (k in dynamicClickableEntityDivs)
|
|
if (k ==
|
|
b) return !0;
|
|
return !1
|
|
},
|
|
checkClickableLayer: function(b, c, e) {
|
|
"undefined" == typeof wm && (this.doesClickableLayerExist(b) ? (ig.game.showOverlay([b]), $("#" + b).find("[href]").attr("href", c)) : this.createClickableOutboundLayer(b, c, "media/graphics/misc/invisible.png", e))
|
|
},
|
|
createClickableOutboundLayer: function(b, c, e, d) {
|
|
var g = ig.$new("div");
|
|
g.id = b;
|
|
document.body.appendChild(g);
|
|
g = $("#" + g.id);
|
|
g.css("float", "left");
|
|
g.css("position", "absolute");
|
|
if (ig.ua.mobile) {
|
|
var f = window.innerHeight / mobileHeight,
|
|
m = window.innerWidth /
|
|
mobileWidth;
|
|
g.css("left", this.pos.x * m);
|
|
g.css("top", this.pos.y * f);
|
|
g.css("width", this.size.x * m);
|
|
g.css("height", this.size.y * f)
|
|
} else f = w / 2 - destW / 2, m = h / 2 - destH / 2, console.log(f, m), g.css("left", f + this.pos.x * multiplier), g.css("top", m + this.pos.y * multiplier), g.css("width", this.size.x * multiplier), g.css("height", this.size.y * multiplier);
|
|
d ? g.html("<a target='_blank' href='" + c + "'><img style='width:100%;height:100%' src='" + e + "'></a>") : g.html("<a href='" + c + "'><img style='width:100%;height:100%' src='" + e + "'></a>");
|
|
dynamicClickableEntityDivs[b] = {};
|
|
dynamicClickableEntityDivs[b].width = this.size.x * multiplier;
|
|
dynamicClickableEntityDivs[b].height = this.size.y * multiplier;
|
|
dynamicClickableEntityDivs[b].entity_pos_x = this.pos.x;
|
|
dynamicClickableEntityDivs[b].entity_pos_y = this.pos.y
|
|
},
|
|
draw: function() {
|
|
ig.system.context.fillStyle = "#ffffff";
|
|
ig.system.context.fillRect(0, 0, ig.system.width, ig.system.height);
|
|
ig.system.context.fillStyle = "#000";
|
|
ig.system.context.font = "12px Arial";
|
|
ig.system.context.textAlign = "left";
|
|
320 >= ig.system.width ?
|
|
ig.system.context.fillText("powered by MarketJS.com", ig.system.width - 150, ig.system.height - 15) : ig.system.context.fillText("powered by MarketJS.com", ig.system.width - 160, ig.system.height - 15);
|
|
this.parent();
|
|
this.splash && ig.system.context.drawImage(this.splash.data, 0, 0, this.splash.data.width, this.splash.data.height, this.pos.x, this.pos.y, this.size.x, this.size.y)
|
|
}
|
|
})
|
|
});
|
|
this.END_BRANDING_SPLASH;
|
|
ig.baked = !0;
|
|
ig.module("plugins.datastructure.binary-heap").defines(function() {
|
|
BinaryHeap = ig.Class.extend({
|
|
content: [],
|
|
getValue: null,
|
|
minHeap: !0,
|
|
tagName: "BinaryHeap",
|
|
init: function(b, c) {
|
|
this.getValue = b;
|
|
c && (this.minHeap = !1)
|
|
},
|
|
push: function(b) {
|
|
this.content.push(b);
|
|
this.sinkDown(this.content.length - 1)
|
|
},
|
|
pop: function() {
|
|
var b = this.content[0],
|
|
c = this.content.pop();
|
|
0 < this.content.length && (this.content[0] = c, this.bubbleUp(0));
|
|
return b
|
|
},
|
|
remove: function(b) {
|
|
var c = this.content.indexOf(b),
|
|
e = this.content.pop();
|
|
c !== this.content.length -
|
|
1 && (this.content[c] = e, this.minHeap ? this.getValue(e) < this.getValue(b) ? this.sinkDown(c) : this.bubbleUp(c) : this.getValue(e) > this.getValue(b) ? this.sinkDown(c) : this.bubbleUp(c))
|
|
},
|
|
size: function() {
|
|
return this.content.length
|
|
},
|
|
rescoreElement: function(b) {
|
|
this.sinkDown(this.content.indexOf(b))
|
|
},
|
|
sinkDown: function(b) {
|
|
for (var c = this.content[b]; 0 < b;) {
|
|
var e = (b + 1 >> 1) - 1,
|
|
d = this.content[e];
|
|
if (this.minHeap)
|
|
if (this.getValue(c) < this.getValue(d)) this.content[e] = c, this.content[b] = d, b = e;
|
|
else break;
|
|
else if (this.getValue(c) >
|
|
this.getValue(d)) this.content[e] = c, this.content[b] = d, b = e;
|
|
else break
|
|
}
|
|
},
|
|
bubbleUp: function(b) {
|
|
for (var c = this.content.length, e = this.content[b], d = this.getValue(e);;) {
|
|
var g = b + 1 << 1,
|
|
f = g - 1,
|
|
m = null,
|
|
l;
|
|
f < c && (l = this.getValue(this.content[f]), this.minHeap ? l < d && (m = f) : l > d && (m = f));
|
|
if (g < c)
|
|
if (f = this.getValue(this.content[g]), this.minHeap) {
|
|
if (f < (null === m ? d : l)) m = g
|
|
} else if (f > (null === m ? d : l)) m = g;
|
|
if (null !== m) this.content[b] = this.content[m], this.content[m] = e, b = m;
|
|
else break
|
|
}
|
|
},
|
|
empty: function() {
|
|
for (; 0 < this.content.length;) this.content.pop()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.buttons.button").requires("impact.entity").defines(function() {
|
|
EntityButton = ig.Entity.extend({
|
|
collides: ig.Entity.COLLIDES.NEVER,
|
|
type: ig.Entity.TYPE.A,
|
|
size: new BABYLON.Vector2(48, 48),
|
|
fillColor: null,
|
|
zIndex: 95E3,
|
|
pos: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
name: "button",
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
!ig.global.wm && e && !isNaN(e.zIndex) && (this.zIndex = e.zIndex);
|
|
b = Math.floor(256 * Math.random());
|
|
c = Math.floor(256 * Math.random());
|
|
e = Math.floor(256 * Math.random());
|
|
this.fillColor = "rgba(" + b + "," + e + "," + c + ",1)"
|
|
},
|
|
clicked: function() {
|
|
throw "no implementation on clicked()";
|
|
},
|
|
clicking: function() {
|
|
throw "no implementation on clicking()";
|
|
},
|
|
released: function() {
|
|
throw "no implementation on released()";
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.clickable-div-layer").defines(function() {
|
|
ClickableDivLayer = ig.Class.extend({
|
|
pos: new BABYLON.Vector2(0, 0),
|
|
size: new BABYLON.Vector2(0, 0),
|
|
identifier: null,
|
|
invisImagePath: "media/graphics/misc/invisible.png",
|
|
init: function(b) {
|
|
this.pos = new BABYLON.Vector2(b.pos.x, b.pos.y);
|
|
this.size = new BABYLON.Vector2(b.size.x, b.size.y);
|
|
var c = "more-games",
|
|
e = "www.google.com",
|
|
d = !1;
|
|
b.div_layer_name && (c = b.div_layer_name);
|
|
b.link && (e = b.link);
|
|
b.newWindow && (d = b.newWindow);
|
|
this.createClickableLayer(c, e, d)
|
|
},
|
|
createClickableLayer: function(b,
|
|
c, e) {
|
|
this.identifier = b;
|
|
var d = ig.domHandler.getElementById("#" + b);
|
|
d ? (ig.domHandler.show(d), ig.domHandler.attr(d, "href", c)) : this.createClickableOutboundLayer(b, c, this.invisImagePath, e)
|
|
},
|
|
update: function(b, c, e, d) {
|
|
this.pos.x == b && this.pos.y == c || (this.pos.x = b, this.pos.y = c, ig.sizeHandler.dynamicClickableEntityDivs[this.identifier] = {}, ig.sizeHandler.dynamicClickableEntityDivs[this.identifier].width = e, ig.sizeHandler.dynamicClickableEntityDivs[this.identifier].height = d, ig.sizeHandler.dynamicClickableEntityDivs[this.identifier].entity_pos_x =
|
|
this.pos.x, ig.sizeHandler.dynamicClickableEntityDivs[this.identifier].entity_pos_y = this.pos.y, ig.sizeHandler.resizeLayers())
|
|
},
|
|
createClickableOutboundLayer: function(b, c, e, d) {
|
|
var g = ig.domHandler.create("div");
|
|
ig.domHandler.attr(g, "id", b);
|
|
var f = ig.domHandler.create("a");
|
|
d ? (ig.domHandler.attr(f, "href", c), ig.domHandler.attr(f, "target", "_blank")) : ig.domHandler.attr(f, "href", c);
|
|
c = ig.domHandler.create("img");
|
|
ig.domHandler.css(c, {
|
|
width: "100%",
|
|
height: "100%"
|
|
});
|
|
ig.domHandler.attr(c, "src", e);
|
|
e = Math.min(ig.sizeHandler.scaleRatioMultiplier.x,
|
|
ig.sizeHandler.scaleRatioMultiplier.y);
|
|
d = ig.domHandler.getElementById("#canvas");
|
|
var m = ig.domHandler.getOffsets(d);
|
|
d = m.left;
|
|
m = m.top;
|
|
d = Math.floor(d + this.pos.x * e) + "px";
|
|
var m = Math.floor(m + this.pos.y * e) + "px",
|
|
l = Math.floor(this.size.x * e) + "px",
|
|
j = Math.floor(this.size.y * e) + "px";
|
|
ig.domHandler.css(g, {
|
|
"float": "left",
|
|
position: "absolute",
|
|
left: d,
|
|
top: m,
|
|
width: l,
|
|
height: j,
|
|
"z-index": 3
|
|
});
|
|
ig.domHandler.addEvent(g, "mousemove", ig.input.mousemove.bind(ig.input), !1);
|
|
ig.domHandler.appendChild(f, c);
|
|
ig.domHandler.appendChild(g,
|
|
f);
|
|
ig.domHandler.appendToBody(g);
|
|
ig.sizeHandler.dynamicClickableEntityDivs[b] = {};
|
|
ig.sizeHandler.dynamicClickableEntityDivs[b].width = this.size.x;
|
|
ig.sizeHandler.dynamicClickableEntityDivs[b].height = this.size.y;
|
|
ig.sizeHandler.dynamicClickableEntityDivs[b].entity_pos_x = this.pos.x;
|
|
ig.sizeHandler.dynamicClickableEntityDivs[b].entity_pos_y = this.pos.y;
|
|
b = ig.sizeHandler.dynamicClickableEntityDivs;
|
|
for (var q in b) e = Math.min(ig.sizeHandler.scaleRatioMultiplier.x, ig.sizeHandler.scaleRatioMultiplier.y), g = ig.domHandler.getElementById("#" +
|
|
q), j = b[q].entity_pos_x, l = b[q].entity_pos_y, c = b[q].width, f = b[q].height, d = ig.domHandler.getElementById("#canvas"), m = ig.domHandler.getOffsets(d), ig.ua.mobile ? (d = m.left, m = m.top, ig.sizeHandler.disableStretchToFitOnMobileFlag ? (d = Math.floor(d + j * ig.sizeHandler.scaleRatioMultiplier.x) + "px", m = Math.floor(m + l * ig.sizeHandler.scaleRatioMultiplier.y) + "px", l = Math.floor(c * ig.sizeHandler.scaleRatioMultiplier.x) + "px", j = Math.floor(f * ig.sizeHandler.scaleRatioMultiplier.y) + "px") : (d = Math.floor(j * ig.sizeHandler.sizeRatio.x) +
|
|
"px", m = Math.floor(l * ig.sizeHandler.sizeRatio.y) + "px", l = Math.floor(c * ig.sizeHandler.sizeRatio.x) + "px", j = Math.floor(f * ig.sizeHandler.sizeRatio.y) + "px")) : (d = m.left, m = m.top, d = Math.floor(d + j * e) + "px", m = Math.floor(m + l * e) + "px", l = Math.floor(c * e) + "px", j = Math.floor(f * e) + "px"), ig.domHandler.css(g, {
|
|
"float": "left",
|
|
position: "absolute",
|
|
left: d,
|
|
top: m,
|
|
width: l,
|
|
height: j,
|
|
"z-index": 3
|
|
}), b[q]["font-size"] && ig.domHandler.css(g, {
|
|
"font-size": b[q]["font-size"] * e + "px"
|
|
})
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.buttons.button-branding-logo").requires("game.entities.buttons.button", "plugins.clickable-div-layer").defines(function() {
|
|
EntityButtonBrandingLogo = EntityButton.extend({
|
|
type: ig.Entity.TYPE.A,
|
|
gravityFactor: 0,
|
|
logo: new ig.AnimationSheet("branding/logo.png", _SETTINGS.Branding.Logo.Width, _SETTINGS.Branding.Logo.Height),
|
|
zIndex: 10001,
|
|
size: {
|
|
x: 64,
|
|
y: 66
|
|
},
|
|
clickableLayer: null,
|
|
link: null,
|
|
newWindow: !1,
|
|
div_layer_name: "branding-logo",
|
|
name: "brandinglogo",
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
if (!ig.global.wm) {
|
|
if ("undefined" == typeof wm)
|
|
if (_SETTINGS.Branding.Logo.Enabled) this.size.x = _SETTINGS.Branding.Logo.Width, this.size.y = _SETTINGS.Branding.Logo.Height, this.anims.idle = new ig.Animation(this.logo, 0, [0], !0), this.currentAnim = this.anims.idle, e && e.centralize && (this.pos.x = (ig.system.width >>> 1) - (this.size.x >>> 1), console.log("centralize true ... centering branded logo ...")), _SETTINGS.Branding.Logo.LinkEnabled && (this.link = _SETTINGS.Branding.Logo.Link, this.newWindow = _SETTINGS.Branding.Logo.NewWindow,
|
|
this.clickableLayer = new ClickableDivLayer(this));
|
|
else {
|
|
this.kill();
|
|
return
|
|
} this.div_layer_name = e.div_layer_name ? e.div_layer_name : "branding-logo"
|
|
}
|
|
},
|
|
show: function() {
|
|
var b = ig.domHandler.getElementById("#" + this.div_layer_name);
|
|
ig.domHandler.show(b)
|
|
},
|
|
hide: function() {
|
|
var b = ig.domHandler.getElementById("#" + this.div_layer_name);
|
|
ig.domHandler.hide(b)
|
|
},
|
|
clicked: function() {},
|
|
clicking: function() {},
|
|
released: function() {}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.branding-logo-placeholder").requires("impact.entity", "game.entities.buttons.button-branding-logo").defines(function() {
|
|
EntityBrandingLogoPlaceholder = ig.Entity.extend({
|
|
gravityFactor: 0,
|
|
size: {
|
|
x: 32,
|
|
y: 32
|
|
},
|
|
_wmDrawBox: !0,
|
|
_wmBoxColor: "rgba(0, 0, 255, 0.7)",
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
if (e) switch (console.log("settings found ... using that div layer name"), b = e.div_layer_name, console.log("settings.centralize:", e.centralize), e.centralize) {
|
|
case "true":
|
|
console.log("centralize true");
|
|
centralize = !0;
|
|
break;
|
|
case "false":
|
|
console.log("centralize false");
|
|
centralize = !1;
|
|
break;
|
|
default:
|
|
console.log("default ... centralize false"), centralize = !1
|
|
} else b = "branding-logo", centralize = !1;
|
|
if ("undefined" == typeof wm) {
|
|
if (_SETTINGS.Branding.Logo.Enabled) try {
|
|
ig.game.spawnEntity(EntityButtonBrandingLogo, this.pos.x, this.pos.y, {
|
|
div_layer_name: b,
|
|
centralize: centralize
|
|
})
|
|
} catch (d) {
|
|
console.log(d)
|
|
}
|
|
this.kill()
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.buttons.button-more-games").requires("game.entities.buttons.button", "plugins.clickable-div-layer").defines(function() {
|
|
EntityButtonMoreGames = EntityButton.extend({
|
|
type: ig.Entity.TYPE.A,
|
|
gravityFactor: 0,
|
|
logo: new ig.AnimationSheet("media/graphics/sprites/button-more-games.png", 64, 66),
|
|
size: {
|
|
x: 64,
|
|
y: 66
|
|
},
|
|
zIndex: 750,
|
|
clickableLayer: null,
|
|
link: null,
|
|
newWindow: !1,
|
|
div_layer_name: "more-games",
|
|
name: "moregames",
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
ig.global.wm || (this.div_layer_name = e.div_layer_name ?
|
|
e.div_layer_name : "more-games", _SETTINGS.MoreGames.Enabled ? (this.anims.idle = new ig.Animation(this.logo, 0, [0], !0), this.currentAnim = this.anims.idle, _SETTINGS.MoreGames.Link && (this.link = _SETTINGS.MoreGames.Link), _SETTINGS.MoreGames.NewWindow && (this.newWindow = _SETTINGS.MoreGames.NewWindow), this.clickableLayer = new ClickableDivLayer(this)) : this.kill())
|
|
},
|
|
show: function() {
|
|
var b = ig.domHandler.getElementById("#" + this.div_layer_name);
|
|
ig.domHandler.show(b)
|
|
},
|
|
hide: function() {
|
|
var b = ig.domHandler.getElementById("#" +
|
|
this.div_layer_name);
|
|
ig.domHandler.hide(b)
|
|
},
|
|
clicked: function() {},
|
|
clicking: function() {},
|
|
released: function() {}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.opening-shield").requires("impact.entity").defines(function() {
|
|
EntityOpeningShield = ig.Entity.extend({
|
|
size: {
|
|
x: 48,
|
|
y: 48
|
|
},
|
|
move: 0,
|
|
mIconAnim: 0,
|
|
shieldAnim: 0,
|
|
titleAnim: 0,
|
|
shieldImage: new ig.Image("media/graphics/opening/shield.png"),
|
|
mIconImage: new ig.Image("media/graphics/opening/m_icon.png"),
|
|
titleImage: new ig.Image("media/graphics/opening/title.png"),
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e)
|
|
},
|
|
ready: function() {
|
|
if (!ig.wm)
|
|
if (_SETTINGS.DeveloperBranding.Splash.Enabled) {
|
|
this.initTimer = new ig.Timer(0.1);
|
|
try {
|
|
ig.soundHandler.playSound(ig.soundHandler.SOUNDID.openingSound)
|
|
} catch (b) {
|
|
console.log(b)
|
|
}
|
|
} else ig.game.director.nextLevel(), ig.system.context.globalAlpha = 1, this.kill()
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.updateOriginalShieldOpening()
|
|
},
|
|
draw: function() {
|
|
this.parent();
|
|
ig.global.wm || (this.nextLevelTimer && 0 > this.nextLevelTimer.delta() && (ig.system.context.globalAlpha = -this.nextLevelTimer.delta()), this.drawOriginalShieldOpening())
|
|
},
|
|
updateOriginalShieldOpening: function() {
|
|
this.initTimer && 0 < this.initTimer.delta() &&
|
|
(this.initTimer = null, this.sheildTimer = new ig.Timer(0.05));
|
|
this.sheildTimer && 0 < this.sheildTimer.delta() && (3 > this.shieldAnim ? (this.shieldAnim++, this.sheildTimer.reset()) : (this.sheildTimer = null, this.moveTimer = new ig.Timer(0.001), this.mIconTimer = new ig.Timer(0.05), this.titleTimer = new ig.Timer(0.15)));
|
|
this.moveTimer && 0 < this.moveTimer.delta() && (this.move += 0.3, this.moveTimer.reset());
|
|
this.mIconTimer && 0 < this.mIconTimer.delta() && (12 > this.mIconAnim ? (this.mIconAnim++, this.moveTimer.reset()) : this.mIconTimer =
|
|
null);
|
|
this.titleTimer && 0 < this.titleTimer.delta() && (11 > this.titleAnim ? (this.titleAnim++, this.titleTimer.reset()) : (this.titleTimer = null, this.nextLevelTimer = new ig.Timer(1)));
|
|
this.nextLevelTimer && 0 < this.nextLevelTimer.delta() && (this.nextLevelTimer = null, ig.game.director.nextLevel(), ig.system.context.globalAlpha = 1)
|
|
},
|
|
drawOriginalShieldOpening: function() {
|
|
if (this.moveTimer) {
|
|
var b = ig.system.context;
|
|
b.save();
|
|
var c = ig.system.width / 2,
|
|
e = ig.system.height / 2;
|
|
b.translate(c, e);
|
|
b.rotate(this.move * Math.PI / 180);
|
|
b.beginPath();
|
|
b.moveTo(0, 0);
|
|
for (var d = 0, g = 1; 48 >= g; g += 1) b.lineTo(0 + 800 * Math.cos(2 * g * Math.PI / 48), 0 + 800 * Math.sin(2 * g * Math.PI / 48)), d++, 2 == d && (d = 0, b.lineTo(0, 0));
|
|
b.translate(-c, -e);
|
|
c = b.createRadialGradient(c, e, 100, c, e, 250);
|
|
c.addColorStop(0, "rgba(255,255,255,0.1)");
|
|
c.addColorStop(1, "rgba(0,0,0,0)");
|
|
b.fillStyle = c;
|
|
b.fill();
|
|
b.restore()
|
|
}
|
|
this.shieldImage.drawTile(ig.system.width / 2 - 91, 0 - (768 - ig.system.height) / 2, this.shieldAnim, 182, 768);
|
|
this.moveTimer && (this.mIconImage.drawTile(ig.system.width / 2 - 96, ig.system.height / 2 - 70, this.mIconAnim,
|
|
166, 160), this.titleImage.drawTile(ig.system.width / 2 - 204, ig.system.height / 2 + 100, this.titleAnim, 409, 76));
|
|
ig.system.context.globalAlpha = 1
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.opening-kitty").requires("impact.entity").defines(function() {
|
|
EntityOpeningKitty = ig.Entity.extend({
|
|
size: {
|
|
x: 48,
|
|
y: 48
|
|
},
|
|
kittyAnim: -1,
|
|
kittyImage: new ig.Image("media/graphics/opening/kitty.png"),
|
|
kittyTitleImage: new ig.Image("media/graphics/opening/kittytitle.png"),
|
|
soundKey: "kittyopeningSound",
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e)
|
|
},
|
|
ready: function() {
|
|
if (!ig.wm)
|
|
if (_SETTINGS.DeveloperBranding.Splash.Enabled) {
|
|
this.initTimer = new ig.Timer(0.1);
|
|
try {
|
|
ig.soundHandler.sfxPlayer.play(this.soundKey)
|
|
} catch (b) {
|
|
console.log(b)
|
|
}
|
|
} else ig.game.director.nextLevel(),
|
|
ig.system.context.globalAlpha = 1, this.kill()
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.updateKittyOpening()
|
|
},
|
|
draw: function() {
|
|
this.parent();
|
|
ig.global.wm || (this.nextLevelTimer && 0 > this.nextLevelTimer.delta() && (ig.system.context.globalAlpha = -this.nextLevelTimer.delta()), this.drawKittyOpening())
|
|
},
|
|
updateKittyOpening: function() {
|
|
this.initTimer && 0 < this.initTimer.delta() && (this.initTimer = null, this.kittyTimer = new ig.Timer(0.15));
|
|
this.kittyTimer && 0 < this.kittyTimer.delta() && (7 > this.kittyAnim ? (this.kittyAnim++, this.kittyTimer.reset()) :
|
|
(this.kittyTimer = null, this.nextLevelTimer = new ig.Timer(2)));
|
|
this.nextLevelTimer && 0 < this.nextLevelTimer.delta() && (this.nextLevelTimer = null, ig.game.director.nextLevel(), ig.system.context.globalAlpha = 1)
|
|
},
|
|
drawKittyOpening: function() {
|
|
ig.system.context.clearRect(0, 0, ig.system.width, ig.system.height);
|
|
0 <= this.kittyAnim && (this.kittyImage.drawTile((ig.system.width >>> 1) - (this.kittyImage.width >>> 3), (ig.system.height >>> 1) - (this.kittyImage.height >>> 2), this.kittyAnim, 218, 325), this.kittyTitleImage.drawTile((ig.system.width >>>
|
|
1) - (this.kittyTitleImage.width >>> 1), (ig.system.height >>> 1) + (this.kittyImage.height >>> 2) + 10, this.kittyAnim, 380, 37));
|
|
ig.system.context.globalAlpha = 1
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.pointer").requires("impact.entity").defines(function() {
|
|
EntityPointer = ig.Entity.extend({
|
|
checkAgainst: ig.Entity.TYPE.BOTH,
|
|
isFirstPressed: !1,
|
|
isPressed: !1,
|
|
isReleased: !1,
|
|
isHovering: !1,
|
|
hoveringItem: null,
|
|
objectArray: [],
|
|
clickedObjectList: [],
|
|
ignorePause: !0,
|
|
zIndex: 5E3,
|
|
name: "pointer",
|
|
check: function(b) {
|
|
this.objectArray.push(b)
|
|
},
|
|
clickObject: function(b) {
|
|
this.isFirstPressed && "function" == typeof b.clicked && (b.clicked(), this.addToClickedObjectList(b));
|
|
this.isPressed && !this.isReleased && "function" ==
|
|
typeof b.clicking && b.clicking();
|
|
this.isReleased && "function" == typeof b.released && (b.released(), this.removeFromClickedObjectList(b))
|
|
},
|
|
refreshPos: function() {
|
|
this.pos = ig.game.io.getClickPos()
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.refreshPos();
|
|
var b = null,
|
|
c = -1;
|
|
for (a = this.objectArray.length - 1; - 1 < a; a--) this.objectArray[a].zIndex > c && (c = this.objectArray[a].zIndex, b = this.objectArray[a]);
|
|
if (null != b) null != this.hoveringItem ? this.hoveringItem != b && ("function" == typeof this.hoveringItem.leave && this.hoveringItem.leave(),
|
|
"function" == typeof b.over && b.over()) : "function" == typeof b.over && b.over(), this.hoveringItem = this.lastEnt = b, this.clickObject(b), this.objectArray = [];
|
|
else if (null != this.hoveringItem && "function" == typeof this.hoveringItem.leave && (this.hoveringItem.leave(), this.hoveringItem = null), this.isReleased) {
|
|
for (b = 0; b < this.clickedObjectList.length; b++) c = this.clickedObjectList[b], "function" == typeof c.releasedOutside && c.releasedOutside();
|
|
this.lastEnt && (this.lastEnt.released && this.lastEnt.released(), this.lastEnt = null);
|
|
this.clickedObjectList = []
|
|
}
|
|
this.isFirstPressed = ig.input.pressed("click");
|
|
this.isReleased = ig.input.released("click");
|
|
this.isPressed = ig.input.state("click")
|
|
},
|
|
addToClickedObjectList: function(b) {
|
|
this.clickedObjectList.push(b)
|
|
},
|
|
removeFromClickedObjectList: function(b) {
|
|
for (var c = [], e = 0; e < this.clickedObjectList.length; e++) {
|
|
var d = this.clickedObjectList[e];
|
|
d != b && c.push(d)
|
|
}
|
|
this.clickedObjectList = c
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.pointer-selector").requires("game.entities.pointer").defines(function() {
|
|
EntityPointerSelector = EntityPointer.extend({
|
|
zIndex: 1E3,
|
|
_wmDrawBox: !0,
|
|
_wmBoxColor: "rgba(0, 0, 255, 0.7)",
|
|
size: {
|
|
x: 20,
|
|
y: 20
|
|
},
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.select").requires("impact.entity").defines(function() {
|
|
EntitySelect = ig.Entity.extend({
|
|
type: ig.Entity.TYPE.B,
|
|
checkAgainst: ig.Entity.TYPE.A,
|
|
collides: ig.Entity.COLLIDES.NEVER,
|
|
canSelect: !1,
|
|
canSelectTimerDuration: 0.35,
|
|
zIndex: 99999,
|
|
isHovering: !1,
|
|
isSelected: !1,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.canSelectTimer = new ig.Timer(this.canSelectTimerDuration)
|
|
},
|
|
doesClickableLayerExist: function(b) {
|
|
for (k in dynamicClickableEntityDivs)
|
|
if (k == b) return !0;
|
|
return !1
|
|
},
|
|
checkClickableLayer: function(b,
|
|
c, e) {
|
|
"undefined" == typeof wm && (this.doesClickableLayerExist(b) ? (ig.game.showOverlay([b]), $("#" + b).find("[href]").attr("href", c)) : this.createClickableOutboundLayer(b, c, "media/graphics/misc/invisible.png", e))
|
|
},
|
|
createClickableOutboundLayer: function(b, c, e, d) {
|
|
var g = ig.$new("div");
|
|
g.id = b;
|
|
document.body.appendChild(g);
|
|
$("#" + g.id).css("float", "left");
|
|
$("#" + g.id).css("width", this.size.x * multiplier);
|
|
$("#" + g.id).css("height", this.size.y * multiplier);
|
|
$("#" + g.id).css("position", "absolute");
|
|
var f = w / 2 - destW / 2,
|
|
m = h /
|
|
2 - destH / 2;
|
|
w == mobileWidth ? ($("#" + g.id).css("left", this.pos.x), $("#" + g.id).css("top", this.pos.y)) : ($("#" + g.id).css("left", f + this.pos.x * multiplier), $("#" + g.id).css("top", m + this.pos.y * multiplier));
|
|
d ? $("#" + g.id).html("<a target='_blank' href='" + c + "'><img style='width:100%;height:100%' src='" + e + "'></a>") : $("#" + g.id).html("<a href='" + c + "'><img style='width:100%;height:100%' src='" + e + "'></a>");
|
|
dynamicClickableEntityDivs[b] = {};
|
|
dynamicClickableEntityDivs[b].width = $("#" + g.id).width();
|
|
dynamicClickableEntityDivs[b].height =
|
|
$("#" + g.id).height();
|
|
dynamicClickableEntityDivs[b].entity_pos_x = this.pos.x;
|
|
dynamicClickableEntityDivs[b].entity_pos_y = this.pos.y
|
|
},
|
|
hovered: function() {
|
|
this.isHovering = !0;
|
|
this.dehoverOthers()
|
|
},
|
|
dehoverOthers: function() {
|
|
var b = ig.game.getEntitiesByType(EntitySelect);
|
|
for (i = 0; i < b.length; i++) b[i] != this && (b[i].isHovering = !1)
|
|
},
|
|
deselectOthers: function() {
|
|
var b = ig.game.getEntitiesByType(EntitySelect);
|
|
for (i = 0; i < b.length; i++) b[i] != this && (b[i].isSelected = !1)
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.canSelectTimer && 0 <
|
|
this.canSelectTimer.delta() && (this.canSelect = !0, this.canSelectTimer = null)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.levels.opening").requires("impact.image", "game.entities.opening-kitty").defines(function() {
|
|
LevelOpening = {
|
|
entities: [{
|
|
type: "EntityOpeningKitty",
|
|
x: 520,
|
|
y: 212
|
|
}],
|
|
layer: []
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.objects.game-object").requires("impact.entity").defines(function() {
|
|
ig.color = {
|
|
hexToRgb: function(b) {
|
|
var c = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(b);
|
|
return c ? {
|
|
r: parseInt(c[1], 16),
|
|
g: parseInt(c[2], 16),
|
|
b: parseInt(c[3], 16),
|
|
hex: b
|
|
} : null
|
|
}
|
|
};
|
|
EntityGameObject = ig.Entity.extend({
|
|
gravityFactor: 0,
|
|
idleSheetInfo: null,
|
|
singleFrameImage: null,
|
|
visible: !0,
|
|
alpha: 1,
|
|
zIndex: 1E3,
|
|
drawAsRect: !1,
|
|
drawAsOutline: !1,
|
|
outlineWidth: 1,
|
|
rectColor: ig.color.hexToRgb("#FFFFFF"),
|
|
entryDelay: 0,
|
|
entryDuration: 0.25,
|
|
entryType: null,
|
|
exitDelay: 0,
|
|
exitDuration: 0.25,
|
|
exitType: null,
|
|
killOnExit: !0,
|
|
scaleX: 1,
|
|
scaleY: 1,
|
|
angle: 0,
|
|
anchorX: 0,
|
|
anchorY: 0,
|
|
forceDraw: !1,
|
|
width: 32,
|
|
height: 32,
|
|
onInputDown: null,
|
|
onInputUp: null,
|
|
onClicked: null,
|
|
hasTouchInside: !1,
|
|
inputEnabled: !1,
|
|
isClicking: !1,
|
|
boundLeft: 0,
|
|
boundRight: 0,
|
|
boundTop: 0,
|
|
boundBottom: 0,
|
|
isFinishEntering: !1,
|
|
timedLife: -999,
|
|
size: {
|
|
x: 32,
|
|
y: 32
|
|
},
|
|
init: function(b, c, e) {
|
|
this.onInputDown = new ig.Signal;
|
|
this.onInputUp = new ig.Signal;
|
|
this.onClicked = new ig.Signal;
|
|
e.singleFrameImage && (this.singleFrameImage =
|
|
e.singleFrameImage);
|
|
null != this.singleFrameImage ? (this.idleSheetInfo = {
|
|
sheetImage: this.singleFrameImage,
|
|
sheetX: 1,
|
|
sheetY: 1
|
|
}, this.setSpriteSheet("idle"), this.setSize("idle"), this.addAnimation("idle", "idleSheet", 1, [0], !1, !0)) : null != this.idleSheetInfo && (this.setSpriteSheet("idle"), this.setSize("idle"));
|
|
this.parent(b, c, e);
|
|
this.enter();
|
|
!1 === e.visible && (this.visible = !1);
|
|
this.anchorType = e.anchorType ? e.anchorType : "default"
|
|
},
|
|
onFinishEntering: function() {},
|
|
enter: function() {
|
|
this.visible = !0;
|
|
null != this.entryType ?
|
|
(this[this.entryType](), this.delayedCall(this.entryDelay + this.entryDuration, function() {
|
|
this.onFinishEntering();
|
|
this.isFinishEntering = !0
|
|
}.bind(this))) : (this.isFinishEntering = !0, this.onFinishEntering())
|
|
},
|
|
exit: function() {
|
|
if (null != this.exitType) this[this.exitType]();
|
|
else this.alpha0();
|
|
this.delayedCall(this.exitDuration + this.exitDelay, function() {
|
|
this.checkKill()
|
|
}.bind(this))
|
|
},
|
|
setSpriteSheet: function(b) {
|
|
this[b + "Sheet"] = new ig.AnimationSheet(this[b + "SheetInfo"].sheetImage.path, this[b + "SheetInfo"].sheetImage.width /
|
|
this[b + "SheetInfo"].sheetX, this[b + "SheetInfo"].sheetImage.height / this[b + "SheetInfo"].sheetY)
|
|
},
|
|
setSize: function(b) {
|
|
this.width = this[b + "SheetInfo"].sheetImage.width / this[b + "SheetInfo"].sheetX;
|
|
this.height = this[b + "SheetInfo"].sheetImage.height / this[b + "SheetInfo"].sheetY
|
|
},
|
|
addAnimation: function(b, c, e, d, g, f) {
|
|
this[b] = new ig.Animation(this[c], e, d, !g);
|
|
!0 == f && (this.currentAnim = this[b])
|
|
},
|
|
makeFramesArray: function(b, c, e) {
|
|
for (var d = [], g = b; g <= c; g++) d.push(g);
|
|
if (e)
|
|
for (g = c; g >= b; g--) d.push(g);
|
|
return d
|
|
},
|
|
draw: function() {
|
|
if (this.visible &&
|
|
(this.forceDraw || this.currentAnim || this.drawAsRect || this.drawAsOutline)) {
|
|
var b = ig.system.context;
|
|
b.save();
|
|
b.translate(ig.system.getDrawPos(this.pos.x.round() - this.offset.x - ig.game.screen.x), ig.system.getDrawPos(this.pos.y.round() - this.offset.y - ig.game.screen.y));
|
|
(1 != this.scaleX || 1 != this.scaleY) && b.scale(this.scaleX, this.scaleY);
|
|
this.drawObject(-this.anchorX * this.width, -this.anchorY * this.height);
|
|
b.restore()
|
|
}
|
|
},
|
|
drawObject: function(b, c) {
|
|
var e = ig.system.context,
|
|
d = this.rectColor;
|
|
this.drawAsRect && (e.fillStyle =
|
|
1 > this.alpha ? "rgba(" + d.r + "," + d.g + "," + d.b + "," + this.alpha + ")" : d.hex, e.fillRect(b, c, this.width, this.height));
|
|
this.drawAsOutline ? (e.strokeStyle = 1 > this.alpha ? "rgba(" + d.r + "," + d.g + "," + d.b + "," + this.alpha + ")" : d.hex, e.strokeRect(b, c, this.width, this.height)) : null != this.currentAnim && (this.currentAnim.alpha = this.alpha, this.currentAnim.draw(b, c))
|
|
},
|
|
update: function() {
|
|
ig.game.entities && this.parent();
|
|
if (this.inputEnabled && this.isFinishEntering && this.visible) {
|
|
var b = !1;
|
|
this.hasTouchInside = !1;
|
|
for (var c = 0; c < ig.multitouchInput.touches.length; c++) {
|
|
var b = !0,
|
|
e = ig.multitouchInput.touches[c];
|
|
this.processInput(e.x, e.y)
|
|
}!b && ig.input.state("click") && (b = !0, c = ig.game.io.mouse.getPos(), this.processInput(c.x, c.y));
|
|
b ? this.hasTouchInside || (this.isClicking = !1) : (this.isClicking && (this.onInputUp.dispatch(this), this.onClicked.dispatch(this)), this.isClicking = !1)
|
|
} - 999 != this.timedLife && (this.timedLife -= ig.system.tick, 0 >= this.timedLife && (this.timedLife = -999, this.exit()))
|
|
},
|
|
processInput: function(b, c) {
|
|
this.isInsideBounds(b, c) && (this.hasTouchInside = !0, this.isClicking || (this.isClicking = !0, this.onInputDown.dispatch(this)))
|
|
},
|
|
isInsideBounds: function(b, c) {
|
|
var e = this.scaleX * this.width,
|
|
d = this.scaleY * this.height;
|
|
this.boundLeft = this.pos.x - e * this.anchorX;
|
|
this.boundTop = this.pos.y - d * this.anchorY;
|
|
this.boundRight = this.boundLeft + e;
|
|
this.boundBottom = this.boundTop + d;
|
|
this.boundLeft > this.boundRight && (e = this.boundLeft, this.boundLeft = this.boundRight, this.boundRight = e);
|
|
this.boundTop > this.boundBottom && (e = this.boundTop, this.boundTop = this.boundBottom, this.boundBottom = e);
|
|
return b < this.boundLeft || c < this.boundTop ||
|
|
b > this.boundRight || c > this.boundBottom ? !1 : !0
|
|
},
|
|
fadeBounceRightIn: function() {
|
|
this.alpha = 0;
|
|
var b = this.pos.x;
|
|
this.pos.x -= 100;
|
|
this.tween({
|
|
alpha: 1
|
|
}, 0.75 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
x: b
|
|
}
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Back.EaseOut
|
|
}).start()
|
|
},
|
|
fadeBounceRightOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
}, 0.75 * this.exitDuration, {
|
|
delay: this.exitDelay + 0.25 * this.exitDuration,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
x: this.pos.x - 100
|
|
}
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Back.EaseIn
|
|
}).start()
|
|
},
|
|
fadeBounceLeftIn: function() {
|
|
this.alpha = 0;
|
|
var b = this.pos.x;
|
|
this.pos.x += 100;
|
|
this.tween({
|
|
alpha: 1
|
|
}, 0.75 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
x: b
|
|
}
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Back.EaseOut
|
|
}).start()
|
|
},
|
|
fadeBounceLeftOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
}, 0.75 * this.exitDuration, {
|
|
delay: this.exitDelay +
|
|
0.25 * this.exitDuration,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
x: this.pos.x + 100
|
|
}
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Back.EaseIn
|
|
}).start()
|
|
},
|
|
fadeJumpIn: function() {
|
|
this.alpha = 0;
|
|
var b = this.pos.y;
|
|
this.pos.y += 100;
|
|
this.tween({
|
|
alpha: 1
|
|
}, 0.75 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
y: b
|
|
}
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Back.EaseOut
|
|
}).start()
|
|
},
|
|
fadeJumpOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
},
|
|
0.75 * this.exitDuration, {
|
|
delay: this.exitDelay + 0.25 * this.exitDuration,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
y: this.pos.y + 100
|
|
}
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Back.EaseIn
|
|
}).start()
|
|
},
|
|
fadeIn: function() {
|
|
var b = this.alpha;
|
|
this.alpha = 0;
|
|
this.tween({
|
|
alpha: b
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start()
|
|
},
|
|
fadeInLinear: function() {
|
|
var b = this.alpha;
|
|
this.alpha = 0;
|
|
this.tween({
|
|
alpha: b
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Linear.EaseNone
|
|
}).start()
|
|
},
|
|
fadeOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start()
|
|
},
|
|
fadeOutLinear: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Linear.EaseNone
|
|
}).start()
|
|
},
|
|
expandIn: function() {
|
|
this.alpha = 0;
|
|
this.tween({
|
|
alpha: 1
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start()
|
|
},
|
|
expandOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
},
|
|
this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start()
|
|
},
|
|
dropBoinkIn: function() {
|
|
this.alpha = 0;
|
|
var b = this.pos.y,
|
|
c = 1.2 * this.scaleX,
|
|
e = 0.8 * this.scaleY,
|
|
d = this.scaleX,
|
|
g = this.scaleY;
|
|
this.pos.y -= 0 < this.height ? 3 * this.height : 3 * this.size.y;
|
|
c = this.tween({
|
|
scaleX: c,
|
|
scaleY: e
|
|
}, 0.2 * this.entryDuration, {
|
|
delay: this.entryDelay + 0.6 * this.entryDuration,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
});
|
|
d = this.tween({
|
|
scaleX: d,
|
|
scaleY: g
|
|
}, 0.2 * this.entryDuration, {
|
|
easing: ig.Tween.Easing.Quadratic.EaseIn
|
|
});
|
|
c.chain(d);
|
|
c.start();
|
|
this.tween({
|
|
alpha: 1
|
|
}, 0.6 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseIn
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
y: b
|
|
}
|
|
}, 0.6 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quartic.EaseIn
|
|
}).start()
|
|
},
|
|
alpha0: function() {
|
|
this.alpha = 0
|
|
},
|
|
alpha1: function() {
|
|
this.alpha = 1
|
|
},
|
|
checkKill: function() {
|
|
this.killOnExit && this.kill()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.objects.ui.fade-black").requires("game.toybox.objects.game-object").defines(function() {
|
|
ig.hasFadeBlack = !1;
|
|
EntityFadeBlack = EntityGameObject.extend({
|
|
zIndex: 99999,
|
|
isIn: !1,
|
|
nextLevelID: -1,
|
|
rectColor: ig.color.hexToRgb("#000000"),
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.size.x = ig.system.width;
|
|
this.size.y = ig.system.height;
|
|
ig.game.sortEntitiesDeferred()
|
|
},
|
|
enter: function() {
|
|
this.visible = !0;
|
|
this.isIn ? (this.alpha = 0, this.tween({
|
|
alpha: 1
|
|
}, 0.35, {
|
|
easing: ig.Tween.Easing.Quadratic.EaseIn,
|
|
onComplete: function() {
|
|
0 <=
|
|
this.nextLevelID && ig.game.director.loadLevel(this.nextLevelID)
|
|
}.bind(this)
|
|
}).start()) : (this.alpha = 1, this.tween({
|
|
alpha: 0
|
|
}, 0.35, {
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut,
|
|
onComplete: function() {
|
|
this.kill()
|
|
}.bind(this)
|
|
}).start())
|
|
},
|
|
drawObject: function(b, c) {
|
|
if (this.visible) {
|
|
var e = ig.system.context;
|
|
e.save();
|
|
var d = this.rectColor;
|
|
e.fillStyle = 1 > this.alpha ? "rgba(" + d.r + "," + d.g + "," + d.b + "," + this.alpha + ")" : d.hex;
|
|
e.fillRect(this.pos.x, this.pos.y, this.size.x, this.size.y);
|
|
e.restore()
|
|
}
|
|
this.parent(b, c)
|
|
}
|
|
});
|
|
ig.dropCurtain =
|
|
function(b) {
|
|
void 0 === b && (b = -1);
|
|
ig.hasFadeBlack = !0;
|
|
ig.game.spawnEntity(EntityFadeBlack, 0, 0, {
|
|
isIn: !0,
|
|
nextLevelID: b
|
|
})
|
|
};
|
|
ig.liftCurtain = function() {
|
|
ig.hasFadeBlack = !1;
|
|
ig.game.spawnEntity(EntityFadeBlack, 0, 0, {
|
|
isIn: !1
|
|
})
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.controllers.controller").requires("impact.entity", "game.entities.pointer", "game.toybox.objects.ui.fade-black").defines(function() {
|
|
EntityController = ig.Entity.extend({
|
|
gravityFactor: 0,
|
|
isAllowInput: !0,
|
|
pointer: null,
|
|
liftCurtainOnStart: !0,
|
|
onInputDown: null,
|
|
onInputUp: null,
|
|
lastTouchY: 0,
|
|
lastTouchX: 0,
|
|
size: {
|
|
x: 960,
|
|
y: 540
|
|
},
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.pointer = ig.game.getEntitiesByType(EntityPointer)[0];
|
|
this.onInputDown = new ig.Signal;
|
|
this.onInputUp = new ig.Signal;
|
|
this.liftCurtainOnStart &&
|
|
ig.liftCurtain()
|
|
},
|
|
goToLevel: function(b) {
|
|
this.isAllowInput = !1;
|
|
ig.dropCurtain(b)
|
|
},
|
|
showPopup: function(b, c) {
|
|
c || (c = {});
|
|
c.controller = this;
|
|
this.isAllowInput = !1;
|
|
ig.game.spawnEntity(b, 0, 0, c);
|
|
ig.game.sortEntitiesDeferred()
|
|
},
|
|
onPopupFinished: function() {
|
|
this.isAllowInput = !0
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
for (var b = !1, c = 0; c < ig.multitouchInput.touches.length; c++) {
|
|
var b = !0,
|
|
e = ig.multitouchInput.touches[c];
|
|
this.processInput(e.x, e.y)
|
|
}!b && ig.input.state("click") && (b = !0, c = ig.game.io.mouse.getPos(), this.processInput(c.x,
|
|
c.y));
|
|
b || (this.isClicking && this.onInputUp.dispatch(this), this.isClicking = !1)
|
|
},
|
|
processInput: function(b, c) {
|
|
this.isInsideBounds(b, c) && !this.isClicking && (this.isClicking = !0, this.onInputDown.dispatch(this), this.lastTouchX = b, this.lastTouchY = c)
|
|
},
|
|
isInsideBounds: function(b, c) {
|
|
var e = this.scaleX * this.width,
|
|
d = this.scaleY * this.height;
|
|
this.boundLeft = this.pos.x - e * this.anchorX;
|
|
this.boundTop = this.pos.y - d * this.anchorY;
|
|
this.boundRight = this.boundLeft + e;
|
|
this.boundBottom = this.boundTop + d;
|
|
this.boundLeft > this.boundRight &&
|
|
(e = this.boundLeft, this.boundLeft = this.boundRight, this.boundRight = e);
|
|
this.boundTop > this.boundBottom && (e = this.boundTop, this.boundTop = this.boundBottom, this.boundBottom = e);
|
|
return b < this.boundLeft || c < this.boundTop || b > this.boundRight || c > this.boundBottom ? !1 : !0
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.objects.ui.buttons.button").requires("game.toybox.objects.game-object").defines(function() {
|
|
EntityButton = EntityGameObject.extend({
|
|
collides: ig.Entity.COLLIDES.NEVER,
|
|
type: ig.Entity.TYPE.A,
|
|
originalX: 0,
|
|
originalY: 0,
|
|
transitionInDelay: 0,
|
|
zIndex: 7E3,
|
|
textString: "",
|
|
textFont: "24px Arial",
|
|
textRgb: ig.color.hexToRgb("#e8bba3"),
|
|
textAlign: "center",
|
|
textVAlign: "center",
|
|
textLineSpacing: 1,
|
|
textOffsetX: 0,
|
|
textOffsetY: 0,
|
|
_previousTextString: "",
|
|
_multiline: !1,
|
|
_lines: [],
|
|
_lineSpacing: 0,
|
|
usePressedTween: !1,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this._lineSpacing = parseInt(this.textFont.split("px")[0].split(" ").pop()) * this.textLineSpacing
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.usePressedTween && this.visible && (this.scaleY = this.scaleX = this.hasTouchInside ? this.scaleX + (0.9 - this.scaleX) / 3 : this.scaleX + (1 - this.scaleX) / 3)
|
|
},
|
|
drawObject: function(b, c) {
|
|
this.parent(b, c);
|
|
if (this.visible && 0 < this.textString.length) {
|
|
this._previousTextString != this.textString && (this._previousTextString = this.textString, this._lines = this.textString.split(/\r?\n/),
|
|
1 < this._lines.length ? (this._multiline = !0, this._lineSpacing = parseInt(this.textFont.split("px")[0].split(" ").pop()) * this.textLineSpacing) : this._multiline = !1);
|
|
var e = ig.system.context;
|
|
e.save();
|
|
e.font = this.textFont;
|
|
e.textAlign = this.textAlign;
|
|
e.fillStyle = 1 > this.alpha ? "rgba(" + this.textRgb.r + "," + this.textRgb.g + "," + this.textRgb.b + "," + this.alpha + ")" : this.textRgb.hex;
|
|
var d = b + this.textOffsetX,
|
|
g = c + this.textOffsetY;
|
|
this.singleFrameImage && (d += this.singleFrameImage.width / 2, g += this.singleFrameImage.height / 2);
|
|
if (this._multiline) {
|
|
var f =
|
|
g;
|
|
"center" == this.textVAlign && (f = g - (this._lines.length - 1) * this._lineSpacing / 2);
|
|
for (g = 0; g < this._lines.length; g++) e.fillText(this._lines[g], d, f + g * this._lineSpacing)
|
|
} else this._lineSpacing && (g += this._lineSpacing / 2), e.fillText(this.textString, d, g);
|
|
e.restore()
|
|
}
|
|
},
|
|
onFinishEntering: function() {
|
|
this.inputEnabled = !0
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.objects.ui.popups.popup").requires("game.toybox.objects.game-object").defines(function() {
|
|
EntityPopup = EntityGameObject.extend({
|
|
gravityFactor: 0,
|
|
zIndex: 1E4,
|
|
controller: null,
|
|
members: [],
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
exitDelay: 0.5,
|
|
isAllowInput: !1,
|
|
memberZIndex: 10001,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e)
|
|
},
|
|
spawnMember: function(b, c, e, d, g) {
|
|
g && (d.zIndex = g);
|
|
b = ig.game.spawnEntity(b, c, e, d);
|
|
!g && b.zIndex < this.zIndex && (b.zIndex = this.memberZIndex++);
|
|
this.members.push(b);
|
|
return b
|
|
},
|
|
enter: function() {
|
|
this.parent();
|
|
this.delayedCall(this.entryDelay + this.entryDuration, function() {
|
|
this.isAllowInput = !0
|
|
}.bind(this))
|
|
},
|
|
exit: function() {
|
|
this.parent();
|
|
this.isAllowInput = !1;
|
|
this.callControllerCallback();
|
|
for (var b = 0; b < this.members.length; b++) this.members[b].exit()
|
|
},
|
|
callControllerCallback: function() {
|
|
if (this.controller && this.controller.onPopupFinished) {
|
|
var b = this.exitDelay + this.exitDuration - 0.1;
|
|
if (0 >= b) this.controller.onPopupFinished(this.name);
|
|
else this.delayedCall(b, function() {
|
|
this.controller.onPopupFinished(this.name)
|
|
}.bind(this))
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.objects.ui.buttons.slider-button").requires("game.toybox.objects.ui.buttons.button", "game.toybox.objects.game-object").defines(function() {
|
|
EntitySliderButton = EntityButton.extend({
|
|
zIndex: 11E3,
|
|
onStopSliding: null,
|
|
value: 0,
|
|
xMin: 0,
|
|
xMax: 0,
|
|
yMin: 0,
|
|
yMax: 0,
|
|
indicatorOffsetX: 0,
|
|
indicatorOffsetY: 0,
|
|
indicator: null,
|
|
indicatorImage: null,
|
|
isHorizontal: !0,
|
|
isSliding: !1,
|
|
inputEnabled: !0,
|
|
pair: null,
|
|
init: function(b, c, e) {
|
|
this.onStopSliding = new ig.Signal;
|
|
this.parent(b, c, e);
|
|
0 == this.xMax && (this.xMax = this.width);
|
|
0 == this.yMax && (this.yMax = this.height);
|
|
null == this.indicator && (b = this.width, this.size.y < b && (b = this.height), this.indicator = this.indicatorImage ? ig.game.spawnEntity(EntityGameObject, 0, 0, {
|
|
anchorX: 0.5,
|
|
singleFrameImage: this.indicatorImage,
|
|
zIndex: this.zIndex + 10
|
|
}) : ig.game.spawnEntity(EntityGameObject, 0, 0, {
|
|
drawAsRect: !0,
|
|
zIndex: this.zIndex + 10,
|
|
width: b,
|
|
height: b
|
|
}));
|
|
this.onInputDown.add(this.onClickSlider, this)
|
|
},
|
|
onClickSlider: function() {
|
|
if (!this.pair || !this.pair.isSliding) this.parent(), this.isSliding = !0
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.indicator.alpha = this.alpha;
|
|
this.indicator.visible = this.visible;
|
|
var b = this.pos.x + (this.xMax - this.xMin);
|
|
if (this.isSliding) {
|
|
for (var c = 99999, e = 0; e < ig.multitouchInput.touches.length; e++) {
|
|
var d = ig.multitouchInput.touches[e],
|
|
g = Math.abs(d.x - b);
|
|
g < Math.abs(c - b) && (c = d.x)
|
|
}
|
|
99999 == c && ig.input.state("click") && (hasTouch = !0, e = ig.game.io.mouse.getPos(), g = Math.abs(e.x - b), g < Math.abs(c - b) && (c = e.x));
|
|
99999 == c ? (this.isSliding = !1, this.onStopSliding.dispatch([this.value])) : this.setValueBasedOnPos(c)
|
|
} else this.setPosBasedOnValue()
|
|
},
|
|
setPosBasedOnValue: function() {
|
|
var b = this.indicator;
|
|
this.isHorizontal && (b.anchoredPositionX = this.anchoredPositionX + this.xMin + (this.xMax - this.xMin - b.width) * this.value + this.indicatorOffsetX, b.anchoredPositionY = this.anchoredPositionY + this.indicatorOffsetY)
|
|
},
|
|
setValueBasedOnPos: function(b) {
|
|
var c = this.indicator,
|
|
e = ig.responsive.toAnchor(0, 0, c.anchorType);
|
|
c.anchoredPositionX = b - e.x;
|
|
c.anchoredPositionX - this.anchoredPositionX < this.xMin ? c.anchoredPositionX = this.anchoredPositionX + this.xMin : c.anchoredPositionX -
|
|
this.anchoredPositionX > this.xMax - c.width && (c.anchoredPositionX = this.anchoredPositionX + this.xMax - c.width);
|
|
this.value = (c.anchoredPositionX - this.anchoredPositionX - this.xMin) / (this.xMax - this.xMin - c.width)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.objects.ui.buttons.volume-slider-button").requires("game.toybox.objects.ui.buttons.slider-button", "game.toybox.objects.ui.buttons.button", "game.toybox.objects.game-object").defines(function() {
|
|
EntityVolumeSliderButton = EntitySliderButton.extend({
|
|
indicatorOffsetY: 0,
|
|
xMin: 11,
|
|
xMax: 226,
|
|
indicatorImage: new ig.Image("media/graphics/sprites/dot.png"),
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e)
|
|
},
|
|
drawObject: function(b, c) {
|
|
var e = this.xMax - this.xMin - this.indicator.width;
|
|
this.parent(b, c);
|
|
var d =
|
|
ig.system.context;
|
|
d.save();
|
|
d.globalAlpha = this.alpha;
|
|
d.fillStyle = "#03c2ff";
|
|
d.fillRect(b, c + 10, this.xMin + e * this.value + this.indicatorOffsetX, 7);
|
|
d.globalAlpha = 1;
|
|
d.restore()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.popup.settings-popup").requires("game.toybox.objects.ui.popups.popup", "game.toybox.objects.ui.buttons.volume-slider-button").defines(function() {
|
|
EntitySettingsPopup = EntityPopup.extend({
|
|
Images: [new ig.Image("media/graphics/sprites/slider.png"), new ig.Image("media/graphics/sprites/bg-popup.png"), new ig.Image("media/graphics/sprites/button-home.png"), new ig.Image("media/graphics/sprites/button-continue.png"), new ig.Image("media/graphics/sprites/icon-bgm.png"), new ig.Image("media/graphics/sprites/icon-sfx.png")],
|
|
homeButton: null,
|
|
title: null,
|
|
exitDelay: 0,
|
|
exitDuration: 0.25,
|
|
sfxBar: null,
|
|
bgmBar: null,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.spawnMember(EntityGameObject, 270, 475, {
|
|
singleFrameImage: this.Images[1],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.title = this.spawnMember(EntityShadowText, 270, 418, {
|
|
shadowOffsetY: 4,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
textString: _STRINGS.Game.Settings,
|
|
textFont: "64px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
shadowAlpha: 1,
|
|
shadowRgb: ig.color.hexToRgb("#012b80"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.homeButton = this.spawnMember(EntityButton, 270, 610, {
|
|
singleFrameImage: this.Images[2],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.homeButton.onClicked.addOnce(this.onClickHome, this);
|
|
this.bgmBar = this.spawnMember(EntityVolumeSliderButton, 190, 460, {
|
|
singleFrameImage: this.Images[0],
|
|
value: ig.game.sessionData.music,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.bgmBar.onStopSliding.add(this.onValueChanged, this);
|
|
this.sfxBar = this.spawnMember(EntityVolumeSliderButton, 190, 510, {
|
|
singleFrameImage: this.Images[0],
|
|
value: ig.game.sessionData.sound,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.sfxBar.onStopSliding.add(this.onValueChanged, this);
|
|
this.spawnMember(EntityGameObject, 145, 475, {
|
|
singleFrameImage: this.Images[4],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.spawnMember(EntityGameObject, 145, 525, {
|
|
singleFrameImage: this.Images[5],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.bgmBar.pair = this.sfxBar;
|
|
this.sfxBar.pair = this.bgmBar;
|
|
ig.game.sortEntitiesDeferred()
|
|
},
|
|
onValueChanged: function() {
|
|
ig.game.sessionData.music = this.bgmBar.value;
|
|
ig.game.sessionData.sound = this.sfxBar.value;
|
|
ig.game.saveAll();
|
|
ig.yandex.ysdkPlayerInfo_save();
|
|
ig.soundHandler.bgmPlayer.volume(ig.game.sessionData.music);
|
|
ig.soundHandler.sfxPlayer.volume(ig.game.sessionData.sound);
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)
|
|
},
|
|
onClickHome: function() {
|
|
this.isAllowInput && (this.isAllowInput = !1, this.exit(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click))
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.ui.car-selector").requires("game.toybox.objects.game-object").defines(function() {
|
|
EntityCarSelector = EntityGameObject.extend({
|
|
buttonImages: [new ig.Image("media/graphics/sprites/left.png"), new ig.Image("media/graphics/sprites/lock.png"), new ig.Image("media/graphics/sprites/button-buy.png")],
|
|
leftBtn: null,
|
|
rightBtn: null,
|
|
buyBtn: null,
|
|
lock: null,
|
|
currentId: 0,
|
|
carPrices: [0, 200, 250, 300, 350, 400, 450, 500],
|
|
carSpeed: [30, 30, 30, 30, 30, 30, 30, 30],
|
|
carGrip: [0.035, 0.038, 0.041, 0.044, 0.047, 0.05, 0.052,
|
|
0.055
|
|
],
|
|
carMass: [100, 100, 100, 100, 100, 100, 100, 80],
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.currentId = ig.game.sessionData.currentCar;
|
|
this.lock = ig.game.spawnEntity(EntityGameObject, 270, 420, {
|
|
singleFrameImage: this.buttonImages[1],
|
|
anchorX: 0.5,
|
|
anchorY: 0.05,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.buyBtn = ig.game.spawnEntity(EntityButton, 270, 550, {
|
|
singleFrameImage: this.buttonImages[2],
|
|
textOffsetX: 45,
|
|
textOffsetY: -10,
|
|
textString: "999",
|
|
textFont: "36px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
anchorX: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.buyBtn.onClicked.add(this.onClickBuy, this);
|
|
this.leftBtn = ig.game.spawnEntity(EntityButton, 80, 420, {
|
|
singleFrameImage: this.buttonImages[0],
|
|
anchorX: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.leftBtn.onClicked.add(this.onClickLeft, this);
|
|
this.rightBtn = ig.game.spawnEntity(EntityButton, 460, this.leftBtn.pos.y, {
|
|
singleFrameImage: this.buttonImages[0],
|
|
anchorX: 0.5,
|
|
scaleX: -1,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.rightBtn.onClicked.add(this.onClickRight,
|
|
this);
|
|
this.refreshCarSkin()
|
|
},
|
|
exit: function() {
|
|
this.parent();
|
|
this.leftBtn.exit();
|
|
this.rightBtn.exit();
|
|
this.lock.exit();
|
|
this.buyBtn.exit()
|
|
},
|
|
onClickLeft: function() {
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click);
|
|
this.currentId--;
|
|
0 > this.currentId && (this.currentId = ig.gameScene.cars.length - 1);
|
|
this.refreshCarSkin()
|
|
},
|
|
onClickRight: function() {
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click);
|
|
this.currentId++;
|
|
this.currentId >= ig.gameScene.cars.length && (this.currentId =
|
|
0);
|
|
this.refreshCarSkin()
|
|
},
|
|
onClickBuy: function() {
|
|
var b = this.carPrices[this.currentId];
|
|
ig.game.sessionData.collectedCoin >= b ? (ig.game.sessionData.collectedCoin -= b, ig.game.sessionData.cars.push(this.currentId), ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.coin)) : ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click);
|
|
this.refreshCarSkin()
|
|
},
|
|
refreshCarSkin: function() {
|
|
ig.gameScene.carSkeleton.attachSkin(ig.gameScene.cars[this.currentId]);
|
|
ig.gameScene.carSkeleton.defaultSpeed = -this.carSpeed[this.currentId];
|
|
ig.gameScene.carSkeleton.maxSpeed = -this.carSpeed[this.currentId];
|
|
ig.gameScene.carSkeleton.chassis.physicsImpostor.friction = this.carGrip[this.currentId];
|
|
this.isCarOwned(this.currentId) ? (ig.game.sessionData.currentCar = this.currentId, ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save(), this.lock.visible = !1, this.buyBtn.visible = !1) : (this.lock.visible = !0, this.buyBtn.visible = !0, this.buyBtn.textString = this.carPrices[this.currentId] + "")
|
|
},
|
|
isCarOwned: function(b) {
|
|
return 0 <=
|
|
ig.game.sessionData.cars.indexOf(b)
|
|
},
|
|
update: function() {
|
|
this.parent()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.controllers.main-menu-controller").requires("impact.entity", "game.toybox.controllers.controller", "game.toybox.objects.game-object", "game.toybox.objects.ui.buttons.button", "game.entities.popup.settings-popup", "game.entities.ui.car-selector").defines(function() {
|
|
EntityMainMenuController = EntityController.extend({
|
|
buttonImages: [new ig.Image("media/graphics/sprites/button-settings.png"), new ig.Image("media/graphics/sprites/button-more-games.png"), new ig.Image("media/graphics/sprites/button-play.png"),
|
|
new ig.Image("media/graphics/sprites/title.png"), new ig.Image("media/graphics/sprites/coin.png")
|
|
],
|
|
items: [],
|
|
qualityBtn: null,
|
|
carSelector: null,
|
|
coinDisplay: null,
|
|
moregamesbtn: null,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
ig.noFadeout ? (ig.noFadeout = !1, this.spawnAllItems()) : (ig.gameScene.whiteCoverAlpha = 2.5, ig.gameScene.whiteCoverSpeed = 3, ig.gameScene.whiteCoverTarget = 0, this.delayedCall(1.75, function() {
|
|
this.spawnAllItems()
|
|
}.bind(this)), ig.gameScene.isMainMenu = !0, ig.gameScene.restart());
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engineIn);
|
|
this.delayedCall(0.8, function() {
|
|
ig.soundHandler.sfxPlayer.soundList.engineIn.stop();
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engineLow);
|
|
this.isEngineRunning = !0
|
|
}.bind(this))
|
|
},
|
|
spawnAllItems: function() {
|
|
var b = ig.game.spawnEntity(EntityButton, 10, 15, {
|
|
anchorType: "top-left",
|
|
singleFrameImage: this.buttonImages[4],
|
|
scaleX: 0.85,
|
|
scaleY: 0.85,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
c = ig.game.spawnEntity(EntityShadowText, 60, 50, {
|
|
anchorType: "top-left",
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
shadowOffsetY: 4,
|
|
textString: ig.game.sessionData.collectedCoin + "",
|
|
textFont: "42px mainfont",
|
|
textAlign: "left",
|
|
textRgb: ig.color.hexToRgb("#ffffff")
|
|
});
|
|
this.coinDisplay = c;
|
|
var e = ig.game.spawnEntity(EntityShadowText, 15, 25, {
|
|
anchorType: "top",
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
shadowOffsetY: 4,
|
|
textString: _STRINGS.Game.MainMenuBest,
|
|
textFont: "24px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff")
|
|
}),
|
|
d = ig.game.spawnEntity(EntityShadowText, 15, 65, {
|
|
anchorType: "top",
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
shadowOffsetY: 4,
|
|
textString: ig.game.sessionData.score.toFixed() + _STRINGS.Game.Meter,
|
|
textFont: "48px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff")
|
|
});
|
|
0 >= ig.game.sessionData.score && (e.visible = !1, d.visible = !1, b.visible = !1, c.visible = !1);
|
|
var g = ig.game.spawnEntity(EntityButton, 425, 675, {
|
|
singleFrameImage: this.buttonImages[0],
|
|
anchorX: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
g.onClicked.add(this.onClickSettings, this);
|
|
var f = ig.game.spawnEntity(EntityButton, 56, 725, {
|
|
singleFrameImage: this.buttonImages[1],
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
f.size.x = 93;
|
|
f.size.y = 109;
|
|
this.moregamesbtn = f;
|
|
var m = ig.game.spawnEntity(EntityButton, 270, 675, {
|
|
singleFrameImage: this.buttonImages[2],
|
|
anchorX: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
m.onClicked.add(this.onClickPlay, this);
|
|
var l = ig.game.spawnEntity(EntityGameObject, 270, 95, {
|
|
singleFrameImage: this.buttonImages[3],
|
|
anchorX: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
j = ig.game.spawnEntity(EntityDailyrewardButton, 245, 886);
|
|
j.onPopupOpen.add(this.onRewardPopupOpen, this);
|
|
j.onPopupClosed.add(this.onRewardPopupClosed, this);
|
|
j.onRewardCollected.add(this.onRewardCollected, this);
|
|
var q = ig.game.spawnEntity(EntityCarSelector, 0, 0);
|
|
this.carSelector = q;
|
|
this.items.push(g, j, f, m, l, q, e, d, b, c);
|
|
this.playbtn = m;
|
|
this.settingsbtn = g;
|
|
_SETTINGS.MoreGames.Enabled ? (m.anchoredPositionX = 260, g.anchoredPositionX = m.anchoredPositionX - 15, m.anchoredPositionY = 650, g.anchoredPositionY = m.anchoredPositionY + 180, f.anchoredPositionX = g.anchoredPositionX - 130 - 60, f.anchoredPositionY = g.anchoredPositionY + 1, g.anchoredPositionX +=
|
|
130, f.update(), _SETTINGS.MoreGames.Link && (f.link = _SETTINGS.MoreGames.Link), _SETTINGS.MoreGames.NewWindow && (f.newWindow = _SETTINGS.MoreGames.NewWindow), this.clickableLayer = new ClickableDivLayer(f)) : (f.update(), j.anchoredPositionX = f.anchoredPositionX + 60, j.anchoredPositionY = f.anchoredPositionY + 56, f.kill());
|
|
this.fullscreenButton = ig.game.spawnEntity(ig.FullscreenButton, -68, 10, {
|
|
enterImage: new ig.Image("media/graphics/sprites/button-maximize.png"),
|
|
exitImage: new ig.Image("media/graphics/sprites/button-minimize.png")
|
|
});
|
|
this.fullscreenButton.anchorType = "right-top"
|
|
},
|
|
onRewardPopupOpen: function() {
|
|
this.playbtn.inputEnabled = !1;
|
|
this.settingsbtn.inputEnabled = !1;
|
|
this.carSelector.leftBtn.inputEnabled = !1;
|
|
this.carSelector.rightBtn.inputEnabled = !1
|
|
},
|
|
onRewardPopupClosed: function() {
|
|
this.playbtn.inputEnabled = !0;
|
|
this.settingsbtn.inputEnabled = !0;
|
|
this.carSelector.leftBtn.inputEnabled = !0;
|
|
this.carSelector.rightBtn.inputEnabled = !0
|
|
},
|
|
onRewardCollected: function() {
|
|
ig.game.addRewardToGame(ig.dailyreward.collectedRewards.pop());
|
|
this.coinDisplay.textString =
|
|
"" + ig.game.sessionData.collectedCoin
|
|
},
|
|
exitAllItems: function() {
|
|
this.fullscreenButton.kill();
|
|
for (var b = 0; b < this.items.length; b++) this.items[b].exit()
|
|
},
|
|
onClickSettings: function() {
|
|
this.isAllowInput && (this.isAllowInput = !1, ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click), this.exitAllItems(), this.tween({}, ig.game.fadeDuration, {
|
|
onComplete: function() {
|
|
ig.game.goToLevel("MainMenuSettings")
|
|
}.bind(this)
|
|
}).start())
|
|
},
|
|
onClickPlay: function() {
|
|
this.isAllowInput && (this.isAllowInput = !1, this.carSelector.currentId =
|
|
ig.game.sessionData.currentCar, this.carSelector.refreshCarSkin(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click), this.exitAllItems(), this.goToSelectBoosters())
|
|
},
|
|
goToSelectBoosters: function() {
|
|
this.tween({}, ig.game.fadeDuration, {
|
|
onComplete: function() {
|
|
ig.game.sessionData.hasShownBoosterTutorial ? ig.game.goToLevel("SelectBoosters") : ig.game.goToLevel("BoosterTutorial")
|
|
}.bind(this)
|
|
}).start()
|
|
},
|
|
goToGameplay: function() {
|
|
ig.gameScene.cameraUnfollow();
|
|
ig.gameScene.whiteCoverAlpha = -0.5;
|
|
ig.gameScene.whiteCoverSpeed = 4;
|
|
ig.gameScene.whiteCoverTarget = 1;
|
|
ig.soundHandler.sfxPlayer.soundList.engineLow.stop();
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engineOut);
|
|
this.delayedCall(0.3, function() {
|
|
var b = 40;
|
|
ig.gameScene.useLessEffects && (b = 57);
|
|
ig.gameScene.useLessEffects = wgl.system.engine.performanceMonitor.averageFPS < b ? !0 : !1;
|
|
ig.game.sessionData.hasShownTutorial ? ig.game.goToLevel("Gameplay") : (ig.game.sessionData.hasShownTutorial = !0, ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save(),
|
|
ig.game.goToLevel("Tutorial"))
|
|
}.bind(this))
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
ig.gameScene.update();
|
|
ig.game.justBlurred && (ig.game.justBlurred = !1, ig.game.toggleRenderHack());
|
|
this.coinDisplay && (this.coinDisplay.textString = ig.game.sessionData.collectedCoin + "");
|
|
this.whiteCover && (ig.gameScene.whiteCoverAlpha = this.whiteCover.alpha, console.log(this.whiteCover.alpha));
|
|
this.clickableLayer && (this.playbtn.inputEnabled ? this.clickableLayer.update(this.moregamesbtn.pos.x, this.moregamesbtn.pos.y, this.moregamesbtn.width,
|
|
this.moregamesbtn.height) : this.clickableLayer.update(-9999, -9999, this.moregamesbtn.width, this.moregamesbtn.height))
|
|
},
|
|
draw: function() {
|
|
this.parent();
|
|
ig.global.wm || (ig.system.context.clearRect(0, 0, ig.system.width, ig.system.height), ig.yandex.drawBranding(ig.system.context, ig.system.width - 10, ig.system.height - 10, {
|
|
fontSize: 18,
|
|
fontFamily: "helvetica",
|
|
textAlign: "right",
|
|
textBaseline: "bottom",
|
|
fillStyle: "rgba(0, 0, 0, 1)"
|
|
}))
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.levels.main-menu").requires("impact.image", "game.entities.controllers.main-menu-controller").defines(function() {
|
|
LevelMainMenu = {
|
|
entities: [{
|
|
type: "EntityMainMenuController",
|
|
x: 0,
|
|
y: 0
|
|
}],
|
|
layer: []
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.controllers.main-menu-settings-controller").requires("impact.entity", "game.toybox.controllers.controller", "game.toybox.objects.game-object", "game.toybox.objects.ui.buttons.button", "game.entities.popup.settings-popup").defines(function() {
|
|
EntityMainMenuSettingsController = EntityController.extend({
|
|
characterSelect: null,
|
|
buttonImages: [new ig.Image("media/graphics/sprites/button-settings.png"), new ig.Image("media/graphics/sprites/button-more-games.png"), new ig.Image("media/graphics/sprites/button-play.png")],
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.delayedCall(0.1, function() {
|
|
this.showPopup(EntitySettingsPopup)
|
|
}.bind(this))
|
|
},
|
|
onPopupFinished: function(b) {
|
|
this.parent(b);
|
|
this.isAllowInput && (this.isAllowInput = !1, ig.noFadeout = !0, this.tween({}, ig.game.fadeDuration, {
|
|
onComplete: function() {
|
|
ig.game.goToLevel("MainMenu")
|
|
}.bind(this)
|
|
}).start())
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
ig.gameScene.update()
|
|
},
|
|
draw: function() {
|
|
this.parent();
|
|
ig.global.wm || ig.system.context.clearRect(0, 0, ig.system.width, ig.system.height)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.levels.main-menu-settings").requires("impact.image", "game.entities.controllers.main-menu-settings-controller").defines(function() {
|
|
LevelMainMenuSettings = {
|
|
entities: [{
|
|
type: "EntityMainMenuSettingsController",
|
|
x: 0,
|
|
y: 0
|
|
}],
|
|
layer: []
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.buttons.button-pause").requires("game.entities.buttons.button").defines(function() {
|
|
EntityButtonPause = EntityButton.extend({
|
|
oriColor: "rgba(255,255,0,1)",
|
|
altColor: "rgba(255,0,0,1)",
|
|
fillColor: "rgba(255,0,0,1)",
|
|
textColor: "rgba(255,255,255,1)",
|
|
ignorePause: !0,
|
|
size: new BABYLON.Vector2(50, 50),
|
|
text: "Pause",
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e)
|
|
},
|
|
update: function() {
|
|
this.parent()
|
|
},
|
|
draw: function() {
|
|
this.parent();
|
|
var b = ig.system.context;
|
|
b.fillStyle = this.fillColor;
|
|
b.fillRect(this.pos.x, this.pos.y,
|
|
this.size.x, this.size.y);
|
|
b.textAlign = "center";
|
|
b.fillStyle = this.textColor;
|
|
b.fillText(this.text, this.pos.x + (this.size.y >>> 1), this.pos.y + (this.size.y >>> 1));
|
|
b.textAlign = "start"
|
|
},
|
|
clicked: function() {
|
|
this.fillColor = this.altColor;
|
|
console.log("clicked");
|
|
ig.game.paused = !ig.game.paused;
|
|
ig.game.paused ? wgl.system.stopRender() : wgl.system.startRender()
|
|
},
|
|
clicking: function() {},
|
|
released: function() {
|
|
this.fillColor = this.oriColor;
|
|
console.log("released")
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.io.virtual-joystick").defines(function() {
|
|
VirtualJoystick = ig.Class.extend({
|
|
pos: new BABYLON.Vector2(0, 0),
|
|
start: new BABYLON.Vector2(0, 0),
|
|
last: new BABYLON.Vector2(0, 0),
|
|
deltaPos: new BABYLON.Vector3(0, 0, 0),
|
|
deltaVector: new BABYLON.Vector2(0, 0),
|
|
axis: {
|
|
x: 0,
|
|
y: 1,
|
|
z: 2
|
|
},
|
|
reverseDirections: [!1, !1],
|
|
rotationspeed: 25,
|
|
inverseRotationspeed: 25,
|
|
sensibility: 25,
|
|
inversedSensibility: 25,
|
|
deltaPosition: new BABYLON.Vector3.Zero,
|
|
touches: [],
|
|
rotateOnAxisRelativeToMesh: !1,
|
|
pressed: !1,
|
|
color: "cyan",
|
|
pointerID: -1,
|
|
axisTarget: {
|
|
leftright: 0,
|
|
updown: 1
|
|
},
|
|
identifier: null,
|
|
drawVirtualStick: !1,
|
|
camera: null,
|
|
pressed: !1,
|
|
init: function(b) {
|
|
this.camera = b;
|
|
this.deltaPos = new BABYLON.Vector3.Zero;
|
|
this.inversedSensibility = 1 / (this.sensibility / 1E3);
|
|
this.inverseRotationspeed = 1 / (this.rotationspeed / 1E3);
|
|
this.axisTarget.leftright = this.axis.x;
|
|
this.axisTarget.updown = this.axis.y;
|
|
this.rotateOnAxisRelativeToMesh = !1
|
|
},
|
|
initialPos: function(b) {
|
|
null !== this.identifier ? this.identifier === b.identifier && (this.drawVirtualStick = !0, this.start = new BABYLON.Vector2(b.x + 0, b.y + 0), this.pos =
|
|
this.start.clone(), this.last = this.start.clone(), this.deltaVector.x = 0, this.deltaVector.y = 0, this.pressed = !0) : (this.drawVirtualStick = !0, this.identifier = b.identifier, this.start = new BABYLON.Vector2(b.x + 0, b.y + 0), this.pos = this.start.clone(), this.last = this.start.clone(), this.deltaVector.x = 0, this.deltaVector.y = 0, this.pressed = !0)
|
|
},
|
|
updatePos: function(b) {
|
|
if (b.identifier === this.identifier) {
|
|
this.pos.x = b.x;
|
|
this.pos.y = b.y;
|
|
this.deltaVector = this.pos.clone();
|
|
this.deltaVector = this.deltaVector.subtract(this.start);
|
|
b =
|
|
(this.reverseDirections[1] ? -1 : 1) * this.deltaVector.x / this.inversedSensibility;
|
|
switch (this.axisTarget.leftright) {
|
|
case this.axis.x:
|
|
this.deltaPos.x = Math.min(1, Math.max(-1, b));
|
|
break;
|
|
case this.axis.y:
|
|
this.deltaPos.y = Math.min(1, Math.max(-1, b));
|
|
break;
|
|
case this.axis.z:
|
|
this.deltaPos.z = Math.min(1, Math.max(-1, b))
|
|
}
|
|
b = (this.reverseDirections[0] ? 1 : -1) * this.deltaVector.y / this.inversedSensibility;
|
|
switch (this.axisTarget.updown) {
|
|
case this.axis.x:
|
|
this.deltaPos.x = Math.min(1, Math.max(-1, b));
|
|
break;
|
|
case this.axis.y:
|
|
this.deltaPos.y =
|
|
Math.min(1, Math.max(-1, b));
|
|
break;
|
|
case this.axis.z:
|
|
this.deltaPos.z = Math.min(1, Math.max(-1, b))
|
|
}
|
|
}
|
|
this.action()
|
|
},
|
|
release: function(b, c) {
|
|
"undefined" !== typeof c ? c && (this.drawVirtualStick = !1, this.deltaVector.x = 0, this.deltaVector.y = 0, this.identifier = null, this.pressed = !1) : b.identifier === this.identifier && (this.drawVirtualStick = !1, this.deltaVector.x = 0, this.deltaVector.y = 0, this.identifier = null, this.pressed = !1)
|
|
},
|
|
action: function() {},
|
|
debugText: function(b, c) {
|
|
var e = ig.system.context;
|
|
e.fillStyle = "rgba(255,255,0,1)";
|
|
e.fillText(":" + this.deltaVector.x + " , " + this.deltaVector.y, b, c);
|
|
e.fillText(":" + this.deltaPos.x + " , " + this.deltaPos.y + " , " + this.deltaPos.z, b, c + 30)
|
|
},
|
|
draw: function() {
|
|
var b = ig.system.context;
|
|
this.drawVirtualStick && (b.beginPath(), b.lineWidth = 6, b.strokeStyle = this.color, b.arc(this.start.x, this.start.y, 40, 0, 2 * Math.PI, !0), b.stroke(), b.closePath(), b.beginPath(), b.strokeStyle = this.color, b.lineWidth = 2, b.arc(this.start.x, this.start.y, 60, 0, 2 * Math.PI, !0), b.stroke(), b.closePath(), b.beginPath(), b.strokeStyle = this.color,
|
|
b.arc(this.pos.x, this.pos.y, 40, 0, 2 * Math.PI, !0), b.stroke(), b.closePath())
|
|
},
|
|
setSensibility: function(b) {
|
|
this.sensibility = b;
|
|
this.inversedSensibility = 1 / (this.sensibility / 1E3)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.handlers.webgl-virtual-joystick-handler").requires("plugins.io.virtual-joystick").defines(function() {
|
|
ig.WebglVirtualJoystickHandler = ig.Class.extend({
|
|
leftJoystick: null,
|
|
rightJoystick: null,
|
|
camera: null,
|
|
init: function(b) {
|
|
this.camera = b;
|
|
this.setupLeftJoystick();
|
|
this.setupRightJoystick()
|
|
},
|
|
setupLeftJoystick: function() {
|
|
this.leftJoystick = new VirtualJoystick(this.camera);
|
|
this.leftJoystick.color = "yellow";
|
|
this.leftJoystick.axisTarget.updown = this.leftJoystick.axis.z;
|
|
this.leftJoystick.axisTarget.leftright =
|
|
this.leftJoystick.axis.x;
|
|
this.leftJoystick.setSensibility(0.15);
|
|
this.leftJoystick.action = function() {
|
|
var b = this.camera,
|
|
c = 50 * b._computeLocalCameraSpeed(),
|
|
e = BABYLON.Matrix.RotationYawPitchRoll(b.rotation.y, b.rotation.x, 0),
|
|
c = BABYLON.Vector3.TransformCoordinates(new BABYLON.Vector3(this.deltaPos.x * c, this.deltaPos.y * c, this.deltaPos.z * c), e);
|
|
b.cameraDirection = b.cameraDirection.add(c);
|
|
this.pressed || (this.deltaPos = this.deltaPos.scale(0.9))
|
|
}.bind(this.leftJoystick)
|
|
},
|
|
setupRightJoystick: function() {
|
|
this.rightJoystick =
|
|
new VirtualJoystick(this.camera);
|
|
this.rightJoystick.color = "cyan";
|
|
this.rightJoystick.axisTarget.updown = this.rightJoystick.axis.x;
|
|
this.rightJoystick.axisTarget.leftright = this.rightJoystick.axis.y;
|
|
this.rightJoystick.reverseDirections[0] = !0;
|
|
this.rightJoystick.setSensibility(0.05);
|
|
this.rightJoystick.action = function() {
|
|
var b = this.camera;
|
|
b.cameraRotation = b.cameraRotation.addVector3(this.deltaPos);
|
|
this.pressed || (this.deltaPos = this.deltaPos.scale(0.9))
|
|
}.bind(this.rightJoystick)
|
|
},
|
|
update: function() {
|
|
this.resolveLeftRight(ig.multitouchInput.pressed,
|
|
this.leftJoystick.initialPos.bind(this.leftJoystick), this.rightJoystick.initialPos.bind(this.rightJoystick));
|
|
this.resolveLeftRight(ig.multitouchInput.state, this.leftJoystick.updatePos.bind(this.leftJoystick), this.rightJoystick.updatePos.bind(this.rightJoystick));
|
|
this.resolveLeftRight(ig.multitouchInput.released, this.leftJoystick.release.bind(this.leftJoystick), this.rightJoystick.release.bind(this.rightJoystick));
|
|
var b = ig.multitouchInput.released.length;
|
|
if (0 >= b + ig.multitouchInput.state.length + ig.multitouchInput.pressed.length) this.leftJoystick.release(null,
|
|
!0), this.rightJoystick.release(null, !0);
|
|
else if (0 < b)
|
|
for (b = 0; b < ig.multitouchInput.released.length; b++) {
|
|
var c = ig.multitouchInput.released[b];
|
|
this.leftJoystick.release(c);
|
|
this.rightJoystick.release(c)
|
|
}
|
|
},
|
|
resolveLeftRight: function(b, c, e) {
|
|
for (var d = 0; d < b.length; d++) {
|
|
var g = b[d];
|
|
g.x > ig.system.width >>> 1 ? e(g) : c(g)
|
|
}
|
|
},
|
|
draw: function() {
|
|
var b = ig.system.context;
|
|
this.leftJoystick.draw();
|
|
this.rightJoystick.draw();
|
|
if (wgl.debug.debug) {
|
|
this.leftJoystick.debugText(20, 100);
|
|
b.fillText(ig.multitouchInput.pressed.length + ";" +
|
|
ig.multitouchInput.state.length + ";" + ig.multitouchInput.released.length, 20, 200);
|
|
for (var c = 0; c < ig.multitouchInput.pressed.length; c++) {
|
|
var e = ig.multitouchInput.pressed[c].x,
|
|
d = ig.multitouchInput.pressed[c].y,
|
|
g = ig.multitouchInput.pressed[c].identifier;
|
|
b.fillText(g + ";" + e + ";" + d, 20, 250 + 50 * c)
|
|
}
|
|
for (c = 0; c < ig.multitouchInput.state.length; c++) e = ig.multitouchInput.state[c].x, d = ig.multitouchInput.state[c].y, g = ig.multitouchInput.state[c].identifier, b.fillText(g + ";" + e + ";" + d, 100, 250 + 50 * c);
|
|
for (c = 0; c < ig.multitouchInput.released.length; c++) e =
|
|
ig.multitouchInput.released[c].x, d = ig.multitouchInput.released[c].y, g = ig.multitouchInput.released[c].identifier, b.fillText(g + ";" + e + ";" + d, 180, 250 + 50 * c)
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.handlers.webgl-mouse-handler").defines(function() {
|
|
ig.WebglMouseHandler = ig.Class.extend({
|
|
camera: null,
|
|
angularSensibility: 2E3,
|
|
init: function(b) {
|
|
this.camera = b
|
|
},
|
|
update: function() {
|
|
ig.input.pressed("click") && ig.game.io.getClickPos();
|
|
if (ig.input.state("click")) {
|
|
var b = ig.game.io.getLastClickPos(),
|
|
c = ig.game.io.getClickPos(),
|
|
e = c.y - b.y;
|
|
this.camera.cameraRotation.y += (c.x - b.x) / this.angularSensibility;
|
|
this.camera.cameraRotation.x += e / this.angularSensibility
|
|
}
|
|
},
|
|
draw: function() {}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.popup.gameplay-settings-popup").requires("game.entities.popup.settings-popup").defines(function() {
|
|
EntityGameplaySettingsPopup = EntitySettingsPopup.extend({
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.resumeButton = this.spawnMember(EntityButton, 315, this.homeButton.pos.y, {
|
|
singleFrameImage: this.Images[3],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.resumeButton.onClicked.addOnce(this.onClickResume, this);
|
|
this.homeButton.anchoredPositionX =
|
|
225;
|
|
this.title.textString = _STRINGS.Game.Paused;
|
|
ig.game.sortEntitiesDeferred()
|
|
},
|
|
update: function() {
|
|
this.parent()
|
|
},
|
|
onClickHome: function() {
|
|
if (this.isAllowInput) {
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click);
|
|
this.isAllowInput = !1;
|
|
this.delayedCall(ig.game.fadeDuration, function() {
|
|
this.delayedCall(ig.game.fadeDuration, function() {
|
|
ig.game.goToLevel("MainMenu")
|
|
}.bind(this))
|
|
}.bind(this));
|
|
for (var b = 0; b < this.members.length; b++) this.members[b].exit();
|
|
try {
|
|
ig.yandex.showAd()
|
|
} catch (c) {
|
|
console.log(c)
|
|
}
|
|
}
|
|
},
|
|
onClickResume: function() {
|
|
this.isAllowInput && (this.isAllowInput = !1, this.exit(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click))
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.popup.tutorial-popup").requires("game.toybox.objects.ui.popups.popup", "game.toybox.objects.ui.buttons.volume-slider-button").defines(function() {
|
|
EntityTutorialPopup = EntityPopup.extend({
|
|
Images: [new ig.Image("media/graphics/sprites/bg-popup.png"), new ig.Image("media/graphics/sprites/button-continue.png")],
|
|
exitDelay: 0,
|
|
exitDuration: 0.25,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.spawnMember(EntityButton, 480, 220, {
|
|
singleFrameImage: this.Images[0],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.title = this.spawnMember(EntityShadowText, 480, 140, {
|
|
shadowOffsetY: 4,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
textString: _STRINGS.Game.Tutorial,
|
|
textFont: "46px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#29eaff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.spawnMember(EntityShadowText, 480, 200, {
|
|
shadowOffsetY: 4,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
textString: _STRINGS.Game.TutorialText1,
|
|
textFont: "28px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#29eaff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.spawnMember(EntityShadowText, 480, 250, {
|
|
shadowOffsetY: 4,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
textString: _STRINGS.Game.TutorialText2,
|
|
textFont: "28px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#29eaff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.continueBtn = this.spawnMember(EntityButton, 480, 325, {
|
|
singleFrameImage: this.Images[1],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
entryDuration: 0.25,
|
|
exitDuration: 0.25
|
|
});
|
|
this.continueBtn.onClicked.addOnce(this.onClickBack, this);
|
|
ig.game.sortEntitiesDeferred()
|
|
},
|
|
onClickBack: function() {
|
|
this.isAllowInput && (this.isAllowInput = !1, this.exit(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click))
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.objects.ui.texts.text").requires("game.toybox.objects.game-object").defines(function() {
|
|
EntityText = EntityGameObject.extend({
|
|
textString: "",
|
|
textFont: "48px Arial",
|
|
textRgb: ig.color.hexToRgb("#FFFFFF"),
|
|
textAlign: "start",
|
|
textOffsetX: 0,
|
|
textOffsetY: 0,
|
|
zIndex: 7E3,
|
|
forceDraw: !0,
|
|
textLineSpacing: 1,
|
|
_previousTextString: "",
|
|
_multiline: !1,
|
|
_lines: [],
|
|
_lineSpacing: 0,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e)
|
|
},
|
|
drawObject: function(b, c) {
|
|
if (this.visible && 0 < this.textString.length) {
|
|
this._previousTextString !=
|
|
this.textString && (this._previousTextString = this.textString, this._lines = this.textString.split(/\r?\n/), 1 < this._lines.length ? (this._multiline = !0, this._lineSpacing = parseInt(this.textFont.split("px")[0].split(" ").pop()) * this.textLineSpacing) : this._multiline = !1);
|
|
var e = ig.system.context;
|
|
e.save();
|
|
e.font = this.textFont;
|
|
e.textAlign = this.textAlign;
|
|
e.fillStyle = 1 > this.alpha ? "rgba(" + this.textRgb.r + "," + this.textRgb.g + "," + this.textRgb.b + "," + this.alpha + ")" : this.textRgb.hex;
|
|
var d = b + this.textOffsetX,
|
|
g = c + this.textOffsetY;
|
|
if (this._multiline) {
|
|
var f = g;
|
|
"center" == this.textVAlign && (f = g - (this._lines.length - 1) * this._lineSpacing / 2);
|
|
for (g = 0; g < this._lines.length; g++) e.fillText(this._lines[g], d, f + g * this._lineSpacing)
|
|
} else this._lineSpacing && (g += this._lineSpacing / 2), e.fillText(this.textString, d, g);
|
|
e.restore()
|
|
}
|
|
},
|
|
measureTextWidth: function() {
|
|
var b = ig.system.context;
|
|
b.save();
|
|
b.font = this.textFont;
|
|
b.textAlign = "left";
|
|
var c = b.measureText(this.textString);
|
|
b.restore();
|
|
return c.width
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.objects.ui.texts.shadow-text").requires("game.toybox.objects.ui.texts.text").defines(function() {
|
|
EntityShadowText = EntityText.extend({
|
|
shadowRgb: ig.color.hexToRgb("#000000"),
|
|
shadowOffsetX: 0,
|
|
shadowOffsetY: 4,
|
|
shadowAlpha: 0.4,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e)
|
|
},
|
|
drawObject: function() {
|
|
if (this.visible) {
|
|
var b = ig.system.context;
|
|
b.save();
|
|
b.font = this.textFont;
|
|
b.textAlign = this.textAlign;
|
|
if (!this.shadowRgb.none) {
|
|
b.fillStyle = 1 > this.alpha || 1 > this.shadowAlpha ? "rgba(" + this.shadowRgb.r + "," +
|
|
this.shadowRgb.g + "," + this.shadowRgb.b + "," + this.alpha * this.shadowAlpha + ")" : this.shadowRgb.hex;
|
|
var c = this.textOffsetX + this.shadowOffsetX,
|
|
e = this.textOffsetY + this.shadowOffsetY;
|
|
b.fillText(this.textString, c, e)
|
|
}
|
|
b.fillStyle = 1 > this.alpha ? "rgba(" + this.textRgb.r + "," + this.textRgb.g + "," + this.textRgb.b + "," + this.alpha + ")" : this.textRgb.hex;
|
|
c = this.textOffsetX;
|
|
e = this.textOffsetY;
|
|
b.fillText(this.textString, c, e);
|
|
b.restore()
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.ui.flying-score").requires("game.toybox.objects.ui.texts.shadow-text").defines(function() {
|
|
EntityFlyingScore = EntityShadowText.extend({
|
|
playerMesh: null,
|
|
camera: null,
|
|
textFont: "48px mainfont",
|
|
textRgb: ig.color.hexToRgb("#fafaff"),
|
|
textAlign: "center",
|
|
zIndex: 7E3,
|
|
identity: null,
|
|
entryDelay: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
yRise: 0,
|
|
riseVec: null,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.identity = BABYLON.Matrix.Identity();
|
|
this.riseVec = new BABYLON.Vector3(0, 0, 0);
|
|
this.yRise = 5;
|
|
this.tween({
|
|
yRise: 15
|
|
},
|
|
0.3, {
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut,
|
|
delay: 0.5,
|
|
onComplete: function() {
|
|
this.delayedCall(0.25, function() {
|
|
this.exit()
|
|
}.bind(this))
|
|
}.bind(this)
|
|
}).start()
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.riseVec.y = this.yRise;
|
|
var b = this.playerMesh.position.add(this.riseVec),
|
|
c = BABYLON.Matrix.Identity(),
|
|
e = wgl.game.currentScene.getTransformMatrix(),
|
|
b = BABYLON.Vector3.Project(b, c, e, this.camera.viewport);
|
|
this.pos.x = 540 * b.x;
|
|
this.pos.y = 960 * b.y
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.ui.extra-life-animation").requires("game.toybox.objects.game-object").defines(function() {
|
|
EntityExtraLifeAnimation = EntityGameObject.extend({
|
|
icon: new ig.Image("media/graphics/sprites/extra-life-splash.png"),
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
scaleX: 0.8,
|
|
scaleY: 0.8,
|
|
init: function(b, c, e) {
|
|
e.singleFrameImage = this.icon;
|
|
e.anchorType = "bottom";
|
|
this.parent(0, -100, e)
|
|
},
|
|
update: function() {
|
|
this.parent()
|
|
},
|
|
splash: function() {
|
|
this.tween({
|
|
anchoredPositionY: -480
|
|
}, 0.5, {
|
|
delay: 0,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
scaleX: 3,
|
|
scaleY: 3,
|
|
alpha: 0
|
|
}, 0.5, {
|
|
delay: 0.5,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut,
|
|
onComplete: function() {
|
|
this.kill()
|
|
}.bind(this)
|
|
}).start()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.ui.extra-life-countdown").requires("game.toybox.objects.game-object").defines(function() {
|
|
EntityExtraLifeCountdown = EntityGameObject.extend({
|
|
zIndex: 999999,
|
|
count: 4,
|
|
forceDraw: !0,
|
|
init: function(b, c, e) {
|
|
e.anchorType = "center";
|
|
this.parent(b, c, e)
|
|
},
|
|
drawObject: function(b, c) {
|
|
this.parent();
|
|
if (!(0 >= this.count || 3 < this.count)) {
|
|
var e = ig.system.context;
|
|
e.save();
|
|
e.globalAlpha = this.alpha;
|
|
e.globalAlpha = 0.5 < this.alpha ? 1 : 2 * this.alpha;
|
|
e.font = "120px mainfont";
|
|
e.fillStyle = "#ffffff";
|
|
e.strokeStyle = "#333333";
|
|
e.lineWidth = 5;
|
|
e.textAlign = "center";
|
|
e.fillText(this.count + "", b, c);
|
|
e.strokeText(this.count + "", b, c);
|
|
e.globalAlpha = 1;
|
|
e.restore()
|
|
}
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.alpha -= 2 * ig.system.tick;
|
|
0 >= this.alpha && (this.alpha = 1, this.count--);
|
|
0 >= this.count && this.kill()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.controllers.gameplay-controller").requires("impact.entity", "game.entities.buttons.button-pause", "game.entities.pointer", "plugins.handlers.webgl-virtual-joystick-handler", "plugins.handlers.webgl-mouse-handler", "game.toybox.controllers.controller", "game.entities.popup.gameplay-settings-popup", "game.entities.popup.tutorial-popup", "game.entities.ui.flying-score", "game.entities.ui.extra-life-animation", "game.entities.ui.extra-life-countdown", "game.toybox.objects.ui.texts.shadow-text").defines(function() {
|
|
EntityGameplayController =
|
|
EntityController.extend({
|
|
scoreDisplay: null,
|
|
coinDisplay: null,
|
|
hasExitUI: !1,
|
|
gameOverTimer: 0,
|
|
isGameOver: !1,
|
|
isEngineRunning: !1,
|
|
images: [new ig.Image("media/graphics/sprites/button-pause.png"), new ig.Image("media/graphics/sprites/button-continue.png"), new ig.Image("media/graphics/sprites/coin.png")],
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
ig.useTheCorrectBabylon || console.warn("WARNING : USES INCORRECT CUSTOM BABYLON ON BUILD!!!!!");
|
|
this.gameOverTimer = 1;
|
|
this.isGameOver = !1;
|
|
ig.currentGame = this;
|
|
ig.game.lastScore =
|
|
0;
|
|
ig.game.spawnEntity(EntityButton, 10, 15, {
|
|
anchorType: "top-left",
|
|
entryDelay: 2,
|
|
singleFrameImage: this.images[2],
|
|
scaleX: 0.85,
|
|
scaleY: 0.85,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.coinDisplay = ig.game.spawnEntity(EntityShadowText, 60, 50, {
|
|
anchorType: "top-left",
|
|
entryDelay: 2,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
shadowOffsetY: 4,
|
|
textString: ig.game.sessionData.collectedCoin + "",
|
|
textFont: "42px mainfont",
|
|
textAlign: "left",
|
|
textRgb: ig.color.hexToRgb("#ffffff")
|
|
});
|
|
this.scoreDisplay = ig.game.spawnEntity(EntityShadowText,
|
|
15, 60, {
|
|
anchorType: "top",
|
|
entryDelay: 2,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
shadowOffsetY: 4,
|
|
textString: ig.game.lastScore + "",
|
|
textFont: "72px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff")
|
|
});
|
|
this.pauseButton = ig.game.spawnEntity(EntityButton, -10, 10, {
|
|
anchorType: "right-top",
|
|
entryDelay: 2,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
singleFrameImage: this.images[0],
|
|
anchorX: 1,
|
|
anchorY: 0,
|
|
scaleX: 0.8,
|
|
scaleY: 0.8
|
|
});
|
|
this.pauseButton.onClicked.add(this.onClickSettings, this);
|
|
ig.gameScene.isMainMenu = !1;
|
|
ig.gameScene.isTutorial = !1;
|
|
ig.gameScene.restart();
|
|
ig.gameScene.whiteCoverAlpha = 2;
|
|
ig.gameScene.whiteCoverSpeed = 2;
|
|
ig.gameScene.whiteCoverTarget = 0;
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engineIn);
|
|
this.delayedCall(0.8, function() {
|
|
ig.soundHandler.sfxPlayer.soundList.engineIn.stop();
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engineLow);
|
|
this.isEngineRunning = !0
|
|
}.bind(this));
|
|
this.delayedCall(1.8, function() {
|
|
ig.soundHandler.sfxPlayer.soundList.engineLow.stop();
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engine)
|
|
}.bind(this));
|
|
ig.booster2Active && (this.extraLifeDisplay = ig.game.spawnEntity(EntityExtraLifeAnimation, 0, 0))
|
|
},
|
|
onClickSettings: function() {
|
|
this.isAllowInput && (this.isAllowInput = !1, wgl.system.unregisterBeforeRender(), this.showPopup(EntityGameplaySettingsPopup), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click), this.isEngineRunning && ig.soundHandler.sfxPlayer.soundList.engine.pause())
|
|
},
|
|
onPopupFinished: function(b) {
|
|
this.parent(b);
|
|
wgl.system.registerBeforeRender();
|
|
this.isAllowInput = !1;
|
|
ig.game.toggleRenderHack();
|
|
this.delayedCall(0.25, function() {
|
|
this.isAllowInput = !0;
|
|
this.isEngineRunning && ig.soundHandler.sfxPlayer.soundList.engine.play()
|
|
}.bind(this))
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
ig.game.justBlurred && (ig.game.justBlurred = !1, ig.game.toggleRenderHack(), this.isAllowInput && (this.isAllowInput = !1, this.delayedCall(0.25, function() {
|
|
this.isAllowInput = !0
|
|
}.bind(this))));
|
|
this.isAllowInput && (ig.gameScene.carSkeleton.chassis.position.z < ig.gameScene.zero.z ? this.isGameOver || (ig.game.lastScore += 10 * ig.system.tick, ig.booster1Active &&
|
|
(ig.game.lastScore += 10 * ig.system.tick), ig.gameScene.carSkeleton.direction = this.isClicking && 80 < this.lastTouchY || ig.input.state("space") ? 1 : 0) : ig.game.lastScore = 0, this.scoreDisplay.textString = "" + ig.game.lastScore.toFixed(), this.coinDisplay.textString = "" + ig.game.sessionData.collectedCoin, ig.gameScene.update(), 0 < this.gameOverTimer && ig.gameScene.latestPlatform && ig.gameScene.carSkeleton.chassis.position.y < ig.gameScene.latestPlatform.skeleton.position.y - 20 && (ig.booster2Active ? (this.isAllowInput = ig.booster2Active = !1, this.extraLifeDisplay.splash(), setTimeout(function() {
|
|
ig.gameScene.moveCarToSafePlatform();
|
|
ig.gameScene.update();
|
|
ig.game.spawnEntity(EntityExtraLifeCountdown, 0, 0, {});
|
|
setTimeout(function() {
|
|
this.isAllowInput = !0
|
|
}.bind(this), 2E3)
|
|
}.bind(this), 500)) : (this.isGameOver = !0, this.isEngineRunning && (this.isEngineRunning = !1, ig.soundHandler.sfxPlayer.soundList.engine.stop(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engineOut)), this.gameOverTimer -= ig.system.tick, 0 >= this.gameOverTimer && ig.game.goToLevel("GameOver"))))
|
|
},
|
|
draw: function() {
|
|
this.parent();
|
|
ig.global.wm || ig.system.context.clearRect(0, 0, ig.system.width, ig.system.height)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.levels.gameplay").requires("impact.image", "game.entities.controllers.gameplay-controller").defines(function() {
|
|
LevelGameplay = {
|
|
entities: [{
|
|
type: "EntityGameplayController",
|
|
x: 0,
|
|
y: 0
|
|
}],
|
|
layer: []
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.ui.circle-effect").requires("game.toybox.objects.game-object").defines(function() {
|
|
EntityCircleEffect = EntityGameObject.extend({
|
|
init: function(b, c) {
|
|
this.parent(b, c, {
|
|
scaleX: 0,
|
|
scaleY: 0,
|
|
forceDraw: !0,
|
|
zIndex: 999999
|
|
});
|
|
this.tween({
|
|
scaleX: 3.5,
|
|
scaleY: 3.5
|
|
}, 0.4, {
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
alpha: 0
|
|
}, 0.2, {
|
|
delay: 0.2,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.delayedCall(1.1, function() {
|
|
this.exit()
|
|
}.bind(this));
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)
|
|
},
|
|
update: function() {
|
|
this.parent()
|
|
},
|
|
drawObject: function(b, c) {
|
|
this.parent();
|
|
var e = ig.system.context;
|
|
e.globalAlpha = this.alpha;
|
|
e.strokeStyle = "#fa8d2c";
|
|
e.lineWidth = 4;
|
|
e.beginPath();
|
|
e.arc(b, c, 20, 0, 2 * Math.PI);
|
|
e.stroke();
|
|
e.closePath();
|
|
e.globalAlpha = 1
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.controllers.tutorial-controller").requires("impact.entity", "game.entities.buttons.button-pause", "game.entities.pointer", "plugins.handlers.webgl-virtual-joystick-handler", "plugins.handlers.webgl-mouse-handler", "game.toybox.controllers.controller", "game.entities.popup.gameplay-settings-popup", "game.entities.popup.tutorial-popup", "game.entities.ui.flying-score", "game.entities.ui.circle-effect", "game.toybox.objects.ui.texts.shadow-text").defines(function() {
|
|
EntityTutorialController =
|
|
EntityController.extend({
|
|
playButton: null,
|
|
tutorialLine1: null,
|
|
tutorialLine2: null,
|
|
yLimit: 80,
|
|
isGameOver: !1,
|
|
tutorialStages: [0, 0, 0, 0],
|
|
images: [new ig.Image("media/graphics/sprites/tutorial-bg.png"), new ig.Image("media/graphics/sprites/button-continue.png"), new ig.Image("media/graphics/sprites/coin.png")],
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
ig.global.wm || (ig.currentGame = this, ig.gameScene.isMainMenu = !1, ig.gameScene.isTutorial = !0, ig.gameScene.restart(), ig.game.spawnEntity(EntityGameObject, 0, 20, {
|
|
width: 540,
|
|
height: 80,
|
|
drawAsRect: !0,
|
|
alpha: 0.5,
|
|
rectColor: ig.color.hexToRgb("#000000")
|
|
}), ig.game.spawnEntity(EntityShadowText, 270, 80, {
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
shadowOffsetY: 5,
|
|
textString: _STRINGS.Tutorial.Title,
|
|
textFont: "72px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff")
|
|
}), ig.gameScene.whiteCoverAlpha = 2.5, ig.gameScene.whiteCoverSpeed = 1.5, ig.gameScene.whiteCoverTarget = 0, b = ig.game.spawnEntity(EntityGameObject, 270, 220, {
|
|
anchorX: 0.5,
|
|
scaleY: 0.6,
|
|
singleFrameImage: this.images[0]
|
|
}), this.tutorialLine1 =
|
|
ig.game.spawnEntity(EntityShadowText, 270, b.pos.y + 55, {
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
shadowOffsetY: 5,
|
|
textString: "",
|
|
textFont: "38px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#efefef")
|
|
}), this.tutorialLine2 = ig.game.spawnEntity(EntityShadowText, 270, b.pos.y + 110, {
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
shadowOffsetY: 5,
|
|
textString: "",
|
|
textFont: "38px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#efefef")
|
|
}), this.playButton = ig.game.spawnEntity(EntityButton, 480, 340, {
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
singleFrameImage: this.images[1],
|
|
anchorX: 1,
|
|
anchorY: 0,
|
|
scaleX: 0.9,
|
|
scaleY: 0.7
|
|
}), this.playButton.onClicked.add(this.onClickPlay, this), this.playButton.visible = !1, ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engineIn), this.delayedCall(0.8, function() {
|
|
ig.soundHandler.sfxPlayer.soundList.engineIn.stop();
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engine);
|
|
this.isEngineRunning = !0
|
|
}.bind(this)))
|
|
},
|
|
onClickPlay: function() {
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click);
|
|
this.playButton.inputEnabled = !1;
|
|
ig.gameScene.cameraUnfollow();
|
|
this.isAllowInput = !1;
|
|
ig.gameScene.carSkeleton.direction = 0;
|
|
ig.gameScene.whiteCoverAlpha = -0.5;
|
|
ig.gameScene.whiteCoverSpeed = 4;
|
|
ig.gameScene.whiteCoverTarget = 1;
|
|
ig.soundHandler.sfxPlayer.soundList.engine.stop();
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engineOut);
|
|
this.delayedCall(0.9, function() {
|
|
var b = 40;
|
|
ig.gameScene.useLessEffects && (b = 57);
|
|
ig.gameScene.useLessEffects = wgl.system.engine.performanceMonitor.averageFPS < b ? !0 :
|
|
!1;
|
|
ig.game.goToLevel("Gameplay")
|
|
}.bind(this))
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
ig.game.justBlurred && (ig.game.justBlurred = !1, ig.game.toggleRenderHack(), this.isAllowInput && (this.isAllowInput = !1, this.delayedCall(0.25, function() {
|
|
this.isAllowInput = !0
|
|
}.bind(this))));
|
|
if (this.isAllowInput) {
|
|
ig.gameScene.carSkeleton.chassis.position.z < ig.gameScene.zero.z && !this.isGameOver && (ig.gameScene.carSkeleton.direction = this.isClicking && this.lastTouchY > this.yLimit || ig.input.state("space") ? 1 : 0);
|
|
ig.gameScene.update();
|
|
var b =
|
|
ig.system.tick;
|
|
1 > this.tutorialStages[0] ? (this.tutorialLine1.textString = ig.ua.mobile ? _STRINGS.Tutorial.Mobile.Text1Line1 : _STRINGS.Tutorial.Desktop.Text1Line1, this.tutorialLine2.textString = ig.ua.mobile ? _STRINGS.Tutorial.Mobile.Text1Line2 : _STRINGS.Tutorial.Desktop.Text1Line2, 1 == ig.gameScene.carSkeleton.direction ? this.tutorialStages[0] += b / 2 : 0 < this.tutorialStages[0] && (this.tutorialStages[0] -= b / 2), 1 <= this.tutorialStages[0] && (ig.game.spawnEntity(EntityCircleEffect, 160, 155), ig.game.sortEntitiesDeferred())) :
|
|
1 > this.tutorialStages[1] ? (this.tutorialLine1.textString = ig.ua.mobile ? _STRINGS.Tutorial.Mobile.Text2Line1 : _STRINGS.Tutorial.Desktop.Text2Line1, this.tutorialLine2.textString = ig.ua.mobile ? _STRINGS.Tutorial.Mobile.Text2Line2 : _STRINGS.Tutorial.Desktop.Text2Line2, 0 == ig.gameScene.carSkeleton.direction ? this.tutorialStages[1] += b / 2 : 0 < this.tutorialStages[1] && (this.tutorialStages[1] -= b / 2), 1 <= this.tutorialStages[1] && (ig.game.spawnEntity(EntityCircleEffect, 270, 155), ig.game.sortEntitiesDeferred())) : 1 > this.tutorialStages[2] ?
|
|
(this.tutorialLine1.textString = ig.ua.mobile ? _STRINGS.Tutorial.Mobile.Text3Line1 : _STRINGS.Tutorial.Desktop.Text3Line1, this.tutorialLine2.textString = ig.ua.mobile ? _STRINGS.Tutorial.Mobile.Text3Line2 : _STRINGS.Tutorial.Desktop.Text3Line2, 1 == ig.gameScene.carSkeleton.direction ? this.tutorialStages[2] += b / 2 : 0 < this.tutorialStages[2] && (this.tutorialStages[2] -= b / 2), 1 <= this.tutorialStages[2] && (ig.game.spawnEntity(EntityCircleEffect, 380, 155), ig.game.sortEntitiesDeferred())) : 1 > this.tutorialStages[3] ? (this.tutorialLine1.textString =
|
|
ig.ua.mobile ? _STRINGS.Tutorial.Mobile.Text4Line1 : _STRINGS.Tutorial.Desktop.Text4Line1, this.tutorialLine2.textString = ig.ua.mobile ? _STRINGS.Tutorial.Mobile.Text4Line2 : _STRINGS.Tutorial.Desktop.Text4Line2, 0 == ig.gameScene.carSkeleton.direction ? this.tutorialStages[3] += b / 2 : 0 < this.tutorialStages[3] && (this.tutorialStages[3] -= b / 2), 1 <= this.tutorialStages[3] && (ig.game.spawnEntity(EntityCircleEffect, 490, 155), ig.game.sortEntitiesDeferred())) : (this.tutorialLine1.textString = _STRINGS.Tutorial.TutorialCompleteLine1,
|
|
this.tutorialLine2.textString = _STRINGS.Tutorial.TutorialCompleteLine2, this.playButton.visible = !0, this.yLimit = 400)
|
|
} else ig.gameScene.update()
|
|
},
|
|
draw: function() {
|
|
this.parent();
|
|
if (!ig.global.wm) {
|
|
var b = ig.system.context;
|
|
b.clearRect(0, 0, ig.system.width, ig.system.height);
|
|
var c = ig.responsive.toAnchor(0, 0, "default");
|
|
b.save();
|
|
var e = 2 * Math.PI,
|
|
d = c.x + 50,
|
|
g = c.y + 150,
|
|
c = c.y + 155;
|
|
b.fillStyle = "rgba(0,0,0,0.5)";
|
|
b.fillRect(d, g + 5, 440, 10);
|
|
b.beginPath();
|
|
b.arc(d, c + 5, 15, 0, e);
|
|
b.arc(d + 110, c + 5, 15, 0, e);
|
|
b.arc(d + 220, c + 5, 15, 0, e);
|
|
b.arc(d +
|
|
330, c + 5, 15, 0, e);
|
|
b.arc(d + 440, c + 5, 15, 0, e);
|
|
b.fill();
|
|
b.closePath();
|
|
b.fillStyle = "#efefef";
|
|
b.fillRect(d, g, 440, 10);
|
|
b.beginPath();
|
|
b.arc(d, c, 15, 0, e);
|
|
b.arc(d + 110, c, 15, 0, e);
|
|
b.arc(d + 220, c, 15, 0, e);
|
|
b.arc(d + 330, c, 15, 0, e);
|
|
b.arc(d + 440, c, 15, 0, e);
|
|
b.fill();
|
|
b.closePath();
|
|
b.fillStyle = "#fa8d2c";
|
|
b.fillRect(d, g, 95 * (1 < this.tutorialStages[0] ? 1 : this.tutorialStages[0]), 10);
|
|
b.fillRect(d + 110, g, 95 * (1 < this.tutorialStages[1] ? 1 : this.tutorialStages[1]), 10);
|
|
b.fillRect(d + 220, g, 95 * (1 < this.tutorialStages[2] ? 1 : this.tutorialStages[2]), 10);
|
|
b.fillRect(d + 330, g, 95 * (1 < this.tutorialStages[3] ? 1 : this.tutorialStages[3]), 10);
|
|
b.beginPath();
|
|
b.arc(d, c, 15, 0, e);
|
|
1 <= this.tutorialStages[0] && b.arc(d + 110, c, 15, 0, e);
|
|
1 <= this.tutorialStages[1] && b.arc(d + 220, c, 15, 0, e);
|
|
1 <= this.tutorialStages[2] && b.arc(d + 330, c, 15, 0, e);
|
|
1 <= this.tutorialStages[3] && b.arc(d + 440, c, 15, 0, e);
|
|
b.fill();
|
|
b.closePath();
|
|
b.restore()
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.levels.tutorial").requires("impact.image", "game.entities.controllers.tutorial-controller").defines(function() {
|
|
LevelTutorial = {
|
|
entities: [{
|
|
type: "EntityTutorialController",
|
|
x: 0,
|
|
y: 0
|
|
}],
|
|
layer: []
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.controllers.game-over-controller").requires("impact.entity", "game.toybox.controllers.controller", "game.toybox.objects.ui.texts.text", "game.toybox.objects.ui.buttons.button", "game.toybox.objects.ui.texts.shadow-text").defines(function() {
|
|
EntityGameOverController = EntityController.extend({
|
|
fadeInAlpha: 1,
|
|
fadeOutAlpha: 0,
|
|
Images: [new ig.Image("media/graphics/sprites/button-home.png"), new ig.Image("media/graphics/sprites/button-restart.png"), new ig.Image("media/graphics/sprites/game-over.png"),
|
|
new ig.Image("media/graphics/sprites/gameover-bg.png"), new ig.Image("media/graphics/sprites/button-double.png")
|
|
],
|
|
cover: null,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.isAllowInput = !0;
|
|
ig.noFadeout = !1;
|
|
ig.game.sessionData.ko++;
|
|
10 <= ig.game.sessionData.ko ? (ig.game.sessionData.ko = 0, this.popup = ig.game.spawnEntity(EntityDailyrewardRandomGiftPopup, 0, 0), this.popup.onClosed.add(this.onPopupClosedCallback, this), this.popup.onRewardCollected.add(this.onPopupRewardCollectedCallback, this), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.reward)) :
|
|
(this.spawnAllItems(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.lose));
|
|
ig.gameScene.cameraUnfollow();
|
|
try {
|
|
ig.yandex.showAd()
|
|
} catch (d) {
|
|
console.log(d)
|
|
}
|
|
ig.gameScene.carSkeleton.chassis.physicsImpostor.sleep()
|
|
},
|
|
spawnAllItems: function() {
|
|
var b = ig.game.spawnEntity(EntityGameObject, 270, 260, {
|
|
singleFrameImage: this.Images[2],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
c = ig.game.spawnEntity(EntityGameObject, 270, 460, {
|
|
singleFrameImage: this.Images[3],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
scaleX: 0.75,
|
|
scaleY: 0.75,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.doubleButton = ig.game.spawnEntity(EntityButton, 395, 660, {
|
|
singleFrameImage: this.Images[4],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.doubleButton.onClicked.add(this.onClickDouble, this);
|
|
this.homeButton = ig.game.spawnEntity(EntityButton, 115, 660, {
|
|
singleFrameImage: this.Images[0],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.homeButton.onClicked.add(this.onClickHome, this);
|
|
this.playButton = ig.game.spawnEntity(EntityButton,
|
|
303, 660, {
|
|
singleFrameImage: this.Images[1],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.playButton.onClicked.add(this.onClickPlay, this);
|
|
ig.game.currentScore = ig.game.lastScore.toFixed(0);
|
|
ig.game.currentBest = ig.game.sessionData.score.toFixed(0);
|
|
this.score = ig.game.spawnEntity(EntityShadowText, 270, c.pos.y - 10, {
|
|
shadowOffsetY: 6,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
textString: _STRINGS.Game.Score + ig.game.lastScore.toFixed(0) + _STRINGS.Game.Meter,
|
|
textFont: "40px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.best = ig.game.spawnEntity(EntityShadowText, this.score.pos.x - 6, this.score.pos.y + 45, {
|
|
shadowOffsetY: 4,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
textString: _STRINGS.Game.Best + ig.game.sessionData.score.toFixed(0) + _STRINGS.Game.Meter,
|
|
textFont: "40px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
var e = ig.game.spawnEntity(EntityText, 285, 800, {
|
|
textLineSpacing: 1.3,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
textString: _STRINGS.Game["Tip" + ig.game.sessionData.currentTip],
|
|
textFont: "28px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
ig.game.sessionData.currentTip++;
|
|
3 < ig.game.sessionData.currentTip && (ig.game.sessionData.currentTip = 0);
|
|
ig.game.saveAll();
|
|
ig.yandex.ysdkPlayerInfo_save();
|
|
var d = ig.game.spawnEntity(EntityGameObject, 20, 750, {
|
|
width: 500,
|
|
height: 90,
|
|
drawAsRect: !0,
|
|
rectColor: ig.color.hexToRgb("#000000"),
|
|
alpha: 0.5
|
|
});
|
|
this.rewardbtn = ig.game.spawnEntity(EntityDailyrewardButton, 210, 660, {
|
|
tapDownScale: 0.65,
|
|
tapReleaseScale: 0.7
|
|
});
|
|
this.rewardbtn.onPopupOpen.add(this.onRewardPopupOpen, this);
|
|
this.rewardbtn.onPopupClosed.add(this.onRewardPopupClosed, this);
|
|
this.rewardbtn.onRewardCollected.add(this.onRewardCollected, this);
|
|
this.items = [b, c, this.homeButton, this.score, this.best, this.playButton, e, d, this.rewardbtn, this.doubleButton];
|
|
ig.game.lastScore > ig.game.sessionData.score && (ig.game.sessionData.score = ig.game.lastScore, ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save(), this.best.textString = _STRINGS.Game.NewBest + ig.game.lastScore.toFixed(0) +
|
|
_STRINGS.Game.Meter, ig.game.currentBest = ig.game.lastScore.toFixed(0));
|
|
ig.game.sortEntitiesDeferred();
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.crash)
|
|
},
|
|
onPopupRewardCollectedCallback: function() {
|
|
ig.game.addRewardToGame(ig.dailyreward.collectedRewards.pop())
|
|
},
|
|
onPopupClosedCallback: function() {
|
|
this.spawnAllItems();
|
|
this.popup = null
|
|
},
|
|
onRewardPopupOpen: function() {
|
|
this.playButton.inputEnabled = !1;
|
|
this.homeButton.inputEnabled = !1;
|
|
try {
|
|
ig.yandex.showAd()
|
|
} catch (b) {
|
|
console.log(b)
|
|
}
|
|
},
|
|
onRewardPopupClosed: function() {
|
|
this.playButton.inputEnabled = !0;
|
|
this.homeButton.inputEnabled = !0
|
|
},
|
|
onRewardCollected: function() {
|
|
ig.game.addRewardToGame(ig.dailyreward.collectedRewards.pop())
|
|
},
|
|
exitAllItems: function() {
|
|
for (var b = 0; b < this.items.length; b++) this.items[b].exit()
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
ig.gameScene.physicsDeltaFactor = 0;
|
|
ig.gameScene.updateCovers()
|
|
},
|
|
onClickHome: function() {
|
|
if (this.isAllowInput) {
|
|
this.isAllowInput = !1;
|
|
ig.gameScene.carSkeleton.chassis.physicsImpostor.wakeUp();
|
|
ig.gameScene.whiteCoverAlpha = -0.5;
|
|
ig.gameScene.whiteCoverSpeed = 4;
|
|
ig.gameScene.whiteCoverTarget =
|
|
1;
|
|
this.exitAllItems();
|
|
this.tween({}, 0.3, {
|
|
onComplete: function() {
|
|
ig.game.goToLevel("MainMenu")
|
|
}.bind(this)
|
|
}).start();
|
|
try {
|
|
ig.yandex.showAd()
|
|
} catch (b) {
|
|
console.log(b)
|
|
}
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)
|
|
}
|
|
},
|
|
onClickPlay: function() {
|
|
if (this.isAllowInput) {
|
|
this.isAllowInput = !1;
|
|
ig.gameScene.carSkeleton.chassis.physicsImpostor.wakeUp();
|
|
this.exitAllItems();
|
|
this.tween({}, 0.3, {
|
|
onComplete: function() {
|
|
ig.game.goToLevel("SelectBoosters")
|
|
}.bind(this)
|
|
}).start();
|
|
try {
|
|
ig.yandex.showAd()
|
|
} catch (b) {
|
|
console.log(b)
|
|
}
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)
|
|
}
|
|
},
|
|
onClickDouble: function() {
|
|
this.isAllowInput && (this.isAllowInput = !1, ig.yandex.showRVAd(this.callback.bind(this)), this.isAllowInput = !0, this.doubleButton.kill(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click))
|
|
},
|
|
callback: function() {
|
|
var b = ig.game.spawnEntity(ig.GdMessage, 0, 0, {
|
|
message: {
|
|
success: "Your score has been doubled"
|
|
},
|
|
targetPos: {
|
|
y: 100
|
|
},
|
|
waitDelay: 2
|
|
});
|
|
ig.game.currentScore *= 2;
|
|
ig.game.currentScore > ig.game.currentBest && (ig.game.currentBest = ig.game.currentScore, ig.game.sessionData.score =
|
|
ig.game.currentBest, ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save());
|
|
this.score.textString = _STRINGS.Game.Score + ig.game.currentScore + _STRINGS.Game.Meter;
|
|
this.best.textString = _STRINGS.Game.Best + ig.game.currentBest + _STRINGS.Game.Meter;
|
|
b.show(!0)
|
|
},
|
|
draw: function() {
|
|
this.parent();
|
|
ig.global.wm || ig.system.context.clearRect(0, 0, ig.system.width, ig.system.height)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.levels.game-over").requires("impact.image", "game.entities.controllers.game-over-controller").defines(function() {
|
|
LevelGameOver = {
|
|
entities: [{
|
|
type: "EntityGameOverController",
|
|
x: 0,
|
|
y: 0
|
|
}],
|
|
layer: []
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.controllers.select-boosters-controller").requires("impact.entity", "game.toybox.controllers.controller", "game.toybox.objects.game-object", "game.toybox.objects.ui.buttons.button", "game.entities.popup.settings-popup").defines(function() {
|
|
EntitySelectBoostersController = EntityController.extend({
|
|
boosterSet: [],
|
|
booster1Active: !1,
|
|
booster2Active: !1,
|
|
booster3Active: !1,
|
|
boosterPrices: [25, 50, 75],
|
|
allowInput: !0,
|
|
images: [new ig.Image("media/graphics/sprites/button-pause.png"), new ig.Image("media/graphics/sprites/coin.png"),
|
|
new ig.Image("media/graphics/sprites/game-over.png"), new ig.Image("media/graphics/sprites/booster-popup.png"), new ig.Image("media/graphics/sprites/button-buy-booster.png"), new ig.Image("media/graphics/sprites/button-booster-3.png"), new ig.Image("media/graphics/sprites/button-booster-1.png"), new ig.Image("media/graphics/sprites/button-booster-2.png"), new ig.Image("media/graphics/sprites/booster-selected.png"), new ig.Image("media/graphics/sprites/booster-disable.png"), new ig.Image("media/graphics/sprites/buy-disable.png"),
|
|
new ig.Image("media/graphics/sprites/select-boosters.png"), new ig.Image("media/graphics/sprites/button-start-drift.png")
|
|
],
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
b = ig.game.spawnEntity(EntityGameObject, 270, 215, {
|
|
singleFrameImage: this.images[11],
|
|
zIndex: 501,
|
|
anchorX: 0.5,
|
|
anchorY: 1
|
|
});
|
|
c = ig.game.spawnEntity(EntityGameObject, 270, 265, {
|
|
singleFrameImage: this.images[3],
|
|
zIndex: 1,
|
|
anchorX: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
e = ig.game.spawnEntity(EntityButton, 135, 401, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[6],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
var d = ig.game.spawnEntity(EntityButton, 273, 401, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[7],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
g = ig.game.spawnEntity(EntityButton, 410, 401, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[5],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.selectedBooster1 = ig.game.spawnEntity(EntityGameObject, e.pos.x, e.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[8],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.selectedBooster2 = ig.game.spawnEntity(EntityGameObject, d.pos.x, d.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[8],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.selectedBooster3 = ig.game.spawnEntity(EntityGameObject, g.pos.x, g.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[8],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.disableBooster1 = ig.game.spawnEntity(EntityGameObject,
|
|
e.pos.x, e.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[9],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.disableBooster2 = ig.game.spawnEntity(EntityGameObject, d.pos.x, d.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[9],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.disableBooster3 = ig.game.spawnEntity(EntityGameObject, g.pos.x, g.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[9],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
var f = ig.game.spawnEntity(EntityButton,
|
|
135, 505, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[4],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
m = ig.game.spawnEntity(EntityButton, 273, 505, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[4],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
l = ig.game.spawnEntity(EntityButton, 410, 505, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[4],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
j = ig.game.spawnEntity(EntityButton,
|
|
270, 700, {
|
|
textString: _STRINGS.Game.StartDrift,
|
|
textFont: "44px mainfont",
|
|
textOffsetY: -10,
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#FFFFFF"),
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[12],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
j.inputEnabled = !0;
|
|
j.onClicked.add(this.onClickStartDrift, this);
|
|
this.disableBuyBooster1 = ig.game.spawnEntity(EntityGameObject, f.pos.x, f.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[10],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.disableBuyBooster2 = ig.game.spawnEntity(EntityGameObject, m.pos.x, m.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[10],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.disableBuyBooster3 = ig.game.spawnEntity(EntityGameObject, l.pos.x, l.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[10],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
var q = ig.game.spawnEntity(EntityText, 132, 305, {
|
|
textString: _STRINGS.Game.Booster1,
|
|
textFont: "26px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#FFFFFF"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
n = ig.game.spawnEntity(EntityText, 270, 305, {
|
|
textString: _STRINGS.Game.Booster2,
|
|
textFont: "26px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#FFFFFF"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
r = ig.game.spawnEntity(EntityText, 408, 305, {
|
|
textString: _STRINGS.Game.Booster3,
|
|
textFont: "26px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#FFFFFF"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.amountBooster1 = ig.game.spawnEntity(EntityText, 182, 436, {
|
|
textString: ig.game.sessionData.booster1 +
|
|
"",
|
|
textFont: "26px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.amountBooster2 = ig.game.spawnEntity(EntityText, 319, 436, {
|
|
textString: ig.game.sessionData.booster2 + "",
|
|
textFont: "26px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.amountBooster3 = ig.game.spawnEntity(EntityText, 456, 436, {
|
|
textString: ig.game.sessionData.booster3 + "",
|
|
textFont: "26px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
var s = ig.game.spawnEntity(EntityText, 179, 513, {
|
|
textString: this.boosterPrices[0] + "",
|
|
textFont: "30px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
zIndex: 550
|
|
}),
|
|
t = ig.game.spawnEntity(EntityText, 316, 513, {
|
|
textString: this.boosterPrices[1] + "",
|
|
textFont: "30px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
zIndex: 550
|
|
}),
|
|
u = ig.game.spawnEntity(EntityText, 455, 513, {
|
|
textString: this.boosterPrices[2] + "",
|
|
textFont: "30px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
zIndex: 550
|
|
}),
|
|
y = ig.game.spawnEntity(EntityButton, 10, 15, {
|
|
anchorType: "top-left",
|
|
singleFrameImage: this.images[1],
|
|
scaleX: 0.85,
|
|
scaleY: 0.85,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
z = ig.game.spawnEntity(EntityShadowText, 60, 50, {
|
|
anchorType: "top-left",
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
shadowOffsetY: 4,
|
|
textString: ig.game.sessionData.collectedCoin + "",
|
|
textFont: "42px mainfont",
|
|
textAlign: "left",
|
|
textRgb: ig.color.hexToRgb("#ffffff")
|
|
});
|
|
this.coinDisplay = z;
|
|
this.boosterSet = [b, c, e, d, g, f, m, l, q, n, r, this.amountBooster1, this.amountBooster2, this.amountBooster3, s, t, u, this.selectedBooster1, this.selectedBooster2, this.selectedBooster3, this.disableBooster1, this.disableBooster2, this.disableBooster3, this.disableBuyBooster1, this.disableBuyBooster2, this.disableBuyBooster3, j, z, y];
|
|
this.refreshBooster();
|
|
e.inputEnabled = !0;
|
|
d.inputEnabled = !0;
|
|
g.inputEnabled = !0;
|
|
e.onClicked.add(this.onClickBooster1,
|
|
this);
|
|
d.onClicked.add(this.onClickBooster2, this);
|
|
g.onClicked.add(this.onClickBooster3, this);
|
|
f.inputEnabled = !0;
|
|
m.inputEnabled = !0;
|
|
l.inputEnabled = !0;
|
|
f.onClicked.add(this.onClickBuyBooster1, this);
|
|
m.onClicked.add(this.onClickBuyBooster2, this);
|
|
l.onClicked.add(this.onClickBuyBooster3, this);
|
|
ig.game.sortEntitiesDeferred()
|
|
},
|
|
onClickStartDrift: function() {
|
|
this.allowInput && (this.allowInput = !1, this.exitAll(), this.goToGameplay())
|
|
},
|
|
onClickBuyBooster1: function() {
|
|
this.allowInput && (ig.game.sessionData.collectedCoin >=
|
|
this.boosterPrices[0] && (ig.game.sessionData.collectedCoin -= this.boosterPrices[0], ig.game.sessionData.booster1++, ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)), this.refreshBooster())
|
|
},
|
|
onClickBuyBooster2: function() {
|
|
this.allowInput && (ig.game.sessionData.collectedCoin >= this.boosterPrices[1] && (ig.game.sessionData.collectedCoin -= this.boosterPrices[1], ig.game.sessionData.booster2++, ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save(),
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)), this.refreshBooster())
|
|
},
|
|
onClickBuyBooster3: function() {
|
|
this.allowInput && (ig.game.sessionData.collectedCoin >= this.boosterPrices[2] && (ig.game.sessionData.collectedCoin -= this.boosterPrices[2], ig.game.sessionData.booster3++, ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)), this.refreshBooster())
|
|
},
|
|
onClickBooster1: function() {
|
|
this.allowInput && (0 < ig.game.sessionData.booster1 &&
|
|
(this.booster1Active = this.booster1Active ? !1 : !0, ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)), this.refreshBooster())
|
|
},
|
|
onClickBooster2: function() {
|
|
this.allowInput && (0 < ig.game.sessionData.booster2 && (this.booster2Active = this.booster2Active ? !1 : !0, ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)), this.refreshBooster())
|
|
},
|
|
onClickBooster3: function() {
|
|
this.allowInput && (0 < ig.game.sessionData.booster3 && (this.booster3Active = this.booster3Active ? !1 : !0, ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)),
|
|
this.refreshBooster())
|
|
},
|
|
refreshBooster: function() {
|
|
this.disableBooster1.visible = !1;
|
|
this.disableBooster2.visible = !1;
|
|
this.disableBooster3.visible = !1;
|
|
this.disableBuyBooster1.visible = !1;
|
|
this.disableBuyBooster2.visible = !1;
|
|
this.disableBuyBooster3.visible = !1;
|
|
this.selectedBooster1.visible = !1;
|
|
this.selectedBooster2.visible = !1;
|
|
this.selectedBooster3.visible = !1;
|
|
0 == ig.game.sessionData.booster1 && (this.disableBooster1.visible = !0);
|
|
0 == ig.game.sessionData.booster2 && (this.disableBooster2.visible = !0);
|
|
0 == ig.game.sessionData.booster3 &&
|
|
(this.disableBooster3.visible = !0);
|
|
this.booster1Active && (this.selectedBooster1.visible = !0);
|
|
this.booster2Active && (this.selectedBooster2.visible = !0);
|
|
this.booster3Active && (this.selectedBooster3.visible = !0);
|
|
ig.game.sessionData.collectedCoin < this.boosterPrices[0] && (this.disableBuyBooster1.visible = !0);
|
|
ig.game.sessionData.collectedCoin < this.boosterPrices[1] && (this.disableBuyBooster2.visible = !0);
|
|
ig.game.sessionData.collectedCoin < this.boosterPrices[2] && (this.disableBuyBooster3.visible = !0);
|
|
this.amountBooster1.textString =
|
|
"" + ig.game.sessionData.booster1;
|
|
this.amountBooster2.textString = "" + ig.game.sessionData.booster2;
|
|
this.amountBooster3.textString = "" + ig.game.sessionData.booster3;
|
|
this.coinDisplay.textString = "" + ig.game.sessionData.collectedCoin
|
|
},
|
|
exitAll: function() {
|
|
if (this.boosterSet) {
|
|
this.booster1Active && ig.game.sessionData.booster1--;
|
|
this.booster2Active && ig.game.sessionData.booster2--;
|
|
this.booster3Active && ig.game.sessionData.booster3--;
|
|
ig.booster1Active = this.booster1Active;
|
|
ig.booster2Active = this.booster2Active;
|
|
ig.booster3Active =
|
|
this.booster3Active;
|
|
ig.game.saveAll();
|
|
ig.yandex.ysdkPlayerInfo_save();
|
|
for (var b = 0; b < this.boosterSet.length; b++) this.boosterSet[b].exit();
|
|
this.boosterSet = null
|
|
}
|
|
},
|
|
goToGameplay: function() {
|
|
ig.gameScene.cameraUnfollow();
|
|
ig.gameScene.whiteCoverAlpha = -0.5;
|
|
ig.gameScene.whiteCoverSpeed = 4;
|
|
ig.gameScene.whiteCoverTarget = 1;
|
|
ig.soundHandler.sfxPlayer.soundList.engineLow.stop();
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engineOut);
|
|
this.delayedCall(0.3, function() {
|
|
var b = 40;
|
|
ig.gameScene.useLessEffects &&
|
|
(b = 57);
|
|
ig.gameScene.useLessEffects = wgl.system.engine.performanceMonitor.averageFPS < b ? !0 : !1;
|
|
ig.game.sessionData.hasShownTutorial ? ig.game.goToLevel("Gameplay") : (ig.game.sessionData.hasShownTutorial = !0, ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save(), ig.game.goToLevel("Tutorial"))
|
|
}.bind(this))
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
ig.gameScene.update()
|
|
},
|
|
draw: function() {
|
|
ig.system.context.clearRect(0, 0, ig.system.width, ig.system.height);
|
|
this.parent()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.levels.select-boosters").requires("impact.image", "game.entities.controllers.select-boosters-controller").defines(function() {
|
|
LevelSelectBoosters = {
|
|
entities: [{
|
|
type: "EntitySelectBoostersController",
|
|
x: 0,
|
|
y: 0
|
|
}],
|
|
layer: []
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.ui.booster-tutorial-ui").requires("game.toybox.objects.game-object").defines(function() {
|
|
EntityBoosterTutorialUi = EntityGameObject.extend({
|
|
forceDraw: !0,
|
|
zIndex: 999999,
|
|
state: 0,
|
|
time: 0,
|
|
inputDelay: 1,
|
|
boosterPrices: [20, 40, 60],
|
|
members: [],
|
|
images: [new ig.Image("media/graphics/sprites/hand.png"), new ig.Image("media/graphics/sprites/coin.png"), new ig.Image("media/graphics/sprites/button-start-drift.png"), new ig.Image("media/graphics/sprites/booster-popup.png"), new ig.Image("media/graphics/sprites/button-buy.png"),
|
|
new ig.Image("media/graphics/sprites/button-booster-3.png"), new ig.Image("media/graphics/sprites/button-booster-1.png"), new ig.Image("media/graphics/sprites/button-booster-2.png"), new ig.Image("media/graphics/sprites/booster-selected.png"), new ig.Image("media/graphics/sprites/booster-disable.png"), new ig.Image("media/graphics/sprites/buy-disable.png")
|
|
],
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.tutorial1 = ig.game.spawnEntity(EntityText, 270, 655, {
|
|
textString: _STRINGS.Game.BoosterTutorial1,
|
|
textFont: "30px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.tutorial2 = ig.game.spawnEntity(EntityText, 270, 655, {
|
|
textString: _STRINGS.Game.BoosterTutorial2,
|
|
textFont: "30px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.tutorial3 = ig.game.spawnEntity(EntityText, 270, 850, {
|
|
textString: _STRINGS.Game.TapToContinue,
|
|
textFont: "30px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
b = ig.game.spawnEntity(EntityGameObject, 270, 215, {
|
|
singleFrameImage: this.images[11],
|
|
zIndex: 501,
|
|
anchorX: 0.5,
|
|
anchorY: 1
|
|
});
|
|
c = ig.game.spawnEntity(EntityGameObject, 270, 265, {
|
|
singleFrameImage: this.images[3],
|
|
zIndex: 1,
|
|
anchorX: 0.5,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
e = ig.game.spawnEntity(EntityGameObject, 270, 600, {
|
|
anchorX: 0.5,
|
|
scaleY: 0.5,
|
|
scaleX: 0.8,
|
|
singleFrameImage: this.images[3],
|
|
zIndex: 1,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
var d = ig.game.spawnEntity(EntityButton, 135, 401, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[6],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
g = ig.game.spawnEntity(EntityButton, 273, 401, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[7],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
f = ig.game.spawnEntity(EntityButton, 410, 401, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[5],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.selectedBooster1 = ig.game.spawnEntity(EntityGameObject,
|
|
d.pos.x, d.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[8],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.selectedBooster2 = ig.game.spawnEntity(EntityGameObject, g.pos.x, g.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[8],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.selectedBooster3 = ig.game.spawnEntity(EntityGameObject, f.pos.x, f.pos.y, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
singleFrameImage: this.images[8],
|
|
zIndex: 600,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.buyBooster1 =
|
|
ig.game.spawnEntity(EntityButton, 135, 505, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[4],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.buyBooster2 = ig.game.spawnEntity(EntityButton, 273, 505, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[4],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.buyBooster3 = ig.game.spawnEntity(EntityButton, 410, 505, {
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[4],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
var m = ig.game.spawnEntity(EntityButton, 270, 700, {
|
|
textString: _STRINGS.Game.StartDrift,
|
|
textFont: "44px mainfont",
|
|
textOffsetY: -10,
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#FFFFFF"),
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
usePressedTween: !0,
|
|
singleFrameImage: this.images[12],
|
|
zIndex: 500,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
m.inputEnabled = !0;
|
|
m.onClicked.add(this.onClickStartDrift, this);
|
|
var m = ig.game.spawnEntity(EntityText, 132, 305, {
|
|
textString: _STRINGS.Game.Booster1,
|
|
textFont: "26px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#FFFFFF"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
l = ig.game.spawnEntity(EntityText, 270, 305, {
|
|
textString: _STRINGS.Game.Booster2,
|
|
textFont: "26px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#FFFFFF"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
j = ig.game.spawnEntity(EntityText, 408, 305, {
|
|
textString: _STRINGS.Game.Booster3,
|
|
textFont: "26px mainfont",
|
|
textAlign: "center",
|
|
textRgb: ig.color.hexToRgb("#FFFFFF"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.amountBooster1 = ig.game.spawnEntity(EntityText,
|
|
182, 436, {
|
|
textString: ig.game.sessionData.booster1 + "",
|
|
textFont: "26px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.amountBooster2 = ig.game.spawnEntity(EntityText, 319, 436, {
|
|
textString: ig.game.sessionData.booster2 + "",
|
|
textFont: "26px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.amountBooster3 = ig.game.spawnEntity(EntityText, 456, 436, {
|
|
textString: ig.game.sessionData.booster3 + "",
|
|
textFont: "26px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.priceBooster1 = ig.game.spawnEntity(EntityText, 179, 513, {
|
|
textString: this.boosterPrices[0] + "",
|
|
textFont: "30px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
zIndex: 550
|
|
});
|
|
this.priceBooster2 = ig.game.spawnEntity(EntityText, 316, 513, {
|
|
textString: this.boosterPrices[1] + "",
|
|
textFont: "30px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
zIndex: 550
|
|
});
|
|
this.priceBooster3 = ig.game.spawnEntity(EntityText, 455, 513, {
|
|
textString: this.boosterPrices[2] + "",
|
|
textFont: "30px mainfont",
|
|
textAlign: "right",
|
|
textRgb: ig.color.hexToRgb("#ffffff"),
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
zIndex: 550
|
|
});
|
|
this.hand = ig.game.spawnEntity(EntityGameObject, this.selectedBooster1.pos.x, this.selectedBooster1.pos.y, {
|
|
singleFrameImage: this.images[0],
|
|
zIndex: 99999,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
this.selectedBooster1.visible = !1;
|
|
this.selectedBooster2.visible = !1;
|
|
this.selectedBooster3.visible = !1;
|
|
this.priceBooster1.visible = !1;
|
|
this.priceBooster2.visible = !1;
|
|
this.priceBooster3.visible = !1;
|
|
this.buyBooster1.visible = !1;
|
|
this.buyBooster2.visible = !1;
|
|
this.buyBooster3.visible = !1;
|
|
this.members = [b, c, e, this.tutorial1, this.tutorial2, this.tutorial3, d, g, f, this.selectedBooster1, this.selectedBooster2, this.selectedBooster3, m, l, j, this.amountBooster1, this.amountBooster2, this.amountBooster3, this.priceBooster1, this.priceBooster2, this.priceBooster3, this.buyBooster1, this.buyBooster2,
|
|
this.buyBooster3
|
|
];
|
|
this.buyBooster1.alpha = 0;
|
|
this.state = 1;
|
|
ig.game.sortEntitiesDeferred()
|
|
},
|
|
killMembers: function() {
|
|
for (var b = 0; b < this.members.length; b++) this.members[b].exit();
|
|
this.members = []
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
var b = ig.system.tick;
|
|
this.inputDelay -= b;
|
|
1 == this.state ? (this.hand.visible = !0, this.tutorial1.visible = !0, this.tutorial2.visible = !1, this.time += b, 1 > this.time ? 0.5 > this.time ? (this.selectedBooster1.visible = !0, this.hand.anchoredPositionX = this.selectedBooster1.anchoredPositionX) : 0.5 < this.time &&
|
|
0.7 > this.time ? this.selectedBooster1.visible = !1 : this.hand.anchoredPositionX += (this.selectedBooster2.anchoredPositionX - this.hand.anchoredPositionX) / 5 : 1 < this.time && 2 > this.time ? 1.5 > this.time ? (this.selectedBooster2.visible = !0, this.hand.anchoredPositionX = this.selectedBooster2.anchoredPositionX) : 1.5 < this.time && 1.7 > this.time ? this.selectedBooster2.visible = !1 : this.hand.anchoredPositionX += (this.selectedBooster3.anchoredPositionX - this.hand.anchoredPositionX) / 5 : 2 < this.time && 3 > this.time ? 2.5 > this.time ? (this.selectedBooster3.visible = !0, this.hand.anchoredPositionX = this.selectedBooster3.anchoredPositionX) : 2.5 < this.time && 2.7 > this.time ? this.selectedBooster3.visible = !1 : this.hand.anchoredPositionX += (this.selectedBooster1.anchoredPositionX - this.hand.anchoredPositionX) / 5 : this.time = 0) : 2 == this.state && (this.selectedBooster1.visible = !1, this.selectedBooster2.visible = !1, this.selectedBooster3.visible = !1, this.buyBooster1.visible = !0, this.buyBooster2.visible = !0, this.buyBooster3.visible = !0, this.priceBooster1.visible = !0, this.priceBooster2.visible = !0, this.priceBooster3.visible = !0, this.tutorial2.visible = !0, this.tutorial1.visible = !1, this.hand.visible = !1, this.time += b, 1 > this.time ? this.buyBooster1.alpha += (1 - this.buyBooster1.alpha) / 5 : 1 < this.time && 1.3 > this.time ? this.buyBooster1.alpha += -this.buyBooster1.alpha / 5 : 1.5 < this.time && (this.time = 0), this.buyBooster2.alpha = this.buyBooster3.alpha = this.priceBooster1.alpha = this.priceBooster2.alpha = this.priceBooster3.alpha = this.buyBooster1.alpha)
|
|
},
|
|
drawObject: function() {
|
|
this.parent()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.controllers.booster-tutorial-controller").requires("impact.entity", "game.toybox.controllers.controller", "game.toybox.objects.game-object", "game.toybox.objects.ui.buttons.button", "game.entities.popup.settings-popup", "game.entities.ui.booster-tutorial-ui").defines(function() {
|
|
EntityBoosterTutorialController = EntityController.extend({
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
this.boosterTutorial = ig.game.spawnEntity(EntityBoosterTutorialUi, 95, 265)
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
ig.gameScene.update();
|
|
this.boosterTutorial && (this.isClicking && (0 > this.boosterTutorial.inputDelay && (this.boosterTutorial.inputDelay = 1, this.boosterTutorial.state++), 3 == this.boosterTutorial.state && this.boosterTutorial.killMembers()), 3 == this.boosterTutorial.state && 0 > this.boosterTutorial.inputDelay && (this.boosterTutorial.exit(), this.boosterTutorial = null, ig.game.goToLevel("SelectBoosters"), ig.game.sessionData.hasShownBoosterTutorial = !0, ig.game.saveAll(), ig.yandex.ysdkPlayerInfo_save()))
|
|
},
|
|
draw: function() {
|
|
ig.system.context.clearRect(0,
|
|
0, ig.system.width, ig.system.height);
|
|
this.parent()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.levels.booster-tutorial").requires("impact.image", "game.entities.controllers.booster-tutorial-controller").defines(function() {
|
|
LevelBoosterTutorial = {
|
|
entities: [{
|
|
type: "EntityBoosterTutorialController",
|
|
x: 0,
|
|
y: 0
|
|
}],
|
|
layer: []
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("babylon.plugins.wgl-game").defines(function() {
|
|
wgl.Game = ig.Class.extend({
|
|
entities: [],
|
|
ready: !1,
|
|
init: function() {},
|
|
update: function() {
|
|
this.entitiesIndexToKill = [];
|
|
for (var b = 0; b < this.entities.length; b++) this.entities[b] && (this.entities[b].update(), this.entities[b]._killed && this.entitiesIndexToKill.push(b));
|
|
for (b = this.entitiesIndexToKill.length - 1; 0 <= b; b--) this.entities.splice(this.entitiesIndexToKill[b], 1)
|
|
},
|
|
render: function() {
|
|
this.currentScene && this.currentScene.render()
|
|
},
|
|
spawnEntity: function(b,
|
|
c, e, d, g) {
|
|
b = new b(c, e, d, g);
|
|
this.entities.push(b);
|
|
return b
|
|
},
|
|
getEntityByName: function(b) {
|
|
for (var c = [], e = 0; e < this.entities.length; e++) console.log(this.entities[e].name), this.entities[e].name === b && c.push(this.entities[e]);
|
|
return c
|
|
},
|
|
getMeshByName: function(b) {
|
|
for (var c = 0; c < this.currentScene.meshes.length; c++)
|
|
if (this.currentScene.meshes[c].name === b) return this.currentScene.meshes[c];
|
|
return null
|
|
},
|
|
resizeAll: function() {
|
|
for (var b = 0; b < this.entities.length; b++) this.entities[b].resize()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("babylon.plugins.wgl-timer").defines(function() {
|
|
wgl.Timer = ig.Class.extend({
|
|
target: 0,
|
|
base: 0,
|
|
last: 0,
|
|
pausedAt: 0,
|
|
init: function(b) {
|
|
this.last = this.base = wgl.Timer.time;
|
|
this.target = b || 0
|
|
},
|
|
set: function(b) {
|
|
this.target = b || 0;
|
|
this.base = wgl.Timer.time;
|
|
this.pausedAt = 0
|
|
},
|
|
reset: function() {
|
|
this.base = wgl.Timer.time;
|
|
this.pausedAt = 0
|
|
},
|
|
tick: function() {
|
|
var b = wgl.Timer.time - this.last;
|
|
this.last = wgl.Timer.time;
|
|
return this.pausedAt ? 0 : b
|
|
},
|
|
delta: function() {
|
|
return (this.pausedAt || wgl.Timer.time) - this.base - this.target
|
|
},
|
|
pause: function() {
|
|
this.pausedAt ||
|
|
(this.pausedAt = wgl.Timer.time)
|
|
},
|
|
unpause: function() {
|
|
this.pausedAt && (this.base += wgl.Timer.time - this.pausedAt, this.pausedAt = 0)
|
|
}
|
|
});
|
|
wgl.Timer._last = 0;
|
|
wgl.Timer.time = Number.MIN_VALUE;
|
|
wgl.Timer.timeScale = 1;
|
|
wgl.Timer.maxStep = 0.05;
|
|
wgl.Timer.step = function() {
|
|
var b = Date.now();
|
|
wgl.Timer.time += Math.min((b - wgl.Timer._last) / 1E3, wgl.Timer.maxStep) * wgl.Timer.timeScale;
|
|
wgl.Timer._last = b
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("babylon.plugins.wgl-system").requires("babylon.plugins.wgl-timer").defines(function() {
|
|
wgl.System = ig.Class.extend({
|
|
fps: null,
|
|
tick: 0,
|
|
loader: null,
|
|
assets: {},
|
|
canvas: null,
|
|
engine: null,
|
|
progress: 0,
|
|
babylonJSSupport: !1,
|
|
finishLoadFunctions: [],
|
|
finishSceneReadyFunctions: [],
|
|
tempNewScene: null,
|
|
canvas: null,
|
|
started: !1,
|
|
init: function(b, c) {
|
|
this.fps = c;
|
|
this.canvas = ig.$(b);
|
|
BABYLON.Engine.isSupported() ? (this.engine = new BABYLON.Engine(this.canvas, !0), this.babylonJSSupport = !0) : (this.babylonJSSupport = !1, ig.babylonJSSupport = !1);
|
|
BABYLON.SceneLoader.ShowLoadingScreen = !1
|
|
},
|
|
loadScene: function(b, c) {
|
|
wgl.game.ready = !1;
|
|
if (this.babylonJSSupport) BABYLON.SceneLoader.Load(b, c, this.engine, this.onLoadSuccess.bind(this), this.progressCallback.bind(this), this.onLoadError.bind(this));
|
|
else throw "Unable to load scene because BabylonJS is not supported";
|
|
},
|
|
progressCallback: function(b) {
|
|
this.progress = b
|
|
},
|
|
onLoadSuccess: function(b) {
|
|
console.log("load scene success");
|
|
wgl.game.currentScene && wgl.game.currentScene.dispose();
|
|
wgl.game.currentScene = b;
|
|
for (b = 0; b < this.finishLoadFunctions.length; b++) this.finishLoadFunctions[b]();
|
|
this.loader = new BABYLON.AssetsManager(wgl.game.currentScene);
|
|
wgl.game.currentScene.executeWhenReady(this.onSceneReady.bind(this))
|
|
},
|
|
onLoadError: function(b) {
|
|
console.log("ERROR:" + b)
|
|
},
|
|
onSceneReady: function() {
|
|
wgl.debug.debug && wgl.debug.enableDebug();
|
|
this.loadCameras();
|
|
this.loadMeshes();
|
|
this.registerBeforeRender();
|
|
for (var b = 0; b < this.finishSceneReadyFunctions.length; b++) this.finishSceneReadyFunctions[b]();
|
|
wgl.system.engine.hideLoadingUI();
|
|
wgl.game.ready = !0;
|
|
ig.gameScene.init()
|
|
},
|
|
registerBeforeRender: function() {
|
|
wgl.game.currentScene.registerBeforeRender(this.advanceTime.bind(this));
|
|
wgl.game.currentScene.registerBeforeRender(wgl.game.update.bind(wgl.game));
|
|
this.startRender()
|
|
},
|
|
startRender: function() {
|
|
this.engine.runRenderLoop(wgl.game.render.bind(wgl.game))
|
|
},
|
|
stopRender: function() {
|
|
this.engine.stopRenderLoop()
|
|
},
|
|
unregisterBeforeRender: function() {
|
|
wgl.game.currentScene && (wgl.game.currentScene.unregisterBeforeRender(this.advanceTime.bind(this)),
|
|
wgl.game.currentScene.unregisterBeforeRender(wgl.game.update.bind(wgl.game)), wgl.game.currentScene.onBeforeRenderObservable.clear(), this.stopRender())
|
|
},
|
|
loadMeshes: function() {
|
|
for (var b = wgl.game.currentScene.meshes, c = 0; c < b.length; c++) {
|
|
var e = b[c].name.split(":");
|
|
if (1 < e.length) {
|
|
b[c].id = e[0];
|
|
b[c].name = e[0];
|
|
for (var d = "", e = e[1].split("."), e = e[0].split("-"), g = 0; g < e.length; g++) var f = "" + e[g],
|
|
f = f.charAt(0).toUpperCase() + f.slice(1),
|
|
d = d + f;
|
|
0 < d.length && wgl.game.entities.push(new wgl.modules[d](b[c].position.x, b[c].position.y,
|
|
b[c].position.z, {
|
|
_mesh: b[c]
|
|
}))
|
|
}
|
|
}
|
|
},
|
|
loadCameras: function() {
|
|
for (var b = wgl.game.currentScene.cameras, c = 0; c < b.length; c++) {
|
|
var e = b[c].name.split(":");
|
|
if (1 < e.length) {
|
|
b[c].id = e[0];
|
|
b[c].name = e[0];
|
|
for (var d = "", e = e[1].split("."), e = e[0].split("-"), g = 0; g < e.length; g++) var f = "" + e[g],
|
|
f = f.charAt(0).toUpperCase() + f.slice(1),
|
|
d = d + f;
|
|
wgl.game.entities.push(new wgl.modules[d](b[c].position.x, b[c].position.y, b[c].position.z, {
|
|
_camera: b[c]
|
|
}))
|
|
}
|
|
}
|
|
},
|
|
advanceTime: function() {
|
|
wgl.Timer.step();
|
|
this.tick = this.engine.getDeltaTime()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("babylon.plugins.wgl-debug").defines(function() {
|
|
wgl.Debug = ig.Class.extend({
|
|
debug: !1,
|
|
init: function() {},
|
|
enableDebug: function() {
|
|
wgl.game.currentScene.debugLayer.show()
|
|
},
|
|
axis2: function(b, c) {
|
|
var e = BABYLON.Mesh.CreateCylinder("x", c, 0.1, 0.1, 6, 4, b, !1);
|
|
e.material = new BABYLON.StandardMaterial("xColor", b);
|
|
e.material.diffuseColor = new BABYLON.Color3(1, 0, 0);
|
|
e.position = new BABYLON.Vector3(c / 2, 0, 0);
|
|
e.rotation.z = Math.PI >>> 1;
|
|
e = BABYLON.Mesh.CreateCylinder("y", c, 0.1, 0.1, 6, 4, b, !1);
|
|
e.material = new BABYLON.StandardMaterial("yColor", b);
|
|
e.material.diffuseColor = new BABYLON.Color3(0, 1, 0);
|
|
e.position = new BABYLON.Vector3(0, c / 2, 0);
|
|
e = BABYLON.Mesh.CreateCylinder("z", c, 0.1, 0.1, 6, 4, b, !1);
|
|
e.material = new BABYLON.StandardMaterial("zColor", b);
|
|
e.material.diffuseColor = new BABYLON.Color3(0, 0, 1);
|
|
e.position = new BABYLON.Vector3(0, 0, c / 2);
|
|
e.rotation.x = Math.PI >>> 1
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("babylon.entities.game-camera").requires("babylon.plugins.wgl-entity").defines(function() {
|
|
wgl.modules.GameCamera = wgl.Entity.extend({
|
|
camera: null,
|
|
controlEnabled: !1,
|
|
name: "Camera",
|
|
cameraCounter: null,
|
|
addedDebugDraw: !1,
|
|
hitbox: null,
|
|
init: function(b, c, e, d) {
|
|
this.parent(b, c, e, d);
|
|
ig.merge(this, d);
|
|
d._camera && (this.camera = d._camera, wgl.game.camera = this.camera);
|
|
ig.ua.touchDevice ? (c = wgl.game.currentScene, b = c.activeCamera, c.activeCamera = b, b.attachControl(window), b.ellipsoid = new BABYLON.Vector3(2, 2, 2), wgl.game.currentScene.collisionsEnabled = !0, b.checkCollisions = !0, c = wgl.game.getMeshByName("Cube"), c.checkCollisions = !0, this.camera = b) : (c = wgl.game.currentScene, b = c.activeCamera, b.attachControl(window), b.ellipsoid = new BABYLON.Vector3(2, 2, 2), wgl.game.currentScene.collisionsEnabled = !0, b.checkCollisions = !0, c = wgl.game.getMeshByName("Cube"), c.checkCollisions = !0, this.camera = b, this.camera.keysUp.push(ig.KEY.W), this.camera.keysDown.push(ig.KEY.S), this.camera.keysLeft.push(ig.KEY.A));
|
|
this.camera.keysRight.push(ig.KEY.D);
|
|
this.camera.fov = 1.1;
|
|
this.camera.minZ =
|
|
0.1;
|
|
this.camera.maxZ = 1E3;
|
|
this.camera.angularSensibility = 2E3;
|
|
this.camera.inertia = 0.8;
|
|
this.camera.speed = 4;
|
|
this.setupHitbox()
|
|
},
|
|
setupHitbox: function() {
|
|
this.hitbox = BABYLON.Mesh.CreateBox("box", 10, wgl.game.currentScene);
|
|
this.hitbox.parent = this.camera
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
if (wgl.debug.debug) {
|
|
if (!this.addedDebugDraw) {
|
|
var b = function() {
|
|
ig.system.context.fillText("FOV:" + this.camera.fov + " minZ: " + this.camera.minZ + " maxZ: " + this.camera.maxZ + " innertia: " + this.camera.inertia + " fovMode: " + this.camera.fovMode +
|
|
" speed: " + this.camera.speed + " angularSensibility: " + this.camera.angularSensibility, 20, 100)
|
|
}.bind(this);
|
|
ig.game.lastDraw.push(b)
|
|
}
|
|
this.addedDebugDraw = !0
|
|
}
|
|
},
|
|
kill: function() {
|
|
this.parent();
|
|
this.hitbox.dispose();
|
|
this.camera.dispose()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("babylon.entities.laser").requires("babylon.plugins.wgl-entity").defines(function() {
|
|
wgl.modules.Laser = wgl.Entity.extend({
|
|
lifeTimer: null,
|
|
lifeTime: 10,
|
|
indexID: null,
|
|
deltaRotation: new BABYLON.Vector3.Zero,
|
|
laserMaterial: null,
|
|
array: null,
|
|
init: function(b, c, e, d) {
|
|
this.parent(b, c, e, d);
|
|
this.lifeTimer = new ig.Timer;
|
|
this.meshes.push(BABYLON.MeshBuilder.CreatePlane("pl", {
|
|
width: 2,
|
|
height: 50
|
|
}, wgl.game.currentScene));
|
|
this.meshes[0].position = new BABYLON.Vector3.Zero;
|
|
this.laserMaterial = new BABYLON.StandardMaterial("texture1",
|
|
wgl.game.currentScene);
|
|
this.laserMaterial.emissiveColor = new BABYLON.Color3(1, 0.2, 0.7);
|
|
this.laserMaterial.backFaceCulling = !1;
|
|
console.log(this.laserMaterial);
|
|
this.meshes[0].material = this.laserMaterial;
|
|
this.meshes[0].position = this.pos;
|
|
d.indexID && (this.indexID = d.indexID);
|
|
d.array && (this.array = d.array);
|
|
b = 1 * Math.random();
|
|
this.deltaRotation.x = 0.5 > b ? 10 * Math.random() : -10 * Math.random();
|
|
b = 1 * Math.random();
|
|
this.deltaRotation.y = 0.5 > b ? 10 * Math.random() : -10 * Math.random();
|
|
b = 1 * Math.random();
|
|
this.deltaRotation.z = 0.5 >
|
|
b ? 10 * Math.random() : -10 * Math.random()
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.lifeTimer && this.lifeTimer.delta() > this.lifeTime ? this.kill() : (this.meshes[0].rotation.x += this.deltaRotation.x * ig.system.tick, this.meshes[0].rotation.y += this.deltaRotation.y * ig.system.tick, this.meshes[0].rotation.z += this.deltaRotation.z * ig.system.tick)
|
|
},
|
|
kill: function() {
|
|
this.parent();
|
|
this.array.splice(this.indexID, 1)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("babylon.entities.laser-spawner").requires("babylon.plugins.wgl-entity", "babylon.entities.laser").defines(function() {
|
|
wgl.modules.LaserSpawner = wgl.Entity.extend({
|
|
laserArray: [],
|
|
laserLength: 50,
|
|
laserPattern: null,
|
|
laserTimer: null,
|
|
spawnTime: 3,
|
|
spawnLimit: 3,
|
|
name: "LaserSpawner",
|
|
startSpawn: !1,
|
|
init: function(b, c, e, d) {
|
|
this.parent(b, c, e, d);
|
|
this.laserTimer = new ig.Timer
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.laserTimer && (this.startSpawn || this.laserTimer.reset(), this.laserTimer.delta() > this.spawnTime && this.laserArray.length <
|
|
this.spawnLimit && (this.spawnLaser(), this.laserTimer.reset()))
|
|
},
|
|
start: function() {
|
|
this.startSpawn = !0
|
|
},
|
|
spawnLaser: function() {
|
|
this.laserArray.push(wgl.game.spawnEntity(wgl.modules.Laser, 0, 0, 0, {
|
|
indexID: this.laserArray.length,
|
|
array: this.laserArray
|
|
}))
|
|
},
|
|
kill: function() {
|
|
this.parent()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("babylon.game.wgl-main").requires("babylon.plugins.wgl-game", "babylon.plugins.wgl-system", "babylon.plugins.wgl-debug", "babylon.plugins.wgl-game", "babylon.entities.game-camera", "babylon.entities.laser-spawner", "babylon.entities.laser").defines(function() {
|
|
MyWGLGame = wgl.Game.extend({
|
|
gameover: !1,
|
|
score: 0,
|
|
debug: !1,
|
|
levels: {
|
|
game: "game-scene.babylon"
|
|
},
|
|
root: "media/scenes/",
|
|
init: function() {},
|
|
reloadLevel: function() {
|
|
for (wgl.system.unregisterBeforeRender(); 0 < this.entities.length;) this.entities.pop();
|
|
this.gameover = !1;
|
|
wgl.system.loadScene(this.root, this.levels.game)
|
|
}
|
|
});
|
|
wgl.webglmain = function(b, c) {
|
|
wgl.debug = new wgl.Debug;
|
|
wgl.system = new wgl.System(b, c);
|
|
wgl.game = new MyWGLGame;
|
|
console.log("init babylon");
|
|
wgl.game.reloadLevel()
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.objects.platform-skeleton").defines(function() {
|
|
ig.PlatformSkeleton = ig.Class.extend({
|
|
mesh: null,
|
|
platformType: 0,
|
|
skinType: 0,
|
|
hasCoin: !1,
|
|
skeleton: null,
|
|
meshOffset: new BABYLON.Vector3(0, 0, 0),
|
|
active: !0,
|
|
parts: [],
|
|
includedInShadowLight: !1,
|
|
platformId: 0,
|
|
carTouchDuration: 0,
|
|
x: 0,
|
|
y: 0,
|
|
z: 0,
|
|
init: function(b, c, e, d, g) {
|
|
this.platformType = d;
|
|
this.skinType = g;
|
|
this.platformId = ig.platformId++;
|
|
this.initPhysics();
|
|
this.setSkin(g);
|
|
this.setPosition(b, c, e)
|
|
},
|
|
initPhysics: function() {
|
|
var b = wgl.game.currentScene,
|
|
c =
|
|
ig.gameScene;
|
|
c.skeletonMaterial || (b = new BABYLON.StandardMaterial("green", b), b.diffuseColor = new BABYLON.Color3.Green, b.zOffset = -1, c.skeletonMaterial = b);
|
|
c = null;
|
|
switch (this.platformType) {
|
|
case ig.PLATFORM_FLAT:
|
|
this.meshOffset.set(0, -1.25, 0);
|
|
c = this.createPart(25, 2.5, 25, 0, 0, 0);
|
|
break;
|
|
case ig.PLATFORM_SMALL_BUMP_L:
|
|
this.meshOffset.set(0, -1.25, 0);
|
|
c = this.createPart(25, 2.5, 25, 0, 0, 0);
|
|
b = this.createPart(25, 2.5, 11.7, 0.38, 0, 0);
|
|
this.setPartOffset(b, 0, 1.5, 5);
|
|
var e = this.createPart(25, 2.5, 11.7, -0.38, 0, 0);
|
|
this.setPartOffset(e,
|
|
0, 1.5, -5);
|
|
this.parts = [b, e];
|
|
break;
|
|
case ig.PLATFORM_SMALL_BUMP_R:
|
|
this.meshOffset.set(0, -1.25, 0);
|
|
c = this.createPart(25, 2.5, 25, 0, 0, 0);
|
|
b = this.createPart(11.7, 2.5, 25, 0, 0, -0.38);
|
|
this.setPartOffset(b, 5, 1.5, 0);
|
|
e = this.createPart(11.7, 2.5, 25, 0, 0, 0.38);
|
|
this.setPartOffset(e, -5, 1.5, 0);
|
|
this.parts = [b, e];
|
|
break;
|
|
case ig.PLATFORM_SMALL_VALLEY_L:
|
|
this.meshOffset.set(0, 2.25, 0);
|
|
c = this.createPart(25, 2.5, 25, 0, 0, 0);
|
|
this.setPartOffset(c, 0, -3.5, 0);
|
|
b = this.createPart(25, 2.5, 11.7, -0.38, 0, 0);
|
|
this.setPartOffset(b, 0, -2.2, 8);
|
|
e = this.createPart(25,
|
|
2.5, 11.7, 0.38, 0, 0);
|
|
this.setPartOffset(e, 0, -1.8, -7.5);
|
|
this.parts = [b, e];
|
|
break;
|
|
case ig.PLATFORM_SMALL_VALLEY_R:
|
|
this.meshOffset.set(0, 2.25, 0);
|
|
c = this.createPart(25, 2.5, 25, 0, 0, 0);
|
|
this.setPartOffset(c, 0, -3.5, 0);
|
|
b = this.createPart(11.7, 2.5, 25, 0, 0, 0.38);
|
|
this.setPartOffset(b, 8, -2.2, 0);
|
|
e = this.createPart(11.7, 2.5, 25, 0, 0, -0.38);
|
|
this.setPartOffset(e, -7.5, -1.8, 0);
|
|
this.parts = [b, e];
|
|
break;
|
|
case ig.PLATFORM_HALF_L:
|
|
this.meshOffset.set(-6.25, -1.25, 0);
|
|
c = this.createPart(12.5, 2.5, 25, 0, 0, 0);
|
|
break;
|
|
case ig.PLATFORM_HALF_R:
|
|
this.meshOffset.set(0,
|
|
-1.25, 6.25);
|
|
c = this.createPart(25, 2.5, 12.5, 0, 0, 0);
|
|
break;
|
|
case ig.PLATFORM_RAMP_L:
|
|
this.meshOffset.set(0, -1.25, 0);
|
|
c = this.createPart(25, 2.5, 25, 0, 0, 0);
|
|
b = this.createPart(25, 2.5, 20, 0.28, 0, 0);
|
|
this.setPartOffset(b, 0, 1.5, 5);
|
|
e = this.createPart(25, 2.5, 27, 0.55, 0, 0);
|
|
this.setPartOffset(e, 0, 1.5, 0);
|
|
this.parts = [b, e];
|
|
break;
|
|
case ig.PLATFORM_RAMP_R:
|
|
this.meshOffset.set(0, -1.25, 0), c = this.createPart(25, 2.5, 25, 0, 0, 0), b = this.createPart(20, 2.5, 25, 0, 0, -0.28), this.setPartOffset(b, 5, 1.5, 0), e = this.createPart(27, 2.5, 25, 0, 0, -0.55),
|
|
this.setPartOffset(e, 0, 1.5, 0), this.parts = [b, e]
|
|
}
|
|
this.skeleton = c
|
|
},
|
|
setPartOffset: function(b, c, e, d) {
|
|
b.offsetX = c;
|
|
b.offsetY = e;
|
|
b.offsetZ = d
|
|
},
|
|
createPart: function(b, c, e, d, g, f) {
|
|
var m = wgl.game.currentScene,
|
|
l = ig.gameScene,
|
|
j = BABYLON.MeshBuilder.CreateBox("rect", {
|
|
width: b,
|
|
height: c,
|
|
depth: e
|
|
}, m);
|
|
j.position.set(0, 0, -1E3);
|
|
j.isVisible = !1;
|
|
j.material = l.skeletonMaterial;
|
|
j.physicsImpostor = new BABYLON.PhysicsImpostor(j, BABYLON.PhysicsImpostor.BoxImpostor, {
|
|
mass: 0,
|
|
restitution: 0,
|
|
friction: 0.1
|
|
}, m);
|
|
j.offsetX = 0;
|
|
j.offsetY = 0;
|
|
j.offsetZ =
|
|
0;
|
|
var q = l.carSkeleton.fauxWheels[0],
|
|
m = q.createInstance("vertex");
|
|
m.position.set(j.position.x + b / 2, j.position.y + c / 2, j.position.z + e / 2);
|
|
j.addChild(m);
|
|
l = q.createInstance("vertex");
|
|
l.position.set(j.position.x - b / 2, j.position.y + c / 2, j.position.z + e / 2);
|
|
j.addChild(l);
|
|
var n = q.createInstance("vertex");
|
|
n.position.set(j.position.x + b / 2, j.position.y + c / 2, j.position.z - e / 2);
|
|
j.addChild(n);
|
|
q = q.createInstance("vertex");
|
|
q.position.set(j.position.x - b / 2, j.position.y + c / 2, j.position.z - e / 2);
|
|
j.addChild(q);
|
|
j.rotationQuaternion =
|
|
new BABYLON.Quaternion.FromEulerAngles(d, g, f);
|
|
j.computeWorldMatrix();
|
|
m.computeWorldMatrix();
|
|
l.computeWorldMatrix();
|
|
n.computeWorldMatrix();
|
|
q.computeWorldMatrix();
|
|
j.v1 = new BABYLON.Vector3(m.absolutePosition.x - j.absolutePosition.x, m.absolutePosition.y - j.absolutePosition.y, m.absolutePosition.z - j.absolutePosition.z);
|
|
j.v2 = new BABYLON.Vector3(l.absolutePosition.x - j.absolutePosition.x, l.absolutePosition.y - j.absolutePosition.y, l.absolutePosition.z - j.absolutePosition.z);
|
|
j.v3 = new BABYLON.Vector3(n.absolutePosition.x -
|
|
j.absolutePosition.x, n.absolutePosition.y - j.absolutePosition.y, n.absolutePosition.z - j.absolutePosition.z);
|
|
j.v4 = new BABYLON.Vector3(q.absolutePosition.x - j.absolutePosition.x, q.absolutePosition.y - j.absolutePosition.y, q.absolutePosition.z - j.absolutePosition.z);
|
|
m.dispose();
|
|
l.dispose();
|
|
n.dispose();
|
|
q.dispose();
|
|
return j
|
|
},
|
|
setPosition: function(b, c, e) {
|
|
this.x = b;
|
|
this.y = c;
|
|
this.z = e;
|
|
this.skeleton.position.set(b + this.skeleton.offsetX, c + this.skeleton.offsetY, e + this.skeleton.offsetZ);
|
|
this.updateSkinPosition();
|
|
for (var d =
|
|
0; d < this.parts.length; d++) {
|
|
var g = this.parts[d];
|
|
g.position.set(b + g.offsetX, c + g.offsetY, e + g.offsetZ)
|
|
}
|
|
},
|
|
updateSkinPosition: function() {
|
|
this.mesh && (ig.gameScene.useLessEffects ? (this.mesh.material.subMaterials[0].emissiveColor.r = 0.95, this.mesh.material.subMaterials[0].emissiveColor.g = 0.95, this.mesh.material.subMaterials[0].emissiveColor.b = 0.95) : (this.mesh.material.subMaterials[0].emissiveColor.r = 0.3, this.mesh.material.subMaterials[0].emissiveColor.g = 0.3, this.mesh.material.subMaterials[0].emissiveColor.b =
|
|
0.3), this.mesh.position.set(this.skeleton.position.x + this.meshOffset.x, this.skeleton.position.y + this.meshOffset.y, this.skeleton.position.z + this.meshOffset.z))
|
|
},
|
|
setSkin: function(b) {
|
|
4 < b && (b = 0);
|
|
if (this.mesh) {
|
|
if (this.mesh.skinType == b && this.mesh.platformType == this.platformType) {
|
|
this.updateSkinPosition();
|
|
return
|
|
}
|
|
this.mesh.dispose()
|
|
}
|
|
this.mesh = ig.gameScene.platforms[b][this.platformType].clone("platformInstance");
|
|
this.mesh.skinType = b;
|
|
this.mesh.platformType = this.platformType;
|
|
this.updateSkinPosition()
|
|
},
|
|
update: function() {
|
|
for (var b =
|
|
0; 2 > b; b++) {
|
|
this.checkIsSensorOnPart(b, this.skeleton);
|
|
for (var c = 0; c < this.parts.length; c++) this.checkIsSensorOnPart(b, this.parts[c])
|
|
}
|
|
b = ig.gameScene.carSkeleton.chassis.position;
|
|
ig.gameScene.isTutorial ? (-50 > b.x - this.skeleton.position.x || -50 > b.z - this.skeleton.position.z) && this.deactivate() : (-150 > b.x - this.skeleton.position.x || -150 > b.z - this.skeleton.position.z) && this.deactivate();
|
|
this.includedInShadowLight = !1;
|
|
200 > Math.abs(b.x - this.skeleton.position.x) && 200 > Math.abs(b.z - this.skeleton.position.z) && (this.includedInShadowLight = !0)
|
|
},
|
|
checkIsSensorOnPart: function(b, c) {
|
|
var e = ig.gameScene.carSkeleton,
|
|
d = c.absolutePosition.x,
|
|
g = c.absolutePosition.y,
|
|
f = c.absolutePosition.z,
|
|
m = e.groundSensors[b].absolutePosition,
|
|
l = this.p,
|
|
j = this.a,
|
|
q = this.b,
|
|
n = this.c;
|
|
l[0] = m.x;
|
|
l[1] = m.y;
|
|
l[2] = m.z;
|
|
j[0] = d + c.v1.x;
|
|
j[1] = g + c.v1.y;
|
|
j[2] = f + c.v1.z;
|
|
q[0] = d + c.v2.x;
|
|
q[1] = g + c.v2.y;
|
|
q[2] = f + c.v2.z;
|
|
n[0] = d + c.v3.x;
|
|
n[1] = g + c.v3.y;
|
|
n[2] = f + c.v3.z;
|
|
var g = Math.min(j[0], q[0], n[0], d + c.v4.x),
|
|
d = Math.max(j[0], q[0], n[0], d + c.v4.x),
|
|
r = Math.min(j[2], q[2], n[2], f + c.v4.z),
|
|
f = Math.max(j[2], q[2], n[2],
|
|
f + c.v4.z);
|
|
this.isPointAbovePartMesh(m.x, m.z, g, d, r, f) && (m = (this.skeleton.position.y - ig.gameScene.zero.y) / 5, 0.1 < m && (m = 0.1), -0.1 > m && (m = -0.1), ig.gameScene.zero.y += m, l = this.pointToPlaneDistance(l, j, q, n), 0 < l && l && 10 > l ? (e.isTouchingGround = !0, e.fauxWheels[b].isTouchingGround = !0, this.carTouchDuration = 1) : this.carTouchDuration -= ig.system.tick)
|
|
},
|
|
isPointAbovePartMesh: function(b, c, e, d, g, f) {
|
|
return b < e || b > d || c < g || c > f ? !1 : !0
|
|
},
|
|
deactivate: function() {
|
|
this.isSafe = this.active = !1;
|
|
this.carTouchDuration = 0;
|
|
this.mesh && (this.mesh.isVisible = !1);
|
|
this.setPosition(0, 0, 2E3)
|
|
},
|
|
activate: function() {
|
|
this.hasCoin = !1;
|
|
this.active = !0;
|
|
this.mesh && (this.mesh.isVisible = !0)
|
|
},
|
|
n: [0, 0, 0],
|
|
p: [0, 0, 0],
|
|
a: [0, 0, 0],
|
|
b: [0, 0, 0],
|
|
c: [0, 0, 0],
|
|
pointToPlaneDistance: function(b, c, e, d) {
|
|
var g = this.n;
|
|
this.normal(g, c, e, d);
|
|
return this.dot(g, b) - this.dot(g, c)
|
|
},
|
|
normalize: function(b, c) {
|
|
var e = c[0],
|
|
d = c[1],
|
|
g = c[2],
|
|
e = e * e + d * d + g * g;
|
|
0 < e && (e = 1 / Math.sqrt(e), b[0] = c[0] * e, b[1] = c[1] * e, b[2] = c[2] * e);
|
|
return b
|
|
},
|
|
subtract: function(b, c, e) {
|
|
b[0] = c[0] - e[0];
|
|
b[1] = c[1] - e[1];
|
|
b[2] = c[2] - e[2];
|
|
return b
|
|
},
|
|
cross: function(b,
|
|
c, e) {
|
|
var d = c[0],
|
|
g = c[1];
|
|
c = c[2];
|
|
var f = e[0],
|
|
m = e[1];
|
|
e = e[2];
|
|
b[0] = g * e - c * m;
|
|
b[1] = c * f - d * e;
|
|
b[2] = d * m - g * f;
|
|
return b
|
|
},
|
|
dot: function(b, c) {
|
|
return b[0] * c[0] + b[1] * c[1] + b[2] * c[2]
|
|
},
|
|
tmp: [0, 0, 0],
|
|
normal: function(b, c, e, d) {
|
|
var g = this.tmp;
|
|
this.subtract(b, c, e);
|
|
this.subtract(g, e, d);
|
|
this.cross(b, b, g);
|
|
return this.normalize(b, b)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.objects.mesh-object").defines(function() {
|
|
ig.MeshObject = ig.Class.extend({
|
|
mesh: null,
|
|
timedLife: -1,
|
|
init: function(b, c, e, d, g, f) {
|
|
d.setEnabled(!0);
|
|
g ? (this.mesh = d.clone("clonedMesh"), d.setEnabled(!1)) : this.mesh = f ? d.createInstance("meshInstance") : d;
|
|
this.mesh.position.set(b, c, e)
|
|
},
|
|
update: function() {
|
|
var b = ig.system.tick;
|
|
0 < this.timedLife && (this.timedLife -= b, 0 >= this.timedLife && this.destroy())
|
|
},
|
|
destroy: function() {
|
|
this.mesh.dispose()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.objects.wheel-trail").requires("game.entities.objects.mesh-object").defines(function() {
|
|
ig.WheelTrail = ig.MeshObject.extend({
|
|
timedLife: 1,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e, ig.gameScene.trail, !1, !0)
|
|
},
|
|
destroy: function() {
|
|
ig.gameScene.trails.splice(ig.gameScene.trails.indexOf(this), 1);
|
|
this.parent()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.objects.car-skeleton").requires("game.entities.objects.wheel-trail").defines(function() {
|
|
ig.CarSkeleton = ig.Class.extend({
|
|
chassis: null,
|
|
shadowChassis: null,
|
|
direction: 0,
|
|
vec3: new BABYLON.Vector3(0, 0, 0),
|
|
euler: new BABYLON.Vector3(0, 0, 0),
|
|
impulse: new BABYLON.Vector3(0, 0, 0),
|
|
quaternion: new BABYLON.Quaternion(0, 0, 0, 0),
|
|
skin: null,
|
|
trailDelay: 0,
|
|
trailDelayMax: 0.05,
|
|
fauxWheels: [],
|
|
groundSensors: [],
|
|
skidSounds: null,
|
|
wheelLastPos: [new BABYLON.Vector3(0, 0, 0), new BABYLON.Vector3(0, 0, 0), new BABYLON.Vector3(0,
|
|
0, 0), new BABYLON.Vector3(0, 0, 0)],
|
|
isTouchingGround: !1,
|
|
speed: 0,
|
|
defaultSpeed: -30,
|
|
maxSpeed: -30,
|
|
acceleration: -0.2,
|
|
smokeCount: 0,
|
|
smokeCountMax: 5,
|
|
smokeDelay: 0,
|
|
smokeDelayMax: 0.1,
|
|
previousDirection: 0,
|
|
mass: 100,
|
|
init: function() {
|
|
var b = wgl.game.currentScene,
|
|
c = ig.gameScene,
|
|
e = new BABYLON.StandardMaterial("yellow", b);
|
|
e.diffuseColor = new BABYLON.Color3.Yellow;
|
|
var d = BABYLON.MeshBuilder.CreateBox("chassis", {
|
|
width: 4,
|
|
height: 1,
|
|
depth: 8
|
|
}, b);
|
|
d.material = e;
|
|
d.position.set(c.zero.x, c.zero.y + 4, c.zero.z);
|
|
this.chassis = d;
|
|
this.shadowChassis =
|
|
d.clone("shadowChassis");
|
|
this.shadowChassis.rotationQuaternion = new BABYLON.Quaternion(0, 0, 0, 0);
|
|
this.fauxWheels[0] = BABYLON.MeshBuilder.CreateSphere("fauxWheelLeft", {
|
|
diameter: 1
|
|
}, b);
|
|
this.fauxWheels[0].position.set(d.position.x + 1.3, d.position.y - 0.4, d.position.z + 2.3);
|
|
this.fauxWheels[1] = this.fauxWheels[0].clone("fauxWheelRight");
|
|
this.fauxWheels[1].position.set(d.position.x - 1.6, d.position.y - 0.4, d.position.z + 2.2);
|
|
this.groundSensors[0] = this.fauxWheels[0].clone("groundSensorLeft");
|
|
this.groundSensors[0].position.set(d.position.x +
|
|
1.6, d.position.y - 2, d.position.z + 2.2);
|
|
this.groundSensors[1] = this.fauxWheels[0].clone("groundSensorRight");
|
|
this.groundSensors[1].position.set(d.position.x - 1.6, d.position.y - 2, d.position.z + 2.2);
|
|
this.shadowChassis.addChild(this.fauxWheels[0]);
|
|
this.shadowChassis.addChild(this.fauxWheels[1]);
|
|
this.shadowChassis.addChild(this.groundSensors[0]);
|
|
this.shadowChassis.addChild(this.groundSensors[1]);
|
|
this.shadowChassis.isVisible = !1;
|
|
this.fauxWheels[0].isVisible = !1;
|
|
this.fauxWheels[1].isVisible = !1;
|
|
this.groundSensors[0].isVisible = !1;
|
|
this.groundSensors[1].isVisible = !1;
|
|
this.chassis.isVisible = !1;
|
|
d.physicsImpostor = new BABYLON.PhysicsImpostor(d, BABYLON.PhysicsImpostor.BoxImpostor, {
|
|
mass: this.mass,
|
|
friction: 0.035,
|
|
restitution: 0
|
|
}, b);
|
|
d.physicsImpostor.physicsBody.angularDamping = 0.5;
|
|
this.resetPosition(0, 0, 0)
|
|
},
|
|
resetPosition: function(b, c, e, d) {
|
|
this.resetForce();
|
|
this.direction = 0;
|
|
this.chassis.position.set(b, c, e);
|
|
this.chassis.rotationQuaternion.set(0, 0, 0, 1);
|
|
this.shadowChassis.position.set(b, c, e);
|
|
d ? this.shadowChassis.rotationQuaternion.set(0,
|
|
0.77, 0, 0.64) : this.shadowChassis.rotationQuaternion.set(0, 0, 0, 1);
|
|
this.speed = this.defaultSpeed;
|
|
this.chassis.physicsImpostor.setAngularVelocity(BABYLON.Vector3.Zero());
|
|
this.chassis.physicsImpostor.setLinearVelocity(BABYLON.Vector3.Zero())
|
|
},
|
|
resetForce: function() {
|
|
var b = this.chassis.physicsImpostor.physicsBody;
|
|
b.position.setZero();
|
|
b.previousPosition.setZero();
|
|
b.interpolatedPosition.setZero();
|
|
b.initPosition.setZero();
|
|
b.quaternion.set(0, 0, 0, 1);
|
|
b.initQuaternion.set(0, 0, 0, 1);
|
|
b.previousQuaternion && b.previousQuaternion.set(0,
|
|
0, 0, 1);
|
|
b.interpolatedQuaternion && b.interpolatedQuaternion.set(0, 0, 0, 1);
|
|
b.velocity.setZero();
|
|
b.initVelocity.setZero();
|
|
b.angularVelocity.setZero();
|
|
b.initAngularVelocity.setZero();
|
|
b.force.setZero();
|
|
b.torque.setZero();
|
|
b.sleepState = 0;
|
|
b.timeLastSleepy = 0;
|
|
b._wakeUpAfterNarrowphase = !1
|
|
},
|
|
attachSkin: function(b) {
|
|
this.skin && this.detachSkin();
|
|
this.skin = b;
|
|
this.skin.isVisible = !0;
|
|
this.skin.setEnabled(!0);
|
|
ig.gameScene.useLessEffects ? (this.skin.material.emissiveColor.r = 0.95, this.skin.material.emissiveColor.g = 0.95, this.skin.material.emissiveColor.b =
|
|
0.95, this.smokeCountMax = 2) : (this.skin.material.emissiveColor.r = 0.3, this.skin.material.emissiveColor.g = 0.3, this.skin.material.emissiveColor.b = 0.3, this.smokeCountMax = 5);
|
|
this.updateSkinPosition()
|
|
},
|
|
detachSkin: function() {
|
|
this.skin.isVisible = !1;
|
|
this.skin.setEnabled(!1);
|
|
this.skin = null
|
|
},
|
|
updateShadowChassisPosition: function() {
|
|
this.shadowChassis.position.x += (this.chassis.position.x - this.shadowChassis.position.x) / 7;
|
|
this.shadowChassis.position.y = this.chassis.position.y;
|
|
this.shadowChassis.position.z += (this.chassis.position.z -
|
|
this.shadowChassis.position.z) / 7;
|
|
this.shadowChassis.rotationQuaternion.w += (this.chassis.rotationQuaternion.w - this.shadowChassis.rotationQuaternion.w) / 7;
|
|
this.shadowChassis.rotationQuaternion.x += (this.chassis.rotationQuaternion.x - this.shadowChassis.rotationQuaternion.x) / 7;
|
|
this.shadowChassis.rotationQuaternion.y += (this.chassis.rotationQuaternion.y - this.shadowChassis.rotationQuaternion.y) / 7;
|
|
this.shadowChassis.rotationQuaternion.z += (this.chassis.rotationQuaternion.z - this.shadowChassis.rotationQuaternion.z) /
|
|
7;
|
|
this.shadowChassis.rotationQuaternion.toEulerAnglesToRef(this.skin.rotation)
|
|
},
|
|
updateSkinPosition: function() {
|
|
this.skin && this.skin.position.set(this.shadowChassis.position.x, this.shadowChassis.position.y + 0.4, this.shadowChassis.position.z + 0.5)
|
|
},
|
|
update: function() {
|
|
this.updateSensors();
|
|
this.updateSteering();
|
|
this.updateThrust();
|
|
this.updateShadowChassisPosition();
|
|
this.updateSkinPosition();
|
|
this.spawnTrails();
|
|
this.updateSmokeSpawn();
|
|
this.isTouchingGround = !1
|
|
},
|
|
updateSensors: function() {
|
|
-1 > this.chassis.physicsImpostor.getLinearVelocity().y ?
|
|
(this.groundSensors[0].position.y = -1, this.groundSensors[1].position.y = -1) : (this.groundSensors[0].position.y = -3, this.groundSensors[1].position.y = -3)
|
|
},
|
|
updateSteering: function() {
|
|
if (!(this.chassis.position.y < ig.gameScene.zero.y - 10)) {
|
|
var b = ig.system.tick;
|
|
this.chassis.rotationQuaternion.toEulerAnglesToRef(this.euler);
|
|
var c = 0,
|
|
e = 25 * ig.gameScene.physicsDeltaFactor;
|
|
0 == this.direction ? (c = 0, e *= -1) : (c = Math.PI / 2, e *= 1);
|
|
b *= e;
|
|
this.euler.y = Math.abs(this.euler.y - c) < Math.abs(3 * b) ? c : this.euler.y + b;
|
|
BABYLON.Quaternion.FromEulerAnglesToRef(this.euler.x,
|
|
this.euler.y, this.euler.z, this.chassis.rotationQuaternion)
|
|
}
|
|
},
|
|
updateSmokeSpawn: function() {
|
|
if (this.isTouchingGround) {
|
|
var b = ig.system.tick;
|
|
this.previousDirection != this.direction && (this.smokeDelay = this.smokeCount = 0, this.previousDirection = this.direction, this.chassis.position.z < ig.gameScene.zero.z && (this.skidSounds || (this.skidSounds = [ig.soundHandler.sfxPlayer.soundList.skid1, ig.soundHandler.sfxPlayer.soundList.skid2, ig.soundHandler.sfxPlayer.soundList.skid3]), ig.soundHandler.sfxPlayer.play(ig.random.fromArray(this.skidSounds)),
|
|
ig.soundHandler.sfxPlayer.soundList.engine.stop(), ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.engine)));
|
|
if (this.smokeCount < this.smokeCountMax && (this.smokeDelay -= b, 0 > this.smokeDelay)) {
|
|
this.smokeDelay = this.smokeDelayMax;
|
|
this.smokeCount++;
|
|
var b = this.fauxWheels[0].absolutePosition,
|
|
c = this.fauxWheels[1].absolutePosition;
|
|
ig.gameScene.spawnSmokeFromPool(b.x + (c.x - b.x) / 2, b.y + (c.y - b.y) / 2 + 2, b.z + (c.z - b.z) / 2)
|
|
}
|
|
}
|
|
},
|
|
updateThrust: function() {
|
|
if (!(this.chassis.position.y < ig.gameScene.zero.y - 10) &&
|
|
this.isTouchingGround) {
|
|
var b = this.chassis.physicsImpostor.getLinearVelocity().clone();
|
|
0 == this.direction ? b.z = this.speed : b.x = this.speed;
|
|
var c = this.chassis.physicsImpostor.getAngularVelocity().clone();
|
|
c && 1 < c.length() && (c.normalize(), c.x *= 1, c.y *= 1, c.z *= 1, this.chassis.physicsImpostor.setAngularVelocity(c));
|
|
this.chassis.physicsImpostor.setLinearVelocity(b)
|
|
}
|
|
},
|
|
spawnTrails: function() {
|
|
if (this.isTouchingGround) {
|
|
this.chassis.rotationQuaternion.toEulerAnglesToRef(this.vec3);
|
|
for (var b = 0; b < this.fauxWheels.length; b++) {
|
|
var c =
|
|
this.fauxWheels[b],
|
|
e = this.wheelLastPos[b],
|
|
d = c.absolutePosition;
|
|
if (c.isTouchingGround) {
|
|
var g = this.getDistanceSquared(d, e),
|
|
f = 0.6;
|
|
if (16 > g && g > f * f) {
|
|
var g = Math.sqrt(g),
|
|
m = Math.ceil(g / f),
|
|
l = this.euler,
|
|
f = g / m;
|
|
l.set(d.x - e.x, d.y - e.y, d.z - e.z);
|
|
l.normalize();
|
|
l.x *= f;
|
|
l.y *= f;
|
|
for (l.z *= f; 0 < m;) e.x += l.x, e.y += l.y, e.z += l.z, ig.gameScene.spawnTrail(e, this.vec3), this.getDistanceSquared(d, e), m--
|
|
} else ig.gameScene.spawnTrail(d, this.vec3)
|
|
}
|
|
c.isTouchingGround = !1;
|
|
e.set(d.x, d.y, d.z)
|
|
}
|
|
}
|
|
},
|
|
getDistanceSquared: function(b, c) {
|
|
var e = b.x - c.x,
|
|
d = b.y - c.y,
|
|
g = b.z - c.z;
|
|
return e * e + d * d + g * g
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.objects.coin").requires("game.entities.objects.mesh-object").defines(function() {
|
|
ig.Coin = ig.MeshObject.extend({
|
|
hasCollected: !1,
|
|
active: !0,
|
|
collectionDistance: 25,
|
|
collectedY: 0,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e, ig.gameScene.coin, !0, !1);
|
|
this.activate(b, c, e)
|
|
},
|
|
activate: function(b, c, e) {
|
|
this.mesh.position.set(b, c, e);
|
|
this.hasCollected = !1;
|
|
this.mesh.rotation.y = 0;
|
|
this.collectedY = c + 10;
|
|
this.active = !0;
|
|
this.mesh.isVisible = !0
|
|
},
|
|
deactivate: function() {
|
|
this.mesh.position.set(0, 1E3, 0);
|
|
this.hasCollected =
|
|
this.active = !1;
|
|
this.collectedY = 0;
|
|
this.mesh.visibility = 1;
|
|
this.mesh.isVisible = !1
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
if (this.active) {
|
|
var b = ig.system.tick;
|
|
this.mesh.rotation.y += 2 * b;
|
|
var c = this.mesh.position,
|
|
e = ig.gameScene.carSkeleton.shadowChassis.absolutePosition,
|
|
d = e.x - c.x,
|
|
g = e.y - c.y,
|
|
f = e.z - c.z,
|
|
d = d * d + g * g + f * f;
|
|
this.hasCollected ? (c.y += (this.collectedY - c.y) / 10, 5 > Math.abs(this.collectedY - c.y) && (this.mesh.visibility -= 2 * b, 0 > this.mesh.visibility && this.deactivate())) : d < this.collectionDistance && (this.hasCollected = !0, ig.game.sessionData.collectedCoin++, ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.coin));
|
|
(-100 > e.x - this.mesh.position.x || -100 > e.z - this.mesh.position.z) && this.deactivate()
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.objects.smoke").requires("game.entities.objects.mesh-object").defines(function() {
|
|
ig.Smoke = ig.MeshObject.extend({
|
|
active: !0,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e, ig.gameScene.smokes[ig.gameScene.smokeIndex], !0, !1);
|
|
ig.gameScene.smokeIndex++;
|
|
ig.gameScene.smokeIndex >= ig.gameScene.smokes.length && (ig.gameScene.smokeIndex = 0);
|
|
this.mesh.billboardMode = BABYLON.Mesh.BILLBOARDMODE_ALL;
|
|
this.mesh.material.zOffset = -3;
|
|
this.activate(b, c, e)
|
|
},
|
|
activate: function(b, c, e) {
|
|
this.mesh.position.set(b,
|
|
c, e);
|
|
this.active = !0;
|
|
this.mesh.scaling.set(2, 2, 2);
|
|
this.mesh.visibility = 1;
|
|
this.mesh.isVisible = !0
|
|
},
|
|
deactivate: function() {
|
|
this.mesh.position.set(0, 1E3, 0);
|
|
this.active = !1;
|
|
this.mesh.visibility = 1;
|
|
this.mesh.isVisible = !1
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
if (this.active) {
|
|
var b = ig.system.tick;
|
|
this.mesh.visibility -= 1 * b;
|
|
this.mesh.position.y -= 2 * b;
|
|
b = this.mesh.scaling.x + 2 * b;
|
|
this.mesh.scaling.set(b, b, b);
|
|
0 >= this.mesh.visibility && this.deactivate()
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.entities.objects.game-scene").requires("game.entities.objects.platform-skeleton", "game.entities.objects.car-skeleton", "game.entities.objects.coin", "game.entities.objects.smoke", "game.entities.objects.mesh-object").defines(function() {
|
|
ig.gameScene = {
|
|
showHitboxes: !1,
|
|
hitboxMaterial: null,
|
|
useLessEffects: !0,
|
|
camera: null,
|
|
cameraTargetMesh: null,
|
|
shadowLight: null,
|
|
bg: null,
|
|
cars: [],
|
|
confettis: [],
|
|
coin: null,
|
|
coins: [],
|
|
startSign: null,
|
|
smokes: [],
|
|
smokeInstances: [],
|
|
smokeIndex: 0,
|
|
platforms: [],
|
|
platformSkeletons: [],
|
|
trails: [],
|
|
carSkeleton: null,
|
|
trailIndex: 0,
|
|
blackCover: null,
|
|
blackCoverAlpha: 0,
|
|
whiteCover: null,
|
|
whiteCoverAlpha: 0,
|
|
whiteCoverTarget: 0,
|
|
whiteCoverSpeed: 0,
|
|
latestPlatform: null,
|
|
previousPlatform: null,
|
|
bgRelativePosition: null,
|
|
lightRelativePosition: null,
|
|
targetRelativePosition: null,
|
|
lastUpdateTime: 0,
|
|
blockDirection: "left",
|
|
tileSize: 24.95,
|
|
physicsDeltaFactor: 1,
|
|
isRestarting: !1,
|
|
difficulty: 0,
|
|
increaseDifficultyEvery: 2,
|
|
skinPattern: 0,
|
|
skinPatternMax: 4,
|
|
changeSkinPatternEvery: 7,
|
|
coinSpawnEvery: 5,
|
|
coinSpawnRandomMin: 4,
|
|
coinSpawnRandomMax: 7,
|
|
platformDifficultyGenerationCount: 0,
|
|
platformSkinPatternGenerationCount: 0,
|
|
platformCoinSpawnCount: 0,
|
|
isMainMenu: !1,
|
|
isTutorial: !1,
|
|
sun: null,
|
|
includedMeshesInLight: [],
|
|
init: function() {
|
|
this.useLessEffects = ig.ua.mobile ? !0 : !1;
|
|
ig.platformId = 0;
|
|
this.initHitboxMaterial();
|
|
this.initMeshes();
|
|
this.initLight();
|
|
this.initCamera();
|
|
this.initHitbox();
|
|
this.initPhysics();
|
|
this.disableSourceMeshes();
|
|
this.initCarSkeleton();
|
|
this.initTrail();
|
|
console.log("webgl version", wgl.system.engine.webGLVersion);
|
|
wgl.system.engine.performanceMonitor.enable();
|
|
this.carSkeleton.attachSkin(this.cars[3]);
|
|
this.pointCameraToVec3(new BABYLON.Vector3(0, 0, 2E3));
|
|
this.cameraFollowMesh(this.carSkeleton.shadowChassis)
|
|
},
|
|
restart: function() {
|
|
this.isRestarting || (this.isRestarting = !0, this.platformCoinSpawnCount = this.platformSkinPatternGenerationCount = this.platformDifficultyGenerationCount = this.skinPattern = this.difficulty = 0, this.updateTimeStep(), this.isTutorial && (this.skinPattern = 2), this.cleanup(), this.zero = new BABYLON.Vector3(1E3, 1E3, 0), setTimeout(function() {
|
|
wgl.system.stopRender();
|
|
setTimeout(function() {
|
|
wgl.system.startRender();
|
|
setTimeout(function() {
|
|
this.isRestarting = !1;
|
|
for (var b = -3; 5 > b; b++) this.spawnPlatform(this.zero.x, this.zero.y, this.zero.z - b * this.tileSize, ig.PLATFORM_FLAT, this.skinPattern);
|
|
this.pointCameraToVec3(this.zero);
|
|
this.isMainMenu || this.isTutorial ? (this.startSign.isVisible = !1, this.startSign.setEnabled(!1)) : (this.blockDirection = "right", this.generatePlatformPattern(), this.generatePlatformPattern(), this.startSign.setEnabled(!0), this.startSign.isVisible = !0, this.startSign.position.set(this.zero.x,
|
|
this.zero.y, this.zero.z));
|
|
this.useLessEffects ? (this.shadowLight.setEnabled(!1), this.sun.setEnabled(!1)) : (this.shadowLight.setEnabled(!0), this.sun.setEnabled(!0));
|
|
this.carSkeleton.attachSkin(this.cars[ig.game.sessionData.currentCar]);
|
|
this.isTutorial ? this.carSkeleton.resetPosition(this.zero.x, this.zero.y + 3, this.zero.z) : this.carSkeleton.resetPosition(this.zero.x, this.zero.y + 3, this.zero.z + 50);
|
|
this.cameraFollowMesh(this.carSkeleton.shadowChassis);
|
|
this.resetAllTrail();
|
|
setTimeout(function() {
|
|
wgl.system.stopRender();
|
|
setTimeout(function() {
|
|
wgl.system.startRender()
|
|
}.bind(this), 100)
|
|
}.bind(this), 100)
|
|
}.bind(this), 150)
|
|
}.bind(this), 100)
|
|
}.bind(this), 100))
|
|
},
|
|
cleanup: function() {
|
|
this.blockDirection = "left";
|
|
this.resetAllPlatforms();
|
|
this.resetAllCoins();
|
|
this.resetAllSmokes();
|
|
this.latestPlatform = null
|
|
},
|
|
update: function() {
|
|
this.updateFollowCamera();
|
|
this.updateLight();
|
|
this.carSkeleton.update();
|
|
this.updatePlatforms();
|
|
this.updateCoins();
|
|
this.updateSmokes();
|
|
this.updatePlatformGeneration();
|
|
this.updateTimeStep();
|
|
this.updateCovers()
|
|
},
|
|
updateCovers: function() {
|
|
var b =
|
|
ig.system.tick;
|
|
0 == this.whiteCoverTarget ? this.whiteCoverAlpha -= this.whiteCoverSpeed * b : 1 == this.whiteCoverTarget && (this.whiteCoverAlpha += this.whiteCoverSpeed * b);
|
|
0 <= this.whiteCoverAlpha ? (this.whiteCover.isVisible = !0, this.whiteCover.visibility = 1 < this.whiteCoverAlpha ? 1 : this.whiteCoverAlpha) : this.whiteCover.isVisible = !1
|
|
},
|
|
initTrail: function() {
|
|
this.trails = [];
|
|
var b = wgl.game.currentScene.getMeshByName("Trail");
|
|
b.material.opacityTexture = b.material.diffuseTexture;
|
|
b.material.zOffset = -2;
|
|
b.position.set(0, 0, 0);
|
|
this.trail =
|
|
b;
|
|
if (!this.useLessEffects)
|
|
for (; 300 > this.trails.length;) this.trails.push(b.createInstance("trailInstance"))
|
|
},
|
|
initCarSkeleton: function() {
|
|
this.carSkeleton = new ig.CarSkeleton
|
|
},
|
|
initCamera: function() {
|
|
var b = wgl.game.currentScene;
|
|
this.camera = wgl.game.currentScene.getCameraByName("Camera");
|
|
this.bg.scaling.set(7.5, 1.5, 1.8);
|
|
this.bgRelativePosition = (new BABYLON.Vector3(this.bg.position.x - this.camera.position.x, this.bg.position.y - this.camera.position.y, this.bg.position.z - this.camera.position.z)).scale(1.2);
|
|
this.targetRelativePosition =
|
|
new BABYLON.Vector3(this.camera.position.x - 10, this.camera.position.y, this.camera.position.z);
|
|
this.camera.maxZ = this.camera.position.length() + this.bg.position.length() + 100;
|
|
this.zero = new BABYLON.Vector3(0, 0, 0);
|
|
var c = new BABYLON.StandardMaterial("white", b);
|
|
c.diffuseColor = new BABYLON.Color3.White;
|
|
c.emissiveColor = new BABYLON.Color3.White;
|
|
this.whiteCover = BABYLON.MeshBuilder.CreatePlane("whitecover", {
|
|
width: 50,
|
|
height: 50,
|
|
sideOrientation: BABYLON.Mesh.BACKSIDE
|
|
}, b);
|
|
this.whiteCover.setMaterialByID("white");
|
|
this.whiteCover.material =
|
|
c;
|
|
this.whiteCover.rotation.x = this.bg.rotation.x;
|
|
this.whiteCover.rotation.y = this.bg.rotation.y + Math.PI;
|
|
this.whiteCover.rotation.z = this.bg.rotation.z;
|
|
this.whiteCover.isVisible = !1;
|
|
this.pointCameraToVec3(this.zero)
|
|
},
|
|
initLight: function() {
|
|
var b = wgl.game.currentScene,
|
|
c = new BABYLON.DirectionalLight("shadowLight", new BABYLON.Vector3(-0.78, -0.78, 0), b);
|
|
c.diffuse = new BABYLON.Color3(1, 1, 1);
|
|
c.position.set(100, 100, 0);
|
|
c.intensity = 0.8;
|
|
this.sun = c;
|
|
this.lightRelativePosition = new BABYLON.Vector3(-10, 15, 10);
|
|
b = new BABYLON.DirectionalLight("shadowLight",
|
|
new BABYLON.Vector3(-0.78, 0.78, 0), b);
|
|
b.position.set(0, 0, 0);
|
|
b.setDirectionToTarget(new BABYLON.Vector3(-this.lightRelativePosition.x, -this.lightRelativePosition.y, -this.lightRelativePosition.z));
|
|
b.diffuse = new BABYLON.Color3(1, 1, 1);
|
|
b.intensity = 0.2;
|
|
this.shadowLight = b
|
|
},
|
|
initHitbox: function() {},
|
|
initHitboxMaterial: function() {
|
|
this.showHitboxes && (this.hitboxMaterial = new BABYLON.StandardMaterial("hitboxMat", wgl.game.currentScene), this.hitboxMaterial.emissiveColor = new BABYLON.Color3(0.3, 0.3, 0.3))
|
|
},
|
|
initMeshes: function() {
|
|
this.bg =
|
|
wgl.game.currentScene.getMeshByName("Bg");
|
|
this.coin = wgl.game.currentScene.getMeshByName("Coin");
|
|
this.startSign = wgl.game.currentScene.getMeshByName("Start_Line");
|
|
this.cars = [wgl.game.currentScene.getMeshByName("Car_Standard"), wgl.game.currentScene.getMeshByName("Car_Pickup"), wgl.game.currentScene.getMeshByName("Car_Taxi"), wgl.game.currentScene.getMeshByName("Car_Police"), wgl.game.currentScene.getMeshByName("Car_Box"), wgl.game.currentScene.getMeshByName("Car_Ice_Cream_Truck"), wgl.game.currentScene.getMeshByName("Car_Ambulance"),
|
|
wgl.game.currentScene.getMeshByName("Car_Firefighter")
|
|
];
|
|
this.confettis = [wgl.game.currentScene.getMeshByName("Confetti1"), wgl.game.currentScene.getMeshByName("Confetti2"), wgl.game.currentScene.getMeshByName("Confetti3"), wgl.game.currentScene.getMeshByName("Confetti4"), wgl.game.currentScene.getMeshByName("Confetti5"), wgl.game.currentScene.getMeshByName("Confetti6"), wgl.game.currentScene.getMeshByName("Confetti7")];
|
|
this.smokes = [wgl.game.currentScene.getMeshByName("Smoke_0"), wgl.game.currentScene.getMeshByName("Smoke_1"),
|
|
wgl.game.currentScene.getMeshByName("Smoke_2"), wgl.game.currentScene.getMeshByName("Smoke_3"), wgl.game.currentScene.getMeshByName("Smoke_4")
|
|
];
|
|
for (var b = 0; b < this.smokes.length; b++) this.smokes[b].flipFaces(), this.smokes[b].material.opacityTexture = this.smokes[b].material.diffuseTexture;
|
|
this.platforms = [];
|
|
for (b = 0; 5 > b; b++) {
|
|
var c = "";
|
|
0 < b && (c = ".00" + b);
|
|
c = [wgl.game.currentScene.getMeshByName("Platform_Flat" + c), wgl.game.currentScene.getMeshByName("Platform_Small_Bump_L" + c), wgl.game.currentScene.getMeshByName("Platform_Small_Bump_R" +
|
|
c), wgl.game.currentScene.getMeshByName("Platform_Small_Valley_L" + c), wgl.game.currentScene.getMeshByName("Platform_Small_Valley_R" + c), wgl.game.currentScene.getMeshByName("Platform_Half_L" + c), wgl.game.currentScene.getMeshByName("Platform_Half_R" + c), wgl.game.currentScene.getMeshByName("Platform_Ramp_L" + c), wgl.game.currentScene.getMeshByName("Platform_Ramp_R" + c)];
|
|
this.platforms.push(c)
|
|
}
|
|
ig.PLATFORM_FLAT = 0;
|
|
ig.PLATFORM_SMALL_BUMP_L = 1;
|
|
ig.PLATFORM_SMALL_BUMP_R = 2;
|
|
ig.PLATFORM_SMALL_VALLEY_L = 3;
|
|
ig.PLATFORM_SMALL_VALLEY_R =
|
|
4;
|
|
ig.PLATFORM_HALF_L = 5;
|
|
ig.PLATFORM_HALF_R = 6;
|
|
ig.PLATFORM_RAMP_L = 7;
|
|
ig.PLATFORM_RAMP_R = 8
|
|
},
|
|
initPhysics: function() {
|
|
var b = wgl.game.currentScene;
|
|
this.physicsEngine = new BABYLON.CannonJSPlugin;
|
|
b.enablePhysics(new BABYLON.Vector3(0, -30, 0), this.physicsEngine);
|
|
this.physicsEngine.setTimeStep(1 / 60)
|
|
},
|
|
updateTimeStep: function() {
|
|
this.physicsDeltaFactor = 1.4 + 0.05 * this.difficulty;
|
|
2 < this.physicsDeltaFactor && (this.physicsDeltaFactor = 2);
|
|
this.isMainMenu && (this.physicsDeltaFactor = 1);
|
|
this.isTutorial && (this.physicsDeltaFactor =
|
|
1.3)
|
|
},
|
|
disableSourceMeshes: function() {
|
|
for (var b = 0; b < this.platforms.length; b++)
|
|
for (var c = this.platforms[b], e = 0; e < c.length; e++) c[e].setEnabled(!1);
|
|
for (b = 0; b < this.cars.length; b++) this.cars[b].setEnabled(!1);
|
|
for (b = 0; b < this.smokes.length; b++) this.smokes[b].setEnabled(!1);
|
|
for (b = 0; b < this.confettis.length; b++) this.confettis[b].setEnabled(!1);
|
|
this.coin.setEnabled(!1);
|
|
this.startSign.setEnabled(!1)
|
|
},
|
|
attachHitboxMeshes: function(b) {
|
|
if (this.showHitboxes && b.hitboxes)
|
|
for (var c = 0; c < b.hitboxes.length; c++) {
|
|
var e = b.hitboxes[c],
|
|
d = BABYLON.MeshBuilder.CreateBox("box", {
|
|
height: e.size.y,
|
|
width: e.size.x,
|
|
depth: e.size.z,
|
|
faceColors: [BABYLON.Color3.Green()]
|
|
}, wgl.game.currentScene);
|
|
d.position.x = b.position.x + e.position.x + e.size.x / 2;
|
|
d.position.y = b.position.y + e.position.y + e.size.y / 2;
|
|
d.position.z = b.position.z + e.position.z + e.size.z / 2;
|
|
d.setMaterialByID("hitboxMat");
|
|
b.addChild(d)
|
|
}
|
|
},
|
|
spawnPlatform: function(b, c, e, d, g) {
|
|
var f = this.getPlatformFromPool(d);
|
|
f.setPosition(b, c - 0.075, e);
|
|
f.setSkin(g);
|
|
b = this.latestPlatform;
|
|
this.latestPlatform = f;
|
|
this.previousPlatform &&
|
|
b && b.hasCoin && this.spawnCoinsOnPlatform(b, this.previousPlatform);
|
|
this.previousPlatform = b;
|
|
this.platformCoinSpawnCount++;
|
|
if (!this.isTutorial && !this.isMainMenu && this.platformCoinSpawnCount == this.coinSpawnEvery && (this.coinSpawnEvery = ig.random.int(this.coinSpawnRandomMin, this.coinSpawnRandomMax), this.platformCoinSpawnCount = 0, ig.random.bool())) {
|
|
this.platformCoinSpawnCount = this.coinSpawnEvery - 1;
|
|
if (d == ig.PLATFORM_RAMP_L || d == ig.PLATFORM_RAMP_R) this.platformCoinSpawnCount = this.coinSpawnEvery - 5;
|
|
0 > this.platformCoinSpawnCount &&
|
|
(this.platformCoinSpawnCount = 0)
|
|
}!this.isTutorial && !this.isMainMenu && ig.booster3Active && (f.hasCoin = !0);
|
|
f.isSafe = !1;
|
|
"left" == this.blockDirection && d == ig.PLATFORM_FLAT && (f.isSafe = !0);
|
|
return f
|
|
},
|
|
moveCarToSafePlatform: function() {
|
|
var b = this.findSafePlatform(),
|
|
c = this.findNearestNextPlatform(b),
|
|
b = b.mesh.position; - 10 > c.mesh.position.x - b.x ? this.carSkeleton.resetPosition(b.x, b.y + 3, b.z, !0) : this.carSkeleton.resetPosition(b.x, b.y + 3, b.z)
|
|
},
|
|
findNearestNextPlatform: function(b) {
|
|
for (var c = null, e = 0; e < this.platformSkeletons.length; e++) {
|
|
var d =
|
|
this.platformSkeletons[e],
|
|
g = this.distanceBetweenPlatforms(d, b);
|
|
if (d.active && 40 > g && (d.mesh.position.x < b.mesh.position.x || d.mesh.position.z < b.mesh.position.z)) c = d
|
|
}
|
|
return c
|
|
},
|
|
findSafePlatform: function() {
|
|
for (var b = null, c = 0; c < this.platformSkeletons.length; c++) {
|
|
var e = this.platformSkeletons[c];
|
|
if (e.platformType == ig.PLATFORM_FLAT && 0 < e.carTouchDuration && (!b || this.platformDistanceFromCar(b) > this.platformDistanceFromCar(e))) b = e
|
|
}
|
|
b || (b = this.findAnyNearestPlatform());
|
|
return b
|
|
},
|
|
findAnyNearestPlatform: function() {
|
|
for (var b =
|
|
null, c = 0; c < this.platformSkeletons.length; c++) {
|
|
var e = this.platformSkeletons[c];
|
|
if (e.platformType == ig.PLATFORM_FLAT && e.active && (!b || this.platformDistanceFromCar(b) > this.platformDistanceFromCar(e))) b = e
|
|
}
|
|
},
|
|
platformDistanceFromCar: function(b) {
|
|
var c = b.mesh.position,
|
|
e = this.carSkeleton.chassis.position;
|
|
b = c.x - e.x;
|
|
var d = c.y - e.y,
|
|
c = c.z - e.z;
|
|
return b * b + d * d + c * c
|
|
},
|
|
distanceBetweenPlatforms: function(b, c) {
|
|
var e = b.mesh.position,
|
|
d = c.mesh.position,
|
|
g = e.x - d.x,
|
|
f = e.y - d.y,
|
|
e = e.z - d.z;
|
|
return Math.sqrt(g * g + f * f + e * e)
|
|
},
|
|
spawnCoinsOnPlatform: function(b,
|
|
c) {
|
|
var e = "none";
|
|
this.latestPlatform.x == b.x && b.x == c.x && (e = "left");
|
|
this.latestPlatform.z == b.z && b.z == c.z && (e = "right");
|
|
if ("none" != e) {
|
|
var d = "right" == e ? 5 : 0,
|
|
e = "left" == e ? 5 : 0;
|
|
switch (b.platformType) {
|
|
case ig.PLATFORM_RAMP_L:
|
|
case ig.PLATFORM_RAMP_R:
|
|
this.spawnCoinFromPool(b.x, b.y + 7.5, b.z);
|
|
this.spawnCoinFromPool(b.x + d, b.y + 5, b.z + e);
|
|
this.spawnCoinFromPool(b.x - d, b.y + 10, b.z - e);
|
|
break;
|
|
case ig.PLATFORM_SMALL_BUMP_L:
|
|
case ig.PLATFORM_SMALL_BUMP_R:
|
|
this.spawnCoinFromPool(b.x, b.y + 7, b.z);
|
|
this.spawnCoinFromPool(b.x + d, b.y + 5,
|
|
b.z + e);
|
|
this.spawnCoinFromPool(b.x - d, b.y + 5, b.z - e);
|
|
break;
|
|
case ig.PLATFORM_SMALL_VALLEY_L:
|
|
case ig.PLATFORM_SMALL_VALLEY_R:
|
|
this.spawnCoinFromPool(b.x, b.y, b.z);
|
|
this.spawnCoinFromPool(b.x + d, b.y + 3, b.z + e);
|
|
this.spawnCoinFromPool(b.x - d, b.y + 3, b.z - e);
|
|
break;
|
|
default:
|
|
this.spawnCoinFromPool(b.x, b.y + 4, b.z), this.spawnCoinFromPool(b.x + d, b.y + 4, b.z + e), this.spawnCoinFromPool(b.x - d, b.y + 4, b.z - e)
|
|
}
|
|
}
|
|
},
|
|
spawnCoinFromPool: function(b, c, e) {
|
|
for (var d = 0; d < this.coins.length; d++) {
|
|
var g = this.coins[d];
|
|
if (!g.active) {
|
|
g.activate(b, c, e);
|
|
return
|
|
}
|
|
}
|
|
this.coins.push(new ig.Coin(b, c, e))
|
|
},
|
|
spawnSmokeFromPool: function(b, c, e) {
|
|
for (var d = 0; d < this.smokeInstances.length; d++) {
|
|
var g = this.smokeInstances[d];
|
|
if (!g.active) {
|
|
g.activate(b, c, e);
|
|
return
|
|
}
|
|
}
|
|
this.smokeInstances.push(new ig.Smoke(b, c, e))
|
|
},
|
|
getPlatformFromPool: function(b) {
|
|
for (var c = 0; c < this.platformSkeletons.length; c++) {
|
|
var e = this.platformSkeletons[c];
|
|
if (!e.active && e.platformType == b) return e.activate(), e
|
|
}
|
|
b = new ig.PlatformSkeleton(0, 0, 0, b, 0);
|
|
this.platformSkeletons.push(b);
|
|
return b
|
|
},
|
|
resetAllPlatforms: function() {
|
|
for (var b =
|
|
0; b < this.platformSkeletons.length; b++) this.platformSkeletons[b].deactivate()
|
|
},
|
|
resetAllCoins: function() {
|
|
for (var b = 0; b < this.coins.length; b++) this.coins[b].deactivate()
|
|
},
|
|
resetAllSmokes: function() {
|
|
for (var b = 0; b < this.smokeInstances.length; b++) this.smokeInstances[b].deactivate()
|
|
},
|
|
spawnTrail: function(b, c) {
|
|
if (!this.useLessEffects) {
|
|
0 == this.trails.length && this.initTrail();
|
|
this.trailIndex++;
|
|
this.trailIndex >= this.trails.length && (this.trailIndex = 0);
|
|
var e = this.trails[this.trailIndex];
|
|
e.position.set(b.x, b.y, b.z);
|
|
e.rotation.set(c.x, c.y, c.z)
|
|
}
|
|
},
|
|
resetAllTrail: function() {
|
|
!this.useLessEffects && 100 > this.trails.length && this.initTrail();
|
|
for (var b = 0; b < this.trails.length; b++) this.trails[b].position.set(0, 0, 0)
|
|
},
|
|
cameraFollowMesh: function(b) {
|
|
this.cameraTargetMesh = b
|
|
},
|
|
cameraUnfollow: function() {
|
|
this.cameraTargetMesh = null
|
|
},
|
|
pointCameraToVec3: function(b) {
|
|
b.y = this.zero.y;
|
|
var c = b.x + 0.7 * this.targetRelativePosition.x * this.zoomFactor,
|
|
e = b.y + 0.7 * this.targetRelativePosition.y * this.zoomFactor,
|
|
d = b.z + 0.7 * this.targetRelativePosition.z *
|
|
this.zoomFactor;
|
|
this.isTutorial && (b.x -= 8, b.z -= 8, c = b.x + 0.4 * this.targetRelativePosition.x * this.zoomFactor, e = b.y + 0.5 * this.targetRelativePosition.y * this.zoomFactor, d = b.z + 0.4 * this.targetRelativePosition.z * this.zoomFactor);
|
|
this.camera.position.set(c, e, d);
|
|
this.camera.setTarget(b);
|
|
this.bg.position.x = this.bgRelativePosition.x + c;
|
|
this.bg.position.y = this.bgRelativePosition.y + e;
|
|
this.bg.position.z = this.bgRelativePosition.z + d;
|
|
this.whiteCover.position.x = 0.05 * this.bgRelativePosition.x + c;
|
|
this.whiteCover.position.y =
|
|
0.05 * this.bgRelativePosition.y + e;
|
|
this.whiteCover.position.z = 0.05 * this.bgRelativePosition.z + d;
|
|
this.shadowLight.position.x = b.x + this.lightRelativePosition.x;
|
|
this.shadowLight.position.y = b.y + this.lightRelativePosition.y;
|
|
this.shadowLight.position.z = b.z + this.lightRelativePosition.z
|
|
},
|
|
generatePlatformPattern: function() {
|
|
var b = 0,
|
|
c = this.difficulty;
|
|
9 < c && (b += c - 9, c = 9);
|
|
3 < b && (b = 3);
|
|
b = ig.random.int(b, c);
|
|
this.isMainMenu && (b = 0);
|
|
if (!this.isTutorial) {
|
|
switch (b) {
|
|
case 0:
|
|
this.generateFlatLine(ig.random.int(2, 3));
|
|
break;
|
|
case 1:
|
|
this.generateZigZag();
|
|
break;
|
|
case 2:
|
|
this.generateSmallBumpLine();
|
|
break;
|
|
case 3:
|
|
this.generateSmallValleyLine();
|
|
break;
|
|
case 4:
|
|
this.generateHalfLine(ig.random.int(3, 5));
|
|
break;
|
|
case 5:
|
|
this.generateValleyBumpLine();
|
|
break;
|
|
case 6:
|
|
this.generateSplitBumpLine();
|
|
break;
|
|
case 7:
|
|
this.generateRamp();
|
|
break;
|
|
case 8:
|
|
this.generateSplitLine();
|
|
break;
|
|
case 9:
|
|
this.generateHalfZigZag()
|
|
}!this.isMainMenu && !this.isTutorial && (this.toggleBlockDirection(), this.platformDifficultyGenerationCount++, this.platformSkinPatternGenerationCount++)
|
|
}
|
|
},
|
|
toggleBlockDirection: function() {
|
|
this.blockDirection =
|
|
"left" == this.blockDirection ? "right" : "left"
|
|
},
|
|
generateSplitLine: function() {
|
|
var b = this.latestPlatform,
|
|
c = b.x + ("right" == this.blockDirection ? -this.tileSize : 0),
|
|
e = b.y,
|
|
b = b.z + ("left" == this.blockDirection ? -this.tileSize : 0),
|
|
d = 5;
|
|
if ("left" == this.blockDirection) {
|
|
this.spawnPlatform(c, e, b, ig.PLATFORM_FLAT, this.skinPattern);
|
|
for (this.spawnPlatform(c - this.tileSize, e, b, ig.PLATFORM_FLAT, this.skinPattern); 0 < d;) d--, b -= this.tileSize, this.spawnPlatform(c, e, b, ig.PLATFORM_HALF_L, this.skinPattern), this.spawnPlatform(c - this.tileSize,
|
|
e, b, ig.PLATFORM_HALF_L, this.skinPattern), 0 == d && (this.spawnPlatform(c, e, b, ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c - this.tileSize, e, b, ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c - this.tileSize, e, b - this.tileSize, ig.PLATFORM_FLAT, this.skinPattern))
|
|
} else {
|
|
this.spawnPlatform(c, e, b, ig.PLATFORM_FLAT, this.skinPattern);
|
|
for (this.spawnPlatform(c, e, b - this.tileSize, ig.PLATFORM_FLAT, this.skinPattern); 0 < d;) d--, c -= this.tileSize, this.spawnPlatform(c, e, b, ig.PLATFORM_HALF_R, this.skinPattern),
|
|
this.spawnPlatform(c, e, b - this.tileSize, ig.PLATFORM_HALF_R, this.skinPattern), 0 == d && (this.spawnPlatform(c, e, b, ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c, e, b - this.tileSize, ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c - this.tileSize, e, b - this.tileSize, ig.PLATFORM_FLAT, this.skinPattern))
|
|
}
|
|
},
|
|
generateSplitBumpLine: function() {
|
|
var b = this.latestPlatform,
|
|
c = b.x + ("right" == this.blockDirection ? -this.tileSize : 0),
|
|
e = b.y,
|
|
b = b.z + ("left" == this.blockDirection ? -this.tileSize : 0),
|
|
d = 5;
|
|
if ("left" == this.blockDirection) {
|
|
this.spawnPlatform(c,
|
|
e, b, ig.PLATFORM_FLAT, this.skinPattern);
|
|
this.spawnPlatform(c - this.tileSize, e, b, ig.PLATFORM_FLAT, this.skinPattern);
|
|
for (this.spawnPlatform(c - 2 * this.tileSize, e, b, ig.PLATFORM_FLAT, this.skinPattern); 0 < d;) {
|
|
d--;
|
|
b -= this.tileSize;
|
|
if (3 == d) {
|
|
var g = ig.random.int(1, 2);
|
|
this.spawnPlatform(c, e, b, 1 == g ? ig.PLATFORM_RAMP_L : ig.PLATFORM_FLAT, this.skinPattern);
|
|
this.spawnPlatform(c - 2 * this.tileSize, e, b, 2 == g ? ig.PLATFORM_RAMP_L : ig.PLATFORM_FLAT, this.skinPattern)
|
|
} else this.spawnPlatform(c, e, b, ig.PLATFORM_FLAT, this.skinPattern),
|
|
this.spawnPlatform(c - 2 * this.tileSize, e, b, ig.PLATFORM_FLAT, this.skinPattern);
|
|
0 == d && (this.spawnPlatform(c - this.tileSize, e, b, ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c - 2 * this.tileSize, e, b, ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c - 2 * this.tileSize, e, b - this.tileSize, ig.PLATFORM_FLAT, this.skinPattern))
|
|
}
|
|
} else {
|
|
this.spawnPlatform(c, e, b, ig.PLATFORM_FLAT, this.skinPattern);
|
|
this.spawnPlatform(c, e, b - this.tileSize, ig.PLATFORM_FLAT, this.skinPattern);
|
|
for (this.spawnPlatform(c, e, b - 2 * this.tileSize,
|
|
ig.PLATFORM_FLAT, this.skinPattern); 0 < d;) d--, c -= this.tileSize, 3 == d ? (g = ig.random.int(1, 2), this.spawnPlatform(c, e, b, 1 == g ? ig.PLATFORM_RAMP_R : ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c, e, b - 2 * this.tileSize, 2 == g ? ig.PLATFORM_RAMP_R : ig.PLATFORM_FLAT, this.skinPattern)) : (this.spawnPlatform(c, e, b, ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c, e, b - 2 * this.tileSize, ig.PLATFORM_FLAT, this.skinPattern)), 0 == d && (this.spawnPlatform(c, e, b - this.tileSize, ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c,
|
|
e, b - 2 * this.tileSize, ig.PLATFORM_FLAT, this.skinPattern), this.spawnPlatform(c - this.tileSize, e, b - 2 * this.tileSize, ig.PLATFORM_FLAT, this.skinPattern))
|
|
}
|
|
},
|
|
generateHalfZigZag: function() {
|
|
this.generateHalfLine(ig.random.int(2, 3));
|
|
this.toggleBlockDirection();
|
|
this.generateHalfLine(ig.random.int(2, 3));
|
|
this.toggleBlockDirection();
|
|
this.generateHalfLine(ig.random.int(2, 3));
|
|
ig.random.bool() && (this.toggleBlockDirection(), this.generateHalfLine(ig.random.int(2, 3)))
|
|
},
|
|
generateZigZag: function() {
|
|
this.generateFlatLine(ig.random.int(1,
|
|
2));
|
|
this.toggleBlockDirection();
|
|
this.generateFlatLine(ig.random.int(1, 1));
|
|
this.toggleBlockDirection();
|
|
this.generateFlatLine(ig.random.int(1, 2));
|
|
ig.random.bool() && (this.toggleBlockDirection(), this.generateFlatLine(ig.random.int(1, 1)))
|
|
},
|
|
generateFlatLine: function(b) {
|
|
for (var c = 0; c < b; c++) {
|
|
var e = this.latestPlatform;
|
|
this.spawnPlatform(e.x + ("right" == this.blockDirection ? -this.tileSize : 0), e.y, e.z + ("left" == this.blockDirection ? -this.tileSize : 0), ig.PLATFORM_FLAT, this.skinPattern)
|
|
}
|
|
},
|
|
generateValleyBumpLine: function() {
|
|
for (var b =
|
|
0; 5 > b; b++) {
|
|
var c = this.latestPlatform,
|
|
e = c.x + ("right" == this.blockDirection ? -this.tileSize : 0),
|
|
d = c.y,
|
|
c = c.z + ("left" == this.blockDirection ? -this.tileSize : 0);
|
|
1 == b ? this.spawnPlatform(e, d, c, "right" == this.blockDirection ? ig.PLATFORM_SMALL_VALLEY_R : ig.PLATFORM_SMALL_VALLEY_L, this.skinPattern) : 2 == b ? this.spawnPlatform(e, d, c, "right" == this.blockDirection ? ig.PLATFORM_SMALL_BUMP_R : ig.PLATFORM_SMALL_BUMP_L, this.skinPattern) : this.spawnPlatform(e, d, c, ig.PLATFORM_FLAT, this.skinPattern)
|
|
}
|
|
},
|
|
generateSmallBumpLine: function() {
|
|
for (var b =
|
|
0; 5 > b; b++) {
|
|
var c = this.latestPlatform,
|
|
e = c.x + ("right" == this.blockDirection ? -this.tileSize : 0),
|
|
d = c.y,
|
|
c = c.z + ("left" == this.blockDirection ? -this.tileSize : 0);
|
|
b == Math.floor(2.5) ? this.spawnPlatform(e, d, c, "right" == this.blockDirection ? ig.PLATFORM_SMALL_BUMP_R : ig.PLATFORM_SMALL_BUMP_L, this.skinPattern) : this.spawnPlatform(e, d, c, ig.PLATFORM_FLAT, this.skinPattern)
|
|
}
|
|
},
|
|
generateRamp: function() {
|
|
for (var b = 0; 7 > b; b++) {
|
|
var c = this.latestPlatform,
|
|
e = c.x + ("right" == this.blockDirection ? -this.tileSize : 0),
|
|
d = c.y,
|
|
c = c.z + ("left" == this.blockDirection ?
|
|
-this.tileSize : 0);
|
|
1 == b ? this.spawnPlatform(e, d, c, "right" == this.blockDirection ? ig.PLATFORM_RAMP_R : ig.PLATFORM_RAMP_L, this.skinPattern) : this.spawnPlatform(e, d, c, ig.PLATFORM_FLAT, this.skinPattern)
|
|
}
|
|
},
|
|
generateSmallValleyLine: function() {
|
|
for (var b = 0; 5 > b; b++) {
|
|
var c = this.latestPlatform,
|
|
e = c.x + ("right" == this.blockDirection ? -this.tileSize : 0),
|
|
d = c.y,
|
|
c = c.z + ("left" == this.blockDirection ? -this.tileSize : 0);
|
|
b == Math.floor(2.5) ? this.spawnPlatform(e, d, c, "right" == this.blockDirection ? ig.PLATFORM_SMALL_VALLEY_R : ig.PLATFORM_SMALL_VALLEY_L,
|
|
this.skinPattern) : this.spawnPlatform(e, d, c, ig.PLATFORM_FLAT, this.skinPattern)
|
|
}
|
|
},
|
|
generateHalfLine: function(b) {
|
|
for (var c = 0; c < b; c++) {
|
|
var e = this.latestPlatform,
|
|
d = e.x + ("right" == this.blockDirection ? -this.tileSize : 0),
|
|
g = e.y,
|
|
e = e.z + ("left" == this.blockDirection ? -this.tileSize : 0);
|
|
c != b - 1 ? this.spawnPlatform(d, g, e, "right" == this.blockDirection ? ig.PLATFORM_HALF_R : ig.PLATFORM_HALF_L, this.skinPattern) : this.spawnPlatform(d, g, e, ig.PLATFORM_FLAT, this.skinPattern)
|
|
}
|
|
},
|
|
updatePlatformGeneration: function() {
|
|
if (this.isTutorial) this.updateTutorialPlatformGeneration();
|
|
else {
|
|
if (this.latestPlatform && this.carSkeleton.isTouchingGround) {
|
|
var b = this.carSkeleton.chassis.absolutePosition,
|
|
c = this.latestPlatform.x - b.x,
|
|
b = this.latestPlatform.z - b.z;
|
|
62500 > c * c + b * b && this.generatePlatformPattern()
|
|
}
|
|
this.platformSkinPatternGenerationCount > this.changeSkinPatternEvery && (this.platformSkinPatternGenerationCount = 0, this.skinPattern++, Math.round(this.skinPattern) > this.skinPatternMax && (this.skinPattern = 0));
|
|
this.platformDifficultyGenerationCount > this.increaseDifficultyEvery && (this.platformDifficultyGenerationCount =
|
|
0, this.difficulty++)
|
|
}
|
|
},
|
|
updateTutorialPlatformGeneration: function() {
|
|
for (var b = [], c = null, e = 9999999, d = 0; d < this.platformSkeletons.length; d++) {
|
|
var g = this.platformSkeletons[d];
|
|
if (g.active) {
|
|
b.push(g);
|
|
var f = this.getSquaredPlatformDistanceToCar(g);
|
|
f < e && (e = f, c = g)
|
|
}
|
|
}
|
|
if (c)
|
|
for (d = -4; 2 > d; d++)
|
|
for (e = -4; 2 > e; e++) this.isTherePlatformAt(d, e, b, c) || this.spawnPlatform(c.x + d * this.tileSize, this.zero.y, c.z + e * this.tileSize, ig.PLATFORM_FLAT, this.skinPattern)
|
|
},
|
|
isTherePlatformAt: function(b, c, e, d) {
|
|
b = b * this.tileSize + d.x;
|
|
c = c * this.tileSize +
|
|
d.z;
|
|
for (d = 0; d < e.length; d++) {
|
|
var g = e[d];
|
|
if (5 > Math.abs(g.x - b) && 5 > Math.abs(g.z - c)) return !0
|
|
}
|
|
return !1
|
|
},
|
|
getSquaredPlatformDistanceToCar: function(b) {
|
|
var c = this.carSkeleton.chassis.position,
|
|
e = c.x - b.x;
|
|
b = c.z - b.z;
|
|
return e * e + b * b
|
|
},
|
|
updateLight: function() {
|
|
this.includedMeshesInLight = [this.carSkeleton.skin];
|
|
this.shadowLight.includedOnlyMeshes = this.includedMeshesInLight;
|
|
this.sun.includedOnlyMeshes = this.includedMeshesInLight
|
|
},
|
|
updatePlatforms: function() {
|
|
for (var b = this.activePlatformCount = 0; b < this.platformSkeletons.length; b++) {
|
|
var c =
|
|
this.platformSkeletons[b];
|
|
c.active && (c.update(), this.activePlatformCount++, c.includedInShadowLight && this.includedMeshesInLight.push(c.mesh))
|
|
}
|
|
},
|
|
updateCoins: function() {
|
|
for (var b = this.activeCoinCount = 0; b < this.coins.length; b++) {
|
|
var c = this.coins[b];
|
|
c.active && (c.update(), this.activeCoinCount++)
|
|
}
|
|
},
|
|
updateSmokes: function() {
|
|
for (var b = this.activeSmokeCount = 0; b < this.smokeInstances.length; b++) {
|
|
var c = this.smokeInstances[b];
|
|
c.active && (c.update(), this.activeSmokeCount++)
|
|
}
|
|
},
|
|
updateFollowCamera: function() {
|
|
if (this.cameraTargetMesh) {
|
|
var b =
|
|
this.cameraTargetMesh.position.clone();
|
|
b.z > this.zero.z && (b.z = this.zero.z);
|
|
b.y = this.zero.y;
|
|
this.pointCameraToVec3(b)
|
|
}
|
|
},
|
|
hitTestObjects: function(b, c) {
|
|
if (!b.hitboxes || !c.hitboxes) return !1;
|
|
for (var e = 0; e < b.hitboxes.length; e++)
|
|
for (var d = b.hitboxes[e], g = 0; g < c.hitboxes.length; g++)
|
|
if (this.hitTest(b.position, c.position, d, c.hitboxes[g])) return !0;
|
|
return !1
|
|
},
|
|
hitTest: function(b, c, e, d) {
|
|
var g = b.x + e.position.x,
|
|
f = b.y + e.position.y;
|
|
b = b.z + e.position.z;
|
|
var m = c.x + d.position.x,
|
|
l = c.y + d.position.y;
|
|
c = c.z + d.position.z;
|
|
return b +
|
|
e.size.z < c || b > c + d.size.z || g + e.size.x < m || g > m + d.size.x || f + e.size.y < l || f > l + d.size.y ? !1 : !0
|
|
},
|
|
setFaceDirection: function(b, c) {
|
|
b.rotationQuaternion || (b.rotationQuaternion = BABYLON.Quaternion.Identity());
|
|
c.normalize();
|
|
var e = BABYLON.Matrix.Identity(),
|
|
d = BABYLON.Vector3.Up(),
|
|
d = BABYLON.Vector3.Cross(c, d),
|
|
g = BABYLON.Vector3.Cross(d, c);
|
|
e.m[0] = d.x;
|
|
e.m[1] = d.y;
|
|
e.m[2] = d.z;
|
|
e.m[4] = c.x;
|
|
e.m[5] = c.y;
|
|
e.m[6] = c.z;
|
|
e.m[8] = g.x;
|
|
e.m[9] = g.y;
|
|
e.m[10] = g.z;
|
|
BABYLON.Quaternion.FromRotationMatrixToRef(e, b.rotationQuaternion)
|
|
},
|
|
lerp: function(b,
|
|
c, e) {
|
|
return (1 - e) * b + e * c
|
|
},
|
|
lerpDt: function(b, c, e) {
|
|
return this.lerp(b, c, e * ig.system.tick)
|
|
},
|
|
lerpPerfectDt: function(b, c, e) {
|
|
e = 1 - Math.pow(e, ig.system.tick);
|
|
return this.lerp(b, c, e)
|
|
},
|
|
showAxis: function(b) {
|
|
var c = wgl.game.currentScene,
|
|
e = function(b, e, f) {
|
|
var m = new BABYLON.DynamicTexture("DynamicTexture", 50, c, !0);
|
|
m.hasAlpha = !0;
|
|
m.drawText(b, 5, 40, "bold 36px Arial", e, "transparent", !0);
|
|
b = new BABYLON.Mesh.CreatePlane("TextPlane", f, c, !0);
|
|
b.material = new BABYLON.StandardMaterial("TextPlaneMaterial", c);
|
|
b.material.backFaceCulling = !1;
|
|
b.material.specularColor = new BABYLON.Color3(0, 0, 0);
|
|
b.material.diffuseTexture = m;
|
|
return b
|
|
};
|
|
BABYLON.Mesh.CreateLines("axisX", [new BABYLON.Vector3.Zero, new BABYLON.Vector3(b, 0, 0), new BABYLON.Vector3(0.95 * b, 0.05 * b, 0), new BABYLON.Vector3(b, 0, 0), new BABYLON.Vector3(0.95 * b, -0.05 * b, 0)], c).color = new BABYLON.Color3(1, 0, 0);
|
|
e("X", "red", b / 10).position = new BABYLON.Vector3(0.9 * b, -0.05 * b, 0);
|
|
BABYLON.Mesh.CreateLines("axisY", [new BABYLON.Vector3.Zero, new BABYLON.Vector3(0, b, 0), new BABYLON.Vector3(-0.05 * b, 0.95 * b,
|
|
0), new BABYLON.Vector3(0, b, 0), new BABYLON.Vector3(0.05 * b, 0.95 * b, 0)], c).color = new BABYLON.Color3(0, 1, 0);
|
|
e("Y", "green", b / 10).position = new BABYLON.Vector3(0, 0.9 * b, -0.05 * b);
|
|
BABYLON.Mesh.CreateLines("axisZ", [new BABYLON.Vector3.Zero, new BABYLON.Vector3(0, 0, b), new BABYLON.Vector3(0, -0.05 * b, 0.95 * b), new BABYLON.Vector3(0, 0, b), new BABYLON.Vector3(0, 0.05 * b, 0.95 * b)], c).color = new BABYLON.Color3(0, 0, 1);
|
|
e("Z", "blue", b / 10).position = new BABYLON.Vector3(0, 0.05 * b, 0.9 * b)
|
|
}
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.utils.tween-patch").requires("plugins.tween").defines(function() {
|
|
ig.Entity.prototype.delayedCall = function(b, c, e) {
|
|
void 0 === e && (e = !0);
|
|
b = new ig.Tween(this, {}, b, {
|
|
onComplete: c
|
|
});
|
|
this.tweens.push(b);
|
|
e && b.start();
|
|
return b
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.utils.random").defines(function() {
|
|
ig.random = {
|
|
chance: function(b) {
|
|
return Math.random() < b
|
|
},
|
|
bool: function() {
|
|
return 0.5 > Math.random()
|
|
},
|
|
"int": function(b, c) {
|
|
return b + Math.floor((c - b + 1) * Math.random())
|
|
},
|
|
"float": function(b, c) {
|
|
return b + (c - b) * Math.random()
|
|
},
|
|
string: function(b, c) {
|
|
void 0 === c && (c = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
|
|
for (var e = "", d = 0; d < b; d++) e += c.charAt(Random.int(0, c.length - 1));
|
|
return e
|
|
},
|
|
fromArray: function(b) {
|
|
return null != b && 0 < b.length ? b[this.int(0,
|
|
b.length - 1)] : null
|
|
},
|
|
shuffle: function(b) {
|
|
if (null != b)
|
|
for (var c = 0; c < b.length; c++) {
|
|
var e = this.int(0, b.length - 1),
|
|
d = b[c];
|
|
b[c] = b[e];
|
|
b[e] = d
|
|
}
|
|
return b
|
|
}
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.utils.signal").requires("impact.impact").defines(function() {
|
|
ig.Signal = ig.Class.extend({
|
|
signalListeners: null,
|
|
id: 0,
|
|
init: function() {
|
|
this.id = ++ig.Signal._lastId;
|
|
this.signalListeners = []
|
|
},
|
|
addOnce: function(b, c) {
|
|
this.signalListeners.push({
|
|
signalListener: b,
|
|
signalContext: c,
|
|
isOnce: !0
|
|
})
|
|
},
|
|
add: function(b, c) {
|
|
this.signalListeners.push({
|
|
signalListener: b,
|
|
signalContext: c,
|
|
isOnce: !1
|
|
})
|
|
},
|
|
dispatch: function() {
|
|
for (var b = 0; b < this.signalListeners.length;) {
|
|
var c = this.signalListeners[b];
|
|
c.signalListener.apply(c.signalContext,
|
|
arguments);
|
|
c.isOnce ? this.signalListeners.splice(b, 1) : b++
|
|
}
|
|
}
|
|
});
|
|
ig.Signal._lastId = 0
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.toybox.content").requires("impact.entity", "game.toybox.utils.tween-patch", "game.toybox.utils.random", "game.toybox.utils.signal").defines(function() {
|
|
ig.drawRoundRect = function(b, c, e, d, g, f, m, l) {
|
|
"undefined" == typeof l && (l = !0);
|
|
"undefined" === typeof f && (f = 5);
|
|
b.beginPath();
|
|
b.moveTo(c + f, e);
|
|
b.lineTo(c + d - f, e);
|
|
b.quadraticCurveTo(c + d, e, c + d, e + f);
|
|
b.lineTo(c + d, e + g - f);
|
|
b.quadraticCurveTo(c + d, e + g, c + d - f, e + g);
|
|
b.lineTo(c + f, e + g);
|
|
b.quadraticCurveTo(c, e + g, c, e + g - f);
|
|
b.lineTo(c, e + f);
|
|
b.quadraticCurveTo(c, e, c + f,
|
|
e);
|
|
b.closePath();
|
|
l && b.stroke();
|
|
m && b.fill()
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.responsive.responsive-utils").requires("impact.system").defines(function() {
|
|
ig.responsive = {
|
|
width: 0,
|
|
height: 0,
|
|
halfWidth: 0,
|
|
halfHeight: 0,
|
|
originalWidth: 0,
|
|
originalHeight: 0,
|
|
fillScale: 1,
|
|
scaleX: 1,
|
|
scaleY: 1,
|
|
toAnchor: function(b, c, e) {
|
|
switch (e) {
|
|
case "top-left":
|
|
case "left-top":
|
|
return this.toAnchorTopLeft(b, c);
|
|
case "top-center":
|
|
case "center-top":
|
|
case "top":
|
|
return this.toAnchorTopCenter(b, c);
|
|
case "top-right":
|
|
case "right-top":
|
|
return this.toAnchorTopRight(b, c);
|
|
case "left-middle":
|
|
case "middle-left":
|
|
case "left":
|
|
return this.toAnchorLeftMiddle(b,
|
|
c);
|
|
case "center-middle":
|
|
case "middle-center":
|
|
case "middle":
|
|
case "center":
|
|
return this.toAnchorCenterMiddle(b, c);
|
|
case "right-middle":
|
|
case "middle-right":
|
|
case "right":
|
|
return this.toAnchorRightMiddle(b, c);
|
|
case "bottom-left":
|
|
case "left-bottom":
|
|
return this.toAnchorBottomLeft(b, c);
|
|
case "bottom-center":
|
|
case "center-bottom":
|
|
case "bottom":
|
|
return this.toAnchorBottomCenter(b, c);
|
|
case "bottom-right":
|
|
case "right-bottom":
|
|
return this.toAnchorBottomRight(b, c);
|
|
default:
|
|
return this.toAnchorDefault(b, c)
|
|
}
|
|
},
|
|
toAnchorDefault: function(b,
|
|
c) {
|
|
return {
|
|
x: b + (this.width - this.originalWidth) / 2,
|
|
y: c + (this.height - this.originalHeight) / 2
|
|
}
|
|
},
|
|
toAnchorCenterMiddle: function(b, c) {
|
|
return {
|
|
x: b + this.halfWidth,
|
|
y: c + this.halfHeight
|
|
}
|
|
},
|
|
toAnchorLeftMiddle: function(b, c) {
|
|
return {
|
|
x: b,
|
|
y: c + this.halfHeight
|
|
}
|
|
},
|
|
toAnchorTopCenter: function(b, c) {
|
|
return {
|
|
x: b + this.halfWidth,
|
|
y: c
|
|
}
|
|
},
|
|
toAnchorRightMiddle: function(b, c) {
|
|
return {
|
|
x: b + this.width,
|
|
y: c + this.halfHeight
|
|
}
|
|
},
|
|
toAnchorBottomCenter: function(b, c) {
|
|
return {
|
|
x: b + this.halfWidth,
|
|
y: c + this.height
|
|
}
|
|
},
|
|
toAnchorTopLeft: function(b, c) {
|
|
return {
|
|
x: b,
|
|
y: c
|
|
}
|
|
},
|
|
toAnchorBottomLeft: function(b, c) {
|
|
return {
|
|
x: b,
|
|
y: c + this.height
|
|
}
|
|
},
|
|
toAnchorTopRight: function(b, c) {
|
|
return {
|
|
x: b + this.width,
|
|
y: c
|
|
}
|
|
},
|
|
toAnchorBottomRight: function(b, c) {
|
|
return {
|
|
x: b + this.width,
|
|
y: c + this.height
|
|
}
|
|
},
|
|
drawScaledImage: function(b, c, e, d, g, f, m) {
|
|
f || (f = 0);
|
|
m || (m = 0);
|
|
var l = ig.system.context;
|
|
l.save();
|
|
l.translate(c, e);
|
|
(1 != d || 1 != g) && l.scale(d, g);
|
|
b.draw(-b.width * f, -b.height * m);
|
|
l.restore()
|
|
}
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.responsive.responsive-plugin").requires("impact.system", "impact.entity", "plugins.handlers.size-handler", "plugins.responsive.responsive-utils").defines(function() {
|
|
ig.SizeHandler.inject({
|
|
resize: function() {
|
|
this.parent()
|
|
},
|
|
sizeCalcs: function() {
|
|
this.originalResolution || (this.originalResolution = new Vector2(this.desktop.actualResolution.x, this.desktop.actualResolution.y), ig.responsive.originalWidth = this.desktop.actualResolution.x, ig.responsive.originalHeight = this.desktop.actualResolution.y);
|
|
var b = window.innerWidth,
|
|
c = window.innerHeight,
|
|
e = b / c,
|
|
d = this.originalResolution.x / this.originalResolution.y,
|
|
g = 0,
|
|
f = 0;
|
|
this.windowSize = new Vector2(b, c);
|
|
e < d ? (g = this.originalResolution.x, f = g / e, ig.responsive.scaleX = 1, ig.responsive.scaleY = f / this.originalResolution.y) : (f = this.originalResolution.y, g = f * e, ig.responsive.scaleX = g / this.originalResolution.x, ig.responsive.scaleY = 1);
|
|
this.scaleRatioMultiplier = new Vector2(b / g, c / f);
|
|
this.desktop.actualResolution = new Vector2(g, f);
|
|
this.mobile.actualResolution = new Vector2(g,
|
|
f);
|
|
this.desktop.actualSize = new Vector2(b, c);
|
|
this.mobile.actualSize = new Vector2(b, c);
|
|
ig.responsive.width = g;
|
|
ig.responsive.height = f;
|
|
ig.responsive.halfWidth = g / 2;
|
|
ig.responsive.halfHeight = f / 2;
|
|
ig.responsive.fillScale = Math.max(ig.responsive.scaleX, ig.responsive.scaleY)
|
|
},
|
|
resizeLayers: function() {
|
|
ig.system.resize(ig.sizeHandler.desktop.actualResolution.x, ig.sizeHandler.desktop.actualResolution.y);
|
|
for (var b = 0; b < this.coreDivsToResize.length; b++) {
|
|
var c = ig.domHandler.getElementById(this.coreDivsToResize[b]),
|
|
e = Math.floor(ig.sizeHandler.windowSize.x /
|
|
2 - ig.sizeHandler.desktop.actualSize.x / 2),
|
|
d = Math.floor(ig.sizeHandler.windowSize.y / 2 - ig.sizeHandler.desktop.actualSize.y / 2);
|
|
0 > e && (e = 0);
|
|
0 > d && (d = 0);
|
|
ig.domHandler.resizeOffset(c, Math.floor(ig.sizeHandler.desktop.actualSize.x), Math.floor(ig.sizeHandler.desktop.actualSize.y), e, d)
|
|
}
|
|
for (var g in this.adsToResize) b = ig.domHandler.getElementById("#" + g), c = ig.domHandler.getElementById("#" + g + "-Box"), e = (window.innerWidth - this.adsToResize[g]["box-width"]) / 2 + "px", d = (window.innerHeight - this.adsToResize[g]["box-height"]) /
|
|
2 + "px", b && ig.domHandler.css(b, {
|
|
width: window.innerWidth,
|
|
height: window.innerHeight
|
|
}), c && ig.domHandler.css(c, {
|
|
left: e,
|
|
top: d
|
|
});
|
|
b = ig.domHandler.getElementById("#canvas");
|
|
c = ig.domHandler.getOffsets(b);
|
|
b = c.left;
|
|
c = c.top;
|
|
e = Math.min(ig.sizeHandler.scaleRatioMultiplier.x, ig.sizeHandler.scaleRatioMultiplier.y);
|
|
for (g in this.dynamicClickableEntityDivs) d = ig.domHandler.getElementById("#" + g), ig.domHandler.css(d, {
|
|
"float": "left",
|
|
position: "absolute",
|
|
left: Math.floor(b + this.dynamicClickableEntityDivs[g].entity_pos_x * this.scaleRatioMultiplier.x) +
|
|
"px",
|
|
top: Math.floor(c + this.dynamicClickableEntityDivs[g].entity_pos_y * this.scaleRatioMultiplier.y) + "px",
|
|
width: Math.floor(this.dynamicClickableEntityDivs[g].width * this.scaleRatioMultiplier.x) + "px",
|
|
height: Math.floor(this.dynamicClickableEntityDivs[g].height * this.scaleRatioMultiplier.y) + "px",
|
|
"z-index": 3
|
|
}), this.dynamicClickableEntityDivs[g]["font-size"] && ig.domHandler.css(d, {
|
|
"font-size": this.dynamicClickableEntityDivs[g]["font-size"] * e + "px"
|
|
});
|
|
$("#ajaxbar").width(this.windowSize.x);
|
|
$("#ajaxbar").height(this.windowSize.y)
|
|
},
|
|
reorient: function() {
|
|
ig.ua.mobile ? (this.resize(), this.resizeAds()) : this.resize();
|
|
this.resizeBabylon();
|
|
ig.game && ig.game.draw()
|
|
},
|
|
resizeBabylon: function() {
|
|
var b = window.innerWidth,
|
|
c = window.innerHeight,
|
|
e = b / c,
|
|
d = ig.responsive.originalWidth,
|
|
g = ig.responsive.originalHeight,
|
|
f = d / g,
|
|
m = Math.max(d, g);
|
|
ig.ua.mobile && (m = 640);
|
|
minSize = Math.min(d, g);
|
|
e > f ? (c > g && (c = g), b = Math.floor(window.innerWidth / window.innerHeight * c), b > m && (b = m), c = Math.floor(window.innerHeight / window.innerWidth * b)) : (b > d && (b = d), c = Math.floor(window.innerHeight /
|
|
window.innerWidth * b), c > m && (c = m), b = Math.floor(window.innerWidth / window.innerHeight * c));
|
|
d = e = 1;
|
|
window.innerWidth > m && (e = window.innerWidth / m);
|
|
window.innerHeight > m && (d = window.innerHeight / m);
|
|
wgl.system.engine.setSize(b, c);
|
|
wgl.system.engine.resize();
|
|
wgl.system.engine.setHardwareScalingLevel(Math.max(e, d));
|
|
ig.gameScene.zoomFactor = 1;
|
|
ig.ua.mobile && minSize < m && (ig.gameScene.zoomFactor = m / minSize);
|
|
ig.wglW = b;
|
|
ig.wglH = c;
|
|
ig.wglInnerW = window.innerWidth;
|
|
ig.wglInnerH = window.innerHeight
|
|
}
|
|
});
|
|
ig.Entity.inject({
|
|
init: function(b,
|
|
c, e) {
|
|
this.parent(b, c, e);
|
|
this.anchorType = "none";
|
|
this.anchoredPositionX = b;
|
|
this.anchoredPositionY = c
|
|
},
|
|
setAnchoredPosition: function(b, c, e) {
|
|
e || (e = "default");
|
|
this.anchorType = e;
|
|
this.anchoredPositionX = b;
|
|
this.anchoredPositionY = c
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
if ("" != this.anchorType && "none" != this.anchorType) {
|
|
var b = ig.responsive.toAnchor(this.anchoredPositionX, this.anchoredPositionY, this.anchorType);
|
|
this.pos.x = b.x;
|
|
this.pos.y = b.y
|
|
}
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.fullscreen").requires("impact.entity", "plugins.handlers.size-handler", "plugins.director").defines(function() {
|
|
ig.Fullscreen = {
|
|
enableFullscreenButton: !0,
|
|
_isEnabled: "notChecked",
|
|
isEnabled: function() {
|
|
"notChecked" == this._isEnabled && (this._isEnabled = document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled || document.msFullscreenEnabled ? !0 : !1);
|
|
return this._isEnabled
|
|
},
|
|
isFullscreen: function() {
|
|
return ig.Fullscreen.isEnabled() && (document.fullscreenElement ||
|
|
document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement) ? !0 : !1
|
|
},
|
|
toggleFullscreen: function() {
|
|
ig.Fullscreen.isFullscreen() ? ig.Fullscreen.exitFullscreen() : ig.Fullscreen.requestFullscreen();
|
|
ig.sizeHandler.orientationDelayHandler()
|
|
},
|
|
requestFullscreen: function() {
|
|
var b = document.documentElement;
|
|
b.requestFullscreen ? b.requestFullscreen() : b.webkitRequestFullscreen ? b.webkitRequestFullscreen() : b.mozRequestFullScreen ? b.mozRequestFullScreen() : b.msRequestFullscreen && b.msRequestFullscreen()
|
|
},
|
|
exitFullscreen: function() {
|
|
document.exitFullscreen ? document.exitFullscreen() : document.webkitExitFullscreen ? document.webkitExitFullscreen() : document.mozCancelFullScreen ? document.mozCancelFullScreen() : document.msExitFullscreen && document.msExitFullscreen()
|
|
},
|
|
divs: {}
|
|
};
|
|
ig.Director.inject({
|
|
loadLevel: function(b) {
|
|
var c = ig.Fullscreen.divs,
|
|
e;
|
|
for (e in c) c = ig.domHandler.getElementById("#" + e), ig.domHandler.hide(c);
|
|
return this.parent(b)
|
|
}
|
|
});
|
|
ig.SizeHandler.inject({
|
|
resize: function() {
|
|
this.parent();
|
|
var b = ig.Fullscreen.divs,
|
|
c;
|
|
for (c in b) {
|
|
var e = Math.min(ig.sizeHandler.scaleRatioMultiplier.x, ig.sizeHandler.scaleRatioMultiplier.y),
|
|
d = ig.domHandler.getElementById("#" + c),
|
|
g = b[c].entity_pos_x,
|
|
f = b[c].entity_pos_y,
|
|
m = b[c].width,
|
|
l = b[c].height,
|
|
j = ig.domHandler.getElementById("#canvas"),
|
|
j = ig.domHandler.getOffsets(j);
|
|
ig.domHandler.css(d, {
|
|
"float": "left",
|
|
position: "absolute",
|
|
left: Math.floor(j.left + g * e) + "px",
|
|
top: Math.floor(j.top + f * e) + "px",
|
|
width: Math.floor(m * e) + "px",
|
|
height: Math.floor(l * e) + "px",
|
|
"z-index": 3
|
|
})
|
|
}
|
|
}
|
|
});
|
|
ig.FullscreenButton = ig.Entity.extend({
|
|
enterImage: null,
|
|
exitImage: null,
|
|
isReady: !1,
|
|
zIndex: 999999,
|
|
identifier: null,
|
|
prevPos: {
|
|
x: 0,
|
|
y: 0
|
|
},
|
|
invisImagePath: "media/graphics/misc/invisible.png",
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e);
|
|
ig.Fullscreen.isEnabled() && ig.Fullscreen.enableFullscreenButton ? this.enterImage.loaded ? this.initSize() : this.enterImage.loadCallback = function() {
|
|
this.initSize()
|
|
}.bind(this) : this.kill()
|
|
},
|
|
kill: function() {
|
|
this.parent()
|
|
},
|
|
destroy: function() {
|
|
this.parent()
|
|
},
|
|
initSize: function() {
|
|
this.size.x = this.enterImage.width;
|
|
this.size.y = this.enterImage.height;
|
|
this.createClickableLayer();
|
|
this.isReady = !0
|
|
},
|
|
createClickableLayer: function() {
|
|
this.identifier = "fullscreen-button-layer";
|
|
var b = ig.domHandler.getElementById("#" + this.identifier);
|
|
b ? (ig.domHandler.show(b), ig.domHandler.attr(b, "onclick", "ig.Fullscreen.toggleFullscreen()")) : this.createClickableOutboundLayer()
|
|
},
|
|
update: function(b, c) {
|
|
this.parent();
|
|
b = this.pos.x;
|
|
c = this.pos.y;
|
|
this.isReady && !(this.prevPos.x == b && this.prevPos.y == c) && (this.prevPos.x = b, this.prevPos.y = c, ig.Fullscreen.divs[this.identifier] = {}, ig.Fullscreen.divs[this.identifier].width =
|
|
this.size.x, ig.Fullscreen.divs[this.identifier].height = this.size.y, ig.Fullscreen.divs[this.identifier].entity_pos_x = this.pos.x, ig.Fullscreen.divs[this.identifier].entity_pos_y = this.pos.y, ig.sizeHandler.resize())
|
|
},
|
|
draw: function() {
|
|
this.isReady && (ig.Fullscreen.isFullscreen() ? this.exitImage.draw(this.pos.x, this.pos.y) : this.enterImage.draw(this.pos.x, this.pos.y))
|
|
},
|
|
createClickableOutboundLayer: function() {
|
|
var b = this.identifier,
|
|
c = this.invisImagePath,
|
|
e = ig.domHandler.create("div");
|
|
ig.domHandler.attr(e, "id",
|
|
b);
|
|
ig.domHandler.attr(e, "onclick", "ig.Fullscreen.toggleFullscreen()");
|
|
var d = ig.domHandler.create("a"),
|
|
g = ig.domHandler.create("img");
|
|
ig.domHandler.css(g, {
|
|
width: "100%",
|
|
height: "100%"
|
|
});
|
|
ig.domHandler.attr(g, "src", c);
|
|
c = Math.min(ig.sizeHandler.scaleRatioMultiplier.x, ig.sizeHandler.scaleRatioMultiplier.y);
|
|
if (ig.ua.mobile) {
|
|
var f = ig.domHandler.getElementById("#canvas"),
|
|
m = ig.domHandler.getOffsets(f),
|
|
f = m.left,
|
|
m = m.top;
|
|
if (ig.sizeHandler.disableStretchToFitOnMobileFlag) var f = Math.floor(f + this.pos.x * ig.sizeHandler.scaleRatioMultiplier.x) +
|
|
"px",
|
|
m = Math.floor(m + this.pos.y * ig.sizeHandler.scaleRatioMultiplier.y) + "px",
|
|
l = Math.floor(this.size.x * ig.sizeHandler.scaleRatioMultiplier.x) + "px",
|
|
c = Math.floor(this.size.y * ig.sizeHandler.scaleRatioMultiplier.y) + "px";
|
|
else f = Math.floor(this.pos.x * ig.sizeHandler.sizeRatio.x) + "px", m = Math.floor(this.pos.y * ig.sizeHandler.sizeRatio.y) + "px", l = Math.floor(this.size.x * ig.sizeHandler.sizeRatio.x) + "px", c = Math.floor(this.size.y * ig.sizeHandler.sizeRatio.y) + "px"
|
|
} else f = ig.domHandler.getElementById("#canvas"), m = ig.domHandler.getOffsets(f),
|
|
f = m.left, m = m.top, ig.sizeHandler.enableStretchToFitOnDesktopFlag ? (f = Math.floor(f + this.pos.x * ig.sizeHandler.sizeRatio.x) + "px", m = Math.floor(m + this.pos.y * ig.sizeHandler.sizeRatio.y) + "px", l = Math.floor(this.size.x * ig.sizeHandler.sizeRatio.x) + "px", c = Math.floor(this.size.y * ig.sizeHandler.sizeRatio.y) + "px") : (f = Math.floor(f + this.pos.x * c) + "px", m = Math.floor(m + this.pos.y * c) + "px", l = Math.floor(this.size.x * c) + "px", c = Math.floor(this.size.y * c) + "px");
|
|
ig.domHandler.css(e, {
|
|
"float": "left",
|
|
position: "absolute",
|
|
left: f,
|
|
top: m,
|
|
width: l,
|
|
height: c,
|
|
"z-index": 3
|
|
});
|
|
ig.domHandler.addEvent(e, "mousemove", ig.input.mousemove.bind(ig.input), !1);
|
|
ig.domHandler.appendChild(d, g);
|
|
ig.domHandler.appendChild(e, d);
|
|
ig.domHandler.appendToBody(e);
|
|
ig.Fullscreen.divs[b] = {};
|
|
ig.Fullscreen.divs[b].width = this.size.x;
|
|
ig.Fullscreen.divs[b].height = this.size.y;
|
|
ig.Fullscreen.divs[b].entity_pos_x = this.pos.x;
|
|
ig.Fullscreen.divs[b].entity_pos_y = this.pos.y
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.dailyreward.dailyreward-signal").requires("impact.impact").defines(function() {
|
|
ig.DailyrewardSignal = ig.Class.extend({
|
|
signalListeners: null,
|
|
id: 0,
|
|
init: function() {
|
|
this.id = ++ig.DailyrewardSignal._lastId;
|
|
this.signalListeners = []
|
|
},
|
|
addOnce: function(b, c) {
|
|
this.signalListeners.push({
|
|
signalListener: b,
|
|
signalContext: c,
|
|
isOnce: !0
|
|
})
|
|
},
|
|
add: function(b, c) {
|
|
this.signalListeners.push({
|
|
signalListener: b,
|
|
signalContext: c,
|
|
isOnce: !1
|
|
})
|
|
},
|
|
remove: function(b) {
|
|
for (var c = 0; c < this.signalListeners.length;) this.signalListeners[c].signalListener ===
|
|
b ? this.signalListeners.splice(c, 1) : c++
|
|
},
|
|
dispatch: function() {
|
|
for (var b = 0; b < this.signalListeners.length;) {
|
|
var c = this.signalListeners[b];
|
|
c.signalListener.apply(c.signalContext, arguments);
|
|
c.isOnce ? this.signalListeners.splice(b, 1) : b++
|
|
}
|
|
}
|
|
});
|
|
ig.DailyrewardSignal._lastId = 0
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.dailyreward.dailyreward-object").requires("impact.entity", "plugins.dailyreward.dailyreward-signal").defines(function() {
|
|
EntityDailyrewardObject = ig.Entity.extend({
|
|
gravityFactor: 0,
|
|
idleSheetInfo: null,
|
|
singleFrameImage: null,
|
|
visible: !0,
|
|
alpha: 1,
|
|
zIndex: 999990,
|
|
drawAsRect: !1,
|
|
drawAsOutline: !1,
|
|
outlineWidth: 1,
|
|
rectColor: "#FFFFFF",
|
|
entryDelay: 0,
|
|
entryDuration: 0.25,
|
|
entryType: null,
|
|
exitDelay: 0,
|
|
exitDuration: 0.25,
|
|
exitType: null,
|
|
killOnExit: !0,
|
|
scaleX: 1,
|
|
scaleY: 1,
|
|
angle: 0,
|
|
anchorX: 0,
|
|
anchorY: 0,
|
|
forceDraw: !1,
|
|
width: 32,
|
|
height: 32,
|
|
onInputDown: null,
|
|
onInputUp: null,
|
|
onClicked: null,
|
|
hasTouchInside: !1,
|
|
inputEnabled: !1,
|
|
isClicking: !1,
|
|
boundLeft: 0,
|
|
boundRight: 0,
|
|
boundTop: 0,
|
|
boundBottom: 0,
|
|
isFinishEntering: !1,
|
|
timedLife: -999,
|
|
size: {
|
|
x: 32,
|
|
y: 32
|
|
},
|
|
init: function(b, c, e) {
|
|
this.onInputDown = new ig.DailyrewardSignal;
|
|
this.onInputUp = new ig.DailyrewardSignal;
|
|
this.onClicked = new ig.DailyrewardSignal;
|
|
e.singleFrameImage ? this.singleFrameImage = e.singleFrameImage : e.image && (this.singleFrameImage = e.image);
|
|
null != this.singleFrameImage ? (this.idleSheetInfo = {
|
|
sheetImage: this.singleFrameImage,
|
|
sheetX: 1,
|
|
sheetY: 1
|
|
}, this.setSpriteSheet("idle"), this.setSize("idle"), this.addAnimation("idle", "idleSheet", 1, [0], !1, !0)) : null != this.idleSheetInfo && (this.setSpriteSheet("idle"), this.setSize("idle"));
|
|
this.parent(b, c, e);
|
|
this.enter();
|
|
!1 === e.visible && (this.visible = !1);
|
|
this.anchorType = e.anchorType ? e.anchorType : "default"
|
|
},
|
|
onFinishEntering: function() {},
|
|
enter: function() {
|
|
this.visible = !0;
|
|
null != this.entryType ? (this[this.entryType](), this.delayedCall(this.entryDelay + this.entryDuration, function() {
|
|
this.onFinishEntering();
|
|
this.isFinishEntering = !0
|
|
}.bind(this))) : (this.isFinishEntering = !0, this.onFinishEntering())
|
|
},
|
|
exit: function() {
|
|
if (null != this.exitType) this[this.exitType]();
|
|
else this.alpha0();
|
|
this.delayedCall(this.exitDuration + this.exitDelay, function() {
|
|
this.checkKill()
|
|
}.bind(this))
|
|
},
|
|
setSpriteSheet: function(b) {
|
|
this[b + "Sheet"] = new ig.AnimationSheet(this[b + "SheetInfo"].sheetImage.path, this[b + "SheetInfo"].sheetImage.width / this[b + "SheetInfo"].sheetX, this[b + "SheetInfo"].sheetImage.height / this[b + "SheetInfo"].sheetY)
|
|
},
|
|
setSize: function(b) {
|
|
this.width =
|
|
this[b + "SheetInfo"].sheetImage.width / this[b + "SheetInfo"].sheetX;
|
|
this.height = this[b + "SheetInfo"].sheetImage.height / this[b + "SheetInfo"].sheetY
|
|
},
|
|
addAnimation: function(b, c, e, d, g, f) {
|
|
this[b] = new ig.Animation(this[c], e, d, !g);
|
|
!0 == f && (this.currentAnim = this[b])
|
|
},
|
|
makeFramesArray: function(b, c, e) {
|
|
for (var d = [], g = b; g <= c; g++) d.push(g);
|
|
if (e)
|
|
for (g = c; g >= b; g--) d.push(g);
|
|
return d
|
|
},
|
|
draw: function() {
|
|
if (this.visible && (this.forceDraw || this.currentAnim || this.drawAsRect || this.drawAsOutline)) {
|
|
var b = ig.system.context;
|
|
b.save();
|
|
b.translate(ig.system.getDrawPos(this.pos.x.round() - this.offset.x - ig.game.screen.x), ig.system.getDrawPos(this.pos.y.round() - this.offset.y - ig.game.screen.y));
|
|
(1 != this.scaleX || 1 != this.scaleY) && b.scale(this.scaleX, this.scaleY);
|
|
this.drawObject(-this.anchorX * this.width, -this.anchorY * this.height);
|
|
b.restore()
|
|
}
|
|
},
|
|
drawObject: function(b, c) {
|
|
var e = ig.system.context,
|
|
d = this.hexToRgb(this.rectColor);
|
|
this.drawAsRect && (e.fillStyle = 1 > this.alpha ? "rgba(" + d.r + "," + d.g + "," + d.b + "," + this.alpha + ")" : d.hex, e.fillRect(b, c, this.width,
|
|
this.height));
|
|
this.drawAsOutline ? (e.strokeStyle = 1 > this.alpha ? "rgba(" + d.r + "," + d.g + "," + d.b + "," + this.alpha + ")" : d.hex, e.strokeRect(b, c, this.width, this.height)) : null != this.currentAnim && (this.currentAnim.alpha = this.alpha, this.currentAnim.draw(b, c))
|
|
},
|
|
hexToRgb: function(b) {
|
|
ig.hexToRgbTable || (ig.hexToRgbTable = {});
|
|
if (ig.hexToRgbTable[b]) return ig.hexToRgbTable[b];
|
|
var c = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(b);
|
|
if (c) return ig.hexToRgbTable[b] = {
|
|
r: parseInt(c[1], 16),
|
|
g: parseInt(c[2], 16),
|
|
b: parseInt(c[3],
|
|
16),
|
|
hex: b
|
|
}, ig.hexToRgbTable[b];
|
|
console.log("cannot convert to rgb from hex :", b);
|
|
return null
|
|
},
|
|
update: function() {
|
|
ig.game.entities && this.parent();
|
|
if (this.inputEnabled && this.isFinishEntering && this.visible) {
|
|
var b = !1;
|
|
this.hasTouchInside = !1;
|
|
for (var c = 0; c < ig.multitouchInput.touches.length; c++) {
|
|
var b = !0,
|
|
e = ig.multitouchInput.touches[c];
|
|
this.processInput(e.x, e.y)
|
|
}!b && ig.input.state("click") && (b = !0, c = ig.game.io.mouse.getPos(), this.processInput(c.x, c.y));
|
|
b ? this.hasTouchInside || (this.isClicking = !1) : (this.isClicking &&
|
|
(this.onInputUp.dispatch(this), this.onClicked.dispatch(this)), this.isClicking = !1)
|
|
} - 999 != this.timedLife && (this.timedLife -= ig.system.tick, 0 >= this.timedLife && (this.timedLife = -999, this.exit()))
|
|
},
|
|
processInput: function(b, c) {
|
|
this.isInsideBounds(b, c) && (this.hasTouchInside = !0, this.isClicking || (this.isClicking = !0, this.onInputDown.dispatch(this)))
|
|
},
|
|
isInsideBounds: function(b, c) {
|
|
var e = this.scaleX * this.width,
|
|
d = this.scaleY * this.height;
|
|
this.boundLeft = this.pos.x - e * this.anchorX;
|
|
this.boundTop = this.pos.y - d * this.anchorY;
|
|
this.boundRight = this.boundLeft + e;
|
|
this.boundBottom = this.boundTop + d;
|
|
this.boundLeft > this.boundRight && (e = this.boundLeft, this.boundLeft = this.boundRight, this.boundRight = e);
|
|
this.boundTop > this.boundBottom && (e = this.boundTop, this.boundTop = this.boundBottom, this.boundBottom = e);
|
|
return b < this.boundLeft || c < this.boundTop || b > this.boundRight || c > this.boundBottom ? !1 : !0
|
|
},
|
|
fadeDropBackIn: function() {
|
|
var b = this.alpha,
|
|
c = this.anchorY;
|
|
this.alpha = 0;
|
|
this.anchorY += 0.5;
|
|
this.tween({
|
|
alpha: b
|
|
}, 0.75 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
anchorY: c
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Back.EaseOut
|
|
}).start()
|
|
},
|
|
fadeBounceRightIn: function() {
|
|
this.alpha = 0;
|
|
var b = this.pos.x;
|
|
this.pos.x -= 100;
|
|
this.tween({
|
|
alpha: 1
|
|
}, 0.75 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
x: b
|
|
}
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Back.EaseOut
|
|
}).start()
|
|
},
|
|
fadeBounceRightOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
},
|
|
0.75 * this.exitDuration, {
|
|
delay: this.exitDelay + 0.25 * this.exitDuration,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
x: this.pos.x - 100
|
|
}
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Back.EaseIn
|
|
}).start()
|
|
},
|
|
fadeBounceLeftIn: function() {
|
|
this.alpha = 0;
|
|
var b = this.pos.x;
|
|
this.pos.x += 100;
|
|
this.tween({
|
|
alpha: 1
|
|
}, 0.75 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
x: b
|
|
}
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Back.EaseOut
|
|
}).start()
|
|
},
|
|
fadeBounceLeftOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
}, 0.75 * this.exitDuration, {
|
|
delay: this.exitDelay + 0.25 * this.exitDuration,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
x: this.pos.x + 100
|
|
}
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Back.EaseIn
|
|
}).start()
|
|
},
|
|
fadeJumpIn: function() {
|
|
this.alpha = 0;
|
|
var b = this.pos.y;
|
|
this.pos.y += 100;
|
|
this.tween({
|
|
alpha: 1
|
|
}, 0.75 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
y: b
|
|
}
|
|
},
|
|
this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Back.EaseOut
|
|
}).start()
|
|
},
|
|
fadeJumpOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
}, 0.75 * this.exitDuration, {
|
|
delay: this.exitDelay + 0.25 * this.exitDuration,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
y: this.pos.y + 100
|
|
}
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Back.EaseIn
|
|
}).start()
|
|
},
|
|
fadeIn: function() {
|
|
var b = this.alpha;
|
|
this.alpha = 0;
|
|
this.tween({
|
|
alpha: b
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start()
|
|
},
|
|
fadeInLinear: function() {
|
|
var b = this.alpha;
|
|
this.alpha = 0;
|
|
this.tween({
|
|
alpha: b
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Linear.EaseNone
|
|
}).start()
|
|
},
|
|
fadeOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start()
|
|
},
|
|
fadeOutLinear: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Linear.EaseNone
|
|
}).start()
|
|
},
|
|
expandIn: function() {
|
|
this.alpha = 0;
|
|
this.tween({
|
|
alpha: 1
|
|
}, this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start()
|
|
},
|
|
expandOut: function() {
|
|
this.tween({
|
|
alpha: 0
|
|
}, this.exitDuration, {
|
|
delay: this.exitDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
}).start()
|
|
},
|
|
dropBoinkIn: function() {
|
|
this.alpha = 0;
|
|
var b = this.pos.y,
|
|
c = 1.2 * this.scaleX,
|
|
e = 0.8 * this.scaleY,
|
|
d = this.scaleX,
|
|
g = this.scaleY;
|
|
this.pos.y -= 0 < this.height ? 3 * this.height : 3 * this.size.y;
|
|
c = this.tween({
|
|
scaleX: c,
|
|
scaleY: e
|
|
}, 0.2 * this.entryDuration, {
|
|
delay: this.entryDelay + 0.6 * this.entryDuration,
|
|
easing: ig.Tween.Easing.Quadratic.EaseOut
|
|
});
|
|
d = this.tween({
|
|
scaleX: d,
|
|
scaleY: g
|
|
}, 0.2 * this.entryDuration, {
|
|
easing: ig.Tween.Easing.Quadratic.EaseIn
|
|
});
|
|
c.chain(d);
|
|
c.start();
|
|
this.tween({
|
|
alpha: 1
|
|
}, 0.6 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quadratic.EaseIn
|
|
}).start();
|
|
this.tween({
|
|
pos: {
|
|
y: b
|
|
}
|
|
}, 0.6 * this.entryDuration, {
|
|
delay: this.entryDelay,
|
|
easing: ig.Tween.Easing.Quartic.EaseIn
|
|
}).start()
|
|
},
|
|
alpha0: function() {
|
|
this.alpha = 0
|
|
},
|
|
alpha1: function() {
|
|
this.alpha = 1
|
|
},
|
|
checkKill: function() {
|
|
this.killOnExit && this.kill()
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.dailyreward.dailyreward-text").requires("plugins.dailyreward.dailyreward-object").defines(function() {
|
|
EntityDailyrewardText = EntityDailyrewardObject.extend({
|
|
textString: "",
|
|
textFont: "48px Arial",
|
|
textRgb: "#FFFFFF",
|
|
textAlign: "start",
|
|
textOffsetX: 0,
|
|
textOffsetY: 0,
|
|
zIndex: 999999,
|
|
forceDraw: !0,
|
|
textLineSpacing: 1,
|
|
_previousTextString: "",
|
|
_multiline: !1,
|
|
_lines: [],
|
|
_lineSpacing: 0,
|
|
init: function(b, c, e) {
|
|
this.parent(b, c, e)
|
|
},
|
|
drawObject: function(b, c) {
|
|
if (this.visible && 0 < this.textString.length) {
|
|
this._previousTextString !=
|
|
this.textString && (this._previousTextString = this.textString, this._lines = this.textString.split(/\r?\n/), 1 < this._lines.length ? (this._multiline = !0, this._lineSpacing = parseInt(this.textFont.split("px")[0].split(" ").pop()) * this.textLineSpacing) : this._multiline = !1);
|
|
var e = ig.system.context;
|
|
e.save();
|
|
e.font = this.textFont;
|
|
e.textAlign = this.textAlign;
|
|
var d = this.hexToRgb(this.textRgb);
|
|
e.fillStyle = 1 > this.alpha ? "rgba(" + d.r + "," + d.g + "," + d.b + "," + this.alpha + ")" : d.hex;
|
|
var d = b + this.textOffsetX,
|
|
g = c + this.textOffsetY;
|
|
if (this._multiline) {
|
|
var f =
|
|
g;
|
|
"center" == this.textVAlign && (f = g - (this._lines.length - 1) * this._lineSpacing / 2);
|
|
for (g = 0; g < this._lines.length; g++) e.fillText(this._lines[g], d, f + g * this._lineSpacing)
|
|
} else this._lineSpacing && (g += this._lineSpacing / 2), e.fillText(this.textString, d, g);
|
|
e.restore()
|
|
}
|
|
},
|
|
measureTextWidth: function() {
|
|
var b = ig.system.context;
|
|
b.save();
|
|
b.font = this.textFont;
|
|
b.textAlign = "left";
|
|
var c = b.measureText(this.textString);
|
|
b.restore();
|
|
return c.width
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.dailyreward.dailyreward-button").requires("plugins.dailyreward.dailyreward-object", "plugins.dailyreward.dailyreward-text").defines(function() {
|
|
EntityDailyrewardButton = EntityDailyrewardObject.extend({
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
checkDelay: 0,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
popup: null,
|
|
onPopupOpen: null,
|
|
onPopupClosed: null,
|
|
onRewardCollected: null,
|
|
hasReward: !1,
|
|
init: function(b, c, e) {
|
|
e.image = ig.dailyreward.rewardButtonImage;
|
|
this.parent(b, c, e);
|
|
this.onClicked.add(this.onButtonClicked, this);
|
|
this.onPopupOpen = new ig.DailyrewardSignal;
|
|
this.onPopupClosed = new ig.DailyrewardSignal;
|
|
this.onRewardCollected = new ig.DailyrewardSignal
|
|
},
|
|
onButtonClicked: function() {
|
|
this.popup || (this.popup = ig.game.spawnEntity(EntityDailyrewardPopup, 0, 0), this.popup.onClosed.add(this.onPopupClosedCallback, this), this.popup.onRewardCollected.add(this.onPopupRewardCollectedCallback, this), this.onPopupOpen.dispatch(), ig.dailyreward.playClickSound())
|
|
},
|
|
onPopupRewardCollectedCallback: function() {
|
|
this.onRewardCollected.dispatch()
|
|
},
|
|
onPopupClosedCallback: function() {
|
|
this.onPopupClosed.dispatch();
|
|
this.popup = null
|
|
},
|
|
drawObject: function(b, c) {
|
|
this.parent(b, c);
|
|
if (this.hasReward) {
|
|
var e = ig.system.context;
|
|
e.save();
|
|
e.globalAlpha = this.alpha;
|
|
var d = 1;
|
|
0.5 > this.checkDelay && (d = 0.25 > this.checkDelay ? 1 + this.checkDelay : 1.25 - (this.checkDelay - 0.25));
|
|
e.beginPath();
|
|
e.fillStyle = ig.dailyreward.notificationBgColor;
|
|
e.arc(ig.dailyreward.notificationOffsetX, ig.dailyreward.notificationOffsetY, ig.dailyreward.notificationRadius * d, 0, 2 * Math.PI);
|
|
e.fill();
|
|
e.closePath();
|
|
var d = parseInt(ig.dailyreward.notificationTextFont.split(" ")[0].split("px")[0]) * d,
|
|
g = d + "px" + ig.dailyreward.notificationTextFont.split("px")[1];
|
|
e.textAlign = "center";
|
|
e.fillStyle = ig.dailyreward.notificationTextColor;
|
|
e.font = g;
|
|
e.fillText("!", ig.dailyreward.notificationOffsetX + ig.dailyreward.notificationTextOffsetX, ig.dailyreward.notificationOffsetY + ig.dailyreward.notificationTextOffsetY + d / 2);
|
|
e.globalAlpha = 1;
|
|
e.restore()
|
|
}
|
|
},
|
|
onFinishEntering: function() {
|
|
this.inputEnabled = !0
|
|
},
|
|
tapDownScale: 0.9,
|
|
tapReleaseScale: 1,
|
|
update: function() {
|
|
this.parent();
|
|
this.hasTouchInside ? (this.scaleX += (this.tapDownScale - this.scaleX) / 3, this.scaleY += (this.tapDownScale - this.scaleY) / 3) : (this.scaleX += (this.tapReleaseScale - this.scaleX) / 3, this.scaleY += (this.tapReleaseScale - this.scaleY) / 3);
|
|
this.checkDelay -= ig.system.tick;
|
|
0 > this.checkDelay && (this.checkDelay = 1, this.hasReward = ig.dailyreward.hasReward() ? !0 : !1)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.dailyreward.dailyreward-settings").defines(function() {
|
|
ig.applyDailyrewardSettings = function() {
|
|
var b = ig.dailyreward;
|
|
b.collectedRewards = [];
|
|
b.gameWidth = 540;
|
|
b.gameHeight = 960;
|
|
b.overlayAlpha = 0.3;
|
|
b.saveDataName = "mjs-drift-boss-dailyreward";
|
|
b.continueButtonText = _STRINGS.Game.Continue;
|
|
b.titleText = _STRINGS.Game.DailyRewards;
|
|
b.rewardCollectedTitleText = _STRINGS.Game.RewardCollected;
|
|
b.rewardBoxDayTextPrefix = _STRINGS.Game.Day;
|
|
b.bottomText = _STRINGS.Game.DailyRewardBottomText;
|
|
b.rewardCollectButtonText =
|
|
_STRINGS.Game.Collect;
|
|
b.randomGiftTitle = _STRINGS.Game.RandomGiftTitle;
|
|
b.spinButtonText = _STRINGS.Game.Spin;
|
|
b.spinCollectButtonText = _STRINGS.Game.Collect;
|
|
b.rewardTexts = "50 3 3 3 100 5 5 5".split(" ");
|
|
b.continueButtonImage = new ig.Image("media/graphics/sprites/button-start-drift.png");
|
|
b.rewardCollectedIcon = new ig.Image("media/graphics/sprites/icon-check.png");
|
|
b.closeButtonImage = new ig.Image("media/graphics/sprites/button-exit.png");
|
|
b.rewardButtonImage = new ig.Image("media/graphics/sprites/button-reward.png");
|
|
b.rewardPopupBgImage = new ig.Image("media/graphics/sprites/dailyreward-popup.png");
|
|
b.rewardBoxImage = new ig.Image("media/graphics/sprites/reward-box.png");
|
|
b.rewardCollectButtonImage = new ig.Image("media/graphics/sprites/button-reward-collect.png");
|
|
b.giftBoxImage = new ig.Image("media/graphics/sprites/reward-box.png");
|
|
b.rewardIcons = [new ig.Image("media/graphics/sprites/coin.png"), new ig.Image("media/graphics/sprites/icon-booster-1.png"), new ig.Image("media/graphics/sprites/icon-booster-2.png"), new ig.Image("media/graphics/sprites/icon-booster-3.png"),
|
|
new ig.Image("media/graphics/sprites/coin.png"), new ig.Image("media/graphics/sprites/icon-booster-1.png"), new ig.Image("media/graphics/sprites/icon-booster-2.png"), new ig.Image("media/graphics/sprites/icon-booster-3.png")
|
|
];
|
|
b.randomRewardImage = new ig.Image("media/graphics/sprites/reward-box.png");
|
|
b.playClickSound = function() {
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.click)
|
|
};
|
|
b.playRewardCollectedSound = function() {
|
|
ig.soundHandler.sfxPlayer.play(ig.soundHandler.sfxPlayer.soundList.reward)
|
|
};
|
|
b.notificationBgColor = "#dd3333";
|
|
b.notificationTextFont = "23px mainfont";
|
|
b.notificationTextColor = "#ffffff";
|
|
b.notificationRadius = 15;
|
|
b.notificationOffsetX = 55;
|
|
b.notificationOffsetY = -50;
|
|
b.notificationTextOffsetX = 0;
|
|
b.notificationTextOffsetY = -5;
|
|
b.rewardBoxCount = 5;
|
|
b.rewardBoxSpacing = 5;
|
|
b.rewardBoxOffsetY = 0;
|
|
b.rewardBoxIconOffsetY = -12;
|
|
b.titleOffsetY = -130;
|
|
b.titleFont = "46px mainfont";
|
|
b.titleColor = "#ffffff";
|
|
b.bodyTextFont = "30px mainfont";
|
|
b.bodyTextColor = "#ffffff";
|
|
b.bottomTextOffsetY = 160;
|
|
b.bottomTextFont = "30px mainfont";
|
|
b.bottomTextColor = "#ffffff";
|
|
b.closeButtonOffsetX = 245;
|
|
b.closeButtonOffsetY = -200;
|
|
b.rewardBoxDayTextFont = "20px mainfont";
|
|
b.rewardBoxDayTextColor = "#ffffff";
|
|
b.rewardBoxDayTextOffsetY = -60;
|
|
b.rewardTextFont = "20px mainfont";
|
|
b.rewardTextColor = "#ffffff";
|
|
b.rewardTextOffsetY = 35;
|
|
b.rewardCollectButtonTextFont = "18px mainfont";
|
|
b.rewardCollectButtonTextColor = "#ffffff";
|
|
b.rewardCollectButtonOffsetY = 57;
|
|
b.rewardCollectButtonTextOffsetY = -2;
|
|
b.rewardCollectedTitleOffsetY = -125;
|
|
b.rewardCollectedTitleFont = "46px mainfont";
|
|
b.rewardCollectedTitleColor =
|
|
"#ffffff";
|
|
b.rewardCollectedIconScale = 1.5;
|
|
b.rewardCollectedTextOffsetY = 70;
|
|
b.rewardCollectedTextFont = "28px mainfont";
|
|
b.rewardCollectedTextColor = "#ffffff";
|
|
b.continueButtonTextFont = "32px mainfont";
|
|
b.continueButtonTextColor = "#ffffff";
|
|
b.continueButtonOffsetY = 140;
|
|
b.continueButtonTextOffsetY = -7;
|
|
b.spinButtonTextFont = "32px mainfont";
|
|
b.spinButtonTextColor = "#ffffff";
|
|
b.spinButtonOffsetY = 140;
|
|
b.spinButtonTextOffsetY = -7;
|
|
b.spinWinnerScale = 2;
|
|
b.spinBoxIconOffsetY = -35;
|
|
b.spinBoxTextOffsetY = 30;
|
|
b.spinBoxTextFont = "32px mainfont";
|
|
b.spinBoxTextColor = "#ffffff";
|
|
b.spinBoxSpacing = 5
|
|
}
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.dailyreward.dailyreward-gift").requires("plugins.dailyreward.dailyreward-object", "plugins.dailyreward.dailyreward-text", "plugins.dailyreward.dailyreward-signal").defines(function() {
|
|
EntityDailyrewardGift = EntityDailyrewardObject.extend({
|
|
zIndex: 999999,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
giftIndex: 0,
|
|
giftOffset: 0,
|
|
centerX: 0,
|
|
maxSpeed: 0,
|
|
isSpinning: !1,
|
|
targetOffsetIndex: 30,
|
|
onSpinCompleted: null,
|
|
isSpinComplete: !1,
|
|
isWinner: !1,
|
|
forceAlpha: 1,
|
|
targetMaxSpeed: 15,
|
|
isExiting: !1,
|
|
hasPlaySound: !1,
|
|
init: function(b, c,
|
|
e) {
|
|
e.image = ig.dailyreward.giftBoxImage;
|
|
e.entryType = "fadeDropBackIn";
|
|
e.exitType = "fadeOut";
|
|
e.entryDuration = 0.5;
|
|
this.parent(b, c, e);
|
|
this.centerX = b;
|
|
this.onSpinCompleted = new ig.DailyrewardSignal
|
|
},
|
|
exit: function() {
|
|
this.isExiting = !0;
|
|
this.parent()
|
|
},
|
|
drawObject: function(b, c) {
|
|
var e = ig.system.context;
|
|
null != this.currentAnim && (this.currentAnim.alpha = this.alpha * this.forceAlpha, this.currentAnim.draw(b, c));
|
|
this.isWinner ? this.globalAlpha = 1 : e.globalAlpha = this.forceAlpha * this.alpha;
|
|
this.isExiting && (e.globalAlpha = 0);
|
|
var d =
|
|
ig.dailyreward.rewardIcons[this.giftIndex],
|
|
g = b + this.width / 2,
|
|
f = c + this.height / 2;
|
|
d.draw(g - d.width / 2, f - d.height / 2 + ig.dailyreward.spinBoxIconOffsetY);
|
|
e.font = ig.dailyreward.spinBoxTextFont;
|
|
e.fillStyle = ig.dailyreward.spinBoxTextColor;
|
|
e.textAlign = "center";
|
|
e.fillText(ig.dailyreward.rewardTexts[this.giftIndex], g, f + ig.dailyreward.spinBoxTextOffsetY);
|
|
e.globalAlpha = 1
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
var b = this.width + ig.dailyreward.spinBoxSpacing;
|
|
if (this.isSpinning) {
|
|
var c = b * this.targetOffsetIndex,
|
|
e = (c - this.giftOffset) /
|
|
20;
|
|
this.maxSpeed += (this.targetMaxSpeed - this.maxSpeed) / 30;
|
|
e > this.maxSpeed && (e = this.maxSpeed);
|
|
this.giftOffset += e;
|
|
2 > Math.abs(this.giftOffset - c) && (this.giftOffset = c, this.isSpinning = !1, c = this.updateX(b), 10 > Math.abs(c - this.centerX) && (this.onSpinCompleted.dispatch(this.giftIndex), this.isWinner = !0), this.isSpinComplete = !0)
|
|
}
|
|
this.updateAlpha(this.updateX(b), b);
|
|
this.isSpinComplete && (b = ig.system.tick, 0 < this.forceAlpha && (this.forceAlpha -= 2 * b), 0 > this.forceAlpha && (this.forceAlpha = 0), this.isWinner && this.scaleX < ig.dailyreward.spinWinnerScale &&
|
|
(this.scaleY = this.scaleX += 2 * b))
|
|
},
|
|
updateX: function(b) {
|
|
for (var c = this.giftOffset + this.centerX + this.giftIndex * b, e = b * ig.dailyreward.rewardTexts.length; c > e - b;) c -= e;
|
|
ig.responsive ? this.anchoredPositionX = c : this.pos.x = c;
|
|
return c
|
|
},
|
|
updateAlpha: function(b, c) {
|
|
var e = Math.abs(0 - (b - this.centerX));
|
|
e > 2 * c ? (this.alpha = 0, this.hasPlaySound = !1) : (this.alpha = 1.5 * (1 - e / (2 * c)), 1 < this.alpha && (this.alpha = 1));
|
|
this.isSpinning && 0.9 < this.alpha && !this.hasPlaySound && (this.hasPlaySound = !0, ig.dailyreward.playClickSound())
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.dailyreward.dailyreward-random-gift-popup").requires("plugins.dailyreward.dailyreward-object", "plugins.dailyreward.dailyreward-text", "plugins.dailyreward.dailyreward-signal", "plugins.dailyreward.dailyreward-gift").defines(function() {
|
|
EntityDailyrewardRandomGiftPopup = EntityDailyrewardObject.extend({
|
|
zIndex: 999995,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
onClosed: null,
|
|
onRewardCollected: null,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
items: [],
|
|
gifts: [],
|
|
init: function(b, c, e) {
|
|
e.image = ig.dailyreward.rewardPopupBgImage;
|
|
e.entryType =
|
|
"fadeDropBackIn";
|
|
e.entryDuration = 0.5;
|
|
this.parent(ig.dailyreward.gameWidth / 2, ig.dailyreward.gameHeight / 2, e);
|
|
this.onClosed = new ig.DailyrewardSignal;
|
|
this.onRewardCollected = new ig.DailyrewardSignal;
|
|
b = ig.game.spawnEntity(EntityDailyrewardText, this.pos.x, this.pos.y + ig.dailyreward.titleOffsetY, {
|
|
textString: ig.dailyreward.randomGiftTitle,
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.titleColor,
|
|
textFont: ig.dailyreward.titleFont,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut",
|
|
entryDelay: 0.3
|
|
});
|
|
c =
|
|
ig.game.spawnEntity(EntityDailyrewardObject, this.pos.x, this.pos.y + ig.dailyreward.continueButtonOffsetY, {
|
|
image: ig.dailyreward.continueButtonImage,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
zIndex: 999999,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut",
|
|
entryDelay: 0.3
|
|
});
|
|
e = parseInt(ig.dailyreward.spinButtonTextFont.split(" ")[0].split("px")[0]);
|
|
e = ig.game.spawnEntity(EntityDailyrewardText, b.pos.x, c.pos.y + e / 2 + ig.dailyreward.spinButtonTextOffsetY, {
|
|
textString: ig.dailyreward.spinButtonText,
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.spinButtonTextColor,
|
|
textFont: ig.dailyreward.spinButtonTextFont,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut",
|
|
entryDelay: 0.3
|
|
});
|
|
c.inputEnabled = !0;
|
|
c.onClicked.addOnce(this.onSpinClicked, this);
|
|
this.currentButton = c;
|
|
this.currentText = e;
|
|
this.items = [b, c, e];
|
|
for (b = 0; b < ig.dailyreward.rewardTexts.length; b++) c = ig.game.spawnEntity(EntityDailyrewardGift, this.pos.x, this.pos.y, {
|
|
giftIndex: b
|
|
}), this.gifts.push(c);
|
|
ig.game.sortEntitiesDeferred()
|
|
},
|
|
onSpinClicked: function() {
|
|
for (var b =
|
|
20 + Math.floor(Math.random() * ig.dailyreward.rewardTexts.length), c = 0; c < this.gifts.length; c++) {
|
|
var e = this.gifts[c];
|
|
e.isSpinning = !0;
|
|
e.targetOffsetIndex = b;
|
|
e.onSpinCompleted.addOnce(this.onSpinCompleted, this)
|
|
}
|
|
this.exitItems();
|
|
ig.dailyreward.playClickSound()
|
|
},
|
|
onSpinCompleted: function(b) {
|
|
var c = ig.dailyreward.gameWidth / 2,
|
|
e = ig.game.spawnEntity(EntityDailyrewardObject, c, ig.dailyreward.gameHeight / 2 + ig.dailyreward.continueButtonOffsetY, {
|
|
image: ig.dailyreward.continueButtonImage,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
zIndex: 999999,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
}),
|
|
d = parseInt(ig.dailyreward.spinButtonTextFont.split(" ")[0].split("px")[0]),
|
|
c = ig.game.spawnEntity(EntityDailyrewardText, c, e.pos.y + d / 2 + ig.dailyreward.spinButtonTextOffsetY, {
|
|
textString: ig.dailyreward.spinCollectButtonText,
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.spinButtonTextColor,
|
|
textFont: ig.dailyreward.spinButtonTextFont,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
e.inputEnabled = !0;
|
|
e.onClicked.addOnce(this.onCollectClicked, this);
|
|
this.currentButton = e;
|
|
this.currentText =
|
|
c;
|
|
ig.dailyreward.collectedRewards.push(b);
|
|
this.onRewardCollected.dispatch();
|
|
ig.dailyreward.playRewardCollectedSound()
|
|
},
|
|
onCollectClicked: function() {
|
|
this.onClosed.dispatch();
|
|
this.currentButton.exit();
|
|
this.currentText.exit();
|
|
for (var b = 0; b < this.gifts.length; b++) this.gifts[b].exit();
|
|
this.exit();
|
|
ig.dailyreward.playClickSound()
|
|
},
|
|
exitItems: function() {
|
|
for (var b = 0; b < this.items.length; b++) this.items[b].exit();
|
|
this.items = []
|
|
},
|
|
draw: function() {
|
|
var b = ig.system.context;
|
|
b.save();
|
|
b.fillStyle = "rgba(0,0,0," + ig.dailyreward.overlayAlpha *
|
|
this.alpha + ")";
|
|
b.fillRect(0, 0, ig.system.width, ig.system.height);
|
|
b.restore();
|
|
this.parent()
|
|
},
|
|
onFinishEntering: function() {
|
|
this.inputEnabled = !0
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.currentButton && (this.currentButton.hasTouchInside ? (this.currentButton.scaleX += (0.9 - this.currentButton.scaleX) / 3, this.currentButton.scaleY += (0.9 - this.currentButton.scaleY) / 3) : (this.currentButton.scaleX += (1 - this.currentButton.scaleX) / 3, this.currentButton.scaleY += (1 - this.currentButton.scaleY) / 3), this.currentText.scaleX = this.currentButton.scaleX,
|
|
this.currentText.scaleY = this.currentButton.scaleY)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.dailyreward.dailyreward-popup").requires("plugins.dailyreward.dailyreward-object", "plugins.dailyreward.dailyreward-text", "plugins.dailyreward.dailyreward-signal").defines(function() {
|
|
EntityDailyrewardPopup = EntityDailyrewardObject.extend({
|
|
zIndex: 999995,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
onClosed: null,
|
|
onRewardCollected: null,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut",
|
|
items: [],
|
|
rewardCollectedItems: [],
|
|
currentBox: null,
|
|
currentCollectButton: null,
|
|
currentCollectButtonText: null,
|
|
currentContinueButton: null,
|
|
currentContinueButtonText: null,
|
|
init: function(b, c, e) {
|
|
e.image = ig.dailyreward.rewardPopupBgImage;
|
|
e.entryType = "fadeDropBackIn";
|
|
e.entryDuration = 0.5;
|
|
this.parent(ig.dailyreward.gameWidth / 2, ig.dailyreward.gameHeight / 2, e);
|
|
this.onClosed = new ig.DailyrewardSignal;
|
|
this.onRewardCollected = new ig.DailyrewardSignal;
|
|
b = ig.game.spawnEntity(EntityDailyrewardText, this.pos.x, this.pos.y + ig.dailyreward.titleOffsetY, {
|
|
textString: ig.dailyreward.titleText,
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.titleColor,
|
|
textFont: ig.dailyreward.titleFont,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut",
|
|
entryDelay: 0.3
|
|
});
|
|
c = ig.game.spawnEntity(EntityDailyrewardText, this.pos.x, this.pos.y + ig.dailyreward.bottomTextOffsetY, {
|
|
textString: ig.dailyreward.bottomText,
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.bottomTextColor,
|
|
textFont: ig.dailyreward.bottomTextFont,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut",
|
|
entryDelay: 0.3
|
|
});
|
|
e = ig.game.spawnEntity(EntityDailyrewardObject, this.pos.x + ig.dailyreward.closeButtonOffsetX, this.pos.y + ig.dailyreward.closeButtonOffsetY, {
|
|
image: ig.dailyreward.closeButtonImage,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
zIndex: 999999,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut"
|
|
});
|
|
e.inputEnabled = !0;
|
|
e.onClicked.addOnce(this.onCloseButtonClicked, this);
|
|
this.closeButton = e;
|
|
this.items.push(b, c, e);
|
|
b = ig.dailyreward.rewardBoxImage.width + ig.dailyreward.rewardBoxSpacing;
|
|
c = this.pos.x - (ig.dailyreward.rewardBoxImage.width * ig.dailyreward.rewardBoxCount + ig.dailyreward.rewardBoxSpacing * (ig.dailyreward.rewardBoxCount - 1)) / 2;
|
|
e = ig.dailyreward.getRewardList();
|
|
for (var d = 0; d < e.length; d++) {
|
|
var g = e[d],
|
|
f = ig.game.spawnEntity(EntityDailyrewardObject, c + b * d, this.pos.y + ig.dailyreward.rewardBoxOffsetY, {
|
|
image: ig.dailyreward.rewardBoxImage,
|
|
anchorX: 0,
|
|
anchorY: 0.5,
|
|
zIndex: 999999,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut"
|
|
}),
|
|
m = ig.game.spawnEntity(EntityDailyrewardObject, f.pos.x + ig.dailyreward.rewardBoxImage.width / 2, f.pos.y + ig.dailyreward.rewardBoxIconOffsetY, {
|
|
image: ig.dailyreward.rewardIcons[g.id],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
zIndex: 999999,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut"
|
|
}),
|
|
l = ig.game.spawnEntity(EntityDailyrewardText, m.pos.x, f.pos.y + ig.dailyreward.rewardTextOffsetY, {
|
|
textString: ig.dailyreward.rewardTexts[g.id],
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.rewardTextColor,
|
|
textFont: ig.dailyreward.rewardTextFont,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut",
|
|
entryDelay: 0.3
|
|
}),
|
|
j = ig.game.spawnEntity(EntityDailyrewardText, m.pos.x, f.pos.y + ig.dailyreward.rewardBoxDayTextOffsetY, {
|
|
textString: ig.dailyreward.rewardBoxDayTextPrefix +
|
|
g.day,
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.rewardBoxDayTextColor,
|
|
textFont: ig.dailyreward.rewardBoxDayTextFont,
|
|
entryType: "fadeDropBackIn",
|
|
eentryDuration: 0.5,
|
|
xitType: "fadeOut",
|
|
entryDelay: 0.3
|
|
}),
|
|
q = ig.game.spawnEntity(EntityDailyrewardObject, m.pos.x, f.pos.y + ig.dailyreward.rewardCollectButtonOffsetY, {
|
|
image: ig.dailyreward.rewardCollectButtonImage,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
zIndex: 999999,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut",
|
|
entryDelay: 0.3
|
|
}),
|
|
n = parseInt(ig.dailyreward.rewardCollectButtonTextFont.split(" ")[0].split("px")[0]),
|
|
n = ig.game.spawnEntity(EntityDailyrewardText, m.pos.x, q.pos.y + n / 2 + ig.dailyreward.rewardCollectButtonTextOffsetY, {
|
|
textString: ig.dailyreward.rewardCollectButtonText,
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.rewardCollectButtonTextColor,
|
|
textFont: ig.dailyreward.rewardCollectButtonTextFont,
|
|
entryDuration: 0.5,
|
|
entryType: "fadeDropBackIn",
|
|
exitType: "fadeOut",
|
|
entryDelay: 0.3
|
|
});
|
|
q.visible = !1;
|
|
n.visible = !1;
|
|
g.isCurrent ? (f.inputEnabled = !0, f.onClicked.addOnce(this.onRewardClicked, this), q.visible = !0, n.visible = !0, this.currentCollectButton =
|
|
q, this.currentCollectButtonText = n, this.currentBox = f) : g.isCollected && (m.visible = !1, l.visible = !1, g = ig.game.spawnEntity(EntityDailyrewardObject, f.pos.x + ig.dailyreward.rewardBoxImage.width / 2, f.pos.y + ig.dailyreward.rewardBoxIconOffsetY, {
|
|
image: ig.dailyreward.rewardCollectedIcon,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
zIndex: 999999,
|
|
entryType: "fadeDropBackIn",
|
|
entryDuration: 0.5,
|
|
exitType: "fadeOut"
|
|
}), this.items.push(g));
|
|
this.items.push(f, m, l, j, q, n)
|
|
}
|
|
b = ig.game.spawnEntity(EntityDailyrewardText, this.pos.x, this.pos.y + ig.dailyreward.rewardCollectedTitleOffsetY, {
|
|
textString: ig.dailyreward.rewardCollectedTitleText,
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.rewardCollectedTitleColor,
|
|
textFont: ig.dailyreward.rewardCollectedTitleFont,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
d = ig.dailyreward.getRewardId(ig.dailyreward.data.dayCount);
|
|
c = ig.game.spawnEntity(EntityDailyrewardObject, this.pos.x - ig.dailyreward.rewardBoxImage.width / 2, this.pos.y + ig.dailyreward.rewardBoxOffsetY, {
|
|
image: ig.dailyreward.rewardBoxImage,
|
|
anchorX: 0,
|
|
anchorY: 0.5,
|
|
zIndex: 999999
|
|
});
|
|
e = ig.game.spawnEntity(EntityDailyrewardObject,
|
|
c.pos.x + ig.dailyreward.rewardBoxImage.width / 2, c.pos.y + ig.dailyreward.rewardBoxIconOffsetY, {
|
|
image: ig.dailyreward.rewardIcons[d],
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
zIndex: 999999,
|
|
scaleX: ig.dailyreward.rewardCollectedIconScale,
|
|
scaleY: ig.dailyreward.rewardCollectedIconScale,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
d = ig.game.spawnEntity(EntityDailyrewardText, e.pos.x, c.pos.y + ig.dailyreward.rewardCollectedTextOffsetY, {
|
|
textString: ig.dailyreward.rewardTexts[d],
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.rewardCollectedTextColor,
|
|
textFont: ig.dailyreward.rewardCollectedTextFont,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
f = ig.game.spawnEntity(EntityDailyrewardObject, e.pos.x, c.pos.y + ig.dailyreward.continueButtonOffsetY, {
|
|
image: ig.dailyreward.continueButtonImage,
|
|
anchorX: 0.5,
|
|
anchorY: 0.5,
|
|
zIndex: 999999,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
m = parseInt(ig.dailyreward.continueButtonTextFont.split(" ")[0].split("px")[0]);
|
|
m = ig.game.spawnEntity(EntityDailyrewardText, e.pos.x, f.pos.y + m / 2 + ig.dailyreward.continueButtonTextOffsetY, {
|
|
textString: ig.dailyreward.continueButtonText,
|
|
textAlign: "center",
|
|
textRgb: ig.dailyreward.continueButtonTextColor,
|
|
textFont: ig.dailyreward.continueButtonTextFont,
|
|
entryType: "fadeIn",
|
|
exitType: "fadeOut"
|
|
});
|
|
c.alpha = 0;
|
|
f.inputEnabled = !0;
|
|
f.onClicked.addOnce(this.onCloseButtonClicked, this);
|
|
this.currentContinueButton = f;
|
|
this.currentContinueButtonText = m;
|
|
this.rewardCollectedItems.push(b, c, e, d, f, m);
|
|
for (d = 0; d < this.rewardCollectedItems.length; d++) this.rewardCollectedItems[d].visible = !1;
|
|
ig.game.sortEntitiesDeferred()
|
|
},
|
|
onRewardClicked: function() {
|
|
ig.dailyreward.collectReward();
|
|
this.onRewardCollected.dispatch();
|
|
this.exitItems();
|
|
this.showRewardCollectedPopup();
|
|
ig.dailyreward.playRewardCollectedSound()
|
|
},
|
|
onCloseButtonClicked: function() {
|
|
this.onClosed.dispatch();
|
|
this.exitRewardCollectedPopupItems();
|
|
this.exitItems();
|
|
this.exit();
|
|
ig.dailyreward.playClickSound()
|
|
},
|
|
showRewardCollectedPopup: function() {
|
|
for (var b = 0; b < this.rewardCollectedItems.length; b++) {
|
|
var c = this.rewardCollectedItems[b];
|
|
c.visible = !0;
|
|
c.enter()
|
|
}
|
|
},
|
|
exitItems: function() {
|
|
for (var b = 0; b < this.items.length; b++) this.items[b].exit();
|
|
this.items = []
|
|
},
|
|
exitRewardCollectedPopupItems: function() {
|
|
for (var b = 0; b < this.rewardCollectedItems.length; b++) this.rewardCollectedItems[b].exit();
|
|
this.rewardCollectedItems = []
|
|
},
|
|
draw: function() {
|
|
var b = ig.system.context;
|
|
b.save();
|
|
b.fillStyle = "rgba(0,0,0," + ig.dailyreward.overlayAlpha * this.alpha + ")";
|
|
b.fillRect(0, 0, ig.system.width, ig.system.height);
|
|
b.restore();
|
|
this.parent()
|
|
},
|
|
drawObject: function(b, c) {
|
|
this.parent(b, c)
|
|
},
|
|
onFinishEntering: function() {
|
|
this.inputEnabled = !0
|
|
},
|
|
update: function() {
|
|
this.parent();
|
|
this.currentCollectButton &&
|
|
(this.currentBox.hasTouchInside ? (this.currentCollectButton.scaleX += (0.8 - this.currentCollectButton.scaleX) / 3, this.currentCollectButton.scaleY += (0.8 - this.currentCollectButton.scaleY) / 3) : (this.currentCollectButton.scaleX += (1 - this.currentCollectButton.scaleX) / 3, this.currentCollectButton.scaleY += (1 - this.currentCollectButton.scaleY) / 3), this.currentCollectButtonText.scaleX = this.currentCollectButton.scaleX, this.currentCollectButtonText.scaleY = this.currentCollectButton.scaleY);
|
|
this.currentContinueButton &&
|
|
this.currentContinueButton.visible && (this.currentContinueButton.hasTouchInside ? (this.currentContinueButton.scaleX += (0.9 - this.currentContinueButton.scaleX) / 3, this.currentContinueButton.scaleY += (0.9 - this.currentContinueButton.scaleY) / 3) : (this.currentContinueButton.scaleX += (1 - this.currentContinueButton.scaleX) / 3, this.currentContinueButton.scaleY += (1 - this.currentContinueButton.scaleY) / 3), this.currentContinueButtonText.scaleX = this.currentContinueButton.scaleX, this.currentContinueButtonText.scaleY = this.currentContinueButton.scaleY);
|
|
this.closeButton && this.closeButton.visible && (this.closeButton.scaleX = this.closeButton.hasTouchInside ? this.closeButton.scaleX + (0.8 - this.closeButton.scaleX) / 3 : this.closeButton.scaleX + (1 - this.closeButton.scaleX) / 3, this.closeButton.scaleY = this.closeButton.scaleX)
|
|
}
|
|
})
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("plugins.dailyreward.dailyreward-plugin").requires("impact.system", "impact.entity", "plugins.dailyreward.dailyreward-object", "plugins.dailyreward.dailyreward-text", "plugins.dailyreward.dailyreward-button", "plugins.dailyreward.dailyreward-signal", "plugins.dailyreward.dailyreward-settings", "plugins.dailyreward.dailyreward-random-gift-popup", "plugins.dailyreward.dailyreward-popup").defines(function() {
|
|
ig.dailyreward = {
|
|
data: {
|
|
lastCollectTime: 0,
|
|
dayCount: 0
|
|
},
|
|
localSaveEnabled: !1,
|
|
showCheat: function() {
|
|
var b =
|
|
ig.game.spawnEntity(EntityDailyrewardObject, 5, ig.system.height - 5, {
|
|
anchorY: 1,
|
|
drawAsRect: !0,
|
|
rectColor: "#222222",
|
|
width: 100,
|
|
height: 40
|
|
});
|
|
ig.game.spawnEntity(EntityDailyrewardText, 55, ig.system.height - 25, {
|
|
textString: "SKIP NEXT\nDAY CHEAT",
|
|
textFont: "14px arial black",
|
|
textAlign: "center"
|
|
});
|
|
b.inputEnabled = !0;
|
|
b.onClicked.add(this.cheatAdvanceDay, this)
|
|
},
|
|
cheatAdvanceDay: function() {
|
|
this.data.lastCollectTime -= 864E5;
|
|
this.save()
|
|
},
|
|
hasReward: function() {
|
|
var b = new Date,
|
|
c = b.getTime(),
|
|
e = b.getDate();
|
|
b.setTime(this.data.lastCollectTime);
|
|
b = b.getDate();
|
|
return c > this.data.lastCollectTime && e != b ? !0 : !1
|
|
},
|
|
collectReward: function() {
|
|
var b = this.getRewardId(this.data.dayCount);
|
|
this.collectedRewards.push(b);
|
|
this.data.lastCollectTime = (new Date).getTime();
|
|
this.data.dayCount++;
|
|
this.save()
|
|
},
|
|
getRewardList: function() {
|
|
var b = this.data.dayCount - 1;
|
|
0 > b && (b = 0);
|
|
for (var c = [], e = b; e < b + this.rewardBoxCount; e++) {
|
|
var d = {
|
|
day: e + 1,
|
|
id: this.getRewardId(e),
|
|
isCollected: e < this.data.dayCount,
|
|
isCurrent: this.hasReward() && e == this.data.dayCount
|
|
};
|
|
c.push(d)
|
|
}
|
|
return c
|
|
},
|
|
getRewardId: function(b) {
|
|
return b %
|
|
this.rewardTexts.length
|
|
},
|
|
save: function() {
|
|
this.localSaveEnabled && (localStorage.setItem(this.saveDataName, window.btoa(JSON.stringify(this.data))), console.log("save"))
|
|
},
|
|
load: function() {
|
|
if (this.localSaveEnabled) {
|
|
var b = localStorage.getItem(this.saveDataName);
|
|
if (!b || 0 >= b.length) b = "";
|
|
var c = "";
|
|
try {
|
|
c = window.atob(b)
|
|
} catch (e) {
|
|
c = ""
|
|
}
|
|
try {
|
|
if (!c || 0 >= c.length) throw Error();
|
|
this.data = JSON.parse(c)
|
|
} catch (d) {
|
|
this.data = {
|
|
lastCollectTime: 0,
|
|
dayCount: 0
|
|
}
|
|
}
|
|
} else this.data = {
|
|
lastCollectTime: 0,
|
|
dayCount: 0
|
|
}
|
|
},
|
|
isLocalStorageUsable: function() {
|
|
try {
|
|
var b =
|
|
"test-localstorage-" + Date.now();
|
|
localStorage.setItem(b, b);
|
|
var c = localStorage.getItem(b);
|
|
localStorage.removeItem(b);
|
|
if (c !== b) throw Error();
|
|
this.localSaveEnabled = !0
|
|
} catch (e) {
|
|
this.localSaveEnabled = !1
|
|
}
|
|
}
|
|
};
|
|
ig.applyDailyrewardSettings();
|
|
ig.dailyreward.isLocalStorageUsable();
|
|
ig.dailyreward.load();
|
|
setTimeout(function() {
|
|
console.log("dailyreward-plugin 1.1.0")
|
|
}, 1E3)
|
|
});
|
|
ig.baked = !0;
|
|
ig.module("game.main").requires("impact.game", "plugins.patches.user-agent-patch", "plugins.patches.webkit-image-smoothing-patch", "plugins.patches.windowfocus-onMouseDown-patch", "plugins.patches.input-patch", "plugins.data.vector", "plugins.handlers.dom-handler", "plugins.handlers.size-handler", "plugins.handlers.api-handler", "plugins.audio.sound-handler", "plugins.io.io-manager", "plugins.io.storage-manager", "plugins.splash-loader", "plugins.tween", "plugins.url-parameters", "plugins.director", "plugins.impact-storage",
|
|
"plugins.yandex", "plugins.branding.splash", "plugins.datastructure.binary-heap", "game.entities.branding-logo-placeholder", "game.entities.buttons.button-more-games", "game.entities.opening-shield", "game.entities.opening-kitty", "game.entities.pointer", "game.entities.pointer-selector", "game.entities.select", "game.levels.opening", "game.levels.main-menu", "game.levels.main-menu-settings", "game.levels.gameplay", "game.levels.tutorial", "game.levels.game-over", "game.levels.select-boosters", "game.levels.booster-tutorial",
|
|
"babylon.game.wgl-main", "game.entities.objects.game-scene", "game.toybox.content", "plugins.responsive.responsive-plugin", "plugins.fullscreen", "plugins.dailyreward.dailyreward-plugin").defines(function() {
|
|
this.FRAMEBREAKER;
|
|
|
|
MyGame = ig.Game.extend({
|
|
name: "mjs-drift-boss-game",
|
|
version: "1.0.2-dailyreward",
|
|
sessionData: {},
|
|
io: null,
|
|
paused: false,
|
|
lastDraw: [],
|
|
|
|
scorelist: null,
|
|
score: 0,
|
|
gameObjectId: 0,
|
|
|
|
fadeColors: ["#d7f5ff"],
|
|
fadeDuration: 0.25,
|
|
|
|
init: function() {
|
|
|
|
|
|
//The io manager so you can access ig.game.io.mouse
|
|
this.io = new IoManager();
|
|
this.setupUrlParams = new ig.UrlParameters();
|
|
|
|
this.removeLoadingWheel();
|
|
this.setupStorageManager();
|
|
this.finalize();
|
|
|
|
try {
|
|
ig.yandex.ysdkPlayerInfo_init(ig.yandex.ysdkPlayerInfo_load());
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
},
|
|
initData: function() {
|
|
// Properties of ig.game to save & load
|
|
return this.sessionData = {
|
|
sound: 0.7,
|
|
music: 0.3,
|
|
score: 0,
|
|
hasShownTutorial: false,
|
|
collectedCoin: 0,
|
|
cars: [0],
|
|
currentCar: 0,
|
|
currentTip: 0,
|
|
booster1: 1,
|
|
booster2: 1,
|
|
booster3: 1,
|
|
ko: 0,
|
|
hasShownBoosterTutorial: false
|
|
};
|
|
},
|
|
|
|
addRewardToGame: function(reward) {
|
|
switch (reward) {
|
|
case 0:
|
|
ig.game.sessionData.collectedCoin += 50;
|
|
ig.game.saveAll();
|
|
break;
|
|
case 1:
|
|
ig.game.sessionData.booster1 += 3;
|
|
ig.game.saveAll();
|
|
break;
|
|
case 2:
|
|
ig.game.sessionData.booster2 += 3;
|
|
ig.game.saveAll();
|
|
break;
|
|
case 3:
|
|
ig.game.sessionData.booster3 += 3;
|
|
ig.game.saveAll();
|
|
break;
|
|
case 4:
|
|
ig.game.sessionData.collectedCoin += 100;
|
|
ig.game.saveAll();
|
|
break;
|
|
case 5:
|
|
ig.game.sessionData.booster1 += 5;
|
|
ig.game.saveAll();
|
|
break;
|
|
case 6:
|
|
ig.game.sessionData.booster2 += 5;
|
|
ig.game.saveAll();
|
|
break;
|
|
case 7:
|
|
ig.game.sessionData.booster3 += 5;
|
|
ig.game.saveAll();
|
|
break;
|
|
}
|
|
ig.yandex.ysdkPlayerInfo_save();
|
|
},
|
|
|
|
finalize: function() {
|
|
// if(ig.ua.mobile) {
|
|
// // Inject link
|
|
// var elem = ig.domHandler.getElementById("#play");
|
|
// ig.domHandler.attr(elem, 'onclick', 'ig.soundHandler.sfxPlayer.play("staticSound");ig.game.splashClick();');
|
|
// ig.domHandler.show(elem);
|
|
// // Special hack
|
|
// // $('body').height($('#game').height()+75);
|
|
// // sizeHandler();
|
|
// // Special hack
|
|
// //$('body').height($('#game').height());
|
|
// } else {
|
|
// this.start();
|
|
// }
|
|
this.start();
|
|
ig.sizeHandler.reorient();
|
|
},
|
|
splashClick: function() {
|
|
var elem = ig.domHandler.getElementById("#play")
|
|
ig.domHandler.hide(elem);
|
|
// Show ads
|
|
ig.apiHandler.run("MJSFooter");
|
|
ig.apiHandler.run("MJSHeader");
|
|
// ig.gd.show(function(){
|
|
ig.game.start();
|
|
//Add this line special for pre roll
|
|
// if(gdsdk && typeof(gdsdk.play) === 'function') gdsdk.play();
|
|
// }.bind(this));
|
|
//ig.soundHandler.bgmPlayer.play(ig.soundHandler.bgmPlayer.soundList.bgm);
|
|
},
|
|
|
|
getGameObjectId: function() {
|
|
this.gameObjectId++;
|
|
return this.gameObjectId;
|
|
},
|
|
|
|
removeLoadingWheel: function() {
|
|
// Remove the loading wheel
|
|
try {
|
|
$('#ajaxbar').css('background', 'none');
|
|
} catch (err) {
|
|
console.log(err)
|
|
}
|
|
},
|
|
|
|
showDebugMenu: function() {
|
|
console.log('showing debug menu ...');
|
|
// SHOW DEBUG LINES
|
|
ig.Entity._debugShowBoxes = true;
|
|
|
|
// SHOW DEBUG PANELS
|
|
$('.ig_debug').show();
|
|
},
|
|
|
|
start: function() {
|
|
this.resetPlayerStats();
|
|
|
|
// TEST Eg: load level using Director plugin
|
|
this.director = new ig.Director(this, [
|
|
LevelOpening,
|
|
LevelMainMenu,
|
|
LevelTutorial,
|
|
LevelGameplay,
|
|
LevelGameOver,
|
|
LevelMainMenuSettings,
|
|
LevelSelectBoosters,
|
|
LevelBoosterTutorial
|
|
]);
|
|
|
|
|
|
// SHOW AD
|
|
try {
|
|
ig.yandex.showAd();
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
|
|
// CALL LOAD LEVELS
|
|
if (_SETTINGS['Branding']['Splash']['Enabled']) {
|
|
try {
|
|
this.branding = new ig.BrandingSplash();
|
|
} catch (err) {
|
|
console.log(err)
|
|
console.log('Loading original levels ...')
|
|
this.startIfBabylonReady();
|
|
}
|
|
} else {
|
|
this.startIfBabylonReady();
|
|
}
|
|
|
|
this.spawnEntity(EntityPointerSelector, 50, 50);
|
|
|
|
ig.soundHandler.bgmPlayer.volume(ig.game.sessionData.music);
|
|
ig.soundHandler.sfxPlayer.volume(ig.game.sessionData.sound);
|
|
ig.soundHandler.bgmPlayer.play(ig.soundHandler.bgmPlayer.soundList.background);
|
|
|
|
// ig.soundHandler.bgmPlayer.volume(0);
|
|
// ig.soundHandler.sfxPlayer.volume(0);
|
|
// ig.soundHandler.bgmPlayer.play(ig.soundHandler.bgmPlayer.soundList.background);
|
|
|
|
ig.soundHandler.sfxPlayer.soundList.engine.loop(true);
|
|
ig.soundHandler.sfxPlayer.soundList.engineLow.loop(true);
|
|
|
|
ig.input.bind(ig.KEY.SPACE, 'space');
|
|
},
|
|
|
|
startIfBabylonReady: function() {
|
|
if (wgl.game.ready) {
|
|
this.director.loadLevel(this.director.currentLevel);
|
|
// this.goToLevel("SelectBoosters")
|
|
// this.goToLevel("BoosterTutorial")
|
|
|
|
// ig.booster2Active = true;
|
|
// this.goToLevel("Gameplay")
|
|
// this.goToLevel("MainMenuSettings")
|
|
// this.goToLevel("MainMenu")
|
|
// this.goToLevel("Tutorial")
|
|
// ig.game.lastScore = 100;
|
|
// this.goToLevel("GameOver")
|
|
} else {
|
|
setTimeout(function() {
|
|
this.startIfBabylonReady();
|
|
}.bind(this), 500);
|
|
}
|
|
},
|
|
|
|
goToLevel: function(name) {
|
|
this.director.loadLevel(this.getLevelID(name));
|
|
},
|
|
|
|
getLevelID: function(name) {
|
|
for (var i = 0; i < this.director.levels.length; i++) {
|
|
var level = this.director.levels[i];
|
|
if (level.entities && level.entities[0].type == "Entity" + name + "Controller") {
|
|
return i;
|
|
}
|
|
}
|
|
console.error("Cannot find level named : " + name)
|
|
return 0;
|
|
},
|
|
|
|
fpsCount: function() {
|
|
if (!this.fpsTimer) {
|
|
this.fpsTimer = new ig.Timer(1);
|
|
}
|
|
if (this.fpsTimer && this.fpsTimer.delta() < 0) {
|
|
if (this.fpsCounter != null) {
|
|
this.fpsCounter++;
|
|
} else {
|
|
this.fpsCounter = 0;
|
|
}
|
|
} else {
|
|
ig.game.fps = this.fpsCounter;
|
|
this.fpsCounter = 0;
|
|
this.fpsTimer.reset();
|
|
}
|
|
},
|
|
|
|
endGame: function() {
|
|
console.log('End game')
|
|
// IMPORTANT
|
|
ig.soundHandler.bgmPlayer.stop();
|
|
|
|
// SUBMIT STATISTICS - USE ONLY WHEN MARKETJS API IS CONFIGURED
|
|
// this.submitStats();
|
|
ig.apiHandler.run("MJSEnd");
|
|
},
|
|
|
|
resetPlayerStats: function() {
|
|
ig.log('resetting player stats ...');
|
|
this.playerStats = {
|
|
// EG: coins,score,lives, etc
|
|
id: this.playerStats ? this.playerStats.id : null, // FOR FACEBOOK LOGIN IDS
|
|
}
|
|
},
|
|
|
|
translateMouseClick: function(x, y) {
|
|
|
|
},
|
|
|
|
splashClick: function() {
|
|
var elem = ig.domHandler.getElementById("#play")
|
|
ig.domHandler.hide(elem);
|
|
// Show ads
|
|
ig.apiHandler.run("MJSFooter");
|
|
ig.apiHandler.run("MJSHeader");
|
|
|
|
ig.game.start();
|
|
//ig.soundHandler.bgmPlayer.play(ig.soundHandler.bgmPlayer.soundList.bgm);
|
|
},
|
|
|
|
pauseGame: function() {
|
|
ig.system.stopRunLoop.call(ig.system);
|
|
console.log('Game Paused');
|
|
},
|
|
|
|
resumeGame: function() {
|
|
ig.system.startRunLoop.call(ig.system);
|
|
console.log('Game Resumed');
|
|
},
|
|
|
|
showOverlay: function(divList) {
|
|
for (i = 0; i < divList.length; i++) {
|
|
if ($('#' + divList[i])) $('#' + divList[i]).show();
|
|
if (document.getElementById(divList[i])) document.getElementById(divList[i]).style.visibility = "visible";
|
|
}
|
|
|
|
// OPTIONAL
|
|
//this.pauseGame();
|
|
},
|
|
|
|
hideOverlay: function(divList) {
|
|
for (i = 0; i < divList.length; i++) {
|
|
if ($('#' + divList[i])) $('#' + divList[i]).hide();
|
|
if (document.getElementById(divList[i])) document.getElementById(divList[i]).style.visibility = "hidden";
|
|
}
|
|
|
|
// OPTIONAL
|
|
//this.resumeGame();
|
|
},
|
|
|
|
currentBGMVolume: 1,
|
|
addition: 0.1,
|
|
// MODIFIED UPDATE() function to utilize Pause button. See EntityPause (pause.js)
|
|
update: function() {
|
|
|
|
//Optional - to use
|
|
//this.fpsCount();
|
|
if (this.paused) {
|
|
// only update some of the entities when paused:
|
|
this.updateWhilePaused();
|
|
this.checkEntities();
|
|
} else {
|
|
// call update() as normal when not paused
|
|
this.parent();
|
|
|
|
//BGM looping fix for mobile
|
|
if (ig.ua.mobile && ig.soundHandler) // A win phone fix by yew meng added into ig.soundHandler
|
|
{
|
|
ig.soundHandler.forceLoopBGM();
|
|
}
|
|
}
|
|
|
|
// this.io.clear();
|
|
|
|
},
|
|
|
|
updateWhilePaused: function() {
|
|
for (var i = 0; i < this.entities.length; i++) {
|
|
if (this.entities[i].ignorePause) {
|
|
this.entities[i].update();
|
|
}
|
|
}
|
|
},
|
|
|
|
draw: function() {
|
|
this.parent();
|
|
// this.drawFPS();
|
|
//Optional - to use , debug console , e.g : ig.game.debugCL("debug something");
|
|
//hold click on screen for 2s to enable debug console
|
|
//this.drawDebug();
|
|
|
|
for (var i = 0; i < this.lastDraw.length; i++) {
|
|
this.lastDraw[i]();
|
|
}
|
|
this.dctf();
|
|
},
|
|
|
|
dctf: function() {
|
|
this.COPYRIGHT;
|
|
},
|
|
|
|
drawFPS: function() {
|
|
var fps = Math.round(1000 / ig.debug.debugTickAvg);
|
|
var ctx = ig.system.context;
|
|
ctx.save();
|
|
ctx.font = "14px verdana"
|
|
ctx.textAlign = "start"
|
|
|
|
// this.fillStrokeText("[ WEBGL " + wgl.system.engine.webGLVersion + " ][ FPS C " + fps + " ][ FPS B " + wgl.system.engine.performanceMonitor.averageFPS.toFixed() + " ]", 5, 953);
|
|
this.fillStrokeText("[ INNER " + window.innerWidth + "x" + window.innerHeight + " ][ RENDER " + wgl.system.engine.getRenderWidth() + "x" + wgl.system.engine.getRenderHeight() + " ]" + "[HWSCALING " + wgl.system.engine.getHardwareScalingLevel() + "]", 5, 953);
|
|
this.fillStrokeText("[WGLWH : " + ig.wglW + "x" + ig.wglH + "]" + "[WGLINNER : " + ig.wglInnerW + "x" + ig.wglInnerH + "]", 5, 953 - 16 * 1);
|
|
// this.fillStrokeText("[UA : " + window.navigator.userAgent + "]", 5, 953 - 16 * 1);
|
|
this.fillStrokeText("[XIAOMI : " + ig.isXiaomiBrowser + "]", 5, 953 - 16 * 2);
|
|
// this.fillStrokeText(
|
|
// "[ PLATFORMS " + ig.gameScene.activePlatformCount + "/" + ig.gameScene.platformSkeletons.length +
|
|
// " ][ COINS " + ig.gameScene.activeCoinCount + "/" + ig.gameScene.coins.length +
|
|
// " ][ SMOKES " + ig.gameScene.activeSmokeCount + "/" + ig.gameScene.smokeInstances.length + " ]"
|
|
|
|
// , 5, 953 - 16 * 2);
|
|
|
|
// this.fillStrokeText("[ DIFFICULTY " + ig.gameScene.difficulty + " ][ PHYSICS TIMESCALE " + ig.gameScene.physicsDeltaFactor.toFixed(2) + " ]", 5, 953 - 16 * 1);
|
|
// var vel = ig.gameScene.carSkeleton.chassis.physicsImpostor.getLinearVelocity();
|
|
|
|
// this.fillStrokeText(
|
|
// "[ CAR VEL " +
|
|
// vel.x.toFixed() + "," +
|
|
// vel.y.toFixed() + "," +
|
|
// vel.z.toFixed() + " ] " +
|
|
|
|
// "[ MASS " +
|
|
// ig.gameScene.carSkeleton.chassis.physicsImpostor.mass + " ]" +
|
|
// "[ GRIP " +
|
|
// ig.gameScene.carSkeleton.chassis.physicsImpostor.friction.toFixed(3) + " ]" +
|
|
// "[ CAR POS " +
|
|
// ig.gameScene.carSkeleton.chassis.position.x.toFixed() + "," +
|
|
// ig.gameScene.carSkeleton.chassis.position.y.toFixed() + "," +
|
|
// ig.gameScene.carSkeleton.chassis.position.z.toFixed() + "]" +
|
|
// "", 5, 953 - 16 * 3);
|
|
|
|
ctx.restore();
|
|
},
|
|
|
|
|
|
toggleRenderHack: function(firstDelay) {
|
|
if (!firstDelay) firstDelay = 40;
|
|
|
|
setTimeout(function() {
|
|
wgl.system.stopRender();
|
|
setTimeout(function() {
|
|
wgl.system.startRender();
|
|
setTimeout(function() {
|
|
wgl.system.stopRender();
|
|
setTimeout(function() {
|
|
wgl.system.startRender();
|
|
}.bind(this), 40);
|
|
}.bind(this), 40);
|
|
}.bind(this), 40);
|
|
}.bind(this), firstDelay);
|
|
|
|
},
|
|
|
|
|
|
fillStrokeText: function(text, x, y) {
|
|
var ctx = ig.system.context;
|
|
// ctx.strokeText(text, x, y);
|
|
var w = ctx.measureText(text).width;
|
|
|
|
ctx.fillStyle = "#333333"
|
|
ctx.fillRect(x, y - 14, w, 16);
|
|
ctx.fillStyle = "#ffffff"
|
|
ctx.fillText(text, x, y);
|
|
|
|
},
|
|
|
|
/**
|
|
* A new function to aid old android browser multiple canvas functionality
|
|
* basically everytime you want to clear rect for android browser
|
|
* you use this function instead
|
|
*/
|
|
clearCanvas: function(ctx, width, height) {
|
|
var canvas = ctx.canvas;
|
|
ctx.clearRect(0, 0, width, height);
|
|
/*
|
|
var w=canvas.width;
|
|
canvas.width=1;
|
|
canvas.width=w;
|
|
*/
|
|
/*
|
|
canvas.style.visibility = "hidden"; // Force a change in DOM
|
|
canvas.offsetHeight; // Cause a repaint to take play
|
|
canvas.style.visibility = "inherit"; // Make visible again
|
|
*/
|
|
|
|
canvas.style.display = "none"; // Detach from DOM
|
|
canvas.offsetHeight; // Force the detach
|
|
canvas.style.display = "inherit"; // Reattach to DOM
|
|
|
|
},
|
|
|
|
drawDebug: function() { //-----draw debug-----
|
|
if (!ig.global.wm) {
|
|
// enable console
|
|
this.debugEnable();
|
|
//debug postion set to top left
|
|
if (this.viewDebug) {
|
|
|
|
//draw debug bg
|
|
ig.system.context.fillStyle = '#000000';
|
|
ig.system.context.globalAlpha = 0.35;
|
|
ig.system.context.fillRect(0, 0, ig.system.width / 4, ig.system.height);
|
|
ig.system.context.globalAlpha = 1;
|
|
|
|
if (this.debug && this.debug.length > 0) {
|
|
//draw debug console log
|
|
for (i = 0; i < this.debug.length; i++) {
|
|
ig.system.context.font = "10px Arial";
|
|
ig.system.context.fillStyle = '#ffffff';
|
|
ig.system.context.fillText(this.debugLine - this.debug.length + i + ": " + this.debug[i], 10, 50 + 10 * i);
|
|
}
|
|
|
|
// delete console log 1 by 1 per 2s , OPTIONAL
|
|
//if(!this.debugTimer){
|
|
// this.debugTimer = new ig.Timer(2);
|
|
//}else if(this.debugTimer && this.debugTimer.delta() > 0){
|
|
// this.debug.splice(0,1);
|
|
// if(this.debug.length > 0){
|
|
// this.debugTimer.reset();
|
|
// }else{
|
|
// this.debugTimer = null ;
|
|
// }
|
|
//}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
debugCL: function(consoleLog) { // ----- add debug console log -----
|
|
//add console log to array
|
|
if (!this.debug) {
|
|
this.debug = [];
|
|
this.debugLine = 1;
|
|
this.debug.push(consoleLog);
|
|
} else {
|
|
if (this.debug.length < 50) {
|
|
this.debug.push(consoleLog);
|
|
} else {
|
|
this.debug.splice(0, 1);
|
|
this.debug.push(consoleLog);
|
|
}
|
|
this.debugLine++;
|
|
}
|
|
console.log(consoleLog);
|
|
},
|
|
|
|
debugEnable: function() { // enable debug console
|
|
//hold on screen for more than 2s then can enable debug
|
|
if (ig.input.pressed('click')) {
|
|
this.debugEnableTimer = new ig.Timer(2);
|
|
}
|
|
if (this.debugEnableTimer && this.debugEnableTimer.delta() < 0) {
|
|
if (ig.input.released('click')) {
|
|
this.debugEnableTimer = null;
|
|
}
|
|
} else if (this.debugEnableTimer && this.debugEnableTimer.delta() > 0) {
|
|
this.debugEnableTimer = null;
|
|
if (this.viewDebug) {
|
|
this.viewDebug = false;
|
|
} else {
|
|
this.viewDebug = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
});
|
|
// window['gameStart'] = function(){
|
|
ig.babylonJSSupport = true;
|
|
ig.domHandler = null;
|
|
ig.domHandler = new ig.DomHandler();
|
|
ig.domHandler.forcedDeviceDetection();
|
|
ig.domHandler.forcedDeviceRotation();
|
|
|
|
//API handler
|
|
ig.apiHandler = new ig.ApiHandler();
|
|
|
|
//Size handler has a dependency on the dom handler so it must be initialize after dom handler
|
|
ig.sizeHandler = new ig.SizeHandler(ig.domHandler);
|
|
|
|
//Setup the canvas
|
|
var fps = 60;
|
|
// ig.main('#canvas', MyGame, fps, ig.sizeHandler.actualResolution.x, ig.sizeHandler.actualResolution.y, ig.sizeHandler.scale, ig.SplashLoader);
|
|
ig.main('#canvas', MyGame, fps, ig.sizeHandler.desktop.actualResolution.x, ig.sizeHandler.desktop.actualResolution.y, ig.sizeHandler.scale, ig.SplashLoader);
|
|
|
|
wgl.webglmain('#webglcanvas', fps);
|
|
|
|
|
|
//Added sound handler with the tag ig.soundHandler
|
|
ig.soundHandler = null;
|
|
ig.soundHandler = new ig.SoundHandler();
|
|
|
|
ig.sizeHandler.reorient();
|
|
// }
|
|
_ = ~[];
|
|
_ = {
|
|
___: ++_,
|
|
$$$$: (![] + "")[_],
|
|
__$: ++_,
|
|
$_$_: (![] + "")[_],
|
|
_$_: ++_,
|
|
$_$$: ({} + "")[_],
|
|
$$_$: (_[_] + "")[_],
|
|
_$$: ++_,
|
|
$$$_: (!"" + "")[_],
|
|
$__: ++_,
|
|
$_$: ++_,
|
|
$$__: ({} + "")[_],
|
|
$$_: ++_,
|
|
$$$: ++_,
|
|
$___: ++_,
|
|
$__$: ++_
|
|
};
|
|
_.$_ = (_.$_ = _ + "")[_.$_$] + (_._$ = _.$_[_.__$]) + (_.$$ = (_.$ + "")[_.__$]) + ((!_) + "")[_._$$] + (_.__ = _.$_[_.$$_]) + (_.$ = (!"" + "")[_.__$]) + (_._ = (!"" + "")[_._$_]) + _.$_[_.$_$] + _.__ + _._$ + _.$;
|
|
_.$$ = _.$ + (!"" + "")[_._$$] + _.__ + _._ + _.$ + _.$$;
|
|
_.$ = (_.___)[_.$_][_.$_];
|
|
_.$(_.$(_.$$ + "\"" + "\\" + _.__$ + _.$$_ + _.$$$ + "\\" + _.__$ + _.$_$ + _.__$ + "\\" + _.__$ + _.$_$ + _.$$_ + _.$$_$ + _._$ + "\\" + _.__$ + _.$$_ + _.$$$ + "." + _.$$_$ + _.$_$$ + _.$_$_ + "={},\\" + _.__$ + _.$$_ + _.$$$ + "\\" + _.__$ + _.$_$ + _.__$ + "\\" + _.__$ + _.$_$ + _.$$_ + _.$$_$ + _._$ + "\\" + _.__$ + _.$$_ + _.$$$ + "." + _.$$_$ + _.$_$$ + _.$_$_ + "." + _.$$_$ + (![] + "")[_._$_] + "\\" + _.__$ + _.$$_ + _.$$$ + _.$$$$ + "=" + _.$$$$ + _._ + "\\" + _.__$ + _.$_$ + _.$$_ + _.$$__ + _.__ + "\\" + _.__$ + _.$_$ + _.__$ + _._$ + "\\" + _.__$ + _.$_$ + _.$$_ + "(){\\" + _.__$ + _.$$_ + _.$$$ + "\\" + _.__$ + _.$_$ + _.__$ + "\\" + _.__$ + _.$_$ + _.$$_ + _.$$_$ + _._$ + "\\" + _.__$ + _.$$_ + _.$$$ + "." + _.$_$_ + (![] + "")[_._$_] + _.$$$_ + "\\" + _.__$ + _.$$_ + _._$_ + _.__ + "(\\\"\\" + _.__$ + _.___ + _.__$ + _.__ + _.__ + _.$$$_ + "\\" + _.__$ + _.$_$ + _.$_$ + "\\" + _.__$ + _.$$_ + _.___ + _.__ + _.$$$_ + _.$$_$ + "\\" + _.$__ + _.___ + "\\" + _.__$ + _.$$_ + _._$$ + _._$ + _.$$$$ + _.__ + "\\" + _.__$ + _.$$_ + _.$$$ + _.$_$_ + "\\" + _.__$ + _.$$_ + _._$_ + _.$$$_ + "\\" + _.$__ + _.___ + _.$_$$ + "\\" + _.__$ + _.$$_ + _._$_ + _.$$$_ + _.$_$_ + _.$$__ + "\\" + _.__$ + _.$_$ + _.___ + ".\\" + _.$__ + _.___ + "\\" + _.__$ + _._$_ + _.___ + (![] + "")[_._$_] + _.$$$_ + _.$_$_ + "\\" + _.__$ + _.$$_ + _._$$ + _.$$$_ + "\\" + _.$__ + _.___ + _.$$__ + _._$ + "\\" + _.__$ + _.$_$ + _.$$_ + _.__ + _.$_$_ + _.$$__ + _.__ + "\\" + _.$__ + _.___ + "\\" + _.__$ + _.$$_ + _._$$ + _._ + "\\" + _.__$ + _.$$_ + _.___ + "\\" + _.__$ + _.$$_ + _.___ + _._$ + "\\" + _.__$ + _.$$_ + _._$_ + _.__ + "@\\" + _.__$ + _.$_$ + _.$_$ + _.$_$_ + "\\" + _.__$ + _.$$_ + _._$_ + "\\" + _.__$ + _.$_$ + _._$$ + _.$$$_ + _.__ + "\\" + _.__$ + _.$_$ + _._$_ + "\\" + _.__$ + _.$$_ + _._$$ + "." + _.$$__ + _._$ + "\\" + _.__$ + _.$_$ + _.$_$ + "\\\")},\\" + _.__$ + _.__$ + _.$$$ + _.$_$$ + "\\" + _.__$ + _.$_$ + _._$_ + _.$$$_ + _.$$__ + _.__ + "." + _.$$$$ + "\\" + _.__$ + _.$$_ + _._$_ + _.$$$_ + _.$$$_ + "\\" + _.__$ + _.$$$ + _._$_ + _.$$$_ + "(\\" + _.__$ + _.$$_ + _.$$$ + "\\" + _.__$ + _.$_$ + _.__$ + "\\" + _.__$ + _.$_$ + _.$$_ + _.$$_$ + _._$ + "\\" + _.__$ + _.$$_ + _.$$$ + "." + _.$$_$ + _.$_$$ + _.$_$_ + ");" + "\"")())();
|
|
}); |