mirror of
https://github.com/smallmain/cocos-enhance-kit.git
synced 2025-01-14 06:51:08 +00:00
182 lines
3.3 KiB
JavaScript
182 lines
3.3 KiB
JavaScript
// Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd.
|
|
|
|
import { FixedArray } from '../memop';
|
|
|
|
/**
|
|
* A representation of the scene
|
|
*/
|
|
class Scene {
|
|
/**
|
|
* Setup a default empty scene
|
|
*/
|
|
constructor(app) {
|
|
this._lights = new FixedArray(16);
|
|
this._models = new FixedArray(16);
|
|
this._cameras = new FixedArray(16);
|
|
this._debugCamera = null;
|
|
this._app = app;
|
|
|
|
// NOTE: we don't use pool for views (because it's less changed and it doesn't have poolID)
|
|
this._views = [];
|
|
}
|
|
|
|
_add(pool, item) {
|
|
if (item._poolID !== -1) {
|
|
return;
|
|
}
|
|
|
|
pool.push(item);
|
|
item._poolID = pool.length - 1;
|
|
}
|
|
|
|
_remove(pool, item) {
|
|
if (item._poolID === -1) {
|
|
return;
|
|
}
|
|
|
|
pool.data[pool.length-1]._poolID = item._poolID;
|
|
pool.fastRemove(item._poolID);
|
|
item._poolID = -1;
|
|
}
|
|
|
|
/**
|
|
* reset the model viewIDs
|
|
*/
|
|
reset() {
|
|
for (let i = 0; i < this._models.length; ++i) {
|
|
let model = this._models.data[i];
|
|
model._viewID = -1;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Set the debug camera
|
|
* @param {Camera} cam the debug camera
|
|
*/
|
|
setDebugCamera(cam) {
|
|
this._debugCamera = cam;
|
|
}
|
|
|
|
/**
|
|
* Get the count of registered cameras
|
|
* @returns {number} camera count
|
|
*/
|
|
getCameraCount() {
|
|
return this._cameras.length;
|
|
}
|
|
|
|
/**
|
|
* Get the specified camera
|
|
* @param {number} idx camera index
|
|
* @returns {Camera} the specified camera
|
|
*/
|
|
getCamera(idx) {
|
|
return this._cameras.data[idx];
|
|
}
|
|
|
|
/**
|
|
* register a camera
|
|
* @param {Camera} camera the new camera
|
|
*/
|
|
addCamera(camera) {
|
|
this._add(this._cameras, camera);
|
|
}
|
|
|
|
/**
|
|
* remove a camera
|
|
* @param {Camera} camera the camera to be removed
|
|
*/
|
|
removeCamera(camera) {
|
|
this._remove(this._cameras, camera);
|
|
}
|
|
|
|
/**
|
|
* Get the count of registered model
|
|
* @returns {number} model count
|
|
*/
|
|
getModelCount() {
|
|
return this._models.length;
|
|
}
|
|
|
|
/**
|
|
* Get the specified model
|
|
* @param {number} idx model index
|
|
* @returns {Model} the specified model
|
|
*/
|
|
getModel(idx) {
|
|
return this._models.data[idx];
|
|
}
|
|
|
|
/**
|
|
* register a model
|
|
* @param {Model} model the new model
|
|
*/
|
|
addModel(model) {
|
|
this._add(this._models, model);
|
|
}
|
|
|
|
/**
|
|
* remove a model
|
|
* @param {Model} model the model to be removed
|
|
*/
|
|
removeModel(model) {
|
|
this._remove(this._models, model);
|
|
}
|
|
|
|
/**
|
|
* Get the count of registered light
|
|
* @returns {number} light count
|
|
*/
|
|
getLightCount() {
|
|
return this._lights.length;
|
|
}
|
|
|
|
/**
|
|
* Get the specified light
|
|
* @param {number} idx light index
|
|
* @returns {Light} the specified light
|
|
*/
|
|
getLight(idx) {
|
|
return this._lights.data[idx];
|
|
}
|
|
|
|
/**
|
|
* register a light
|
|
* @param {Light} light the new light
|
|
*/
|
|
addLight(light) {
|
|
this._add(this._lights, light);
|
|
}
|
|
|
|
/**
|
|
* remove a light
|
|
* @param {Light} light the light to be removed
|
|
*/
|
|
removeLight(light) {
|
|
this._remove(this._lights, light);
|
|
}
|
|
|
|
/**
|
|
* register a view
|
|
* @param {View} view the new view
|
|
*/
|
|
addView(view) {
|
|
if (this._views.indexOf(view) === -1) {
|
|
this._views.push(view);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* remove a view
|
|
* @param {View} view the view to be removed
|
|
*/
|
|
removeView(view) {
|
|
let idx = this._views.indexOf(view);
|
|
if (idx !== -1) {
|
|
this._views.splice(idx, 1);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default Scene;
|