diff --git a/src/game-lib-material.js b/src/game-lib-material.js index c906077..3bc521d 100644 --- a/src/game-lib-material.js +++ b/src/game-lib-material.js @@ -540,7 +540,7 @@ GameLib.D3.Material.prototype.createInstance = function(update) { if ( (!instance) || - (instance && instance.materialType != this.materialType) + (instance && instance.type != this.materialType) ) { if (this.materialType == GameLib.D3.Material.MATERIAL_TYPE_STANDARD) { @@ -653,12 +653,67 @@ GameLib.D3.Material.prototype.createInstance = function(update) { morphTargets: this.morphTargets, morphNormals: this.morphNormals }); + } else if (this.materialType == GameLib.D3.Material.MATERIAL_TYPE_POINTS) { + + instance = new this.graphics.instance.PointsMaterial({ + name: this.name, + opacity: this.opacity, + transparent: this.transparent, + blending: this.blending, + blendSrc: this.blendSrc, + blendDst: this.blendDst, + blendEquation: this.blendEquation, + depthTest: this.depthTest, + depthFunc: this.depthFunc, + depthWrite: this.depthWrite, + polygonOffset: this.polygonOffset, + polygonOffsetFactor: this.polygonOffsetFactor, + polygonOffsetUnits: this.polygonOffsetUnits, + alphaTest: this.alphaTest, + clippingPlanes: this.clippingPlanes, + clipShadows: this.clipShadows, + overdraw: this.overdraw, + visible: this.visible, + side: this.side, + color: new this.graphics.instance.Color( + this.color.r, + this.color.g, + this.color.b + ), + size: this.pointSize, + sizeAttenuation: this.pointSizeAttenuation, + vertexColors: GameLib.D3.Material.TYPE_NO_COLORS, + fog: this.fog + }); } else { console.log("material type is not implemented yet: " + this.materialType + " - material indexes could be screwed up"); } } + if (update) { + + for (var property in instance) { + + if (property == 'size') { + instance[property] = this.pointSize; + } + + if (property == 'sizeAttenuation') { + instance[property] = this.pointSizeAttenuation; + } + + if ( + this.hasOwnProperty(property) && + instance.hasOwnProperty(property) + ) { + instance[property] = this[property]; + } + } + + instance.needsUpdate = true; + } + return instance; }; diff --git a/src/game-lib-mesh.js b/src/game-lib-mesh.js index 89c9b7e..d1bb499 100644 --- a/src/game-lib-mesh.js +++ b/src/game-lib-mesh.js @@ -157,8 +157,9 @@ GameLib.D3.Mesh.API = function( * Mesh Type * @type {number} */ -GameLib.D3.Mesh.TYPE_NORMAL = 0; -GameLib.D3.Mesh.TYPE_SKINNED = 1; +GameLib.D3.Mesh.TYPE_NORMAL = 0; +GameLib.D3.Mesh.TYPE_SKINNED = 1; +GameLib.D3.Mesh.TYPE_CURVE = 2; /** * Creates a mesh instance or updates it @@ -299,6 +300,10 @@ GameLib.D3.Mesh.prototype.createInstance = function(update) { instance = new this.graphics.instance.Mesh(instanceGeometry, instanceMaterial); } + if (this.meshType == GameLib.D3.Mesh.TYPE_CURVE) { + instance = new this.graphics.instance.Points(instanceGeometry, instanceMaterial); + } + if (this.meshType == GameLib.D3.Mesh.TYPE_SKINNED) { var bones = this.skeleton.bones; diff --git a/src/game-lib-scene.js b/src/game-lib-scene.js index bc112f6..ca809d3 100644 --- a/src/game-lib-scene.js +++ b/src/game-lib-scene.js @@ -374,6 +374,7 @@ GameLib.D3.Scene.LoadScene = function( gameLibTextureMap[map].texture = new GameLib.D3.Texture( new GameLib.D3.Texture.API( apiTexture.id, + map, apiTexture.name, uploadUrl + '/' + apiTexture.imagePath, apiTexture.wrapS, diff --git a/src/game-lib-texture-maps.js b/src/game-lib-texture-maps.js index 95d42b3..1485ea5 100644 --- a/src/game-lib-texture-maps.js +++ b/src/game-lib-texture-maps.js @@ -42,4 +42,32 @@ GameLib.D3.TextureMaps = function TextureMaps( this.normal = normal; this.roughness = roughness; this.specular = specular; +}; + +GameLib.D3.TextureMaps.API = function TextureMaps( + alpha, + ao, + bump, + diffuse, + displacement, + emissive, + environment, + light, + metalness, + normal, + roughness, + specular +) { + this[GameLib.D3.Texture.TEXTURE_TYPE_ALPHA] == alpha; + this[GameLib.D3.Texture.TEXTURE_TYPE_AO] == ao; + this[GameLib.D3.Texture.TEXTURE_TYPE_BUMP] == bump; + this[GameLib.D3.Texture.TEXTURE_TYPE_DIFFUSE] == diffuse; + this[GameLib.D3.Texture.TEXTURE_TYPE_DISPLACEMENT] == displacement; + this[GameLib.D3.Texture.TEXTURE_TYPE_EMISSIVE] == emissive; + this[GameLib.D3.Texture.TEXTURE_TYPE_ENVIRONMENT] == environment; + this[GameLib.D3.Texture.TEXTURE_TYPE_LIGHT] == light; + this[GameLib.D3.Texture.TEXTURE_TYPE_METALNESS] == metalness; + this[GameLib.D3.Texture.TEXTURE_TYPE_NORMAL] == normal; + this[GameLib.D3.Texture.TEXTURE_TYPE_ROUGHNESS] == roughness; + this[GameLib.D3.Texture.TEXTURE_TYPE_SPECULAR] == specular; }; \ No newline at end of file diff --git a/src/game-lib-texture.js b/src/game-lib-texture.js index d578728..dbf985e 100644 --- a/src/game-lib-texture.js +++ b/src/game-lib-texture.js @@ -54,6 +54,7 @@ GameLib.D3.Texture.prototype.loadTexture = function(imageFactory) { /** * Raw Texture API object - should always correspond with the Texture Schema * @param id + * @param typeId * @param name * @param imagePath * @param wrapS @@ -77,6 +78,7 @@ GameLib.D3.Texture.prototype.loadTexture = function(imageFactory) { */ GameLib.D3.Texture.API = function( id, + typeId, name, imagePath, wrapS, @@ -102,13 +104,18 @@ GameLib.D3.Texture.API = function( } this.id = id; + if (GameLib.D3.Utils.UndefinedOrNull(typeId)) { + typeId = GameLib.D3.Texture.TEXTURE_TYPE_DIFFUSE; + } + this.typeId = typeId; + if (GameLib.D3.Utils.UndefinedOrNull(name)) { - name = 'Texture (' + image.name + ')'; + name = 'Texture (' + typeId + ')'; } this.name = name; if (GameLib.D3.Utils.UndefinedOrNull(imagePath)) { - throw new Error('Cannot create textures with no image path set'); + imagePath = null; } this.imagePath = imagePath; @@ -268,6 +275,19 @@ GameLib.D3.Texture.TYPE_RGBM7_ENCODING = 3004; GameLib.D3.Texture.TYPE_RGBM16_ENCODING = 3005; GameLib.D3.Texture.TYPE_RGBD_ENCODING = 3006; // MAXRANGE IS 256. +GameLib.D3.Texture.TEXTURE_TYPE_ALPHA = 'alpha'; +GameLib.D3.Texture.TEXTURE_TYPE_AO = 'ao'; +GameLib.D3.Texture.TEXTURE_TYPE_BUMP = 'bump'; +GameLib.D3.Texture.TEXTURE_TYPE_DIFFUSE = 'diffuse'; +GameLib.D3.Texture.TEXTURE_TYPE_DISPLACEMENT = 'displacement'; +GameLib.D3.Texture.TEXTURE_TYPE_EMISSIVE = 'emissive'; +GameLib.D3.Texture.TEXTURE_TYPE_ENVIRONMENT = 'environment'; +GameLib.D3.Texture.TEXTURE_TYPE_LIGHT = 'light'; +GameLib.D3.Texture.TEXTURE_TYPE_METALNESS = 'metalness'; +GameLib.D3.Texture.TEXTURE_TYPE_NORMAL = 'normal'; +GameLib.D3.Texture.TEXTURE_TYPE_ROUGHNESS = 'roughness'; +GameLib.D3.Texture.TEXTURE_TYPE_SPECULAR = 'specular'; + /** * Creates an instance of our texture object * @returns {GameLib.D3.Texture|THREE.SoftwareRenderer.Texture|THREE.Texture|*|Texture}