配置、相机、脚本序列化。

This commit is contained in:
liteng 2018-08-03 22:13:03 +08:00
parent 34b78ad955
commit dd25728f96
9 changed files with 5888 additions and 5670 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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;
};

View File

@ -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;
};

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;