mirror of
https://github.com/tengge1/ShadowEditor.git
synced 2026-01-25 15:08:11 +00:00
配置、相机、脚本序列化。
This commit is contained in:
parent
34b78ad955
commit
dd25728f96
11370
ShadowEditor.Web/dist/ShadowEditor.js
vendored
11370
ShadowEditor.Web/dist/ShadowEditor.js
vendored
File diff suppressed because it is too large
Load Diff
@ -13,11 +13,11 @@ function BaseSerializer() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断对象或字符串是否满足转换条件,满足返回true,不满足返回false
|
||||
* 判断对象是否满足转换条件,满足返回true,不满足返回false
|
||||
* @param {*} obj
|
||||
*/
|
||||
BaseSerializer.prototype.filter = function (obj) {
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -25,14 +25,21 @@ BaseSerializer.prototype.filter = function (obj) {
|
||||
* @param {*} obj 对象
|
||||
*/
|
||||
BaseSerializer.prototype.toJSON = function (obj) {
|
||||
return {};
|
||||
var json = {};
|
||||
Object.assign(json, this.metadata);
|
||||
return json;
|
||||
};
|
||||
|
||||
/**
|
||||
* json转对象
|
||||
* @param {*} json json字符串
|
||||
* @param {*} json json对象
|
||||
* @param {*} parent 父对象
|
||||
*/
|
||||
BaseSerializer.prototype.fromJSON = function (json) {
|
||||
BaseSerializer.prototype.fromJSON = function (json, parent) {
|
||||
if (parent) {
|
||||
return parent;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
|
||||
@ -52,25 +52,23 @@ Converter.prototype = Object.create(BaseSerializer.prototype);
|
||||
Converter.prototype.constructor = Converter;
|
||||
|
||||
Converter.prototype.filter = function (obj) {
|
||||
return true;
|
||||
return false;
|
||||
};
|
||||
|
||||
Converter.prototype.toJSON = function (app) {
|
||||
var list = [];
|
||||
|
||||
// 配置
|
||||
var config = {
|
||||
Metadata: Serializers.Config.Metadata,
|
||||
Object: Serializers.Config.Serializer.toJSON(app.editor.config),
|
||||
};
|
||||
var config = (new ConfigSerializer()).toJSON(app);
|
||||
list.push(config);
|
||||
|
||||
// 相机
|
||||
var camera = {
|
||||
Metadata: Serializers.PerspectiveCamera.Metadata,
|
||||
Object: Serializers.PerspectiveCamera.Serializer.toJSON(app.editor.camera)
|
||||
};
|
||||
list.push(camera);
|
||||
var camera;
|
||||
if (app.editor.camera instanceof THREE.OrthographicCamera) {
|
||||
camera = (new OrthographicCameraSerializer()).toJSON(app.editor.camera);
|
||||
} else {
|
||||
camera = (new PerspectiveCameraSerializer()).toJSON(app.editor.camera);
|
||||
}
|
||||
|
||||
// 脚本
|
||||
Object.keys(app.editor.scripts).forEach(function (id) {
|
||||
@ -88,17 +86,17 @@ Converter.prototype.toJSON = function (app) {
|
||||
});
|
||||
|
||||
// 场景
|
||||
app.editor.scene.traverse(function (obj) {
|
||||
if (Serializers[obj.constructor.name] != null) {
|
||||
var json = {
|
||||
Metadata: Serializers[obj.constructor.name].Metadata,
|
||||
Object: Serializers[obj.constructor.name].Serializer.toJSON(obj)
|
||||
};
|
||||
list.push(json);
|
||||
} else {
|
||||
console.log(`There is no serializer to serialize ${obj.name}`);
|
||||
}
|
||||
});
|
||||
// app.editor.scene.traverse(function (obj) {
|
||||
// if (Serializers[obj.constructor.name] != null) {
|
||||
// var json = {
|
||||
// Metadata: Serializers[obj.constructor.name].Metadata,
|
||||
// Object: Serializers[obj.constructor.name].Serializer.toJSON(obj)
|
||||
// };
|
||||
// list.push(json);
|
||||
// } else {
|
||||
// console.log(`There is no serializer to serialize ${obj.name}`);
|
||||
// }
|
||||
// });
|
||||
|
||||
return list;
|
||||
};
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
import BaseSerializer from '../BaseSerializer';
|
||||
import Application from '../../Application';
|
||||
|
||||
/**
|
||||
* Object3D序列化器
|
||||
* 配置序列化器
|
||||
*/
|
||||
function ConfigSerializer() {
|
||||
BaseSerializer.call(this);
|
||||
@ -10,13 +11,26 @@ function ConfigSerializer() {
|
||||
ConfigSerializer.prototype = Object.create(BaseSerializer.prototype);
|
||||
ConfigSerializer.prototype.constructor = ConfigSerializer;
|
||||
|
||||
ConfigSerializer.prototype.toJSON = function (obj) {
|
||||
var json = obj.toJSON();
|
||||
ConfigSerializer.prototype.filter = function (obj) {
|
||||
if (obj instanceof Application) {
|
||||
return true;
|
||||
} else if (obj.metadata && obj.metadata.generator === this.constructor.name) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
ConfigSerializer.prototype.toJSON = function (app) {
|
||||
var json = BaseSerializer.prototype.toJSON(app);
|
||||
Object.assign(json, app.editor.config.toJSON());
|
||||
return json;
|
||||
};
|
||||
|
||||
ConfigSerializer.prototype.fromJSON = function (json) {
|
||||
|
||||
ConfigSerializer.prototype.fromJSON = function (app, json) {
|
||||
Object.keys(json).forEach(key => {
|
||||
app.editor.config.setKey(key, json[key]);
|
||||
});
|
||||
};
|
||||
|
||||
export default ConfigSerializer;
|
||||
@ -1,4 +1,5 @@
|
||||
import BaseSerializer from '../BaseSerializer';
|
||||
import Application from '../../Application';
|
||||
|
||||
/**
|
||||
* Object3D序列化器
|
||||
@ -10,12 +11,46 @@ function ScriptSerializer() {
|
||||
ScriptSerializer.prototype = Object.create(BaseSerializer.prototype);
|
||||
ScriptSerializer.prototype.constructor = ScriptSerializer;
|
||||
|
||||
ScriptSerializer.prototype.toJSON = function (obj) {
|
||||
return obj;
|
||||
ScriptSerializer.prototype.filter = function (obj) {
|
||||
if (obj instanceof Application) {
|
||||
return true;
|
||||
} else if (obj.metadata && obj.metadata.generator === this.constructor.name) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
ScriptSerializer.prototype.fromJSON = function (json) {
|
||||
ScriptSerializer.prototype.toJSON = function (app) {
|
||||
var list = [];
|
||||
|
||||
Object.keys(app.editor.scripts).forEach(id => {
|
||||
var json = BaseSerializer.prototype.toJSON(app);
|
||||
|
||||
var name = app.editor.scripts[id].name;
|
||||
var source = app.editor.scripts[id].source;
|
||||
|
||||
Object.assign(json, {
|
||||
id: id,
|
||||
name: name,
|
||||
source: source
|
||||
});
|
||||
|
||||
list.push(json);
|
||||
});
|
||||
|
||||
return list;
|
||||
};
|
||||
|
||||
ScriptSerializer.prototype.fromJSON = function (app, json) {
|
||||
app.editor.scripts = {};
|
||||
|
||||
json.forEach(n => {
|
||||
app.editor.scripts[id] = {
|
||||
name: n.name,
|
||||
source: n.source
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
export default ScriptSerializer;
|
||||
@ -11,6 +11,16 @@ function CameraSerializer() {
|
||||
CameraSerializer.prototype = Object.create(BaseSerializer.prototype);
|
||||
CameraSerializer.prototype.constructor = CameraSerializer;
|
||||
|
||||
CameraSerializer.prototype.filter = function (obj) {
|
||||
if (obj instanceof THREE.Camera) {
|
||||
return true;
|
||||
} else if (obj.metadata && obj.metadata.generator === this.constructor.name) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
CameraSerializer.prototype.toJSON = function (obj) {
|
||||
var json = Object3DSerializer.prototype.toJSON(obj);
|
||||
|
||||
@ -20,8 +30,12 @@ CameraSerializer.prototype.toJSON = function (obj) {
|
||||
return json;
|
||||
};
|
||||
|
||||
CameraSerializer.prototype.fromJSON = function (json) {
|
||||
CameraSerializer.prototype.fromJSON = function (json, parent) {
|
||||
var obj = parent === undefined ? new THREE.Camera() : parent;
|
||||
|
||||
// TODO: Three.Camera反序列化
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
export default CameraSerializer;
|
||||
@ -11,6 +11,16 @@ function OrthographicCameraSerializer() {
|
||||
OrthographicCameraSerializer.prototype = Object.create(BaseSerializer.prototype);
|
||||
OrthographicCameraSerializer.prototype.constructor = OrthographicCameraSerializer;
|
||||
|
||||
OrthographicCameraSerializer.prototype.filter = function (obj) {
|
||||
if (obj instanceof THREE.OrthographicCamera) {
|
||||
return true;
|
||||
} else if (obj.metadata && obj.metadata.generator === this.constructor.name) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
OrthographicCameraSerializer.prototype.toJSON = function (obj) {
|
||||
var json = CameraSerializer.prototype.toJSON(obj);
|
||||
|
||||
@ -26,8 +36,12 @@ OrthographicCameraSerializer.prototype.toJSON = function (obj) {
|
||||
return json;
|
||||
};
|
||||
|
||||
OrthographicCameraSerializer.prototype.fromJSON = function (json) {
|
||||
OrthographicCameraSerializer.prototype.fromJSON = function (json, parent) {
|
||||
var obj = parent === undefined ? new THREE.OrthographicCamera() : parent;
|
||||
|
||||
// TODO: THREE.OrthographicCamera反序列化
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
export default OrthographicCameraSerializer;
|
||||
@ -11,6 +11,16 @@ function PerspectiveCameraSerializer() {
|
||||
PerspectiveCameraSerializer.prototype = Object.create(BaseSerializer.prototype);
|
||||
PerspectiveCameraSerializer.prototype.constructor = PerspectiveCameraSerializer;
|
||||
|
||||
PerspectiveCameraSerializer.prototype.filter = function (obj) {
|
||||
if (obj instanceof THREE.PerspectiveCamera) {
|
||||
return true;
|
||||
} else if (obj.metadata && obj.metadata.generator === this.constructor.name) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
PerspectiveCameraSerializer.prototype.toJSON = function (obj) {
|
||||
var json = CameraSerializer.prototype.toJSON(obj);
|
||||
|
||||
@ -27,8 +37,12 @@ PerspectiveCameraSerializer.prototype.toJSON = function (obj) {
|
||||
return json;
|
||||
};
|
||||
|
||||
PerspectiveCameraSerializer.prototype.fromJSON = function (json) {
|
||||
PerspectiveCameraSerializer.prototype.fromJSON = function (json, parent) {
|
||||
var obj = parent === undefined ? new THREE.PerspectiveCamera() : parent;
|
||||
|
||||
// TODO: THREE.PerspectiveCamera 反序列化
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
export default PerspectiveCameraSerializer;
|
||||
@ -10,13 +10,23 @@ function Object3DSerializer() {
|
||||
Object3DSerializer.prototype = Object.create(BaseSerializer.prototype);
|
||||
Object3DSerializer.prototype.constructor = Object3DSerializer;
|
||||
|
||||
Object3DSerializer.prototype.filter = function (obj) {
|
||||
if (obj instanceof THREE.Object3D) {
|
||||
return true;
|
||||
} else if (obj.metadata && obj.metadata.generator === this.constructor.name) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
Object3DSerializer.prototype.toJSON = function (obj) {
|
||||
var json = BaseSerializer.prototype.toJSON(obj);
|
||||
|
||||
json.type = obj.type;
|
||||
json.uuid = obj.uuid;
|
||||
json.castShadow = obj.castShadow;
|
||||
json.children = obj.children.map(function (child) {
|
||||
json.children = obj.children.map(child => {
|
||||
return child.uuid;
|
||||
});
|
||||
json.frustumCulled = obj.frustumCulled;
|
||||
@ -46,8 +56,12 @@ Object3DSerializer.prototype.toJSON = function (obj) {
|
||||
return json;
|
||||
};
|
||||
|
||||
Object3DSerializer.prototype.fromJSON = function (json) {
|
||||
Object3DSerializer.prototype.fromJSON = function (json, parent) {
|
||||
var obj = parent === undefined ? THREE.Object3D : parent;
|
||||
|
||||
// TODO: Object3D反序列化
|
||||
|
||||
return obj;
|
||||
};
|
||||
|
||||
export default Object3DSerializer;
|
||||
Loading…
x
Reference in New Issue
Block a user