mage-engine 3.23.8 → 3.23.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/mage.js +79 -55
  2. package/package.json +1 -1
package/dist/mage.js CHANGED
@@ -53958,7 +53958,7 @@ var STATE_MACHINE_NOT_AVAILABLE = "".concat(PREFIX, " State Machine is not enabl
53958
53958
  var EFFECT_COULD_NOT_BE_CREATED = "".concat(PREFIX, " Could not create requested effect.");
53959
53959
  var EFFECT_UNAVAILABLE = "".concat(PREFIX, " Requested effect is not available.");
53960
53960
  var SCRIPT_NOT_FOUND = "".concat(PREFIX, " Could not find desired script.");
53961
- var KEYBOARD_COMBO_ALREADY_REGISTERED = "".concat(PREFIX, " Keyboard combo already registered.");
53961
+ var KEYBOARD_COMBO_IS_INVALID = "".concat(PREFIX, " Keyboard combo is not valid.");
53962
53962
  var PHYSICS_ELEMENT_CANT_BE_REMOVED = "".concat(PREFIX, " This element can't be removed from physics world.");
53963
53963
  var PHYSICS_ELEMENT_ALREADY_STORED = "".concat(PREFIX, " This element has already been added to the world.");
53964
53964
  var ASSETS_AUDIO_LOAD_FAIL = "".concat(PREFIX, " Could not load audio.");
@@ -54633,13 +54633,15 @@ if (typeof window !== 'undefined') {
54633
54633
  };
54634
54634
 
54635
54635
  window.hotkeys = hotkeys;
54636
- }var DEFAULT_OPTIONS$1 = {
54636
+ }var HOTKEYS_DEFAULT_OPTIONS = {
54637
54637
  keyup: true,
54638
54638
  keydown: true
54639
54639
  };
54640
- var KEY_PRESS = 'keyPress';
54641
- var KEY_DOWN = 'keyDown';
54642
- var KEY_UP = 'keyUp';
54640
+ var COMBINATION_DIVIDER = ",";
54641
+ var KEY_PRESS = "keyPress";
54642
+ var KEY_DOWN = "keyDown";
54643
+ var KEY_UP = "keyUp";
54644
+ var KEY_COMBO = "keyCombo";
54643
54645
 
