mage-engine 3.23.38 → 3.23.39

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 +107 -11
  2. package/package.json +1 -1
package/dist/mage.js CHANGED
@@ -54641,7 +54641,8 @@ let Keyboard = /*#__PURE__*/function (_EventDispatcher) {
54641
54641
  TYPE: "CAMERA",
54642
54642
  SUBTYPES: {
54643
54643
  DEFAULT: "CAMERA.SUBTYPE.DEFAULT",
54644
- MAIN: "CAMERA.SUBTYPE.MAIN"
54644
+ MAIN: "CAMERA.SUBTYPE.MAIN",
54645
+ GAME: "CAMERA.SUBTYPE.GAME"
54645
54646
  }
54646
54647
  },
54647
54648
  MESH: {
@@ -54736,7 +54737,7 @@ let Keyboard = /*#__PURE__*/function (_EventDispatcher) {
54736
54737
  UNKNOWN: "UNKNOWN"
54737
54738
  };
54738
54739
  const FLAT_ENTITY_TYPES = [ENTITY_TYPES.SCENE.TYPE, ENTITY_TYPES.CAMERA.TYPE, ENTITY_TYPES.MESH.TYPE, ENTITY_TYPES.LABEL.TYPE, ENTITY_TYPES.LIGHT.TYPE, ENTITY_TYPES.AUDIO.TYPE, ENTITY_TYPES.MODEL.TYPE, ENTITY_TYPES.SPRITE.TYPE, ENTITY_TYPES.PARTICLE.TYPE, ENTITY_TYPES.SCENERY.TYPE, ENTITY_TYPES.HELPER.TYPE, ENTITY_TYPES.UNKNOWN];
54739
- const FLAT_ENTITY_SUBTYPES = [ENTITY_TYPES.SCENE.SUBTYPES.DEFAULT, ENTITY_TYPES.CAMERA.SUBTYPES.DEFAULT, ENTITY_TYPES.CAMERA.SUBTYPES.MAIN, ENTITY_TYPES.MESH.SUBTYPES.DEFAULT, ENTITY_TYPES.MESH.SUBTYPES.BOX, ENTITY_TYPES.MESH.SUBTYPES.SPHERE, ENTITY_TYPES.MESH.SUBTYPES.PLANE, ENTITY_TYPES.MESH.SUBTYPES.CYLINDER, ENTITY_TYPES.MESH.SUBTYPES.CONE, ENTITY_TYPES.MESH.SUBTYPES.CUBE, ENTITY_TYPES.MESH.SUBTYPES.LINE, ENTITY_TYPES.MESH.SUBTYPES.CURVE_LINE, ENTITY_TYPES.MESH.SUBTYPES.AXES, ENTITY_TYPES.MESH.SUBTYPES.GRID, ENTITY_TYPES.MESH.SUBTYPES.TARGET, ENTITY_TYPES.LABEL.SUBTYPES.DEFAULT, ENTITY_TYPES.LIGHT.SUBTYPES.DEFAULT, ENTITY_TYPES.LIGHT.SUBTYPES.AMBIENT, ENTITY_TYPES.LIGHT.SUBTYPES.SUN, ENTITY_TYPES.LIGHT.SUBTYPES.HEMISPHERE, ENTITY_TYPES.LIGHT.SUBTYPES.POINT, ENTITY_TYPES.LIGHT.SUBTYPES.SPOT, ENTITY_TYPES.AUDIO.SUBTYPES.DEFAULT, ENTITY_TYPES.AUDIO.SUBTYPES.DIRECTIONAL, ENTITY_TYPES.AUDIO.SUBTYPES.AMBIENT, ENTITY_TYPES.MODEL.SUBTYPES.DEFAULT, ENTITY_TYPES.SPRITE.SUBTYPES.DEFAULT, ENTITY_TYPES.SPRITE.SUBTYPES.ANIMATED_SPRITE, ENTITY_TYPES.PARTICLE.SUBTYPES.DEFAULT, ENTITY_TYPES.PARTICLE.SUBTYPES.EMITTER, ENTITY_TYPES.PARTICLE.SUBTYPES.SYSTEM, ENTITY_TYPES.PARTICLE.SUBTYPES.EMITTER_GROUP, ENTITY_TYPES.PARTICLE.SUBTYPES.PROTON_EMITTER, ENTITY_TYPES.SCENERY.SUBTYPES.DEFAULT, ENTITY_TYPES.SCENERY.SUBTYPES.SKY, ENTITY_TYPES.SCENERY.SUBTYPES.SKYBOX, ENTITY_TYPES.HELPER.SUBTYPES.GRID, ENTITY_TYPES.HELPER.SUBTYPES.AXES, ENTITY_TYPES.HELPER.SUBTYPES.HELPER_SPRITE];
54740
+ const FLAT_ENTITY_SUBTYPES = [ENTITY_TYPES.SCENE.SUBTYPES.DEFAULT, ENTITY_TYPES.CAMERA.SUBTYPES.DEFAULT, ENTITY_TYPES.CAMERA.SUBTYPES.MAIN, ENTITY_TYPES.CAMERA.SUBTYPES.GAME, ENTITY_TYPES.MESH.SUBTYPES.DEFAULT, ENTITY_TYPES.MESH.SUBTYPES.BOX, ENTITY_TYPES.MESH.SUBTYPES.SPHERE, ENTITY_TYPES.MESH.SUBTYPES.PLANE, ENTITY_TYPES.MESH.SUBTYPES.CYLINDER, ENTITY_TYPES.MESH.SUBTYPES.CONE, ENTITY_TYPES.MESH.SUBTYPES.CUBE, ENTITY_TYPES.MESH.SUBTYPES.LINE, ENTITY_TYPES.MESH.SUBTYPES.CURVE_LINE, ENTITY_TYPES.MESH.SUBTYPES.AXES, ENTITY_TYPES.MESH.SUBTYPES.GRID, ENTITY_TYPES.MESH.SUBTYPES.TARGET, ENTITY_TYPES.LABEL.SUBTYPES.DEFAULT, ENTITY_TYPES.LIGHT.SUBTYPES.DEFAULT, ENTITY_TYPES.LIGHT.SUBTYPES.AMBIENT, ENTITY_TYPES.LIGHT.SUBTYPES.SUN, ENTITY_TYPES.LIGHT.SUBTYPES.HEMISPHERE, ENTITY_TYPES.LIGHT.SUBTYPES.POINT, ENTITY_TYPES.LIGHT.SUBTYPES.SPOT, ENTITY_TYPES.AUDIO.SUBTYPES.DEFAULT, ENTITY_TYPES.AUDIO.SUBTYPES.DIRECTIONAL, ENTITY_TYPES.AUDIO.SUBTYPES.AMBIENT, ENTITY_TYPES.MODEL.SUBTYPES.DEFAULT, ENTITY_TYPES.SPRITE.SUBTYPES.DEFAULT, ENTITY_TYPES.SPRITE.SUBTYPES.ANIMATED_SPRITE, ENTITY_TYPES.PARTICLE.SUBTYPES.DEFAULT, ENTITY_TYPES.PARTICLE.SUBTYPES.EMITTER, ENTITY_TYPES.PARTICLE.SUBTYPES.SYSTEM, ENTITY_TYPES.PARTICLE.SUBTYPES.EMITTER_GROUP, ENTITY_TYPES.PARTICLE.SUBTYPES.PROTON_EMITTER, ENTITY_TYPES.SCENERY.SUBTYPES.DEFAULT, ENTITY_TYPES.SCENERY.SUBTYPES.SKY, ENTITY_TYPES.SCENERY.SUBTYPES.SKYBOX, ENTITY_TYPES.HELPER.SUBTYPES.GRID, ENTITY_TYPES.HELPER.SUBTYPES.AXES, ENTITY_TYPES.HELPER.SUBTYPES.HELPER_SPRITE];
54740
54741
  const ENTITY_EVENTS = {
54741
54742
  DISPOSE: "DISPOSE",
54742
54743
  STATE_MACHINE: {
@@ -56793,9 +56794,12 @@ var Physics$1 = new Physics();let Scene = /*#__PURE__*/function () {
56793
56794
  key: "getHierarchy",
56794
56795
  value: function getHierarchy() {
56795
56796
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
56797
+ const camera = this.getCamera(); // Only include camera in hierarchy if it's serializable (scene camera is not)
56798
+
56799
+ const cameraChildren = camera && camera.isSerializable() ? [camera.getHierarchy(options)] : [];
56796
56800
  return [{
56797
56801
  element: this.toJSON(options.parseJSON),
56798
- children: [this.getCamera().getHierarchy(options), ...this.elements.filter(e => !e.hasParent() && !e.isHelper() && e.isSerializable()).map(e => e.getHierarchy(options))]
56802
+ children: [...cameraChildren, ...this.elements.filter(e => !e.hasParent() && !e.isHelper() && e.isSerializable()).map(e => e.getHierarchy(options))]
56799
56803
  }];
56800
56804
  }
56801
56805
  }, {
@@ -58135,7 +58139,7 @@ function applyMiddleware() {
58135
58139
 
58136
58140
  var thunk = createThunkMiddleware();
58137
58141
  thunk.withExtraArgument = createThunkMiddleware;var name = "mage-engine";
58138
- var version$1 = "3.23.38";
58142
+ var version$1 = "3.23.39";
58139
58143
  var description = "A WebGL Javascript Game Engine, built on top of THREE.js and many other libraries.";
58140
58144
  var main = "dist/mage.js";
58141
58145
  var author$1 = {
@@ -63006,12 +63010,16 @@ let Element$1 = /*#__PURE__*/function (_Entity) {
63006
63010
  fov = Config$1.camera().fov,
63007
63011
  ratio = Config$1.screen().ratio,
63008
63012
  near = Config$1.camera().near,
63009
- far = Config$1.camera().far
63013
+ far = Config$1.camera().far,
63014
+ serializable = true
63010
63015
  } = options;
63011
63016
  _this = _super.call(this, {
63012
- name
63017
+ name,
63018
+ serializable
63013
63019
  });
63014
- _this.options = options;
63020
+
63021
+ _this.extendOptions(options);
63022
+
63015
63023
  const body = new PerspectiveCamera(fov, ratio, near, far);
63016
63024
 
63017
63025
  _this.setBody({
@@ -63058,6 +63066,58 @@ let Element$1 = /*#__PURE__*/function (_Entity) {
63058
63066
  } = position;
63059
63067
  this.body.lookAt(x, y, z);
63060
63068
  }
63069
+ }, {
63070
+ key: "getFov",
63071
+ value: function getFov() {
63072
+ return this.getBody().fov;
63073
+ }
63074
+ }, {
63075
+ key: "setFov",
63076
+ value: function setFov(fov) {
63077
+ const num = Number(fov);
63078
+ const numericFov = Number.isFinite(num) ? num : 75;
63079
+ this.getBody().fov = numericFov;
63080
+ this.getBody().updateProjectionMatrix();
63081
+ }
63082
+ }, {
63083
+ key: "getNear",
63084
+ value: function getNear() {
63085
+ return this.getBody().near;
63086
+ }
63087
+ }, {
63088
+ key: "setNear",
63089
+ value: function setNear(near) {
63090
+ const num = Number(near);
63091
+ const numericNear = Number.isFinite(num) ? num : 0.1;
63092
+ this.getBody().near = numericNear;
63093
+ this.getBody().updateProjectionMatrix();
63094
+ }
63095
+ }, {
63096
+ key: "getFar",
63097
+ value: function getFar() {
63098
+ return this.getBody().far;
63099
+ }
63100
+ }, {
63101
+ key: "setFar",
63102
+ value: function setFar(far) {
63103
+ const num = Number(far);
63104
+ const numericFar = Number.isFinite(num) ? num : 3000000;
63105
+ this.getBody().far = numericFar;
63106
+ this.getBody().updateProjectionMatrix();
63107
+ }
63108
+ }, {
63109
+ key: "toJSON",
63110
+ value: function toJSON() {
63111
+ let parseJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
63112
+
63113
+ if (this.isSerializable()) {
63114
+ return { ..._get(_getPrototypeOf(Camera.prototype), "toJSON", this).call(this, parseJSON),
63115
+ fov: this.getFov(),
63116
+ near: this.getNear(),
63117
+ far: this.getFar()
63118
+ };
63119
+ }
63120
+ }
63061
63121
  }]);
63062
63122
 
63063
63123
  return Camera;
@@ -91145,8 +91205,11 @@ let Level = /*#__PURE__*/function (_EventDispatcher) {
91145
91205
  _defineProperty$1(_assertThisInitialized(_this), "cancelNextAnimationFrame", () => cancelAnimationFrame(_this.requestAnimationFrameId));
91146
91206
 
91147
91207
  _defineProperty$1(_assertThisInitialized(_this), "init", () => {
91148
- Scene$1.create(_this.getName());
91149
- Scene$1.createCamera(new Camera());
91208
+ Scene$1.create(_this.getName()); // Scene camera is for editor navigation, not serializable
91209
+
91210
+ Scene$1.createCamera(new Camera({
91211
+ serializable: false
91212
+ }));
91150
91213
  Physics$1.init().then(() => {
91151
91214
  Particles$1.init();
91152
91215
  PostProcessing$1.init();
@@ -94131,10 +94194,43 @@ let Sky = /*#__PURE__*/function (_Element) {
94131
94194
  elements = [],
94132
94195
  lights = [],
94133
94196
  audio = [],
94134
- sounds = []
94197
+ sounds = [],
94198
+ cameras = []
94135
94199
  } = data; // Support both 'audio' and 'sounds' keys for backwards compatibility
94136
94200
 
94137
- const allSounds = [...audio, ...sounds]; // Use for...of to properly await async completeElementCreation calls
94201
+ const allSounds = [...audio, ...sounds]; // Process cameras - create game camera entity and apply settings to scene camera
94202
+
94203
+ for (const cameraData of cameras) {
94204
+ if (cameraData.entitySubType === ENTITY_TYPES.CAMERA.SUBTYPES.GAME) {
94205
+ // Create a Camera entity that will appear in the hierarchy (for editor)
94206
+ const gameCamera = new Camera({
94207
+ name: cameraData.name || "Game Camera",
94208
+ fov: cameraData.fov || 75,
94209
+ near: cameraData.near || 0.1,
94210
+ far: cameraData.far || 3000000,
94211
+ serializable: true
94212
+ });
94213
+ gameCamera.setEntitySubtype(ENTITY_TYPES.CAMERA.SUBTYPES.GAME); // Set position and rotation
94214
+
94215
+ if (cameraData.position) gameCamera.setPosition(cameraData.position);
94216
+ if (cameraData.rotation) gameCamera.setRotation(cameraData.rotation); // Set uuid and name for persistence
94217
+
94218
+ if (cameraData.uuid) gameCamera.setUuid(cameraData.uuid);
94219
+ if (cameraData.name) gameCamera.setName(cameraData.name); // Add tags for selectability in editor
94220
+
94221
+ if (cameraData.tags) gameCamera.addTags(cameraData.tags); // Add to Scene.elements so it appears in hierarchy
94222
+
94223
+ Scene$1.add(gameCamera.getBody(), gameCamera); // Also apply to the scene's rendering camera (for deployed games)
94224
+
94225
+ const sceneCamera = Scene$1.getCamera();
94226
+ if (cameraData.position) sceneCamera.setPosition(cameraData.position);
94227
+ if (cameraData.rotation) sceneCamera.setRotation(cameraData.rotation);
94228
+ if (cameraData.fov) sceneCamera.setFov(cameraData.fov);
94229
+ if (cameraData.near) sceneCamera.setNear(cameraData.near);
94230
+ if (cameraData.far) sceneCamera.setFar(cameraData.far);
94231
+ }
94232
+ } // Use for...of to properly await async completeElementCreation calls
94233
+
94138
94234
 
94139
94235
  for (const elementData of elements) {
94140
94236
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mage-engine",
3
- "version": "3.23.38",
3
+ "version": "3.23.39",
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": {