r3-legacy/src/r3-d3-material-points.js

115 lines
2.7 KiB
JavaScript

/**
* R3.D3.Material.Points
* @param graphics
* @param apiMaterialPoints
* @constructor
*/
R3.D3.Material.Points = function(
graphics,
apiMaterialPoints
) {
this.graphics = graphics;
this.graphics.isNotThreeThrow();
if (R3.Utils.UndefinedOrNull(apiMaterialPoints)) {
apiMaterialPoints = {
materialType : R3.D3.API.Material.MATERIAL_TYPE_POINTS
};
}
R3.D3.API.Material.Points.call(
this,
apiMaterialPoints,
apiMaterialPoints.color,
apiMaterialPoints.diffuseMap,
apiMaterialPoints.size,
apiMaterialPoints.sizeAttenuation
);
this.color = new R3.Color(
this.graphics,
this.color,
this
);
if (this.diffuseMap instanceof R3.D3.API.Texture) {
this.diffuseMap = R3.Component.ConstructFromObject(this.diffuseMap);
}
R3.D3.Material.call(
this,
this.graphics,
this
);
};
R3.D3.Material.Points.prototype = Object.create(R3.D3.Material.prototype);
R3.D3.Material.Points.prototype.constructor = R3.D3.Material.Points;
/**
* Creates an instance of our texture object
* @returns {*}
*/
R3.D3.Material.Points.prototype.createInstance = function() {
this.instance = new THREE.PointsMaterial(
{
color : this.color.instance,
map : this.diffuseMap ? this.diffuseMap.instance : null,
size : this.size,
sizeAttenuation : this.sizeAttenuation
}
);
R3.D3.Material.prototype.createInstance.call(this);
};
/**
* Updates the instance with the current state
*/
R3.D3.Material.Points.prototype.updateInstance = function(property) {
if (property === 'color') {
this.instance.color = this.color.instance;
return;
}
if (property === 'diffuseMap') {
this.assignTexture('map', property);
return;
}
if (property === 'size') {
this.instance.size = this.size;
return;
}
if (property === 'sizeAttenuation') {
this.instance.sizeAttenuation = this.sizeAttenuation;
this.instance.needsUpdate = true;
return;
}
R3.D3.Material.prototype.updateInstance.call(this, property);
};
/**
* Converts a R3.D3.Material.Points to a R3.D3.API.Material.Points
* @returns {R3.D3.API.Material.Points}
*/
R3.D3.Material.Points.prototype.toApiObject = function() {
var apiMaterial = R3.D3.Material.prototype.toApiObject.call(this);
var apiMaterialPoints = new R3.D3.API.Material.Points(
apiMaterial,
this.color.toApiObject(),
R3.Utils.IdOrNull(this.diffuseMap),
this.size,
this.sizeAttenuation
);
return apiMaterialPoints;
};