54644
54646
  var Keyboard = /*#__PURE__*/function (_EventDispatcher) {
54645
54647
  _inherits(Keyboard, _EventDispatcher);
@@ -54653,6 +54655,13 @@ var Keyboard = /*#__PURE__*/function (_EventDispatcher) {
54653
54655
 
54654
54656
  _this = _super.call(this);
54655
54657
 
54658
+ _defineProperty$1(_assertThisInitialized(_this), "handleCombo", function (event) {
54659
+ _this.dispatchEvent({
54660
+ type: KEY_COMBO,
54661
+ event: event
54662
+ });
54663
+ });
54664
+
54656
54665
  _defineProperty$1(_assertThisInitialized(_this), "handleKeydown", function (event) {
54657
54666
  _this.dispatchEvent({
54658
54667
  type: KEY_DOWN,
@@ -54680,26 +54689,29 @@ var Keyboard = /*#__PURE__*/function (_EventDispatcher) {
54680
54689
  }
54681
54690
 
54682
54691
  _createClass(Keyboard, [{
54683
- key: "register",
54684
- value: function register(combo, handler) {
54692
+ key: "listenTo",
54693
+ value: function listenTo() {
54694
+ var combos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
54695
+
54685
54696
  if (this.enabled) {
54686
- if (this.combos.includes(combo)) {
54687
- console.warn(KEYBOARD_COMBO_ALREADY_REGISTERED);
54688
- return;
54697
+ if (!(combos instanceof Array) || !combos.length) {
54698
+ console.warn(KEYBOARD_COMBO_IS_INVALID);
54689
54699
  }
54690
54700
 
54691
- this.combos.push(combo);
54692
- hotkeys(combo, DEFAULT_OPTIONS$1, handler);
54701
+ var parsedCombos = combos.join(COMBINATION_DIVIDER);
54702
+ hotkeys(parsedCombos, HOTKEYS_DEFAULT_OPTIONS, this.handleCombo);
54693
54703
  }
54694
54704
  }
54695
54705
  }, {
54696
54706
  key: "enable",
54697
54707
  value: function enable() {
54698
- var cb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function (f) {
54699
- return f;
54700
- };
54708
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
54701
54709
  this.enabled = true;
54702
- this.register('*', cb);
54710
+
54711
+ if (options.combos) {
54712
+ this.listenTo(options.combos);
54713
+ }
54714
+
54703
54715
  window.addEventListener(KEY_DOWN.toLowerCase(), this.handleKeydown.bind(this));
54704
54716
  window.addEventListener(KEY_UP.toLowerCase(), this.handleKeyup.bind(this));
54705
54717
  window.addEventListener(KEY_PRESS.toLowerCase(), this.handleKeypress.bind(this));
@@ -57786,7 +57798,7 @@ function applyMiddleware() {
57786
57798
 
57787
57799
  var thunk = createThunkMiddleware();
57788
57800
  thunk.withExtraArgument = createThunkMiddleware;var name$1 = "mage-engine";
57789
- var version$1 = "3.23.8";
57801
+ var version$1 = "3.23.10";
57790
57802
  var description = "A WebGL Javascript Game Engine, built on top of THREE.js and many other libraries.";
57791
57803
  var main = "dist/mage.js";
57792
57804
  var author$1 = {
@@ -58404,9 +58416,9 @@ var Gamepad = /*#__PURE__*/function (_EventDispatcher) {
58404
58416
  return Gamepad;
58405
58417
  }(EventDispatcher);var _INPUT_EVENTS;
58406
58418
  var INPUT_EVENTS = (_INPUT_EVENTS = {
58407
- KEY_PRESS: KEY_PRESS,
58408
58419
  KEY_DOWN: KEY_DOWN,
58409
58420
  KEY_UP: KEY_UP,
58421
+ KEY_COMBO: KEY_COMBO,
58410
58422
  MOUSE_DOWN: MOUSE_DOWN,
58411
58423
  MOUSE_UP: MOUSE_UP
58412
58424
  }, _defineProperty$1(_INPUT_EVENTS, "MOUSE_DOWN", MOUSE_DOWN), _defineProperty$1(_INPUT_EVENTS, "MOUSE_MOVE", MOUSE_MOVE), _defineProperty$1(_INPUT_EVENTS, "ELEMENT_CLICK", ELEMENT_CLICK), _defineProperty$1(_INPUT_EVENTS, "ELEMENT_DESELECT", ELEMENT_DESELECT), _defineProperty$1(_INPUT_EVENTS, "GAMEPAD_CONNECTED_EVENT", GAMEPAD_CONNECTED_EVENT), _defineProperty$1(_INPUT_EVENTS, "GAMEPAD_DISCONNECTED_EVENT", GAMEPAD_DISCONNECTED_EVENT), _defineProperty$1(_INPUT_EVENTS, "BUTTON_PRESSED_EVENT", BUTTON_PRESSED_EVENT), _defineProperty$1(_INPUT_EVENTS, "BUTTON_RELEASED_EVENT", BUTTON_RELEASED_EVENT), _defineProperty$1(_INPUT_EVENTS, "AXIS_CHANGE_EVENT", AXIS_CHANGE_EVENT), _INPUT_EVENTS);
@@ -58484,6 +58496,7 @@ var Input = /*#__PURE__*/function (_EventDispatcher) {
58484
58496
  this.keyboard.enable(options);
58485
58497
  this.keyboard.addEventListener(KEY_DOWN, this.propagate.bind(this));
58486
58498
  this.keyboard.addEventListener(KEY_UP, this.propagate.bind(this));
58499
+ this.keyboard.addEventListener(KEY_COMBO, this.propagate.bind(this));
58487
58500
  }
58488
58501
  }, {
58489
58502
  key: "enableMouse",
@@ -60025,19 +60038,26 @@ var prepareModel = function prepareModel(model) {
60025
60038
  return model;
60026
60039
  };
60027
60040
  var serializeVector = function serializeVector(vector) {
60028
- return {
60041
+ return vector && {
60029
60042
  x: vector.x,
60030
60043
  y: vector.y,
60031
60044
  z: vector.z
60032
60045
  };
60033
60046
  };
60034
60047
  var serializeQuaternion = function serializeQuaternion(quaternion) {
60035
- return {
60048
+ return quaternion && {
60036
60049
  x: quaternion.x,
60037
60050
  y: quaternion.y,
60038
60051
  z: quaternion.z,
60039
60052
  w: quaternion.w
60040
60053
  };
60054
+ };
60055
+ var serializeColor = function serializeColor(color) {
60056
+ return color && {
60057
+ r: color.r,
60058
+ g: color.g,
60059
+ b: color.b
60060
+ };
60041
60061
  };var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
60042
60062
 
60043
60063
  function getAugmentedNamespace(n) {
@@ -61888,6 +61908,7 @@ var Element$1 = /*#__PURE__*/function (_Entity) {
61888
61908
  var parseJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
61889
61909
 
61890
61910
  if (this.isSerializable()) {
61911
+ var color = this.getColor();
61891
61912
  return _objectSpread2$1(_objectSpread2$1({}, _get(_getPrototypeOf(Element.prototype), "toJSON", this).call(this, parseJSON)), {}, {
61892
61913
  physics: {
61893
61914
  state: this.getPhysicsState(),
@@ -61897,7 +61918,7 @@ var Element$1 = /*#__PURE__*/function (_Entity) {
61897
61918
  textures: this.textures,
61898
61919
  materialType: this.getMaterialType(),
61899
61920
  opacity: this.opacity,
61900
- color: this.getColor()
61921
+ color: parseJSON ? serializeColor(color) : color
61901
61922
  });
61902
61923
  }
61903
61924
  }
@@ -61984,8 +62005,8 @@ var Element$1 = /*#__PURE__*/function (_Entity) {
61984
62005
  key: "randomColor",
61985
62006
  value: function randomColor() {
61986
62007
  var asNumber = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
61987
- var letters = '0123456789ABCDEF'.split('');
61988
- var color = '';
62008
+ var letters = "0123456789ABCDEF".split("");
62009
+ var color = "";
61989
62010
 
61990
62011
  for (var i = 0; i < 6; i++) {
61991
62012
  color += letters[Math.floor(Math.random() * 16)];
@@ -91610,9 +91631,10 @@ var addHitBox = function addHitBox(element) {
91610
91631
  key: "toJSON",
91611
91632
  value: function toJSON() {
91612
91633
  var parseJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
91634
+ var color = this.getColor();
91613
91635
  return _objectSpread2$1(_objectSpread2$1({}, _get(_getPrototypeOf(Light.prototype), "toJSON", this).call(this, parseJSON)), {}, {
91614
91636
  type: this.getEntityType(),
91615
- color: this.getColor(),
91637
+ color: parseJSON ? serializeColor(color) : color,
91616
91638
  intensity: this.getIntensity(),
91617
91639
  name: this.getName(),
91618
91640
  castShadow: this.getCastShadow()
@@ -91951,7 +91973,7 @@ var SunLight = /*#__PURE__*/function (_Light) {
91951
91973
  value: function toJSON() {
91952
91974
  var parseJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
91953
91975
  return _objectSpread2$1(_objectSpread2$1({}, _get(_getPrototypeOf(SunLight.prototype), "toJSON", this).call(this, parseJSON)), {}, {
91954
- target: this.getTarget(),
91976
+ target: parseJSON ? this.getTarget().toJSON(parseJSON) : this.getTarget(),
91955
91977
  bias: this.getBias(),
91956
91978
  mapSize: this.getMapSize(),
91957
91979
  shadowCamera: _objectSpread2$1(_objectSpread2$1({}, this.getShadowCameraNearFar()), {}, {
@@ -92481,7 +92503,7 @@ var SpotLight = /*#__PURE__*/function (_Light) {
92481
92503
  value: function toJSON() {
92482
92504
  var parseJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
92483
92505
  return _objectSpread2$1(_objectSpread2$1({}, _get(_getPrototypeOf(SpotLight.prototype), "toJSON", this).call(this, parseJSON)), {}, {
92484
- target: this.getTarget(),
92506
+ target: parseJSON ? this.getTarget().toJSON(parseJSON) : this.getTarget(),
92485
92507
  distance: this.getDistance(),
92486
92508
  decay: this.getDecay(),
92487
92509
  bias: this.getBias(),
@@ -92727,9 +92749,10 @@ var SpotLight = /*#__PURE__*/function (_Light) {
92727
92749
  key: "toJSON",
92728
92750
  value: function toJSON() {
92729
92751
  var parseJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
92752
+ var color = this.getColor();
92730
92753
  return _objectSpread2$1(_objectSpread2$1({}, _get(_getPrototypeOf(Light.prototype), "toJSON", this).call(this, parseJSON)), {}, {
92731
92754
  type: this.getEntityType(),
92732
- color: this.getColor(),
92755
+ color: parseJSON ? serializeColor(color) : color,
92733
92756
  intensity: this.getIntensity(),
92734
92757
  name: this.getName(),
92735
92758
  castShadow: this.getCastShadow()
@@ -92859,8 +92882,9 @@ var HemisphereLight = /*#__PURE__*/function (_Light) {
92859
92882
  key: "toJSON",
92860
92883
  value: function toJSON() {
92861
92884
  var parseJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
92885
+ var color = this.getColor();
92862
92886
  return _objectSpread2$1(_objectSpread2$1({}, _get(_getPrototypeOf(HemisphereLight.prototype), "toJSON", this).call(this, parseJSON)), {}, {
92863
- color: this.getColor()
92887
+ color: parseJSON ? serializeColor(color) : color
92864
92888
  });
92865
92889
  }
92866
92890
  }]);
@@ -94177,41 +94201,41 @@ var Water = /*#__PURE__*/function (_Element) {
94177
94201
  }, {
94178
94202
  key: "vertexShader",
94179
94203
  value: function vertexShader() {
94180
- return ['uniform vec3 sunPosition;', 'uniform float rayleigh;', 'uniform float turbidity;', 'uniform float mieCoefficient;', 'varying vec3 vWorldPosition;', 'varying vec3 vSunDirection;', 'varying float vSunfade;', 'varying vec3 vBetaR;', 'varying vec3 vBetaM;', 'varying float vSunE;', 'const vec3 up = vec3( 0.0, 1.0, 0.0 );', // constants for atmospheric scattering
94181
- 'const float e = 2.71828182845904523536028747135266249775724709369995957;', 'const float pi = 3.141592653589793238462643383279502884197169;', // wavelength of used primaries, according to preetham
94182
- 'const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );', // this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:
94204
+ return ["uniform vec3 sunPosition;", "uniform float rayleigh;", "uniform float turbidity;", "uniform float mieCoefficient;", "varying vec3 vWorldPosition;", "varying vec3 vSunDirection;", "varying float vSunfade;", "varying vec3 vBetaR;", "varying vec3 vBetaM;", "varying float vSunE;", "const vec3 up = vec3( 0.0, 1.0, 0.0 );", // constants for atmospheric scattering
94205
+ "const float e = 2.71828182845904523536028747135266249775724709369995957;", "const float pi = 3.141592653589793238462643383279502884197169;", // wavelength of used primaries, according to preetham
94206
+ "const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );", // this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:
94183
94207
  // (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))
94184
- 'const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );', // mie stuff
94208
+ "const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );", // mie stuff
94185
94209
  // K coefficient for the primaries
94186
- 'const float v = 4.0;', 'const vec3 K = vec3( 0.686, 0.678, 0.666 );', // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K
94187
- 'const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );', // earth shadow hack
94210
+ "const float v = 4.0;", "const vec3 K = vec3( 0.686, 0.678, 0.666 );", // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K
94211
+ "const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );", // earth shadow hack
94188
94212
  // cutoffAngle = pi / 1.95;
94189
- 'const float cutoffAngle = 1.6110731556870734;', 'const float steepness = 1.5;', 'const float EE = 1000.0;', 'float sunIntensity( float zenithAngleCos ) {', ' zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );', ' return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );', '}', 'vec3 totalMie( float T ) {', ' float c = ( 0.2 * T ) * 10E-18;', ' return 0.434 * c * MieConst;', '}', 'void main() {', ' vec4 worldPosition = modelMatrix * vec4( position, 1.0 );', ' vWorldPosition = worldPosition.xyz;', ' gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );', ' gl_Position.z = gl_Position.w;', // set z to camera.far
94190
- ' vSunDirection = normalize( sunPosition );', ' vSunE = sunIntensity( dot( vSunDirection, up ) );', ' vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );', ' float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );', // extinction (absorbtion + out scattering)
94213
+ "const float cutoffAngle = 1.6110731556870734;", "const float steepness = 1.5;", "const float EE = 1000.0;", "float sunIntensity( float zenithAngleCos ) {", " zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );", " return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );", "}", "vec3 totalMie( float T ) {", " float c = ( 0.2 * T ) * 10E-18;", " return 0.434 * c * MieConst;", "}", "void main() {", " vec4 worldPosition = modelMatrix * vec4( position, 1.0 );", " vWorldPosition = worldPosition.xyz;", " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", " gl_Position.z = gl_Position.w;", // set z to camera.far
94214
+ " vSunDirection = normalize( sunPosition );", " vSunE = sunIntensity( dot( vSunDirection, up ) );", " vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );", " float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );", // extinction (absorbtion + out scattering)
94191
94215
  // rayleigh coefficients
94192
- ' vBetaR = totalRayleigh * rayleighCoefficient;', // mie coefficients
94193
- ' vBetaM = totalMie( turbidity ) * mieCoefficient;', '}'].join('\n');
94216
+ " vBetaR = totalRayleigh * rayleighCoefficient;", // mie coefficients
94217
+ " vBetaM = totalMie( turbidity ) * mieCoefficient;", "}"].join("\n");
94194
94218
  }
94195
94219
  }, {
94196
94220
  key: "fragmentShader",
94197
94221
  value: function fragmentShader() {
94198
- return ['varying vec3 vWorldPosition;', 'varying vec3 vSunDirection;', 'varying float vSunfade;', 'varying vec3 vBetaR;', 'varying vec3 vBetaM;', 'varying float vSunE;', 'uniform float luminance;', 'uniform float mieDirectionalG;', 'const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );', // constants for atmospheric scattering
94199
- 'const float pi = 3.141592653589793238462643383279502884197169;', 'const float n = 1.0003;', // refractive index of air
94200
- 'const float N = 2.545E25;', // number of molecules per unit volume for air at
94222
+ return ["varying vec3 vWorldPosition;", "varying vec3 vSunDirection;", "varying float vSunfade;", "varying vec3 vBetaR;", "varying vec3 vBetaM;", "varying float vSunE;", "uniform float luminance;", "uniform float mieDirectionalG;", "const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );", // constants for atmospheric scattering
94223
+ "const float pi = 3.141592653589793238462643383279502884197169;", "const float n = 1.0003;", // refractive index of air
94224
+ "const float N = 2.545E25;", // number of molecules per unit volume for air at
94201
94225
  // 288.15K and 1013mb (sea level -45 celsius)
94202
94226
  // optical length at zenith for molecules
94203
- 'const float rayleighZenithLength = 8.4E3;', 'const float mieZenithLength = 1.25E3;', 'const vec3 up = vec3( 0.0, 1.0, 0.0 );', // 66 arc seconds -> degrees, and the cosine of that
94204
- 'const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;', // 3.0 / ( 16.0 * pi )
94205
- 'const float THREE_OVER_SIXTEENPI = 0.05968310365946075;', // 1.0 / ( 4.0 * pi )
94206
- 'const float ONE_OVER_FOURPI = 0.07957747154594767;', 'float rayleighPhase( float cosTheta ) {', ' return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );', '}', 'float hgPhase( float cosTheta, float g ) {', ' float g2 = pow( g, 2.0 );', ' float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );', ' return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );', '}', // Filmic ToneMapping http://filmicgames.com/archives/75
94207
- 'const float A = 0.15;', 'const float B = 0.50;', 'const float C = 0.10;', 'const float D = 0.20;', 'const float E = 0.02;', 'const float F = 0.30;', 'const float whiteScale = 1.0748724675633854;', // 1.0 / Uncharted2Tonemap(1000.0)
94208
- 'vec3 Uncharted2Tonemap( vec3 x ) {', ' return ( ( x * ( A * x + C * B ) + D * E ) / ( x * ( A * x + B ) + D * F ) ) - E / F;', '}', 'void main() {', // optical length
94227
+ "const float rayleighZenithLength = 8.4E3;", "const float mieZenithLength = 1.25E3;", "const vec3 up = vec3( 0.0, 1.0, 0.0 );", // 66 arc seconds -> degrees, and the cosine of that
94228
+ "const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;", // 3.0 / ( 16.0 * pi )
94229
+ "const float THREE_OVER_SIXTEENPI = 0.05968310365946075;", // 1.0 / ( 4.0 * pi )
94230
+ "const float ONE_OVER_FOURPI = 0.07957747154594767;", "float rayleighPhase( float cosTheta ) {", " return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );", "}", "float hgPhase( float cosTheta, float g ) {", " float g2 = pow( g, 2.0 );", " float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );", " return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );", "}", // Filmic ToneMapping http://filmicgames.com/archives/75
94231
+ "const float A = 0.15;", "const float B = 0.50;", "const float C = 0.10;", "const float D = 0.20;", "const float E = 0.02;", "const float F = 0.30;", "const float whiteScale = 1.0748724675633854;", // 1.0 / Uncharted2Tonemap(1000.0)
94232
+ "vec3 Uncharted2Tonemap( vec3 x ) {", " return ( ( x * ( A * x + C * B ) + D * E ) / ( x * ( A * x + B ) + D * F ) ) - E / F;", "}", "void main() {", // optical length
94209
94233
  // cutoff angle at 90 to avoid singularity in next formula.
94210
- ' float zenithAngle = acos( max( 0.0, dot( up, normalize( vWorldPosition - cameraPos ) ) ) );', ' float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );', ' float sR = rayleighZenithLength * inverse;', ' float sM = mieZenithLength * inverse;', // combined extinction factor
94211
- ' vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );', // in scattering
94212
- ' float cosTheta = dot( normalize( vWorldPosition - cameraPos ), vSunDirection );', ' float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );', ' vec3 betaRTheta = vBetaR * rPhase;', ' float mPhase = hgPhase( cosTheta, mieDirectionalG );', ' vec3 betaMTheta = vBetaM * mPhase;', ' vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );', ' Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );', // nightsky
94213
- ' vec3 direction = normalize( vWorldPosition - cameraPos );', ' float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]', ' float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]', ' vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );', ' vec3 L0 = vec3( 0.1 ) * Fex;', // composition + solar disc
94214
- ' float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );', ' L0 += ( vSunE * 19000.0 * Fex ) * sundisk;', ' vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );', ' vec3 curr = Uncharted2Tonemap( ( log2( 2.0 / pow( luminance, 4.0 ) ) ) * texColor );', ' vec3 color = curr * whiteScale;', ' vec3 retColor = pow( color, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );', ' gl_FragColor = vec4( retColor, 1.0 );', '}'].join('\n');
94234
+ " float zenithAngle = acos( max( 0.0, dot( up, normalize( vWorldPosition - cameraPos ) ) ) );", " float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );", " float sR = rayleighZenithLength * inverse;", " float sM = mieZenithLength * inverse;", // combined extinction factor
94235
+ " vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );", // in scattering
94236
+ " float cosTheta = dot( normalize( vWorldPosition - cameraPos ), vSunDirection );", " float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );", " vec3 betaRTheta = vBetaR * rPhase;", " float mPhase = hgPhase( cosTheta, mieDirectionalG );", " vec3 betaMTheta = vBetaM * mPhase;", " vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );", " Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );", // nightsky
94237
+ " vec3 direction = normalize( vWorldPosition - cameraPos );", " float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]", " float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]", " vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );", " vec3 L0 = vec3( 0.1 ) * Fex;", // composition + solar disc
94238
+ " float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );", " L0 += ( vSunE * 19000.0 * Fex ) * sundisk;", " vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );", " vec3 curr = Uncharted2Tonemap( ( log2( 2.0 / pow( luminance, 4.0 ) ) ) * texColor );", " vec3 color = curr * whiteScale;", " vec3 retColor = pow( color, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );", " gl_FragColor = vec4( retColor, 1.0 );", "}"].join("\n");
94215
94239
  }
94216
94240
  }]);
94217
94241
 
@@ -94219,10 +94243,10 @@ var Water = /*#__PURE__*/function (_Element) {
94219
94243
  }();
94220
94244
  var DEFAULT_SCALE = 10000;
94221
94245
  var DEFAULT_TURBIDITY = 10;
94222
- var DEFAULT_RALEIGH = .8;
94246
+ var DEFAULT_RALEIGH = 0.8;
94223
94247
  var DEFAULT_MIE_COEFFICIENT = 0.005;
94224
- var DEFAULT_MIE_DIRECTIONAL_G = .8;
94225
- var DEFAULT_SUN_INCLINATION = .49;
94248
+ var DEFAULT_MIE_DIRECTIONAL_G = 0.8;
94249
+ var DEFAULT_SUN_INCLINATION = 0.49;
94226
94250
  var DEFAULT_SUN_AZIMUTH = 0.205;
94227
94251
  var DEFAULT_SUN_DISTANCE = 100;
94228
94252
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mage-engine",
3
- "version": "3.23.8",
3
+ "version": "3.23.10",
4
4
  "description": "A WebGL Javascript Game Engine, built on top of THREE.js and many other libraries.",
5
5
  "main": "dist/mage.js",
6
6
  "author": {