Skip to content

Commit

Permalink
Merge pull request cocos#50 from shrinktofit/renderable-component
Browse files Browse the repository at this point in the history
Renderable component
  • Loading branch information
jerrywwl authored Jan 15, 2019
2 parents 06d8ab9 + 437755c commit e3c23e1
Showing 1 changed file with 23 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -1,30 +1,27 @@
//@ts-check
// @ts-check
import { Component } from '../../components/component';
import { _decorator } from '../../core/data/index';
import { Material } from "../assets/material";
import { Component } from "../../components/component";
import { Material } from '../assets/material';
const { ccclass, property } = _decorator;

@ccclass('cc.RenderableComponent')
export default class RenderableComponent extends Component {
/**
* @type {Material[]}
*/
@property([Material])
_materials = [];
private _materials: Material[] = [];

constructor() {
constructor () {
super();
}

@property({
type: [Material],
displayName: 'Materials'
displayName: 'Materials',
})
get sharedMaterials() {
get sharedMaterials () {
return this._materials;
}

set sharedMaterials(val) {
set sharedMaterials (val) {
// 因为现在编辑器的做法是,当这个val传进来时,内部的materials已经被修改了。
// 我们没办法做到上面的最优化,只能先清理ModelComponent里所有Submodel的材质,再重新关联。
this._clearMaterials();
Expand All @@ -37,14 +34,14 @@ export default class RenderableComponent extends Component {
* !#ch 模型材质
* @type {Material[]}
*/
get materials() {
get materials () {
for (let i = 0; i < this._materials.length; i++) {
this._materials[i] = this.getMaterial(i);
this._materials[i] = this.getMaterial(i)!;
}
return this._materials;
}

set materials(val) {
set materials (val) {
const dLen = val.length - this._materials.length;
if (dLen > 0) {
this._materials = this._materials.concat(new Array(dLen).fill(null));
Expand All @@ -62,51 +59,51 @@ export default class RenderableComponent extends Component {
* !#ch 返回相对应序号的材质
* @param {Number} idx - Look for the material list number
*/
getMaterial(idx) {
public getMaterial (idx) {
if (idx < 0 || idx >= this._materials.length || this._materials[idx] == null) {
return null;
}

let instantiated = Material.getInstantiatedMaterial(this._materials[idx], this);
const instantiated = Material.getInstantiatedMaterial(this._materials[idx], this);
if (instantiated !== this._materials[idx]) {
this.setMaterial(instantiated, idx);
}

return this._materials[idx];
}

getSharedMaterial(idx) {
public getSharedMaterial (idx) {
if (idx < 0 || idx >= this._materials.length) {
return null;
}
return this._materials[idx];
}

get material() {
get material () {
return this.getMaterial(0);
}

get sharedMaterial() {
return this.getSharedMaterial(0);
}

set material(val) {
set material (val) {
if (this._materials.length === 1 && this._materials[0] === val) {
return;
}
this.setMaterial(val, 0);
}

setMaterial(material, index) {
get sharedMaterial () {
return this.getSharedMaterial(0);
}

public setMaterial (material, index) {
this._materials[index] = material;
this._onMaterialModified(index, material);
}

_onMaterialModified(index, material) {
public _onMaterialModified (index, material) {

}

_clearMaterials() {
public _clearMaterials () {

}
}

0 comments on commit e3c23e1

Please sign in to comment.