209 lines
4.7 KiB
JavaScript
209 lines
4.7 KiB
JavaScript
|
const Event = require('r3-event');
|
||
|
const Utils = require('r3-utils');
|
||
|
const R3Object = require('r3-r3-object.js');
|
||
|
|
||
|
/**
|
||
|
|
||
|
OPTIONS_START
|
||
|
isPublic=true
|
||
|
applicationMode=Project.APPLICATION_MODE_EDIT
|
||
|
OPTIONS_END
|
||
|
|
||
|
INSTANCE_OPTIONS_MAPPING_START
|
||
|
INSTANCE_OPTIONS_MAPPING_END
|
||
|
|
||
|
LINKED_OBJECTS_START
|
||
|
entities=[Entity]
|
||
|
controls=[Control]
|
||
|
images=[Image]
|
||
|
code=[CustomCode]
|
||
|
LINKED_OBJECTS_END
|
||
|
|
||
|
EXCLUDED_FROM_INSTANCE_OPTIONS_START
|
||
|
EXCLUDED_FROM_INSTANCE_OPTIONS_END
|
||
|
|
||
|
**/
|
||
|
|
||
|
class Project extends R3Object {
|
||
|
|
||
|
//CONSTRUCTOR_EXTENDS_TEMPLATE_START
|
||
|
constructor(options) {
|
||
|
|
||
|
if (Utils.UndefinedOrNull(options)) {
|
||
|
options = {};
|
||
|
}
|
||
|
|
||
|
super(options);
|
||
|
|
||
|
this.emit(Event.OBJECT_CREATED, this);
|
||
|
|
||
|
//OPTIONS_INIT_START
|
||
|
if (typeof options === 'undefined') {
|
||
|
options = {};
|
||
|
}
|
||
|
if (Utils.UndefinedOrNull(options.isPublic)) {
|
||
|
options.isPublic = true;
|
||
|
}
|
||
|
if (Utils.UndefinedOrNull(options.applicationMode)) {
|
||
|
options.applicationMode = Project.APPLICATION_MODE_EDIT;
|
||
|
}
|
||
|
//OPTIONS_INIT_END
|
||
|
|
||
|
//CUSTOM_OPTIONS_INIT_START
|
||
|
//CUSTOM_OPTIONS_INIT_END
|
||
|
|
||
|
Object.assign(this, options);
|
||
|
|
||
|
//CUSTOM_BEFORE_INIT_START
|
||
|
//CUSTOM_BEFORE_INIT_END
|
||
|
|
||
|
this.emit(Event.OBJECT_INITIALIZED, this);
|
||
|
}
|
||
|
//CONSTRUCTOR_EXTENDS_TEMPLATE_END
|
||
|
|
||
|
//CREATE_INSTANCE_TEMPLATE_START
|
||
|
createInstance() {
|
||
|
|
||
|
//CREATE_INSTANCE_BEFORE_START
|
||
|
this.emit(Event.CREATE_INSTANCE_BEFORE, this);
|
||
|
//CREATE_INSTANCE_BEFORE_END
|
||
|
|
||
|
//CUSTOM_CREATE_INSTANCE_START
|
||
|
//CUSTOM_CREATE_INSTANCE_END
|
||
|
|
||
|
//CREATE_INSTANCE_AFTER_START
|
||
|
this[this.runtime].createInstance(
|
||
|
this,
|
||
|
{
|
||
|
//CREATE_INSTANCE_OPTIONS_START
|
||
|
'isPublic': this.isPublic,
|
||
|
'applicationMode': this.applicationMode
|
||
|
//CREATE_INSTANCE_OPTIONS_END
|
||
|
}
|
||
|
)
|
||
|
|
||
|
this.emit(Event.INSTANCE_CREATED, this);
|
||
|
//CREATE_INSTANCE_AFTER_END
|
||
|
|
||
|
}
|
||
|
//CREATE_INSTANCE_TEMPLATE_END
|
||
|
|
||
|
//UPDATE_INSTANCE_TEMPLATE_START
|
||
|
updateInstance(property) {
|
||
|
|
||
|
//UPDATE_INSTANCE_BEFORE_START
|
||
|
this.emit(Event.UPDATE_INSTANCE_BEFORE, this);
|
||
|
//UPDATE_INSTANCE_BEFORE_END
|
||
|
|
||
|
//UPDATE_INSTANCE_OPTIONS_START
|
||
|
if (property === 'isPublic') {
|
||
|
this.instance.isPublic = this.isPublic;
|
||
|
return;
|
||
|
}
|
||
|
if (property === 'applicationMode') {
|
||
|
this.instance.applicationMode = this.applicationMode;
|
||
|
return;
|
||
|
}
|
||
|
//UPDATE_INSTANCE_OPTIONS_END
|
||
|
|
||
|
//CUSTOM_UPDATE_INSTANCE_START
|
||
|
//CUSTOM_UPDATE_INSTANCE_END
|
||
|
|
||
|
//UPDATE_INSTANCE_AFTER_START
|
||
|
this.emit(Event.UPDATE_INSTANCE_AFTER, this);
|
||
|
//UPDATE_INSTANCE_AFTER_END
|
||
|
|
||
|
}
|
||
|
//UPDATE_INSTANCE_TEMPLATE_END
|
||
|
|
||
|
//UPDATE_FROM_INSTANCE_TEMPLATE_START
|
||
|
updateFromInstance(property) {
|
||
|
|
||
|
//UPDATE_FROM_INSTANCE_BEFORE_START
|
||
|
this.emit(Event.UPDATE_FROM_INSTANCE_BEFORE, this);
|
||
|
//UPDATE_FROM_INSTANCE_BEFORE_END
|
||
|
|
||
|
//UPDATE_FROM_INSTANCE_OPTIONS_START
|
||
|
if (property === 'isPublic' || property === 'all') {
|
||
|
this.isPublic = this.instance.isPublic;
|
||
|
if (property !== 'all') {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
if (property === 'applicationMode' || property === 'all') {
|
||
|
this.applicationMode = this.instance.applicationMode;
|
||
|
if (property !== 'all') {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
//UPDATE_FROM_INSTANCE_OPTIONS_END
|
||
|
|
||
|
//CUSTOM_UPDATE_FROM_INSTANCE_START
|
||
|
//CUSTOM_UPDATE_FROM_INSTANCE_END
|
||
|
|
||
|
//UPDATE_FROM_INSTANCE_AFTER_START
|
||
|
this.emit(Event.UPDATE_FROM_INSTANCE_AFTER, this);
|
||
|
//UPDATE_FROM_INSTANCE_AFTER_END
|
||
|
|
||
|
}
|
||
|
//UPDATE_FROM_INSTANCE_TEMPLATE_END
|
||
|
|
||
|
//DISPOSE_TEMPLATE_START
|
||
|
dispose() {
|
||
|
|
||
|
//DISPOSE_BEFORE_START
|
||
|
this.subscribe(
|
||
|
Event.INSTANCE_DISPOSED,
|
||
|
function(object) {
|
||
|
if (object === this) {
|
||
|
this.emit(Event.DISPOSE_OBJECT, this);
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
//DISPOSE_BEFORE_END
|
||
|
|
||
|
//CUSTOM_DISPOSE_START
|
||
|
//CUSTOM_DISPOSE_END
|
||
|
|
||
|
//DISPOSE_AFTER_START
|
||
|
this.disposeInstance();
|
||
|
//DISPOSE_AFTER_END
|
||
|
|
||
|
}
|
||
|
//DISPOSE_TEMPLATE_END
|
||
|
|
||
|
//DISPOSE_INSTANCE_TEMPLATE_START
|
||
|
disposeInstance() {
|
||
|
|
||
|
//DISPOSE_INSTANCE_BEFORE_START
|
||
|
console.log('Disposing instance of ' + this.name);
|
||
|
//DISPOSE_INSTANCE_BEFORE_END
|
||
|
|
||
|
//CUSTOM_DISPOSE_INSTANCE_START
|
||
|
//CUSTOM_DISPOSE_INSTANCE_END
|
||
|
|
||
|
//DISPOSE_INSTANCE_AFTER_START
|
||
|
this.emit(Event.DISPOSE_INSTANCE, this);
|
||
|
//DISPOSE_INSTANCE_AFTER_END
|
||
|
|
||
|
}
|
||
|
//DISPOSE_INSTANCE_TEMPLATE_END
|
||
|
|
||
|
//CUSTOM_IMPLEMENTATION_START
|
||
|
//CUSTOM_IMPLEMENTATION_END
|
||
|
|
||
|
}
|
||
|
|
||
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_START
|
||
|
Project.CAMERA_INDEX_EDIT = 0x0;
|
||
|
Project.CAMERA_INDEX_RUN = 0x1;
|
||
|
|
||
|
Project.APPLICATION_MODE_EDIT = Project.CAMERA_INDEX_EDIT;
|
||
|
Project.APPLICATION_MODE_RUN = Project.CAMERA_INDEX_RUN;
|
||
|
|
||
|
Project.RENDERER_INDEX_MAIN = 0x0;
|
||
|
|
||
|
Project.RENDER_TARGET_INDEX_NONE = -0x1;
|
||
|
//CUSTOM_OUT_OF_CLASS_IMPLEMENTATION_END
|
||
|
|
||
|
module.exports = Project;
|