r3-v2/dist/r3-node/r3-project.js

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;